Help us shape the future of Go! Take the 2026 Go Developer Survey

evm

package
v1.39.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2026 License: MIT Imports: 39 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TriggerInputTxHash         = "evm-tx-hash"
	TriggerInputEventIndex     = "evm-event-index"
	TriggerInputReceiptTimeout = "evm-receipt-timeout"
)

CLI input keys consumed from chain.TriggerParams.ChainTypeInputs.

Variables

View Source
var SupportedChains = []chain.ChainConfig{

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA.Selector, Forwarder: "0x15fC6ae953E024d975e77382eEeC56A9101f9F88"},
	{Selector: chainselectors.ETHEREUM_MAINNET.Selector, Forwarder: "0xa3d1ad4ac559a6575a114998affb2fb2ec97a7d9"},
	{Selector: chainselectors.ETHEREUM_TESTNET_HOODI.Selector, Forwarder: "0x9eF6468C5f37b976E57d52054c693269479A784d"},

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_BASE_1.Selector, Forwarder: "0x82300bd7c3958625581cc2f77bc6464dcecdf3e5"},
	{Selector: chainselectors.ETHEREUM_MAINNET_BASE_1.Selector, Forwarder: "0x5e342a8438b4f5d39e72875fcee6f76b39cce548"},

	{Selector: chainselectors.AVALANCHE_TESTNET_FUJI.Selector, Forwarder: "0x2e7371a5d032489e4f60216d8d898a4c10805963"},
	{Selector: chainselectors.AVALANCHE_MAINNET.Selector, Forwarder: "0xdc21e279934ff6721cadfdd112dafb3261f09a2c"},

	{Selector: chainselectors.POLYGON_TESTNET_AMOY.Selector, Forwarder: "0x3675a5eb2286a3f87e8278fc66edf458a2e3bb74"},
	{Selector: chainselectors.POLYGON_MAINNET.Selector, Forwarder: "0xf458d621885e29a5003ea9bbba5280d54e19b1ce"},

	{Selector: chainselectors.BINANCE_SMART_CHAIN_TESTNET.Selector, Forwarder: "0xa238e42cb8782808dbb2f37e19859244ec4779b0"},
	{Selector: chainselectors.BINANCE_SMART_CHAIN_MAINNET.Selector, Forwarder: "0x6f3239bbb26e98961e1115aba83f8a282e5508c8"},

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_ARBITRUM_1.Selector, Forwarder: "0xd41263567ddfead91504199b8c6c87371e83ca5d"},
	{Selector: chainselectors.ETHEREUM_MAINNET_ARBITRUM_1.Selector, Forwarder: "0xd770499057619c9a76205fd4168161cf94abc532"},

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_OPTIMISM_1.Selector, Forwarder: "0xa2888380dff3704a8ab6d1cd1a8f69c15fea5ee3"},
	{Selector: chainselectors.ETHEREUM_MAINNET_OPTIMISM_1.Selector, Forwarder: "0x9119a1501550ed94a3f2794038ed9258337afa18"},

	{Selector: chainselectors.PRIVATE_TESTNET_ANDESITE.Selector, Forwarder: "0xcF4629d8DC7a5fa17F4D77233F5b953225669821"},

	{Selector: chainselectors.ETHEREUM_MAINNET_ZKSYNC_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_ZKSYNC_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.JOVAY_TESTNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.JOVAY_MAINNET.Selector, Forwarder: "0x2B3068C4B288A2CD1f8B3613b8f33ef7cEecadC4"},

	{Selector: chainselectors.PHAROS_ATLANTIC_TESTNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.PHAROS_MAINNET.Selector, Forwarder: "0x2B3068C4B288A2CD1f8B3613b8f33ef7cEecadC4"},

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_WORLDCHAIN_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.ETHEREUM_MAINNET_WORLDCHAIN_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.PLASMA_TESTNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.PLASMA_MAINNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_LINEA_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.ETHEREUM_MAINNET_LINEA_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.INK_TESTNET_SEPOLIA.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.ETHEREUM_MAINNET_INK_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.HYPERLIQUID_TESTNET.Selector, Forwarder: "0xB27fA1c28288c50542527F64BCda22C9FbAc24CB"},
	{Selector: chainselectors.HYPERLIQUID_MAINNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.APECHAIN_TESTNET_CURTIS.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.ARC_TESTNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.XLAYER_TESTNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.ETHEREUM_MAINNET_XLAYER_1.Selector, Forwarder: "0x2B3068C4B288A2CD1f8B3613b8f33ef7cEecadC4"},

	{Selector: chainselectors.MEGAETH_TESTNET_2.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.MEGAETH_MAINNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.CELO_SEPOLIA.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.CELO_MAINNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.GNOSIS_CHAIN_TESTNET_CHIADO.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.GNOSIS_CHAIN_MAINNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.CRONOS_TESTNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_MANTLE_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.ETHEREUM_MAINNET_MANTLE_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.TAC_TESTNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_UNICHAIN_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.ETHEREUM_TESTNET_SEPOLIA_SCROLL_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.ETHEREUM_MAINNET_SCROLL_1.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.SONIC_TESTNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.SONIC_MAINNET.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},

	{Selector: chainselectors.DTCC_TESTNET_ANDESITE.Selector, Forwarder: "0x6E9EE680ef59ef64Aa8C7371279c27E496b5eDc1"},
	{Selector: chainselectors.DTCC_MAINNET_APPCHAIN.Selector, Forwarder: "0xBefF2190E6F56C108cD748844Bbd18D4a70F1E21"},

	{Selector: chainselectors.ADI_TESTNET.Selector, Forwarder: "0x9eF6468C5f37b976E57d52054c693269479A784d"},
	{Selector: chainselectors.ADI_MAINNET.Selector, Forwarder: "0x6Aa382fb8762E1232936478DD9DbC04F637028f1"},

	{Selector: chainselectors.PRIVATE_TESTNET_RHYOLITE.Selector, Forwarder: "0xBefF2190E6F56C108cD748844Bbd18D4a70F1E21"},

	{Selector: chainselectors.PRIVATE_TESTNET_PUMICE.Selector, Forwarder: "0xBefF2190E6F56C108cD748844Bbd18D4a70F1E21"},

	{Selector: chainselectors.PRIVATE_TESTNET_QUARTZITE.Selector, Forwarder: "0xBefF2190E6F56C108cD748844Bbd18D4a70F1E21"},

	{Selector: chainselectors.MONAD_TESTNET.Selector, Forwarder: "0xB9F79d863261869B234c481D1f9A7af84AeAd192"},
	{Selector: chainselectors.MONAD_MAINNET.Selector, Forwarder: "0x9eF6468C5f37b976E57d52054c693269479A784d"},

	{Selector: chainselectors.T_REX_TESTNET.Selector, Forwarder: "0x53bC8B33F9Fd9cf5323b260CC078967cC3f30297"},

	{Selector: chainselectors.ROBINHOOD_TESTNET.Selector, Forwarder: "0x0b93082D9b3C7C97fAcd250082899BAcf3af3885"},

	{Selector: chainselectors.STABLE_TESTNET.Selector, Forwarder: "0x9081624a30231767C3093A5F2Ae1C57A4457C88F"},

	{Selector: chainselectors.TEMPO_TESTNET_MODERATO.Selector, Forwarder: "0x9eF6468C5f37b976E57d52054c693269479A784d"},

	{Selector: chainselectors.PRIVATE_TESTNET_BASALT.Selector, Forwarder: "0xBefF2190E6F56C108cD748844Bbd18D4a70F1E21"},
}

