Documentation ¶
Index ¶
- Constants
- Variables
- func CreateIn1Pass(c *Client, content string, vaultId string) error
- func CreateOrAppendToJsonArray(filePath string, newItem any) error
- func DeleteFrom1Pass(c *Client, vaultId string) error
- func DoesPragmaSupportCustomRevert(pragma Pragma) bool
- func EtherToWei(eth *big.Float) *big.Int
- func ExistsIn1Pass(c *Client, vaultId string) (bool, error)
- func LoadDeployedContracts(filename string) (map[string]string, error)
- func NewAddress() (string, string, error)
- func NewEphemeralKeys(addrs int64) ([]string, error)
- func OpenJsonFileAsStruct(path string, v any) error
- func ReplaceIn1Pass(c *Client, content string, vaultId string) error
- func ReturnFunds(c *Client, toAddr string) error
- func ReturnFundsFromKeyFileAndUpdateIt(c *Client, toAddr string, opts *FundKeyFileCmdOpts) error
- func SaveDeployedContract(filename, contractName, address string) error
- func UpdateAndSplitFunds(c *Client, opts *FundKeyFileCmdOpts) error
- func UpdateKeyFileBalances(c *Client, opts *FundKeyFileCmdOpts) error
- func ValidateConfig(cfg *Config) error
- func WeiToEther(wei *big.Int) *big.Float
- type ABIFinder
- type ABIFinderResult
- type ABIStore
- type BlockStats
- type BlockStatsConfig
- type Call
- type CallOpt
- type Client
- func (m *Client) AnySyncedKey() int
- func (m *Client) CalculateGasEstimations(request GasEstimationRequest) GasEstimations
- func (m *Client) CalculateNetworkCongestionMetric(blocksNumber uint64, strategy string) (float64, error)
- func (m *Client) CalculateSubKeyFunding(addrs, gasPrice, rooKeyBuffer int64) (*FundingDetails, error)
- func (m *Client) CallMsgFromTx(tx *types.Transaction) (ethereum.CallMsg, error)
- func (m *Client) CreateOrUnmarshalKeyFile(opts *FundKeyFileCmdOpts) (*KeyFile, KeyfileStatus, error)
- func (m *Client) Decode(tx *types.Transaction, txErr error) (*DecodedTransaction, error)
- func (m *Client) DecodeCustomABIErr(txErr error) (string, error)
- func (m *Client) DeployContract(auth *bind.TransactOpts, name string, abi abi.ABI, bytecode []byte, ...) (DeploymentData, error)
- func (m *Client) DeployContractFromContractStore(auth *bind.TransactOpts, name string, params ...interface{}) (DeploymentData, error)
- func (m *Client) DeployDebugContract(subDbgAddr common.Address) (*network_debug_contract.NetworkDebugContract, common.Address, error)
- func (m *Client) DeployDebugSubContract() (*network_sub_debug_contract.NetworkDebugSubContract, common.Address, error)
- func (m *Client) DownloadContractAndGetPragma(address common.Address, block *big.Int) (Pragma, error)
- func (m *Client) EstimateGasLimitForFundTransfer(from, to common.Address, amount *big.Int) (uint64, error)
- func (m *Client) GetRootKeyAddress() (common.Address, error)
- func (m *Client) GetRootPrivateKey() (*ecdsa.PrivateKey, error)
- func (m *Client) GetSuggestedEIP1559Fees(ctx context.Context, priority string) (maxFeeCap *big.Int, adjustedTipCap *big.Int, err error)
- func (m *Client) GetSuggestedLegacyFees(ctx context.Context, priority string) (adjustedGasPrice *big.Int, err error)
- func (m *Client) HistoricalFeeData(priority string) (baseFee float64, historicalGasTipCap float64, err error)
- func (m *Client) MustGetRootKeyAddress() common.Address
- func (m *Client) MustGetRootPrivateKey() *ecdsa.PrivateKey
- func (m *Client) NewCallKeyOpts(keyNum int, o ...CallOpt) *bind.CallOpts
- func (m *Client) NewCallOpts(o ...CallOpt) *bind.CallOpts
- func (m *Client) NewDefaultGasEstimationRequest() GasEstimationRequest
- func (m *Client) NewTXKeyOpts(keyNum int, o ...TransactOpt) *bind.TransactOpts
- func (m *Client) NewTXOpts(o ...TransactOpt) *bind.TransactOpts
- func (m *Client) RetryTxAndDecode(f func() (*types.Transaction, error)) (*DecodedTransaction, error)
- func (m *Client) SaveDecodedCallsAsJson(dirname string) error
- func (m *Client) TransferETHFromKey(ctx context.Context, fromKeyNum int, to string, value *big.Int, ...) error
- func (m *Client) WaitMined(ctx context.Context, l zerolog.Logger, b bind.DeployBackend, ...) (*types.Receipt, error)
- type ClientOpt
- type CommonData
- type Config
- func (c *Config) GenerateContractMapFileName() string
- func (c *Config) GetMaxConcurrency() int
- func (c *Config) IsExperimentEnabled(experiment string) bool
- func (c *Config) IsSimulatedNetwork() bool
- func (c *Config) ParseKeys() ([]common.Address, []*ecdsa.PrivateKey, error)
- func (c *Config) ShoulSaveDeployedContractMap() bool
- type ContextErrorKey
- type ContractLoader
- type ContractMap
- func (c ContractMap) AddContract(addr, name string)
- func (c ContractMap) GetContractAddress(addr string) string
- func (c ContractMap) GetContractMap() map[string]string
- func (c ContractMap) GetContractName(addr string) string
- func (c ContractMap) IsKnownAddress(addr string) bool
- func (c ContractMap) Size() int
- type ContractStore
- type DecodableLog
- type DecodedCall
- type DecodedCommonLog
- type DecodedTransaction
- type DecodedTransactionLog
- type DeploymentData
- type Duration
- func (d Duration) Before(t time.Time) time.Time
- func (d Duration) Duration() time.Duration
- func (d Duration) IsInstant() bool
- func (d Duration) MarshalJSON() ([]byte, error)
- func (d Duration) MarshalText() ([]byte, error)
- func (d *Duration) Scan(v interface{}) (err error)
- func (d Duration) Shorter(od Duration) bool
- func (d Duration) String() string
- func (d *Duration) UnmarshalJSON(input []byte) error
- func (d *Duration) UnmarshalText(input []byte) error
- func (d Duration) Value() (driver.Value, error)
- type FundKeyFileCmdOpts
- type FundingDetails
- type GasEstimationRequest
- type GasEstimations
- type GasEstimator
- type GasPercentiles
- type GasSuggestions
- type KeyData
- type KeyFile
- type KeyFileSource
- type KeyNonce
- type KeyfileStatus
- type LFUHeaderCache
- type LogWithEventData
- type Network
- type NonceManager
- type NonceManagerCfg
- type NonceStatus
- type Pragma
- type TXCallTraceOutput
- type TXFourByteMetadataOutput
- type Trace
- type TraceLog
- type Tracer
- type TransactOpt
- func WithGasFeeCap(gasFeeCap *big.Int) TransactOpt
- func WithGasLimit(gasLimit uint64) TransactOpt
- func WithGasPrice(gasPrice *big.Int) TransactOpt
- func WithGasTipCap(gasTipCap *big.Int) TransactOpt
- func WithNoSend(noSend bool) TransactOpt
- func WithNonce(nonce *big.Int) TransactOpt
- func WithValue(value *big.Int) TransactOpt
- type TransactionLog
Constants ¶
const ( ErrEmptyConfigPath = "toml config path is empty, set SETH_CONFIG_PATH" ErrCreateABIStore = "failed to create ABI store" ErrReadingKeys = "failed to read keys" ErrCreateNonceManager = "failed to create nonce manager" ErrCreateTracer = "failed to create tracer" ErrReadContractMap = "failed to read deployed contract map" ErrNoKeyLoaded = "failed to load private key" ErrRpcHealthCheckFailed = "RPC health check failed ¯\\_(ツ)_/¯" ContractMapFilePattern = "deployed_contracts_%s_%s.toml" RevertedTransactionsFilePattern = "reverted_transactions_%s_%s.json" )
const ( ErrReadSethConfig = "failed to read TOML config for seth" ErrReadKeyFileConfig = "failed to read TOML keyfile config" ErrUnmarshalSethConfig = "failed to unmarshal TOML config for seth" ErrUnmarshalKeyFileConfig = "failed to unmarshal TOML keyfile config for seth" ErrEmptyRootPrivateKey = "no private keys were set, set %s=..." GETH = "Geth" ANVIL = "Anvil" CONFIG_FILE_ENV_VAR = "SETH_CONFIG_PATH" KEYFILE_BASE64_ENV_VAR = "SETH_KEYFILE_BASE64" KEYFILE_PATH_ENV_VAR = "SETH_KEYFILE_PATH" ROOT_PRIVATE_KEY_ENV_VAR = "SETH_ROOT_PRIVATE_KEY" NETWORK_ENV_VAR = "SETH_NETWORK" URL_ENV_VAR = "SETH_URL" ONE_PASS_VAULT_ENV_VAR = "SETH_ONE_PASS_VAULT" DefaultNetworkName = "Default" )
const ( Experiment_SlowFundsReturn = "slow_funds_return" Experiment_Eip1559FeeEqualier = "eip_1559_fee_equalizer" )
const ( ErrOpenABIFile = "failed to open ABI file" ErrParseABI = "failed to parse ABI file" ErrOpenBINFile = "failed to open BIN file" )
const ( ErrDecodeInput = "failed to decode transaction input" ErrDecodeOutput = "failed to decode transaction output" ErrDecodeLog = "failed to decode log" ErrDecodedLogNonIndexed = "failed to decode non-indexed log data" ErrDecodeILogIndexed = "failed to decode indexed log data" ErrNoTxData = "no tx data or it's less than 4 bytes" ErrRPCJSONCastError = "failed to cast CallMsg error as rpc.DataError" WarnNoContractStore = "ContractStore is nil, use seth.NewContractStore(...) to decode transactions" )
const ( Priority_Degen = "degen" //this is undocumented option, which we left for cases, when we need to set the highest gas price Priority_Fast = "fast" Priority_Standard = "standard" Priority_Slow = "slow" Congestion_Low = "low" Congestion_Medium = "medium" Congestion_High = "high" Congestion_VeryHigh = "extreme" )
const ( // each block has the same weight in the computation CongestionStrategy_Simple = "simple" // newer blocks have more weight in the computation CongestionStrategy_NewestFirst = "newest_first" )
const ( ErrKeySyncTimeout = "key sync timeout, consider increasing key_sync_timeout in seth.toml, or increasing the number of keys" ErrKeySync = "failed to sync the key" ErrNonce = "failed to get nonce" TimeoutKeyNum = -80001 )
const ( ErrNoTrace = "no trace found" ErrNoABIMethod = "no ABI method found" ErrNoAbiFound = "no ABI found in Contract Store" ErrNoFourByteFound = "no method signatures found in tracing data" ErrInvalidMethodSignature = "no method signature found or it's not 4 bytes long" WrnMissingCallTrace = "" /* 135-byte string literal not displayed */ FAILED_TO_DECODE = "failed to decode" UNKNOWN = "unknown" NO_DATA = "no data" CommentMissingABI = "Call not decoded due to missing ABI instance" )
const ( ErrEmptyKeyFile = "keyfile is empty" ErrInsufficientRootKeyBalance = "insufficient root key balance: %s" )
const ( MetadataNotFoundErr = "metadata section not found" InvalidMetadataLengthErr = "invalid metadata length" FailedToDecodeMetadataErr = "failed to decode metadata" NotCompiledWithSolcErr = "not compiled with solc" )
const (
ErrRPCConnectionRefused = "connection refused"
)
const (
ErrRetryTimeout = "retry timeout"
)
const (
LogLevelEnvVar = "SETH_LOG_LEVEL"
)
Variables ¶
var ( // Amount of funds that will be left on the root key, when splitting funds between ephemeral addresses ZeroInt64 int64 = 0 TracingLevel_None = "NONE" TracingLevel_Reverted = "REVERTED" TracingLevel_All = "ALL" TraceOutput_Console = "console" TraceOutput_JSON = "json" TraceOutput_DOT = "dot" )
var ( ZeroGasSuggestedErr = "either base fee or suggested tip is 0" BlockFetchingErr = "failed to fetch enough block headers for congestion calculation" )
var (
L zerolog.Logger
)
Functions ¶
func CreateIn1Pass ¶ added in v1.0.12
CreateIn1Pass creates a new keyfile in 1Password. If a keyfile with the same name already exists we will return an error. Keyfile will be added as a file attachment to a Secure Note in the specified vault.
func CreateOrAppendToJsonArray ¶ added in v0.1.2
CreateOrAppendToJsonArray appends to a JSON array in a file or creates a new JSON array if the file is empty or doesn't exist
func DeleteFrom1Pass ¶ added in v1.0.12
func DoesPragmaSupportCustomRevert ¶ added in v1.0.10
DoesPragmaSupportCustomRevert checks if the pragma version supports custom revert messages (must be >= 0.8.4)
func EtherToWei ¶ added in v0.1.3
EtherToWei converts an ETH float amount to wei
func ExistsIn1Pass ¶ added in v1.0.12
ExistsIn1Pass checks if a keyfile exists in the specified vault.
func NewEphemeralKeys ¶
NewEphemeralKeys creates a new ephemeral keyfile, can be used for simulated networks
func OpenJsonFileAsStruct ¶ added in v0.1.2
func ReplaceIn1Pass ¶ added in v1.0.12
ReplaceIn1Pass replaces the keyfile in 1Password. If a keyfile with the same name does not exist it will return an error.
func ReturnFunds ¶
ReturnFunds returns funds to the root key from all other keys
func ReturnFundsFromKeyFileAndUpdateIt ¶ added in v1.0.12
func ReturnFundsFromKeyFileAndUpdateIt(c *Client, toAddr string, opts *FundKeyFileCmdOpts) error
ReturnFundsFromKeyFileAndUpdateIt returns funds to the root key from all the test keys in keyfile (local or loaded from 1password) and updates the keyfile with the new balances
func SaveDeployedContract ¶
func UpdateAndSplitFunds ¶
func UpdateAndSplitFunds(c *Client, opts *FundKeyFileCmdOpts) error
UpdateAndSplitFunds splits funds from the root key into equal parts. If keyfile already exists it doesn't generate new keys, but uses existing ones. By default, it saves/read keyfile from 1Password. If you want to save it locally set opts.LocalKeyfile to true.
func UpdateKeyFileBalances ¶
func UpdateKeyFileBalances(c *Client, opts *FundKeyFileCmdOpts) error
UpdateKeyFileBalances updates file balances for private keys stored in either local keyfile or 1password
func ValidateConfig ¶ added in v1.0.10
Types ¶
type ABIFinder ¶
type ABIFinder struct { ContractMap ContractMap ContractStore *ContractStore }
func NewABIFinder ¶
func NewABIFinder(contractMap ContractMap, contractStore *ContractStore) ABIFinder
func (*ABIFinder) FindABIByMethod ¶
func (a *ABIFinder) FindABIByMethod(address string, signature []byte) (ABIFinderResult, error)
FindABIByMethod finds the ABI method and instance for the given contract address and signature If the contract address is known, it will use the ABI instance that is known to be at the address. If the contract address is not known, it will iterate over all known ABIs and check if any of them has a method with the given signature. If there are duplicates we will use the first ABI that matched.
type ABIFinderResult ¶
type ABIFinderResult struct { ABI abi.ABI Method *abi.Method DuplicateCount int // contains filtered or unexported fields }
func (*ABIFinderResult) ContractName ¶
func (a *ABIFinderResult) ContractName() string
type BlockStats ¶ added in v1.0.10
BlockStats is a block stats calculator
func NewBlockStats ¶ added in v1.0.10
func NewBlockStats(c *Client) (*BlockStats, error)
NewBlockStats creates a new instance of BlockStats
func (*BlockStats) CalculateBlockDurations ¶ added in v1.0.10
func (cs *BlockStats) CalculateBlockDurations(blocks []*types.Block) error
CalculateBlockDurations calculates and logs the duration, TPS, gas used, and gas limit between each consecutive block
type BlockStatsConfig ¶ added in v1.0.10
type BlockStatsConfig struct {
RPCRateLimit int `toml:"rpc_requests_per_second_limit"`
}
func (*BlockStatsConfig) Validate ¶ added in v1.0.10
func (cfg *BlockStatsConfig) Validate() error
type Call ¶
type Call struct { From string `json:"from"` Gas string `json:"gas"` GasUsed string `json:"gasUsed"` Input string `json:"input"` Logs []TraceLog `json:"logs"` Output string `json:"output"` To string `json:"to"` Type string `json:"type"` Value string `json:"value"` Error string `json:"error"` Calls []Call `json:"calls"` }
type CallOpt ¶
CallOpt is a functional option for bind.CallOpts
func WithBlockNumber ¶
WithBlockNumber sets blockNumber option for bind.CallOpts
func WithPending ¶
WithPending sets pending option for bind.CallOpts
type Client ¶
type Client struct { Cfg *Config Client *ethclient.Client Addresses []common.Address PrivateKeys []*ecdsa.PrivateKey ChainID int64 URL string Context context.Context CancelFunc context.CancelFunc Errors []error ContractStore *ContractStore NonceManager *NonceManager Tracer *Tracer ContractAddressToNameMap ContractMap ABIFinder *ABIFinder HeaderCache *LFUHeaderCache }
Client is a vanilla go-ethereum client with enhanced debug logging
func NewClientRaw ¶
func NewClientRaw( cfg *Config, addrs []common.Address, pkeys []*ecdsa.PrivateKey, opts ...ClientOpt, ) (*Client, error)
NewClientRaw creates a new raw seth client without dependencies
func NewClientWithConfig ¶
NewClientWithConfig creates a new seth client with all deps setup from config
func (*Client) AnySyncedKey ¶
AnySyncedKey returns the first synced key
func (*Client) CalculateGasEstimations ¶ added in v0.1.3
func (m *Client) CalculateGasEstimations(request GasEstimationRequest) GasEstimations
CalculateGasEstimations calculates gas estimations (price, tip/cap) or uses hardcoded values if estimation is disabled, estimation errors or network is a simulated one.
func (*Client) CalculateNetworkCongestionMetric ¶ added in v0.1.3
func (m *Client) CalculateNetworkCongestionMetric(blocksNumber uint64, strategy string) (float64, error)
CalculateNetworkCongestionMetric calculates a simple congestion metric based on the last N blocks according to selected strategy.
func (*Client) CalculateSubKeyFunding ¶
func (m *Client) CalculateSubKeyFunding(addrs, gasPrice, rooKeyBuffer int64) (*FundingDetails, error)
CalculateSubKeyFunding calculates all required params to split funds from the root key to N test keys
func (*Client) CallMsgFromTx ¶
func (m *Client) CallMsgFromTx(tx *types.Transaction) (ethereum.CallMsg, error)
CallMsgFromTx creates ethereum.CallMsg from tx, used in simulated calls
func (*Client) CreateOrUnmarshalKeyFile ¶
func (m *Client) CreateOrUnmarshalKeyFile(opts *FundKeyFileCmdOpts) (*KeyFile, KeyfileStatus, error)
func (*Client) Decode ¶
func (m *Client) Decode(tx *types.Transaction, txErr error) (*DecodedTransaction, error)
Decode waits for transaction to be minted, then decodes transaction inputs, outputs, logs and events and depending on 'tracing_level' it either returns immediatelly or if the level matches it traces all calls. If 'tracing_to_json' is saved we also save to JSON all that information. If transaction was reverted the error return will be revert error, not decoding error (that one if any will be logged). It means it can return both error and decoded transaction!
func (*Client) DecodeCustomABIErr ¶
DecodeCustomABIErr decodes typed Solidity errors
func (*Client) DeployContract ¶
func (m *Client) DeployContract(auth *bind.TransactOpts, name string, abi abi.ABI, bytecode []byte, params ...interface{}) (DeploymentData, error)
DeployContract deploys contract using ABI and bytecode passed to it, waits for transaction to be minted and contract really available at the address, so that when the method returns it's safe to interact with it. It also saves the contract address and ABI name to the contract map, so that we can use that, when tracing transactions. It is suggested to use name identical to the name of the contract Solidity file.
func (*Client) DeployContractFromContractStore ¶
func (m *Client) DeployContractFromContractStore(auth *bind.TransactOpts, name string, params ...interface{}) (DeploymentData, error)
DeployContractFromContractStore deploys contract from Seth's Contract Store, waits for transaction to be minted and contract really available at the address, so that when the method returns it's safe to interact with it. It also saves the contract address and ABI name to the contract map, so that we can use that, when tracing transactions. Name by which you refer the contract should be the same as the name of ABI file (you can omit the .abi suffix).
func (*Client) DeployDebugContract ¶
func (m *Client) DeployDebugContract(subDbgAddr common.Address) (*network_debug_contract.NetworkDebugContract, common.Address, error)
func (*Client) DeployDebugSubContract ¶
func (m *Client) DeployDebugSubContract() (*network_sub_debug_contract.NetworkDebugSubContract, common.Address, error)
func (*Client) DownloadContractAndGetPragma ¶ added in v1.0.10
func (*Client) EstimateGasLimitForFundTransfer ¶ added in v1.0.7
func (m *Client) EstimateGasLimitForFundTransfer(from, to common.Address, amount *big.Int) (uint64, error)
EstimateGasLimitForFundTransfer estimates gas limit for fund transfer
func (*Client) GetRootKeyAddress ¶ added in v1.0.9
GetRootKeyAddress returns the root key address from the client configuration. If no addresses are found, it returns an error. Root key address is the first address in the list of addresses.
func (*Client) GetRootPrivateKey ¶ added in v1.0.10
func (m *Client) GetRootPrivateKey() (*ecdsa.PrivateKey, error)
GetRootPrivateKey returns the private key of root key/address from the client configuration. If no private keys are found, it returns an error. Root private key is the first private key in the list of private keys.
func (*Client) GetSuggestedEIP1559Fees ¶ added in v0.1.3
func (m *Client) GetSuggestedEIP1559Fees(ctx context.Context, priority string) (maxFeeCap *big.Int, adjustedTipCap *big.Int, err error)
GetSuggestedEIP1559Fees returns suggested tip/fee cap calculated based on historical data, current congestion, and priority.
func (*Client) GetSuggestedLegacyFees ¶ added in v0.1.3
func (m *Client) GetSuggestedLegacyFees(ctx context.Context, priority string) (adjustedGasPrice *big.Int, err error)
GetSuggestedLegacyFees calculates the suggested gas price based on historical data, current congestion, and priority.
func (*Client) HistoricalFeeData ¶ added in v0.1.3
func (*Client) MustGetRootKeyAddress ¶ added in v1.0.9
MustGetRootKeyAddress returns the root key address from the client configuration. If no addresses are found, it panics. Root key address is the first address in the list of addresses.
func (*Client) MustGetRootPrivateKey ¶ added in v1.0.10
func (m *Client) MustGetRootPrivateKey() *ecdsa.PrivateKey
MustGetRootPrivateKey returns the private key of root key/address from the client configuration. If no private keys are found, it panics. Root private key is the first private key in the list of private keys.
func (*Client) NewCallKeyOpts ¶
NewCallKeyOpts returns a new sequential call options wrapper from the key N
func (*Client) NewCallOpts ¶
NewCallOpts returns a new sequential call options wrapper
func (*Client) NewDefaultGasEstimationRequest ¶ added in v1.0.7
func (m *Client) NewDefaultGasEstimationRequest() GasEstimationRequest
NewDefaultGasEstimationRequest creates a new default gas estimation request based on current network configuration
func (*Client) NewTXKeyOpts ¶
func (m *Client) NewTXKeyOpts(keyNum int, o ...TransactOpt) *bind.TransactOpts
NewTXKeyOpts returns a new transaction options wrapper, sets opts.GasPrice and opts.GasLimit from seth.toml or override with options
func (*Client) NewTXOpts ¶
func (m *Client) NewTXOpts(o ...TransactOpt) *bind.TransactOpts
NewTXOpts returns a new transaction options wrapper, Sets gas price/fee tip/cap and gas limit either based on TOML config or estimations.
func (*Client) RetryTxAndDecode ¶
func (m *Client) RetryTxAndDecode(f func() (*types.Transaction, error)) (*DecodedTransaction, error)
RetryTxAndDecode executes transaction several times, retries if connection is lost and decodes all the data
func (*Client) SaveDecodedCallsAsJson ¶
func (*Client) TransferETHFromKey ¶
type ClientOpt ¶
type ClientOpt func(c *Client)
ClientOpt is a client functional option
func WithABIFinder ¶
WithABIFinder ABIFinder functional option
func WithContractMap ¶
func WithContractMap(contractAddressToNameMap ContractMap) ClientOpt
WithContractMap contractAddressToNameMap functional option
func WithContractStore ¶
func WithContractStore(as *ContractStore) ClientOpt
WithContractStore ContractStore functional option
func WithNonceManager ¶
func WithNonceManager(nm *NonceManager) ClientOpt
WithNonceManager NonceManager functional option
type CommonData ¶
type CommonData struct { CallType string `json:"call_type,omitempty"` Signature string `json:"signature"` Method string `json:"method"` Input map[string]interface{} `json:"input,omitempty"` Output map[string]interface{} `json:"output,omitempty"` NestingLevel int `json:"nesting_level,omitempty"` ParentSignature string `json:"parent_signature,omitempty"` Error string `json:"error,omitempty"` }
type Config ¶
type Config struct { // internal fields RevertedTransactionsFile string // external fields KeyFileSource KeyFileSource `toml:"keyfile_source"` KeyFilePath string `toml:"keyfile_path"` EphemeralAddrs *int64 `toml:"ephemeral_addresses_number"` RootKeyFundsBuffer *int64 `toml:"root_key_funds_buffer"` ABIDir string `toml:"abi_dir"` BINDir string `toml:"bin_dir"` ContractMapFile string `toml:"contract_map_file"` SaveDeployedContractsMap bool `toml:"save_deployed_contracts_map"` Network *Network `toml:"network"` Networks []*Network `toml:"networks"` NonceManager *NonceManagerCfg `toml:"nonce_manager"` TracingLevel string `toml:"tracing_level"` TraceOutputs []string `toml:"trace_outputs"` PendingNonceProtectionEnabled bool `toml:"pending_nonce_protection_enabled"` ConfigDir string `toml:"abs_path"` ExperimentsEnabled []string `toml:"experiments_enabled"` CheckRpcHealthOnStart bool `toml:"check_rpc_health_on_start"` BlockStatsConfig *BlockStatsConfig `toml:"block_stats"` // contains filtered or unexported fields }
func ReadConfig ¶
ReadConfig reads the TOML config file from location specified by env var "SETH_CONFIG_PATH" and returns a Config struct
func (*Config) GenerateContractMapFileName ¶
GenerateContractMapFileName generates a file name for the contract map
func (*Config) GetMaxConcurrency ¶ added in v1.0.7
GetMaxConcurrency returns the maximum number of concurrent transactions. Root key is excluded from the count.
func (*Config) IsExperimentEnabled ¶ added in v0.1.3
func (*Config) IsSimulatedNetwork ¶
IsSimulatedNetwork returns true if the network is simulated (i.e. Geth or Anvil)
func (*Config) ShoulSaveDeployedContractMap ¶ added in v0.1.1
ShoulSaveDeployedContractMap returns true if the contract map should be saved (i.e. not a simulated network and functionality is enabled)
type ContextErrorKey ¶ added in v1.0.7
type ContextErrorKey struct{}
type ContractLoader ¶ added in v1.0.10
ContractLoader is a helper struct for loading contracts
func NewContractLoader ¶ added in v1.0.10
func NewContractLoader[T any](client *Client) *ContractLoader[T]
NewContractLoader creates a new contract loader
func (*ContractLoader[T]) LoadContract ¶ added in v1.0.10
func (cl *ContractLoader[T]) LoadContract(name string, address common.Address, abiLoadFn func() (*abi.ABI, error), wrapperInitFn func(common.Address, bind.ContractBackend) (*T, error)) (*T, error)
LoadContract loads contract by name, address, ABI loader and wrapper init function, it adds contract ABI to Seth Contract Store and address to Contract Map. Thanks to that we can easily trace and debug interactions with the contract. Signatures of functions passed to this method were chosen to conform to Geth wrappers' GetAbi() and NewXXXContract() functions.
type ContractMap ¶
type ContractMap struct {
// contains filtered or unexported fields
}
func NewContractMap ¶ added in v1.0.7
func NewContractMap(contracts map[string]string) ContractMap
func NewEmptyContractMap ¶ added in v1.0.7
func NewEmptyContractMap() ContractMap
func (ContractMap) AddContract ¶
func (c ContractMap) AddContract(addr, name string)
func (ContractMap) GetContractAddress ¶
func (c ContractMap) GetContractAddress(addr string) string
func (ContractMap) GetContractMap ¶ added in v1.0.7
func (c ContractMap) GetContractMap() map[string]string
func (ContractMap) GetContractName ¶
func (c ContractMap) GetContractName(addr string) string
func (ContractMap) IsKnownAddress ¶
func (c ContractMap) IsKnownAddress(addr string) bool
func (ContractMap) Size ¶ added in v1.0.7
func (c ContractMap) Size() int
type ContractStore ¶
type ContractStore struct { ABIs ABIStore BINs map[string][]byte // contains filtered or unexported fields }
ContractStore contains all ABIs that are used in decoding. It might also contain contract bytecode for deployment
func NewContractStore ¶
func NewContractStore(abiPath, binPath string) (*ContractStore, error)
NewContractStore creates a new Contract store
func (*ContractStore) AddBIN ¶
func (c *ContractStore) AddBIN(name string, bin []byte)
type DecodableLog ¶
type DecodedCall ¶
type DecodedCall struct { CommonData FromAddress string `json:"from_address,omitempty"` ToAddress string `json:"to_address,omitempty"` From string `json:"from,omitempty"` To string `json:"to,omitempty"` Events []DecodedCommonLog `json:"events,omitempty"` Comment string `json:"comment,omitempty"` Value int64 `json:"value,omitempty"` GasLimit uint64 `json:"gas_limit,omitempty"` GasUsed uint64 `json:"gas_used,omitempty"` }
DecodedCall decoded call
type DecodedCommonLog ¶
type DecodedCommonLog struct { Signature string `json:"signature"` Address common.Address `json:"address"` EventData map[string]interface{} `json:"event_data"` Topics []string `json:"topics,omitempty"` }
func (*DecodedCommonLog) MergeEventData ¶
func (d *DecodedCommonLog) MergeEventData(newEventData map[string]interface{})
type DecodedTransaction ¶
type DecodedTransaction struct { CommonData Index uint `json:"index"` Hash string `json:"hash,omitempty"` Protected bool `json:"protected,omitempty"` Transaction *types.Transaction `json:"transaction,omitempty"` Receipt *types.Receipt `json:"receipt,omitempty"` Events []DecodedTransactionLog `json:"events,omitempty"` }
DecodedTransaction decoded transaction
type DecodedTransactionLog ¶
type DecodedTransactionLog struct { DecodedCommonLog BlockNumber uint64 `json:"block_number"` Index uint `json:"index"` TXHash string `json:"hash"` TXIndex uint `json:"tx_index"` Removed bool `json:"removed"` FileTag string `json:"file_tag,omitempty"` }
DecodedTransactionLog decoded Solidity log(event)
func (*DecodedTransactionLog) MergeEventData ¶
func (d *DecodedTransactionLog) MergeEventData(newEventData map[string]interface{})
type DeploymentData ¶
type DeploymentData struct { Address common.Address Transaction *types.Transaction BoundContract *bind.BoundContract }
type Duration ¶
Duration is a non-negative time duration.
func MustMakeDuration ¶
func ParseDuration ¶
func (Duration) MarshalJSON ¶
MarshalJSON implements the json.Marshaler interface.
func (Duration) MarshalText ¶
MarshalText implements the text.Marshaler interface.
func (Duration) String ¶
String returns a string representing the duration in the form "72h3m0.5s". Leading zero units are omitted. As a special case, durations less than one second format use a smaller unit (milli-, micro-, or nanoseconds) to ensure that the leading digit is non-zero. The zero duration formats as 0s.
func (*Duration) UnmarshalJSON ¶
UnmarshalJSON implements the json.Unmarshaler interface.
func (*Duration) UnmarshalText ¶
UnmarshalText implements the text.Unmarshaler interface.
type FundKeyFileCmdOpts ¶
FundKeyFileCmdOpts funding params for CLI
type FundingDetails ¶
type FundingDetails struct { RootBalance *big.Int TotalFee *big.Int FreeBalance *big.Int AddrFunding *big.Int NetworkTransferFee int64 }
FundingDetails funding details about shares we put into test keys
type GasEstimationRequest ¶ added in v0.1.3
type GasEstimations ¶ added in v0.1.3
type GasEstimator ¶
GasEstimator estimates gas prices
func NewGasEstimator ¶
func NewGasEstimator(c *Client) *GasEstimator
NewGasEstimator creates a new gas estimator
func (*GasEstimator) Stats ¶
func (m *GasEstimator) Stats(fromNumber uint64, priorityPerc float64) (GasSuggestions, error)
Stats prints gas stats
type GasPercentiles ¶
type GasPercentiles struct { Max float64 Perc99 float64 Perc75 float64 Perc50 float64 Perc25 float64 }
GasPercentiles contains gas percentiles
type GasSuggestions ¶
type GasSuggestions struct { GasPrice *GasPercentiles TipCap *GasPercentiles SuggestedGasPrice *big.Int SuggestedGasTipCap *big.Int }
type KeyData ¶
type KeyData struct { PrivateKey string `toml:"private_key"` Address string `toml:"address"` Funds string `toml:"funds"` }
KeyData data for test keys
type KeyFile ¶
type KeyFile struct {
Keys []*KeyData `toml:"keys"`
}
KeyFile is a struct that holds all test keys data
func LoadFrom1Pass ¶ added in v1.0.12
LoadFrom1Pass loads a keyfile from 1Password. If the keyfile does not exist it will return an error.
func NewKeyFile ¶
func NewKeyFile() *KeyFile
type KeyFileSource ¶ added in v1.0.10
type KeyFileSource string
const ( KeyFileSourceBase64EnvVar KeyFileSource = "base64_env" KeyFileSourceFile KeyFileSource = "file" )
type KeyfileStatus ¶ added in v1.0.12
type KeyfileStatus = bool
const ( NewKeyfile KeyfileStatus = true ExistingKeyfile KeyfileStatus = false )
type LFUHeaderCache ¶ added in v0.1.3
type LFUHeaderCache struct {
// contains filtered or unexported fields
}
LFUHeaderCache is a Least Frequently Used header cache
func NewLFUBlockCache ¶ added in v0.1.3
func NewLFUBlockCache(capacity uint64) *LFUHeaderCache
NewLFUBlockCache creates a new LFU cache with the given capacity.
type LogWithEventData ¶
type LogWithEventData interface {
MergeEventData(map[string]interface{})
}
type Network ¶
type Network struct { Name string `toml:"name"` URLs []string `toml:"urls_secret"` EIP1559DynamicFees bool `toml:"eip_1559_dynamic_fees"` GasPrice int64 `toml:"gas_price"` GasFeeCap int64 `toml:"gas_fee_cap"` GasTipCap int64 `toml:"gas_tip_cap"` GasLimit uint64 `toml:"gas_limit"` TxnTimeout *Duration `toml:"transaction_timeout"` TransferGasFee int64 `toml:"transfer_gas_fee"` PrivateKeys []string `toml:"private_keys_secret"` GasPriceEstimationEnabled bool `toml:"gas_price_estimation_enabled"` GasPriceEstimationBlocks uint64 `toml:"gas_price_estimation_blocks"` GasPriceEstimationTxPriority string `toml:"gas_price_estimation_tx_priority"` // derivative vars ChainID string }
type NonceManager ¶
type NonceManager struct { *sync.Mutex Client *Client SyncTimeout time.Duration SyncedKeys chan *KeyNonce Addresses []common.Address PrivateKeys []*ecdsa.PrivateKey Nonces map[common.Address]int64 // contains filtered or unexported fields }
NonceManager tracks nonce for each address
func NewNonceManager ¶
func NewNonceManager(cfg *Config, addrs []common.Address, privKeys []*ecdsa.PrivateKey) (*NonceManager, error)
NewNonceManager creates a new nonce manager that tracks nonce for each address
func (*NonceManager) NextNonce ¶
func (m *NonceManager) NextNonce(addr common.Address) *big.Int
NextNonce returns new nonce for addr this method is external for module testing, but you should not use it since handling nonces on the client is unpredictable
func (*NonceManager) UpdateNonces ¶
func (m *NonceManager) UpdateNonces() error
UpdateNonces syncs nonces for addresses
type NonceManagerCfg ¶
type NonceStatus ¶ added in v0.1.3
type Pragma ¶ added in v1.0.10
Pragma represents the version of the Solidity compiler used to compile the contract
func DecodePragmaVersion ¶ added in v1.0.10
DecodePragmaVersion extracts the pragma version from the bytecode or returns an error if it's not found or can't be decoded. Based on https://www.rareskills.io/post/solidity-metadata
type TXCallTraceOutput ¶
func (*TXCallTraceOutput) AsCall ¶
func (t *TXCallTraceOutput) AsCall() Call
type Trace ¶
type Trace struct { TxHash string FourByte map[string]*TXFourByteMetadataOutput CallTrace *TXCallTraceOutput OpCodesTrace map[string]interface{} }
type TraceLog ¶
type Tracer ¶
type Tracer struct { Cfg *Config Addresses []common.Address ContractStore *ContractStore ContractAddressToNameMap ContractMap DecodedCalls map[string][]*DecodedCall ABIFinder *ABIFinder // contains filtered or unexported fields }
func NewTracer ¶
func NewTracer(url string, cs *ContractStore, abiFinder *ABIFinder, cfg *Config, contractAddressToNameMap ContractMap, addresses []common.Address) (*Tracer, error)
func (*Tracer) DecodeTrace ¶
DecodeTrace decodes the trace of a transaction including all subcalls. It returns a list of decoded calls. Depending on the config it also saves the decoded calls as JSON files.
func (*Tracer) PrintTXTrace ¶
func (*Tracer) SaveDecodedCallsAsJson ¶
type TransactOpt ¶
type TransactOpt func(o *bind.TransactOpts)
TransactOpt is a wrapper for bind.TransactOpts
func WithGasFeeCap ¶
func WithGasFeeCap(gasFeeCap *big.Int) TransactOpt
WithGasFeeCap sets gasFeeCap option for bind.TransactOpts
func WithGasLimit ¶
func WithGasLimit(gasLimit uint64) TransactOpt
WithGasLimit sets gasLimit option for bind.TransactOpts
func WithGasPrice ¶
func WithGasPrice(gasPrice *big.Int) TransactOpt
WithGasPrice sets gasPrice option for bind.TransactOpts
func WithGasTipCap ¶
func WithGasTipCap(gasTipCap *big.Int) TransactOpt
WithGasTipCap sets gasTipCap option for bind.TransactOpts
func WithNoSend ¶
func WithNoSend(noSend bool) TransactOpt
WithNoSend sets noSend option for bind.TransactOpts
func WithNonce ¶
func WithNonce(nonce *big.Int) TransactOpt
WithNonce sets nonce option for bind.TransactOpts
func WithValue ¶
func WithValue(value *big.Int) TransactOpt
WithValue sets value option for bind.TransactOpts
type TransactionLog ¶
func (TransactionLog) GetData ¶
func (t TransactionLog) GetData() []byte
func (TransactionLog) GetTopics ¶
func (t TransactionLog) GetTopics() []common.Hash