mirror of
https://github.com/luxfi/cli.git
synced 2026-10-30 17:01:20 +00:00
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
// Copyright (C) 2025, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
package evm
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
warp "github.com/luxfi/warp"
|
|
"github.com/luxfi/evm/v2/core/types"
|
|
subnetEvmWarp "github.com/luxfi/evm/v2/precompile/contracts/warp"
|
|
)
|
|
|
|
// get all unsigned warp messages contained in [logs]
|
|
func GetWarpMessagesFromLogs(
|
|
logs []*types.Log,
|
|
) []*warp.UnsignedMessage {
|
|
messages := []*warp.UnsignedMessage{}
|
|
for _, txLog := range logs {
|
|
ifaceMsg, err := subnetEvmWarp.UnpackSendWarpEventDataToMessage(txLog.Data)
|
|
if err == nil {
|
|
// Convert iface.UnsignedMessage to warp.UnsignedMessage
|
|
warpMsg := &warp.UnsignedMessage{
|
|
NetworkID: ifaceMsg.NetworkID,
|
|
SourceChainID: ifaceMsg.SourceChainID[:],
|
|
Payload: ifaceMsg.Payload,
|
|
}
|
|
messages = append(messages, warpMsg)
|
|
}
|
|
}
|
|
return messages
|
|
}
|
|
|
|
// get first unsigned warp message contained in [logs]
|
|
func ExtractWarpMessageFromLogs(
|
|
logs []*types.Log,
|
|
) (*warp.UnsignedMessage, error) {
|
|
messages := GetWarpMessagesFromLogs(logs)
|
|
if len(messages) == 0 {
|
|
return nil, fmt.Errorf("no warp message is present in evm logs")
|
|
}
|
|
return messages[0], nil
|
|
}
|
|
|
|
// get first unsigned warp message contained in [receipt]
|
|
func ExtractWarpMessageFromReceipt(
|
|
receipt *types.Receipt,
|
|
) (*warp.UnsignedMessage, error) {
|
|
if receipt == nil {
|
|
return nil, fmt.Errorf("empty receipt was given")
|
|
}
|
|
return ExtractWarpMessageFromLogs(receipt.Logs)
|
|
}
|