SupportedChains is the canonical list of EVM chains supported for simulation.

Functions

func ExtractLimits added in v1.22.0

func ExtractLimits(w *cresettings.Workflows) chain.Limits

func GetEVMTriggerLogFromValues

func GetEVMTriggerLogFromValues(ctx context.Context, ethClient *ethclient.Client, txHashStr string, eventIndex uint64, receiptTimeout time.Duration) (*evmpb.Log, error)

GetEVMTriggerLogFromValues fetches a log given tx hash string and event index. Used by the deterministic replay path (both interactive and non-interactive). receiptTimeout controls how long to wait for the transaction receipt before giving up.

func RunRPCHealthCheck

func RunRPCHealthCheck(clients map[uint64]chain.ChainClient, experimentalSelectors map[uint64]bool) error

RunRPCHealthCheck validates RPC connectivity for all configured EVM clients. The experimentalSelectors set identifies which selectors are experimental chains.

func SupportedChainNames added in v1.14.0

func SupportedChainNames() []string

SupportedChainNames returns the human-readable names of all supported EVM chains, sorted alphabetically.

func WaitForEVMTriggerLog added in v1.19.0

func WaitForEVMTriggerLog(ctx context.Context, ethClient *ethclient.Client, cfg WaitForLogConfig) (*evmpb.Log, error)

WaitForEVMTriggerLog blocks until a log matching the workflow's EVM log trigger config appears on chain, then converts and returns it. Cancel ctx (e.g. Ctrl+C) to abort the wait.

