diff --git a/chain/avalanche/abi.go b/chain/avalanche/abi.go new file mode 100644 index 000000000..b8c72f49e --- /dev/null +++ b/chain/avalanche/abi.go @@ -0,0 +1,46 @@ +package avalanche + +import ( + _ "embed" + "math/big" + + "github.com/ava-labs/coreth/precompile/contract" +) + +var ( + //go:embed abi.json + rawABI string + + abi = contract.ParseABI(rawABI) +) + +type Height struct { + RevisionNumber *big.Int + RevisionHeight *big.Int +} + +type MsgSendPacket struct { + ChannelCapability *big.Int + SourcePort string + SourceChannel string + TimeoutHeight Height + TimeoutTimestamp *big.Int + Data []byte +} + +type FungibleTokenPacketData struct { + // the token denomination to be transferred + Denom string `json:"denom"` + // the token amount to be transferred + Amount string `json:"amount"` + // the sender address + Sender string `json:"sender"` + // the recipient address on the destination chain + Receiver string `json:"receiver"` + // optional memo + Memo string `json:"memo,omitempty"` +} + +func packSendPacket(msg MsgSendPacket) ([]byte, error) { + return abi.Pack("sendPacket", msg.ChannelCapability, msg.SourcePort, msg.SourceChannel, msg.TimeoutHeight, msg.TimeoutTimestamp, msg.Data) +} diff --git a/chain/avalanche/abi.json b/chain/avalanche/abi.json new file mode 100644 index 000000000..d6a691214 --- /dev/null +++ b/chain/avalanche/abi.json @@ -0,0 +1,50 @@ +[{ + "inputs": [ + { + "internalType": "uint256", + "name": "channelCapability", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "sendPacket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" +}] \ No newline at end of file diff --git a/chain/avalanche/avalanche_chain.go b/chain/avalanche/avalanche_chain.go new file mode 100644 index 000000000..72faf79b7 --- /dev/null +++ b/chain/avalanche/avalanche_chain.go @@ -0,0 +1,633 @@ +package avalanche + +import ( + "context" + "fmt" + "io" + big "math/big" + "net" + "time" + + sdkmath "cosmossdk.io/math" + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/staking" + "github.com/ava-labs/avalanchego/utils/crypto/bls" + "github.com/ava-labs/avalanchego/utils/formatting" + "github.com/ava-labs/avalanchego/utils/formatting/address" + "github.com/ava-labs/avalanchego/vms/platformvm/signer" + "github.com/docker/docker/api/types" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + ethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" + + "github.com/ava-labs/avalanchego/utils/crypto/secp256k1" + "github.com/docker/docker/client" + + "github.com/strangelove-ventures/interchaintest/v8/chain/avalanche/ics20/ics20bank" + "github.com/strangelove-ventures/interchaintest/v8/chain/avalanche/ics20/ics20transferer" + "github.com/strangelove-ventures/interchaintest/v8/chain/avalanche/lib" + "github.com/strangelove-ventures/interchaintest/v8/ibc" +) + +var ( + _ ibc.Chain = &AvalancheChain{} + ChainBootstrapTimeout = 6 * time.Minute + AvalancheIBCPrecompileAddress = common.HexToAddress("0x0300000000000000000000000000000000000002") +) + +type AvalancheChain struct { + log *zap.Logger + testName string + cfg ibc.ChainConfig + numValidators int + numFullNodes int + nodes AvalancheNodes + ChainID uint32 + bankContractAddress common.Address +} + +func NewAvalancheChain(log *zap.Logger, testName string, chainConfig ibc.ChainConfig, numValidators int, numFullNodes int) (*AvalancheChain, error) { + if numValidators < 5 { + return nil, fmt.Errorf("numValidators must be more or equal 5, have: %d", numValidators) + } + return &AvalancheChain{ + log: log, + testName: testName, + cfg: chainConfig, + numValidators: numValidators, + numFullNodes: numFullNodes, + }, nil +} + +func (c *AvalancheChain) Node() *AvalancheNode { + if len(c.nodes) > c.numValidators { + return c.nodes[c.numValidators] + } + + if len(c.nodes) > 1 { + return c.nodes[1] + } + return c.nodes[0] +} + +// Config fetches the chain configuration. +func (c *AvalancheChain) Config() ibc.ChainConfig { + return c.cfg +} + +// Initialize initializes node structs so that things like initializing keys can be done before starting the chain +func (c *AvalancheChain) Initialize(ctx context.Context, testName string, cli *client.Client, networkID string) error { + for _, image := range c.Config().Images { + rc, err := cli.ImagePull( + ctx, + image.Repository+":"+image.Version, + types.ImagePullOptions{}, + ) + if err != nil { + c.log.Error("Failed to pull image", + zap.Error(err), + zap.String("repository", image.Repository), + zap.String("tag", image.Version), + ) + } else { + _, _ = io.Copy(io.Discard, rc) + _ = rc.Close() + } + } + + rawChainID := c.Config().ChainID + if rawChainID == "" { + rawChainID = "localnet-123456" + } + chainId, err := lib.ParseChainID(rawChainID) + if err != nil { + c.log.Error("Failed to parse chain ID", + zap.Error(err), + zap.String("networkID", networkID), + zap.String("chainID", rawChainID), + ) + return err + } + + c.ChainID = chainId.Number + + var subnetOpts []AvalancheNodeSubnetOpts = nil + if len(c.cfg.AvalancheSubnets) > 0 { + subnetOpts = make([]AvalancheNodeSubnetOpts, len(c.cfg.AvalancheSubnets)) + for i := range c.cfg.AvalancheSubnets { + subnetOpts[i].Name = c.cfg.AvalancheSubnets[i].Name + //subnetOpts[i].VM = c.cfg.AvalancheSubnets[i].VM + subnetOpts[i].Genesis = c.cfg.AvalancheSubnets[i].Genesis + subnetOpts[i].SCFactory = c.cfg.AvalancheSubnets[i].SubnetClientFactory + vmName := make([]byte, 32) + copy(vmName[:], []byte(c.cfg.AvalancheSubnets[i].Name)) + subnetOpts[i].VmID, err = ids.ToID(vmName) + if err != nil { + return err + } + } + } + + key, err := secp256k1.NewPrivateKey() + if err != nil { + return err + } + + numNodes := c.numValidators + c.numFullNodes + credentials := make([]AvalancheNodeCredentials, numNodes) + nodeIds := make([]ids.NodeID, numNodes) + + for i := 0; i < numNodes; i++ { + rawTlsCert, rawTlsKey, err := staking.NewCertAndKeyBytes() + if err != nil { + return err + } + + cert, err := staking.LoadTLSCertFromBytes(rawTlsKey, rawTlsCert) + if err != nil { + return err + } + + blsKey, err := bls.NewSecretKey() + if err != nil { + return fmt.Errorf("couldn't generate new signing key: %w", err) + } + blsKeyBytes := bls.SecretKeyToBytes(blsKey) + + nodeID := ids.NodeIDFromCert(&staking.Certificate{Raw: cert.Leaf.Raw}) + + credentials[i].PK = key + credentials[i].ID = nodeID + credentials[i].TLSCert = rawTlsCert + credentials[i].TLSKey = rawTlsKey + credentials[i].BlsKey = blsKeyBytes + + nodeIds[i] = nodeID + } + + for i := 0; i < numNodes; i++ { + credentials[i].NodeIDs = nodeIds + } + + avaxAddr, _ := address.Format("X", chainId.Name, key.Address().Bytes()) + ethAddr := crypto.PubkeyToAddress(key.ToECDSA().PublicKey).Hex() + allocations := []GenesisAllocation{ + { + ETHAddr: ethAddr, + AVAXAddr: avaxAddr, + InitialAmount: 4000000000, + UnlockSchedule: []GenesisLockedAmount{{Amount: 2000000000}, {Amount: 1000000000}}, + }, + { + ETHAddr: ethAddr, + AVAXAddr: avaxAddr, + InitialAmount: 4000000000, + UnlockSchedule: []GenesisLockedAmount{{Amount: 2000000000}, {Amount: 1000000000}}, + }, + { + ETHAddr: ethAddr, + AVAXAddr: avaxAddr, + InitialAmount: 4000000000, + UnlockSchedule: []GenesisLockedAmount{}, + }, + { + ETHAddr: ethAddr, + AVAXAddr: avaxAddr, + InitialAmount: 4000000000, + UnlockSchedule: []GenesisLockedAmount{}, + }, + { + ETHAddr: ethAddr, + AVAXAddr: avaxAddr, + InitialAmount: 4000000000, + UnlockSchedule: []GenesisLockedAmount{{Amount: 4000000000, Locktime: uint32(time.Second)}}, + }, + { + ETHAddr: ethAddr, + AVAXAddr: avaxAddr, + InitialAmount: 4000000000, + UnlockSchedule: []GenesisLockedAmount{{Amount: 4000000000, Locktime: uint32(time.Second)}}, + }, + } + stakedFunds := make([]string, 0, c.numValidators) + stakes := make([]GenesisStaker, 0, c.numValidators) + for i := 0; i < c.numValidators; i++ { + + blsSk, err := bls.SecretKeyFromBytes(credentials[i].BlsKey) + if err != nil { + return err + } + proofOfPossession := signer.NewProofOfPossession(blsSk) + pk, err := formatting.Encode(formatting.HexNC, proofOfPossession.PublicKey[:]) + if err != nil { + return err + } + pop, err := formatting.Encode(formatting.HexNC, proofOfPossession.ProofOfPossession[:]) + if err != nil { + return err + } + + stakes = append(stakes, GenesisStaker{ + NodeID: credentials[i].ID.String(), + RewardAddress: avaxAddr, + DelegationFee: 100000000, + Signer: StakerSigner{ + PublicKey: pk, + ProofOfPossession: pop, + }, + }) + } + stakedFunds = append(stakedFunds, avaxAddr) + genesis := NewGenesis(chainId.Number, allocations, stakedFunds, stakes) + nodes := make(AvalancheNodes, 0, numNodes) + for i := 0; i < numNodes; i++ { + var bootstrapOpt []*AvalancheNode = nil + if i > 0 { + bootstrapOpt = []*AvalancheNode{nodes[0]} + } + ip, err := getIP(ctx, cli, networkID, uint8(i+1)) + if err != nil { + return err + } + n, err := NewAvalancheNode(ctx, c, networkID, testName, cli, c.Config().Images[0], i, c.log, genesis, &AvalancheNodeOpts{ + PublicIP: ip, + Bootstrap: bootstrapOpt, + Subnets: subnetOpts, + Credentials: credentials[i], + ChainID: *chainId, + }) + if err != nil { + return err + } + nodes = append(nodes, n) + } + c.nodes = nodes + return nil +} + +// Start sets up everything needed (validators, gentx, fullnodes, peering, additional accounts) for chain to start from genesis. +func (c *AvalancheChain) Start(testName string, ctx context.Context, additionalGenesisWallets ...ibc.WalletAmount) error { + eg, egCtx := errgroup.WithContext(ctx) + for _, node := range c.nodes { + err := node.Start(ctx, testName, additionalGenesisWallets) + if err != nil { + return err + } + } + + for _, node := range c.nodes { + node := node + eg.Go(func() error { + tCtx, tCtxCancel := context.WithTimeout(egCtx, ChainBootstrapTimeout) + defer tCtxCancel() + + return node.WaitNode(tCtx) + }) + } + if err := eg.Wait(); err != nil { + return fmt.Errorf("failed to start avalanche nodes %w", err) + } + + if err := c.Node().StartSubnets(ctx, c.nodes); err != nil { + return err + } + + rpcUrl := fmt.Sprintf("http://127.0.0.1:%s/ext/bc/%s/rpc", c.Node().RPCPort(), c.Node().BlockchainID()) + + if err := c.deployBankContract(ctx, rpcUrl); err != nil { + return fmt.Errorf("failed to deploy ICS20 Bank smart contract on avalanche %w", err) + } + + go func() { + for { + select { + case <-time.After(10 * time.Second): + + if err := c.doTx(rpcUrl); err != nil { + c.log.Error("tx error", zap.Error(err)) + } + } + } + }() + + return nil +} + +func (c *AvalancheChain) deployBankContract(ctx context.Context, rpcUrl string) error { + pkey, err := crypto.HexToECDSA("56289e99c94b6912bfc12adc093c9b51124f0dc54ac7a766b2bc5ccf558d8027") + if err != nil { + return err + } + + client, err := ethclient.Dial(rpcUrl) + if err != nil { + return err + } + + chainID, err := client.ChainID(ctx) + if err != nil { + return err + } + + auth, err := bind.NewKeyedTransactorWithChainID(pkey, chainID) + if err != nil { + return err + } + + _, ics20bankTx, ics20bank, err := ics20bank.DeployICS20Bank(auth, client) + if err != nil { + return err + } + + ics20bankAddr, err := bind.WaitDeployed(ctx, client, ics20bankTx) + if err != nil { + return err + } + c.log.Info("ICS20 Bank delpoyed", zap.String("address", ics20bankAddr.Hex())) + c.bankContractAddress = ics20bankAddr + + _, ics20transfererTx, ics20transferer, err := ics20transferer.DeployICS20Transferer(auth, client, AvalancheIBCPrecompileAddress, ics20bankAddr) + if err != nil { + return err + } + + ics20transfererAddr, err := bind.WaitDeployed(ctx, client, ics20transfererTx) + if err != nil { + return err + } + c.log.Info("ICS20 Transferer delpoyed", zap.String("address", ics20transfererAddr.Hex())) + + setOperTx1, err := ics20bank.SetOperator(auth, auth.From) + if err != nil { + return err + } + setOperRe1, err := bind.WaitMined(ctx, client, setOperTx1) + if err != nil { + return err + } + c.log.Info("SetOperator key address", zap.String("hash", setOperRe1.TxHash.Hex()), zap.String("block", setOperRe1.BlockNumber.String())) + + setOperTx2, err := ics20bank.SetOperator(auth, AvalancheIBCPrecompileAddress) + if err != nil { + return err + } + setOperRe2, err := bind.WaitMined(ctx, client, setOperTx2) + if err != nil { + return err + } + c.log.Info("SetOperator ibc address", zap.String("hash", setOperRe2.TxHash.Hex()), zap.String("block", setOperRe2.BlockNumber.String())) + + setOperTx3, err := ics20bank.SetOperator(auth, ics20transfererAddr) + if err != nil { + return err + } + setOperRe3, err := bind.WaitMined(ctx, client, setOperTx3) + if err != nil { + return err + } + c.log.Info("SetOperator ics20 transferer address", zap.String("hash", setOperRe3.TxHash.Hex()), zap.String("block", setOperRe3.BlockNumber.String())) + + setChannelEscrowAddressesTx, err := ics20transferer.SetChannelEscrowAddresses(auth, "transfer", auth.From) + if err != nil { + return err + } + setChannelEscrowAddressesRe, err := bind.WaitMined(ctx, client, setChannelEscrowAddressesTx) + if err != nil { + return err + } + c.log.Info("ics20transferer.SetChannelEscrowAddresses", zap.String("addr", auth.From.Hex()), zap.String("port", "transfer"), zap.String("block", setChannelEscrowAddressesRe.BlockNumber.String())) + + bintPortTx, err := ics20transferer.BindPort(auth, AvalancheIBCPrecompileAddress, "transfer") + if err != nil { + return err + } + bintPortRe, err := bind.WaitMined(ctx, client, bintPortTx) + if err != nil { + return err + } + c.log.Info("ics20transferer.BindPort", zap.String("addr", AvalancheIBCPrecompileAddress.Hex()), zap.String("port", "transfer"), zap.String("block", bintPortRe.BlockNumber.String())) + + return nil +} + +func (c *AvalancheChain) doTx(url string) error { + pkey, err := crypto.HexToECDSA("56289e99c94b6912bfc12adc093c9b51124f0dc54ac7a766b2bc5ccf558d8027") + if err != nil { + return err + } + addr := crypto.PubkeyToAddress(pkey.PublicKey) + + client, err := ethclient.Dial(url) + if err != nil { + return err + } + + chainID, err := client.ChainID(context.Background()) + if err != nil { + return err + } + + nonce, err := client.NonceAt(context.Background(), addr, nil) + if err != nil { + return err + } + + gasPrice, err := client.SuggestGasPrice(context.Background()) + if err != nil { + return err + } + + toAddress := common.HexToAddress("0xAB259A4830E2C7AA6EF3831BAC1590F855AE4C32") + value := big.NewInt(1000000000000000000) + tx := ethtypes.NewTransaction(nonce, toAddress, value, 21000, gasPrice, nil) + + signedTx, err := ethtypes.SignTx(tx, ethtypes.NewEIP155Signer(chainID), pkey) + if err != nil { + return err + } + + err = client.SendTransaction(context.Background(), signedTx) + if err != nil { + return err + } + _, err = bind.WaitMined(context.Background(), client, signedTx) + if err != nil { + return err + } + //c.log.Info("transaction mined", + // zap.String("hash", receipt.TxHash.Hex()), + // zap.String("block", receipt.BlockNumber.String()), + //) + + return nil +} + +// Exec runs an arbitrary command using Chain's docker environment. +// Whether the invoked command is run in a one-off container or execing into an already running container +// is up to the chain implementation. +// +// "env" are environment variables in the format "MY_ENV_VAR=value" +func (c *AvalancheChain) Exec(ctx context.Context, cmd []string, env []string) (stdout, stderr []byte, err error) { + return c.Node().Exec(ctx, cmd, env) +} + +// ExportState exports the chain state at specific height. +func (c *AvalancheChain) ExportState(ctx context.Context, height int64) (string, error) { + panic("ToDo: implement me") +} + +// GetRPCAddress retrieves the rpc address that can be reached by other containers in the docker network. +func (c *AvalancheChain) GetRPCAddress() string { + return fmt.Sprintf("http://%s:9650", c.Node().HostName()) +} + +// GetGRPCAddress retrieves the grpc address that can be reached by other containers in the docker network. +func (c *AvalancheChain) GetGRPCAddress() string { + return c.GetRPCAddress() +} + +// GetHostRPCAddress returns the rpc address that can be reached by processes on the host machine. +// Note that this will not return a valid value until after Start returns. +func (c *AvalancheChain) GetHostRPCAddress() string { + return fmt.Sprintf("http://127.0.0.1:%s", c.Node().RPCPort()) +} + +// GetHostGRPCAddress returns the grpc address that can be reached by processes on the host machine. +// Note that this will not return a valid value until after Start returns. +func (c *AvalancheChain) GetHostGRPCAddress() string { + panic("ToDo: implement me") +} + +// HomeDir is the home directory of a node running in a docker container. Therefore, this maps to +// the container's filesystem (not the host). +func (c *AvalancheChain) HomeDir() string { + panic("ToDo: implement me") +} + +// CreateKey creates a test key in the "user" node (either the first fullnode or the first validator if no fullnodes). +func (c *AvalancheChain) CreateKey(ctx context.Context, keyName string) error { + return nil + //return c.node().CreateKey(ctx, keyName) +} + +// RecoverKey recovers an existing user from a given mnemonic. +func (c *AvalancheChain) RecoverKey(ctx context.Context, name, mnemonic string) error { + return c.Node().RecoverKey(ctx, name, mnemonic) +} + +// GetAddress fetches the bech32 address for a test key on the "user" node (either the first fullnode or the first validator if no fullnodes). +func (c *AvalancheChain) GetAddress(ctx context.Context, keyName string) ([]byte, error) { + return c.Node().GetAddress(ctx, keyName) +} + +// SendFunds sends funds to a wallet from a user account. +func (c *AvalancheChain) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { + return c.Node().SendFunds(ctx, keyName, amount) +} + +// SendIBCTransfer sends an IBC transfer returning a transaction or an error if the transfer failed. +func (c *AvalancheChain) SendIBCTransfer(ctx context.Context, channelID, keyName string, amount ibc.WalletAmount, options ibc.TransferOptions) (ibc.Tx, error) { + return c.Node().SendIBCTransfer(ctx, channelID, keyName, amount, options) +} + +// Height returns the current block height or an error if unable to get current height. +func (c *AvalancheChain) Height(ctx context.Context) (int64, error) { + height, err := c.Node().Height(ctx) + if err != nil { + return 0, err + } + + return int64(height), nil +} + +// GetBalance fetches the current balance for a specific account address and denom. +func (c *AvalancheChain) GetBalance(ctx context.Context, address string, denom string) (sdkmath.Int, error) { + balance, err := c.Node().GetBalance(ctx, address, denom) + if err != nil { + return sdkmath.ZeroInt(), err + } + + return sdkmath.NewInt(balance), nil +} + +// GetBankBalance fetches the current balance for a specific account address and denom from Bank Smart Contract +func (c *AvalancheChain) GetBankBalance(ctx context.Context, address string, denom string) (sdkmath.Int, error) { + balance, err := c.Node().GetBankBalance(ctx, c.bankContractAddress.String(), address, denom) + if err != nil { + return sdkmath.ZeroInt(), err + } + + return sdkmath.NewInt(balance), nil +} + +// GetGasFeesInNativeDenom gets the fees in native denom for an amount of spent gas. +func (c *AvalancheChain) GetGasFeesInNativeDenom(gasPaid int64) int64 { + // ToDo: ask how to calculate??? + panic("ToDo: implement me") +} + +// Acknowledgements returns all acknowledgements in a block at height. +func (c *AvalancheChain) Acknowledgements(ctx context.Context, height int64) ([]ibc.PacketAcknowledgement, error) { + panic("ToDo: implement me") +} + +// Timeouts returns all timeouts in a block at height. +func (c *AvalancheChain) Timeouts(ctx context.Context, height int64) ([]ibc.PacketTimeout, error) { + panic("ToDo: implement me") +} + +// BuildWallet will return a chain-specific wallet +// If mnemonic != "", it will restore using that mnemonic +// If mnemonic == "", it will create a new key, mnemonic will not be populated +func (c *AvalancheChain) BuildWallet(ctx context.Context, keyName string, mnemonic string) (ibc.Wallet, error) { + if mnemonic != "" { + if err := c.RecoverKey(ctx, keyName, mnemonic); err != nil { + return nil, fmt.Errorf("failed to recover key with name %q on chain %s: %w", keyName, c.cfg.Name, err) + } + } else { + if err := c.CreateKey(ctx, keyName); err != nil { + return nil, fmt.Errorf("failed to create key with name %q on chain %s: %w", keyName, c.cfg.Name, err) + } + } + + addrBytes, err := c.GetAddress(ctx, keyName) + if err != nil { + return nil, fmt.Errorf("failed to get account address for key %q on chain %s: %w", keyName, c.cfg.Name, err) + } + + return NewWallet(keyName, common.BytesToAddress(addrBytes), mnemonic, c.cfg), nil +} + +// BuildRelayerWallet will return a chain-specific wallet populated with the mnemonic so that the wallet can +// be restored in the relayer node using the mnemonic. After it is built, that address is included in +// genesis with some funds. +func (c *AvalancheChain) BuildRelayerWallet(ctx context.Context, keyName string) (ibc.Wallet, error) { + pk := "56289e99c94b6912bfc12adc093c9b51124f0dc54ac7a766b2bc5ccf558d8027" + pkey, err := crypto.HexToECDSA(pk) + if err != nil { + return nil, err + } + addr := crypto.PubkeyToAddress(pkey.PublicKey) + + return NewWallet(keyName, addr, pk, c.cfg), nil +} + +func (c *AvalancheChain) GetHostPeerAddress() string { + //TODO implement me + panic("implement me") +} + +func getIP(ctx context.Context, cli *client.Client, networkID string, idx uint8) (string, error) { + network, err := cli.NetworkInspect(ctx, networkID, types.NetworkInspectOptions{}) + if err != nil { + return "", err + } + ip := net.ParseIP(network.IPAM.Config[0].Gateway) + ip = ip.To4() + ip[3] += idx + return ip.String(), nil +} diff --git a/chain/avalanche/client_c.go b/chain/avalanche/client_c.go new file mode 100644 index 000000000..d455e3487 --- /dev/null +++ b/chain/avalanche/client_c.go @@ -0,0 +1,31 @@ +package avalanche + +import ( + "context" + + "github.com/strangelove-ventures/interchaintest/v8/ibc" +) + +type CChainClient struct { +} + +func NewCChainClient(rpcHost string, pk string) (ibc.AvalancheSubnetClient, error) { + return new(CChainClient), nil +} + +func (cchain *CChainClient) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { + panic("not implemented") +} + +func (cchain *CChainClient) Height(ctx context.Context) (uint64, error) { + panic("not implemented") +} + +func (cchain *CChainClient) GetBalance(ctx context.Context, address string) (int64, error) { + panic("not implemented") +} + +func (cchain *CChainClient) GetBankBalance(ctx context.Context, bank, address, denom string) (int64, error) { + //TODO implement me + panic("implement me") +} diff --git a/chain/avalanche/client_p.go b/chain/avalanche/client_p.go new file mode 100644 index 000000000..36486b784 --- /dev/null +++ b/chain/avalanche/client_p.go @@ -0,0 +1,32 @@ +package avalanche + +import ( + "context" + + "github.com/strangelove-ventures/interchaintest/v8/ibc" +) + +type PChainClient struct { +} + +func NewPChainClient(rpcHost string, pk string) (ibc.AvalancheSubnetClient, error) { + return new(PChainClient), nil +} + +func (pchain *PChainClient) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { + panic("not implemented") +} + +func (pchain *PChainClient) Height(ctx context.Context) (uint64, error) { + //platformvm.NewClient(fmt.Sprintf("http://127.0.0.1:%s", n.RPCPort())).GetHeight(ctx) + panic("not implemented") +} + +func (pchain *PChainClient) GetBalance(ctx context.Context, address string) (int64, error) { + panic("not implemented") +} + +func (pchain *PChainClient) GetBankBalance(ctx context.Context, bank, address, denom string) (int64, error) { + //TODO implement me + panic("implement me") +} diff --git a/chain/avalanche/client_x.go b/chain/avalanche/client_x.go new file mode 100644 index 000000000..9272d8395 --- /dev/null +++ b/chain/avalanche/client_x.go @@ -0,0 +1,31 @@ +package avalanche + +import ( + "context" + + "github.com/strangelove-ventures/interchaintest/v8/ibc" +) + +type XChainClient struct { +} + +func NewXChainClient(rpcHost string, pk string) (ibc.AvalancheSubnetClient, error) { + return new(XChainClient), nil +} + +func (xchain *XChainClient) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { + panic("not implemented") +} + +func (xchain *XChainClient) Height(ctx context.Context) (uint64, error) { + panic("not implemented") +} + +func (xchain *XChainClient) GetBalance(ctx context.Context, address string) (int64, error) { + panic("not implemented") +} + +func (xchain *XChainClient) GetBankBalance(ctx context.Context, bank, address, denom string) (int64, error) { + //TODO implement me + panic("implement me") +} diff --git a/chain/avalanche/genesis.go b/chain/avalanche/genesis.go new file mode 100644 index 000000000..ca08678c7 --- /dev/null +++ b/chain/avalanche/genesis.go @@ -0,0 +1,55 @@ +package avalanche + +import "time" + +type ( + GenesisLockedAmount struct { + Amount uint32 `json:"amount"` + Locktime uint32 `json:"locktime"` + } + GenesisAllocation struct { + ETHAddr string `json:"ethAddr"` + AVAXAddr string `json:"avaxAddr"` + InitialAmount uint32 `json:"initialAmount"` + UnlockSchedule []GenesisLockedAmount `json:"unlockSchedule"` + } + StakerSigner struct { + PublicKey string `json:"publicKey"` + ProofOfPossession string `json:"proofOfPossession"` + } + GenesisStaker struct { + NodeID string `json:"nodeID"` + RewardAddress string `json:"rewardAddress"` + DelegationFee uint32 `json:"delegationFee"` + Signer StakerSigner `json:"signer"` + } + Genesis struct { + NetworkID uint32 `json:"networkID"` + + Allocations []GenesisAllocation `json:"allocations"` + + StartTime uint32 `json:"startTime"` + InitialStakeDuration uint32 `json:"initialStakeDuration"` + InitialStakeDurationOffset uint32 `json:"initialStakeDurationOffset"` + InitialStakedFunds []string `json:"initialStakedFunds"` + InitialStakers []GenesisStaker `json:"initialStakers"` + + CChainGenesis string `json:"cChainGenesis"` + + Message string `json:"message"` + } +) + +func NewGenesis(networkID uint32, allocations []GenesisAllocation, initialStakedFunds []string, stakers []GenesisStaker) Genesis { + return Genesis{ + NetworkID: networkID, + Allocations: allocations, + StartTime: uint32(time.Now().Unix()), + InitialStakeDuration: 31536000, + InitialStakeDurationOffset: 5400, + InitialStakedFunds: initialStakedFunds, + InitialStakers: stakers, + CChainGenesis: "{\"config\":{\"chainId\":43112,\"homesteadBlock\":0,\"daoForkBlock\":0,\"daoForkSupport\":true,\"eip150Block\":0,\"eip150Hash\":\"0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0\",\"eip155Block\":0,\"eip158Block\":0,\"byzantiumBlock\":0,\"constantinopleBlock\":0,\"petersburgBlock\":0,\"istanbulBlock\":0,\"muirGlacierBlock\":0,\"apricotPhase1BlockTimestamp\":0,\"apricotPhase2BlockTimestamp\":0},\"nonce\":\"0x0\",\"timestamp\":\"0x0\",\"extraData\":\"0x00\",\"gasLimit\":\"0x5f5e100\",\"difficulty\":\"0x0\",\"mixHash\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"coinbase\":\"0x0000000000000000000000000000000000000000\",\"alloc\":{\"" + allocations[0].ETHAddr[2:] + "\":{\"balance\":\"0x295BE96E64066972000000\"}},\"number\":\"0x0\",\"gasUsed\":\"0x0\",\"parentHash\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}", + Message: "{{ fun_quote }}", + } +} diff --git a/chain/avalanche/ics20/ics20bank/ics20bank.abi b/chain/avalanche/ics20/ics20bank/ics20bank.abi new file mode 100644 index 000000000..70dc1a1a5 --- /dev/null +++ b/chain/avalanche/ics20/ics20bank/ics20bank.abi @@ -0,0 +1,425 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "path", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OPERATOR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "string", + "name": "id", + "type": "string" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "string", + "name": "id", + "type": "string" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "string", + "name": "id", + "type": "string" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "setOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "string", + "name": "id", + "type": "string" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] \ No newline at end of file diff --git a/chain/avalanche/ics20/ics20bank/ics20bank.bin b/chain/avalanche/ics20/ics20bank/ics20bank.bin new file mode 100644 index 000000000..eb87263d3 --- /dev/null +++ b/chain/avalanche/ics20/ics20bank/ics20bank.bin @@ -0,0 +1 @@ +60806040523480156200001157600080fd5b50620000537fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775620000476200005960201b60201c565b6200006160201b60201c565b620001d2565b600033905090565b6200007382826200007760201b60201c565b5050565b6200008982826200016860201b60201c565b6200016457600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001096200005960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123c180620001e26000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b3ab15fb11610097578063d547741f11610066578063d547741f146102a9578063f24dc1da146102c5578063f45346dc146102e1578063f5b541a6146102fd57610100565b8063b3ab15fb14610225578063b9b092c814610241578063ba7aef4314610271578063c45b71de1461028d57610100565b806369328dec116100d357806369328dec1461019d57806375b238fc146101b957806391d14854146101d7578063a217fddf1461020757610100565b806301ffc9a714610105578063248a9ca3146101355780632f2ff15d1461016557806336568abe14610181575b600080fd5b61011f600480360381019061011a919061188f565b61031b565b60405161012c9190611bfb565b60405180910390f35b61014f600480360381019061014a919061182a565b610395565b60405161015c9190611c16565b60405180910390f35b61017f600480360381019061017a9190611853565b6103b4565b005b61019b60048036038101906101969190611853565b6103d5565b005b6101b760048036038101906101b291906117b2565b610458565b005b6101c1610535565b6040516101ce9190611c16565b60405180910390f35b6101f160048036038101906101ec9190611853565b610559565b6040516101fe9190611bfb565b60405180910390f35b61020f6105c3565b60405161021c9190611c16565b60405180910390f35b61023f600480360381019061023a9190611645565b6105ca565b005b61025b600480360381019061025691906116ee565b610667565b6040516102689190611dd5565b60405180910390f35b61028b60048036038101906102869190611746565b61073f565b005b6102a760048036038101906102a29190611746565b610804565b005b6102c360048036038101906102be9190611853565b6108c9565b005b6102df60048036038101906102da919061166e565b6108ea565b005b6102fb60048036038101906102f691906117b2565b610bfe565b005b610305610cdd565b6040516103129190611c16565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061038e575061038d82610d01565b5b9050919050565b6000806000838152602001908152602001600020600101549050919050565b6103bd82610395565b6103c681610d6b565b6103d08383610d7f565b505050565b6103dd610e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461044a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044190611d95565b60405180910390fd5b6104548282610e67565b5050565b6104778373ffffffffffffffffffffffffffffffffffffffff16610f48565b61048057600080fd5b61049a61048b610e5f565b61049485610f6b565b84610f7d565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b81526004016104d5929190611bd2565b602060405180830381600087803b1580156104ef57600080fd5b505af1158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611801565b61053057600080fd5b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b6105fb7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105f6610e5f565b610559565b61063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190611d55565b60405180910390fd5b6106647f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929826110f9565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611d75565b60405180910390fd5b600183836040516106ea929190611b31565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509392505050565b6107707f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92961076b610e5f565b610559565b6107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690611db5565b60405180910390fd5b6107fe8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083611107565b50505050565b6108357f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610830610e5f565b610559565b610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90611db5565b60405180910390fd5b6108c38484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610f7d565b50505050565b6108d282610395565b6108db81610d6b565b6108e58383610e67565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190611cd5565b60405180910390fd5b610962610e5f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109c857506109c77f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296109c2610e5f565b610559565b5b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90611d15565b60405180910390fd5b600060018484604051610a1b929190611b31565b908152602001604051809103902060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390611d35565b60405180910390fd5b8181610ab89190611ec7565b60018585604051610aca929190611b31565b908152602001604051809103902060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160018585604051610b2c929190611b31565b908152602001604051809103902060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b869190611e17565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d78868686604051610bee93929190611c31565b60405180910390a3505050505050565b610c1d8373ffffffffffffffffffffffffffffffffffffffff16610f48565b610c2657600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd610c4a610e5f565b30856040518463ffffffff1660e01b8152600401610c6a93929190611b9b565b602060405180830381600087803b158015610c8457600080fd5b505af1158015610c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbc9190611801565b610cc557600080fd5b610cd881610cd285610f6b565b84611107565b505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610d7c81610d77610e5f565b6111e6565b50565b610d898282610559565b610e5b57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610e00610e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b610e718282610559565b15610f4457600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610ee9610e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060610f768261126b565b9050919050565b6000600183604051610f8f9190611b4a565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790611cf5565b60405180910390fd5b818161102c9190611ec7565b60018460405161103c9190611b4a565b908152602001604051809103902060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d7885856040516110eb929190611c85565b60405180910390a350505050565b6111038282610d7f565b5050565b806001836040516111189190611b4a565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111729190611e17565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d7884846040516111d9929190611c85565b60405180910390a3505050565b6111f08282610559565b611267576111fd8161126b565b61120b8360001c6020611298565b60405160200161121c929190611b61565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e9190611c63565b60405180910390fd5b5050565b60606112918273ffffffffffffffffffffffffffffffffffffffff16601460ff16611298565b9050919050565b6060600060028360026112ab9190611e6d565b6112b59190611e17565b67ffffffffffffffff8111156112f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113265781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611384577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061140e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261144e9190611e6d565b6114589190611e17565b90505b6001811115611544577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106114c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106114fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061153d90611fbb565b905061145b565b5060008414611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90611cb5565b60405180910390fd5b8091505092915050565b6000813590506115a181612318565b92915050565b6000815190506115b68161232f565b92915050565b6000813590506115cb81612346565b92915050565b6000813590506115e08161235d565b92915050565b60008083601f8401126115f857600080fd5b8235905067ffffffffffffffff81111561161157600080fd5b60208301915083600182028301111561162957600080fd5b9250929050565b60008135905061163f81612374565b92915050565b60006020828403121561165757600080fd5b600061166584828501611592565b91505092915050565b60008060008060006080868803121561168657600080fd5b600061169488828901611592565b95505060206116a588828901611592565b945050604086013567ffffffffffffffff8111156116c257600080fd5b6116ce888289016115e6565b935093505060606116e188828901611630565b9150509295509295909350565b60008060006040848603121561170357600080fd5b600061171186828701611592565b935050602084013567ffffffffffffffff81111561172e57600080fd5b61173a868287016115e6565b92509250509250925092565b6000806000806060858703121561175c57600080fd5b600061176a87828801611592565b945050602085013567ffffffffffffffff81111561178757600080fd5b611793878288016115e6565b935093505060406117a687828801611630565b91505092959194509250565b6000806000606084860312156117c757600080fd5b60006117d586828701611592565b93505060206117e686828701611630565b92505060406117f786828701611592565b9150509250925092565b60006020828403121561181357600080fd5b6000611821848285016115a7565b91505092915050565b60006020828403121561183c57600080fd5b600061184a848285016115bc565b91505092915050565b6000806040838503121561186657600080fd5b6000611874858286016115bc565b925050602061188585828601611592565b9150509250929050565b6000602082840312156118a157600080fd5b60006118af848285016115d1565b91505092915050565b6118c181611efb565b82525050565b6118d081611f0d565b82525050565b6118df81611f19565b82525050565b60006118f18385611dfb565b93506118fe838584611f79565b61190783612014565b840190509392505050565b600061191e8385611e0c565b935061192b838584611f79565b82840190509392505050565b600061194282611df0565b61194c8185611dfb565b935061195c818560208601611f88565b61196581612014565b840191505092915050565b600061197b82611df0565b6119858185611e0c565b9350611995818560208601611f88565b80840191505092915050565b60006119ae602083611dfb565b91506119b982612025565b602082019050919050565b60006119d1602783611dfb565b91506119dc8261204e565b604082019050919050565b60006119f4602683611dfb565b91506119ff8261209d565b604082019050919050565b6000611a17602b83611dfb565b9150611a22826120ec565b604082019050919050565b6000611a3a602c83611dfb565b9150611a458261213b565b604082019050919050565b6000611a5d602883611dfb565b9150611a688261218a565b604082019050919050565b6000611a80601783611e0c565b9150611a8b826121d9565b601782019050919050565b6000611aa3602d83611dfb565b9150611aae82612202565b604082019050919050565b6000611ac6601183611e0c565b9150611ad182612251565b601182019050919050565b6000611ae9602f83611dfb565b9150611af48261227a565b604082019050919050565b6000611b0c602883611dfb565b9150611b17826122c9565b604082019050919050565b611b2b81611f6f565b82525050565b6000611b3e828486611912565b91508190509392505050565b6000611b568284611970565b915081905092915050565b6000611b6c82611a73565b9150611b788285611970565b9150611b8382611ab9565b9150611b8f8284611970565b91508190509392505050565b6000606082019050611bb060008301866118b8565b611bbd60208301856118b8565b611bca6040830184611b22565b949350505050565b6000604082019050611be760008301856118b8565b611bf46020830184611b22565b9392505050565b6000602082019050611c1060008301846118c7565b92915050565b6000602082019050611c2b60008301846118d6565b92915050565b60006040820190508181036000830152611c4c8185876118e5565b9050611c5b6020830184611b22565b949350505050565b60006020820190508181036000830152611c7d8184611937565b905092915050565b60006040820190508181036000830152611c9f8185611937565b9050611cae6020830184611b22565b9392505050565b60006020820190508181036000830152611cce816119a1565b9050919050565b60006020820190508181036000830152611cee816119c4565b9050919050565b60006020820190508181036000830152611d0e816119e7565b9050919050565b60006020820190508181036000830152611d2e81611a0a565b9050919050565b60006020820190508181036000830152611d4e81611a2d565b9050919050565b60006020820190508181036000830152611d6e81611a50565b9050919050565b60006020820190508181036000830152611d8e81611a96565b9050919050565b60006020820190508181036000830152611dae81611adc565b9050919050565b60006020820190508181036000830152611dce81611aff565b9050919050565b6000602082019050611dea6000830184611b22565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611e2282611f6f565b9150611e2d83611f6f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e6257611e61611fe5565b5b828201905092915050565b6000611e7882611f6f565b9150611e8383611f6f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ebc57611ebb611fe5565b5b828202905092915050565b6000611ed282611f6f565b9150611edd83611f6f565b925082821015611ef057611eef611fe5565b5b828203905092915050565b6000611f0682611f4f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611fa6578082015181840152602081019050611f8b565b83811115611fb5576000848401525b50505050565b6000611fc682611f6f565b91506000821415611fda57611fd9611fe5565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f494353323042616e6b3a207472616e7366657220746f20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f494353323042616e6b3a206275726e20616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f494353323042616e6b3a2063616c6c6572206973206e6f74206f776e6572206e60008201527f6f7220617070726f766564000000000000000000000000000000000000000000602082015250565b7f494353323042616e6b3a20696e73756666696369656e742062616c616e63652060008201527f666f72207472616e736665720000000000000000000000000000000000000000602082015250565b7f6d75737420686176652061646d696e20726f6c6520746f20736574206e65772060008201527f6f70657261746f72000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f494353323042616e6b3a2062616c616e636520717565727920666f722074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f494353323042616e6b3a206d7573742068617665206d696e74657220726f6c6560008201527f20746f206d696e74000000000000000000000000000000000000000000000000602082015250565b61232181611efb565b811461232c57600080fd5b50565b61233881611f0d565b811461234357600080fd5b50565b61234f81611f19565b811461235a57600080fd5b50565b61236681611f23565b811461237157600080fd5b50565b61237d81611f6f565b811461238857600080fd5b5056fea264697066735822122008154672f506e59a032c577d7fb44eede5e11dc06b33f174acc319b88b59945c64736f6c63430008010033 \ No newline at end of file diff --git a/chain/avalanche/ics20/ics20bank/ics20bank.go b/chain/avalanche/ics20/ics20bank/ics20bank.go new file mode 100644 index 000000000..eedd5eef2 --- /dev/null +++ b/chain/avalanche/ics20/ics20bank/ics20bank.go @@ -0,0 +1,1250 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ics20bank + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ICS20BankMetaData contains all meta data concerning the ICS20Bank contract. +var ICS20BankMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"setOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b50620000537fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775620000476200005960201b60201c565b6200006160201b60201c565b620001d2565b600033905090565b6200007382826200007760201b60201c565b5050565b6200008982826200016860201b60201c565b6200016457600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001096200005960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123c180620001e26000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b3ab15fb11610097578063d547741f11610066578063d547741f146102a9578063f24dc1da146102c5578063f45346dc146102e1578063f5b541a6146102fd57610100565b8063b3ab15fb14610225578063b9b092c814610241578063ba7aef4314610271578063c45b71de1461028d57610100565b806369328dec116100d357806369328dec1461019d57806375b238fc146101b957806391d14854146101d7578063a217fddf1461020757610100565b806301ffc9a714610105578063248a9ca3146101355780632f2ff15d1461016557806336568abe14610181575b600080fd5b61011f600480360381019061011a919061188f565b61031b565b60405161012c9190611bfb565b60405180910390f35b61014f600480360381019061014a919061182a565b610395565b60405161015c9190611c16565b60405180910390f35b61017f600480360381019061017a9190611853565b6103b4565b005b61019b60048036038101906101969190611853565b6103d5565b005b6101b760048036038101906101b291906117b2565b610458565b005b6101c1610535565b6040516101ce9190611c16565b60405180910390f35b6101f160048036038101906101ec9190611853565b610559565b6040516101fe9190611bfb565b60405180910390f35b61020f6105c3565b60405161021c9190611c16565b60405180910390f35b61023f600480360381019061023a9190611645565b6105ca565b005b61025b600480360381019061025691906116ee565b610667565b6040516102689190611dd5565b60405180910390f35b61028b60048036038101906102869190611746565b61073f565b005b6102a760048036038101906102a29190611746565b610804565b005b6102c360048036038101906102be9190611853565b6108c9565b005b6102df60048036038101906102da919061166e565b6108ea565b005b6102fb60048036038101906102f691906117b2565b610bfe565b005b610305610cdd565b6040516103129190611c16565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061038e575061038d82610d01565b5b9050919050565b6000806000838152602001908152602001600020600101549050919050565b6103bd82610395565b6103c681610d6b565b6103d08383610d7f565b505050565b6103dd610e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461044a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044190611d95565b60405180910390fd5b6104548282610e67565b5050565b6104778373ffffffffffffffffffffffffffffffffffffffff16610f48565b61048057600080fd5b61049a61048b610e5f565b61049485610f6b565b84610f7d565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82846040518363ffffffff1660e01b81526004016104d5929190611bd2565b602060405180830381600087803b1580156104ef57600080fd5b505af1158015610503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105279190611801565b61053057600080fd5b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b6105fb7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105f6610e5f565b610559565b61063a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063190611d55565b60405180910390fd5b6106647f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929826110f9565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90611d75565b60405180910390fd5b600183836040516106ea929190611b31565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490509392505050565b6107707f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92961076b610e5f565b610559565b6107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690611db5565b60405180910390fd5b6107fe8484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083611107565b50505050565b6108357f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610830610e5f565b610559565b610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90611db5565b60405180910390fd5b6108c38484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505083610f7d565b50505050565b6108d282610395565b6108db81610d6b565b6108e58383610e67565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190611cd5565b60405180910390fd5b610962610e5f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109c857506109c77f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296109c2610e5f565b610559565b5b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90611d15565b60405180910390fd5b600060018484604051610a1b929190611b31565b908152602001604051809103902060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa390611d35565b60405180910390fd5b8181610ab89190611ec7565b60018585604051610aca929190611b31565b908152602001604051809103902060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160018585604051610b2c929190611b31565b908152602001604051809103902060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b869190611e17565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d78868686604051610bee93929190611c31565b60405180910390a3505050505050565b610c1d8373ffffffffffffffffffffffffffffffffffffffff16610f48565b610c2657600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd610c4a610e5f565b30856040518463ffffffff1660e01b8152600401610c6a93929190611b9b565b602060405180830381600087803b158015610c8457600080fd5b505af1158015610c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbc9190611801565b610cc557600080fd5b610cd881610cd285610f6b565b84611107565b505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610d7c81610d77610e5f565b6111e6565b50565b610d898282610559565b610e5b57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610e00610e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b610e718282610559565b15610f4457600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610ee9610e5f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060610f768261126b565b9050919050565b6000600183604051610f8f9190611b4a565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790611cf5565b60405180910390fd5b818161102c9190611ec7565b60018460405161103c9190611b4a565b908152602001604051809103902060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d7885856040516110eb929190611c85565b60405180910390a350505050565b6111038282610d7f565b5050565b806001836040516111189190611b4a565b908152602001604051809103902060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111729190611e17565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d7884846040516111d9929190611c85565b60405180910390a3505050565b6111f08282610559565b611267576111fd8161126b565b61120b8360001c6020611298565b60405160200161121c929190611b61565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e9190611c63565b60405180910390fd5b5050565b60606112918273ffffffffffffffffffffffffffffffffffffffff16601460ff16611298565b9050919050565b6060600060028360026112ab9190611e6d565b6112b59190611e17565b67ffffffffffffffff8111156112f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113265781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611384577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061140e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261144e9190611e6d565b6114589190611e17565b90505b6001811115611544577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106114c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106114fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061153d90611fbb565b905061145b565b5060008414611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90611cb5565b60405180910390fd5b8091505092915050565b6000813590506115a181612318565b92915050565b6000815190506115b68161232f565b92915050565b6000813590506115cb81612346565b92915050565b6000813590506115e08161235d565b92915050565b60008083601f8401126115f857600080fd5b8235905067ffffffffffffffff81111561161157600080fd5b60208301915083600182028301111561162957600080fd5b9250929050565b60008135905061163f81612374565b92915050565b60006020828403121561165757600080fd5b600061166584828501611592565b91505092915050565b60008060008060006080868803121561168657600080fd5b600061169488828901611592565b95505060206116a588828901611592565b945050604086013567ffffffffffffffff8111156116c257600080fd5b6116ce888289016115e6565b935093505060606116e188828901611630565b9150509295509295909350565b60008060006040848603121561170357600080fd5b600061171186828701611592565b935050602084013567ffffffffffffffff81111561172e57600080fd5b61173a868287016115e6565b92509250509250925092565b6000806000806060858703121561175c57600080fd5b600061176a87828801611592565b945050602085013567ffffffffffffffff81111561178757600080fd5b611793878288016115e6565b935093505060406117a687828801611630565b91505092959194509250565b6000806000606084860312156117c757600080fd5b60006117d586828701611592565b93505060206117e686828701611630565b92505060406117f786828701611592565b9150509250925092565b60006020828403121561181357600080fd5b6000611821848285016115a7565b91505092915050565b60006020828403121561183c57600080fd5b600061184a848285016115bc565b91505092915050565b6000806040838503121561186657600080fd5b6000611874858286016115bc565b925050602061188585828601611592565b9150509250929050565b6000602082840312156118a157600080fd5b60006118af848285016115d1565b91505092915050565b6118c181611efb565b82525050565b6118d081611f0d565b82525050565b6118df81611f19565b82525050565b60006118f18385611dfb565b93506118fe838584611f79565b61190783612014565b840190509392505050565b600061191e8385611e0c565b935061192b838584611f79565b82840190509392505050565b600061194282611df0565b61194c8185611dfb565b935061195c818560208601611f88565b61196581612014565b840191505092915050565b600061197b82611df0565b6119858185611e0c565b9350611995818560208601611f88565b80840191505092915050565b60006119ae602083611dfb565b91506119b982612025565b602082019050919050565b60006119d1602783611dfb565b91506119dc8261204e565b604082019050919050565b60006119f4602683611dfb565b91506119ff8261209d565b604082019050919050565b6000611a17602b83611dfb565b9150611a22826120ec565b604082019050919050565b6000611a3a602c83611dfb565b9150611a458261213b565b604082019050919050565b6000611a5d602883611dfb565b9150611a688261218a565b604082019050919050565b6000611a80601783611e0c565b9150611a8b826121d9565b601782019050919050565b6000611aa3602d83611dfb565b9150611aae82612202565b604082019050919050565b6000611ac6601183611e0c565b9150611ad182612251565b601182019050919050565b6000611ae9602f83611dfb565b9150611af48261227a565b604082019050919050565b6000611b0c602883611dfb565b9150611b17826122c9565b604082019050919050565b611b2b81611f6f565b82525050565b6000611b3e828486611912565b91508190509392505050565b6000611b568284611970565b915081905092915050565b6000611b6c82611a73565b9150611b788285611970565b9150611b8382611ab9565b9150611b8f8284611970565b91508190509392505050565b6000606082019050611bb060008301866118b8565b611bbd60208301856118b8565b611bca6040830184611b22565b949350505050565b6000604082019050611be760008301856118b8565b611bf46020830184611b22565b9392505050565b6000602082019050611c1060008301846118c7565b92915050565b6000602082019050611c2b60008301846118d6565b92915050565b60006040820190508181036000830152611c4c8185876118e5565b9050611c5b6020830184611b22565b949350505050565b60006020820190508181036000830152611c7d8184611937565b905092915050565b60006040820190508181036000830152611c9f8185611937565b9050611cae6020830184611b22565b9392505050565b60006020820190508181036000830152611cce816119a1565b9050919050565b60006020820190508181036000830152611cee816119c4565b9050919050565b60006020820190508181036000830152611d0e816119e7565b9050919050565b60006020820190508181036000830152611d2e81611a0a565b9050919050565b60006020820190508181036000830152611d4e81611a2d565b9050919050565b60006020820190508181036000830152611d6e81611a50565b9050919050565b60006020820190508181036000830152611d8e81611a96565b9050919050565b60006020820190508181036000830152611dae81611adc565b9050919050565b60006020820190508181036000830152611dce81611aff565b9050919050565b6000602082019050611dea6000830184611b22565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611e2282611f6f565b9150611e2d83611f6f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611e6257611e61611fe5565b5b828201905092915050565b6000611e7882611f6f565b9150611e8383611f6f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ebc57611ebb611fe5565b5b828202905092915050565b6000611ed282611f6f565b9150611edd83611f6f565b925082821015611ef057611eef611fe5565b5b828203905092915050565b6000611f0682611f4f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611fa6578082015181840152602081019050611f8b565b83811115611fb5576000848401525b50505050565b6000611fc682611f6f565b91506000821415611fda57611fd9611fe5565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f494353323042616e6b3a207472616e7366657220746f20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f494353323042616e6b3a206275726e20616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f494353323042616e6b3a2063616c6c6572206973206e6f74206f776e6572206e60008201527f6f7220617070726f766564000000000000000000000000000000000000000000602082015250565b7f494353323042616e6b3a20696e73756666696369656e742062616c616e63652060008201527f666f72207472616e736665720000000000000000000000000000000000000000602082015250565b7f6d75737420686176652061646d696e20726f6c6520746f20736574206e65772060008201527f6f70657261746f72000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f494353323042616e6b3a2062616c616e636520717565727920666f722074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f494353323042616e6b3a206d7573742068617665206d696e74657220726f6c6560008201527f20746f206d696e74000000000000000000000000000000000000000000000000602082015250565b61232181611efb565b811461232c57600080fd5b50565b61233881611f0d565b811461234357600080fd5b50565b61234f81611f19565b811461235a57600080fd5b50565b61236681611f23565b811461237157600080fd5b50565b61237d81611f6f565b811461238857600080fd5b5056fea264697066735822122008154672f506e59a032c577d7fb44eede5e11dc06b33f174acc319b88b59945c64736f6c63430008010033", +} + +// ICS20BankABI is the input ABI used to generate the binding from. +// Deprecated: Use ICS20BankMetaData.ABI instead. +var ICS20BankABI = ICS20BankMetaData.ABI + +// ICS20BankBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ICS20BankMetaData.Bin instead. +var ICS20BankBin = ICS20BankMetaData.Bin + +// DeployICS20Bank deploys a new Ethereum contract, binding an instance of ICS20Bank to it. +func DeployICS20Bank(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ICS20Bank, error) { + parsed, err := ICS20BankMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ICS20BankBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ICS20Bank{ICS20BankCaller: ICS20BankCaller{contract: contract}, ICS20BankTransactor: ICS20BankTransactor{contract: contract}, ICS20BankFilterer: ICS20BankFilterer{contract: contract}}, nil +} + +// ICS20Bank is an auto generated Go binding around an Ethereum contract. +type ICS20Bank struct { + ICS20BankCaller // Read-only binding to the contract + ICS20BankTransactor // Write-only binding to the contract + ICS20BankFilterer // Log filterer for contract events +} + +// ICS20BankCaller is an auto generated read-only Go binding around an Ethereum contract. +type ICS20BankCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICS20BankTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ICS20BankTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICS20BankFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ICS20BankFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICS20BankSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ICS20BankSession struct { + Contract *ICS20Bank // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ICS20BankCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ICS20BankCallerSession struct { + Contract *ICS20BankCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ICS20BankTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ICS20BankTransactorSession struct { + Contract *ICS20BankTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ICS20BankRaw is an auto generated low-level Go binding around an Ethereum contract. +type ICS20BankRaw struct { + Contract *ICS20Bank // Generic contract binding to access the raw methods on +} + +// ICS20BankCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ICS20BankCallerRaw struct { + Contract *ICS20BankCaller // Generic read-only contract binding to access the raw methods on +} + +// ICS20BankTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ICS20BankTransactorRaw struct { + Contract *ICS20BankTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewICS20Bank creates a new instance of ICS20Bank, bound to a specific deployed contract. +func NewICS20Bank(address common.Address, backend bind.ContractBackend) (*ICS20Bank, error) { + contract, err := bindICS20Bank(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ICS20Bank{ICS20BankCaller: ICS20BankCaller{contract: contract}, ICS20BankTransactor: ICS20BankTransactor{contract: contract}, ICS20BankFilterer: ICS20BankFilterer{contract: contract}}, nil +} + +// NewICS20BankCaller creates a new read-only instance of ICS20Bank, bound to a specific deployed contract. +func NewICS20BankCaller(address common.Address, caller bind.ContractCaller) (*ICS20BankCaller, error) { + contract, err := bindICS20Bank(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ICS20BankCaller{contract: contract}, nil +} + +// NewICS20BankTransactor creates a new write-only instance of ICS20Bank, bound to a specific deployed contract. +func NewICS20BankTransactor(address common.Address, transactor bind.ContractTransactor) (*ICS20BankTransactor, error) { + contract, err := bindICS20Bank(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ICS20BankTransactor{contract: contract}, nil +} + +// NewICS20BankFilterer creates a new log filterer instance of ICS20Bank, bound to a specific deployed contract. +func NewICS20BankFilterer(address common.Address, filterer bind.ContractFilterer) (*ICS20BankFilterer, error) { + contract, err := bindICS20Bank(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ICS20BankFilterer{contract: contract}, nil +} + +// bindICS20Bank binds a generic wrapper to an already deployed contract. +func bindICS20Bank(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ICS20BankMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ICS20Bank *ICS20BankRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ICS20Bank.Contract.ICS20BankCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ICS20Bank *ICS20BankRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICS20Bank.Contract.ICS20BankTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ICS20Bank *ICS20BankRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ICS20Bank.Contract.ICS20BankTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ICS20Bank *ICS20BankCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ICS20Bank.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ICS20Bank *ICS20BankTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICS20Bank.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ICS20Bank *ICS20BankTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ICS20Bank.Contract.contract.Transact(opts, method, params...) +} + +// ADMINROLE is a free data retrieval call binding the contract method 0x75b238fc. +// +// Solidity: function ADMIN_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankCaller) ADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ICS20Bank.contract.Call(opts, &out, "ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ADMINROLE is a free data retrieval call binding the contract method 0x75b238fc. +// +// Solidity: function ADMIN_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankSession) ADMINROLE() ([32]byte, error) { + return _ICS20Bank.Contract.ADMINROLE(&_ICS20Bank.CallOpts) +} + +// ADMINROLE is a free data retrieval call binding the contract method 0x75b238fc. +// +// Solidity: function ADMIN_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankCallerSession) ADMINROLE() ([32]byte, error) { + return _ICS20Bank.Contract.ADMINROLE(&_ICS20Bank.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ICS20Bank.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ICS20Bank.Contract.DEFAULTADMINROLE(&_ICS20Bank.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ICS20Bank.Contract.DEFAULTADMINROLE(&_ICS20Bank.CallOpts) +} + +// OPERATORROLE is a free data retrieval call binding the contract method 0xf5b541a6. +// +// Solidity: function OPERATOR_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankCaller) OPERATORROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ICS20Bank.contract.Call(opts, &out, "OPERATOR_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORROLE is a free data retrieval call binding the contract method 0xf5b541a6. +// +// Solidity: function OPERATOR_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankSession) OPERATORROLE() ([32]byte, error) { + return _ICS20Bank.Contract.OPERATORROLE(&_ICS20Bank.CallOpts) +} + +// OPERATORROLE is a free data retrieval call binding the contract method 0xf5b541a6. +// +// Solidity: function OPERATOR_ROLE() view returns(bytes32) +func (_ICS20Bank *ICS20BankCallerSession) OPERATORROLE() ([32]byte, error) { + return _ICS20Bank.Contract.OPERATORROLE(&_ICS20Bank.CallOpts) +} + +// BalanceOf is a free data retrieval call binding the contract method 0xb9b092c8. +// +// Solidity: function balanceOf(address account, string id) view returns(uint256) +func (_ICS20Bank *ICS20BankCaller) BalanceOf(opts *bind.CallOpts, account common.Address, id string) (*big.Int, error) { + var out []interface{} + err := _ICS20Bank.contract.Call(opts, &out, "balanceOf", account, id) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0xb9b092c8. +// +// Solidity: function balanceOf(address account, string id) view returns(uint256) +func (_ICS20Bank *ICS20BankSession) BalanceOf(account common.Address, id string) (*big.Int, error) { + return _ICS20Bank.Contract.BalanceOf(&_ICS20Bank.CallOpts, account, id) +} + +// BalanceOf is a free data retrieval call binding the contract method 0xb9b092c8. +// +// Solidity: function balanceOf(address account, string id) view returns(uint256) +func (_ICS20Bank *ICS20BankCallerSession) BalanceOf(account common.Address, id string) (*big.Int, error) { + return _ICS20Bank.Contract.BalanceOf(&_ICS20Bank.CallOpts, account, id) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ICS20Bank *ICS20BankCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _ICS20Bank.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ICS20Bank *ICS20BankSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ICS20Bank.Contract.GetRoleAdmin(&_ICS20Bank.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ICS20Bank *ICS20BankCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ICS20Bank.Contract.GetRoleAdmin(&_ICS20Bank.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ICS20Bank *ICS20BankCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _ICS20Bank.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ICS20Bank *ICS20BankSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ICS20Bank.Contract.HasRole(&_ICS20Bank.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ICS20Bank *ICS20BankCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ICS20Bank.Contract.HasRole(&_ICS20Bank.CallOpts, role, account) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ICS20Bank *ICS20BankCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _ICS20Bank.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ICS20Bank *ICS20BankSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ICS20Bank.Contract.SupportsInterface(&_ICS20Bank.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ICS20Bank *ICS20BankCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ICS20Bank.Contract.SupportsInterface(&_ICS20Bank.CallOpts, interfaceId) +} + +// Burn is a paid mutator transaction binding the contract method 0xc45b71de. +// +// Solidity: function burn(address account, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankTransactor) Burn(opts *bind.TransactOpts, account common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "burn", account, id, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0xc45b71de. +// +// Solidity: function burn(address account, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankSession) Burn(account common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.Contract.Burn(&_ICS20Bank.TransactOpts, account, id, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0xc45b71de. +// +// Solidity: function burn(address account, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankTransactorSession) Burn(account common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.Contract.Burn(&_ICS20Bank.TransactOpts, account, id, amount) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address tokenContract, uint256 amount, address receiver) returns() +func (_ICS20Bank *ICS20BankTransactor) Deposit(opts *bind.TransactOpts, tokenContract common.Address, amount *big.Int, receiver common.Address) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "deposit", tokenContract, amount, receiver) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address tokenContract, uint256 amount, address receiver) returns() +func (_ICS20Bank *ICS20BankSession) Deposit(tokenContract common.Address, amount *big.Int, receiver common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.Deposit(&_ICS20Bank.TransactOpts, tokenContract, amount, receiver) +} + +// Deposit is a paid mutator transaction binding the contract method 0xf45346dc. +// +// Solidity: function deposit(address tokenContract, uint256 amount, address receiver) returns() +func (_ICS20Bank *ICS20BankTransactorSession) Deposit(tokenContract common.Address, amount *big.Int, receiver common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.Deposit(&_ICS20Bank.TransactOpts, tokenContract, amount, receiver) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.GrantRole(&_ICS20Bank.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.GrantRole(&_ICS20Bank.TransactOpts, role, account) +} + +// Mint is a paid mutator transaction binding the contract method 0xba7aef43. +// +// Solidity: function mint(address account, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankTransactor) Mint(opts *bind.TransactOpts, account common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "mint", account, id, amount) +} + +// Mint is a paid mutator transaction binding the contract method 0xba7aef43. +// +// Solidity: function mint(address account, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankSession) Mint(account common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.Contract.Mint(&_ICS20Bank.TransactOpts, account, id, amount) +} + +// Mint is a paid mutator transaction binding the contract method 0xba7aef43. +// +// Solidity: function mint(address account, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankTransactorSession) Mint(account common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.Contract.Mint(&_ICS20Bank.TransactOpts, account, id, amount) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.RenounceRole(&_ICS20Bank.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.RenounceRole(&_ICS20Bank.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.RevokeRole(&_ICS20Bank.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ICS20Bank *ICS20BankTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.RevokeRole(&_ICS20Bank.TransactOpts, role, account) +} + +// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb. +// +// Solidity: function setOperator(address operator) returns() +func (_ICS20Bank *ICS20BankTransactor) SetOperator(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "setOperator", operator) +} + +// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb. +// +// Solidity: function setOperator(address operator) returns() +func (_ICS20Bank *ICS20BankSession) SetOperator(operator common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.SetOperator(&_ICS20Bank.TransactOpts, operator) +} + +// SetOperator is a paid mutator transaction binding the contract method 0xb3ab15fb. +// +// Solidity: function setOperator(address operator) returns() +func (_ICS20Bank *ICS20BankTransactorSession) SetOperator(operator common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.SetOperator(&_ICS20Bank.TransactOpts, operator) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0xf24dc1da. +// +// Solidity: function transferFrom(address from, address to, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "transferFrom", from, to, id, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0xf24dc1da. +// +// Solidity: function transferFrom(address from, address to, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankSession) TransferFrom(from common.Address, to common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.Contract.TransferFrom(&_ICS20Bank.TransactOpts, from, to, id, amount) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0xf24dc1da. +// +// Solidity: function transferFrom(address from, address to, string id, uint256 amount) returns() +func (_ICS20Bank *ICS20BankTransactorSession) TransferFrom(from common.Address, to common.Address, id string, amount *big.Int) (*types.Transaction, error) { + return _ICS20Bank.Contract.TransferFrom(&_ICS20Bank.TransactOpts, from, to, id, amount) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x69328dec. +// +// Solidity: function withdraw(address tokenContract, uint256 amount, address receiver) returns() +func (_ICS20Bank *ICS20BankTransactor) Withdraw(opts *bind.TransactOpts, tokenContract common.Address, amount *big.Int, receiver common.Address) (*types.Transaction, error) { + return _ICS20Bank.contract.Transact(opts, "withdraw", tokenContract, amount, receiver) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x69328dec. +// +// Solidity: function withdraw(address tokenContract, uint256 amount, address receiver) returns() +func (_ICS20Bank *ICS20BankSession) Withdraw(tokenContract common.Address, amount *big.Int, receiver common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.Withdraw(&_ICS20Bank.TransactOpts, tokenContract, amount, receiver) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x69328dec. +// +// Solidity: function withdraw(address tokenContract, uint256 amount, address receiver) returns() +func (_ICS20Bank *ICS20BankTransactorSession) Withdraw(tokenContract common.Address, amount *big.Int, receiver common.Address) (*types.Transaction, error) { + return _ICS20Bank.Contract.Withdraw(&_ICS20Bank.TransactOpts, tokenContract, amount, receiver) +} + +// ICS20BankRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ICS20Bank contract. +type ICS20BankRoleAdminChangedIterator struct { + Event *ICS20BankRoleAdminChanged // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ICS20BankRoleAdminChangedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ICS20BankRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ICS20BankRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ICS20BankRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICS20BankRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICS20BankRoleAdminChanged represents a RoleAdminChanged event raised by the ICS20Bank contract. +type ICS20BankRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ICS20Bank *ICS20BankFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ICS20BankRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ICS20Bank.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &ICS20BankRoleAdminChangedIterator{contract: _ICS20Bank.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ICS20Bank *ICS20BankFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ICS20BankRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ICS20Bank.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ICS20BankRoleAdminChanged) + if err := _ICS20Bank.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ICS20Bank *ICS20BankFilterer) ParseRoleAdminChanged(log types.Log) (*ICS20BankRoleAdminChanged, error) { + event := new(ICS20BankRoleAdminChanged) + if err := _ICS20Bank.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ICS20BankRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ICS20Bank contract. +type ICS20BankRoleGrantedIterator struct { + Event *ICS20BankRoleGranted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ICS20BankRoleGrantedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ICS20BankRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ICS20BankRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ICS20BankRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICS20BankRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICS20BankRoleGranted represents a RoleGranted event raised by the ICS20Bank contract. +type ICS20BankRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ICS20Bank *ICS20BankFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ICS20BankRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ICS20Bank.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ICS20BankRoleGrantedIterator{contract: _ICS20Bank.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ICS20Bank *ICS20BankFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ICS20BankRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ICS20Bank.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ICS20BankRoleGranted) + if err := _ICS20Bank.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ICS20Bank *ICS20BankFilterer) ParseRoleGranted(log types.Log) (*ICS20BankRoleGranted, error) { + event := new(ICS20BankRoleGranted) + if err := _ICS20Bank.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ICS20BankRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ICS20Bank contract. +type ICS20BankRoleRevokedIterator struct { + Event *ICS20BankRoleRevoked // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ICS20BankRoleRevokedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ICS20BankRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ICS20BankRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ICS20BankRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICS20BankRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICS20BankRoleRevoked represents a RoleRevoked event raised by the ICS20Bank contract. +type ICS20BankRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ICS20Bank *ICS20BankFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ICS20BankRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ICS20Bank.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ICS20BankRoleRevokedIterator{contract: _ICS20Bank.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ICS20Bank *ICS20BankFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ICS20BankRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ICS20Bank.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ICS20BankRoleRevoked) + if err := _ICS20Bank.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ICS20Bank *ICS20BankFilterer) ParseRoleRevoked(log types.Log) (*ICS20BankRoleRevoked, error) { + event := new(ICS20BankRoleRevoked) + if err := _ICS20Bank.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ICS20BankTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ICS20Bank contract. +type ICS20BankTransferIterator struct { + Event *ICS20BankTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ICS20BankTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ICS20BankTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ICS20BankTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ICS20BankTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICS20BankTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICS20BankTransfer represents a Transfer event raised by the ICS20Bank contract. +type ICS20BankTransfer struct { + From common.Address + To common.Address + Path string + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0x1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d78. +// +// Solidity: event Transfer(address indexed from, address indexed to, string path, uint256 value) +func (_ICS20Bank *ICS20BankFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ICS20BankTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ICS20Bank.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &ICS20BankTransferIterator{contract: _ICS20Bank.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0x1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d78. +// +// Solidity: event Transfer(address indexed from, address indexed to, string path, uint256 value) +func (_ICS20Bank *ICS20BankFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ICS20BankTransfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ICS20Bank.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ICS20BankTransfer) + if err := _ICS20Bank.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransfer is a log parse operation binding the contract event 0x1d30d3db8e01fa0d5626c471596f822f597e720c26a2930ef20d3387313c3d78. +// +// Solidity: event Transfer(address indexed from, address indexed to, string path, uint256 value) +func (_ICS20Bank *ICS20BankFilterer) ParseTransfer(log types.Log) (*ICS20BankTransfer, error) { + event := new(ICS20BankTransfer) + if err := _ICS20Bank.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/chain/avalanche/ics20/ics20transferer/ics20transferer.abi b/chain/avalanche/ics20/ics20transferer/ics20transferer.abi new file mode 100644 index 000000000..afa4d7933 --- /dev/null +++ b/chain/avalanche/ics20/ics20transferer/ics20transferer.abi @@ -0,0 +1,280 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_ibcAddr", + "type": "address" + }, + { + "internalType": "contract IICS20Bank", + "name": "_bank", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "ack", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "OnAcknowledgementPacket", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "sequence", + "type": "uint256" + }, + { + "internalType": "string", + "name": "sourcePort", + "type": "string" + }, + { + "internalType": "string", + "name": "sourceChannel", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationPort", + "type": "string" + }, + { + "internalType": "string", + "name": "destinationChannel", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "revisionNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "revisionHeight", + "type": "uint256" + } + ], + "internalType": "struct Height", + "name": "timeoutHeight", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "timeoutTimestamp", + "type": "uint256" + } + ], + "internalType": "struct Packet", + "name": "packet", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "OnRecvPacket", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "someAddr", + "type": "address" + }, + { + "internalType": "string", + "name": "portId", + "type": "string" + } + ], + "name": "bindPort", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ibcAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "chan", + "type": "string" + }, + { + "internalType": "address", + "name": "chanAddr", + "type": "address" + } + ], + "name": "setChannelEscrowAddresses", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] \ No newline at end of file diff --git a/chain/avalanche/ics20/ics20transferer/ics20transferer.bin b/chain/avalanche/ics20/ics20transferer/ics20transferer.bin new file mode 100644 index 000000000..a901c26d5 --- /dev/null +++ b/chain/avalanche/ics20/ics20transferer/ics20transferer.bin @@ -0,0 +1 @@ +60806040523480156200001157600080fd5b50604051620020e9380380620020e98339818101604052810190620000379190620001db565b620000576200004b620000e160201b60201c565b620000e960201b60201c565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000298565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620001be8162000264565b92915050565b600081519050620001d5816200027e565b92915050565b60008060408385031215620001ef57600080fd5b6000620001ff85828601620001ad565b92505060206200021285828601620001c4565b9150509250929050565b6000620002298262000244565b9050919050565b60006200023d826200021c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200026f816200021c565b81146200027b57600080fd5b50565b620002898162000230565b81146200029557600080fd5b50565b611e4180620002a86000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806385f7175c1161005b57806385f7175c146101015780638da5cb5b146101315780639d1987651461014f578063f2fde38b1461016b57610088565b80632c49a9781461008d5780635849f2df146100bd578063696a9bf4146100d9578063715018a6146100f7575b600080fd5b6100a760048036038101906100a291906114e2565b610187565b6040516100b49190611758565b60405180910390f35b6100d760048036038101906100d291906113e1565b61024e565b005b6100e16102b7565b6040516100ee91906116b3565b60405180910390f35b6100ff6102e1565b005b61011b60048036038101906101169190611476565b6102f5565b6040516101289190611758565b60405180910390f35b610139610487565b60405161014691906116b3565b60405180910390f35b6101696004803603810190610164919061138d565b6104b0565b005b61018560048036038101906101809190611364565b61051f565b005b60006101916105a3565b73ffffffffffffffffffffffffffffffffffffffff166101af6102b7565b73ffffffffffffffffffffffffffffffffffffffff1614610205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101fc906117b5565b60405180910390fd5b61020e836105ab565b6102435760008460a0015180602001905181019061022c9190611435565b905061024181866020015187604001516105fa565b505b600190509392505050565b6102566106a0565b80600183604051610267919061169c565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6102e96106a0565b6102f3600061071e565b565b60006102ff6105a3565b73ffffffffffffffffffffffffffffffffffffffff1661031d6102b7565b73ffffffffffffffffffffffffffffffffffffffff1614610373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036a906117b5565b60405180910390fd5b60008360a0015180602001905181019061038d9190611435565b9050600061039e82600001516107e2565b905060006103d26103b787602001518860400151610810565b6103c485600001516107e2565b6108f990919063ffffffff16565b90506103e7818361099390919063ffffffff16565b61042c576104226103fb87604001516109a9565b61041360008660600151610a3090919063ffffffff16565b85600001518660200151610aa6565b9350505050610481565b60006104528361044489606001518a60800151610810565b610b4790919063ffffffff16565b905061047a61046f60008660600151610a3090919063ffffffff16565b828660200151610c1b565b9450505050505b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1663c13b184f826040518263ffffffff1660e01b81526004016104e99190611773565b600060405180830381600087803b15801561050357600080fd5b505af1158015610517573d6000803e3d6000fd5b505050505050565b6105276106a0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058e90611795565b60405180910390fd5b6105a08161071e565b50565b600033905090565b60006040518060400160405280601181526020017f7b22726573756c74223a2241513d3d227d000000000000000000000000000000815250805190602001208280519060200120149050919050565b6106226106078383610810565b61061485600001516107e2565b610cb990919063ffffffff16565b61066757610659610632826109a9565b61064a60008660400151610a3090919063ffffffff16565b85600001518660200151610aa6565b61066257600080fd5b61069b565b61069161068260008560400151610a3090919063ffffffff16565b84600001518560200151610c1b565b61069a57600080fd5b5b505050565b6106a86105a3565b73ffffffffffffffffffffffffffffffffffffffff166106c6610487565b73ffffffffffffffffffffffffffffffffffffffff161461071c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610713906117d5565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6107ea610ef8565b600060208301905060405180604001604052808451815260200182815250915050919050565b610818610ef8565b6108f16108ec61085c6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506107e2565b6108de6108d961086b876107e2565b6108cb6108c66108af6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506107e2565b6108b88c6107e2565b610b4790919063ffffffff16565b6107e2565b610b4790919063ffffffff16565b6107e2565b610b4790919063ffffffff16565b6107e2565b905092915050565b610901610ef8565b8160000151836000015110156109195782905061098d565b6000600190508260200151846020015114610947578251602085015160208501518281208383201493505050505b8015610988578260000151846000018181516109639190611b78565b9150818152505082600001518460200181815161098091906118c3565b915081815250505b839150505b92915050565b6000806109a08484610d12565b14905092915050565b6000806001836040516109bc919061169c565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2757600080fd5b80915050919050565b6000601482610a3f91906118c3565b83511015610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a79906117f5565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24dc1da868686866040518563ffffffff1660e01b8152600401610b0994939291906116ce565b600060405180830381600087803b158015610b2357600080fd5b505af1158015610b37573d6000803e3d6000fd5b5050505060019050949350505050565b6060600082600001518460000151610b5f91906118c3565b67ffffffffffffffff811115610b9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610bd05781602001600182028036833780820191505090505b5090506000602082019050610bee8186602001518760000151610e4c565b610c10856000015182610c0191906118c3565b85602001518660000151610e4c565b819250505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba7aef438585856040518463ffffffff1660e01b8152600401610c7c9392919061171a565b600060405180830381600087803b158015610c9657600080fd5b505af1158015610caa573d6000803e3d6000fd5b50505050600190509392505050565b6000816000015183600001511015610cd45760009050610d0c565b816020015183602001511415610ced5760019050610d0c565b6000825160208501516020850151828120838320149350505050809150505b92915050565b60008083600001519050836000015183600001511015610d3457826000015190505b60008460200151905060008460200151905060005b83811015610e2b576000808451915083519050808214610df75760007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506020871015610dd157600184886020610da19190611b78565b610dab91906118c3565b6008610db79190611a8a565b6002610dc3919061196c565b610dcd9190611b78565b1990505b600081831682851603905060008114610df4578098505050505050505050610e46565b50505b602085610e0491906118c3565b9450602084610e1391906118c3565b93505050602081610e2491906118c3565b9050610d49565b5084600001518660000151610e409190611ae4565b93505050505b92915050565b5b60208110610e8b5781518352602083610e6691906118c3565b9250602082610e7591906118c3565b9150602081610e849190611b78565b9050610e4d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506000821115610ee2576001826020610ec89190611b78565b610100610ed5919061196c565b610edf9190611b78565b90505b8019835116818551168181178652505050505050565b604051806040016040528060008152602001600081525090565b6000610f25610f208461183a565b611815565b905082815260208101848484011115610f3d57600080fd5b610f48848285611bfe565b509392505050565b6000610f63610f5e8461183a565b611815565b905082815260208101848484011115610f7b57600080fd5b610f86848285611c0d565b509392505050565b6000610fa1610f9c8461186b565b611815565b905082815260208101848484011115610fb957600080fd5b610fc4848285611bfe565b509392505050565b6000610fdf610fda8461186b565b611815565b905082815260208101848484011115610ff757600080fd5b611002848285611c0d565b509392505050565b60008135905061101981611ddd565b92915050565b600082601f83011261103057600080fd5b8135611040848260208601610f12565b91505092915050565b600082601f83011261105a57600080fd5b815161106a848260208601610f50565b91505092915050565b600082601f83011261108457600080fd5b8135611094848260208601610f8e565b91505092915050565b600082601f8301126110ae57600080fd5b81516110be848260208601610fcc565b91505092915050565b600060a082840312156110d957600080fd5b6110e360a0611815565b9050600082015167ffffffffffffffff8111156110ff57600080fd5b61110b8482850161109d565b600083015250602061111f8482850161134f565b602083015250604082015167ffffffffffffffff81111561113f57600080fd5b61114b84828501611049565b604083015250606082015167ffffffffffffffff81111561116b57600080fd5b61117784828501611049565b606083015250608082015167ffffffffffffffff81111561119757600080fd5b6111a384828501611049565b60808301525092915050565b6000604082840312156111c157600080fd5b6111cb6040611815565b905060006111db8482850161133a565b60008301525060206111ef8482850161133a565b60208301525092915050565b6000610120828403121561120e57600080fd5b611219610100611815565b905060006112298482850161133a565b600083015250602082013567ffffffffffffffff81111561124957600080fd5b61125584828501611073565b602083015250604082013567ffffffffffffffff81111561127557600080fd5b61128184828501611073565b604083015250606082013567ffffffffffffffff8111156112a157600080fd5b6112ad84828501611073565b606083015250608082013567ffffffffffffffff8111156112cd57600080fd5b6112d984828501611073565b60808301525060a082013567ffffffffffffffff8111156112f957600080fd5b6113058482850161101f565b60a08301525060c0611319848285016111af565b60c08301525061010061132e8482850161133a565b60e08301525092915050565b60008135905061134981611df4565b92915050565b60008151905061135e81611df4565b92915050565b60006020828403121561137657600080fd5b60006113848482850161100a565b91505092915050565b600080604083850312156113a057600080fd5b60006113ae8582860161100a565b925050602083013567ffffffffffffffff8111156113cb57600080fd5b6113d785828601611073565b9150509250929050565b600080604083850312156113f457600080fd5b600083013567ffffffffffffffff81111561140e57600080fd5b61141a85828601611073565b925050602061142b8582860161100a565b9150509250929050565b60006020828403121561144757600080fd5b600082015167ffffffffffffffff81111561146157600080fd5b61146d848285016110c7565b91505092915050565b6000806040838503121561148957600080fd5b600083013567ffffffffffffffff8111156114a357600080fd5b6114af858286016111fb565b925050602083013567ffffffffffffffff8111156114cc57600080fd5b6114d88582860161101f565b9150509250929050565b6000806000606084860312156114f757600080fd5b600084013567ffffffffffffffff81111561151157600080fd5b61151d868287016111fb565b935050602084013567ffffffffffffffff81111561153a57600080fd5b6115468682870161101f565b925050604084013567ffffffffffffffff81111561156357600080fd5b61156f8682870161101f565b9150509250925092565b61158281611bac565b82525050565b61159181611bbe565b82525050565b60006115a28261189c565b6115ac81856118a7565b93506115bc818560208601611c0d565b6115c581611ccf565b840191505092915050565b60006115db8261189c565b6115e581856118b8565b93506115f5818560208601611c0d565b80840191505092915050565b600061160e6026836118a7565b915061161982611ced565b604082019050919050565b60006116316034836118a7565b915061163c82611d3c565b604082019050919050565b60006116546020836118a7565b915061165f82611d8b565b602082019050919050565b60006116776015836118a7565b915061168282611db4565b602082019050919050565b61169681611bf4565b82525050565b60006116a882846115d0565b915081905092915050565b60006020820190506116c86000830184611579565b92915050565b60006080820190506116e36000830187611579565b6116f06020830186611579565b81810360408301526117028185611597565b9050611711606083018461168d565b95945050505050565b600060608201905061172f6000830186611579565b81810360208301526117418185611597565b9050611750604083018461168d565b949350505050565b600060208201905061176d6000830184611588565b92915050565b6000602082019050818103600083015261178d8184611597565b905092915050565b600060208201905081810360008301526117ae81611601565b9050919050565b600060208201905081810360008301526117ce81611624565b9050919050565b600060208201905081810360008301526117ee81611647565b9050919050565b6000602082019050818103600083015261180e8161166a565b9050919050565b600061181f611830565b905061182b8282611c40565b919050565b6000604051905090565b600067ffffffffffffffff82111561185557611854611ca0565b5b61185e82611ccf565b9050602081019050919050565b600067ffffffffffffffff82111561188657611885611ca0565b5b61188f82611ccf565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006118ce82611bf4565b91506118d983611bf4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561190e5761190d611c71565b5b828201905092915050565b6000808291508390505b60018511156119635780860481111561193f5761193e611c71565b5b600185161561194e5780820291505b808102905061195c85611ce0565b9450611923565b94509492505050565b600061197782611bf4565b915061198283611bf4565b92506119af7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846119b7565b905092915050565b6000826119c75760019050611a83565b816119d55760009050611a83565b81600181146119eb57600281146119f557611a24565b6001915050611a83565b60ff841115611a0757611a06611c71565b5b8360020a915084821115611a1e57611a1d611c71565b5b50611a83565b5060208310610133831016604e8410600b8410161715611a595782820a905083811115611a5457611a53611c71565b5b611a83565b611a668484846001611919565b92509050818404811115611a7d57611a7c611c71565b5b81810290505b9392505050565b6000611a9582611bf4565b9150611aa083611bf4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ad957611ad8611c71565b5b828202905092915050565b6000611aef82611bca565b9150611afa83611bca565b9250827f800000000000000000000000000000000000000000000000000000000000000001821260008412151615611b3557611b34611c71565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615611b6d57611b6c611c71565b5b828203905092915050565b6000611b8382611bf4565b9150611b8e83611bf4565b925082821015611ba157611ba0611c71565b5b828203905092915050565b6000611bb782611bd4565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611c2b578082015181840152602081019050611c10565b83811115611c3a576000848401525b50505050565b611c4982611ccf565b810181811067ffffffffffffffff82111715611c6857611c67611ca0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4261736546756e6769626c65546f6b656e4170703a2063616c6c65722069732060008201527f6e6f74207468652049424320636f6e7472616374000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f746f416464726573735f6f75744f66426f756e64730000000000000000000000600082015250565b611de681611bac565b8114611df157600080fd5b50565b611dfd81611bf4565b8114611e0857600080fd5b5056fea264697066735822122058c72cb319caa440e855d599c9445eca8e995cda71ffe0795e8428093cffe2ad64736f6c63430008010033 \ No newline at end of file diff --git a/chain/avalanche/ics20/ics20transferer/ics20transferer.go b/chain/avalanche/ics20/ics20transferer/ics20transferer.go new file mode 100644 index 000000000..6da5fe06e --- /dev/null +++ b/chain/avalanche/ics20/ics20transferer/ics20transferer.go @@ -0,0 +1,562 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ics20transferer + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// Height is an auto generated low-level Go binding around an user-defined struct. +type Height struct { + RevisionNumber *big.Int + RevisionHeight *big.Int +} + +// Packet is an auto generated low-level Go binding around an user-defined struct. +type Packet struct { + Sequence *big.Int + SourcePort string + SourceChannel string + DestinationPort string + DestinationChannel string + Data []byte + TimeoutHeight Height + TimeoutTimestamp *big.Int +} + +// ICS20TransfererMetaData contains all meta data concerning the ICS20Transferer contract. +var ICS20TransfererMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ibcAddr\",\"type\":\"address\"},{\"internalType\":\"contractIICS20Bank\",\"name\":\"_bank\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"ack\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"OnAcknowledgementPacket\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sequence\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"sourcePort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"sourceChannel\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationPort\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationChannel\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"revisionNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"revisionHeight\",\"type\":\"uint256\"}],\"internalType\":\"structHeight\",\"name\":\"timeoutHeight\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"timeoutTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"structPacket\",\"name\":\"packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"OnRecvPacket\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"someAddr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"portId\",\"type\":\"string\"}],\"name\":\"bindPort\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ibcAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"chan\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"chanAddr\",\"type\":\"address\"}],\"name\":\"setChannelEscrowAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "60806040523480156200001157600080fd5b50604051620020e9380380620020e98339818101604052810190620000379190620001db565b620000576200004b620000e160201b60201c565b620000e960201b60201c565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000298565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620001be8162000264565b92915050565b600081519050620001d5816200027e565b92915050565b60008060408385031215620001ef57600080fd5b6000620001ff85828601620001ad565b92505060206200021285828601620001c4565b9150509250929050565b6000620002298262000244565b9050919050565b60006200023d826200021c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200026f816200021c565b81146200027b57600080fd5b50565b620002898162000230565b81146200029557600080fd5b50565b611e4180620002a86000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806385f7175c1161005b57806385f7175c146101015780638da5cb5b146101315780639d1987651461014f578063f2fde38b1461016b57610088565b80632c49a9781461008d5780635849f2df146100bd578063696a9bf4146100d9578063715018a6146100f7575b600080fd5b6100a760048036038101906100a291906114e2565b610187565b6040516100b49190611758565b60405180910390f35b6100d760048036038101906100d291906113e1565b61024e565b005b6100e16102b7565b6040516100ee91906116b3565b60405180910390f35b6100ff6102e1565b005b61011b60048036038101906101169190611476565b6102f5565b6040516101289190611758565b60405180910390f35b610139610487565b60405161014691906116b3565b60405180910390f35b6101696004803603810190610164919061138d565b6104b0565b005b61018560048036038101906101809190611364565b61051f565b005b60006101916105a3565b73ffffffffffffffffffffffffffffffffffffffff166101af6102b7565b73ffffffffffffffffffffffffffffffffffffffff1614610205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101fc906117b5565b60405180910390fd5b61020e836105ab565b6102435760008460a0015180602001905181019061022c9190611435565b905061024181866020015187604001516105fa565b505b600190509392505050565b6102566106a0565b80600183604051610267919061169c565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6102e96106a0565b6102f3600061071e565b565b60006102ff6105a3565b73ffffffffffffffffffffffffffffffffffffffff1661031d6102b7565b73ffffffffffffffffffffffffffffffffffffffff1614610373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036a906117b5565b60405180910390fd5b60008360a0015180602001905181019061038d9190611435565b9050600061039e82600001516107e2565b905060006103d26103b787602001518860400151610810565b6103c485600001516107e2565b6108f990919063ffffffff16565b90506103e7818361099390919063ffffffff16565b61042c576104226103fb87604001516109a9565b61041360008660600151610a3090919063ffffffff16565b85600001518660200151610aa6565b9350505050610481565b60006104528361044489606001518a60800151610810565b610b4790919063ffffffff16565b905061047a61046f60008660600151610a3090919063ffffffff16565b828660200151610c1b565b9450505050505b92915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff1663c13b184f826040518263ffffffff1660e01b81526004016104e99190611773565b600060405180830381600087803b15801561050357600080fd5b505af1158015610517573d6000803e3d6000fd5b505050505050565b6105276106a0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058e90611795565b60405180910390fd5b6105a08161071e565b50565b600033905090565b60006040518060400160405280601181526020017f7b22726573756c74223a2241513d3d227d000000000000000000000000000000815250805190602001208280519060200120149050919050565b6106226106078383610810565b61061485600001516107e2565b610cb990919063ffffffff16565b61066757610659610632826109a9565b61064a60008660400151610a3090919063ffffffff16565b85600001518660200151610aa6565b61066257600080fd5b61069b565b61069161068260008560400151610a3090919063ffffffff16565b84600001518560200151610c1b565b61069a57600080fd5b5b505050565b6106a86105a3565b73ffffffffffffffffffffffffffffffffffffffff166106c6610487565b73ffffffffffffffffffffffffffffffffffffffff161461071c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610713906117d5565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6107ea610ef8565b600060208301905060405180604001604052808451815260200182815250915050919050565b610818610ef8565b6108f16108ec61085c6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506107e2565b6108de6108d961086b876107e2565b6108cb6108c66108af6040518060400160405280600181526020017f2f000000000000000000000000000000000000000000000000000000000000008152506107e2565b6108b88c6107e2565b610b4790919063ffffffff16565b6107e2565b610b4790919063ffffffff16565b6107e2565b610b4790919063ffffffff16565b6107e2565b905092915050565b610901610ef8565b8160000151836000015110156109195782905061098d565b6000600190508260200151846020015114610947578251602085015160208501518281208383201493505050505b8015610988578260000151846000018181516109639190611b78565b9150818152505082600001518460200181815161098091906118c3565b915081815250505b839150505b92915050565b6000806109a08484610d12565b14905092915050565b6000806001836040516109bc919061169c565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2757600080fd5b80915050919050565b6000601482610a3f91906118c3565b83511015610a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a79906117f5565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f24dc1da868686866040518563ffffffff1660e01b8152600401610b0994939291906116ce565b600060405180830381600087803b158015610b2357600080fd5b505af1158015610b37573d6000803e3d6000fd5b5050505060019050949350505050565b6060600082600001518460000151610b5f91906118c3565b67ffffffffffffffff811115610b9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610bd05781602001600182028036833780820191505090505b5090506000602082019050610bee8186602001518760000151610e4c565b610c10856000015182610c0191906118c3565b85602001518660000151610e4c565b819250505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba7aef438585856040518463ffffffff1660e01b8152600401610c7c9392919061171a565b600060405180830381600087803b158015610c9657600080fd5b505af1158015610caa573d6000803e3d6000fd5b50505050600190509392505050565b6000816000015183600001511015610cd45760009050610d0c565b816020015183602001511415610ced5760019050610d0c565b6000825160208501516020850151828120838320149350505050809150505b92915050565b60008083600001519050836000015183600001511015610d3457826000015190505b60008460200151905060008460200151905060005b83811015610e2b576000808451915083519050808214610df75760007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506020871015610dd157600184886020610da19190611b78565b610dab91906118c3565b6008610db79190611a8a565b6002610dc3919061196c565b610dcd9190611b78565b1990505b600081831682851603905060008114610df4578098505050505050505050610e46565b50505b602085610e0491906118c3565b9450602084610e1391906118c3565b93505050602081610e2491906118c3565b9050610d49565b5084600001518660000151610e409190611ae4565b93505050505b92915050565b5b60208110610e8b5781518352602083610e6691906118c3565b9250602082610e7591906118c3565b9150602081610e849190611b78565b9050610e4d565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506000821115610ee2576001826020610ec89190611b78565b610100610ed5919061196c565b610edf9190611b78565b90505b8019835116818551168181178652505050505050565b604051806040016040528060008152602001600081525090565b6000610f25610f208461183a565b611815565b905082815260208101848484011115610f3d57600080fd5b610f48848285611bfe565b509392505050565b6000610f63610f5e8461183a565b611815565b905082815260208101848484011115610f7b57600080fd5b610f86848285611c0d565b509392505050565b6000610fa1610f9c8461186b565b611815565b905082815260208101848484011115610fb957600080fd5b610fc4848285611bfe565b509392505050565b6000610fdf610fda8461186b565b611815565b905082815260208101848484011115610ff757600080fd5b611002848285611c0d565b509392505050565b60008135905061101981611ddd565b92915050565b600082601f83011261103057600080fd5b8135611040848260208601610f12565b91505092915050565b600082601f83011261105a57600080fd5b815161106a848260208601610f50565b91505092915050565b600082601f83011261108457600080fd5b8135611094848260208601610f8e565b91505092915050565b600082601f8301126110ae57600080fd5b81516110be848260208601610fcc565b91505092915050565b600060a082840312156110d957600080fd5b6110e360a0611815565b9050600082015167ffffffffffffffff8111156110ff57600080fd5b61110b8482850161109d565b600083015250602061111f8482850161134f565b602083015250604082015167ffffffffffffffff81111561113f57600080fd5b61114b84828501611049565b604083015250606082015167ffffffffffffffff81111561116b57600080fd5b61117784828501611049565b606083015250608082015167ffffffffffffffff81111561119757600080fd5b6111a384828501611049565b60808301525092915050565b6000604082840312156111c157600080fd5b6111cb6040611815565b905060006111db8482850161133a565b60008301525060206111ef8482850161133a565b60208301525092915050565b6000610120828403121561120e57600080fd5b611219610100611815565b905060006112298482850161133a565b600083015250602082013567ffffffffffffffff81111561124957600080fd5b61125584828501611073565b602083015250604082013567ffffffffffffffff81111561127557600080fd5b61128184828501611073565b604083015250606082013567ffffffffffffffff8111156112a157600080fd5b6112ad84828501611073565b606083015250608082013567ffffffffffffffff8111156112cd57600080fd5b6112d984828501611073565b60808301525060a082013567ffffffffffffffff8111156112f957600080fd5b6113058482850161101f565b60a08301525060c0611319848285016111af565b60c08301525061010061132e8482850161133a565b60e08301525092915050565b60008135905061134981611df4565b92915050565b60008151905061135e81611df4565b92915050565b60006020828403121561137657600080fd5b60006113848482850161100a565b91505092915050565b600080604083850312156113a057600080fd5b60006113ae8582860161100a565b925050602083013567ffffffffffffffff8111156113cb57600080fd5b6113d785828601611073565b9150509250929050565b600080604083850312156113f457600080fd5b600083013567ffffffffffffffff81111561140e57600080fd5b61141a85828601611073565b925050602061142b8582860161100a565b9150509250929050565b60006020828403121561144757600080fd5b600082015167ffffffffffffffff81111561146157600080fd5b61146d848285016110c7565b91505092915050565b6000806040838503121561148957600080fd5b600083013567ffffffffffffffff8111156114a357600080fd5b6114af858286016111fb565b925050602083013567ffffffffffffffff8111156114cc57600080fd5b6114d88582860161101f565b9150509250929050565b6000806000606084860312156114f757600080fd5b600084013567ffffffffffffffff81111561151157600080fd5b61151d868287016111fb565b935050602084013567ffffffffffffffff81111561153a57600080fd5b6115468682870161101f565b925050604084013567ffffffffffffffff81111561156357600080fd5b61156f8682870161101f565b9150509250925092565b61158281611bac565b82525050565b61159181611bbe565b82525050565b60006115a28261189c565b6115ac81856118a7565b93506115bc818560208601611c0d565b6115c581611ccf565b840191505092915050565b60006115db8261189c565b6115e581856118b8565b93506115f5818560208601611c0d565b80840191505092915050565b600061160e6026836118a7565b915061161982611ced565b604082019050919050565b60006116316034836118a7565b915061163c82611d3c565b604082019050919050565b60006116546020836118a7565b915061165f82611d8b565b602082019050919050565b60006116776015836118a7565b915061168282611db4565b602082019050919050565b61169681611bf4565b82525050565b60006116a882846115d0565b915081905092915050565b60006020820190506116c86000830184611579565b92915050565b60006080820190506116e36000830187611579565b6116f06020830186611579565b81810360408301526117028185611597565b9050611711606083018461168d565b95945050505050565b600060608201905061172f6000830186611579565b81810360208301526117418185611597565b9050611750604083018461168d565b949350505050565b600060208201905061176d6000830184611588565b92915050565b6000602082019050818103600083015261178d8184611597565b905092915050565b600060208201905081810360008301526117ae81611601565b9050919050565b600060208201905081810360008301526117ce81611624565b9050919050565b600060208201905081810360008301526117ee81611647565b9050919050565b6000602082019050818103600083015261180e8161166a565b9050919050565b600061181f611830565b905061182b8282611c40565b919050565b6000604051905090565b600067ffffffffffffffff82111561185557611854611ca0565b5b61185e82611ccf565b9050602081019050919050565b600067ffffffffffffffff82111561188657611885611ca0565b5b61188f82611ccf565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006118ce82611bf4565b91506118d983611bf4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561190e5761190d611c71565b5b828201905092915050565b6000808291508390505b60018511156119635780860481111561193f5761193e611c71565b5b600185161561194e5780820291505b808102905061195c85611ce0565b9450611923565b94509492505050565b600061197782611bf4565b915061198283611bf4565b92506119af7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846119b7565b905092915050565b6000826119c75760019050611a83565b816119d55760009050611a83565b81600181146119eb57600281146119f557611a24565b6001915050611a83565b60ff841115611a0757611a06611c71565b5b8360020a915084821115611a1e57611a1d611c71565b5b50611a83565b5060208310610133831016604e8410600b8410161715611a595782820a905083811115611a5457611a53611c71565b5b611a83565b611a668484846001611919565b92509050818404811115611a7d57611a7c611c71565b5b81810290505b9392505050565b6000611a9582611bf4565b9150611aa083611bf4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ad957611ad8611c71565b5b828202905092915050565b6000611aef82611bca565b9150611afa83611bca565b9250827f800000000000000000000000000000000000000000000000000000000000000001821260008412151615611b3557611b34611c71565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615611b6d57611b6c611c71565b5b828203905092915050565b6000611b8382611bf4565b9150611b8e83611bf4565b925082821015611ba157611ba0611c71565b5b828203905092915050565b6000611bb782611bd4565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611c2b578082015181840152602081019050611c10565b83811115611c3a576000848401525b50505050565b611c4982611ccf565b810181811067ffffffffffffffff82111715611c6857611c67611ca0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4261736546756e6769626c65546f6b656e4170703a2063616c6c65722069732060008201527f6e6f74207468652049424320636f6e7472616374000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f746f416464726573735f6f75744f66426f756e64730000000000000000000000600082015250565b611de681611bac565b8114611df157600080fd5b50565b611dfd81611bf4565b8114611e0857600080fd5b5056fea264697066735822122058c72cb319caa440e855d599c9445eca8e995cda71ffe0795e8428093cffe2ad64736f6c63430008010033", +} + +// ICS20TransfererABI is the input ABI used to generate the binding from. +// Deprecated: Use ICS20TransfererMetaData.ABI instead. +var ICS20TransfererABI = ICS20TransfererMetaData.ABI + +// ICS20TransfererBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ICS20TransfererMetaData.Bin instead. +var ICS20TransfererBin = ICS20TransfererMetaData.Bin + +// DeployICS20Transferer deploys a new Ethereum contract, binding an instance of ICS20Transferer to it. +func DeployICS20Transferer(auth *bind.TransactOpts, backend bind.ContractBackend, _ibcAddr common.Address, _bank common.Address) (common.Address, *types.Transaction, *ICS20Transferer, error) { + parsed, err := ICS20TransfererMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ICS20TransfererBin), backend, _ibcAddr, _bank) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ICS20Transferer{ICS20TransfererCaller: ICS20TransfererCaller{contract: contract}, ICS20TransfererTransactor: ICS20TransfererTransactor{contract: contract}, ICS20TransfererFilterer: ICS20TransfererFilterer{contract: contract}}, nil +} + +// ICS20Transferer is an auto generated Go binding around an Ethereum contract. +type ICS20Transferer struct { + ICS20TransfererCaller // Read-only binding to the contract + ICS20TransfererTransactor // Write-only binding to the contract + ICS20TransfererFilterer // Log filterer for contract events +} + +// ICS20TransfererCaller is an auto generated read-only Go binding around an Ethereum contract. +type ICS20TransfererCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICS20TransfererTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ICS20TransfererTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICS20TransfererFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ICS20TransfererFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ICS20TransfererSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ICS20TransfererSession struct { + Contract *ICS20Transferer // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ICS20TransfererCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ICS20TransfererCallerSession struct { + Contract *ICS20TransfererCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ICS20TransfererTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ICS20TransfererTransactorSession struct { + Contract *ICS20TransfererTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ICS20TransfererRaw is an auto generated low-level Go binding around an Ethereum contract. +type ICS20TransfererRaw struct { + Contract *ICS20Transferer // Generic contract binding to access the raw methods on +} + +// ICS20TransfererCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ICS20TransfererCallerRaw struct { + Contract *ICS20TransfererCaller // Generic read-only contract binding to access the raw methods on +} + +// ICS20TransfererTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ICS20TransfererTransactorRaw struct { + Contract *ICS20TransfererTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewICS20Transferer creates a new instance of ICS20Transferer, bound to a specific deployed contract. +func NewICS20Transferer(address common.Address, backend bind.ContractBackend) (*ICS20Transferer, error) { + contract, err := bindICS20Transferer(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ICS20Transferer{ICS20TransfererCaller: ICS20TransfererCaller{contract: contract}, ICS20TransfererTransactor: ICS20TransfererTransactor{contract: contract}, ICS20TransfererFilterer: ICS20TransfererFilterer{contract: contract}}, nil +} + +// NewICS20TransfererCaller creates a new read-only instance of ICS20Transferer, bound to a specific deployed contract. +func NewICS20TransfererCaller(address common.Address, caller bind.ContractCaller) (*ICS20TransfererCaller, error) { + contract, err := bindICS20Transferer(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ICS20TransfererCaller{contract: contract}, nil +} + +// NewICS20TransfererTransactor creates a new write-only instance of ICS20Transferer, bound to a specific deployed contract. +func NewICS20TransfererTransactor(address common.Address, transactor bind.ContractTransactor) (*ICS20TransfererTransactor, error) { + contract, err := bindICS20Transferer(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ICS20TransfererTransactor{contract: contract}, nil +} + +// NewICS20TransfererFilterer creates a new log filterer instance of ICS20Transferer, bound to a specific deployed contract. +func NewICS20TransfererFilterer(address common.Address, filterer bind.ContractFilterer) (*ICS20TransfererFilterer, error) { + contract, err := bindICS20Transferer(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ICS20TransfererFilterer{contract: contract}, nil +} + +// bindICS20Transferer binds a generic wrapper to an already deployed contract. +func bindICS20Transferer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ICS20TransfererMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ICS20Transferer *ICS20TransfererRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ICS20Transferer.Contract.ICS20TransfererCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ICS20Transferer *ICS20TransfererRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICS20Transferer.Contract.ICS20TransfererTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ICS20Transferer *ICS20TransfererRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ICS20Transferer.Contract.ICS20TransfererTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ICS20Transferer *ICS20TransfererCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ICS20Transferer.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ICS20Transferer *ICS20TransfererTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICS20Transferer.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ICS20Transferer *ICS20TransfererTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ICS20Transferer.Contract.contract.Transact(opts, method, params...) +} + +// IbcAddress is a free data retrieval call binding the contract method 0x696a9bf4. +// +// Solidity: function ibcAddress() view returns(address) +func (_ICS20Transferer *ICS20TransfererCaller) IbcAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ICS20Transferer.contract.Call(opts, &out, "ibcAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// IbcAddress is a free data retrieval call binding the contract method 0x696a9bf4. +// +// Solidity: function ibcAddress() view returns(address) +func (_ICS20Transferer *ICS20TransfererSession) IbcAddress() (common.Address, error) { + return _ICS20Transferer.Contract.IbcAddress(&_ICS20Transferer.CallOpts) +} + +// IbcAddress is a free data retrieval call binding the contract method 0x696a9bf4. +// +// Solidity: function ibcAddress() view returns(address) +func (_ICS20Transferer *ICS20TransfererCallerSession) IbcAddress() (common.Address, error) { + return _ICS20Transferer.Contract.IbcAddress(&_ICS20Transferer.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ICS20Transferer *ICS20TransfererCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ICS20Transferer.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ICS20Transferer *ICS20TransfererSession) Owner() (common.Address, error) { + return _ICS20Transferer.Contract.Owner(&_ICS20Transferer.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ICS20Transferer *ICS20TransfererCallerSession) Owner() (common.Address, error) { + return _ICS20Transferer.Contract.Owner(&_ICS20Transferer.CallOpts) +} + +// OnAcknowledgementPacket is a paid mutator transaction binding the contract method 0x2c49a978. +// +// Solidity: function OnAcknowledgementPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ack, bytes ) returns(bool) +func (_ICS20Transferer *ICS20TransfererTransactor) OnAcknowledgementPacket(opts *bind.TransactOpts, packet Packet, ack []byte, arg2 []byte) (*types.Transaction, error) { + return _ICS20Transferer.contract.Transact(opts, "OnAcknowledgementPacket", packet, ack, arg2) +} + +// OnAcknowledgementPacket is a paid mutator transaction binding the contract method 0x2c49a978. +// +// Solidity: function OnAcknowledgementPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ack, bytes ) returns(bool) +func (_ICS20Transferer *ICS20TransfererSession) OnAcknowledgementPacket(packet Packet, ack []byte, arg2 []byte) (*types.Transaction, error) { + return _ICS20Transferer.Contract.OnAcknowledgementPacket(&_ICS20Transferer.TransactOpts, packet, ack, arg2) +} + +// OnAcknowledgementPacket is a paid mutator transaction binding the contract method 0x2c49a978. +// +// Solidity: function OnAcknowledgementPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ack, bytes ) returns(bool) +func (_ICS20Transferer *ICS20TransfererTransactorSession) OnAcknowledgementPacket(packet Packet, ack []byte, arg2 []byte) (*types.Transaction, error) { + return _ICS20Transferer.Contract.OnAcknowledgementPacket(&_ICS20Transferer.TransactOpts, packet, ack, arg2) +} + +// OnRecvPacket is a paid mutator transaction binding the contract method 0x85f7175c. +// +// Solidity: function OnRecvPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ) returns(bool) +func (_ICS20Transferer *ICS20TransfererTransactor) OnRecvPacket(opts *bind.TransactOpts, packet Packet, arg1 []byte) (*types.Transaction, error) { + return _ICS20Transferer.contract.Transact(opts, "OnRecvPacket", packet, arg1) +} + +// OnRecvPacket is a paid mutator transaction binding the contract method 0x85f7175c. +// +// Solidity: function OnRecvPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ) returns(bool) +func (_ICS20Transferer *ICS20TransfererSession) OnRecvPacket(packet Packet, arg1 []byte) (*types.Transaction, error) { + return _ICS20Transferer.Contract.OnRecvPacket(&_ICS20Transferer.TransactOpts, packet, arg1) +} + +// OnRecvPacket is a paid mutator transaction binding the contract method 0x85f7175c. +// +// Solidity: function OnRecvPacket((uint256,string,string,string,string,bytes,(uint256,uint256),uint256) packet, bytes ) returns(bool) +func (_ICS20Transferer *ICS20TransfererTransactorSession) OnRecvPacket(packet Packet, arg1 []byte) (*types.Transaction, error) { + return _ICS20Transferer.Contract.OnRecvPacket(&_ICS20Transferer.TransactOpts, packet, arg1) +} + +// BindPort is a paid mutator transaction binding the contract method 0x9d198765. +// +// Solidity: function bindPort(address someAddr, string portId) returns() +func (_ICS20Transferer *ICS20TransfererTransactor) BindPort(opts *bind.TransactOpts, someAddr common.Address, portId string) (*types.Transaction, error) { + return _ICS20Transferer.contract.Transact(opts, "bindPort", someAddr, portId) +} + +// BindPort is a paid mutator transaction binding the contract method 0x9d198765. +// +// Solidity: function bindPort(address someAddr, string portId) returns() +func (_ICS20Transferer *ICS20TransfererSession) BindPort(someAddr common.Address, portId string) (*types.Transaction, error) { + return _ICS20Transferer.Contract.BindPort(&_ICS20Transferer.TransactOpts, someAddr, portId) +} + +// BindPort is a paid mutator transaction binding the contract method 0x9d198765. +// +// Solidity: function bindPort(address someAddr, string portId) returns() +func (_ICS20Transferer *ICS20TransfererTransactorSession) BindPort(someAddr common.Address, portId string) (*types.Transaction, error) { + return _ICS20Transferer.Contract.BindPort(&_ICS20Transferer.TransactOpts, someAddr, portId) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ICS20Transferer *ICS20TransfererTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ICS20Transferer.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ICS20Transferer *ICS20TransfererSession) RenounceOwnership() (*types.Transaction, error) { + return _ICS20Transferer.Contract.RenounceOwnership(&_ICS20Transferer.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ICS20Transferer *ICS20TransfererTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ICS20Transferer.Contract.RenounceOwnership(&_ICS20Transferer.TransactOpts) +} + +// SetChannelEscrowAddresses is a paid mutator transaction binding the contract method 0x5849f2df. +// +// Solidity: function setChannelEscrowAddresses(string chan, address chanAddr) returns() +func (_ICS20Transferer *ICS20TransfererTransactor) SetChannelEscrowAddresses(opts *bind.TransactOpts, arg0 string, chanAddr common.Address) (*types.Transaction, error) { + return _ICS20Transferer.contract.Transact(opts, "setChannelEscrowAddresses", arg0, chanAddr) +} + +// SetChannelEscrowAddresses is a paid mutator transaction binding the contract method 0x5849f2df. +// +// Solidity: function setChannelEscrowAddresses(string chan, address chanAddr) returns() +func (_ICS20Transferer *ICS20TransfererSession) SetChannelEscrowAddresses(arg0 string, chanAddr common.Address) (*types.Transaction, error) { + return _ICS20Transferer.Contract.SetChannelEscrowAddresses(&_ICS20Transferer.TransactOpts, arg0, chanAddr) +} + +// SetChannelEscrowAddresses is a paid mutator transaction binding the contract method 0x5849f2df. +// +// Solidity: function setChannelEscrowAddresses(string chan, address chanAddr) returns() +func (_ICS20Transferer *ICS20TransfererTransactorSession) SetChannelEscrowAddresses(arg0 string, chanAddr common.Address) (*types.Transaction, error) { + return _ICS20Transferer.Contract.SetChannelEscrowAddresses(&_ICS20Transferer.TransactOpts, arg0, chanAddr) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ICS20Transferer *ICS20TransfererTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ICS20Transferer.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ICS20Transferer *ICS20TransfererSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ICS20Transferer.Contract.TransferOwnership(&_ICS20Transferer.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ICS20Transferer *ICS20TransfererTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ICS20Transferer.Contract.TransferOwnership(&_ICS20Transferer.TransactOpts, newOwner) +} + +// ICS20TransfererOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ICS20Transferer contract. +type ICS20TransfererOwnershipTransferredIterator struct { + Event *ICS20TransfererOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ICS20TransfererOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ICS20TransfererOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ICS20TransfererOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ICS20TransfererOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ICS20TransfererOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ICS20TransfererOwnershipTransferred represents a OwnershipTransferred event raised by the ICS20Transferer contract. +type ICS20TransfererOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ICS20Transferer *ICS20TransfererFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ICS20TransfererOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ICS20Transferer.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ICS20TransfererOwnershipTransferredIterator{contract: _ICS20Transferer.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ICS20Transferer *ICS20TransfererFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ICS20TransfererOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ICS20Transferer.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ICS20TransfererOwnershipTransferred) + if err := _ICS20Transferer.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ICS20Transferer *ICS20TransfererFilterer) ParseOwnershipTransferred(log types.Log) (*ICS20TransfererOwnershipTransferred, error) { + event := new(ICS20TransfererOwnershipTransferred) + if err := _ICS20Transferer.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/chain/avalanche/lib/chain_id.go b/chain/avalanche/lib/chain_id.go new file mode 100644 index 000000000..df9e2542d --- /dev/null +++ b/chain/avalanche/lib/chain_id.go @@ -0,0 +1,31 @@ +package lib + +import ( + "errors" + "fmt" + "strconv" +) + +type ChainID struct { + Name string + Number uint32 +} + +var ( + ErrBadChainID = errors.New("networkID has bad format") +) + +func (cid ChainID) String() string { + return fmt.Sprintf("%d", cid.Number) +} + +func ParseChainID(str string) (*ChainID, error) { + num, err := strconv.ParseUint(str, 10, 0) + if err != nil { + return nil, ErrBadChainID + } + return &ChainID{ + Name: "neto", + Number: uint32(num), + }, nil +} diff --git a/chain/avalanche/lib/network.go b/chain/avalanche/lib/network.go new file mode 100644 index 000000000..59bcc7d3f --- /dev/null +++ b/chain/avalanche/lib/network.go @@ -0,0 +1,106 @@ +package lib + +import ( + "context" + "errors" + "fmt" + "io" + "net" + "strings" + "syscall" + "time" + + "github.com/ava-labs/avalanchego/api/info" + "go.uber.org/zap" +) + +func IsOpened(host string, port string) bool { + conn, err := net.DialTimeout("tcp", net.JoinHostPort(host, port), time.Second) + if err != nil { + return false + } + + if conn != nil { + conn.Close() + return true + } + + return false +} + +func WaitPort(ctx context.Context, host, port string) error { + var err error + for done := false; !done && err == nil; { + select { + case <-ctx.Done(): + err = fmt.Errorf("WaitPort(%s, %s) context closed", host, port) + default: + done = IsOpened(host, port) + } + } + return err +} + +func WaitNode(ctx context.Context, host, port string, logger *zap.Logger, nodeIndex int, blockchainID string) error { + err := WaitPort(ctx, host, port) + if err != nil { + return err + } + + time.Sleep(10 * time.Second) + + client := info.NewClient(fmt.Sprintf("http://%s:%s", host, port)) + for done := false; !done && err == nil; { + select { + case <-ctx.Done(): + return fmt.Errorf("context closed") + default: + var subnetDone bool + var subnetErr error + xdone, xerr := client.IsBootstrapped(ctx, "X") + if errors.Is(xerr, io.EOF) || errors.Is(xerr, syscall.ECONNREFUSED) { + xerr = nil + } + pdone, perr := client.IsBootstrapped(ctx, "P") + if errors.Is(perr, io.EOF) || errors.Is(perr, syscall.ECONNREFUSED) { + perr = nil + } + cdone, cerr := client.IsBootstrapped(ctx, "C") + if errors.Is(cerr, io.EOF) || errors.Is(cerr, syscall.ECONNREFUSED) { + cerr = nil + } + if blockchainID != "" { + subnetDone, subnetErr = client.IsBootstrapped(ctx, blockchainID) + + if subnetErr != nil && (errors.Is(subnetErr, io.EOF) || + errors.Is(subnetErr, syscall.ECONNREFUSED) || + strings.Contains(subnetErr.Error(), "there is no chain with alias/ID")) { + subnetErr = nil + } + } + fields := []zap.Field{ + zap.Int("node", nodeIndex), + zap.Boolp("x", &xdone), + zap.Boolp("p", &pdone), + zap.Boolp("c", &cdone), + } + if blockchainID != "" { + fields = append(fields, zap.Boolp("subnet", &subnetDone)) + } + logger.Info( + "bootstrap status", + fields..., + ) + + done = xdone && pdone && cdone + err = errors.Join(xerr, perr, cerr) + if blockchainID != "" { + done = done && subnetDone + err = errors.Join(err, subnetErr) + } + time.Sleep(5 * time.Second) + } + } + + return err +} diff --git a/chain/avalanche/node.go b/chain/avalanche/node.go new file mode 100644 index 000000000..7661e8aa4 --- /dev/null +++ b/chain/avalanche/node.go @@ -0,0 +1,807 @@ +package avalanche + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "math/big" + "path/filepath" + "strconv" + "strings" + "time" + + "github.com/ava-labs/avalanchego/ids" + "github.com/ava-labs/avalanchego/utils/constants" + "github.com/ava-labs/avalanchego/utils/crypto/secp256k1" + "github.com/ava-labs/avalanchego/utils/units" + "github.com/ava-labs/avalanchego/vms/components/avax" + "github.com/ava-labs/avalanchego/vms/platformvm" + "github.com/ava-labs/avalanchego/vms/platformvm/txs" + "github.com/ava-labs/avalanchego/vms/secp256k1fx" + "github.com/ava-labs/avalanchego/wallet/subnet/primary" + "github.com/ava-labs/avalanchego/wallet/subnet/primary/common" + "github.com/avast/retry-go/v4" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + ethcommon "github.com/ethereum/go-ethereum/common" + ethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + "golang.org/x/sync/errgroup" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/volume" + dockerclient "github.com/docker/docker/client" + "github.com/docker/go-connections/nat" + "go.uber.org/zap" + + "github.com/strangelove-ventures/interchaintest/v8/dockerutil" + + "github.com/strangelove-ventures/interchaintest/v8/chain/avalanche/lib" + "github.com/strangelove-ventures/interchaintest/v8/ibc" +) + +const ( + rpcPort = "9650/tcp" + stakingPort = "9651/tcp" +) + +var ( + portBindings = nat.PortMap{ + nat.Port(rpcPort): {}, + nat.Port(stakingPort): {}, + } +) + +type ( + AvalancheNode struct { + chain *AvalancheChain + + logger *zap.Logger + containerLifecycle *dockerutil.ContainerLifecycle + dockerClient *dockerclient.Client + image ibc.DockerImage + volume volume.Volume + + networkID string + testName string + index int + options AvalancheNodeOpts + } + + AvalancheNodes []*AvalancheNode + + AvalancheNodeCredentials struct { + PK *secp256k1.PrivateKey + ID ids.NodeID + NodeIDs []ids.NodeID + TLSCert []byte + TLSKey []byte + BlsKey []byte + } + + AvalancheNodeSubnetOpts struct { + Name string + VmID ids.ID + VM []byte + Genesis []byte + SCFactory ibc.AvalancheSubnetClientFactory + + subnet ids.ID + chain ids.ID + } + + AvalancheNodeOpts struct { + PublicIP string + Subnets []AvalancheNodeSubnetOpts + Bootstrap []*AvalancheNode + Credentials AvalancheNodeCredentials + ChainID lib.ChainID + } +) + +func NewAvalancheNode( + ctx context.Context, + chain *AvalancheChain, + networkID string, + testName string, + dockerClient *dockerclient.Client, + image ibc.DockerImage, + containerIdx int, + log *zap.Logger, + genesis Genesis, + options *AvalancheNodeOpts, +) (*AvalancheNode, error) { + node := &AvalancheNode{ + chain: chain, + index: containerIdx, + logger: log, + dockerClient: dockerClient, + image: image, + networkID: networkID, + testName: testName, + options: *options, + } + + name := node.Name() + + // delete old volume + err := dockerClient.VolumeRemove(ctx, name, true) + if err != nil { + return nil, err + } + + vlm, err := dockerClient.VolumeCreate(ctx, volume.CreateOptions{ + Name: name, + Labels: map[string]string{ + dockerutil.CleanupLabel: testName, + dockerutil.NodeOwnerLabel: name, + }, + }) + if err != nil { + return nil, err + } + + if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ + Log: log, + Client: dockerClient, + VolumeName: name, + ImageRef: image.Ref(), + TestName: testName, + UidGid: image.UidGid, + }); err != nil { + return nil, fmt.Errorf("set volume owner: %w", err) + } + + node.volume = vlm + + fmt.Printf("creating container lifecycle, name: %s\n", name) + + node.containerLifecycle = dockerutil.NewContainerLifecycle(log, dockerClient, name) + + genesisBz, err := json.MarshalIndent(genesis, "", " ") + if err != nil { + return nil, err + } + + vmaliases := make(map[ids.ID][]string) + for i := range node.options.Subnets { + vmaliases[node.options.Subnets[i].VmID] = []string{node.options.Subnets[i].Name} + } + vmaliasesData, err := json.MarshalIndent(vmaliases, "", " ") + if err != nil { + return nil, err + } + + if err := node.WriteFile(ctx, genesisBz, "genesis.json"); err != nil { + return nil, fmt.Errorf("failed to write genesis file: %w", err) + } + + if err := node.WriteFile(ctx, options.Credentials.TLSCert, "tls.cert"); err != nil { + return nil, fmt.Errorf("failed to write TLS certificate: %w", err) + } + + if err := node.WriteFile(ctx, options.Credentials.TLSKey, "tls.key"); err != nil { + return nil, fmt.Errorf("failed to write TLS key: %w", err) + } + + if err := node.WriteFile(ctx, options.Credentials.BlsKey, "signer.key"); err != nil { + return nil, fmt.Errorf("failed to write TLS key: %w", err) + } + + if err := node.WriteFile(ctx, vmaliasesData, "configs/vms/aliases.json"); err != nil { + return nil, fmt.Errorf("failed to write TLS key: %w", err) + } + + return node, node.CreateContainer(ctx) +} + +func (n *AvalancheNode) HomeDir() string { + return "/home/heighliner/ava" +} + +func (n *AvalancheNode) Bind() []string { + return []string{ + fmt.Sprintf("%s:%s", n.volume.Name, n.HomeDir()), + } +} + +func (n *AvalancheNode) WriteFile(ctx context.Context, content []byte, relPath string) error { + fw := dockerutil.NewFileWriter(n.logger, n.dockerClient, n.testName) + return fw.WriteFile(ctx, n.volume.Name, relPath, content) +} + +func (n *AvalancheNode) Exec(ctx context.Context, cmd []string, env []string) ([]byte, []byte, error) { + job := dockerutil.NewImage(n.logger, n.dockerClient, n.networkID, n.testName, n.image.Repository, n.image.Version) + opts := dockerutil.ContainerOptions{ + Binds: n.Bind(), + Env: env, + User: n.image.UidGid, + } + res := job.Run(ctx, cmd, opts) + return res.Stdout, res.Stderr, res.Err +} + +func (n *AvalancheNode) NodeId() string { + return n.options.Credentials.ID.String() +} + +func (n *AvalancheNode) Name() string { + return fmt.Sprintf( + "av-%s-%d", + dockerutil.SanitizeContainerName(n.testName), + n.index, + ) +} + +func (n *AvalancheNode) HostName() string { + return dockerutil.CondenseHostName(n.Name()) +} + +func (n *AvalancheNode) PublicStakingAddr(ctx context.Context) (string, error) { + netinfo, err := n.dockerClient.NetworkInspect(ctx, n.networkID, types.NetworkInspectOptions{}) + if err != nil { + return "", err + } + info, err := n.dockerClient.ContainerInspect(ctx, n.containerLifecycle.ContainerID()) + if err != nil { + return "", err + } + + return fmt.Sprintf( + "%s:9651", + info.NetworkSettings.Networks[netinfo.Name].IPAddress, + ), nil +} + +func (n *AvalancheNode) StakingPort() string { + info, err := n.dockerClient.ContainerInspect(context.Background(), n.containerLifecycle.ContainerID()) + if err != nil { + panic(err) + } + return info.HostConfig.PortBindings[nat.Port(stakingPort)][0].HostPort +} + +func (n *AvalancheNode) RPCPort() string { + info, err := n.dockerClient.ContainerInspect(context.Background(), n.containerLifecycle.ContainerID()) + if err != nil { + panic(err) + } + return info.HostConfig.PortBindings[nat.Port(rpcPort)][0].HostPort +} + +func (n *AvalancheNode) GRPCPort() string { + panic(errors.New("doesn't support grpc")) +} + +func (n *AvalancheNode) SubnetID() string { + return n.options.Subnets[0].subnet.String() +} + +func (n *AvalancheNode) BlockchainID() string { + return n.options.Subnets[0].chain.String() +} + +func (n *AvalancheNode) chainClient(id string) (ibc.AvalancheSubnetClient, error) { + addr := fmt.Sprintf("http://127.0.0.1:%s", n.RPCPort()) + strpk := n.options.Credentials.PK.String() + switch id { + case "x", "p", "c": + host := fmt.Sprintf("%s/ext/bc/%s", addr, strings.ToUpper(id)) + if id == "x" { + return NewXChainClient(host, strpk) + } else if id == "p" { + return NewPChainClient(host, strpk) + } else { + return NewCChainClient(host, strpk) + } + default: + subnetID, err := strconv.Atoi(id) + if err != nil || subnetID >= len(n.options.Subnets) { + return nil, fmt.Errorf("not valid subnet id: %w", err) + } + return n.options.Subnets[subnetID].SCFactory( + fmt.Sprintf("%s/ext/bc/%s", addr, n.options.Subnets[subnetID].chain), + strpk, + ) + } +} + +func (n *AvalancheNode) CreateKey(ctx context.Context, keyName string) error { + // ToDo: create key + // https://github.com/ava-labs/avalanche-docs/blob/c136e8752af23db5214ff82c2153aac55542781b/docs/quickstart/fund-a-local-test-network.md + // https://github.com/ava-labs/avalanche-docs/blob/c136e8752af23db5214ff82c2153aac55542781b/docs/quickstart/multisig-utxos-with-avalanchejs.md#setup-keychains-with-private-keys + panic("ToDo: implement me") +} + +func (n *AvalancheNode) RecoverKey(ctx context.Context, name, mnemonic string) error { + // ToDo: recover key from mnemonic + // https://github.com/ava-labs/avalanche-docs/blob/c136e8752af23db5214ff82c2153aac55542781b/docs/quickstart/fund-a-local-test-network.md + // https://github.com/ava-labs/avalanche-docs/blob/c136e8752af23db5214ff82c2153aac55542781b/docs/quickstart/multisig-utxos-with-avalanchejs.md#setup-keychains-with-private-keys + panic("ToDo: implement me") +} + +func (n *AvalancheNode) GetAddress(ctx context.Context, keyName string) ([]byte, error) { + return ethcommon.FromHex("0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC"), nil +} + +func (n *AvalancheNode) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { + rawSubnetID, ok := ctx.Value("subnet").(string) + rawSubnetID = strings.ToLower(rawSubnetID) + if !ok { + if strings.HasPrefix(amount.Address, "X-") { + rawSubnetID = "x" + } else if strings.HasPrefix(amount.Address, "P-") { + rawSubnetID = "p" + } else if strings.HasPrefix(amount.Address, "0x") { + rawSubnetID = "c" + } else { + return fmt.Errorf("address have uknown format: %s", amount.Address) + } + rawSubnetID = "x" + } + n.logger.Info("create client", zap.String("subnet", rawSubnetID)) + client, err := n.chainClient(rawSubnetID) + if err != nil { + return fmt.Errorf("subnet client creation error: %w", err) + } + return client.SendFunds(ctx, keyName, amount) +} + +func (n *AvalancheNode) SendIBCTransfer(ctx context.Context, channelID, keyName string, amount ibc.WalletAmount, options ibc.TransferOptions) (ibc.Tx, error) { + pkey, err := crypto.HexToECDSA(keyName) + if err != nil { + return ibc.Tx{}, err + } + addr := crypto.PubkeyToAddress(pkey.PublicKey) + + packetData, _ := json.Marshal(FungibleTokenPacketData{ + Denom: amount.Denom, + Amount: amount.Amount.String(), + Sender: addr.String(), + Receiver: amount.Address, + }) + + msg, err := packSendPacket(MsgSendPacket{ + ChannelCapability: big.NewInt(0), + SourcePort: "transfer", + SourceChannel: channelID, + TimeoutHeight: Height{ + RevisionHeight: big.NewInt(3000), + RevisionNumber: big.NewInt(3000), + }, + TimeoutTimestamp: big.NewInt(0), + Data: packetData, + }) + if err != nil { + return ibc.Tx{}, err + } + + rpcUrl := fmt.Sprintf("http://127.0.0.1:%s/ext/bc/%s/rpc", n.RPCPort(), n.BlockchainID()) + + client, err := ethclient.Dial(rpcUrl) + if err != nil { + return ibc.Tx{}, err + } + + chainID, err := client.ChainID(context.Background()) + if err != nil { + return ibc.Tx{}, err + } + nonce, err := client.NonceAt(context.Background(), addr, nil) + if err != nil { + return ibc.Tx{}, err + } + gasPrice, err := client.SuggestGasPrice(context.Background()) + if err != nil { + return ibc.Tx{}, err + } + + value := big.NewInt(0) + tx := ethtypes.NewTransaction(nonce, AvalancheIBCPrecompileAddress, value, 2100000, gasPrice, msg) + + signedTx, err := ethtypes.SignTx(tx, ethtypes.NewEIP155Signer(chainID), pkey) + if err != nil { + return ibc.Tx{}, err + } + + err = client.SendTransaction(context.Background(), signedTx) + if err != nil { + return ibc.Tx{}, err + } + + receipt, err := bind.WaitMined(context.Background(), client, signedTx) + if err != nil { + return ibc.Tx{}, err + } + + return ibc.Tx{ + Height: receipt.BlockNumber.Int64(), + TxHash: signedTx.Hash().String(), + GasSpent: int64(receipt.GasUsed), + Packet: ibc.Packet{ + Sequence: 0, + SourcePort: "", + SourceChannel: "", + DestPort: "", + DestChannel: "", + Data: nil, + TimeoutHeight: "", + TimeoutTimestamp: 0, + }, + }, nil +} + +func (n *AvalancheNode) Height(ctx context.Context) (uint64, error) { + rawSubnetID, ok := ctx.Value("subnet").(string) + rawSubnetID = strings.ToLower(rawSubnetID) + if !ok { + return platformvm.NewClient(fmt.Sprintf("http://127.0.0.1:%s", n.RPCPort())).GetHeight(ctx) + } + client, err := n.chainClient(rawSubnetID) + if err != nil { + return 0, fmt.Errorf("subnet client creation error: %w", err) + } + return client.Height(ctx) +} + +func (n *AvalancheNode) GetBalance(ctx context.Context, address string, denom string) (int64, error) { + rawSubnetID, ok := ctx.Value("subnet").(string) + rawSubnetID = strings.ToLower(rawSubnetID) + if !ok { + if strings.HasPrefix(address, "X-") { + rawSubnetID = "x" + } else if strings.HasPrefix(address, "P-") { + rawSubnetID = "p" + } else if strings.HasPrefix(address, "0x") { + rawSubnetID = "c" + } else { + return 0, fmt.Errorf("address have uknown format: %s", address) + } + } + client, err := n.chainClient(rawSubnetID) + if err != nil { + return 0, fmt.Errorf("subnet client creation error: %w", err) + } + return client.GetBalance(ctx, address) +} + +func (n *AvalancheNode) GetBankBalance(ctx context.Context, bank string, address string, denom string) (int64, error) { + rawSubnetID, ok := ctx.Value("subnet").(string) + rawSubnetID = strings.ToLower(rawSubnetID) + if !ok { + return 0, fmt.Errorf("bank balance available only for subnet: %s", address) + } + client, err := n.chainClient(rawSubnetID) + if err != nil { + return 0, fmt.Errorf("subnet client creation error: %w", err) + } + + return client.GetBankBalance(ctx, bank, address, denom) +} + +func (n *AvalancheNode) IP() string { + return n.options.PublicIP +} + +func (n *AvalancheNode) CreateContainer(ctx context.Context) error { + netinfo, err := n.dockerClient.NetworkInspect(ctx, n.networkID, types.NetworkInspectOptions{}) + if err != nil { + return fmt.Errorf("failed to inspect network: %w", err) + } + + bootstrapIps, bootstrapIds := "", "" + if len(n.options.Bootstrap) > 0 { + for i := range n.options.Bootstrap { + sep := "" + if i > 0 { + sep = "," + } + stakingAddr, err := n.options.Bootstrap[i].PublicStakingAddr(ctx) + if err != nil { + return fmt.Errorf("failed to get public staking address for index %d: %w", i, err) + } + bootstrapIps += sep + stakingAddr + bootstrapIds += sep + n.options.Bootstrap[i].NodeId() + } + } + + trackSubnets := "" + if len(n.options.Subnets) > 0 { + for i := range n.options.Subnets { + sep := "" + if i > 0 { + sep = "," + } + if n.options.Subnets[i].subnet != ids.Empty { + trackSubnets += sep + n.options.Subnets[i].subnet.String() + } + } + } + + cmd := []string{ + n.chain.cfg.Bin, + "--http-host", "0.0.0.0", + "--http-allowed-hosts", "*", + "--data-dir", n.HomeDir(), + "--public-ip", n.options.PublicIP, + "--network-id", n.options.ChainID.String(), + "--genesis-file", filepath.Join(n.HomeDir(), "genesis.json"), + "--staking-tls-cert-file", filepath.Join(n.HomeDir(), "tls.cert"), + "--staking-tls-key-file", filepath.Join(n.HomeDir(), "tls.key"), + "--staking-signer-key-file", filepath.Join(n.HomeDir(), "signer.key"), + "--plugin-dir", "/avalanchego/build/plugins", + } + if bootstrapIps != "" && bootstrapIds != "" { + cmd = append( + cmd, + "--bootstrap-ips", bootstrapIps, + "--bootstrap-ids", bootstrapIds, + ) + } + if trackSubnets != "" { + cmd = append(cmd, "--track-subnets", trackSubnets) + } + + return n.containerLifecycle.CreateContainerInNetwork( + ctx, + n.testName, + n.image, + portBindings, + n.Bind(), + nil, + n.HostName(), + cmd, + n.chain.cfg.Env, + &network.NetworkingConfig{ + EndpointsConfig: map[string]*network.EndpointSettings{ + netinfo.Name: { + NetworkID: netinfo.ID, + IPAddress: n.options.PublicIP, + IPAMConfig: &network.EndpointIPAMConfig{ + IPv4Address: n.options.PublicIP, + }, + }, + }, + }, + ) +} + +func (n *AvalancheNode) StartContainer(ctx context.Context, testName string, additionalGenesisWallets []ibc.WalletAmount) error { + return n.containerLifecycle.StartContainer(ctx) +} + +func (n *AvalancheNode) createSubnetChain(ctx context.Context) (string, string, error) { + if len(n.options.Subnets) == 0 { + return "", "", nil + } + + kc := secp256k1fx.NewKeychain(n.options.Credentials.PK) + ownerAddr := n.options.Credentials.PK.Address() + + wallet, err := primary.MakeWallet(ctx, &primary.WalletConfig{ + URI: fmt.Sprintf("http://127.0.0.1:%s", n.RPCPort()), + AVAXKeychain: kc, + EthKeychain: kc, + }) + if err != nil { + return "", "", err + } + + // Get the P-chain and the X-chain wallets + pWallet := wallet.P() + xWallet := wallet.X() + + xBuilder := xWallet.Builder() + xContext := xBuilder.Context() + + // Pull out useful constants to use when issuing transactions. + xChainID := xContext.BlockchainID + owner := &secp256k1fx.OutputOwners{ + Threshold: 1, + Addrs: []ids.ShortID{ownerAddr}, + } + + // Send AVAX to the P-chain. + exportStartTime := time.Now() + exportTx, err := xWallet.IssueExportTx( + constants.PlatformChainID, + []*avax.TransferableOutput{ + { + Asset: avax.Asset{ + ID: xContext.AVAXAssetID, + }, + Out: &secp256k1fx.TransferOutput{ + Amt: 2 * uint64(len(n.options.Subnets)+1) * pWallet.Builder().Context().CreateSubnetTxFee, + OutputOwners: *owner, + }, + }, + }, + ) + if err != nil { + n.logger.Error( + "failed to issue X->P export transaction", + zap.Error(err), + ) + return "", "", err + } + + n.logger.Info( + "issued X->P export", + zap.String("exportTxID", exportTx.ID().String()), + zap.Duration("duration", time.Since(exportStartTime)), + ) + + // Import AVAX from the X-chain into the P-chain. + importStartTime := time.Now() + importTx, err := pWallet.IssueImportTx(xChainID, owner) + if err != nil { + n.logger.Error( + "failed to issue X->P import transaction", + zap.Error(err), + ) + return "", "", err + } + n.logger.Info( + "issued X->P import", + zap.String("importTxID", importTx.ID().String()), + zap.Duration("duration", time.Since(importStartTime)), + ) + + time.Sleep(2 * time.Second) + + var chainID string + var subnetID string + + for i, subnet := range n.options.Subnets { + createSubnetStartTime := time.Now() + createSubnetTx, err := pWallet.IssueCreateSubnetTx(owner, common.WithContext(ctx), common.WithAssumeDecided()) + if err != nil { + n.logger.Error( + "failed to issue create subnet transaction", + zap.Error(err), + zap.String("name", subnet.Name), + ) + return "", "", err + } + n.logger.Info( + "issued create subnet transaction", + zap.String("name", subnet.Name), + zap.String("createSubnetTxID", createSubnetTx.ID().String()), + zap.Duration("duration", time.Since(createSubnetStartTime)), + ) + + time.Sleep(4 * time.Second) + + startTime := time.Now().Add(20 * time.Second) + duration := 2 * 7 * 24 * time.Hour // 2 weeks + weight := units.Schmeckle + addValidatorStartTime := time.Now() + + // add all nodes as a validator + for _, nodeID := range n.options.Credentials.NodeIDs { + addValidatorTx, err := pWallet.IssueAddSubnetValidatorTx(&txs.SubnetValidator{ + Validator: txs.Validator{ + NodeID: nodeID, + Start: uint64(startTime.Unix()), + End: uint64(startTime.Add(duration).Unix()), + Wght: weight, + }, + Subnet: createSubnetTx.ID(), + }) + if err != nil { + n.logger.Error( + "failed to issue add subnet validator transaction:", + zap.Error(err), + zap.String("name", subnet.Name), + zap.String("nodeID", nodeID.String()), + ) + return "", "", err + } + n.logger.Info( + "added new subnet validator", + zap.String("nodeID", nodeID.String()), + zap.String("subnetID", createSubnetTx.ID().String()), + zap.String("addValidatorTxID", addValidatorTx.ID().String()), + zap.Duration("duration", time.Since(addValidatorStartTime)), + ) + + time.Sleep(4 * time.Second) + } + + createChainStartTime := time.Now() + createChainTx, err := pWallet.IssueCreateChainTx(createSubnetTx.ID(), subnet.Genesis, subnet.VmID, nil, subnet.Name) + if err != nil { + n.logger.Error( + "failed to issue create chain transaction", + zap.Error(err), + zap.String("name", subnet.Name), + ) + return "", "", err + } + + chainID = createChainTx.ID().String() + subnetID = createSubnetTx.ID().String() + + n.logger.Info( + "created new chain", + zap.String("name", subnet.Name), + zap.String("chainID", chainID), + zap.Duration("duration", time.Since(createChainStartTime)), + ) + + n.options.Subnets[i].subnet = createSubnetTx.ID() + n.options.Subnets[i].chain = createChainTx.ID() + + time.Sleep(30 * time.Second) + } + + return subnetID, chainID, nil +} + +func (n *AvalancheNode) StartSubnets(ctx context.Context, nodes AvalancheNodes) error { + _, chainID, err := n.createSubnetChain(ctx) + if err != nil { + return err + } + + for _, node := range nodes { + // enable Warp API + node.WriteFile(ctx, []byte(`{"warp-api-enabled": true}`), fmt.Sprintf("configs/chains/%s/config.json", chainID)) + + n.logger.Info("stopping container", zap.Int("index", node.index), zap.String("NodeID", node.NodeId())) + if err := node.containerLifecycle.StopContainer(ctx); err != nil { + return err + } + + n.logger.Info("removing container", zap.Int("index", node.index), zap.String("NodeID", node.NodeId())) + if err := node.containerLifecycle.RemoveContainer(ctx); err != nil { + return err + } + + n.logger.Info("creating new container", zap.Int("index", node.index), zap.String("NodeID", node.NodeId())) + if err := node.CreateContainer(ctx); err != nil { + return fmt.Errorf("failed to re-create container for subnet", err) + } + + n.logger.Info("starting new container", zap.Int("index", node.index), zap.String("NodeID", node.NodeId())) + if err := node.containerLifecycle.StartContainer(ctx); err != nil { + return fmt.Errorf("failed to start container for subnet", err) + } + } + + eg, egCtx := errgroup.WithContext(ctx) + for _, node := range nodes { + node := node + eg.Go(func() error { + tCtx, tCtxCancel := context.WithTimeout(egCtx, ChainBootstrapTimeout) + defer tCtxCancel() + + return lib.WaitNode(tCtx, "127.0.0.1", node.RPCPort(), n.logger, node.index, chainID) + }) + } + if err := eg.Wait(); err != nil { + return fmt.Errorf("failed to start avalanche nodes %w", err) + } + + return nil +} + +func (n *AvalancheNode) Start(ctx context.Context, testName string, additionalGenesisWallets []ibc.WalletAmount) error { + err := retry.Do(func() error { + return n.StartContainer(ctx, testName, additionalGenesisWallets) + }, + // retry for total of 3 seconds + retry.Attempts(15), + retry.Delay(2*time.Second), + retry.DelayType(retry.FixedDelay), + retry.LastErrorOnly(true), + ) + + return err +} + +func (n *AvalancheNode) WaitNode(ctx context.Context) error { + return lib.WaitNode(ctx, "127.0.0.1", n.RPCPort(), n.logger, n.index, "") +} diff --git a/chain/avalanche/wallet.go b/chain/avalanche/wallet.go new file mode 100644 index 000000000..999d027d9 --- /dev/null +++ b/chain/avalanche/wallet.go @@ -0,0 +1,41 @@ +package avalanche + +import ( + "github.com/ethereum/go-ethereum/common" + + "github.com/strangelove-ventures/interchaintest/v8/ibc" +) + +var _ ibc.Wallet = &AvalancheWallet{} + +type AvalancheWallet struct { + mnemonic string + address common.Address + keyName string + chainCfg ibc.ChainConfig +} + +func NewWallet(keyname string, address common.Address, mnemonic string, chainCfg ibc.ChainConfig) *AvalancheWallet { + return &AvalancheWallet{ + mnemonic: mnemonic, + address: address, + keyName: keyname, + chainCfg: chainCfg, + } +} + +func (w *AvalancheWallet) KeyName() string { + return w.keyName +} + +func (w *AvalancheWallet) Mnemonic() string { + return w.mnemonic +} + +func (w *AvalancheWallet) Address() []byte { + return w.address.Bytes() +} + +func (w *AvalancheWallet) FormattedAddress() string { + return w.address.String() +} diff --git a/chainfactory.go b/chainfactory.go index 783c10f96..4f5625919 100644 --- a/chainfactory.go +++ b/chainfactory.go @@ -7,13 +7,15 @@ import ( "strings" "sync" + "go.uber.org/zap" + "gopkg.in/yaml.v3" + + "github.com/strangelove-ventures/interchaintest/v8/chain/avalanche" "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v8/chain/ethereum" "github.com/strangelove-ventures/interchaintest/v8/chain/penumbra" "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" "github.com/strangelove-ventures/interchaintest/v8/ibc" - "go.uber.org/zap" - "gopkg.in/yaml.v3" ) // ChainFactory describes how to get chains for tests. @@ -130,6 +132,8 @@ func buildChain(log *zap.Logger, testName string, cfg ibc.ChainConfig, numValida } switch cfg.Type { + case "avalanche": + return avalanche.NewAvalancheChain(log, testName, cfg, nv, nf) case "cosmos": return cosmos.NewCosmosChain(testName, cfg, nv, nf, log), nil case "penumbra": diff --git a/configuredChains.yaml b/configuredChains.yaml index 11297a238..e9a147fe7 100644 --- a/configuredChains.yaml +++ b/configuredChains.yaml @@ -59,6 +59,19 @@ axelar: uid-gid: 1025:1025 no-host-mount: true +avalanche: + name: avalanche + type: avalanche + bin: avalanchego + bech32-prefix: "" + denom: avax + gas-prices: + gas-adjustment: 0.0 + trusting-period: "" + images: + - repository: avalanchego:v1.10.18-ibc + uid-gid: 1025:1025 + bitcanna: name: bitcanna type: cosmos diff --git a/dockerutil/container_lifecycle.go b/dockerutil/container_lifecycle.go index a466488fe..b44aa46b6 100644 --- a/dockerutil/container_lifecycle.go +++ b/dockerutil/container_lifecycle.go @@ -45,6 +45,36 @@ func (c *ContainerLifecycle) CreateContainer( hostName string, cmd []string, env []string, +) error { + return c.CreateContainerInNetwork( + ctx, + testName, + image, + ports, + volumeBinds, + mounts, + hostName, + cmd, + env, + &network.NetworkingConfig{ + EndpointsConfig: map[string]*network.EndpointSettings{ + networkID: {}, + }, + }) + +} + +func (c *ContainerLifecycle) CreateContainerInNetwork( + ctx context.Context, + testName string, + image ibc.DockerImage, + ports nat.PortMap, + volumeBinds []string, + mounts []mount.Mount, + hostName string, + cmd []string, + env []string, + netConfig *network.NetworkingConfig, ) error { imageRef := image.Ref() c.log.Info( @@ -93,11 +123,7 @@ func (c *ContainerLifecycle) CreateContainer( DNS: []string{}, Mounts: mounts, }, - &network.NetworkingConfig{ - EndpointsConfig: map[string]*network.EndpointSettings{ - networkID: {}, - }, - }, + netConfig, nil, c.containerName, ) @@ -119,6 +145,11 @@ func (c *ContainerLifecycle) StartContainer(ctx context.Context) error { c.preStartListeners.CloseAll() c.preStartListeners = []net.Listener{} + c.log.Info("Starting container", + zap.String("container", c.containerName), + zap.String("id", c.id), + ) + if err := StartContainer(ctx, c.client, c.id); err != nil { return err } diff --git a/dockerutil/image.go b/dockerutil/image.go index 161fb9558..711152dd0 100644 --- a/dockerutil/image.go +++ b/dockerutil/image.go @@ -216,6 +216,8 @@ func (image *Image) Start(ctx context.Context, cmd []string, opts ContainerOptio zap.String("command", strings.Join(cmd, " ")), zap.String("hostname", hostName), zap.String("container", containerName), + zap.String("networkID", image.networkID), + zap.Strings("binds", opts.Binds), ) ) diff --git a/dockerutil/setup.go b/dockerutil/setup.go index 3cf7bac8c..fcbad3d18 100644 --- a/dockerutil/setup.go +++ b/dockerutil/setup.go @@ -12,6 +12,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/client" "github.com/docker/docker/errdefs" ) @@ -76,16 +77,25 @@ func DockerSetup(t DockerSetupTestingT) (*client.Client, string) { DockerCleanup(t, cli)() name := fmt.Sprintf("interchaintest-%s", RandLowerCaseLetterString(8)) - network, err := cli.NetworkCreate(context.TODO(), name, types.NetworkCreate{ + net, err := cli.NetworkCreate(context.TODO(), name, types.NetworkCreate{ CheckDuplicate: true, - + Internal: false, + Attachable: true, + IPAM: &network.IPAM{ + Config: []network.IPAMConfig{ + { + Subnet: "10.11.0.0/16", + Gateway: "10.11.0.1", + }, + }, + }, Labels: map[string]string{CleanupLabel: t.Name()}, }) if err != nil { panic(fmt.Errorf("failed to create docker network: %v", err)) } - return cli, network.ID + return cli, net.ID } // DockerCleanup will clean up Docker containers, networks, and the other various config files generated in testing diff --git a/examples/avalanche/avalanche_chain_test.go b/examples/avalanche/avalanche_chain_test.go new file mode 100644 index 000000000..7e4ae5c3d --- /dev/null +++ b/examples/avalanche/avalanche_chain_test.go @@ -0,0 +1,90 @@ +package avalanche_test + +import ( + "context" + "testing" + + "cosmossdk.io/math" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + "golang.org/x/sync/errgroup" + + "github.com/strangelove-ventures/interchaintest/v8" + subnetevm "github.com/strangelove-ventures/interchaintest/v8/examples/avalanche/subnet-evm" + "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v8/testutil" +) + +func TestAvalanche(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + client, network := interchaintest.DockerSetup(t) + + nv := 5 + nf := 0 + + chains, err := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + { + Name: "avalanche", + Version: "v1.10.18-ibc", + ChainConfig: ibc.ChainConfig{ + ChainID: "1337", + Images: []ibc.DockerImage{ + { + Repository: "avalanchego", + Version: "v1.10.18-ibc", + UidGid: "1025:1025", + }, + }, + AvalancheSubnets: []ibc.AvalancheSubnetConfig{ + { + Name: "subnetevm", + Genesis: subnetevm.Genesis, + SubnetClientFactory: subnetevm.NewSubnetEvmClient, + }, + }, + }, + NumFullNodes: &nf, + NumValidators: &nv, + }, + }, + ).Chains(t.Name()) + + require.NoError(t, err, "failed to get avalanche chain") + require.Len(t, chains, 1) + + chain := chains[0] + + ctx := context.Background() + + err = chain.Initialize(ctx, t.Name(), client, network) + require.NoError(t, err, "failed to initialize avalanche chain") + + err = chain.Start(t.Name(), ctx) + require.NoError(t, err, "failed to start avalanche chain") + + subnetCtx := context.WithValue(ctx, "subnet", "0") + + eg := new(errgroup.Group) + eg.Go(func() error { + err := chain.SendFunds(subnetCtx, "56289e99c94b6912bfc12adc093c9b51124f0dc54ac7a766b2bc5ccf558d8027", ibc.WalletAmount{ + Address: "0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC", + Amount: math.NewInt(1000000), + }) + if err != nil { + return err + } + return chain.SendFunds(subnetCtx, "56289e99c94b6912bfc12adc093c9b51124f0dc54ac7a766b2bc5ccf558d8027", ibc.WalletAmount{ + Address: "0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FD", + Amount: math.NewInt(2000000), + }) + }) + eg.Go(func() error { + return testutil.WaitForBlocks(subnetCtx, 1, chain) + }) + + require.NoError(t, eg.Wait(), "avalanche chain failed to make blocks") +} diff --git a/examples/avalanche/avalanche_cosmos_test.go b/examples/avalanche/avalanche_cosmos_test.go new file mode 100644 index 000000000..edfdada5d --- /dev/null +++ b/examples/avalanche/avalanche_cosmos_test.go @@ -0,0 +1,219 @@ +package avalanche_test + +import ( + "context" + "testing" + "time" + + "cosmossdk.io/math" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + + "github.com/strangelove-ventures/interchaintest/v8" + "github.com/strangelove-ventures/interchaintest/v8/chain/avalanche" + "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" + subnetevm "github.com/strangelove-ventures/interchaintest/v8/examples/avalanche/subnet-evm" + "github.com/strangelove-ventures/interchaintest/v8/ibc" + "github.com/strangelove-ventures/interchaintest/v8/relayer" + "github.com/strangelove-ventures/interchaintest/v8/testreporter" + "github.com/strangelove-ventures/interchaintest/v8/testutil" +) + +func TestAvalancheCosmos(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + client, network := interchaintest.DockerSetup(t) + + nv := 5 + nf := 0 + + subnetChainID := "99999" + + chains, err := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + { + Name: "avalanche", + Version: "v1.10.18-ibc", + ChainConfig: ibc.ChainConfig{ + ChainID: "1337", + Images: []ibc.DockerImage{ + { + Repository: "avalanchego", + Version: "v1.10.18-ibc", + UidGid: "1025:1025", + }, + }, + AvalancheSubnets: []ibc.AvalancheSubnetConfig{ + { + Name: "subnetevm", + ChainID: subnetChainID, + Genesis: subnetevm.Genesis, + SubnetClientFactory: subnetevm.NewSubnetEvmClient, + }, + }, + CoinType: "60", + }, + NumFullNodes: &nf, + NumValidators: &nv, + }, + { + ChainName: "simd", // Set chain name so that a suffix with a "dash" is not appended (required for hyperspace) + ChainConfig: ibc.ChainConfig{ + Type: "cosmos", + Name: "simd", + ChainID: "simd", + Images: []ibc.DockerImage{ + { + Repository: "simd", + Version: "avalanche-light-client", // Set your locally built version + UidGid: "1025:1025", + }, + }, + Bin: "simd", + Bech32Prefix: "cosmos", + Denom: "stake", + GasPrices: "0.00stake", + GasAdjustment: 1.3, + TrustingPeriod: "504h", + CoinType: "118", + //NoHostMount: true, + //ConfigFileOverrides: configFileOverrides, + //ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + }, + }, + }, + ).Chains(t.Name()) + + require.NoError(t, err, "failed to get avalanche chain") + require.Len(t, chains, 2) + + avalancheChain := chains[0].(*avalanche.AvalancheChain) + cosmosChain := chains[1] + + ctx := context.Background() + + // Get a relayer instance + r := interchaintest.NewBuiltinRelayerFactory( + ibc.CosmosRly, + zaptest.NewLogger(t), + // These two fields are used to pass in a custom Docker image built locally + relayer.ImagePull(false), + relayer.CustomDockerImage("relayer", "avalanche", "1000:1000"), // Set your locally built version + ).Build(t, client, network) + + pathName := "ibc-path" + + ic := interchaintest.NewInterchain(). + AddChain(avalancheChain). + AddChain(cosmosChain). + AddRelayer(r, "relayer"). + AddLink(interchaintest.InterchainLink{ + Chain1: avalancheChain, + Chain2: cosmosChain, + Relayer: r, + Path: pathName, + }) + + // Reporter/logs + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + SkipPathCreation: true, + })) + t.Cleanup(func() { + _ = ic.Close() + }) + + time.Sleep(10 * time.Second) + + // Fund users + // NOTE: this has to be done after the provider delegation & IBC update to the consumer. + amt := math.NewInt(10_000_000) + users := interchaintest.GetAndFundTestUsers(t, ctx, "default", amt, cosmosChain) + cosmosUser := users[0] + + err = r.GeneratePath(ctx, eRep, cosmosChain.Config().ChainID, subnetChainID, pathName) + require.NoError(t, err) + + // Create new clients + err = r.CreateClients(ctx, eRep, pathName, ibc.DefaultClientOpts()) + require.NoError(t, err) + + subnetCtx := context.WithValue(ctx, "subnet", "0") + + err = testutil.WaitForBlocks(subnetCtx, 1, cosmosChain, avalancheChain) // these 1 block waits seem to be needed to reduce flakiness + require.NoError(t, err) + + // Create a new connection + err = r.CreateConnections(ctx, eRep, pathName) + require.NoError(t, err) + err = testutil.WaitForBlocks(subnetCtx, 1, cosmosChain, avalancheChain) + require.NoError(t, err) + + // Create a new channel & get channels from each chain + err = r.CreateChannel(ctx, eRep, pathName, ibc.DefaultChannelOpts()) + require.NoError(t, err) + err = testutil.WaitForBlocks(subnetCtx, 1, cosmosChain, avalancheChain) + require.NoError(t, err) + + // Start relayer + err = r.StartRelayer(ctx, eRep, pathName) + require.NoError(t, err) + t.Cleanup(func() { + err = r.StopRelayer(ctx, eRep) + if err != nil { + panic(err) + } + }) + + avalancheUser := "0x1FF8A0B6BE1A6233EF66A054DF0274C055D6D2E4" + + // Send 1.77 stake from cosmosUser to parachainUser + amountToSend := math.NewInt(1_770_000) + transfer := ibc.WalletAmount{ + Address: avalancheUser, + Denom: cosmosChain.Config().Denom, + Amount: amountToSend, + } + + cosmosTx, err := cosmosChain.SendIBCTransfer(ctx, "channel-0", cosmosUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, cosmosTx.Validate()) // test source wallet has decreased funds + t.Logf("Transfered from Cosmos to Avalanche %s token, tx_hash %s", amountToSend.String(), cosmosTx.TxHash) + err = testutil.WaitForBlocks(ctx, 15, cosmosChain) + require.NoError(t, err) + + // Verify tokens arrived on avalanche user + avalancheUserBalance, err := avalancheChain.GetBankBalance(subnetCtx, avalancheUser, "transfer/channel-0/stake") + require.NoError(t, err) + t.Logf("Received %s tokens on Avalanche ", avalancheUserBalance.String()) + require.Equal(t, amountToSend, avalancheUserBalance) + + cosmosReceiver := "cosmos1twmc8eqycsqhrhrm77er8xcfds6566x64ydcq5" + avalancheTx, err := avalancheChain.SendIBCTransfer(subnetCtx, "channel-0", "750839e9dbbd2a0910efe40f50b2f3b2f2f59f5580bb4b83bd8c1201cf9a010a", ibc.WalletAmount{ + Address: cosmosReceiver, + Denom: "transfer/channel-0/stake", + Amount: amountToSend, + }, ibc.TransferOptions{}) + require.NoError(t, err) + t.Logf("Transfered from Avalanche to Cosmos %s token, tx_hash %s", amountToSend.String(), avalancheTx.TxHash) + + // Wait for MsgRecvPacket on cosmos chain + err = cosmos.PollForBalance(ctx, cosmosChain.(*cosmos.CosmosChain), 20, ibc.WalletAmount{ + Address: cosmosReceiver, + Denom: cosmosChain.Config().Denom, + Amount: amountToSend, + }) + require.NoError(t, err) + cosmosUserBalance, err := cosmosChain.GetBalance(ctx, cosmosReceiver, cosmosChain.Config().Denom) + require.NoError(t, err) + require.Equal(t, amountToSend, cosmosUserBalance) + t.Logf("Received %s tokens on Cosmos", cosmosUserBalance.String()) + +} diff --git a/examples/avalanche/subnet-evm/client.go b/examples/avalanche/subnet-evm/client.go new file mode 100644 index 000000000..e0d0a4946 --- /dev/null +++ b/examples/avalanche/subnet-evm/client.go @@ -0,0 +1,105 @@ +package subnetevm + +import ( + "context" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + + "github.com/strangelove-ventures/interchaintest/v8/chain/avalanche/ics20/ics20bank" + "github.com/strangelove-ventures/interchaintest/v8/ibc" +) + +type SubnetEvmClient struct { + client *ethclient.Client +} + +func NewSubnetEvmClient(rpcHost string, pk string) (ibc.AvalancheSubnetClient, error) { + client, err := ethclient.Dial(fmt.Sprintf("%s/rpc", rpcHost)) + if err != nil { + return nil, err + } + return &SubnetEvmClient{client: client}, nil +} + +func (sec SubnetEvmClient) SendFunds(ctx context.Context, keyName string, amount ibc.WalletAmount) error { + chainID, err := sec.client.NetworkID(context.Background()) + if err != nil { + return fmt.Errorf("can't get chainID: %w", err) + } + + privateKey, err := crypto.HexToECDSA(keyName) + if err != nil { + return fmt.Errorf("can't parse private key: %s", err) + } + + senderAddr := crypto.PubkeyToAddress(privateKey.PublicKey) + + senderNonce, err := sec.client.PendingNonceAt(ctx, senderAddr) + if err != nil { + return fmt.Errorf("can't get nonce: %w", err) + } + + gasPrice, err := sec.client.SuggestGasPrice(context.Background()) + if err != nil { + return fmt.Errorf("can't get gas price: %w", err) + } + + toAddress := common.HexToAddress(amount.Address) + utx := types.NewTransaction(senderNonce, toAddress, big.NewInt(amount.Amount.Int64()), 21000, gasPrice, nil) + signedTx, err := types.SignTx(utx, types.NewEIP155Signer(chainID), privateKey) + if err != nil { + return fmt.Errorf("can't sign transaction: %w", err) + } + + return sec.client.SendTransaction(ctx, signedTx) +} + +func (sec SubnetEvmClient) Height(ctx context.Context) (uint64, error) { + return sec.client.BlockNumber(ctx) +} + +func (sec SubnetEvmClient) GetBankBalance(ctx context.Context, bank, address, denom string) (int64, error) { + if !common.IsHexAddress(bank) { + return 0, fmt.Errorf("bad bank address '%s'", bank) + } + + if !common.IsHexAddress(address) { + return 0, fmt.Errorf("bad user address '%s'", address) + } + + bankContract, err := ics20bank.NewICS20Bank(common.HexToAddress(bank), sec.client) + if err != nil { + return 0, err + } + + balance, err := bankContract.BalanceOf(nil, common.HexToAddress(address), denom) + if err != nil { + return 0, err + } + + return balance.Int64(), nil +} + +func (sec SubnetEvmClient) GetBalance(ctx context.Context, address string) (int64, error) { + if !common.IsHexAddress(address) { + return 0, fmt.Errorf("bad address format") + } + balance, err := sec.client.BalanceAt(ctx, common.HexToAddress(address), nil) + if err != nil { + return 0, err + } + return balance.Int64(), nil +} + +func (sec SubnetEvmClient) GetGasFeesInNativeDenom(gasPaid int64) int64 { + gprice, err := sec.client.SuggestGasPrice(context.Background()) + if err != nil { + panic(err) + } + return gprice.Int64() * gasPaid +} diff --git a/examples/avalanche/subnet-evm/genesis.json b/examples/avalanche/subnet-evm/genesis.json new file mode 100644 index 000000000..0bcae025a --- /dev/null +++ b/examples/avalanche/subnet-evm/genesis.json @@ -0,0 +1,53 @@ +{ + "config": { + "chainId": 99999, + "homesteadBlock": 0, + "eip150Block": 0, + "eip150Hash": "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "subnetEVMTimestamp": 0, + "feeConfig": { + "gasLimit": 20000000, + "minBaseFee": 1000000000, + "targetGas": 100000000, + "baseFeeChangeDenominator": 48, + "minBlockGasCost": 0, + "maxBlockGasCost": 10000000, + "targetBlockRate": 1, + "blockGasCostStep": 500000 + }, + "ibcConfig": { + "blockTimestamp": 0 + }, + "rewardManagerConfig": { + "blockTimestamp": 0, + "adminAddresses": [ + "0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC" + ] + } + }, + "alloc": { + "8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC": { + "balance": "0x52B7D2DCC80CD2E4000000" + }, + "0x0Fa8EA536Be85F32724D57A37758761B86416123": { + "balance": "0x52B7D2DCC80CD2E4000000" + } + }, + "nonce": "0x0", + "timestamp": "0x0", + "extraData": "0x00", + "gasLimit": "0x1312D00", + "difficulty": "0x0", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/examples/avalanche/subnet-evm/package.go b/examples/avalanche/subnet-evm/package.go new file mode 100644 index 000000000..980dcb04a --- /dev/null +++ b/examples/avalanche/subnet-evm/package.go @@ -0,0 +1,6 @@ +package subnetevm + +import _ "embed" + +//go:embed genesis.json +var Genesis []byte diff --git a/examples/hyperspace/hyperspace_test.go b/examples/hyperspace/hyperspace_test.go index 615f80245..ca3f3be52 100644 --- a/examples/hyperspace/hyperspace_test.go +++ b/examples/hyperspace/hyperspace_test.go @@ -15,6 +15,9 @@ import ( govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" "github.com/icza/dyno" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + "github.com/strangelove-ventures/interchaintest/v8" "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" @@ -22,8 +25,6 @@ import ( "github.com/strangelove-ventures/interchaintest/v8/relayer" "github.com/strangelove-ventures/interchaintest/v8/testreporter" "github.com/strangelove-ventures/interchaintest/v8/testutil" - "github.com/stretchr/testify/require" - "go.uber.org/zap/zaptest" ) // TestHyperspace setup @@ -240,7 +241,7 @@ func TestHyperspace(t *testing.T) { require.NoError(t, err) // Start relayer - r.StartRelayer(ctx, eRep, pathName) + err = r.StartRelayer(ctx, eRep, pathName) require.NoError(t, err) t.Cleanup(func() { err = r.StopRelayer(ctx, eRep) diff --git a/go.mod b/go.mod index 2b3c28763..12eadbda6 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/99designs/keyring v1.2.2 github.com/BurntSushi/toml v1.3.2 github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 + //github.com/CosmWasm/wasmd v0.42.0 github.com/CosmWasm/wasmd v0.42.1-0.20230928145107-894076a25cb2 github.com/StirlingMarketingGroup/go-namecase v1.0.0 github.com/atotto/clipboard v0.1.4 @@ -32,7 +33,7 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 github.com/docker/docker v24.0.9+incompatible github.com/docker/go-connections v0.5.0 - github.com/ethereum/go-ethereum v1.14.0 + github.com/ethereum/go-ethereum v1.13.8 github.com/gdamore/tcell/v2 v2.7.4 github.com/google/go-cmp v0.6.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 @@ -59,6 +60,8 @@ require ( modernc.org/sqlite v1.29.9 ) +require github.com/ava-labs/avalanchego v1.11.9 + require ( cloud.google.com/go v0.112.0 // indirect cloud.google.com/go/compute v1.24.0 // indirect @@ -83,13 +86,17 @@ require ( github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/NYTimes/gziphandler v1.1.1 // indirect + github.com/VictoriaMetrics/fastcache v1.12.1 // indirect + github.com/ava-labs/coreth v0.13.6-rc.1 // indirect github.com/aws/aws-sdk-go v1.44.224 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/btcsuite/btcd/btcutil v1.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect @@ -100,6 +107,8 @@ require ( github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cometbft/cometbft-db v0.10.0 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect @@ -107,8 +116,12 @@ require ( github.com/cosmos/iavl v1.1.2 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect + github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/deckarep/golang-set v1.8.0 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/base58 v1.0.4 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect @@ -116,14 +129,20 @@ require ( github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/dlclark/regexp2 v1.7.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/go-units v0.5.0 // indirect + github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect github.com/emicklei/dot v1.6.1 // indirect + github.com/ethereum/c-kzg-4844 v0.4.0 // indirect github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect + github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect github.com/gdamore/encoding v1.0.0 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-kit/kit v0.12.0 // indirect @@ -131,7 +150,8 @@ require ( github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/gobwas/ws v1.2.1 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect @@ -142,17 +162,22 @@ require ( github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.2 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd // indirect + github.com/google/renameio/v2 v2.0.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/rpc v1.2.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/go-bexpr v0.1.10 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.7.4 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect @@ -166,6 +191,8 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 // indirect + github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.4 // indirect github.com/huandu/skiplist v1.2.0 // indirect github.com/iancoleman/strcase v0.3.0 // indirect @@ -193,6 +220,8 @@ require ( github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/pointerstructure v1.2.0 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/multiformats/go-base32 v0.1.0 // indirect github.com/multiformats/go-base36 v0.2.0 // indirect @@ -201,14 +230,17 @@ require ( github.com/multiformats/go-multicodec v0.9.0 // indirect github.com/multiformats/go-multihash v0.2.3 // indirect github.com/multiformats/go-varint v0.0.7 // indirect + github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect - github.com/onsi/gomega v1.27.10 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/onsi/gomega v1.29.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect github.com/pierrec/xxHash v0.1.5 // indirect + github.com/pires/go-proxyproto v0.6.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.19.0 // indirect @@ -221,20 +253,29 @@ require ( github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.32.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.18.2 // indirect + github.com/status-im/keycard-go v0.2.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/supranational/blst v0.3.11 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect + github.com/urfave/cli/v2 v2.25.7 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect @@ -242,8 +283,14 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect go.opentelemetry.io/otel v1.22.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0 // indirect go.opentelemetry.io/otel/metric v1.22.0 // indirect + go.opentelemetry.io/otel/sdk v1.22.0 // indirect go.opentelemetry.io/otel/trace v1.22.0 // indirect + go.opentelemetry.io/proto/otlp v1.0.0 // indirect + go.uber.org/mock v0.4.0 // indirect golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect golang.org/x/net v0.24.0 // indirect golang.org/x/oauth2 v0.18.0 // indirect @@ -251,13 +298,15 @@ require ( golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect + gonum.org/v1/gonum v0.12.0 // indirect google.golang.org/api v0.162.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -270,5 +319,6 @@ require ( modernc.org/token v1.1.0 // indirect nhooyr.io/websocket v1.8.7 // indirect pgregory.net/rapid v1.1.0 // indirect + rsc.io/tmplfunc v0.0.3 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 007cf37fc..5074caab3 100644 --- a/go.sum +++ b/go.sum @@ -246,26 +246,31 @@ github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -276,6 +281,10 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/ava-labs/avalanchego v1.11.9 h1:hPmnPADhyl/cOp6WNJKfJNW8zA644RioIMcAXSXG3TA= +github.com/ava-labs/avalanchego v1.11.9/go.mod h1:1dpLzXIVhAmJeRpl59l5GgcCEO9bDdF6Y6qRDTo0QGY= +github.com/ava-labs/coreth v0.13.6-rc.1 h1:gRXRokmu0WOlPqyx+mTLWB655e8/w++u6qFcq9Mo7qA= +github.com/ava-labs/coreth v0.13.6-rc.1/go.mod h1:vm9T8qzP7RLo/jR2MKkliPfaiGgWeEpu/PG6fvvPmog= github.com/avast/retry-go/v4 v4.5.1 h1:AxIx0HGi4VZ3I02jr78j5lZ3M6x1E0Ivxa6b0pUUh7o= github.com/avast/retry-go/v4 v4.5.1/go.mod h1:/sipNsvNB3RRuT5iNcb6h73nw3IBmXJ/H3XrCQYSOpc= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= @@ -296,36 +305,60 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2 github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= +github.com/btcsuite/btcd v0.23.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= +github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= +github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= +github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= @@ -365,6 +398,10 @@ github.com/cometbft/cometbft v0.38.7 h1:ULhIOJ9+LgSy6nLekhq9ae3juX3NnQUMMPyVdhZV github.com/cometbft/cometbft v0.38.7/go.mod h1:HIyf811dFMI73IE0F7RrnY/Fr+d1+HuJAgtkEpQjCMY= github.com/cometbft/cometbft-db v0.10.0 h1:VMBQh88zXn64jXVvj39tlu/IgsGR84T7ImjS523DCiU= github.com/cometbft/cometbft-db v0.10.0/go.mod h1:7RR7NRv99j7keWJ5IkE9iZibUTKYdtepXTp7Ra0FxKk= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -403,11 +440,17 @@ github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5n github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= +github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -425,8 +468,10 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -438,6 +483,9 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= @@ -446,6 +494,11 @@ github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 h1:qwcF+vdFrvPSEUDSX5RVoRccG8a5DhOdWdQ4zN62zzo= +github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -471,14 +524,18 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= -github.com/ethereum/go-ethereum v1.14.0 h1:xRWC5NlB6g1x7vNy4HDBLuqVNbtLrc7v8S6+Uxim1LU= -github.com/ethereum/go-ethereum v1.14.0/go.mod h1:1STrq471D0BQbCX9He0hUj4bHxX2k6mt5nOQJhDNOJ8= +github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= +github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.8 h1:1od+thJel3tM52ZUNQwvpYOeRHlbkVFZ5S8fhi0Lgsg= +github.com/ethereum/go-ethereum v1.13.8/go.mod h1:sc48XYQxCzH3fG9BcrXCOOgQk2JfZzNAmIKnceogzsA= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= @@ -490,6 +547,10 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= @@ -526,8 +587,8 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= -github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -538,6 +599,8 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -652,11 +715,15 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= +github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -687,6 +754,8 @@ github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= +github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -699,6 +768,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= @@ -709,6 +780,8 @@ github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIv github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -756,6 +829,10 @@ github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -768,6 +845,7 @@ github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSAS github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= @@ -778,6 +856,8 @@ github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -789,6 +869,7 @@ github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -803,6 +884,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= @@ -815,12 +897,18 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= @@ -857,6 +945,7 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -882,8 +971,14 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -924,6 +1019,8 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -937,20 +1034,24 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -990,6 +1091,8 @@ github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pires/go-proxyproto v0.6.2 h1:KAZ7UteSOt6urjme6ZldyFm4wDe/z0ZUP0Yv0Dos0d8= +github.com/pires/go-proxyproto v0.6.2/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1047,6 +1150,7 @@ github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= @@ -1058,6 +1162,7 @@ github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= @@ -1065,11 +1170,13 @@ github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgY github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanity-io/litter v1.5.1 h1:dwnrSypP6q56o3lFxTU+t2fwQ9A+U5qrXVO4Qg9KwVU= +github.com/sanity-io/litter v1.5.1/go.mod h1:5Z71SvaYy5kcGtyglXOC9rrUi3c1E8CamFWjQsazTh0= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -1104,6 +1211,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1113,6 +1222,7 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.5-0.20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -1129,10 +1239,15 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/thepudds/fzgen v0.4.2 h1:HlEHl5hk2/cqEomf2uK5SA/FeJc12s/vIHmOG+FbACw= +github.com/thepudds/fzgen v0.4.2/go.mod h1:kHCWdsv5tdnt32NIHYDdgq083m6bMtaY0M+ipiO9xWE= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= @@ -1156,14 +1271,20 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= @@ -1189,13 +1310,21 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfa go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0/go.mod h1:noq80iT8rrHP1SfybmPiRGc9dc5M8RPmGvtwo7Oo7tc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0 h1:H2JFgRcGiyHg7H7bwcwaQJYrNFqCqrbTQ8K4p1OvDu8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0/go.mod h1:WfCWp1bGoYK8MeULtI15MmQVczfR+bFkk0DF3h06QmQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0 h1:FyjCyI9jVEfqhUh2MoSkmolPjfh5fp2hnV0b0irxH4Q= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0/go.mod h1:hYwym2nDEeZfG/motx0p7L7J1N1vyzIThemQsb4g2qY= go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= +go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1203,8 +1332,8 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= -go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -1217,6 +1346,7 @@ go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1273,6 +1403,7 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1308,6 +1439,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1401,6 +1533,7 @@ golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1422,10 +1555,12 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1476,6 +1611,8 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= @@ -1583,6 +1720,8 @@ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= +gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1816,8 +1955,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1832,6 +1971,8 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1900,6 +2041,8 @@ pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/ibc/relayer.go b/ibc/relayer.go index 081490a2b..94a7139ae 100644 --- a/ibc/relayer.go +++ b/ibc/relayer.go @@ -33,7 +33,7 @@ type Relayer interface { GetWallet(chainID string) (Wallet, bool) // add relayer configuration for a chain - AddChainConfiguration(ctx context.Context, rep RelayerExecReporter, chainConfig ChainConfig, keyName, rpcAddr, grpcAddr string) error + AddChainConfiguration(ctx context.Context, rep RelayerExecReporter, chain Chain, keyName, rpcAddr, grpcAddr string) error // generate new path between two chains GeneratePath(ctx context.Context, rep RelayerExecReporter, srcChainID, dstChainID, pathName string) error diff --git a/ibc/types.go b/ibc/types.go index 332263dfd..b65aebb63 100644 --- a/ibc/types.go +++ b/ibc/types.go @@ -17,6 +17,29 @@ import ( "github.com/docker/docker/client" ) +type AvalancheSubnetClient interface { + // SendFunds sends funds to a wallet from a user account. + SendFunds(ctx context.Context, keyName string, amount WalletAmount) error + + // Height returns the current block height or an error if unable to get current height. + Height(ctx context.Context) (uint64, error) + + // GetBankBalance returns balance from Bank Smart contract + GetBankBalance(ctx context.Context, bank, address, denom string) (int64, error) + + // GetBalance fetches the current balance for a specific account address + GetBalance(ctx context.Context, address string) (int64, error) +} + +type AvalancheSubnetClientFactory func(string, string) (AvalancheSubnetClient, error) + +type AvalancheSubnetConfig struct { + Name string + ChainID string + Genesis []byte + SubnetClientFactory AvalancheSubnetClientFactory +} + // ChainConfig defines the chain parameters requires to run an interchaintest testnet for a chain. type ChainConfig struct { // Chain type, e.g. cosmos. @@ -77,6 +100,8 @@ type ChainConfig struct { AdditionalStartArgs []string // Environment variables for chain nodes Env []string + // Avalanche Subnet config + AvalancheSubnets []AvalancheSubnetConfig `yaml:"avalanche-subnet"` } func (c ChainConfig) Clone() ChainConfig { @@ -224,6 +249,10 @@ func (c ChainConfig) MergeChainSpecConfig(other ChainConfig) ChainConfig { c.InterchainSecurityConfig = other.InterchainSecurityConfig } + if len(other.AvalancheSubnets) > 0 { + c.AvalancheSubnets = other.AvalancheSubnets + } + return c } diff --git a/interchain.go b/interchain.go index 87112e02d..be5dee188 100644 --- a/interchain.go +++ b/interchain.go @@ -6,11 +6,12 @@ import ( "cosmossdk.io/math" "github.com/docker/docker/client" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" + "github.com/strangelove-ventures/interchaintest/v8/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v8/ibc" "github.com/strangelove-ventures/interchaintest/v8/testreporter" - "go.uber.org/zap" - "golang.org/x/sync/errgroup" ) // Interchain represents a full IBC network, encompassing a collection of @@ -633,7 +634,7 @@ func (ic *Interchain) configureRelayerKeys(ctx context.Context, rep *testreporte chainName := ic.chains[c] if err := r.AddChainConfiguration(ctx, rep, - c.Config(), chainName, + c, chainName, rpcAddr, grpcAddr, ); err != nil { return fmt.Errorf("failed to configure relayer %s for chain %s: %w", ic.relayers[r], chainName, err) diff --git a/local-interchain/go.mod b/local-interchain/go.mod index 23f7d5c0a..384c896b4 100644 --- a/local-interchain/go.mod +++ b/local-interchain/go.mod @@ -54,7 +54,11 @@ require ( github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect + github.com/VictoriaMetrics/fastcache v1.12.1 // indirect + github.com/ava-labs/avalanchego v1.11.9 // indirect + github.com/ava-labs/coreth v0.13.6-rc.1 // indirect github.com/avast/retry-go/v4 v4.5.1 // indirect github.com/aws/aws-sdk-go v1.44.224 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -62,7 +66,8 @@ require ( github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/btcsuite/btcd/btcutil v1.1.3 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect @@ -73,6 +78,8 @@ require ( github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cometbft/cometbft v0.38.7 // indirect github.com/cometbft/cometbft-db v0.10.0 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect @@ -84,9 +91,13 @@ require ( github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/interchain-security/v5 v5.0.0-alpha1.0.20240424193412-7cd900ad2a74 // indirect github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 // indirect + github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deckarep/golang-set v1.8.0 // indirect + github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/base58 v1.0.4 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 // indirect @@ -95,27 +106,33 @@ require ( github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/dlclark/regexp2 v1.7.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/docker v24.0.9+incompatible // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect + github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect github.com/emicklei/dot v1.6.1 // indirect - github.com/ethereum/go-ethereum v1.14.0 // indirect + github.com/ethereum/c-kzg-4844 v0.4.0 // indirect + github.com/ethereum/go-ethereum v1.13.8 // indirect github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect + github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/gobwas/httphead v0.1.0 // indirect - github.com/gobwas/pool v0.2.1 // indirect + github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect @@ -127,17 +144,22 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd // indirect + github.com/google/renameio/v2 v2.0.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect + github.com/gorilla/rpc v1.2.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/go-bexpr v0.1.10 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.7.4 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect @@ -151,6 +173,8 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 // indirect + github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.4 // indirect github.com/huandu/skiplist v1.2.0 // indirect github.com/iancoleman/strcase v0.3.0 // indirect @@ -173,6 +197,7 @@ require ( github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/minio/sha256-simd v1.0.1 // indirect @@ -180,6 +205,8 @@ require ( github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/pointerstructure v1.2.0 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/multiformats/go-base32 v0.1.0 // indirect @@ -189,15 +216,18 @@ require ( github.com/multiformats/go-multicodec v0.9.0 // indirect github.com/multiformats/go-multihash v0.2.3 // indirect github.com/multiformats/go-varint v0.0.7 // indirect + github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect github.com/pierrec/xxHash v0.1.5 // indirect + github.com/pires/go-proxyproto v0.6.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.19.0 // indirect @@ -206,25 +236,35 @@ require ( github.com/prometheus/procfs v0.13.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rivo/uniseg v0.4.3 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.32.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.18.2 // indirect + github.com/status-im/keycard-go v0.2.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/supranational/blst v0.3.11 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.7.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/tyler-smith/go-bip32 v1.0.0 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect + github.com/urfave/cli/v2 v2.25.7 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect @@ -232,8 +272,14 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 // indirect go.opentelemetry.io/otel v1.22.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0 // indirect go.opentelemetry.io/otel/metric v1.22.0 // indirect + go.opentelemetry.io/otel/sdk v1.22.0 // indirect go.opentelemetry.io/otel/trace v1.22.0 // indirect + go.opentelemetry.io/proto/otlp v1.0.0 // indirect + go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.22.0 // indirect golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 // indirect @@ -246,15 +292,17 @@ require ( golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.20.0 // indirect + gonum.org/v1/gonum v0.12.0 // indirect google.golang.org/api v0.162.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect google.golang.org/grpc v1.63.2 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -268,5 +316,6 @@ require ( modernc.org/token v1.1.0 // indirect nhooyr.io/websocket v1.8.7 // indirect pgregory.net/rapid v1.1.0 // indirect + rsc.io/tmplfunc v0.0.3 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/local-interchain/go.sum b/local-interchain/go.sum index f2808f820..c4f48ae8e 100644 --- a/local-interchain/go.sum +++ b/local-interchain/go.sum @@ -242,26 +242,31 @@ github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -270,6 +275,10 @@ github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ava-labs/avalanchego v1.11.9 h1:hPmnPADhyl/cOp6WNJKfJNW8zA644RioIMcAXSXG3TA= +github.com/ava-labs/avalanchego v1.11.9/go.mod h1:1dpLzXIVhAmJeRpl59l5GgcCEO9bDdF6Y6qRDTo0QGY= +github.com/ava-labs/coreth v0.13.6-rc.1 h1:gRXRokmu0WOlPqyx+mTLWB655e8/w++u6qFcq9Mo7qA= +github.com/ava-labs/coreth v0.13.6-rc.1/go.mod h1:vm9T8qzP7RLo/jR2MKkliPfaiGgWeEpu/PG6fvvPmog= github.com/avast/retry-go/v4 v4.5.1 h1:AxIx0HGi4VZ3I02jr78j5lZ3M6x1E0Ivxa6b0pUUh7o= github.com/avast/retry-go/v4 v4.5.1/go.mod h1:/sipNsvNB3RRuT5iNcb6h73nw3IBmXJ/H3XrCQYSOpc= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= @@ -290,36 +299,52 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2 github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/btcsuite/btcd v0.22.2 h1:vBZ+lGGd1XubpOWO67ITJpAEsICWhA0YzqkcpkgNBfo= +github.com/btcsuite/btcd v0.22.2/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= @@ -359,6 +384,10 @@ github.com/cometbft/cometbft v0.38.7 h1:ULhIOJ9+LgSy6nLekhq9ae3juX3NnQUMMPyVdhZV github.com/cometbft/cometbft v0.38.7/go.mod h1:HIyf811dFMI73IE0F7RrnY/Fr+d1+HuJAgtkEpQjCMY= github.com/cometbft/cometbft-db v0.10.0 h1:VMBQh88zXn64jXVvj39tlu/IgsGR84T7ImjS523DCiU= github.com/cometbft/cometbft-db v0.10.0/go.mod h1:7RR7NRv99j7keWJ5IkE9iZibUTKYdtepXTp7Ra0FxKk= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -397,7 +426,12 @@ github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5n github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= +github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= @@ -419,8 +453,10 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -432,6 +468,9 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= @@ -440,6 +479,11 @@ github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127 h1:qwcF+vdFrvPSEUDSX5RVoRccG8a5DhOdWdQ4zN62zzo= +github.com/dop251/goja v0.0.0-20230806174421-c933cf95e127/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -465,14 +509,18 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= -github.com/ethereum/go-ethereum v1.14.0 h1:xRWC5NlB6g1x7vNy4HDBLuqVNbtLrc7v8S6+Uxim1LU= -github.com/ethereum/go-ethereum v1.14.0/go.mod h1:1STrq471D0BQbCX9He0hUj4bHxX2k6mt5nOQJhDNOJ8= +github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY= +github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.13.8 h1:1od+thJel3tM52ZUNQwvpYOeRHlbkVFZ5S8fhi0Lgsg= +github.com/ethereum/go-ethereum v1.13.8/go.mod h1:sc48XYQxCzH3fG9BcrXCOOgQk2JfZzNAmIKnceogzsA= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= @@ -484,6 +532,10 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 h1:f6D9Hr8xV8uYKlyuj8XIruxlh9WjVjdh1gIicAS7ays= +github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -515,8 +567,8 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= -github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= @@ -529,6 +581,8 @@ github.com/go-playground/validator v9.31.0+incompatible/go.mod h1:yrEkQXlcI+Pugk github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -643,11 +697,15 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd h1:gbpYu9NMq8jhDVbvlGkMFWCjLFlqqEZjEmObmhUy6Vo= github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= +github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -678,6 +736,8 @@ github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= +github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -690,6 +750,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= @@ -700,6 +762,8 @@ github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIv github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -747,6 +811,10 @@ github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7 h1:3JQNjnMRil1yD0IfZKHF9GxxWKDJGj8I0IqOUol//sw= +github.com/holiman/billy v0.0.0-20230718173358-1c7e68d277a7/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -759,6 +827,7 @@ github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSAS github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= @@ -769,6 +838,7 @@ github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -780,6 +850,7 @@ github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -794,6 +865,7 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= @@ -806,12 +878,18 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= @@ -846,6 +924,9 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= @@ -868,8 +949,14 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -910,6 +997,8 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -923,6 +1012,8 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -930,13 +1021,14 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -976,6 +1068,8 @@ github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pires/go-proxyproto v0.6.2 h1:KAZ7UteSOt6urjme6ZldyFm4wDe/z0ZUP0Yv0Dos0d8= +github.com/pires/go-proxyproto v0.6.2/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1025,9 +1119,13 @@ github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5 github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= @@ -1039,6 +1137,7 @@ github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= @@ -1046,11 +1145,13 @@ github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgY github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanity-io/litter v1.5.1 h1:dwnrSypP6q56o3lFxTU+t2fwQ9A+U5qrXVO4Qg9KwVU= +github.com/sanity-io/litter v1.5.1/go.mod h1:5Z71SvaYy5kcGtyglXOC9rrUi3c1E8CamFWjQsazTh0= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -1085,6 +1186,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1094,6 +1197,7 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.5-0.20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -1110,10 +1214,14 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/thepudds/fzgen v0.4.2 h1:HlEHl5hk2/cqEomf2uK5SA/FeJc12s/vIHmOG+FbACw= +github.com/thepudds/fzgen v0.4.2/go.mod h1:kHCWdsv5tdnt32NIHYDdgq083m6bMtaY0M+ipiO9xWE= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= @@ -1137,14 +1245,20 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= @@ -1170,13 +1284,21 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0 h1:sv9kVfa go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1:SK2UL73Zy1quvRPonmOmRDiWk1KBV3LyIeeIxcEApWw= go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0/go.mod h1:noq80iT8rrHP1SfybmPiRGc9dc5M8RPmGvtwo7Oo7tc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0 h1:H2JFgRcGiyHg7H7bwcwaQJYrNFqCqrbTQ8K4p1OvDu8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.22.0/go.mod h1:WfCWp1bGoYK8MeULtI15MmQVczfR+bFkk0DF3h06QmQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0 h1:FyjCyI9jVEfqhUh2MoSkmolPjfh5fp2hnV0b0irxH4Q= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.22.0/go.mod h1:hYwym2nDEeZfG/motx0p7L7J1N1vyzIThemQsb4g2qY= go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= +go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1184,8 +1306,8 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= -go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -1207,6 +1329,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -1253,6 +1377,7 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1379,6 +1504,7 @@ golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1453,6 +1579,8 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -1553,6 +1681,8 @@ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= +gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1786,8 +1916,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1804,6 +1934,8 @@ gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXa gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1872,6 +2004,8 @@ pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/relayer/docker.go b/relayer/docker.go index 39eb8270e..84b36647d 100644 --- a/relayer/docker.go +++ b/relayer/docker.go @@ -158,14 +158,16 @@ func (r *DockerRelayer) AddWallet(chainID string, wallet ibc.Wallet) { r.wallets[chainID] = wallet } -func (r *DockerRelayer) AddChainConfiguration(ctx context.Context, rep ibc.RelayerExecReporter, chainConfig ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) error { +func (r *DockerRelayer) AddChainConfiguration(ctx context.Context, rep ibc.RelayerExecReporter, chain ibc.Chain, keyName, rpcAddr, grpcAddr string) error { + chainConfig := chain.Config() + // For rly this file is json, but the file extension should not matter. // Using .config to avoid implying any particular format. chainConfigFile := chainConfig.ChainID + ".config" chainConfigContainerFilePath := path.Join(r.HomeDir(), chainConfigFile) - configContent, err := r.c.ConfigContent(ctx, chainConfig, keyName, rpcAddr, grpcAddr) + configContent, err := r.c.ConfigContent(ctx, chain, chainConfig, keyName, rpcAddr, grpcAddr) if err != nil { return fmt.Errorf("failed to generate config content: %w", err) } @@ -529,7 +531,7 @@ type RelayerCommander interface { DockerUser() string // ConfigContent generates the content of the config file that will be passed to AddChainConfiguration. - ConfigContent(ctx context.Context, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) + ConfigContent(ctx context.Context, chain ibc.Chain, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) // ParseAddKeyOutput processes the output of AddKey // to produce the wallet that was created. diff --git a/relayer/hermes/hermes_commander.go b/relayer/hermes/hermes_commander.go index cfc7142a8..b0be6e85f 100644 --- a/relayer/hermes/hermes_commander.go +++ b/relayer/hermes/hermes_commander.go @@ -5,9 +5,10 @@ import ( "encoding/json" "fmt" + "go.uber.org/zap" + "github.com/strangelove-ventures/interchaintest/v8/ibc" "github.com/strangelove-ventures/interchaintest/v8/relayer" - "go.uber.org/zap" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" @@ -197,7 +198,7 @@ func (c commander) Flush(pathName, channelID, homeDir string) []string { panic("flush implemented in hermes relayer not the commander") } -func (c commander) ConfigContent(ctx context.Context, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { +func (c commander) ConfigContent(ctx context.Context, chain ibc.Chain, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { panic("config content implemented in hermes relayer not the commander") } diff --git a/relayer/hermes/hermes_relayer.go b/relayer/hermes/hermes_relayer.go index 8e4a2b7f3..38aa52a15 100644 --- a/relayer/hermes/hermes_relayer.go +++ b/relayer/hermes/hermes_relayer.go @@ -10,9 +10,10 @@ import ( "github.com/docker/docker/client" "github.com/pelletier/go-toml" + "go.uber.org/zap" + "github.com/strangelove-ventures/interchaintest/v8/ibc" "github.com/strangelove-ventures/interchaintest/v8/relayer" - "go.uber.org/zap" ) const ( @@ -77,7 +78,8 @@ func NewHermesRelayer(log *zap.Logger, testName string, cli *client.Client, netw // AddChainConfiguration is called once per chain configuration, which means that in the case of hermes, the single // config file is overwritten with a new entry each time this function is called. -func (r *Relayer) AddChainConfiguration(ctx context.Context, rep ibc.RelayerExecReporter, chainConfig ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) error { +func (r *Relayer) AddChainConfiguration(ctx context.Context, rep ibc.RelayerExecReporter, chain ibc.Chain, keyName, rpcAddr, grpcAddr string) error { + chainConfig := chain.Config() configContent, err := r.configContent(chainConfig, keyName, rpcAddr, grpcAddr) if err != nil { return fmt.Errorf("failed to generate config content: %w", err) diff --git a/relayer/hyperspace/hyperspace_commander.go b/relayer/hyperspace/hyperspace_commander.go index 6ce5b3f02..c03734833 100644 --- a/relayer/hyperspace/hyperspace_commander.go +++ b/relayer/hyperspace/hyperspace_commander.go @@ -10,9 +10,10 @@ import ( types23 "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" "github.com/misko9/go-substrate-rpc-client/v4/signature" "github.com/pelletier/go-toml/v2" + "go.uber.org/zap" + "github.com/strangelove-ventures/interchaintest/v8/chain/polkadot" "github.com/strangelove-ventures/interchaintest/v8/ibc" - "go.uber.org/zap" ) // hyperspaceCommander satisfies relayer.RelayerCommander. @@ -230,7 +231,7 @@ func (hyperspaceCommander) UpdateClients(pathName, homeDir string) []string { panic("[UpdateClients] Do not use me") } -func (hyperspaceCommander) ConfigContent(ctx context.Context, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { +func (hyperspaceCommander) ConfigContent(ctx context.Context, chain ibc.Chain, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { fmt.Println("[hyperspace] ConfigContent", cfg, keyName, rpcAddr, grpcAddr) HyperspaceRelayerChainConfig := ChainConfigToHyperspaceRelayerChainConfig(cfg, keyName, rpcAddr, grpcAddr) bytes, err := toml.Marshal(HyperspaceRelayerChainConfig) diff --git a/relayer/rly/cosmos_relayer.go b/relayer/rly/cosmos_relayer.go index fb8268125..337c075b9 100644 --- a/relayer/rly/cosmos_relayer.go +++ b/relayer/rly/cosmos_relayer.go @@ -6,12 +6,15 @@ import ( "encoding/json" "fmt" "strings" + "time" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/docker/docker/client" + "go.uber.org/zap" + + "github.com/strangelove-ventures/interchaintest/v8/chain/avalanche" "github.com/strangelove-ventures/interchaintest/v8/ibc" "github.com/strangelove-ventures/interchaintest/v8/relayer" - "go.uber.org/zap" ) const ( @@ -61,6 +64,27 @@ type CosmosRelayerChainConfig struct { Value CosmosRelayerChainConfigValue `json:"value"` } +type AvalancheRelayerChainConfigValue struct { + RPCAddr string `json:"rpc-addr"` + BaseRPCAddr string `json:"base-rpc-addr"` + SubnetID string `json:"subnet-id"` + BlockchainID string `json:"blockchain-id"` + ChainID string `json:"chain-id"` + NetworkID uint32 `json:"network-id"` + ContractAddress string `json:"contract-address"` + Timeout string `json:"timeout"` + KeyDirectory string `json:"key-directory"` + Key string `json:"key"` + KeyringBackend string `json:"keyring-backend"` + ExtraCodecs []string `json:"extra-codecs"` + MinLoopDuration time.Duration `json:"min-loop-duration"` +} + +type AvalancheRelayerChainConfig struct { + Type string `json:"type"` + Value AvalancheRelayerChainConfigValue `json:"value"` +} + const ( DefaultContainerImage = "ghcr.io/cosmos/relayer" DefaultContainerVersion = "v2.5.2" @@ -75,6 +99,27 @@ func Capabilities() map[relayer.Capability]bool { return relayer.FullCapabilities() } +func ChainConfigToAvalancheRelayerChainConfig(chain *avalanche.AvalancheChain, chainConfig ibc.ChainConfig, keyName, rpcAddr, gprcAddr string) AvalancheRelayerChainConfig { + return AvalancheRelayerChainConfig{ + Type: chainConfig.Type, + Value: AvalancheRelayerChainConfigValue{ + RPCAddr: fmt.Sprintf("%s/ext/bc/%s/rpc", rpcAddr, chain.Node().BlockchainID()), + BaseRPCAddr: rpcAddr, + SubnetID: chain.Node().SubnetID(), + BlockchainID: chain.Node().BlockchainID(), + ChainID: chainConfig.AvalancheSubnets[0].ChainID, + NetworkID: chain.ChainID, + ContractAddress: avalanche.AvalancheIBCPrecompileAddress.String(), + Timeout: "10s", + KeyDirectory: "", + Key: "testkey", + KeyringBackend: keyring.BackendTest, + ExtraCodecs: nil, + MinLoopDuration: 0, + }, + } +} + func ChainConfigToCosmosRelayerChainConfig(chainConfig ibc.ChainConfig, keyName, rpcAddr, gprcAddr string) CosmosRelayerChainConfig { chainType := chainConfig.Type if chainType == "polkadot" || chainType == "parachain" || chainType == "relaychain" { @@ -177,7 +222,7 @@ func (commander) CreateClient(srcChainID, dstChainID, pathName string, opts ibc. func (commander) CreateConnections(pathName string, homeDir string) []string { return []string{ "rly", "tx", "connection", pathName, - "--home", homeDir, + "--home", homeDir, "--debug", } } @@ -298,9 +343,15 @@ func (commander) UpdateClients(pathName, homeDir string) []string { } } -func (commander) ConfigContent(ctx context.Context, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { - cosmosRelayerChainConfig := ChainConfigToCosmosRelayerChainConfig(cfg, keyName, rpcAddr, grpcAddr) - jsonBytes, err := json.Marshal(cosmosRelayerChainConfig) +func (commander) ConfigContent(ctx context.Context, chain ibc.Chain, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { + var relayerConfig any + if cfg.Type == "avalanche" { + avalancheChain := chain.(*avalanche.AvalancheChain) + relayerConfig = ChainConfigToAvalancheRelayerChainConfig(avalancheChain, cfg, keyName, rpcAddr, grpcAddr) + } else { + relayerConfig = ChainConfigToCosmosRelayerChainConfig(cfg, keyName, rpcAddr, grpcAddr) + } + jsonBytes, err := json.Marshal(relayerConfig) if err != nil { return nil, err }