Documentation
¶
Index ¶
- Constants
- Variables
- func ContextGet[T any](descCtx *DescriptorContext, key string) (T, error)
- func DescribeProposal(ctx ProposalContext, proposal *mcms.Proposal) (string, error)
- func DescribeTimelockProposal(ctx ProposalContext, proposal *mcms.TimelockProposal) (string, error)
- func GetChainNameBySelector(selector uint64) (string, error)
- func NewEnvironmentEVMRegistry(env deployment.Environment, abiMappings map[string]string) (*environmentEVMRegistry, error)
- func NewEnvironmentSolanaRegistry(env deployment.Environment, decoderMappings map[string]DecodeInstructionFn) (*environmentSolanaRegistry, error)
- func WithEVMABIMappings(mappings map[string]string) proposalCtxOption
- func WithRenderer(renderer Renderer) proposalCtxOption
- func WithSolanaDecoders(decoders map[string]DecodeInstructionFn) proposalCtxOption
- type AddressDescriptor
- type Analyzer
- type AnchorInstruction
- type ArgumentTemplateData
- type ArrayDescriptor
- type BatchReport
- type BatchTemplateData
- type BytesDescriptor
- type ChainSelectorDescriptor
- type DecodeInstructionFn
- type DecodedCall
- func AnalyzeAptosTransaction(ctx ProposalContext, decoder *mcmsaptossdk.Decoder, chainSelector uint64, ...) (*DecodedCall, error)
- func AnalyzeAptosTransactions(ctx ProposalContext, chainSelector uint64, txs []types.Transaction) ([]*DecodedCall, error)
- func AnalyzeEVMTransaction(ctx ProposalContext, decoder *EVMTxCallDecoder, chainSelector uint64, ...) (*DecodedCall, *abi.ABI, string, error)
- func AnalyzeEVMTransactions(ctx ProposalContext, chainSelector uint64, txs []types.Transaction) ([]*DecodedCall, error)
- func AnalyzeSolanaTransaction(ctx ProposalContext, chainSelector uint64, mcmsTx mcmstypes.Transaction) (*DecodedCall, error)
- func AnalyzeSolanaTransactions(ctx ProposalContext, chainSelector uint64, txs []mcmstypes.Transaction) ([]*DecodedCall, error)
- func AnalyzeSuiTransaction(ctx ProposalContext, decoder *mcmssuisdk.Decoder, chainSelector uint64, ...) (*DecodedCall, error)
- func AnalyzeSuiTransactions(ctx ProposalContext, chainSelector uint64, txs []types.Transaction) ([]*DecodedCall, error)
- type DecodedCallTemplateData
- type DefaultProposalContext
- type Descriptor
- type DescriptorContext
- type DetailsTemplateData
- type EVMABIRegistry
- type EVMTxCallDecoder
- type MarkdownRenderer
- type NamedDescriptor
- type OperationReport
- type OperationTemplateData
- type ProposalContext
- type ProposalContextProvider
- type ProposalReport
- type ProposalTemplateData
- type Renderer
- type SimpleDescriptor
- type SolanaDecoderRegistry
- type StructDescriptor
- type SummaryTemplateData
- type TimelockTemplateData
- type YamlDescriptor
Constants ¶
const ( // Magic number constants MinStructFieldsForPrettyFormat = 2 MinDataLengthForMethodID = 4 DefaultAnalyzersCount = 2 )
const ( Indent = " " // Length thresholds for different rendering decisions MaxSummaryLength = 80 // Maximum length for inline summaries MaxSimpleValueLength = 50 // Maximum length for values considered "simple" MaxLongValueLength = 120 // Threshold for values that need details section MaxHexPreviewBytes = 16 // Maximum bytes to show in hex preview MaxCompactValueLength = 24 // Maximum length for compact value previews MaxCompactHexBytes = 4 // Maximum bytes for compact hex previews )
Variables ¶
var ManyChainMultiSigMetaData = &bind.MetaData{
ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MAX_NUM_SIGNERS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NUM_GROUPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"op\",\"type\":\"tuple\",\"internalType\":\"structManyChainMultiSig.Op\",\"components\":[{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"multiSig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint40\",\"internalType\":\"uint40\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"getConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structManyChainMultiSig.Config\",\"components\":[{\"name\":\"signers\",\"type\":\"tuple[]\",\"internalType\":\"structManyChainMultiSig.Signer[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"group\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"groupQuorums\",\"type\":\"uint8[32]\",\"internalType\":\"uint8[32]\"},{\"name\":\"groupParents\",\"type\":\"uint8[32]\",\"internalType\":\"uint8[32]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOpCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint40\",\"internalType\":\"uint40\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validUntil\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootMetadata\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structManyChainMultiSig.RootMetadata\",\"components\":[{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"multiSig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"preOpCount\",\"type\":\"uint40\",\"internalType\":\"uint40\"},{\"name\":\"postOpCount\",\"type\":\"uint40\",\"internalType\":\"uint40\"},{\"name\":\"overridePreviousRoot\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConfig\",\"inputs\":[{\"name\":\"signerAddresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"signerGroups\",\"type\":\"uint8[]\",\"internalType\":\"uint8[]\"},{\"name\":\"groupQuorums\",\"type\":\"uint8[32]\",\"internalType\":\"uint8[32]\"},{\"name\":\"groupParents\",\"type\":\"uint8[32]\",\"internalType\":\"uint8[32]\"},{\"name\":\"clearRoot\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validUntil\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadata\",\"type\":\"tuple\",\"internalType\":\"structManyChainMultiSig.RootMetadata\",\"components\":[{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"multiSig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"preOpCount\",\"type\":\"uint40\",\"internalType\":\"uint40\"},{\"name\":\"postOpCount\",\"type\":\"uint40\",\"internalType\":\"uint40\"},{\"name\":\"overridePreviousRoot\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"metadataProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"signatures\",\"type\":\"tuple[]\",\"internalType\":\"structManyChainMultiSig.Signature[]\",\"components\":[{\"name\":\"v\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ConfigSet\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structManyChainMultiSig.Config\",\"components\":[{\"name\":\"signers\",\"type\":\"tuple[]\",\"internalType\":\"structManyChainMultiSig.Signer[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"group\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"groupQuorums\",\"type\":\"uint8[32]\",\"internalType\":\"uint8[32]\"},{\"name\":\"groupParents\",\"type\":\"uint8[32]\",\"internalType\":\"uint8[32]\"}]},{\"name\":\"isRootCleared\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validUntil\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"metadata\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structManyChainMultiSig.RootMetadata\",\"components\":[{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"multiSig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"preOpCount\",\"type\":\"uint40\",\"internalType\":\"uint40\"},{\"name\":\"postOpCount\",\"type\":\"uint40\",\"internalType\":\"uint40\"},{\"name\":\"overridePreviousRoot\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OpExecuted\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint40\",\"indexed\":true,\"internalType\":\"uint40\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferStarted\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallReverted\",\"inputs\":[{\"name\":\"error\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"GroupTreeNotWellFormed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientSigners\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSigner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MissingConfig\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfBoundsGroup\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfBoundsGroupQuorum\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfBoundsNumOfSigners\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PendingOps\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostOpCountReached\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProofCannotBeVerified\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignedHashAlreadySeen\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignerGroupsLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignerInDisabledGroup\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignersAddressesMustBeStrictlyIncreasing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidUntilHasAlreadyPassed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongMultiSig\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongNonce\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongPostOpCount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongPreOpCount\",\"inputs\":[]}]",
}
var RBACTimelockMetaDataTesting = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"minDelay\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proposers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"executors\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"cancellers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"bypassers\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BYPASSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CANCELLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"EXECUTOR_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PROPOSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blockFunctionSelector\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bypasserExecuteBatch\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structRBACTimelock.Call[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"cancel\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"executeBatch\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structRBACTimelock.Call[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"predecessor\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"getBlockedFunctionSelectorAt\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBlockedFunctionSelectorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"duration\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMember\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleMemberCount\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTimestamp\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"timestamp\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hashOperationBatch\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structRBACTimelock.Call[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"predecessor\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"isOperation\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"registered\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperationDone\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"done\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperationPending\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"pending\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperationReady\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"ready\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onERC1155BatchReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onERC1155Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"onERC721Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"scheduleBatch\",\"inputs\":[{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structRBACTimelock.Call[]\",\"components\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"predecessor\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delay\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unblockFunctionSelector\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateDelay\",\"inputs\":[{\"name\":\"newDelay\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BypasserCallExecuted\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallExecuted\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallScheduled\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"index\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"predecessor\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"delay\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Cancelled\",\"inputs\":[{\"name\":\"id\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FunctionSelectorBlocked\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":true,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FunctionSelectorUnblocked\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":true,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinDelayChange\",\"inputs\":[{\"name\":\"oldDuration\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newDuration\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]",
}
Functions ¶
func ContextGet ¶ added in v0.59.0
func ContextGet[T any](descCtx *DescriptorContext, key string) (T, error)
func DescribeProposal ¶
func DescribeProposal(ctx ProposalContext, proposal *mcms.Proposal) (string, error)
func DescribeTimelockProposal ¶
func DescribeTimelockProposal(ctx ProposalContext, proposal *mcms.TimelockProposal) (string, error)
func GetChainNameBySelector ¶ added in v0.59.0
GetChainNameBySelector retrieves the chain name for a given chain selector.
func NewEnvironmentEVMRegistry ¶
func NewEnvironmentEVMRegistry(env deployment.Environment, abiMappings map[string]string) (*environmentEVMRegistry, error)
NewEnvironmentEVMRegistry creates a new environmentEVMRegistry from the provided ABI mappings and domain name.
func NewEnvironmentSolanaRegistry ¶
func NewEnvironmentSolanaRegistry(env deployment.Environment, decoderMappings map[string]DecodeInstructionFn) (*environmentSolanaRegistry, error)
NewEnvironmentSolanaRegistry creates a new environmentSolanaRegistry from the provided ABI mappings and domain name.
func WithEVMABIMappings ¶
func WithRenderer ¶ added in v0.59.0
func WithRenderer(renderer Renderer) proposalCtxOption
func WithSolanaDecoders ¶
func WithSolanaDecoders(decoders map[string]DecodeInstructionFn) proposalCtxOption
Types ¶
type AddressDescriptor ¶ added in v0.59.0
type AddressDescriptor struct {
Value string
}
func (AddressDescriptor) Annotation ¶ added in v0.59.0
func (a AddressDescriptor) Annotation(ctx *DescriptorContext) string
Annotation returns only the annotation if known, otherwise "".
func (AddressDescriptor) Describe ¶ added in v0.59.0
func (a AddressDescriptor) Describe(_ *DescriptorContext) string
type Analyzer ¶ added in v0.59.0
Analyzer is an extension point of proposal decoding. You can implement your own Analyzer which returns your own Descriptor instance.
type AnchorInstruction ¶
type ArgumentTemplateData ¶ added in v0.59.0
type ArrayDescriptor ¶ added in v0.59.0
type ArrayDescriptor struct {
Elements []Descriptor
}
func (ArrayDescriptor) Describe ¶ added in v0.59.0
func (a ArrayDescriptor) Describe(context *DescriptorContext) string
type BatchReport ¶ added in v0.59.0
type BatchReport struct {
ChainSelector uint64
ChainName string
Family string
Operations []OperationReport
}
BatchReport groups multiple operations for timelock-style proposals.
type BatchTemplateData ¶ added in v0.59.0
type BatchTemplateData struct {
ChainSelector uint64
ChainName string
Operations []OperationTemplateData
}
type BytesDescriptor ¶ added in v0.59.0
type BytesDescriptor struct {
Value []byte
}
func (BytesDescriptor) Describe ¶ added in v0.59.0
func (a BytesDescriptor) Describe(_ *DescriptorContext) string
type ChainSelectorDescriptor ¶ added in v0.59.0
type ChainSelectorDescriptor struct {
Value uint64
}
func (ChainSelectorDescriptor) Describe ¶ added in v0.59.0
func (c ChainSelectorDescriptor) Describe(_ *DescriptorContext) string
type DecodeInstructionFn ¶
type DecodeInstructionFn func(accounts []*solana.AccountMeta, data []byte) (AnchorInstruction, error)
type DecodedCall ¶ added in v0.59.0
type DecodedCall struct {
Address string
Method string
Inputs []NamedDescriptor
Outputs []NamedDescriptor
}
func AnalyzeAptosTransaction ¶
func AnalyzeAptosTransaction(ctx ProposalContext, decoder *mcmsaptossdk.Decoder, chainSelector uint64, mcmsTx types.Transaction) (*DecodedCall, error)
func AnalyzeAptosTransactions ¶
func AnalyzeAptosTransactions(ctx ProposalContext, chainSelector uint64, txs []types.Transaction) ([]*DecodedCall, error)
func AnalyzeEVMTransaction ¶
func AnalyzeEVMTransaction( ctx ProposalContext, decoder *EVMTxCallDecoder, chainSelector uint64, mcmsTx types.Transaction, ) (*DecodedCall, *abi.ABI, string, error)
func AnalyzeEVMTransactions ¶
func AnalyzeEVMTransactions(ctx ProposalContext, chainSelector uint64, txs []types.Transaction) ([]*DecodedCall, error)
func AnalyzeSolanaTransaction ¶
func AnalyzeSolanaTransaction( ctx ProposalContext, chainSelector uint64, mcmsTx mcmstypes.Transaction, ) (*DecodedCall, error)
func AnalyzeSolanaTransactions ¶
func AnalyzeSolanaTransactions( ctx ProposalContext, chainSelector uint64, txs []mcmstypes.Transaction, ) ([]*DecodedCall, error)
func AnalyzeSuiTransaction ¶ added in v0.59.0
func AnalyzeSuiTransaction(ctx ProposalContext, decoder *mcmssuisdk.Decoder, chainSelector uint64, mcmsTx types.Transaction) (*DecodedCall, error)
func AnalyzeSuiTransactions ¶ added in v0.59.0
func AnalyzeSuiTransactions(ctx ProposalContext, chainSelector uint64, txs []types.Transaction) ([]*DecodedCall, error)
func (*DecodedCall) Describe ¶ added in v0.59.0
func (d *DecodedCall) Describe(context *DescriptorContext) string
Describe renders a human-readable representation of the decoded call in a format-neutral way. This method returns a simple string representation that can be used by any renderer.
type DecodedCallTemplateData ¶ added in v0.59.0
type DecodedCallTemplateData struct {
Address string
AddressAnnotation string
Method string
Inputs []ArgumentTemplateData
InputDetails []string
Outputs []ArgumentTemplateData
OutputDetails []string
}
type DefaultProposalContext ¶
type DefaultProposalContext struct {
AddressesByChain deployment.AddressesByChain
// contains filtered or unexported fields
}
DefaultProposalContext implements a default proposal analysis context which searches for the EVM ABI of all known contracts.
func (*DefaultProposalContext) DescriptorContext ¶ added in v0.59.0
func (c *DefaultProposalContext) DescriptorContext(chainSelector uint64) *DescriptorContext
func (*DefaultProposalContext) GetEVMRegistry ¶
func (c *DefaultProposalContext) GetEVMRegistry() EVMABIRegistry
func (*DefaultProposalContext) GetRenderer ¶ added in v0.59.0
func (c *DefaultProposalContext) GetRenderer() Renderer
func (*DefaultProposalContext) GetSolanaDecoderRegistry ¶
func (c *DefaultProposalContext) GetSolanaDecoderRegistry() SolanaDecoderRegistry
type Descriptor ¶ added in v0.59.0
type Descriptor interface {
Describe(ctx *DescriptorContext) string
}
Descriptor is a unit of decoded proposal. Calling Describe on it returns human-readable representation of its content. Some implementations are recursive (arrays, structs) and require attention to formatting.
func BytesAndAddressAnalyzer ¶ added in v0.59.0
BytesAndAddressAnalyzer is an EVM-specific analyzer that handles bytes and address types.
func ChainSelectorAnalyzer ¶ added in v0.59.0
ChainSelectorAnalyzer is an EVM-specific analyzer that handles chain selector parameters.
type DescriptorContext ¶ added in v0.59.0
DescriptorContext is a storage for context that may be needed the Describe call. Refer to BytesAndAddressAnalyzer and ChainSelectorAnalyzer for usage examples
func NewDescriptorContext ¶ added in v0.59.0
func NewDescriptorContext(addresses deployment.AddressesByChain) *DescriptorContext
type DetailsTemplateData ¶ added in v0.59.0
type EVMABIRegistry ¶
type EVMABIRegistry interface {
GetABIByAddress(chainSelector uint64, address string) (*abi.ABI, string, error)
GetAllABIs() map[string]string
GetABIByType(typeAndVersion deployment.TypeAndVersion) (*abi.ABI, string, error)
AddABI(contractType deployment.TypeAndVersion, abi string) error
}
type EVMTxCallDecoder ¶ added in v0.59.0
type EVMTxCallDecoder struct {
Analyzers []Analyzer
}
func NewTxCallDecoder ¶ added in v0.59.0
func NewTxCallDecoder(extraAnalyzers []Analyzer) *EVMTxCallDecoder
func (*EVMTxCallDecoder) Decode ¶ added in v0.59.0
func (p *EVMTxCallDecoder) Decode(address string, contractABI *abi.ABI, data []byte) (*DecodedCall, error)
Decode decodes the given data using the provided contract ABI.
type MarkdownRenderer ¶ added in v0.59.0
type MarkdownRenderer struct {
// contains filtered or unexported fields
}
MarkdownRenderer renders ProposalReport and Descriptors as Markdown using templates.
func NewMarkdownRenderer ¶ added in v0.59.0
func NewMarkdownRenderer() *MarkdownRenderer
NewMarkdownRenderer creates a new MarkdownRenderer with compiled templates.
func (*MarkdownRenderer) RenderDecodedCall ¶ added in v0.59.0
func (r *MarkdownRenderer) RenderDecodedCall(d *DecodedCall, ctx *DescriptorContext) string
RenderDecodedCall renders a DecodedCall as Markdown.
func (*MarkdownRenderer) RenderProposal ¶ added in v0.59.0
func (r *MarkdownRenderer) RenderProposal(rep *ProposalReport, ctx *DescriptorContext) string
RenderProposal renders a ProposalReport as Markdown.
func (*MarkdownRenderer) RenderTimelockProposal ¶ added in v0.59.0
func (r *MarkdownRenderer) RenderTimelockProposal(rep *ProposalReport, ctx *DescriptorContext) string
RenderTimelock renders a Timelock ProposalReport as Markdown.
type NamedDescriptor ¶ added in v0.59.0
type NamedDescriptor struct {
Name string
Value Descriptor
}
func (NamedDescriptor) Describe ¶ added in v0.59.0
func (n NamedDescriptor) Describe(context *DescriptorContext) string
type OperationReport ¶ added in v0.59.0
type OperationReport struct {
ChainSelector uint64
ChainName string
Family string
Calls []*DecodedCall
}
OperationReport captures one proposal operation on a specific chain.
type OperationTemplateData ¶ added in v0.59.0
type OperationTemplateData struct {
ChainSelector uint64
ChainName string
Calls []*DecodedCall
}
type ProposalContext ¶
type ProposalContext interface {
GetEVMRegistry() EVMABIRegistry
GetSolanaDecoderRegistry() SolanaDecoderRegistry
DescriptorContext(chainSelector uint64) *DescriptorContext
GetRenderer() Renderer
}
func NewDefaultProposalContext ¶
func NewDefaultProposalContext(env deployment.Environment, opts ...proposalCtxOption) (ProposalContext, error)
type ProposalContextProvider ¶
type ProposalContextProvider func(env deployment.Environment) (ProposalContext, error)
type ProposalReport ¶ added in v0.59.0
type ProposalReport struct {
Operations []OperationReport
Batches []BatchReport
}
ProposalReport is a format-neutral structure describing a decoded proposal ready to be rendered in multiple output formats.
Exactly one of Operations or Batches is populated depending on the proposal type.
func BuildProposalReport ¶ added in v0.59.0
func BuildProposalReport(ctx ProposalContext, p *mcms.Proposal) (*ProposalReport, error)
BuildProposalReport assembles a ProposalReport from a single-proposal input.
func BuildTimelockReport ¶ added in v0.59.0
func BuildTimelockReport(ctx ProposalContext, p *mcms.TimelockProposal) (*ProposalReport, error)
BuildTimelockReport assembles a ProposalReport for timelock-style proposals with batches.
type ProposalTemplateData ¶ added in v0.59.0
type ProposalTemplateData struct {
Operations []OperationTemplateData
Context *DescriptorContext
}
type Renderer ¶ added in v0.59.0
type Renderer interface {
RenderProposal(r *ProposalReport, ctx *DescriptorContext) string
RenderTimelockProposal(r *ProposalReport, ctx *DescriptorContext) string
RenderDecodedCall(d *DecodedCall, ctx *DescriptorContext) string
}
Renderer turns a ProposalReport into a concrete output format. Implementations should be format-specific (Markdown/HTML/Text).
type SimpleDescriptor ¶ added in v0.59.0
type SimpleDescriptor struct {
Value string
}
func (SimpleDescriptor) Describe ¶ added in v0.59.0
func (s SimpleDescriptor) Describe(_ *DescriptorContext) string
type SolanaDecoderRegistry ¶
type SolanaDecoderRegistry interface {
GetSolanaInstructionDecoderByAddress(chainSelector uint64, address string) (DecodeInstructionFn, error)
GetSolanaInstructionDecoderByType(typeAndVersion deployment.TypeAndVersion) (DecodeInstructionFn, error)
AddSolanaInstructionDecoder(contractType deployment.TypeAndVersion, decoder DecodeInstructionFn)
}
SolanaDecoderRegistry is an interface for retrieving and managing Solana instruction decoders.
type StructDescriptor ¶ added in v0.59.0
type StructDescriptor struct {
Fields []NamedDescriptor
}
func (StructDescriptor) Describe ¶ added in v0.59.0
func (s StructDescriptor) Describe(context *DescriptorContext) string
type SummaryTemplateData ¶ added in v0.59.0
type TimelockTemplateData ¶ added in v0.59.0
type TimelockTemplateData struct {
Batches []BatchTemplateData
Context *DescriptorContext
}
type YamlDescriptor ¶ added in v0.59.0
type YamlDescriptor struct {
// contains filtered or unexported fields
}
func (YamlDescriptor) Describe ¶ added in v0.59.0
func (y YamlDescriptor) Describe(_ *DescriptorContext) string
func (YamlDescriptor) MarshalYAML ¶ added in v0.59.0
func (y YamlDescriptor) MarshalYAML() ([]byte, error)