Status output is written with plain ui.Print/ui.Dim rather than a bubbletea spinner. Bubble Tea puts the terminal in raw mode, which strips the OS translation of Ctrl+C into SIGINT — so signal.NotifyContext in the simulator would never fire while a spinner was active and the wait could not be interrupted.

Types

type EVMChainCapabilities

type EVMChainCapabilities struct {
	EVMChains map[uint64]*ManualEVMChain
}

EVMChainCapabilities holds the EVM chain capability servers created for simulation.

func NewEVMChainCapabilities

func NewEVMChainCapabilities(
	ctx context.Context,
	lggr logger.Logger,
	registry *capreg.Registry,
	clients map[uint64]*ethclient.Client,
	forwarders map[uint64]string,
	privateKey *ecdsa.PrivateKey,
	dryRunChainWrite bool,
	limits chain.Limits,
) (*EVMChainCapabilities, error)

NewEVMChainCapabilities creates EVM chain capability servers and registers them with the capability registry. Cron and HTTP triggers are not created here — they are chain-agnostic and managed by the simulate command directly.

func (*EVMChainCapabilities) Close

func (c *EVMChainCapabilities) Close() error

Close closes all EVM chains.

func (*EVMChainCapabilities) Start

func (c *EVMChainCapabilities) Start(ctx context.Context) error

Start starts all configured EVM chains.

type EVMChainType

type EVMChainType struct {
	// contains filtered or unexported fields
}

EVMChainType implements chain.ChainType for EVM-based blockchains.

func (*EVMChainType) CollectCLIInputs

func (ct *EVMChainType) CollectCLIInputs(v *viper.Viper) map[string]string

func (*EVMChainType) ExecuteTrigger

func (ct *EVMChainType) ExecuteTrigger(ctx context.Context, selector uint64, registrationID string, triggerData interface{}) error

func (*EVMChainType) Name

func (ct *EVMChainType) Name() string

func (*EVMChainType) NewTriggerListener added in v1.19.0

func (ct *EVMChainType) NewTriggerListener(ctx context.Context, selector uint64, params chain.TriggerParams) (chain.TriggerListener, error)

func (*EVMChainType) ParseTriggerChainSelector

func (ct *EVMChainType) ParseTriggerChainSelector(triggerID string) (uint64, bool)

func (*EVMChainType) RegisterCapabilities

func (ct *EVMChainType) RegisterCapabilities(ctx context.Context, cfg chain.CapabilityConfig) ([]services.Service, error)

func (*EVMChainType) ResolveClients

func (ct *EVMChainType) ResolveClients(v *viper.Viper) (chain.ResolvedChains, error)

func (*EVMChainType) ResolveKey

func (ct *EVMChainType) ResolveKey(creSettings *settings.Settings, broadcast bool) (interface{}, error)

ResolveKey parses the user's ECDSA private key from settings. When broadcast is true, an invalid or default-sentinel key is a hard error. Otherwise a sentinel key is used with a warning so non-broadcast simulations can run.

func (*EVMChainType) ResolveTriggerData

func (ct *EVMChainType) ResolveTriggerData(ctx context.Context, selector uint64, params chain.TriggerParams) (interface{}, error)

ResolveTriggerData fetches the EVM log payload for the given selector from CLI-supplied inputs, falling back to live log subscription in interactive mode when no replay tx hash is given.

func (*EVMChainType) RunHealthCheck

func (ct *EVMChainType) RunHealthCheck(resolved chain.ResolvedChains) error

func (*EVMChainType) SupportedChains

func (ct *EVMChainType) SupportedChains() []chain.ChainConfig

func (*EVMChainType) Supports

func (ct *EVMChainType) Supports(selector uint64) bool

Supports reports whether an EVM chain capability is live for the selector.

type EVMLogTriggerListener added in v1.19.0

type EVMLogTriggerListener struct {
	// contains filtered or unexported fields
}

func NewEVMLogTriggerListener added in v1.19.0

func NewEVMLogTriggerListener(ctx context.Context, ethClient *ethclient.Client, cfg WaitForLogConfig) (*EVMLogTriggerListener, error)

func (*EVMLogTriggerListener) Next added in v1.19.0

func (l *EVMLogTriggerListener) Next(ctx context.Context) (interface{}, error)

type LimitedEVMChain

type LimitedEVMChain struct {
	// contains filtered or unexported fields
}

LimitedEVMChain wraps an evmserver.ClientCapability and enforces chain write report size and gas limits.

func NewLimitedEVMChain

func NewLimitedEVMChain(inner evmserver.ClientCapability, limits chain.Limits) *LimitedEVMChain

func (*LimitedEVMChain) AckEvent

func (l *LimitedEVMChain) AckEvent(ctx context.Context, triggerId string, eventId string, method string) caperrors.Error

func (*LimitedEVMChain) ChainSelector

func (l *LimitedEVMChain) ChainSelector() uint64

func (*LimitedEVMChain) Close

func (l *LimitedEVMChain) Close() error

func (*LimitedEVMChain) Description

func (l *LimitedEVMChain) Description() string

func (*LimitedEVMChain) HealthReport

func (l *LimitedEVMChain) HealthReport() map[string]error

func (*LimitedEVMChain) Initialise

func (*LimitedEVMChain) Name

func (l *LimitedEVMChain) Name() string

func (*LimitedEVMChain) Ready

func (l *LimitedEVMChain) Ready() error

func (*LimitedEVMChain) RegisterLogTrigger

func (*LimitedEVMChain) Start

func (l *LimitedEVMChain) Start(ctx context.Context) error

func (*LimitedEVMChain) UnregisterLogTrigger

func (l *LimitedEVMChain) UnregisterLogTrigger(ctx context.Context, triggerID string, metadata commonCap.RequestMetadata, input *evmcappb.FilterLogTriggerRequest) caperrors.Error

type ManualEVMChain added in v1.19.0

type ManualEVMChain struct {
	// contains filtered or unexported fields
}

func NewManualEVMChain added in v1.19.0

func NewManualEVMChain(inner evmserver.ClientCapability) *ManualEVMChain

func (*ManualEVMChain) AckEvent added in v1.19.0

func (m *ManualEVMChain) AckEvent(ctx context.Context, triggerID string, eventID string, method string) caperrors.Error

func (*ManualEVMChain) BalanceAt added in v1.19.0

func (*ManualEVMChain) CallContract added in v1.19.0

func (*ManualEVMChain) ChainSelector added in v1.19.0

func (m *ManualEVMChain) ChainSelector() uint64

func (*ManualEVMChain) Close added in v1.19.0

func (m *ManualEVMChain) Close() error

func (*ManualEVMChain) Description added in v1.19.0

func (m *ManualEVMChain) Description() string

func (*ManualEVMChain) EstimateGas added in v1.19.0

func (*ManualEVMChain) FilterLogs added in v1.19.0

func (*ManualEVMChain) HealthReport added in v1.19.0

func (m *ManualEVMChain) HealthReport() map[string]error

func (*ManualEVMChain) Initialise added in v1.19.0

func (m *ManualEVMChain) Initialise(ctx context.Context, dependencies core.StandardCapabilitiesDependencies) error

func (*ManualEVMChain) ManualTrigger added in v1.19.0

func (m *ManualEVMChain) ManualTrigger(ctx context.Context, triggerID string, log *evmcappb.Log) error

func (*ManualEVMChain) Name added in v1.19.0

func (m *ManualEVMChain) Name() string

func (*ManualEVMChain) Ready added in v1.19.0

func (m *ManualEVMChain) Ready() error

func (*ManualEVMChain) RegisterLogTrigger added in v1.19.0

func (m *ManualEVMChain) RegisterLogTrigger(ctx context.Context, triggerID string, metadata commonCap.RequestMetadata, input *evmcappb.FilterLogTriggerRequest) (<-chan commonCap.TriggerAndId[*evmcappb.Log], caperrors.Error)

func (*ManualEVMChain) Start added in v1.19.0

func (m *ManualEVMChain) Start(ctx context.Context) error

func (*ManualEVMChain) UnregisterLogTrigger added in v1.19.0

func (m *ManualEVMChain) UnregisterLogTrigger(ctx context.Context, triggerID string, metadata commonCap.RequestMetadata, input *evmcappb.FilterLogTriggerRequest) caperrors.Error

func (*ManualEVMChain) WriteReport added in v1.19.0

type WaitForLogConfig added in v1.19.0

type WaitForLogConfig struct {
	Selector     uint64
	Filter       *evmpb.FilterLogTriggerRequest
	WorkflowName string
	// EventRateLimit enforces LogTrigger.EventRateLimit when set.
	EventRateLimit *config.Rate
	// PollInterval overrides the polling cadence for tests. Zero means default.
	PollInterval time.Duration
	// NowBlock overrides the initial "latest block" lookup for tests. When nil,
	// HeaderByNumber(nil) is used.
	NowBlock *big.Int
}

WaitForLogConfig describes a workflow's EVM log trigger subscription so the simulator can wait for the next matching on-chain event.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL