From aaab52e01412ea4f1de4f748cadf0c127682418c Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Fri, 3 Jan 2025 15:18:33 +0000 Subject: [PATCH 01/48] Adding solchains in NewEnv --- deployment/environment.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/deployment/environment.go b/deployment/environment.go index bfbeac2f0c4..def161ae521 100644 --- a/deployment/environment.go +++ b/deployment/environment.go @@ -110,6 +110,7 @@ func NewEnvironment( logger logger.Logger, existingAddrs AddressBook, chains map[uint64]Chain, + solChains map[uint64]SolChain, nodeIDs []string, offchain OffchainClient, ctx func() context.Context, @@ -120,6 +121,7 @@ func NewEnvironment( Logger: logger, ExistingAddresses: existingAddrs, Chains: chains, + SolChains: solChains, NodeIDs: nodeIDs, Offchain: offchain, GetContext: ctx, @@ -158,6 +160,17 @@ func (e Environment) AllChainSelectorsExcluding(excluding []uint64) []uint64 { return selectors } +func (e Environment) AllChainSelectorsSolana() []uint64 { + var selectors []uint64 + for sel := range e.SolChains { + selectors = append(selectors, sel) + } + sort.Slice(selectors, func(i, j int) bool { + return selectors[i] < selectors[j] + }) + return selectors +} + func (e Environment) AllDeployerKeys() []common.Address { var deployerKeys []common.Address for sel := range e.Chains { From f19598ea17d5fe2d3751d99c61746ef1f20029d9 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Fri, 3 Jan 2025 15:19:15 +0000 Subject: [PATCH 02/48] Revert "Adding solchains in NewEnv" This reverts commit aaab52e01412ea4f1de4f748cadf0c127682418c. --- deployment/environment.go | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/deployment/environment.go b/deployment/environment.go index def161ae521..bfbeac2f0c4 100644 --- a/deployment/environment.go +++ b/deployment/environment.go @@ -110,7 +110,6 @@ func NewEnvironment( logger logger.Logger, existingAddrs AddressBook, chains map[uint64]Chain, - solChains map[uint64]SolChain, nodeIDs []string, offchain OffchainClient, ctx func() context.Context, @@ -121,7 +120,6 @@ func NewEnvironment( Logger: logger, ExistingAddresses: existingAddrs, Chains: chains, - SolChains: solChains, NodeIDs: nodeIDs, Offchain: offchain, GetContext: ctx, @@ -160,17 +158,6 @@ func (e Environment) AllChainSelectorsExcluding(excluding []uint64) []uint64 { return selectors } -func (e Environment) AllChainSelectorsSolana() []uint64 { - var selectors []uint64 - for sel := range e.SolChains { - selectors = append(selectors, sel) - } - sort.Slice(selectors, func(i, j int) bool { - return selectors[i] < selectors[j] - }) - return selectors -} - func (e Environment) AllDeployerKeys() []common.Address { var deployerKeys []common.Address for sel := range e.Chains { From e4f1f0530ae297dd7ead281074f28e69a8f02423 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Fri, 3 Jan 2025 15:21:14 +0000 Subject: [PATCH 03/48] adding sol chains to newenv --- deployment/environment.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/deployment/environment.go b/deployment/environment.go index bfbeac2f0c4..def161ae521 100644 --- a/deployment/environment.go +++ b/deployment/environment.go @@ -110,6 +110,7 @@ func NewEnvironment( logger logger.Logger, existingAddrs AddressBook, chains map[uint64]Chain, + solChains map[uint64]SolChain, nodeIDs []string, offchain OffchainClient, ctx func() context.Context, @@ -120,6 +121,7 @@ func NewEnvironment( Logger: logger, ExistingAddresses: existingAddrs, Chains: chains, + SolChains: solChains, NodeIDs: nodeIDs, Offchain: offchain, GetContext: ctx, @@ -158,6 +160,17 @@ func (e Environment) AllChainSelectorsExcluding(excluding []uint64) []uint64 { return selectors } +func (e Environment) AllChainSelectorsSolana() []uint64 { + var selectors []uint64 + for sel := range e.SolChains { + selectors = append(selectors, sel) + } + sort.Slice(selectors, func(i, j int) bool { + return selectors[i] < selectors[j] + }) + return selectors +} + func (e Environment) AllDeployerKeys() []common.Address { var deployerKeys []common.Address for sel := range e.Chains { From 18d77d11ae5933df998e4660c55a12d7a338e33b Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Fri, 3 Jan 2025 15:33:14 +0000 Subject: [PATCH 04/48] newEnv needs to send nil --- deployment/environment/devenv/environment.go | 1 + 1 file changed, 1 insertion(+) diff --git a/deployment/environment/devenv/environment.go b/deployment/environment/devenv/environment.go index 121caea43bb..8deaaf6ac39 100644 --- a/deployment/environment/devenv/environment.go +++ b/deployment/environment/devenv/environment.go @@ -49,6 +49,7 @@ func NewEnvironment(ctx func() context.Context, lggr logger.Logger, config Envir lggr, deployment.NewMemoryAddressBook(), chains, + nil, // sending nil for solana chains right now, we can build this when we need it nodeIDs, offChain, ctx, From 8150d8d41004f220ee25fc32d4dd6c225fc8dcc1 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Mon, 6 Jan 2025 13:59:31 +0000 Subject: [PATCH 05/48] adding test env setup --- deployment/environment/memory/chain.go | 39 +++++++ deployment/environment/memory/environment.go | 34 ++++++ deployment/go.mod | 23 ++-- deployment/go.sum | 117 ++++--------------- deployment/solana_chain.go | 36 ++++++ 5 files changed, 139 insertions(+), 110 deletions(-) diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 77a8f397d39..bab4cc17b0e 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -15,6 +15,9 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + "github.com/gagliardetto/solana-go" + solRpc "github.com/gagliardetto/solana-go/rpc" + solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" ) @@ -24,6 +27,11 @@ type EVMChain struct { Users []*bind.TransactOpts } +type SolanaChain struct { + Client *solRpc.Client + DeployerKey *solana.PrivateKey +} + func fundAddress(t *testing.T, from *bind.TransactOpts, to common.Address, amount *big.Int, backend *simulated.Backend) { ctx := tests.Context(t) nonce, err := backend.Client().PendingNonceAt(ctx, from.From) @@ -53,6 +61,37 @@ func GenerateChains(t *testing.T, numChains int, numUsers int) map[uint64]EVMCha return chains } +func getTestSolanaChainSelectors() []uint64 { + result := []uint64{} + for _, x := range chainsel.SolanaALL { + if x.Name == x.ChainID { + result = append(result, x.Selector) + } + } + return result +} + +func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { + + chains := make(map[uint64]SolanaChain) + testSolanaChainSelectors := getTestSolanaChainSelectors() + if len(testSolanaChainSelectors) < numChains { + t.Fatalf("not enough test solana chain selectors available") + } + + for i := 0; i < numChains; i++ { + chainID := testSolanaChainSelectors[i] + url, _ := solTestUtil.SetupLocalSolNodeWithFlags(t) + admin, gerr := solana.NewRandomPrivateKey() + require.NoError(t, gerr) + chains[chainID] = SolanaChain{ + Client: solRpc.New(url), + DeployerKey: &admin, + } + } + return chains +} + func GenerateChainsWithIds(t *testing.T, chainIDs []uint64, numUsers int) map[uint64]EVMChain { chains := make(map[uint64]EVMChain) for _, chainID := range chainIDs { diff --git a/deployment/environment/memory/environment.go b/deployment/environment/memory/environment.go index a74d23a847b..6ddbeb58b55 100644 --- a/deployment/environment/memory/environment.go +++ b/deployment/environment/memory/environment.go @@ -9,6 +9,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/core/types" + "github.com/gagliardetto/solana-go" "github.com/hashicorp/consul/sdk/freeport" "github.com/stretchr/testify/require" "go.uber.org/zap/zapcore" @@ -19,6 +20,8 @@ import ( "github.com/smartcontractkit/chainlink/deployment" + solRpc "github.com/gagliardetto/solana-go/rpc" + solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" "github.com/smartcontractkit/chainlink-common/pkg/logger" ) @@ -28,6 +31,7 @@ const ( type MemoryEnvironmentConfig struct { Chains int + SolChains int NumOfUsersPerChain int Nodes int Bootstraps int @@ -59,6 +63,11 @@ func NewMemoryChains(t *testing.T, numChains int, numUsers int) (map[uint64]depl return generateMemoryChain(t, mchains), users } +func NewMemoryChainsSol(t *testing.T, numChains int) map[uint64]deployment.SolChain { + mchains := GenerateChainsSol(t, numChains) + return generateMemoryChainSol(t, mchains) +} + func NewMemoryChainsWithChainIDs(t *testing.T, chainIDs []uint64, numUsers int) (map[uint64]deployment.Chain, map[uint64][]*bind.TransactOpts) { mchains := GenerateChainsWithIds(t, chainIDs, numUsers) users := make(map[uint64][]*bind.TransactOpts) @@ -111,6 +120,28 @@ func generateMemoryChain(t *testing.T, inputs map[uint64]EVMChain) map[uint64]de return chains } +func generateMemoryChainSol(t *testing.T, inputs map[uint64]SolanaChain) map[uint64]deployment.SolChain { + chains := make(map[uint64]deployment.SolChain) + for cid, chain := range inputs { + chain := chain + chains[cid] = deployment.SolChain{ + Selector: cid, + Client: chain.Client, + DeployerKey: chain.DeployerKey, + Confirm: func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error { + _, err := solCommomUtil.SendAndConfirm( + context.Background(), chain.Client, instructions, *chain.DeployerKey, solRpc.CommitmentConfirmed, opts..., + ) + if err != nil { + return err + } + return nil + }, + } + } + return chains +} + func NewNodes(t *testing.T, logLevel zapcore.Level, chains map[uint64]deployment.Chain, numNodes, numBootstraps int, registryConfig deployment.CapabilityRegistryConfig) map[string]Node { nodesByPeerID := make(map[string]Node) if numNodes+numBootstraps == 0 { @@ -149,6 +180,7 @@ func NewMemoryEnvironmentFromChainsNodes( lggr, deployment.NewMemoryAddressBook(), chains, + nil, nodeIDs, // Note these have the p2p_ prefix. NewMemoryJobClient(nodes), ctx, @@ -159,6 +191,7 @@ func NewMemoryEnvironmentFromChainsNodes( // To be used by tests and any kind of deployment logic. func NewMemoryEnvironment(t *testing.T, lggr logger.Logger, logLevel zapcore.Level, config MemoryEnvironmentConfig) deployment.Environment { chains, _ := NewMemoryChains(t, config.Chains, config.NumOfUsersPerChain) + solChains := NewMemoryChainsSol(t, config.SolChains) nodes := NewNodes(t, logLevel, chains, config.Nodes, config.Bootstraps, config.RegistryConfig) var nodeIDs []string for id := range nodes { @@ -169,6 +202,7 @@ func NewMemoryEnvironment(t *testing.T, lggr logger.Logger, logLevel zapcore.Lev lggr, deployment.NewMemoryAddressBook(), chains, + solChains, nodeIDs, NewMemoryJobClient(nodes), func() context.Context { return tests.Context(t) }, diff --git a/deployment/go.mod b/deployment/go.mod index 34fbc7fd21d..440a1fd4d5a 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -18,6 +18,7 @@ require ( github.com/aws/aws-sdk-go v1.54.19 github.com/deckarep/golang-set/v2 v2.6.0 github.com/ethereum/go-ethereum v1.14.11 + github.com/gagliardetto/solana-go v1.12.0 github.com/go-resty/resty/v2 v2.15.3 github.com/google/uuid v1.6.0 github.com/hashicorp/consul/sdk v0.16.1 @@ -29,16 +30,17 @@ require ( github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix github.com/smartcontractkit/chain-selectors v1.0.34 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 + github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 github.com/smartcontractkit/chainlink-protos/job-distributor v0.6.0 github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 github.com/smartcontractkit/libocr v0.0.0-20241223215956-e5b78d8e3919 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/test-go/testify v1.1.4 github.com/testcontainers/testcontainers-go v0.34.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 golang.org/x/oauth2 v0.23.0 golang.org/x/sync v0.10.0 google.golang.org/grpc v1.67.1 @@ -48,7 +50,6 @@ require ( ) require ( - contrib.go.opencensus.io/exporter/stackdriver v0.13.5 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect @@ -160,9 +161,8 @@ require ( github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/dennwc/varint v1.0.0 // indirect - github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 // indirect 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 @@ -189,8 +189,7 @@ require ( github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect - github.com/gagliardetto/binary v0.7.7 // indirect - github.com/gagliardetto/solana-go v1.8.4 // indirect + github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect @@ -429,13 +428,12 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect github.com/status-im/keycard-go v0.2.0 // indirect - github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 // indirect + github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/supranational/blst v0.3.13 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 // indirect github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/tidwall/gjson v1.17.0 // indirect @@ -464,7 +462,6 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.14 // indirect go.etcd.io/etcd/client/v3 v3.5.14 // indirect go.mongodb.org/mongo-driver v1.15.0 // indirect - go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/collector/pdata v1.12.0 // indirect go.opentelemetry.io/collector/semconv v0.105.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect @@ -494,13 +491,13 @@ require ( go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect golang.org/x/arch v0.11.0 // indirect golang.org/x/crypto v0.31.0 // indirect - golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.30.0 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.27.0 // indirect golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.7.0 // indirect - golang.org/x/tools v0.26.0 // indirect + golang.org/x/tools v0.28.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gonum.org/v1/gonum v0.15.1 // indirect diff --git a/deployment/go.sum b/deployment/go.sum index a364fc9b1ec..264f68e9505 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -3,7 +3,6 @@ cel.dev/expr v0.17.0/go.mod h1:HCwbrn+qQoHPXgfz6cl2J0hDybnX2N1sQQkl9EggXx8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= @@ -54,10 +53,6 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.45.0 h1:5av0QcIVj77t+44mV4gffFC/LscFRUhto6UBMB5SimM= cloud.google.com/go/storage v1.45.0/go.mod h1:wpPblkIuMP5jCB/E48Pz9zIo2S/zD8g+ITmxKkPCITE= -contrib.go.opencensus.io/exporter/stackdriver v0.12.6/go.mod h1:8x999/OcIPy5ivx/wDiV7Gx4D+VUPODf0mWRGRc5kSk= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= -contrib.go.opencensus.io/exporter/stackdriver v0.13.5 h1:TNaexHK16gPUoc7uzELKOU7JULqccn1NDuqUxmxSqfo= -contrib.go.opencensus.io/exporter/stackdriver v0.13.5/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= @@ -75,7 +70,6 @@ cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8 dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= @@ -118,8 +112,6 @@ github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Depado/ginprom v1.8.0 h1:zaaibRLNI1dMiiuj1MKzatm8qrcHzikMlCc1anqOdyo= github.com/Depado/ginprom v1.8.0/go.mod h1:XBaKzeNBqPF4vxJpNLincSQZeMDnZp1tIbU0FU0UKgg= -github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= -github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.3 h1:cb3br57K508pQEFgBxn9GDhPS9HefpyMPK1RzmtMNzk= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.3/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.3 h1:xir5X8TS8UBVPWg2jHL+cSTf0jZgqYQSA54TscSt1/0= @@ -159,7 +151,6 @@ github.com/XSAM/otelsql v0.27.0 h1:i9xtxtdcqXV768a5C6SoT/RkG+ue3JTOgkYInzlTOqs= github.com/XSAM/otelsql v0.27.0/go.mod h1:0mFB3TvLa7NCuhm/2nU7/b2wEtsczkj8Rey8ygO7V+A= github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= -github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= 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= @@ -181,7 +172,6 @@ github.com/alicebob/miniredis/v2 v2.30.4/go.mod h1:b25qWj4fCEsBeAAR2mlb0ufImGC6u github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= @@ -210,8 +200,6 @@ github.com/avast/retry-go/v4 v4.6.0 h1:K9xNA+KeB8HHc2aWFuLb25Offp+0iVRXEvFx8IinR github.com/avast/retry-go/v4 v4.6.0/go.mod h1:gvWlPhBVsvBbLkVGDg/KwvBv0bEkCOLRRSHKIr2PyOE= github.com/awalterschulze/gographviz v2.0.3+incompatible h1:9sVEXJBJLwGX7EQVhLm2elIKCm7P2YHFC8v6096G09E= github.com/awalterschulze/gographviz v2.0.3+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= -github.com/aws/aws-sdk-go v1.22.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.54.19 h1:tyWV+07jagrNiCcGRzRhdtVjQs7Vy41NwsuOcl0IbVI= github.com/aws/aws-sdk-go v1.54.19/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= @@ -269,7 +257,6 @@ 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.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= @@ -376,9 +363,7 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -389,7 +374,6 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= @@ -430,7 +414,6 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -444,27 +427,22 @@ github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80N github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -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/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= 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/dfuse-io/logging v0.0.0-20201110202154-26697de88c79/go.mod h1:V+ED4kT/t/lKtH99JQmKIb0v9WL3VaYkJ36CfHlVECI= -github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 h1:CuJS05R9jmNlUK8GOxrEELPbfXm0EuGh/30LjkjN5vo= -github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70/go.mod h1:EoK/8RFbMEteaCaz89uessDTnCWjbbcr+DXcBh4el5o= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= 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/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/digitalocean/godo v1.118.0 h1:lkzGFQmACrVCp7UqH1sAi4JK/PWwlc5aaxubgorKmC4= @@ -539,12 +517,12 @@ github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= -github.com/gagliardetto/binary v0.7.7 h1:QZpT38+sgoPg+TIQjH94sLbl/vX+nlIRA37pEyOsjfY= -github.com/gagliardetto/binary v0.7.7/go.mod h1:mUuay5LL8wFVnIlecHakSZMvcdqfs+CsotR5n77kyjM= +github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= +github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= github.com/gagliardetto/gofuzz v1.2.2/go.mod h1:bkH/3hYLZrMLbfYWA0pWzXmi5TTRZnu4pMGZBkqMKvY= -github.com/gagliardetto/solana-go v1.8.4 h1:vmD/JmTlonyXGy39bAo0inMhmbdAwV7rXZtLDMZeodE= -github.com/gagliardetto/solana-go v1.8.4/go.mod h1:i+7aAyNDTHG0jK8GZIBSI4OVvDqkt2Qx+LklYclRNG8= +github.com/gagliardetto/solana-go v1.12.0 h1:rzsbilDPj6p+/DOPXBMLhwMZeBgeRuXjm5zQFCoXgsg= +github.com/gagliardetto/solana-go v1.12.0/go.mod h1:l/qqqIN6qJJPtxW/G1PF4JtcE3Zg2vD2EliZrr9Gn5k= github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= github.com/gagliardetto/utilz v0.1.1 h1:/etW4hl607emKg6R6Lj9jRJ9d6ue2AQOyjhuAwjzs1U= @@ -670,7 +648,6 @@ github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVI github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY= github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -706,7 +683,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -790,12 +766,10 @@ github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grafana/dskit v0.0.0-20231120170505-765e343eda4f h1:gyojr97YeWZ70pKNakWv5/tKwBHuLy3icnIeCo9gQr4= @@ -820,15 +794,12 @@ github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMN github.com/graph-gophers/graphql-go v1.5.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/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.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= @@ -901,7 +872,6 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -1004,10 +974,8 @@ github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -1018,7 +986,6 @@ github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -1043,7 +1010,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -1093,7 +1059,6 @@ github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/z github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= @@ -1194,7 +1159,6 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= @@ -1215,7 +1179,6 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+ github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1 h1:dOYG7LS/WK00RWZc8XGgcUTlTxpp3mKhdR2Q9z9HbXM= github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1/go.mod h1:mpRZBD8SJ55OIICQ3iWH0Yz3cjzA61JdqMLoWXeB2+8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -1303,7 +1266,6 @@ github.com/pressly/goose/v3 v3.21.1/go.mod h1:sqthmzV8PitchEkjecFJII//l43dLOCzfW github.com/prometheus/alertmanager v0.27.0 h1:V6nTa2J5V4s8TG4C4HtrBP/WNSebCCTYGGv4qecA/+I= github.com/prometheus/alertmanager v0.27.0/go.mod h1:8Ia/R3urPmbzJ8OsdvmZvIprDwvwmYCmUbwBL+jlPOE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -1316,8 +1278,6 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -1330,7 +1290,6 @@ github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57J github.com/prometheus/exporter-toolkit v0.11.0 h1:yNTsuZ0aNCNFQ3aFTD2uhPOvr4iD7fdBvKPAEGkNf+g= github.com/prometheus/exporter-toolkit v0.11.0/go.mod h1:BVnENhnNecpwoTLiABx7mrPB/OLRIgN74qlQbV+FK1Q= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= @@ -1339,7 +1298,6 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/prometheus v0.54.1 h1:vKuwQNjnYN2/mDoWfHXDhAsz/68q/dQDb+YbcEqU7MQ= github.com/prometheus/prometheus v0.54.1/go.mod h1:xlLByHhk2g3ycakQGrMaU8K7OySZx98BzeCR99991NY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= @@ -1351,7 +1309,6 @@ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -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.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= @@ -1427,6 +1384,8 @@ github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgB github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000/go.mod h1:ncjd6mPZSRlelEqH/2KeLE1pU3UlqzBSn8RYkEoECzY= +github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b h1:UBXi9Yj8YSMHDDaxQLu273x1fWjyEL9xP58nuJsqZfg= +github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 h1:rRs74zjDJ7do5aYEXSU/sOnLnlbYCNqM8BrvEx/0NH8= github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550/go.mod h1:yti7e1+G9hhkYhj+L5sVUULn9Bn3bBL5/AxaNqdJ5YQ= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e h1:PRoeby6ZlTuTkv2f+7tVU4+zboTfRzI+beECynF4JQ0= @@ -1465,7 +1424,6 @@ github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= @@ -1484,7 +1442,6 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= @@ -1494,15 +1451,13 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= 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/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 h1:ZqpS7rAhhKD7S7DnrpEdrnW1/gZcv82ytpMviovkli4= -github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 h1:RN5mrigyirb8anBEtdjtHFIufXdacyTi6i4KBfeNXeo= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -1522,8 +1477,9 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= @@ -1533,9 +1489,6 @@ github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDd 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/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= -github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 h1:3SNcvBmEPE1YlB1JpVZouslJpI3GBNoiqW7+wb0Rz7w= -github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= @@ -1544,12 +1497,10 @@ github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a h1:YuO+afVc3eqrj github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a/go.mod h1:/sfW47zCZp9FrtGcWyo1VjbgDaodxX9ovZvgLb/MxaA= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tidwall/gjson v1.9.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= @@ -1557,7 +1508,6 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= @@ -1584,10 +1534,8 @@ github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fastjson v1.4.1 h1:hrltpHpIpkaxll8QltMU8c3QZ5+qIiCL8yKqPFJI/yE= github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/vektah/gqlparser/v2 v2.5.11 h1:JJxLtXIoN7+3x6MBdtIP59TP1RANnY7pXOaDnADQSf8= github.com/vektah/gqlparser/v2 v2.5.11/go.mod h1:1rCcfwB2ekJofmluGWXMSEnPMZgbxzwj6FaZ/4OT8Cc= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= @@ -1596,10 +1544,6 @@ github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/ github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -1607,7 +1551,6 @@ github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGC github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= 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= @@ -1634,7 +1577,6 @@ go.dedis.ch/kyber/v3 v3.1.0/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1 go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= @@ -1646,12 +1588,10 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.14/go.mod h1:8uMgAokyG1czCtIdsq+AGyYQMvpIKnSv go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v3 v3.5.14 h1:CWfRs4FDaDoSz81giL7zPpZH2Z35tbOrAJkkjMqOupg= go.etcd.io/etcd/client/v3 v3.5.14/go.mod h1:k3XfdV/VIHy/97rqWjoUzrj9tk7GgJGH9J8L4dNXmAk= -go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc= go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1725,15 +1665,12 @@ go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKY go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/ratelimit v0.3.1 h1:K4qVE+byfv/B3tC+4nYWP7v/6SimcO7HzHekoMNBma0= go.uber.org/ratelimit v0.3.1/go.mod h1:6euWsTB6U/Nb3X++xEUXA8ciPJvr19Q/0h1+oDcJhRk= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -1763,7 +1700,6 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= @@ -1778,8 +1714,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1808,15 +1744,14 @@ 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.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= 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= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1867,8 +1802,8 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1904,7 +1839,6 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1920,7 +1854,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/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= @@ -1996,7 +1929,6 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -2045,7 +1977,6 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2055,7 +1986,6 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -2091,8 +2021,8 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2110,7 +2040,6 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -2135,7 +2064,6 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -2146,7 +2074,6 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -2196,7 +2123,6 @@ google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmE google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -2249,16 +2175,13 @@ gopkg.in/guregu/null.v4 v4.0.0/go.mod h1:YoQhUrADuG3i9WqesrCmpNRwm1ypAgSHYqoOcTu gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 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.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index 338642e3e32..adc5050294e 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -1,5 +1,41 @@ package deployment +import ( + "fmt" + + "github.com/gagliardetto/solana-go" + solRpc "github.com/gagliardetto/solana-go/rpc" + solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" +) + // SolChain represents a Solana chain. type SolChain struct { + // Selectors used as canonical chain identifier. + Selector uint64 + // RPC cient + Client *solRpc.Client + // TODO: raw private key for now, need to replace with a more secure way + DeployerKey *solana.PrivateKey + Confirm func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error +} + +func (c SolChain) String() string { + chainInfo, err := ChainInfo(c.Selector) + if err != nil { + // we should never get here, if the selector is invalid it should not be in the environment + panic(err) + } + return fmt.Sprintf("%s (%d)", chainInfo.ChainName, chainInfo.ChainSelector) +} + +func (c SolChain) Name() string { + chainInfo, err := ChainInfo(c.Selector) + if err != nil { + // we should never get here, if the selector is invalid it should not be in the environment + panic(err) + } + if chainInfo.ChainName == "" { + return fmt.Sprintf("%d", c.Selector) + } + return chainInfo.ChainName } From 7a2afca3c4380b6cc76cd7a1bbd6964f4a14bcee Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Mon, 6 Jan 2025 15:13:08 +0000 Subject: [PATCH 06/48] adding link token deployment and test --- .../common/changeset/deploy_link_token.go | 66 ++++++++++++++++--- .../changeset/deploy_link_token_test.go | 12 +++- deployment/common/changeset/test_helpers.go | 1 + deployment/environment/memory/chain.go | 5 +- 4 files changed, 71 insertions(+), 13 deletions(-) diff --git a/deployment/common/changeset/deploy_link_token.go b/deployment/common/changeset/deploy_link_token.go index c115a7ee083..7e7523a33e1 100644 --- a/deployment/common/changeset/deploy_link_token.go +++ b/deployment/common/changeset/deploy_link_token.go @@ -1,10 +1,15 @@ package changeset import ( + "context" "fmt" "github.com/smartcontractkit/chainlink-common/pkg/logger" + "github.com/gagliardetto/solana-go" + solRpc "github.com/gagliardetto/solana-go/rpc" + solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" + solTokenUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/tokens" "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/common/types" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/shared/generated/link_token" @@ -15,18 +20,30 @@ var _ deployment.ChangeSet[[]uint64] = DeployLinkToken // DeployLinkToken deploys a link token contract to the chain identified by the ChainSelector. func DeployLinkToken(e deployment.Environment, chains []uint64) (deployment.ChangesetOutput, error) { for _, chain := range chains { - _, ok := e.Chains[chain] - if !ok { - return deployment.ChangesetOutput{}, fmt.Errorf("chain not found in environment") + _, evmOk := e.Chains[chain] + _, solOk := e.SolChains[chain] + if !evmOk && !solOk { + return deployment.ChangesetOutput{}, fmt.Errorf("chain %d not found in environment", chain) } } newAddresses := deployment.NewMemoryAddressBook() for _, chain := range chains { - _, err := deployLinkTokenContract( - e.Logger, e.Chains[chain], newAddresses, - ) - if err != nil { - return deployment.ChangesetOutput{AddressBook: newAddresses}, err + if _, ok := e.Chains[chain]; ok { + // Deploy EVM LINK token + _, err := deployLinkTokenContract( + e.Logger, e.Chains[chain], newAddresses, + ) + if err != nil { + return deployment.ChangesetOutput{AddressBook: newAddresses}, err + } + } else if _, ok := e.SolChains[chain]; ok { + // Deploy Solana LINK token + err := deployLinkTokenContractSolana( + e.Logger, e.SolChains[chain], newAddresses, + ) + if err != nil { + return deployment.ChangesetOutput{AddressBook: newAddresses}, err + } } } return deployment.ChangesetOutput{AddressBook: newAddresses}, nil @@ -57,3 +74,36 @@ func deployLinkTokenContract( } return linkToken, nil } + +func deployLinkTokenContractSolana( + lggr logger.Logger, + chain deployment.SolChain, + ab deployment.AddressBook, +) error { + decimals := uint8(0) + adminPublicKey := chain.DeployerKey.PublicKey() + mint, _ := solana.NewRandomPrivateKey() + // this is the token address + mintPublicKey := mint.PublicKey() + instructions, err := solTokenUtil.CreateToken( + context.Background(), solana.Token2022ProgramID, mintPublicKey, adminPublicKey, decimals, chain.Client, solRpc.CommitmentConfirmed, + ) + if err != nil { + lggr.Errorw("Failed to generate instructions for link token deployment", "chain", chain.String(), "err", err) + return err + } + err = chain.Confirm(instructions, solCommomUtil.AddSigners(mint)) + if err != nil { + lggr.Errorw("Failed to confirm instructions for link token deployment", "chain", chain.String(), "err", err) + return err + } + tv := deployment.NewTypeAndVersion(types.LinkToken, deployment.Version1_0_0) + lggr.Infow("Deployed contract", "Contract", tv.String(), "addr", mintPublicKey.String(), "chain", chain.String()) + err = ab.Save(chain.Selector, mintPublicKey.String(), tv) + if err != nil { + lggr.Errorw("Failed to save link token", "chain", chain.String(), "err", err) + return err + } + + return nil +} diff --git a/deployment/common/changeset/deploy_link_token_test.go b/deployment/common/changeset/deploy_link_token_test.go index bc472d2a247..ddaca52c2d5 100644 --- a/deployment/common/changeset/deploy_link_token_test.go +++ b/deployment/common/changeset/deploy_link_token_test.go @@ -15,13 +15,15 @@ func TestDeployLinkToken(t *testing.T) { t.Parallel() lggr := logger.TestLogger(t) e := memory.NewMemoryEnvironment(t, lggr, zapcore.InfoLevel, memory.MemoryEnvironmentConfig{ - Chains: 1, + Chains: 1, + SolChains: 1, }) chain1 := e.AllChainSelectors()[0] + solChain1 := e.AllChainSelectorsSolana()[0] e, err := changeset.ApplyChangesets(t, e, nil, []changeset.ChangesetApplication{ { Changeset: changeset.WrapChangeSet(changeset.DeployLinkToken), - Config: []uint64{chain1}, + Config: []uint64{chain1, solChain1}, }, }) require.NoError(t, err) @@ -32,4 +34,10 @@ func TestDeployLinkToken(t *testing.T) { // View itself already unit tested _, err = state.GenerateLinkView() require.NoError(t, err) + + // solana test + addrs, err = e.ExistingAddresses.AddressesForChain(solChain1) + require.NoError(t, err) + require.NotEmpty(t, addrs) + } diff --git a/deployment/common/changeset/test_helpers.go b/deployment/common/changeset/test_helpers.go index e92b36e5b55..6bbcd67310a 100644 --- a/deployment/common/changeset/test_helpers.go +++ b/deployment/common/changeset/test_helpers.go @@ -89,6 +89,7 @@ func ApplyChangesets(t *testing.T, e deployment.Environment, timelockContractsPe Logger: e.Logger, ExistingAddresses: addresses, Chains: e.Chains, + SolChains: e.SolChains, NodeIDs: e.NodeIDs, Offchain: e.Offchain, OCRSecrets: e.OCRSecrets, diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index bab4cc17b0e..0811831c5be 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -72,17 +72,16 @@ func getTestSolanaChainSelectors() []uint64 { } func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { - - chains := make(map[uint64]SolanaChain) testSolanaChainSelectors := getTestSolanaChainSelectors() if len(testSolanaChainSelectors) < numChains { t.Fatalf("not enough test solana chain selectors available") } - + chains := make(map[uint64]SolanaChain) for i := 0; i < numChains; i++ { chainID := testSolanaChainSelectors[i] url, _ := solTestUtil.SetupLocalSolNodeWithFlags(t) admin, gerr := solana.NewRandomPrivateKey() + solTestUtil.FundTestAccounts(t, []solana.PublicKey{admin.PublicKey()}, url) require.NoError(t, gerr) chains[chainID] = SolanaChain{ Client: solRpc.New(url), From 7da3b143a5c2015ac9eb65483d42d5af667f56c1 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Mon, 6 Jan 2025 15:16:44 +0000 Subject: [PATCH 07/48] adding nil for crib sol chains --- deployment/environment/crib/types.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deployment/environment/crib/types.go b/deployment/environment/crib/types.go index d19c8424443..771880053f9 100644 --- a/deployment/environment/crib/types.go +++ b/deployment/environment/crib/types.go @@ -2,6 +2,7 @@ package crib import ( "context" + "github.com/smartcontractkit/chainlink-common/pkg/logger" "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/environment/devenv" @@ -32,6 +33,7 @@ func NewDeployEnvironmentFromCribOutput(lggr logger.Logger, output DeployOutput) lggr, output.AddressBook, chains, + nil, // nil for solana chains, can use memory solana chain example when required output.NodeIDs, nil, // todo: populate the offchain client using output.DON func() context.Context { return context.Background() }, deployment.XXXGenerateTestOCRSecrets(), From 1c41814e8912d9621014e38e2201a73b10138526 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 12:37:07 +0000 Subject: [PATCH 08/48] using switch case --- deployment/common/changeset/deploy_link_token.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/deployment/common/changeset/deploy_link_token.go b/deployment/common/changeset/deploy_link_token.go index 7e7523a33e1..4c4d844b26f 100644 --- a/deployment/common/changeset/deploy_link_token.go +++ b/deployment/common/changeset/deploy_link_token.go @@ -8,6 +8,7 @@ import ( "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" + chainsel "github.com/smartcontractkit/chain-selectors" solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" solTokenUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/tokens" "github.com/smartcontractkit/chainlink/deployment" @@ -28,15 +29,20 @@ func DeployLinkToken(e deployment.Environment, chains []uint64) (deployment.Chan } newAddresses := deployment.NewMemoryAddressBook() for _, chain := range chains { - if _, ok := e.Chains[chain]; ok { + family, err := chainsel.GetSelectorFamily(chain) + if err != nil { + return deployment.ChangesetOutput{AddressBook: newAddresses}, err + } + switch family { + case chainsel.FamilyEVM: // Deploy EVM LINK token - _, err := deployLinkTokenContract( + _, err := deployLinkTokenContractEVM( e.Logger, e.Chains[chain], newAddresses, ) if err != nil { return deployment.ChangesetOutput{AddressBook: newAddresses}, err } - } else if _, ok := e.SolChains[chain]; ok { + case chainsel.FamilySolana: // Deploy Solana LINK token err := deployLinkTokenContractSolana( e.Logger, e.SolChains[chain], newAddresses, @@ -49,7 +55,7 @@ func DeployLinkToken(e deployment.Environment, chains []uint64) (deployment.Chan return deployment.ChangesetOutput{AddressBook: newAddresses}, nil } -func deployLinkTokenContract( +func deployLinkTokenContractEVM( lggr logger.Logger, chain deployment.Chain, ab deployment.AddressBook, From 01f39ebbf334d4e34185cdad1efb53c2131848eb Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 12:40:07 +0000 Subject: [PATCH 09/48] Adding decimal const --- deployment/common/changeset/deploy_link_token.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/deployment/common/changeset/deploy_link_token.go b/deployment/common/changeset/deploy_link_token.go index 4c4d844b26f..eb6a38f6a58 100644 --- a/deployment/common/changeset/deploy_link_token.go +++ b/deployment/common/changeset/deploy_link_token.go @@ -18,6 +18,10 @@ import ( var _ deployment.ChangeSet[[]uint64] = DeployLinkToken +const ( + TokenDecimalsSolana = 9 +) + // DeployLinkToken deploys a link token contract to the chain identified by the ChainSelector. func DeployLinkToken(e deployment.Environment, chains []uint64) (deployment.ChangesetOutput, error) { for _, chain := range chains { @@ -86,13 +90,13 @@ func deployLinkTokenContractSolana( chain deployment.SolChain, ab deployment.AddressBook, ) error { - decimals := uint8(0) + adminPublicKey := chain.DeployerKey.PublicKey() mint, _ := solana.NewRandomPrivateKey() // this is the token address mintPublicKey := mint.PublicKey() instructions, err := solTokenUtil.CreateToken( - context.Background(), solana.Token2022ProgramID, mintPublicKey, adminPublicKey, decimals, chain.Client, solRpc.CommitmentConfirmed, + context.Background(), solana.Token2022ProgramID, mintPublicKey, adminPublicKey, TokenDecimalsSolana, chain.Client, solRpc.CommitmentConfirmed, ) if err != nil { lggr.Errorw("Failed to generate instructions for link token deployment", "chain", chain.String(), "err", err) From 3a4ae18703aa9be6e68ca4cf55454d6ef312b4d8 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 14:13:24 +0000 Subject: [PATCH 10/48] adding chain selectors commit --- deployment/go.mod | 1 + 1 file changed, 1 insertion(+) diff --git a/deployment/go.mod b/deployment/go.mod index 440a1fd4d5a..cbc9bafdd6c 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -28,6 +28,7 @@ require ( github.com/rs/zerolog v1.33.0 github.com/sethvargo/go-retry v0.2.4 github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix + // github.com/smartcontractkit/chain-selectors v1.0.34 github.com/smartcontractkit/chain-selectors v1.0.34 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b From b76324da9259a2594112f26501a30297dfde87a3 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 14:26:44 +0000 Subject: [PATCH 11/48] go mod tidy --- core/scripts/go.mod | 24 +++---- core/scripts/go.sum | 124 ++++++---------------------------- integration-tests/go.mod | 23 +++---- integration-tests/go.sum | 116 ++++++------------------------- integration-tests/load/go.mod | 22 +++--- integration-tests/load/go.sum | 116 ++++++------------------------- 6 files changed, 89 insertions(+), 336 deletions(-) diff --git a/core/scripts/go.mod b/core/scripts/go.mod index a9e5130db2c..d4bfdedb1a0 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -37,7 +37,7 @@ require ( github.com/smartcontractkit/libocr v0.0.0-20241223215956-e5b78d8e3919 github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/umbracle/ethgo v0.1.3 github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722 github.com/urfave/cli v1.22.14 @@ -48,7 +48,6 @@ require ( ) require ( - contrib.go.opencensus.io/exporter/stackdriver v0.13.5 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect @@ -118,8 +117,7 @@ require ( github.com/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect 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 @@ -138,8 +136,8 @@ require ( github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect - github.com/gagliardetto/binary v0.7.7 // indirect - github.com/gagliardetto/solana-go v1.8.4 // indirect + github.com/gagliardetto/binary v0.8.0 // indirect + github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 // indirect @@ -178,7 +176,6 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/golang/glog v1.2.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.2 // indirect @@ -304,6 +301,7 @@ require ( github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix // indirect github.com/smartcontractkit/chain-selectors v1.0.34 // indirect github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 // indirect + github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b // indirect github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241216163550-fa030d178ba3 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect @@ -321,13 +319,12 @@ require ( github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/status-im/keycard-go v0.2.0 // indirect - github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 // indirect + github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/supranational/blst v0.3.13 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 // indirect github.com/test-go/testify v1.1.4 // indirect github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a // indirect github.com/tidwall/btree v1.6.0 // indirect @@ -354,7 +351,6 @@ require ( go.dedis.ch/kyber/v3 v3.1.0 // indirect go.etcd.io/bbolt v1.3.9 // indirect go.mongodb.org/mongo-driver v1.15.0 // indirect - go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect @@ -381,16 +377,16 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/arch v0.11.0 // indirect golang.org/x/crypto v0.31.0 // indirect - golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect - golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.30.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.27.0 // indirect golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.7.0 // indirect - golang.org/x/tools v0.26.0 // indirect + golang.org/x/tools v0.28.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gonum.org/v1/gonum v0.15.1 // indirect google.golang.org/genproto v0.0.0-20241021214115-324edc3d5d38 // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 7b004d6eae7..18716c36348 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -3,7 +3,6 @@ cel.dev/expr v0.17.0/go.mod h1:HCwbrn+qQoHPXgfz6cl2J0hDybnX2N1sQQkl9EggXx8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= @@ -54,10 +53,6 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.45.0 h1:5av0QcIVj77t+44mV4gffFC/LscFRUhto6UBMB5SimM= cloud.google.com/go/storage v1.45.0/go.mod h1:wpPblkIuMP5jCB/E48Pz9zIo2S/zD8g+ITmxKkPCITE= -contrib.go.opencensus.io/exporter/stackdriver v0.12.6/go.mod h1:8x999/OcIPy5ivx/wDiV7Gx4D+VUPODf0mWRGRc5kSk= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= -contrib.go.opencensus.io/exporter/stackdriver v0.13.5 h1:TNaexHK16gPUoc7uzELKOU7JULqccn1NDuqUxmxSqfo= -contrib.go.opencensus.io/exporter/stackdriver v0.13.5/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= @@ -73,7 +68,6 @@ cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= @@ -100,8 +94,6 @@ github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Depado/ginprom v1.8.0 h1:zaaibRLNI1dMiiuj1MKzatm8qrcHzikMlCc1anqOdyo= github.com/Depado/ginprom v1.8.0/go.mod h1:XBaKzeNBqPF4vxJpNLincSQZeMDnZp1tIbU0FU0UKgg= -github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= -github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.3 h1:cb3br57K508pQEFgBxn9GDhPS9HefpyMPK1RzmtMNzk= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.3/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.3 h1:xir5X8TS8UBVPWg2jHL+cSTf0jZgqYQSA54TscSt1/0= @@ -128,7 +120,6 @@ github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrd github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/XSAM/otelsql v0.27.0 h1:i9xtxtdcqXV768a5C6SoT/RkG+ue3JTOgkYInzlTOqs= github.com/XSAM/otelsql v0.27.0/go.mod h1:0mFB3TvLa7NCuhm/2nU7/b2wEtsczkj8Rey8ygO7V+A= -github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= 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= @@ -138,7 +129,6 @@ github.com/alexbrainman/sspi v0.0.0-20210105120005-909beea2cc74/go.mod h1:cEWa1L github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -156,8 +146,6 @@ github.com/atombender/go-jsonschema v0.16.1-0.20240916205339-a74cd4e2851c h1:cxQ github.com/atombender/go-jsonschema v0.16.1-0.20240916205339-a74cd4e2851c/go.mod h1:3XzxudkrYVUvbduN/uI2fl4lSrMSzU0+3RCu2mpnfx8= github.com/avast/retry-go/v4 v4.6.0 h1:K9xNA+KeB8HHc2aWFuLb25Offp+0iVRXEvFx8IinRJA= github.com/avast/retry-go/v4 v4.6.0/go.mod h1:gvWlPhBVsvBbLkVGDg/KwvBv0bEkCOLRRSHKIr2PyOE= -github.com/aws/aws-sdk-go v1.22.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.54.19 h1:tyWV+07jagrNiCcGRzRhdtVjQs7Vy41NwsuOcl0IbVI= github.com/aws/aws-sdk-go v1.54.19/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= @@ -178,7 +166,6 @@ 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.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= @@ -267,16 +254,13 @@ github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7b github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= @@ -314,7 +298,6 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -328,23 +311,18 @@ github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80N github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -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/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= 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/dfuse-io/logging v0.0.0-20201110202154-26697de88c79/go.mod h1:V+ED4kT/t/lKtH99JQmKIb0v9WL3VaYkJ36CfHlVECI= -github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 h1:CuJS05R9jmNlUK8GOxrEELPbfXm0EuGh/30LjkjN5vo= -github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70/go.mod h1:EoK/8RFbMEteaCaz89uessDTnCWjbbcr+DXcBh4el5o= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= 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/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= @@ -384,7 +362,6 @@ github.com/ethereum/go-ethereum v1.14.11/go.mod h1:+l/fr42Mma+xBnhefL/+z11/hcmJ2 github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9 h1:8NfxH2iXvJ60YRB8ChToFTUzl8awsc3cJ8CbLjGIl/A= github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= @@ -403,12 +380,12 @@ github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= -github.com/gagliardetto/binary v0.7.7 h1:QZpT38+sgoPg+TIQjH94sLbl/vX+nlIRA37pEyOsjfY= -github.com/gagliardetto/binary v0.7.7/go.mod h1:mUuay5LL8wFVnIlecHakSZMvcdqfs+CsotR5n77kyjM= +github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= +github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= github.com/gagliardetto/gofuzz v1.2.2/go.mod h1:bkH/3hYLZrMLbfYWA0pWzXmi5TTRZnu4pMGZBkqMKvY= -github.com/gagliardetto/solana-go v1.8.4 h1:vmD/JmTlonyXGy39bAo0inMhmbdAwV7rXZtLDMZeodE= -github.com/gagliardetto/solana-go v1.8.4/go.mod h1:i+7aAyNDTHG0jK8GZIBSI4OVvDqkt2Qx+LklYclRNG8= +github.com/gagliardetto/solana-go v1.12.0 h1:rzsbilDPj6p+/DOPXBMLhwMZeBgeRuXjm5zQFCoXgsg= +github.com/gagliardetto/solana-go v1.12.0/go.mod h1:l/qqqIN6qJJPtxW/G1PF4JtcE3Zg2vD2EliZrr9Gn5k= github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= github.com/gagliardetto/utilz v0.1.1 h1:/etW4hl607emKg6R6Lj9jRJ9d6ue2AQOyjhuAwjzs1U= @@ -526,7 +503,6 @@ github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVI github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY= github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -562,7 +538,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -638,12 +613,10 @@ github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grafana/pyroscope-go v1.1.2 h1:7vCfdORYQMCxIzI3NlYAs3FcBP760+gWuYWOyiVyYx8= @@ -654,15 +627,12 @@ github.com/graph-gophers/dataloader v5.0.0+incompatible h1:R+yjsbrNq1Mo3aPG+Z/EK github.com/graph-gophers/dataloader v5.0.0+incompatible/go.mod h1:jk4jk0c5ZISbKaMe8WsVopGB5/15GvGHMdMdPtwlRp4= github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMNMPSVXA1yc= github.com/graph-gophers/graphql-go v1.5.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/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.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= @@ -717,7 +687,6 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= @@ -807,10 +776,8 @@ github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -821,7 +788,6 @@ github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -841,7 +807,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -883,7 +848,6 @@ github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczG github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= @@ -899,7 +863,6 @@ github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo= github.com/maruel/natural v1.1.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= @@ -908,8 +871,6 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -964,7 +925,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= @@ -983,7 +943,6 @@ github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJm github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1 h1:dOYG7LS/WK00RWZc8XGgcUTlTxpp3mKhdR2Q9z9HbXM= github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1/go.mod h1:mpRZBD8SJ55OIICQ3iWH0Yz3cjzA61JdqMLoWXeB2+8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -991,7 +950,6 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= 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/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= 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= @@ -1056,7 +1014,6 @@ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:Om github.com/pressly/goose/v3 v3.21.1 h1:5SSAKKWej8LVVzNLuT6KIvP1eFDuPvxa+B6H0w78buQ= github.com/pressly/goose/v3 v3.21.1/go.mod h1:sqthmzV8PitchEkjecFJII//l43dLOCzfWh8pHEe+vE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= @@ -1067,21 +1024,17 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.60.0 h1:+V9PAREWNvJMAuJ1x1BaWl9dewMW4YrHZQbx0sJNllA= github.com/prometheus/common v0.60.0/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/prometheus v0.54.1 h1:vKuwQNjnYN2/mDoWfHXDhAsz/68q/dQDb+YbcEqU7MQ= github.com/prometheus/prometheus v0.54.1/go.mod h1:xlLByHhk2g3ycakQGrMaU8K7OySZx98BzeCR99991NY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= @@ -1095,7 +1048,6 @@ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -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= @@ -1162,6 +1114,8 @@ github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgB github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000/go.mod h1:ncjd6mPZSRlelEqH/2KeLE1pU3UlqzBSn8RYkEoECzY= +github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b h1:UBXi9Yj8YSMHDDaxQLu273x1fWjyEL9xP58nuJsqZfg= +github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 h1:rRs74zjDJ7do5aYEXSU/sOnLnlbYCNqM8BrvEx/0NH8= github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550/go.mod h1:yti7e1+G9hhkYhj+L5sVUULn9Bn3bBL5/AxaNqdJ5YQ= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e h1:PRoeby6ZlTuTkv2f+7tVU4+zboTfRzI+beECynF4JQ0= @@ -1194,7 +1148,6 @@ github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -1209,7 +1162,6 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= @@ -1219,15 +1171,13 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= 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/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 h1:ZqpS7rAhhKD7S7DnrpEdrnW1/gZcv82ytpMviovkli4= -github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 h1:RN5mrigyirb8anBEtdjtHFIufXdacyTi6i4KBfeNXeo= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -1247,8 +1197,9 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= @@ -1258,22 +1209,17 @@ github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDd 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/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= -github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 h1:3SNcvBmEPE1YlB1JpVZouslJpI3GBNoiqW7+wb0Rz7w= -github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a h1:YuO+afVc3eqrjiCUizNCxI53bl/BnPiVwXqLzqYTqgU= github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a/go.mod h1:/sfW47zCZp9FrtGcWyo1VjbgDaodxX9ovZvgLb/MxaA= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tidwall/gjson v1.9.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= @@ -1283,7 +1229,6 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= @@ -1309,24 +1254,17 @@ github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fastjson v1.4.1 h1:hrltpHpIpkaxll8QltMU8c3QZ5+qIiCL8yKqPFJI/yE= github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc= github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= -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-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= 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= @@ -1351,18 +1289,15 @@ go.dedis.ch/kyber/v3 v3.1.0/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1 go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc= go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1434,15 +1369,12 @@ go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKY go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/ratelimit v0.3.1 h1:K4qVE+byfv/B3tC+4nYWP7v/6SimcO7HzHekoMNBma0= go.uber.org/ratelimit v0.3.1/go.mod h1:6euWsTB6U/Nb3X++xEUXA8ciPJvr19Q/0h1+oDcJhRk= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -1469,7 +1401,6 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= @@ -1483,8 +1414,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1513,15 +1444,14 @@ 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.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= 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= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1534,7 +1464,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1567,8 +1496,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1603,7 +1532,6 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1619,7 +1547,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/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= @@ -1684,7 +1611,6 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= @@ -1729,7 +1655,6 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1739,7 +1664,6 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1775,8 +1699,8 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1792,7 +1716,6 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1817,7 +1740,6 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -1827,7 +1749,6 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1876,9 +1797,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go. google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1932,16 +1851,13 @@ gopkg.in/guregu/null.v4 v4.0.0/go.mod h1:YoQhUrADuG3i9WqesrCmpNRwm1ypAgSHYqoOcTu gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 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.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 1c63ac6738e..05d95822acf 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -56,7 +56,7 @@ require ( github.com/smartcontractkit/chainlink-testing-framework/wasp v1.50.2 github.com/smartcontractkit/libocr v0.0.0-20241223215956-e5b78d8e3919 github.com/spf13/cobra v1.8.1 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/subosito/gotenv v1.6.0 github.com/test-go/testify v1.1.4 github.com/testcontainers/testcontainers-go v0.34.0 @@ -65,7 +65,7 @@ require ( go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 golang.org/x/crypto v0.31.0 - golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 golang.org/x/sync v0.10.0 golang.org/x/text v0.21.0 google.golang.org/grpc v1.67.1 @@ -74,7 +74,6 @@ require ( ) require ( - contrib.go.opencensus.io/exporter/stackdriver v0.13.5 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect @@ -183,9 +182,8 @@ require ( github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/dennwc/varint v1.0.0 // indirect - github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 // indirect 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 @@ -211,8 +209,8 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect - github.com/gagliardetto/binary v0.7.7 // indirect - github.com/gagliardetto/solana-go v1.8.4 // indirect + github.com/gagliardetto/binary v0.8.0 // indirect + github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect @@ -424,6 +422,7 @@ require ( github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix // indirect + github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b // indirect github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241216163550-fa030d178ba3 // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect @@ -442,12 +441,11 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect github.com/status-im/keycard-go v0.2.0 // indirect - github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 // indirect + github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/supranational/blst v0.3.13 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 // indirect github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/tidwall/gjson v1.17.0 // indirect @@ -478,7 +476,6 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.14 // indirect go.etcd.io/etcd/client/v3 v3.5.14 // indirect go.mongodb.org/mongo-driver v1.15.0 // indirect - go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/collector/pdata v1.12.0 // indirect go.opentelemetry.io/collector/semconv v0.105.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect @@ -506,13 +503,13 @@ require ( go.uber.org/ratelimit v0.3.1 // indirect go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect golang.org/x/arch v0.11.0 // indirect - golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.30.0 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.27.0 // indirect golang.org/x/time v0.7.0 // indirect - golang.org/x/tools v0.26.0 // indirect + golang.org/x/tools v0.28.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gonum.org/v1/gonum v0.15.1 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 1baff05f3f1..df13d3d8c81 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -3,7 +3,6 @@ cel.dev/expr v0.17.0/go.mod h1:HCwbrn+qQoHPXgfz6cl2J0hDybnX2N1sQQkl9EggXx8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= @@ -54,10 +53,6 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.45.0 h1:5av0QcIVj77t+44mV4gffFC/LscFRUhto6UBMB5SimM= cloud.google.com/go/storage v1.45.0/go.mod h1:wpPblkIuMP5jCB/E48Pz9zIo2S/zD8g+ITmxKkPCITE= -contrib.go.opencensus.io/exporter/stackdriver v0.12.6/go.mod h1:8x999/OcIPy5ivx/wDiV7Gx4D+VUPODf0mWRGRc5kSk= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= -contrib.go.opencensus.io/exporter/stackdriver v0.13.5 h1:TNaexHK16gPUoc7uzELKOU7JULqccn1NDuqUxmxSqfo= -contrib.go.opencensus.io/exporter/stackdriver v0.13.5/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= @@ -75,7 +70,6 @@ cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8 dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= @@ -118,8 +112,6 @@ github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Depado/ginprom v1.8.0 h1:zaaibRLNI1dMiiuj1MKzatm8qrcHzikMlCc1anqOdyo= github.com/Depado/ginprom v1.8.0/go.mod h1:XBaKzeNBqPF4vxJpNLincSQZeMDnZp1tIbU0FU0UKgg= -github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= -github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.3 h1:xir5X8TS8UBVPWg2jHL+cSTf0jZgqYQSA54TscSt1/0= @@ -159,7 +151,6 @@ github.com/Workiva/go-datastructures v1.1.0 h1:hu20UpgZneBhQ3ZvwiOGlqJSKIosin2Rd github.com/Workiva/go-datastructures v1.1.0/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/XSAM/otelsql v0.27.0 h1:i9xtxtdcqXV768a5C6SoT/RkG+ue3JTOgkYInzlTOqs= github.com/XSAM/otelsql v0.27.0/go.mod h1:0mFB3TvLa7NCuhm/2nU7/b2wEtsczkj8Rey8ygO7V+A= -github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= 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= @@ -177,7 +168,6 @@ github.com/alicebob/miniredis/v2 v2.30.4/go.mod h1:b25qWj4fCEsBeAAR2mlb0ufImGC6u github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= @@ -204,8 +194,6 @@ github.com/avast/retry-go/v4 v4.6.0 h1:K9xNA+KeB8HHc2aWFuLb25Offp+0iVRXEvFx8IinR github.com/avast/retry-go/v4 v4.6.0/go.mod h1:gvWlPhBVsvBbLkVGDg/KwvBv0bEkCOLRRSHKIr2PyOE= github.com/awalterschulze/gographviz v2.0.3+incompatible h1:9sVEXJBJLwGX7EQVhLm2elIKCm7P2YHFC8v6096G09E= github.com/awalterschulze/gographviz v2.0.3+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= -github.com/aws/aws-sdk-go v1.22.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.54.19 h1:tyWV+07jagrNiCcGRzRhdtVjQs7Vy41NwsuOcl0IbVI= github.com/aws/aws-sdk-go v1.54.19/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= @@ -263,7 +251,6 @@ 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.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= @@ -380,9 +367,7 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -393,7 +378,6 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= @@ -434,7 +418,6 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -448,27 +431,22 @@ github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80N github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -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/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= 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/dfuse-io/logging v0.0.0-20201110202154-26697de88c79/go.mod h1:V+ED4kT/t/lKtH99JQmKIb0v9WL3VaYkJ36CfHlVECI= -github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 h1:CuJS05R9jmNlUK8GOxrEELPbfXm0EuGh/30LjkjN5vo= -github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70/go.mod h1:EoK/8RFbMEteaCaz89uessDTnCWjbbcr+DXcBh4el5o= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= 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/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.118.0 h1:lkzGFQmACrVCp7UqH1sAi4JK/PWwlc5aaxubgorKmC4= github.com/digitalocean/godo v1.118.0/go.mod h1:Vk0vpCot2HOAJwc5WE8wljZGtJ3ZtWIc8MQ8rF38sdo= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= @@ -541,12 +519,12 @@ github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= -github.com/gagliardetto/binary v0.7.7 h1:QZpT38+sgoPg+TIQjH94sLbl/vX+nlIRA37pEyOsjfY= -github.com/gagliardetto/binary v0.7.7/go.mod h1:mUuay5LL8wFVnIlecHakSZMvcdqfs+CsotR5n77kyjM= +github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= +github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= github.com/gagliardetto/gofuzz v1.2.2/go.mod h1:bkH/3hYLZrMLbfYWA0pWzXmi5TTRZnu4pMGZBkqMKvY= -github.com/gagliardetto/solana-go v1.8.4 h1:vmD/JmTlonyXGy39bAo0inMhmbdAwV7rXZtLDMZeodE= -github.com/gagliardetto/solana-go v1.8.4/go.mod h1:i+7aAyNDTHG0jK8GZIBSI4OVvDqkt2Qx+LklYclRNG8= +github.com/gagliardetto/solana-go v1.12.0 h1:rzsbilDPj6p+/DOPXBMLhwMZeBgeRuXjm5zQFCoXgsg= +github.com/gagliardetto/solana-go v1.12.0/go.mod h1:l/qqqIN6qJJPtxW/G1PF4JtcE3Zg2vD2EliZrr9Gn5k= github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= github.com/gagliardetto/utilz v0.1.1 h1:/etW4hl607emKg6R6Lj9jRJ9d6ue2AQOyjhuAwjzs1U= @@ -674,7 +652,6 @@ github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVI github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY= github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -710,7 +687,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -795,7 +771,6 @@ github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= @@ -825,15 +800,12 @@ github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMN github.com/graph-gophers/graphql-go v1.5.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/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.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= @@ -906,7 +878,6 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -1011,10 +982,8 @@ github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -1025,7 +994,6 @@ github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -1050,7 +1018,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -1102,7 +1069,6 @@ github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= @@ -1203,7 +1169,6 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= @@ -1228,7 +1193,6 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+ github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1 h1:dOYG7LS/WK00RWZc8XGgcUTlTxpp3mKhdR2Q9z9HbXM= github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1/go.mod h1:mpRZBD8SJ55OIICQ3iWH0Yz3cjzA61JdqMLoWXeB2+8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -1320,7 +1284,6 @@ github.com/pressly/goose/v3 v3.21.1/go.mod h1:sqthmzV8PitchEkjecFJII//l43dLOCzfW github.com/prometheus/alertmanager v0.27.0 h1:V6nTa2J5V4s8TG4C4HtrBP/WNSebCCTYGGv4qecA/+I= github.com/prometheus/alertmanager v0.27.0/go.mod h1:8Ia/R3urPmbzJ8OsdvmZvIprDwvwmYCmUbwBL+jlPOE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -1333,8 +1296,6 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -1347,7 +1308,6 @@ github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57J github.com/prometheus/exporter-toolkit v0.11.0 h1:yNTsuZ0aNCNFQ3aFTD2uhPOvr4iD7fdBvKPAEGkNf+g= github.com/prometheus/exporter-toolkit v0.11.0/go.mod h1:BVnENhnNecpwoTLiABx7mrPB/OLRIgN74qlQbV+FK1Q= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= @@ -1356,7 +1316,6 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/prometheus v0.54.1 h1:vKuwQNjnYN2/mDoWfHXDhAsz/68q/dQDb+YbcEqU7MQ= github.com/prometheus/prometheus v0.54.1/go.mod h1:xlLByHhk2g3ycakQGrMaU8K7OySZx98BzeCR99991NY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= @@ -1368,7 +1327,6 @@ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -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.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= @@ -1448,6 +1406,8 @@ github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgB github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000/go.mod h1:ncjd6mPZSRlelEqH/2KeLE1pU3UlqzBSn8RYkEoECzY= +github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b h1:UBXi9Yj8YSMHDDaxQLu273x1fWjyEL9xP58nuJsqZfg= +github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 h1:rRs74zjDJ7do5aYEXSU/sOnLnlbYCNqM8BrvEx/0NH8= github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550/go.mod h1:yti7e1+G9hhkYhj+L5sVUULn9Bn3bBL5/AxaNqdJ5YQ= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e h1:PRoeby6ZlTuTkv2f+7tVU4+zboTfRzI+beECynF4JQ0= @@ -1488,7 +1448,6 @@ github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= @@ -1507,7 +1466,6 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= @@ -1517,15 +1475,13 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= 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/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 h1:ZqpS7rAhhKD7S7DnrpEdrnW1/gZcv82ytpMviovkli4= -github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 h1:RN5mrigyirb8anBEtdjtHFIufXdacyTi6i4KBfeNXeo= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -1545,8 +1501,9 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= @@ -1556,9 +1513,6 @@ github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDd 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/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= -github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 h1:3SNcvBmEPE1YlB1JpVZouslJpI3GBNoiqW7+wb0Rz7w= -github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= @@ -1569,12 +1523,10 @@ github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e h1:Buzhfgf github.com/thlib/go-timezone-local v0.0.0-20210907160436-ef149e42d28e/go.mod h1:/Tnicc6m/lsJE0irFMA0LfIwTBo4QP7A8IfyIv4zZKI= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tidwall/gjson v1.9.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= @@ -1582,7 +1534,6 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= @@ -1609,10 +1560,8 @@ github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fastjson v1.4.1 h1:hrltpHpIpkaxll8QltMU8c3QZ5+qIiCL8yKqPFJI/yE= github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/vektah/gqlparser/v2 v2.5.11 h1:JJxLtXIoN7+3x6MBdtIP59TP1RANnY7pXOaDnADQSf8= github.com/vektah/gqlparser/v2 v2.5.11/go.mod h1:1rCcfwB2ekJofmluGWXMSEnPMZgbxzwj6FaZ/4OT8Cc= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= @@ -1621,10 +1570,6 @@ github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/ github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -1632,7 +1577,6 @@ github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGC github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= 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= @@ -1659,7 +1603,6 @@ go.dedis.ch/kyber/v3 v3.1.0/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1 go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= @@ -1671,12 +1614,10 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.14/go.mod h1:8uMgAokyG1czCtIdsq+AGyYQMvpIKnSv go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v3 v3.5.14 h1:CWfRs4FDaDoSz81giL7zPpZH2Z35tbOrAJkkjMqOupg= go.etcd.io/etcd/client/v3 v3.5.14/go.mod h1:k3XfdV/VIHy/97rqWjoUzrj9tk7GgJGH9J8L4dNXmAk= -go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc= go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1750,15 +1691,12 @@ go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKY go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/ratelimit v0.3.1 h1:K4qVE+byfv/B3tC+4nYWP7v/6SimcO7HzHekoMNBma0= go.uber.org/ratelimit v0.3.1/go.mod h1:6euWsTB6U/Nb3X++xEUXA8ciPJvr19Q/0h1+oDcJhRk= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -1789,7 +1727,6 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= @@ -1804,8 +1741,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1834,15 +1771,14 @@ 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.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= 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= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1893,8 +1829,8 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1930,7 +1866,6 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1947,7 +1882,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/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= @@ -2024,7 +1958,6 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -2073,7 +2006,6 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2083,7 +2015,6 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -2119,8 +2050,8 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2138,7 +2069,6 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -2163,7 +2093,6 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -2174,7 +2103,6 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -2224,7 +2152,6 @@ google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmE google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -2277,16 +2204,13 @@ gopkg.in/guregu/null.v4 v4.0.0/go.mod h1:YoQhUrADuG3i9WqesrCmpNRwm1ypAgSHYqoOcTu gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 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.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 04f9b07f93b..b0d6bafc902 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -32,14 +32,13 @@ require ( github.com/smartcontractkit/chainlink-testing-framework/seth v1.50.9 github.com/smartcontractkit/chainlink-testing-framework/wasp v1.50.2 github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20241009055228-33d0c0bf38de - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/wiremock/go-wiremock v1.9.0 go.uber.org/ratelimit v0.3.1 - golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 ) require ( - contrib.go.opencensus.io/exporter/stackdriver v0.13.5 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect @@ -153,9 +152,8 @@ require ( 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/v2 v2.6.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/dennwc/varint v1.0.0 // indirect - github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 // indirect 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 @@ -182,8 +180,8 @@ require ( github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect - github.com/gagliardetto/binary v0.7.7 // indirect - github.com/gagliardetto/solana-go v1.8.4 // indirect + github.com/gagliardetto/binary v0.8.0 // indirect + github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect @@ -429,13 +427,12 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect github.com/status-im/keycard-go v0.2.0 // indirect - github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 // indirect + github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/supranational/blst v0.3.13 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 // indirect github.com/test-go/testify v1.1.4 // indirect github.com/testcontainers/testcontainers-go v0.34.0 // indirect github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a // indirect @@ -469,7 +466,6 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.14 // indirect go.etcd.io/etcd/client/v3 v3.5.14 // indirect go.mongodb.org/mongo-driver v1.15.0 // indirect - go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/collector/pdata v1.12.0 // indirect go.opentelemetry.io/collector/semconv v0.105.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect @@ -500,15 +496,15 @@ require ( go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect golang.org/x/arch v0.11.0 // indirect golang.org/x/crypto v0.31.0 // indirect - golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.30.0 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.27.0 // indirect golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.7.0 // indirect - golang.org/x/tools v0.26.0 // indirect + golang.org/x/tools v0.28.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect gonum.org/v1/gonum v0.15.1 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 48bdf1cb5b1..ba65f69e122 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -3,7 +3,6 @@ cel.dev/expr v0.17.0/go.mod h1:HCwbrn+qQoHPXgfz6cl2J0hDybnX2N1sQQkl9EggXx8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= @@ -54,10 +53,6 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.45.0 h1:5av0QcIVj77t+44mV4gffFC/LscFRUhto6UBMB5SimM= cloud.google.com/go/storage v1.45.0/go.mod h1:wpPblkIuMP5jCB/E48Pz9zIo2S/zD8g+ITmxKkPCITE= -contrib.go.opencensus.io/exporter/stackdriver v0.12.6/go.mod h1:8x999/OcIPy5ivx/wDiV7Gx4D+VUPODf0mWRGRc5kSk= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= -contrib.go.opencensus.io/exporter/stackdriver v0.13.5 h1:TNaexHK16gPUoc7uzELKOU7JULqccn1NDuqUxmxSqfo= -contrib.go.opencensus.io/exporter/stackdriver v0.13.5/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= @@ -75,7 +70,6 @@ cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8 dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= @@ -118,8 +112,6 @@ github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Depado/ginprom v1.8.0 h1:zaaibRLNI1dMiiuj1MKzatm8qrcHzikMlCc1anqOdyo= github.com/Depado/ginprom v1.8.0/go.mod h1:XBaKzeNBqPF4vxJpNLincSQZeMDnZp1tIbU0FU0UKgg= -github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= -github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.3 h1:xir5X8TS8UBVPWg2jHL+cSTf0jZgqYQSA54TscSt1/0= @@ -163,7 +155,6 @@ github.com/Workiva/go-datastructures v1.1.0 h1:hu20UpgZneBhQ3ZvwiOGlqJSKIosin2Rd github.com/Workiva/go-datastructures v1.1.0/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/XSAM/otelsql v0.27.0 h1:i9xtxtdcqXV768a5C6SoT/RkG+ue3JTOgkYInzlTOqs= github.com/XSAM/otelsql v0.27.0/go.mod h1:0mFB3TvLa7NCuhm/2nU7/b2wEtsczkj8Rey8ygO7V+A= -github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= 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= @@ -181,7 +172,6 @@ github.com/alicebob/miniredis/v2 v2.30.4/go.mod h1:b25qWj4fCEsBeAAR2mlb0ufImGC6u github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= @@ -208,8 +198,6 @@ github.com/avast/retry-go/v4 v4.6.0 h1:K9xNA+KeB8HHc2aWFuLb25Offp+0iVRXEvFx8IinR github.com/avast/retry-go/v4 v4.6.0/go.mod h1:gvWlPhBVsvBbLkVGDg/KwvBv0bEkCOLRRSHKIr2PyOE= github.com/awalterschulze/gographviz v2.0.3+incompatible h1:9sVEXJBJLwGX7EQVhLm2elIKCm7P2YHFC8v6096G09E= github.com/awalterschulze/gographviz v2.0.3+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= -github.com/aws/aws-sdk-go v1.22.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.54.19 h1:tyWV+07jagrNiCcGRzRhdtVjQs7Vy41NwsuOcl0IbVI= github.com/aws/aws-sdk-go v1.54.19/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= @@ -267,7 +255,6 @@ 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.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= @@ -374,9 +361,7 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -387,7 +372,6 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= @@ -428,7 +412,6 @@ github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7Do github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -442,27 +425,22 @@ github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80N github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -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/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= 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/dfuse-io/logging v0.0.0-20201110202154-26697de88c79/go.mod h1:V+ED4kT/t/lKtH99JQmKIb0v9WL3VaYkJ36CfHlVECI= -github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70 h1:CuJS05R9jmNlUK8GOxrEELPbfXm0EuGh/30LjkjN5vo= -github.com/dfuse-io/logging v0.0.0-20210109005628-b97a57253f70/go.mod h1:EoK/8RFbMEteaCaz89uessDTnCWjbbcr+DXcBh4el5o= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= 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/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.118.0 h1:lkzGFQmACrVCp7UqH1sAi4JK/PWwlc5aaxubgorKmC4= github.com/digitalocean/godo v1.118.0/go.mod h1:Vk0vpCot2HOAJwc5WE8wljZGtJ3ZtWIc8MQ8rF38sdo= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= @@ -535,12 +513,12 @@ github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= -github.com/gagliardetto/binary v0.7.7 h1:QZpT38+sgoPg+TIQjH94sLbl/vX+nlIRA37pEyOsjfY= -github.com/gagliardetto/binary v0.7.7/go.mod h1:mUuay5LL8wFVnIlecHakSZMvcdqfs+CsotR5n77kyjM= +github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= +github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= github.com/gagliardetto/gofuzz v1.2.2/go.mod h1:bkH/3hYLZrMLbfYWA0pWzXmi5TTRZnu4pMGZBkqMKvY= -github.com/gagliardetto/solana-go v1.8.4 h1:vmD/JmTlonyXGy39bAo0inMhmbdAwV7rXZtLDMZeodE= -github.com/gagliardetto/solana-go v1.8.4/go.mod h1:i+7aAyNDTHG0jK8GZIBSI4OVvDqkt2Qx+LklYclRNG8= +github.com/gagliardetto/solana-go v1.12.0 h1:rzsbilDPj6p+/DOPXBMLhwMZeBgeRuXjm5zQFCoXgsg= +github.com/gagliardetto/solana-go v1.12.0/go.mod h1:l/qqqIN6qJJPtxW/G1PF4JtcE3Zg2vD2EliZrr9Gn5k= github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= github.com/gagliardetto/utilz v0.1.1 h1:/etW4hl607emKg6R6Lj9jRJ9d6ue2AQOyjhuAwjzs1U= @@ -668,7 +646,6 @@ github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVI github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY= github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -704,7 +681,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -789,7 +765,6 @@ github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= @@ -823,15 +798,12 @@ github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMN github.com/graph-gophers/graphql-go v1.5.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/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.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= @@ -904,7 +876,6 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -1007,10 +978,8 @@ github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -1021,7 +990,6 @@ github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -1046,7 +1014,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -1096,7 +1063,6 @@ github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/z github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= @@ -1197,7 +1163,6 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= @@ -1218,7 +1183,6 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+ github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1 h1:dOYG7LS/WK00RWZc8XGgcUTlTxpp3mKhdR2Q9z9HbXM= github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1/go.mod h1:mpRZBD8SJ55OIICQ3iWH0Yz3cjzA61JdqMLoWXeB2+8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -1310,7 +1274,6 @@ github.com/pressly/goose/v3 v3.21.1/go.mod h1:sqthmzV8PitchEkjecFJII//l43dLOCzfW github.com/prometheus/alertmanager v0.27.0 h1:V6nTa2J5V4s8TG4C4HtrBP/WNSebCCTYGGv4qecA/+I= github.com/prometheus/alertmanager v0.27.0/go.mod h1:8Ia/R3urPmbzJ8OsdvmZvIprDwvwmYCmUbwBL+jlPOE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -1323,8 +1286,6 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -1337,7 +1298,6 @@ github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57J github.com/prometheus/exporter-toolkit v0.11.0 h1:yNTsuZ0aNCNFQ3aFTD2uhPOvr4iD7fdBvKPAEGkNf+g= github.com/prometheus/exporter-toolkit v0.11.0/go.mod h1:BVnENhnNecpwoTLiABx7mrPB/OLRIgN74qlQbV+FK1Q= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= @@ -1346,7 +1306,6 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/prometheus v0.54.1 h1:vKuwQNjnYN2/mDoWfHXDhAsz/68q/dQDb+YbcEqU7MQ= github.com/prometheus/prometheus v0.54.1/go.mod h1:xlLByHhk2g3ycakQGrMaU8K7OySZx98BzeCR99991NY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= @@ -1358,7 +1317,6 @@ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -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.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= @@ -1439,6 +1397,8 @@ github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgB github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000/go.mod h1:ncjd6mPZSRlelEqH/2KeLE1pU3UlqzBSn8RYkEoECzY= +github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b h1:UBXi9Yj8YSMHDDaxQLu273x1fWjyEL9xP58nuJsqZfg= +github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b/go.mod h1:Bmwq4lNb5tE47sydN0TKetcLEGbgl+VxHEWp4S0LI60= github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 h1:rRs74zjDJ7do5aYEXSU/sOnLnlbYCNqM8BrvEx/0NH8= github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550/go.mod h1:yti7e1+G9hhkYhj+L5sVUULn9Bn3bBL5/AxaNqdJ5YQ= github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e h1:PRoeby6ZlTuTkv2f+7tVU4+zboTfRzI+beECynF4JQ0= @@ -1479,7 +1439,6 @@ github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= @@ -1498,7 +1457,6 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= @@ -1508,15 +1466,13 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= 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/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 h1:ZqpS7rAhhKD7S7DnrpEdrnW1/gZcv82ytpMviovkli4= -github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 h1:RN5mrigyirb8anBEtdjtHFIufXdacyTi6i4KBfeNXeo= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -1536,8 +1492,9 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= @@ -1547,9 +1504,6 @@ github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDd 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/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= -github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 h1:3SNcvBmEPE1YlB1JpVZouslJpI3GBNoiqW7+wb0Rz7w= -github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= @@ -1558,12 +1512,10 @@ github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a h1:YuO+afVc3eqrj github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a/go.mod h1:/sfW47zCZp9FrtGcWyo1VjbgDaodxX9ovZvgLb/MxaA= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tidwall/gjson v1.9.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= @@ -1571,7 +1523,6 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= @@ -1598,10 +1549,8 @@ github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fastjson v1.4.1 h1:hrltpHpIpkaxll8QltMU8c3QZ5+qIiCL8yKqPFJI/yE= github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/vektah/gqlparser/v2 v2.5.11 h1:JJxLtXIoN7+3x6MBdtIP59TP1RANnY7pXOaDnADQSf8= github.com/vektah/gqlparser/v2 v2.5.11/go.mod h1:1rCcfwB2ekJofmluGWXMSEnPMZgbxzwj6FaZ/4OT8Cc= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= @@ -1612,10 +1561,6 @@ github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/ github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -1623,7 +1568,6 @@ github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGC github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= -github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= 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= @@ -1650,7 +1594,6 @@ go.dedis.ch/kyber/v3 v3.1.0/go.mod h1:kXy7p3STAurkADD+/aZcsznZGKVHEqbtmdIzvPfrs1 go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= @@ -1662,12 +1605,10 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.14/go.mod h1:8uMgAokyG1czCtIdsq+AGyYQMvpIKnSv go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v3 v3.5.14 h1:CWfRs4FDaDoSz81giL7zPpZH2Z35tbOrAJkkjMqOupg= go.etcd.io/etcd/client/v3 v3.5.14/go.mod h1:k3XfdV/VIHy/97rqWjoUzrj9tk7GgJGH9J8L4dNXmAk= -go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= go.mongodb.org/mongo-driver v1.15.0 h1:rJCKC8eEliewXjZGf0ddURtl7tTVy1TK3bfl0gkUSLc= go.mongodb.org/mongo-driver v1.15.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1741,15 +1682,12 @@ go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKY go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/ratelimit v0.3.1 h1:K4qVE+byfv/B3tC+4nYWP7v/6SimcO7HzHekoMNBma0= go.uber.org/ratelimit v0.3.1/go.mod h1:6euWsTB6U/Nb3X++xEUXA8ciPJvr19Q/0h1+oDcJhRk= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -1780,7 +1718,6 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= @@ -1795,8 +1732,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1825,15 +1762,14 @@ 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.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= 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= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1884,8 +1820,8 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1921,7 +1857,6 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1937,7 +1872,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/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= @@ -2013,7 +1947,6 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -2062,7 +1995,6 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2072,7 +2004,6 @@ golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -2108,8 +2039,8 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2127,7 +2058,6 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -2152,7 +2082,6 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -2163,7 +2092,6 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -2213,7 +2141,6 @@ google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmE google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -2266,16 +2193,13 @@ gopkg.in/guregu/null.v4 v4.0.0/go.mod h1:YoQhUrADuG3i9WqesrCmpNRwm1ypAgSHYqoOcTu gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 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.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From b36af9db9d25027fdf2cc22e42f704a24ed66d1a Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 14:57:17 +0000 Subject: [PATCH 12/48] adding initial code for solana chain contracts deploy --- deployment/ccip/changeset/cs_deploy_chain.go | 73 +++++++++++++------ .../ccip/changeset/cs_deploy_chain_test.go | 7 +- .../common/changeset/deploy_link_token.go | 11 +-- deployment/helpers.go | 11 +++ 4 files changed, 72 insertions(+), 30 deletions(-) diff --git a/deployment/ccip/changeset/cs_deploy_chain.go b/deployment/ccip/changeset/cs_deploy_chain.go index 444f204dd0a..3f2fc0dcd97 100644 --- a/deployment/ccip/changeset/cs_deploy_chain.go +++ b/deployment/ccip/changeset/cs_deploy_chain.go @@ -10,6 +10,7 @@ import ( "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/timelock" "golang.org/x/sync/errgroup" + chainsel "github.com/smartcontractkit/chain-selectors" "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/internal" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_home" @@ -67,17 +68,12 @@ func (c DeployChainContractsConfig) Validate() error { return nil } -func deployChainContractsForChains( - e deployment.Environment, - ab deployment.AddressBook, - homeChainSel uint64, - chainsToDeploy []uint64) error { +func validateHomeChainState(e deployment.Environment, homeChainSel uint64, existingState CCIPOnChainState) error { existingState, err := LoadOnchainState(e) if err != nil { e.Logger.Errorw("Failed to load existing onchain state", "err") return err } - capReg := existingState.Chains[homeChainSel].CapabilityRegistry if capReg == nil { e.Logger.Errorw("Failed to get capability registry") @@ -112,24 +108,59 @@ func deployChainContractsForChains( e.Logger.Errorw("Failed to get rmn home", "err", err) return fmt.Errorf("rmn home not found") } + return nil +} + +func deployChainContractsForChains( + e deployment.Environment, + ab deployment.AddressBook, + homeChainSel uint64, + chainsToDeploy []uint64) error { + + existingEVMState, err := LoadOnchainState(e) + if err != nil { + e.Logger.Errorw("Failed to load existing onchain state", "err") + return err + } + + err = validateHomeChainState(e, homeChainSel, existingEVMState) + if err != nil { + return err + } + + err = deployment.ValidateSelectorsInEnvironment(e, chainsToDeploy) + if err != nil { + return err + } + + rmnHome := existingEVMState.Chains[homeChainSel].RMNHome + + // existingSolState, err := LoadOnchainStateSolana(e) + deployGrp := errgroup.Group{} + for _, chainSel := range chainsToDeploy { - chain, ok := e.Chains[chainSel] - if !ok { - return fmt.Errorf("chain %d not found", chainSel) - } - if existingState.Chains[chainSel].LinkToken == nil || existingState.Chains[chainSel].Weth9 == nil { - return fmt.Errorf("fee tokens not found for chain %d", chainSel) + // already validated family + family, _ := chainsel.GetSelectorFamily(chainSel) + switch family { + case chainsel.FamilyEVM: + chain := e.Chains[chainSel] + if existingEVMState.Chains[chainSel].LinkToken == nil || existingEVMState.Chains[chainSel].Weth9 == nil { + return fmt.Errorf("fee tokens not found for chain %d", chainSel) + } + deployGrp.Go( + func() error { + err := deployChainContracts(e, chain, ab, rmnHome) + if err != nil { + e.Logger.Errorw("Failed to deploy chain contracts", "chain", chainSel, "err", err) + return fmt.Errorf("failed to deploy chain contracts for chain %d: %w", chainSel, err) + } + return nil + }) + case chainsel.FamilySolana: + // chain := e.SolChains[chainSel] + fmt.Println("deploying solana chain contracts", chainSel) } - deployGrp.Go( - func() error { - err := deployChainContracts(e, chain, ab, rmnHome) - if err != nil { - e.Logger.Errorw("Failed to deploy chain contracts", "chain", chainSel, "err", err) - return fmt.Errorf("failed to deploy chain contracts for chain %d: %w", chainSel, err) - } - return nil - }) } if err := deployGrp.Wait(); err != nil { e.Logger.Errorw("Failed to deploy chain contracts", "err", err) diff --git a/deployment/ccip/changeset/cs_deploy_chain_test.go b/deployment/ccip/changeset/cs_deploy_chain_test.go index a72b1b1568b..eed8abe6568 100644 --- a/deployment/ccip/changeset/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/cs_deploy_chain_test.go @@ -22,10 +22,13 @@ func TestDeployChainContractsChangeset(t *testing.T) { e := memory.NewMemoryEnvironment(t, lggr, zapcore.InfoLevel, memory.MemoryEnvironmentConfig{ Bootstraps: 1, Chains: 2, + SolChains: 1, Nodes: 4, }) - selectors := e.AllChainSelectors() - homeChainSel := selectors[0] + evmSelectors := e.AllChainSelectors() + homeChainSel := evmSelectors[0] + solChainSelectors := e.AllChainSelectorsSolana() + selectors := append(evmSelectors, solChainSelectors...) nodes, err := deployment.NodeInfo(e.NodeIDs, e.Offchain) require.NoError(t, err) p2pIds := nodes.NonBootstraps().PeerIDs() diff --git a/deployment/common/changeset/deploy_link_token.go b/deployment/common/changeset/deploy_link_token.go index eb6a38f6a58..4478e73dba3 100644 --- a/deployment/common/changeset/deploy_link_token.go +++ b/deployment/common/changeset/deploy_link_token.go @@ -2,7 +2,6 @@ package changeset import ( "context" - "fmt" "github.com/smartcontractkit/chainlink-common/pkg/logger" @@ -24,12 +23,10 @@ const ( // DeployLinkToken deploys a link token contract to the chain identified by the ChainSelector. func DeployLinkToken(e deployment.Environment, chains []uint64) (deployment.ChangesetOutput, error) { - for _, chain := range chains { - _, evmOk := e.Chains[chain] - _, solOk := e.SolChains[chain] - if !evmOk && !solOk { - return deployment.ChangesetOutput{}, fmt.Errorf("chain %d not found in environment", chain) - } + + err := deployment.ValidateSelectorsInEnvironment(e, chains) + if err != nil { + return deployment.ChangesetOutput{}, err } newAddresses := deployment.NewMemoryAddressBook() for _, chain := range chains { diff --git a/deployment/helpers.go b/deployment/helpers.go index 34a2584a544..7d06255a5d2 100644 --- a/deployment/helpers.go +++ b/deployment/helpers.go @@ -206,3 +206,14 @@ func ChainInfo(cs uint64) (chain_selectors.ChainDetails, error) { } return info, nil } + +func ValidateSelectorsInEnvironment(e Environment, chains []uint64) error { + for _, chain := range chains { + _, evmOk := e.Chains[chain] + _, solOk := e.SolChains[chain] + if !evmOk && !solOk { + return fmt.Errorf("chain %d not found in environment", chain) + } + } + return nil +} From 9d87560964bf6bc1f46c72e5c080cfb7510c734c Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 15:05:33 +0000 Subject: [PATCH 13/48] linting --- deployment/environment.go | 2 +- deployment/environment/memory/chain.go | 1 - deployment/solana_chain.go | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment/environment.go b/deployment/environment.go index def161ae521..0f02a4f507a 100644 --- a/deployment/environment.go +++ b/deployment/environment.go @@ -161,7 +161,7 @@ func (e Environment) AllChainSelectorsExcluding(excluding []uint64) []uint64 { } func (e Environment) AllChainSelectorsSolana() []uint64 { - var selectors []uint64 + selectors := make([]uint64, 0, len(e.SolChains)) for sel := range e.SolChains { selectors = append(selectors, sel) } diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index bab4cc17b0e..acc64dc3354 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -72,7 +72,6 @@ func getTestSolanaChainSelectors() []uint64 { } func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { - chains := make(map[uint64]SolanaChain) testSolanaChainSelectors := getTestSolanaChainSelectors() if len(testSolanaChainSelectors) < numChains { diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index adc5050294e..6b3f9968397 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -2,6 +2,7 @@ package deployment import ( "fmt" + "strconv" "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" @@ -35,7 +36,7 @@ func (c SolChain) Name() string { panic(err) } if chainInfo.ChainName == "" { - return fmt.Sprintf("%d", c.Selector) + return strconv.FormatUint(c.Selector, 10) } return chainInfo.ChainName } From 818f7fb888287830d093e6c1b46777c22b847faf Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 15:23:45 +0000 Subject: [PATCH 14/48] adding solana state --- deployment/ccip/changeset/solana_state.go | 52 +++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/deployment/ccip/changeset/solana_state.go b/deployment/ccip/changeset/solana_state.go index 4e5507cfcd3..6c5f774f3ac 100644 --- a/deployment/ccip/changeset/solana_state.go +++ b/deployment/ccip/changeset/solana_state.go @@ -1,6 +1,58 @@ package changeset +import ( + "errors" + "fmt" + + "github.com/gagliardetto/solana-go" + "github.com/smartcontractkit/chainlink/deployment" +) + +var ( + LinkToken deployment.ContractType = "LinkToken" +) + // SolChainState holds a Go binding for all the currently deployed CCIP programs // on a chain. If a binding is nil, it means here is no such contract on the chain. type SolCCIPChainState struct { + LinkToken solana.PublicKey +} + +func LoadOnchainStateSolana(e deployment.Environment) (CCIPOnChainState, error) { + state := CCIPOnChainState{ + SolChains: make(map[uint64]SolCCIPChainState), + } + for chainSelector, chain := range e.SolChains { + addresses, err := e.ExistingAddresses.AddressesForChain(chainSelector) + if err != nil { + // Chain not found in address book, initialize empty + if errors.Is(err, deployment.ErrChainNotFound) { + addresses = make(map[string]deployment.TypeAndVersion) + } else { + return state, err + } + } + chainState, err := LoadChainStateSolana(chain, addresses) + if err != nil { + return state, err + } + state.SolChains[chainSelector] = chainState + + } + return state, nil +} + +// LoadChainStateSolana Loads all state for a SolChain into state +func LoadChainStateSolana(chain deployment.SolChain, addresses map[string]deployment.TypeAndVersion) (SolCCIPChainState, error) { + var state SolCCIPChainState + for address, tvStr := range addresses { + switch tvStr.String() { + case deployment.NewTypeAndVersion(LinkToken, deployment.Version1_0_0).String(): + pub := solana.MustPublicKeyFromBase58(address) + state.LinkToken = pub + default: + return state, fmt.Errorf("unknown contract %s", tvStr) + } + } + return state, nil } From 98e38909a5c907438676f050d1c123c9cf21d285 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 14:57:17 +0000 Subject: [PATCH 15/48] adding initial code for solana chain contracts deploy --- deployment/ccip/changeset/cs_deploy_chain.go | 73 +++++++++++++------ .../ccip/changeset/cs_deploy_chain_test.go | 7 +- .../common/changeset/deploy_link_token.go | 11 +-- deployment/helpers.go | 11 +++ 4 files changed, 72 insertions(+), 30 deletions(-) diff --git a/deployment/ccip/changeset/cs_deploy_chain.go b/deployment/ccip/changeset/cs_deploy_chain.go index 444f204dd0a..3f2fc0dcd97 100644 --- a/deployment/ccip/changeset/cs_deploy_chain.go +++ b/deployment/ccip/changeset/cs_deploy_chain.go @@ -10,6 +10,7 @@ import ( "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/timelock" "golang.org/x/sync/errgroup" + chainsel "github.com/smartcontractkit/chain-selectors" "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/internal" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_home" @@ -67,17 +68,12 @@ func (c DeployChainContractsConfig) Validate() error { return nil } -func deployChainContractsForChains( - e deployment.Environment, - ab deployment.AddressBook, - homeChainSel uint64, - chainsToDeploy []uint64) error { +func validateHomeChainState(e deployment.Environment, homeChainSel uint64, existingState CCIPOnChainState) error { existingState, err := LoadOnchainState(e) if err != nil { e.Logger.Errorw("Failed to load existing onchain state", "err") return err } - capReg := existingState.Chains[homeChainSel].CapabilityRegistry if capReg == nil { e.Logger.Errorw("Failed to get capability registry") @@ -112,24 +108,59 @@ func deployChainContractsForChains( e.Logger.Errorw("Failed to get rmn home", "err", err) return fmt.Errorf("rmn home not found") } + return nil +} + +func deployChainContractsForChains( + e deployment.Environment, + ab deployment.AddressBook, + homeChainSel uint64, + chainsToDeploy []uint64) error { + + existingEVMState, err := LoadOnchainState(e) + if err != nil { + e.Logger.Errorw("Failed to load existing onchain state", "err") + return err + } + + err = validateHomeChainState(e, homeChainSel, existingEVMState) + if err != nil { + return err + } + + err = deployment.ValidateSelectorsInEnvironment(e, chainsToDeploy) + if err != nil { + return err + } + + rmnHome := existingEVMState.Chains[homeChainSel].RMNHome + + // existingSolState, err := LoadOnchainStateSolana(e) + deployGrp := errgroup.Group{} + for _, chainSel := range chainsToDeploy { - chain, ok := e.Chains[chainSel] - if !ok { - return fmt.Errorf("chain %d not found", chainSel) - } - if existingState.Chains[chainSel].LinkToken == nil || existingState.Chains[chainSel].Weth9 == nil { - return fmt.Errorf("fee tokens not found for chain %d", chainSel) + // already validated family + family, _ := chainsel.GetSelectorFamily(chainSel) + switch family { + case chainsel.FamilyEVM: + chain := e.Chains[chainSel] + if existingEVMState.Chains[chainSel].LinkToken == nil || existingEVMState.Chains[chainSel].Weth9 == nil { + return fmt.Errorf("fee tokens not found for chain %d", chainSel) + } + deployGrp.Go( + func() error { + err := deployChainContracts(e, chain, ab, rmnHome) + if err != nil { + e.Logger.Errorw("Failed to deploy chain contracts", "chain", chainSel, "err", err) + return fmt.Errorf("failed to deploy chain contracts for chain %d: %w", chainSel, err) + } + return nil + }) + case chainsel.FamilySolana: + // chain := e.SolChains[chainSel] + fmt.Println("deploying solana chain contracts", chainSel) } - deployGrp.Go( - func() error { - err := deployChainContracts(e, chain, ab, rmnHome) - if err != nil { - e.Logger.Errorw("Failed to deploy chain contracts", "chain", chainSel, "err", err) - return fmt.Errorf("failed to deploy chain contracts for chain %d: %w", chainSel, err) - } - return nil - }) } if err := deployGrp.Wait(); err != nil { e.Logger.Errorw("Failed to deploy chain contracts", "err", err) diff --git a/deployment/ccip/changeset/cs_deploy_chain_test.go b/deployment/ccip/changeset/cs_deploy_chain_test.go index a72b1b1568b..eed8abe6568 100644 --- a/deployment/ccip/changeset/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/cs_deploy_chain_test.go @@ -22,10 +22,13 @@ func TestDeployChainContractsChangeset(t *testing.T) { e := memory.NewMemoryEnvironment(t, lggr, zapcore.InfoLevel, memory.MemoryEnvironmentConfig{ Bootstraps: 1, Chains: 2, + SolChains: 1, Nodes: 4, }) - selectors := e.AllChainSelectors() - homeChainSel := selectors[0] + evmSelectors := e.AllChainSelectors() + homeChainSel := evmSelectors[0] + solChainSelectors := e.AllChainSelectorsSolana() + selectors := append(evmSelectors, solChainSelectors...) nodes, err := deployment.NodeInfo(e.NodeIDs, e.Offchain) require.NoError(t, err) p2pIds := nodes.NonBootstraps().PeerIDs() diff --git a/deployment/common/changeset/deploy_link_token.go b/deployment/common/changeset/deploy_link_token.go index eb6a38f6a58..4478e73dba3 100644 --- a/deployment/common/changeset/deploy_link_token.go +++ b/deployment/common/changeset/deploy_link_token.go @@ -2,7 +2,6 @@ package changeset import ( "context" - "fmt" "github.com/smartcontractkit/chainlink-common/pkg/logger" @@ -24,12 +23,10 @@ const ( // DeployLinkToken deploys a link token contract to the chain identified by the ChainSelector. func DeployLinkToken(e deployment.Environment, chains []uint64) (deployment.ChangesetOutput, error) { - for _, chain := range chains { - _, evmOk := e.Chains[chain] - _, solOk := e.SolChains[chain] - if !evmOk && !solOk { - return deployment.ChangesetOutput{}, fmt.Errorf("chain %d not found in environment", chain) - } + + err := deployment.ValidateSelectorsInEnvironment(e, chains) + if err != nil { + return deployment.ChangesetOutput{}, err } newAddresses := deployment.NewMemoryAddressBook() for _, chain := range chains { diff --git a/deployment/helpers.go b/deployment/helpers.go index 34a2584a544..7d06255a5d2 100644 --- a/deployment/helpers.go +++ b/deployment/helpers.go @@ -206,3 +206,14 @@ func ChainInfo(cs uint64) (chain_selectors.ChainDetails, error) { } return info, nil } + +func ValidateSelectorsInEnvironment(e Environment, chains []uint64) error { + for _, chain := range chains { + _, evmOk := e.Chains[chain] + _, solOk := e.SolChains[chain] + if !evmOk && !solOk { + return fmt.Errorf("chain %d not found in environment", chain) + } + } + return nil +} From 7c7c36edb8ad5576640af3bc4fcbd6cc372dd1f7 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 15:56:36 +0000 Subject: [PATCH 16/48] wip --- deployment/ccip/changeset/cs_deploy_chain.go | 43 ++++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/deployment/ccip/changeset/cs_deploy_chain.go b/deployment/ccip/changeset/cs_deploy_chain.go index 3f2fc0dcd97..663de7bd547 100644 --- a/deployment/ccip/changeset/cs_deploy_chain.go +++ b/deployment/ccip/changeset/cs_deploy_chain.go @@ -135,32 +135,41 @@ func deployChainContractsForChains( rmnHome := existingEVMState.Chains[homeChainSel].RMNHome - // existingSolState, err := LoadOnchainStateSolana(e) + existingSolState, err := LoadOnchainStateSolana(e) + if err != nil { + e.Logger.Errorw("Failed to load existing onchain solanastate", "err") + return err + } deployGrp := errgroup.Group{} for _, chainSel := range chainsToDeploy { // already validated family family, _ := chainsel.GetSelectorFamily(chainSel) + var deployFn func() error switch family { case chainsel.FamilyEVM: chain := e.Chains[chainSel] if existingEVMState.Chains[chainSel].LinkToken == nil || existingEVMState.Chains[chainSel].Weth9 == nil { return fmt.Errorf("fee tokens not found for chain %d", chainSel) } - deployGrp.Go( - func() error { - err := deployChainContracts(e, chain, ab, rmnHome) - if err != nil { - e.Logger.Errorw("Failed to deploy chain contracts", "chain", chainSel, "err", err) - return fmt.Errorf("failed to deploy chain contracts for chain %d: %w", chainSel, err) - } - return nil - }) + deployFn = func() error { return deployChainContractsEVM(e, chain, ab, rmnHome) } + case chainsel.FamilySolana: - // chain := e.SolChains[chainSel] - fmt.Println("deploying solana chain contracts", chainSel) + chain := e.SolChains[chainSel] + if existingSolState.SolChains[chainSel].LinkToken.IsZero() { + return fmt.Errorf("fee tokens not found for chain %d", chainSel) + } + deployFn = func() error { return deployChainContractsSolana(e, chain, ab) } } + deployGrp.Go(func() error { + err := deployFn() + if err != nil { + e.Logger.Errorw("Failed to deploy chain contracts", "chain", chainSel, "err", err) + return fmt.Errorf("failed to deploy chain contracts for chain %d: %w", chainSel, err) + } + return nil + }) } if err := deployGrp.Wait(); err != nil { e.Logger.Errorw("Failed to deploy chain contracts", "err", err) @@ -169,7 +178,7 @@ func deployChainContractsForChains( return nil } -func deployChainContracts( +func deployChainContractsEVM( e deployment.Environment, chain deployment.Chain, ab deployment.AddressBook, @@ -431,3 +440,11 @@ func deployChainContracts( e.Logger.Infow("Added nonce manager authorized callers", "chain", chain.String(), "callers", []common.Address{offRampContract.Address(), onRampContract.Address()}) return nil } + +func deployChainContractsSolana( + e deployment.Environment, + chain deployment.SolChain, + ab deployment.AddressBook, +) error { + return nil +} From 2f980155eaee2864327f0ebd9dc1b6006eb0d9ee Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 16:27:28 +0000 Subject: [PATCH 17/48] chain sel update --- deployment/go.mod | 2 +- deployment/go.sum | 4 ++-- integration-tests/go.mod | 2 +- integration-tests/go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/deployment/go.mod b/deployment/go.mod index cbc9bafdd6c..94fff5ffaa8 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -29,7 +29,7 @@ require ( github.com/sethvargo/go-retry v0.2.4 github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix // github.com/smartcontractkit/chain-selectors v1.0.34 - github.com/smartcontractkit/chain-selectors v1.0.34 + github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 diff --git a/deployment/go.sum b/deployment/go.sum index 264f68e9505..613c177c191 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1378,8 +1378,8 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.34 h1:MJ17OGu8+jjl426pcKrJkCf3fePb3eCreuAnUA3RBj4= -github.com/smartcontractkit/chain-selectors v1.0.34/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 h1:FMEMoU0fs4+Axf76ythn+I0z5TGlGulAL/pIjIpK2Wk= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 05d95822acf..5253010abed 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -44,7 +44,7 @@ require ( github.com/segmentio/ksuid v1.0.4 github.com/shopspring/decimal v1.4.0 github.com/slack-go/slack v0.15.0 - github.com/smartcontractkit/chain-selectors v1.0.34 + github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 diff --git a/integration-tests/go.sum b/integration-tests/go.sum index df13d3d8c81..07aae307fbe 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1400,8 +1400,8 @@ github.com/slack-go/slack v0.15.0 h1:LE2lj2y9vqqiOf+qIIy0GvEoxgF1N5yLGZffmEZykt0 github.com/slack-go/slack v0.15.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.34 h1:MJ17OGu8+jjl426pcKrJkCf3fePb3eCreuAnUA3RBj4= -github.com/smartcontractkit/chain-selectors v1.0.34/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 h1:FMEMoU0fs4+Axf76ythn+I0z5TGlGulAL/pIjIpK2Wk= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= From cd7365727faf9c5ab9974e6f963db28aa7e455d1 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 16:30:50 +0000 Subject: [PATCH 18/48] update core/scripts go files --- core/scripts/go.mod | 2 +- core/scripts/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/scripts/go.mod b/core/scripts/go.mod index d4bfdedb1a0..5e693e91015 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -299,7 +299,7 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/shirou/gopsutil/v3 v3.24.3 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix // indirect - github.com/smartcontractkit/chain-selectors v1.0.34 // indirect + github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 // indirect github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b // indirect github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 18716c36348..21057c8aac5 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1108,8 +1108,8 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.34 h1:MJ17OGu8+jjl426pcKrJkCf3fePb3eCreuAnUA3RBj4= -github.com/smartcontractkit/chain-selectors v1.0.34/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 h1:FMEMoU0fs4+Axf76ythn+I0z5TGlGulAL/pIjIpK2Wk= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= From a4ec5850e9939c4907f0813bf40abe366db0ea35 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Tue, 7 Jan 2025 16:33:01 +0000 Subject: [PATCH 19/48] again --- integration-tests/load/go.mod | 2 +- integration-tests/load/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index b0d6bafc902..5ba86e0776c 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -403,7 +403,7 @@ require ( github.com/shoenig/test v0.6.6 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/smartcontractkit/chain-selectors v1.0.34 // indirect + github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 // indirect github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 // indirect github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index ba65f69e122..5178196350b 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1391,8 +1391,8 @@ github.com/slack-go/slack v0.15.0 h1:LE2lj2y9vqqiOf+qIIy0GvEoxgF1N5yLGZffmEZykt0 github.com/slack-go/slack v0.15.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.34 h1:MJ17OGu8+jjl426pcKrJkCf3fePb3eCreuAnUA3RBj4= -github.com/smartcontractkit/chain-selectors v1.0.34/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 h1:FMEMoU0fs4+Axf76ythn+I0z5TGlGulAL/pIjIpK2Wk= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= From c0f35b91810cb8d3b2004bf7771b87efb3e61f62 Mon Sep 17 00:00:00 2001 From: Terry Tata Date: Tue, 7 Jan 2025 13:23:14 -0500 Subject: [PATCH 20/48] add changeset --- .changeset/cuddly-turtles-arrive.md | 5 +++++ deployment/environment/memory/chain.go | 1 + deployment/environment/memory/environment.go | 1 + deployment/solana_chain.go | 1 + 4 files changed, 8 insertions(+) create mode 100644 .changeset/cuddly-turtles-arrive.md diff --git a/.changeset/cuddly-turtles-arrive.md b/.changeset/cuddly-turtles-arrive.md new file mode 100644 index 00000000000..81ceed3e8ff --- /dev/null +++ b/.changeset/cuddly-turtles-arrive.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#internal adding solana devnet to ccip deployment diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index acc64dc3354..28f951e2368 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -17,6 +17,7 @@ import ( "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" + solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" ) diff --git a/deployment/environment/memory/environment.go b/deployment/environment/memory/environment.go index 6ddbeb58b55..3c5fdc6e779 100644 --- a/deployment/environment/memory/environment.go +++ b/deployment/environment/memory/environment.go @@ -21,6 +21,7 @@ import ( "github.com/smartcontractkit/chainlink/deployment" solRpc "github.com/gagliardetto/solana-go/rpc" + solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" "github.com/smartcontractkit/chainlink-common/pkg/logger" ) diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index 6b3f9968397..ba02e74f892 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -6,6 +6,7 @@ import ( "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" + solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" ) From 720dccb656bace5fc577bde1f7214f2d4f5da7a8 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 11:28:41 +0000 Subject: [PATCH 21/48] go imports --- deployment/environment/memory/chain.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index acc64dc3354..0b3d587f964 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -9,15 +9,13 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient/simulated" + "github.com/gagliardetto/solana-go" + solRpc "github.com/gagliardetto/solana-go/rpc" + solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" "github.com/stretchr/testify/require" chainsel "github.com/smartcontractkit/chain-selectors" - "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" - - "github.com/gagliardetto/solana-go" - solRpc "github.com/gagliardetto/solana-go/rpc" - solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" ) From c08d09268c67363da35e79fd27cd45bb9d053ca6 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 12:06:29 +0000 Subject: [PATCH 22/48] go mod --- deployment/go.mod | 2 +- deployment/go.sum | 2 ++ integration-tests/go.mod | 2 +- integration-tests/go.sum | 4 ++-- integration-tests/load/go.mod | 2 +- integration-tests/load/go.sum | 4 ++-- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/deployment/go.mod b/deployment/go.mod index cbc9bafdd6c..4dee1f8657f 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -29,7 +29,7 @@ require ( github.com/sethvargo/go-retry v0.2.4 github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix // github.com/smartcontractkit/chain-selectors v1.0.34 - github.com/smartcontractkit/chain-selectors v1.0.34 + github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 diff --git a/deployment/go.sum b/deployment/go.sum index 264f68e9505..87497e8e4e2 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1380,6 +1380,8 @@ github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0 github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= github.com/smartcontractkit/chain-selectors v1.0.34 h1:MJ17OGu8+jjl426pcKrJkCf3fePb3eCreuAnUA3RBj4= github.com/smartcontractkit/chain-selectors v1.0.34/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 h1:SYYsgMFQLgi+4DiOWNgnIF58b4uGAxXUwWnlR50DZMQ= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 05d95822acf..a9de85894e4 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -44,7 +44,7 @@ require ( github.com/segmentio/ksuid v1.0.4 github.com/shopspring/decimal v1.4.0 github.com/slack-go/slack v0.15.0 - github.com/smartcontractkit/chain-selectors v1.0.34 + github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 diff --git a/integration-tests/go.sum b/integration-tests/go.sum index df13d3d8c81..62108bf3c18 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1400,8 +1400,8 @@ github.com/slack-go/slack v0.15.0 h1:LE2lj2y9vqqiOf+qIIy0GvEoxgF1N5yLGZffmEZykt0 github.com/slack-go/slack v0.15.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.34 h1:MJ17OGu8+jjl426pcKrJkCf3fePb3eCreuAnUA3RBj4= -github.com/smartcontractkit/chain-selectors v1.0.34/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 h1:SYYsgMFQLgi+4DiOWNgnIF58b4uGAxXUwWnlR50DZMQ= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index b0d6bafc902..42cd6f090e8 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -403,7 +403,7 @@ require ( github.com/shoenig/test v0.6.6 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/smartcontractkit/chain-selectors v1.0.34 // indirect + github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 // indirect github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 // indirect github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index ba65f69e122..a90525816cf 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1391,8 +1391,8 @@ github.com/slack-go/slack v0.15.0 h1:LE2lj2y9vqqiOf+qIIy0GvEoxgF1N5yLGZffmEZykt0 github.com/slack-go/slack v0.15.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.34 h1:MJ17OGu8+jjl426pcKrJkCf3fePb3eCreuAnUA3RBj4= -github.com/smartcontractkit/chain-selectors v1.0.34/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 h1:SYYsgMFQLgi+4DiOWNgnIF58b4uGAxXUwWnlR50DZMQ= +github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= From d0882cd40e2b8ba5d8388fa3ecf1538d786eeb3d Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 12:15:39 +0000 Subject: [PATCH 23/48] go mod --- deployment/go.mod | 2 +- deployment/go.sum | 2 ++ integration-tests/go.mod | 2 +- integration-tests/go.sum | 4 ++-- integration-tests/load/go.mod | 2 +- integration-tests/load/go.sum | 4 ++-- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/deployment/go.mod b/deployment/go.mod index 4dee1f8657f..7cc2155fcb4 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -29,7 +29,7 @@ require ( github.com/sethvargo/go-retry v0.2.4 github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix // github.com/smartcontractkit/chain-selectors v1.0.34 - github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 + github.com/smartcontractkit/chain-selectors v1.0.36 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 diff --git a/deployment/go.sum b/deployment/go.sum index 87497e8e4e2..e66c8de9f15 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1382,6 +1382,8 @@ github.com/smartcontractkit/chain-selectors v1.0.34 h1:MJ17OGu8+jjl426pcKrJkCf3f github.com/smartcontractkit/chain-selectors v1.0.34/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 h1:SYYsgMFQLgi+4DiOWNgnIF58b4uGAxXUwWnlR50DZMQ= github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36 h1:KSpO8I+JOiuyN4FuXsV471sPorGF//PAqwq2Cm4gRK0= +github.com/smartcontractkit/chain-selectors v1.0.36/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index a9de85894e4..43a15f2970a 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -44,7 +44,7 @@ require ( github.com/segmentio/ksuid v1.0.4 github.com/shopspring/decimal v1.4.0 github.com/slack-go/slack v0.15.0 - github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 + github.com/smartcontractkit/chain-selectors v1.0.36 github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 62108bf3c18..8800907ab50 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1400,8 +1400,8 @@ github.com/slack-go/slack v0.15.0 h1:LE2lj2y9vqqiOf+qIIy0GvEoxgF1N5yLGZffmEZykt0 github.com/slack-go/slack v0.15.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 h1:SYYsgMFQLgi+4DiOWNgnIF58b4uGAxXUwWnlR50DZMQ= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36 h1:KSpO8I+JOiuyN4FuXsV471sPorGF//PAqwq2Cm4gRK0= +github.com/smartcontractkit/chain-selectors v1.0.36/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 42cd6f090e8..383030c9779 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -403,7 +403,7 @@ require ( github.com/shoenig/test v0.6.6 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 // indirect + github.com/smartcontractkit/chain-selectors v1.0.36 // indirect github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 // indirect github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index a90525816cf..c644fcf1b8c 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1391,8 +1391,8 @@ github.com/slack-go/slack v0.15.0 h1:LE2lj2y9vqqiOf+qIIy0GvEoxgF1N5yLGZffmEZykt0 github.com/slack-go/slack v0.15.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2 h1:SYYsgMFQLgi+4DiOWNgnIF58b4uGAxXUwWnlR50DZMQ= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250108115329-5831bb770df2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36 h1:KSpO8I+JOiuyN4FuXsV471sPorGF//PAqwq2Cm4gRK0= +github.com/smartcontractkit/chain-selectors v1.0.36/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= From 1e55e6f728285b8b47e6af1cc2a7dc34fb6feb1d Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 12:21:20 +0000 Subject: [PATCH 24/48] go mod tidy --- core/scripts/go.mod | 2 +- core/scripts/go.sum | 4 ++-- deployment/environment/memory/chain.go | 4 +++- deployment/go.mod | 3 +-- deployment/go.sum | 4 ++-- integration-tests/go.mod | 2 +- integration-tests/go.sum | 4 ++-- integration-tests/load/go.mod | 2 +- integration-tests/load/go.sum | 4 ++-- 9 files changed, 15 insertions(+), 14 deletions(-) diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 5e693e91015..2f584165cdd 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -299,7 +299,7 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/shirou/gopsutil/v3 v3.24.3 // indirect github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix // indirect - github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 // indirect + github.com/smartcontractkit/chain-selectors v1.0.36 // indirect github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b // indirect github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 21057c8aac5..7e18abc8a82 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1108,8 +1108,8 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 h1:FMEMoU0fs4+Axf76ythn+I0z5TGlGulAL/pIjIpK2Wk= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36 h1:KSpO8I+JOiuyN4FuXsV471sPorGF//PAqwq2Cm4gRK0= +github.com/smartcontractkit/chain-selectors v1.0.36/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index cb84905a57a..cc22b40d844 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -12,10 +12,12 @@ import ( "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" - solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" "github.com/stretchr/testify/require" + solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" + chainsel "github.com/smartcontractkit/chain-selectors" + "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" ) diff --git a/deployment/go.mod b/deployment/go.mod index 94fff5ffaa8..2bbb37a9afb 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -28,8 +28,7 @@ require ( github.com/rs/zerolog v1.33.0 github.com/sethvargo/go-retry v0.2.4 github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix - // github.com/smartcontractkit/chain-selectors v1.0.34 - github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 + github.com/smartcontractkit/chain-selectors v1.0.36 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 diff --git a/deployment/go.sum b/deployment/go.sum index 613c177c191..a264bda31a1 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1378,8 +1378,8 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 h1:FMEMoU0fs4+Axf76ythn+I0z5TGlGulAL/pIjIpK2Wk= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36 h1:KSpO8I+JOiuyN4FuXsV471sPorGF//PAqwq2Cm4gRK0= +github.com/smartcontractkit/chain-selectors v1.0.36/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 5253010abed..43a15f2970a 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -44,7 +44,7 @@ require ( github.com/segmentio/ksuid v1.0.4 github.com/shopspring/decimal v1.4.0 github.com/slack-go/slack v0.15.0 - github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 + github.com/smartcontractkit/chain-selectors v1.0.36 github.com/smartcontractkit/chainlink-automation v0.8.1 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 07aae307fbe..8800907ab50 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1400,8 +1400,8 @@ github.com/slack-go/slack v0.15.0 h1:LE2lj2y9vqqiOf+qIIy0GvEoxgF1N5yLGZffmEZykt0 github.com/slack-go/slack v0.15.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 h1:FMEMoU0fs4+Axf76ythn+I0z5TGlGulAL/pIjIpK2Wk= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36 h1:KSpO8I+JOiuyN4FuXsV471sPorGF//PAqwq2Cm4gRK0= +github.com/smartcontractkit/chain-selectors v1.0.36/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 5ba86e0776c..383030c9779 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -403,7 +403,7 @@ require ( github.com/shoenig/test v0.6.6 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 // indirect + github.com/smartcontractkit/chain-selectors v1.0.36 // indirect github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 // indirect github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241202195413-82468150ac1e // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 5178196350b..c644fcf1b8c 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1391,8 +1391,8 @@ github.com/slack-go/slack v0.15.0 h1:LE2lj2y9vqqiOf+qIIy0GvEoxgF1N5yLGZffmEZykt0 github.com/slack-go/slack v0.15.0/go.mod h1:hlGi5oXA+Gt+yWTPP0plCdRKmjsDxecdHxYQdlMQKOw= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix h1:DPJD++yKLSx0EfT+U14P8vLVxjXFmoIETiCO9lVwQo8= github.com/smartcontractkit/ccip-owner-contracts v0.0.0-salt-fix/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2 h1:FMEMoU0fs4+Axf76ythn+I0z5TGlGulAL/pIjIpK2Wk= -github.com/smartcontractkit/chain-selectors v1.0.36-0.20250106150933-b3e3d1010fd2/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= +github.com/smartcontractkit/chain-selectors v1.0.36 h1:KSpO8I+JOiuyN4FuXsV471sPorGF//PAqwq2Cm4gRK0= +github.com/smartcontractkit/chain-selectors v1.0.36/go.mod h1:xsKM0aN3YGcQKTPRPDDtPx2l4mlTN1Djmg0VVXV40b8= github.com/smartcontractkit/chainlink-automation v0.8.1 h1:sTc9LKpBvcKPc1JDYAmgBc2xpDKBco/Q4h4ydl6+UUU= github.com/smartcontractkit/chainlink-automation v0.8.1/go.mod h1:Iij36PvWZ6blrdC5A/nrQUBuf3MH3JvsBB9sSyc9W08= github.com/smartcontractkit/chainlink-ccip v0.0.0-20241218114855-f74219171000 h1:6Zzr/R1j6P7bbvcUlt5WUIbItvrrGdGzIsiAzQezcwo= From a3974dcb231af178bb80e8e9b82b24c8208c129e Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 12:40:30 +0000 Subject: [PATCH 25/48] todo --- deployment/ccip/changeset/state_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deployment/ccip/changeset/state_test.go b/deployment/ccip/changeset/state_test.go index 3587332fff2..75695f83282 100644 --- a/deployment/ccip/changeset/state_test.go +++ b/deployment/ccip/changeset/state_test.go @@ -13,3 +13,5 @@ func TestSmokeState(t *testing.T) { _, err = state.View(tenv.Env.AllChainSelectors()) require.NoError(t, err) } + +// TODO: add solana state test From 90b421eb9d8a9a5a639faca76d6164f77a392902 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 17:35:11 +0000 Subject: [PATCH 26/48] deploy stuff --- deployment/ccip/changeset/cs_deploy_chain.go | 92 +++++++++++++++++++ deployment/ccip/changeset/solana_state.go | 94 +++++++++++++++++++- deployment/environment/memory/chain.go | 50 ++++++++++- deployment/environment/memory/environment.go | 2 + deployment/solana_chain.go | 58 ++++++++++++ 5 files changed, 293 insertions(+), 3 deletions(-) diff --git a/deployment/ccip/changeset/cs_deploy_chain.go b/deployment/ccip/changeset/cs_deploy_chain.go index da51c3d5a95..1a0a6ad4533 100644 --- a/deployment/ccip/changeset/cs_deploy_chain.go +++ b/deployment/ccip/changeset/cs_deploy_chain.go @@ -7,9 +7,13 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/gagliardetto/solana-go" "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/timelock" + "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/ccip_router" "golang.org/x/sync/errgroup" + solBinary "github.com/gagliardetto/binary" + solRpc "github.com/gagliardetto/solana-go/rpc" chainsel "github.com/smartcontractkit/chain-selectors" "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/internal" @@ -25,6 +29,10 @@ import ( var _ deployment.ChangeSet[DeployChainContractsConfig] = DeployChainContracts +var ( + EnableExecutionAfter = int64(1800) // 30min +) + // DeployChainContracts deploys all new CCIP v1.6 or later contracts for the given chains. // It returns the new addresses for the contracts. // DeployChainContracts is idempotent. If there is an error, it will return the successfully deployed addresses and the error so that the caller can call the @@ -441,10 +449,94 @@ func deployChainContractsEVM( return nil } +func solRouterProgramData(e deployment.Environment, chain deployment.SolChain, CcipRouterProgram solana.PublicKey) (struct { + DataType uint32 + Address solana.PublicKey +}, error) { + var programData struct { + DataType uint32 + Address solana.PublicKey + } + data, err := chain.Client.GetAccountInfoWithOpts(e.GetContext(), CcipRouterProgram, &solRpc.GetAccountInfoOpts{ + Commitment: solRpc.CommitmentConfirmed, + }) + if err != nil { + return programData, fmt.Errorf("failed to deploy program: %v", err) + } + + err = solBinary.UnmarshalBorsh(&programData, data.Bytes()) + if err != nil { + return programData, fmt.Errorf("failed to unmarshal program data: %v", err) + } + return programData, nil +} + func deployChainContractsSolana( e deployment.Environment, chain deployment.SolChain, ab deployment.AddressBook, ) error { + state, err := LoadOnchainStateSolana(e) + if err != nil { + e.Logger.Errorw("Failed to load existing onchain state", "err") + return err + } + chainState, chainExists := state.SolChains[chain.Selector] + if !chainExists { + return fmt.Errorf("chain %s not found in existing state, deploy the prerequisites first", chain.String()) + } + linkTokenContract := chainState.LinkToken + e.Logger.Infow("link token", "addr", linkTokenContract.String()) + + if chainState.SolCcipRouter.IsZero() { + // deploy and initialize router + programID, err := chain.DeployProgram(e.Logger, "ccip_router") + if err != nil { + return fmt.Errorf("failed to deploy program: %v", err) + } + + tv := deployment.NewTypeAndVersion("SolCcipRouter", deployment.Version1_0_0) + e.Logger.Infow("Deployed contract", "Contract", tv.String(), "addr", programID, "chain", chain.String()) + + CcipRouterProgram := solana.MustPublicKeyFromBase58(programID) + programData, err := solRouterProgramData(e, chain, CcipRouterProgram) + if err != nil { + return fmt.Errorf("failed to get solana router program data: %v", err) + } + + ccip_router.SetProgramID(CcipRouterProgram) + + defaultGasLimit := solBinary.Uint128{Lo: 3000, Hi: 0, Endianness: nil} + + instruction, err := ccip_router.NewInitializeInstruction( + chain.Selector, // chain selector + defaultGasLimit, // default gas limit + true, // allow out of order execution + EnableExecutionAfter, // period to wait before allowing manual execution + solana.PublicKey{}, + GetRouterConfigPDA(CcipRouterProgram), + GetRouterStatePDA(CcipRouterProgram), + chain.DeployerKey.PublicKey(), + solana.SystemProgramID, + CcipRouterProgram, + programData.Address, + GetExternalExecutionConfigPDA(CcipRouterProgram), + GetExternalTokenPoolsSignerPDA(CcipRouterProgram), + ).ValidateAndBuild() + + if err != nil { + return fmt.Errorf("failed to build instruction: %v", err) + } + err = chain.Confirm([]solana.Instruction{instruction}) + + if err != nil { + return fmt.Errorf("failed to confirm instructions: %v", err) + } + + err = ab.Save(chain.Selector, programID, tv) + if err != nil { + return fmt.Errorf("failed to save address: %v", err) + } + } return nil } diff --git a/deployment/ccip/changeset/solana_state.go b/deployment/ccip/changeset/solana_state.go index 6c5f774f3ac..5781dd5ba7c 100644 --- a/deployment/ccip/changeset/solana_state.go +++ b/deployment/ccip/changeset/solana_state.go @@ -1,6 +1,7 @@ package changeset import ( + "encoding/binary" "errors" "fmt" @@ -9,13 +10,15 @@ import ( ) var ( - LinkToken deployment.ContractType = "LinkToken" + LinkToken deployment.ContractType = "LinkToken" + SolCcipRouter deployment.ContractType = "SolCcipRouter" ) // SolChainState holds a Go binding for all the currently deployed CCIP programs // on a chain. If a binding is nil, it means here is no such contract on the chain. type SolCCIPChainState struct { - LinkToken solana.PublicKey + LinkToken solana.PublicKey + SolCcipRouter solana.PublicKey } func LoadOnchainStateSolana(e deployment.Environment) (CCIPOnChainState, error) { @@ -50,9 +53,96 @@ func LoadChainStateSolana(chain deployment.SolChain, addresses map[string]deploy case deployment.NewTypeAndVersion(LinkToken, deployment.Version1_0_0).String(): pub := solana.MustPublicKeyFromBase58(address) state.LinkToken = pub + case deployment.NewTypeAndVersion(SolCcipRouter, deployment.Version1_0_0).String(): + pub := solana.MustPublicKeyFromBase58(address) + state.SolCcipRouter = pub default: return state, fmt.Errorf("unknown contract %s", tvStr) } } return state, nil } + +// GetRouterConfigPDA returns the PDA for the "config" account. +func GetRouterConfigPDA(CcipRouterProgram solana.PublicKey) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{[]byte("config")}, + CcipRouterProgram, + ) + return pda +} + +// GetRouterStatePDA returns the PDA for the "state" account. +func GetRouterStatePDA(CcipRouterProgram solana.PublicKey) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{[]byte("state")}, + CcipRouterProgram, + ) + return pda +} + +// GetExternalExecutionConfigPDA returns the PDA for the "external_execution_config" account. +func GetExternalExecutionConfigPDA(CcipRouterProgram solana.PublicKey) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{[]byte("external_execution_config")}, + CcipRouterProgram, + ) + return pda +} + +// GetExternalTokenPoolsSignerPDA returns the PDA for the "external_token_pools_signer" account. +func GetExternalTokenPoolsSignerPDA(CcipRouterProgram solana.PublicKey) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{[]byte("external_token_pools_signer")}, + CcipRouterProgram, + ) + return pda +} + +// GetSolanaSourceChainStatePDA returns the PDA for the "source_chain_state" account for Solana. +func GetSolanaSourceChainStatePDA(CcipRouterProgram solana.PublicKey, SolanaChainSelector uint64) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{ + []byte("source_chain_state"), + binary.LittleEndian.AppendUint64([]byte{}, SolanaChainSelector), + }, + CcipRouterProgram, + ) + return pda +} + +// GetSolanaDestChainStatePDA returns the PDA for the "dest_chain_state" account for Solana. +func GetSolanaDestChainStatePDA(CcipRouterProgram solana.PublicKey, SolanaChainSelector uint64) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{ + []byte("dest_chain_state"), + binary.LittleEndian.AppendUint64([]byte{}, SolanaChainSelector), + }, + CcipRouterProgram, + ) + return pda +} + +// GetEvmSourceChainStatePDA returns the PDA for the "source_chain_state" account for EVM. +func GetEvmSourceChainStatePDA(CcipRouterProgram solana.PublicKey, EvmChainSelector uint64) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{ + []byte("source_chain_state"), + binary.LittleEndian.AppendUint64([]byte{}, EvmChainSelector), + }, + CcipRouterProgram, + ) + return pda +} + +// GetEvmDestChainStatePDA returns the PDA for the "dest_chain_state" account for EVM. +func GetEvmDestChainStatePDA(CcipRouterProgram solana.PublicKey, EvmChainSelector uint64) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{ + []byte("dest_chain_state"), + binary.LittleEndian.AppendUint64([]byte{}, EvmChainSelector), + }, + CcipRouterProgram, + ) + return pda +} diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 193def7ba08..1d44c185b1e 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -1,7 +1,10 @@ package memory import ( + "encoding/json" + "fmt" "math/big" + "os" "testing" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -31,6 +34,8 @@ type EVMChain struct { type SolanaChain struct { Client *solRpc.Client DeployerKey *solana.PrivateKey + URL string + KeypairPath string } func fundAddress(t *testing.T, from *bind.TransactOpts, to common.Address, amount *big.Int, backend *simulated.Backend) { @@ -72,6 +77,40 @@ func getTestSolanaChainSelectors() []uint64 { return result } +func generateAndStoreKeypair() (solana.PrivateKey, string, error) { + // Generate a random private key + privateKey, err := solana.NewRandomPrivateKey() + if err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to generate private key: %w", err) + } + + // Convert the private key to a byte slice + keypairBytes := privateKey + + // solana.NewWallet(). + + // Serialize the keypair as JSON + jsonData, err := json.Marshal(keypairBytes) + if err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to serialize keypair: %w", err) + } + + // Create a temporary file + tempFile, err := os.CreateTemp("", "solana-keypair-*.json") + if err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to create temporary file: %w", err) + } + defer tempFile.Close() + + // Write the keypair data to the file + if _, err := tempFile.Write(jsonData); err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to write keypair to temporary file: %w", err) + } + + // Return the path to the temporary file + return privateKey, tempFile.Name(), nil +} + func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { testSolanaChainSelectors := getTestSolanaChainSelectors() if len(testSolanaChainSelectors) < numChains { @@ -81,12 +120,21 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { for i := 0; i < numChains; i++ { chainID := testSolanaChainSelectors[i] url, _ := solTestUtil.SetupLocalSolNodeWithFlags(t) - admin, gerr := solana.NewRandomPrivateKey() + admin, keypairPath, gerr := generateAndStoreKeypair() + t.Log("keypairPath", keypairPath) + t.Log("admin", admin.PublicKey()) + t.Log("admin private key", admin) + key, err := solana.PrivateKeyFromSolanaKeygenFile(keypairPath) + require.NoError(t, err) + t.Log("keypair key", key) + require.NoError(t, gerr) solTestUtil.FundTestAccounts(t, []solana.PublicKey{admin.PublicKey()}, url) require.NoError(t, gerr) chains[chainID] = SolanaChain{ Client: solRpc.New(url), DeployerKey: &admin, + URL: url, + KeypairPath: keypairPath, } } return chains diff --git a/deployment/environment/memory/environment.go b/deployment/environment/memory/environment.go index 3c5fdc6e779..e0ed8525285 100644 --- a/deployment/environment/memory/environment.go +++ b/deployment/environment/memory/environment.go @@ -129,6 +129,8 @@ func generateMemoryChainSol(t *testing.T, inputs map[uint64]SolanaChain) map[uin Selector: cid, Client: chain.Client, DeployerKey: chain.DeployerKey, + URL: chain.URL, + KeypairPath: chain.KeypairPath, Confirm: func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error { _, err := solCommomUtil.SendAndConfirm( context.Background(), chain.Client, instructions, *chain.DeployerKey, solRpc.CommitmentConfirmed, opts..., diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index ba02e74f892..e7315ea45ce 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -1,13 +1,22 @@ package deployment import ( + "bytes" "fmt" + "os/exec" "strconv" + "time" "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" + "github.com/smartcontractkit/chainlink-common/pkg/logger" +) + +var ( + deployBinPath = "/Users/yashvardhan/chainlink-ccip/chains/solana/contracts/target/deploy" + // keypairPath = "/Users/yashvardhan/.config/solana/id.json" //wallet ) // SolChain represents a Solana chain. @@ -19,6 +28,8 @@ type SolChain struct { // TODO: raw private key for now, need to replace with a more secure way DeployerKey *solana.PrivateKey Confirm func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error + URL string + KeypairPath string } func (c SolChain) String() string { @@ -41,3 +52,50 @@ func (c SolChain) Name() string { } return chainInfo.ChainName } + +func (c SolChain) DeployProgram(logger logger.Logger, programName string) (string, error) { + programFile := fmt.Sprintf("%s/%s.so", deployBinPath, programName) + programKeyPair := fmt.Sprintf("%s/%s-keypair.json", deployBinPath, programName) + + logger.Infow("c.KeypairPath", "path", c.KeypairPath) + logger.Infow("private key", "key", c.DeployerKey) + key, err := solana.PrivateKeyFromSolanaKeygenFile(c.KeypairPath) + if err != nil { + return "", fmt.Errorf("failed to load private key: %w", err) + } + logger.Infow("program key pair", "key", key) + cmd := exec.Command("solana", "program", "deploy", programFile, "--keypair", c.KeypairPath, "--program-id", programKeyPair, "--url", c.URL) + + // Capture the command output + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + // Run the command + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("error deploying program: %s: %s", err.Error(), stderr.String()) + } + + // Parse and return the program ID + output := stdout.String() + + time.Sleep(5 * time.Second) // obviously need to do this better + return parseProgramID(output) +} + +// parseProgramID parses the program ID from the deploy output. +func parseProgramID(output string) (string, error) { + // Look for the program ID in the CLI output + // Example output: "Program Id: " + const prefix = "Program Id: " + startIdx := bytes.Index([]byte(output), []byte(prefix)) + if startIdx == -1 { + return "", fmt.Errorf("failed to find program ID in output") + } + startIdx += len(prefix) + endIdx := bytes.Index([]byte(output[startIdx:]), []byte("\n")) + if endIdx == -1 { + endIdx = len(output) + } + return output[startIdx : startIdx+endIdx], nil +} From a4b2bc67698342e5a9d9d924aa2803ef7d38f64b Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 20:56:24 +0000 Subject: [PATCH 27/48] Adding solana router deploy --- .../ccip/changeset/cs_deploy_chain_test.go | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/deployment/ccip/changeset/cs_deploy_chain_test.go b/deployment/ccip/changeset/cs_deploy_chain_test.go index eed8abe6568..08ab8fb892a 100644 --- a/deployment/ccip/changeset/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/cs_deploy_chain_test.go @@ -3,11 +3,14 @@ package changeset import ( "encoding/json" "fmt" + "os" "testing" + "github.com/mr-tron/base58" "github.com/stretchr/testify/require" "go.uber.org/zap/zapcore" + "github.com/gagliardetto/solana-go" "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" @@ -87,7 +90,7 @@ func TestDeployChainContractsChangeset(t *testing.T) { require.NotNil(t, state.Chains[homeChainSel].CapabilityRegistry) require.NotNil(t, state.Chains[homeChainSel].CCIPHome) require.NotNil(t, state.Chains[homeChainSel].RMNHome) - for _, sel := range selectors { + for _, sel := range evmSelectors { require.NotNil(t, state.Chains[sel].LinkToken) require.NotNil(t, state.Chains[sel].Weth9) require.NotNil(t, state.Chains[sel].TokenAdminRegistry) @@ -100,6 +103,14 @@ func TestDeployChainContractsChangeset(t *testing.T) { require.NotNil(t, state.Chains[sel].OffRamp) require.NotNil(t, state.Chains[sel].OnRamp) } + + solState, err := LoadOnchainStateSolana(e) + require.NoError(t, err) + for _, sel := range solChainSelectors { + require.NotNil(t, solState.SolChains[sel].LinkToken) + require.NotNil(t, solState.SolChains[sel].SolCcipRouter) + } + } func TestDeployCCIPContracts(t *testing.T) { @@ -117,3 +128,45 @@ func TestDeployCCIPContracts(t *testing.T) { require.NoError(t, err) fmt.Println(string(b)) } + +func TestYash(t *testing.T) { + privateKey, _ := solana.NewRandomPrivateKey() + fmt.Println(privateKey.String()) + + // Decode the Base58 private key + privateKeyBytes, err := base58.Decode(privateKey.String()) + if err != nil { + fmt.Printf("Error decoding Base58 private key: %v\n", err) + return + } + fmt.Printf("Bytes after decode: %v\n", privateKeyBytes) + + // Convert bytes to array of integers + intArray := make([]int, len(privateKeyBytes)) + for i, b := range privateKeyBytes { + intArray[i] = int(b) + } + + // Marshal the integer array to JSON + keypairJSON, err := json.Marshal(intArray) + if err != nil { + fmt.Printf("Error marshaling to JSON: %v\n", err) + return + } + outputFilePath := "/Users/yashvardhan/.config/solana/myid.json" + if err := os.WriteFile(outputFilePath, keypairJSON, 0600); err != nil { + fmt.Printf("Error writing keypair to file: %v\n", err) + return + } + + // if err := os.WriteFile(outputFilePath, privateKeyBytes, 0600); err != nil { + // fmt.Printf("Error writing keypair to file: %v\n", err) + // return + // } + + pk, err := solana.PrivateKeyFromSolanaKeygenFile(outputFilePath) + require.NoError(t, err) + fmt.Println(pk.String()) + + // fmt.Printf("Keypair JSON successfully written to: %s\n", outputFilePath) +} From 074dacf2d77a322435a74949c40b7e6f38e5b0e8 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 20:58:32 +0000 Subject: [PATCH 28/48] Adding --- deployment/ccip/changeset/cs_deploy_chain.go | 1 + deployment/environment/memory/chain.go | 28 +++++++++++++------- deployment/environment/memory/environment.go | 1 + deployment/solana_chain.go | 2 ++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/deployment/ccip/changeset/cs_deploy_chain.go b/deployment/ccip/changeset/cs_deploy_chain.go index 1a0a6ad4533..0b6a87c3bad 100644 --- a/deployment/ccip/changeset/cs_deploy_chain.go +++ b/deployment/ccip/changeset/cs_deploy_chain.go @@ -537,6 +537,7 @@ func deployChainContractsSolana( if err != nil { return fmt.Errorf("failed to save address: %v", err) } + //TODO: deploy token pool contract } return nil } diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 1d44c185b1e..81b0a8f37cd 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum/go-ethereum/ethclient/simulated" "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" + "github.com/mr-tron/base58" "github.com/stretchr/testify/require" @@ -35,6 +36,7 @@ type SolanaChain struct { Client *solRpc.Client DeployerKey *solana.PrivateKey URL string + WSURL string KeypairPath string } @@ -84,15 +86,20 @@ func generateAndStoreKeypair() (solana.PrivateKey, string, error) { return solana.PrivateKey{}, "", fmt.Errorf("failed to generate private key: %w", err) } - // Convert the private key to a byte slice - keypairBytes := privateKey + privateKeyBytes, err := base58.Decode(privateKey.String()) + if err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to decode Base58 private key: %w", err) + } - // solana.NewWallet(). + intArray := make([]int, len(privateKeyBytes)) + for i, b := range privateKeyBytes { + intArray[i] = int(b) + } - // Serialize the keypair as JSON - jsonData, err := json.Marshal(keypairBytes) + // Marshal the integer array to JSON + keypairJSON, err := json.Marshal(intArray) if err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to serialize keypair: %w", err) + return solana.PrivateKey{}, "", fmt.Errorf("failed to marshal keypair to JSON: %w", err) } // Create a temporary file @@ -103,8 +110,8 @@ func generateAndStoreKeypair() (solana.PrivateKey, string, error) { defer tempFile.Close() // Write the keypair data to the file - if _, err := tempFile.Write(jsonData); err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to write keypair to temporary file: %w", err) + if err := os.WriteFile(tempFile.Name(), keypairJSON, 0600); err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to write keypair to file: %w", err) } // Return the path to the temporary file @@ -119,10 +126,10 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { chains := make(map[uint64]SolanaChain) for i := 0; i < numChains; i++ { chainID := testSolanaChainSelectors[i] - url, _ := solTestUtil.SetupLocalSolNodeWithFlags(t) + url, wsurl := solTestUtil.SetupLocalSolNodeWithFlags(t) admin, keypairPath, gerr := generateAndStoreKeypair() + // byteSlice, err := base58.Decode(admin) t.Log("keypairPath", keypairPath) - t.Log("admin", admin.PublicKey()) t.Log("admin private key", admin) key, err := solana.PrivateKeyFromSolanaKeygenFile(keypairPath) require.NoError(t, err) @@ -134,6 +141,7 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { Client: solRpc.New(url), DeployerKey: &admin, URL: url, + WSURL: wsurl, KeypairPath: keypairPath, } } diff --git a/deployment/environment/memory/environment.go b/deployment/environment/memory/environment.go index e0ed8525285..ca003976dcd 100644 --- a/deployment/environment/memory/environment.go +++ b/deployment/environment/memory/environment.go @@ -130,6 +130,7 @@ func generateMemoryChainSol(t *testing.T, inputs map[uint64]SolanaChain) map[uin Client: chain.Client, DeployerKey: chain.DeployerKey, URL: chain.URL, + WSURL: chain.WSURL, KeypairPath: chain.KeypairPath, Confirm: func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error { _, err := solCommomUtil.SendAndConfirm( diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index e7315ea45ce..58af751af07 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -29,6 +29,7 @@ type SolChain struct { DeployerKey *solana.PrivateKey Confirm func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error URL string + WSURL string KeypairPath string } @@ -65,6 +66,7 @@ func (c SolChain) DeployProgram(logger logger.Logger, programName string) (strin } logger.Infow("program key pair", "key", key) cmd := exec.Command("solana", "program", "deploy", programFile, "--keypair", c.KeypairPath, "--program-id", programKeyPair, "--url", c.URL) + // cmd := exec.Command("solana", "program", "deploy", programFile, "--upgrade-authority", c.DeployerKey.PublicKey().String(), "--program-id", programKeyPair, "--url", c.URL) // Capture the command output var stdout, stderr bytes.Buffer From 7e3b16945f901b18e9f6104ffc7c0a2897f6b646 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 22:30:38 +0000 Subject: [PATCH 29/48] updates --- deployment/ccip/changeset/solana_state.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/deployment/ccip/changeset/solana_state.go b/deployment/ccip/changeset/solana_state.go index 6c5f774f3ac..8f92a3a79a2 100644 --- a/deployment/ccip/changeset/solana_state.go +++ b/deployment/ccip/changeset/solana_state.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/gagliardetto/solana-go" + "github.com/smartcontractkit/chainlink/deployment" ) @@ -26,18 +27,16 @@ func LoadOnchainStateSolana(e deployment.Environment) (CCIPOnChainState, error) addresses, err := e.ExistingAddresses.AddressesForChain(chainSelector) if err != nil { // Chain not found in address book, initialize empty - if errors.Is(err, deployment.ErrChainNotFound) { - addresses = make(map[string]deployment.TypeAndVersion) - } else { + if !errors.Is(err, deployment.ErrChainNotFound) { return state, err } + addresses = make(map[string]deployment.TypeAndVersion) } chainState, err := LoadChainStateSolana(chain, addresses) if err != nil { return state, err } state.SolChains[chainSelector] = chainState - } return state, nil } From 040ca48121069a1f1112ecccb56d3d199c2cd0b2 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 22:41:31 +0000 Subject: [PATCH 30/48] adding stuff for tests --- .../ccip/changeset/cs_deploy_chain_test.go | 11 +++-------- .../solana_contracts/ccip_router-keypair.json | 1 + .../internal/solana_contracts/ccip_router.so | Bin 0 -> 932712 bytes deployment/solana_chain.go | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) create mode 100644 deployment/ccip/changeset/internal/solana_contracts/ccip_router-keypair.json create mode 100755 deployment/ccip/changeset/internal/solana_contracts/ccip_router.so diff --git a/deployment/ccip/changeset/cs_deploy_chain_test.go b/deployment/ccip/changeset/cs_deploy_chain_test.go index 08ab8fb892a..147ebdc04f4 100644 --- a/deployment/ccip/changeset/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/cs_deploy_chain_test.go @@ -129,7 +129,8 @@ func TestDeployCCIPContracts(t *testing.T) { fmt.Println(string(b)) } -func TestYash(t *testing.T) { +// IGNORE +func TestSolanaKeygen(t *testing.T) { privateKey, _ := solana.NewRandomPrivateKey() fmt.Println(privateKey.String()) @@ -159,14 +160,8 @@ func TestYash(t *testing.T) { return } - // if err := os.WriteFile(outputFilePath, privateKeyBytes, 0600); err != nil { - // fmt.Printf("Error writing keypair to file: %v\n", err) - // return - // } pk, err := solana.PrivateKeyFromSolanaKeygenFile(outputFilePath) require.NoError(t, err) - fmt.Println(pk.String()) - - // fmt.Printf("Keypair JSON successfully written to: %s\n", outputFilePath) + require.Equal(t, pk.String(), privateKey.String()) } diff --git a/deployment/ccip/changeset/internal/solana_contracts/ccip_router-keypair.json b/deployment/ccip/changeset/internal/solana_contracts/ccip_router-keypair.json new file mode 100644 index 00000000000..ebf7818d328 --- /dev/null +++ b/deployment/ccip/changeset/internal/solana_contracts/ccip_router-keypair.json @@ -0,0 +1 @@ +[101,238,189,81,99,141,117,176,11,49,33,2,218,239,163,125,209,246,2,133,177,222,143,89,48,80,244,247,247,141,216,183,145,28,85,130,47,80,170,11,121,40,143,49,171,88,54,235,39,125,182,141,1,69,71,62,148,230,124,191,22,218,25,173] \ No newline at end of file diff --git a/deployment/ccip/changeset/internal/solana_contracts/ccip_router.so b/deployment/ccip/changeset/internal/solana_contracts/ccip_router.so new file mode 100755 index 0000000000000000000000000000000000000000..084318af144a045b80fe3a71c48dc331e70873fc GIT binary patch literal 932712 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 literal 0 HcmV?d00001 diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index 58af751af07..b89ae7a92cb 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -15,7 +15,7 @@ import ( ) var ( - deployBinPath = "/Users/yashvardhan/chainlink-ccip/chains/solana/contracts/target/deploy" + deployBinPath = "./internal/solana_contracts" // keypairPath = "/Users/yashvardhan/.config/solana/id.json" //wallet ) From abb5a0103bb41251b8452884fdb697ec87364696 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Wed, 8 Jan 2025 22:52:29 +0000 Subject: [PATCH 31/48] linting --- deployment/ccip/changeset/cs_deploy_chain.go | 40 ++++++++++--------- .../ccip/changeset/cs_deploy_chain_test.go | 6 ++- deployment/ccip/changeset/solana_state.go | 32 +++++++-------- deployment/solana_chain.go | 3 +- 4 files changed, 43 insertions(+), 38 deletions(-) diff --git a/deployment/ccip/changeset/cs_deploy_chain.go b/deployment/ccip/changeset/cs_deploy_chain.go index 2915830982d..7cd2f8be75e 100644 --- a/deployment/ccip/changeset/cs_deploy_chain.go +++ b/deployment/ccip/changeset/cs_deploy_chain.go @@ -10,12 +10,14 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/gagliardetto/solana-go" "github.com/smartcontractkit/ccip-owner-contracts/pkg/proposal/timelock" - "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/ccip_router" "golang.org/x/sync/errgroup" + "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/ccip_router" + solBinary "github.com/gagliardetto/binary" solRpc "github.com/gagliardetto/solana-go/rpc" chainsel "github.com/smartcontractkit/chain-selectors" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/internal" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_home" @@ -125,7 +127,6 @@ func deployChainContractsForChains( ab deployment.AddressBook, homeChainSel uint64, chainsToDeploy []uint64) error { - existingEVMState, err := LoadOnchainState(e) if err != nil { e.Logger.Errorw("Failed to load existing onchain state", "err") @@ -450,7 +451,7 @@ func deployChainContractsEVM( return nil } -func solRouterProgramData(e deployment.Environment, chain deployment.SolChain, CcipRouterProgram solana.PublicKey) (struct { +func solRouterProgramData(e deployment.Environment, chain deployment.SolChain, ccipRouterProgram solana.PublicKey) (struct { DataType uint32 Address solana.PublicKey }, error) { @@ -458,16 +459,16 @@ func solRouterProgramData(e deployment.Environment, chain deployment.SolChain, C DataType uint32 Address solana.PublicKey } - data, err := chain.Client.GetAccountInfoWithOpts(e.GetContext(), CcipRouterProgram, &solRpc.GetAccountInfoOpts{ + data, err := chain.Client.GetAccountInfoWithOpts(e.GetContext(), ccipRouterProgram, &solRpc.GetAccountInfoOpts{ Commitment: solRpc.CommitmentConfirmed, }) if err != nil { - return programData, fmt.Errorf("failed to deploy program: %v", err) + return programData, fmt.Errorf("failed to deploy program: %w", err) } err = solBinary.UnmarshalBorsh(&programData, data.Bytes()) if err != nil { - return programData, fmt.Errorf("failed to unmarshal program data: %v", err) + return programData, fmt.Errorf("failed to unmarshal program data: %w", err) } return programData, nil } @@ -493,19 +494,19 @@ func deployChainContractsSolana( // deploy and initialize router programID, err := chain.DeployProgram(e.Logger, "ccip_router") if err != nil { - return fmt.Errorf("failed to deploy program: %v", err) + return fmt.Errorf("failed to deploy program: %w", err) } tv := deployment.NewTypeAndVersion("SolCcipRouter", deployment.Version1_0_0) e.Logger.Infow("Deployed contract", "Contract", tv.String(), "addr", programID, "chain", chain.String()) - CcipRouterProgram := solana.MustPublicKeyFromBase58(programID) - programData, err := solRouterProgramData(e, chain, CcipRouterProgram) + ccipRouterProgram := solana.MustPublicKeyFromBase58(programID) + programData, err := solRouterProgramData(e, chain, ccipRouterProgram) if err != nil { - return fmt.Errorf("failed to get solana router program data: %v", err) + return fmt.Errorf("failed to get solana router program data: %w", err) } - ccip_router.SetProgramID(CcipRouterProgram) + ccip_router.SetProgramID(ccipRouterProgram) defaultGasLimit := solBinary.Uint128{Lo: 3000, Hi: 0, Endianness: nil} @@ -515,30 +516,31 @@ func deployChainContractsSolana( true, // allow out of order execution EnableExecutionAfter, // period to wait before allowing manual execution solana.PublicKey{}, - GetRouterConfigPDA(CcipRouterProgram), - GetRouterStatePDA(CcipRouterProgram), + GetRouterConfigPDA(ccipRouterProgram), + GetRouterStatePDA(ccipRouterProgram), chain.DeployerKey.PublicKey(), solana.SystemProgramID, - CcipRouterProgram, + ccipRouterProgram, programData.Address, - GetExternalExecutionConfigPDA(CcipRouterProgram), - GetExternalTokenPoolsSignerPDA(CcipRouterProgram), + GetExternalExecutionConfigPDA(ccipRouterProgram), + GetExternalTokenPoolsSignerPDA(ccipRouterProgram), ).ValidateAndBuild() if err != nil { - return fmt.Errorf("failed to build instruction: %v", err) + return fmt.Errorf("failed to build instruction: %w", err) } err = chain.Confirm([]solana.Instruction{instruction}) if err != nil { - return fmt.Errorf("failed to confirm instructions: %v", err) + return fmt.Errorf("failed to confirm instructions: %w", err) } err = ab.Save(chain.Selector, programID, tv) if err != nil { - return fmt.Errorf("failed to save address: %v", err) + return fmt.Errorf("failed to save address: %w", err) } //TODO: deploy token pool contract + //TODO: log errors } return nil } diff --git a/deployment/ccip/changeset/cs_deploy_chain_test.go b/deployment/ccip/changeset/cs_deploy_chain_test.go index 147ebdc04f4..5ed2f6fdc3a 100644 --- a/deployment/ccip/changeset/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/cs_deploy_chain_test.go @@ -11,6 +11,7 @@ import ( "go.uber.org/zap/zapcore" "github.com/gagliardetto/solana-go" + "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" @@ -31,7 +32,9 @@ func TestDeployChainContractsChangeset(t *testing.T) { evmSelectors := e.AllChainSelectors() homeChainSel := evmSelectors[0] solChainSelectors := e.AllChainSelectorsSolana() - selectors := append(evmSelectors, solChainSelectors...) + selectors := make([]uint64, 0, len(evmSelectors)+len(solChainSelectors)) + selectors = append(selectors, evmSelectors...) + selectors = append(selectors, solChainSelectors...) nodes, err := deployment.NodeInfo(e.NodeIDs, e.Offchain) require.NoError(t, err) p2pIds := nodes.NonBootstraps().PeerIDs() @@ -160,7 +163,6 @@ func TestSolanaKeygen(t *testing.T) { return } - pk, err := solana.PrivateKeyFromSolanaKeygenFile(outputFilePath) require.NoError(t, err) require.Equal(t, pk.String(), privateKey.String()) diff --git a/deployment/ccip/changeset/solana_state.go b/deployment/ccip/changeset/solana_state.go index cd38de97c94..69aee5d481a 100644 --- a/deployment/ccip/changeset/solana_state.go +++ b/deployment/ccip/changeset/solana_state.go @@ -63,85 +63,85 @@ func LoadChainStateSolana(chain deployment.SolChain, addresses map[string]deploy } // GetRouterConfigPDA returns the PDA for the "config" account. -func GetRouterConfigPDA(CcipRouterProgram solana.PublicKey) solana.PublicKey { +func GetRouterConfigPDA(ccipRouterProgramId solana.PublicKey) solana.PublicKey { pda, _, _ := solana.FindProgramAddress( [][]byte{[]byte("config")}, - CcipRouterProgram, + ccipRouterProgramId, ) return pda } // GetRouterStatePDA returns the PDA for the "state" account. -func GetRouterStatePDA(CcipRouterProgram solana.PublicKey) solana.PublicKey { +func GetRouterStatePDA(ccipRouterProgramId solana.PublicKey) solana.PublicKey { pda, _, _ := solana.FindProgramAddress( [][]byte{[]byte("state")}, - CcipRouterProgram, + ccipRouterProgramId, ) return pda } // GetExternalExecutionConfigPDA returns the PDA for the "external_execution_config" account. -func GetExternalExecutionConfigPDA(CcipRouterProgram solana.PublicKey) solana.PublicKey { +func GetExternalExecutionConfigPDA(ccipRouterProgramId solana.PublicKey) solana.PublicKey { pda, _, _ := solana.FindProgramAddress( [][]byte{[]byte("external_execution_config")}, - CcipRouterProgram, + ccipRouterProgramId, ) return pda } // GetExternalTokenPoolsSignerPDA returns the PDA for the "external_token_pools_signer" account. -func GetExternalTokenPoolsSignerPDA(CcipRouterProgram solana.PublicKey) solana.PublicKey { +func GetExternalTokenPoolsSignerPDA(ccipRouterProgramId solana.PublicKey) solana.PublicKey { pda, _, _ := solana.FindProgramAddress( [][]byte{[]byte("external_token_pools_signer")}, - CcipRouterProgram, + ccipRouterProgramId, ) return pda } // GetSolanaSourceChainStatePDA returns the PDA for the "source_chain_state" account for Solana. -func GetSolanaSourceChainStatePDA(CcipRouterProgram solana.PublicKey, SolanaChainSelector uint64) solana.PublicKey { +func GetSolanaSourceChainStatePDA(ccipRouterProgramId solana.PublicKey, SolanaChainSelector uint64) solana.PublicKey { pda, _, _ := solana.FindProgramAddress( [][]byte{ []byte("source_chain_state"), binary.LittleEndian.AppendUint64([]byte{}, SolanaChainSelector), }, - CcipRouterProgram, + ccipRouterProgramId, ) return pda } // GetSolanaDestChainStatePDA returns the PDA for the "dest_chain_state" account for Solana. -func GetSolanaDestChainStatePDA(CcipRouterProgram solana.PublicKey, SolanaChainSelector uint64) solana.PublicKey { +func GetSolanaDestChainStatePDA(ccipRouterProgramId solana.PublicKey, SolanaChainSelector uint64) solana.PublicKey { pda, _, _ := solana.FindProgramAddress( [][]byte{ []byte("dest_chain_state"), binary.LittleEndian.AppendUint64([]byte{}, SolanaChainSelector), }, - CcipRouterProgram, + ccipRouterProgramId, ) return pda } // GetEvmSourceChainStatePDA returns the PDA for the "source_chain_state" account for EVM. -func GetEvmSourceChainStatePDA(CcipRouterProgram solana.PublicKey, EvmChainSelector uint64) solana.PublicKey { +func GetEvmSourceChainStatePDA(ccipRouterProgramId solana.PublicKey, EvmChainSelector uint64) solana.PublicKey { pda, _, _ := solana.FindProgramAddress( [][]byte{ []byte("source_chain_state"), binary.LittleEndian.AppendUint64([]byte{}, EvmChainSelector), }, - CcipRouterProgram, + ccipRouterProgramId, ) return pda } // GetEvmDestChainStatePDA returns the PDA for the "dest_chain_state" account for EVM. -func GetEvmDestChainStatePDA(CcipRouterProgram solana.PublicKey, EvmChainSelector uint64) solana.PublicKey { +func GetEvmDestChainStatePDA(ccipRouterProgramId solana.PublicKey, EvmChainSelector uint64) solana.PublicKey { pda, _, _ := solana.FindProgramAddress( [][]byte{ []byte("dest_chain_state"), binary.LittleEndian.AppendUint64([]byte{}, EvmChainSelector), }, - CcipRouterProgram, + ccipRouterProgramId, ) return pda } diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index b89ae7a92cb..0f14e9e8920 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -9,6 +9,7 @@ import ( "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" + "github.com/pkg/errors" solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" "github.com/smartcontractkit/chainlink-common/pkg/logger" @@ -92,7 +93,7 @@ func parseProgramID(output string) (string, error) { const prefix = "Program Id: " startIdx := bytes.Index([]byte(output), []byte(prefix)) if startIdx == -1 { - return "", fmt.Errorf("failed to find program ID in output") + return "", errors.New("failed to find program ID in output") } startIdx += len(prefix) endIdx := bytes.Index([]byte(output[startIdx:]), []byte("\n")) From b4a778144ca291034a1db593151cf9ec1602df61 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Thu, 9 Jan 2025 11:24:10 +0000 Subject: [PATCH 32/48] linting --- deployment/common/changeset/deploy_link_token.go | 1 + 1 file changed, 1 insertion(+) diff --git a/deployment/common/changeset/deploy_link_token.go b/deployment/common/changeset/deploy_link_token.go index 319c20a049b..607c33fbeaa 100644 --- a/deployment/common/changeset/deploy_link_token.go +++ b/deployment/common/changeset/deploy_link_token.go @@ -9,6 +9,7 @@ import ( "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" chainsel "github.com/smartcontractkit/chain-selectors" + solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" solTokenUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/tokens" "github.com/smartcontractkit/chainlink/deployment" From 31e813361f906a5a3105d9c16dc22970fb1e2cf9 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Thu, 9 Jan 2025 14:42:02 +0000 Subject: [PATCH 33/48] changing to ctf --- core/scripts/go.mod | 12 +-- core/scripts/go.sum | 73 ++++++++++++--- deployment/environment/memory/chain.go | 117 +++++++++++++++++++++++-- deployment/go.mod | 15 ++-- deployment/go.sum | 31 +++---- go.mod | 20 ++--- go.sum | 40 ++++----- integration-tests/go.mod | 13 +-- integration-tests/go.sum | 37 ++++---- integration-tests/load/go.mod | 12 +-- integration-tests/load/go.sum | 27 +++--- 11 files changed, 277 insertions(+), 120 deletions(-) diff --git a/core/scripts/go.mod b/core/scripts/go.mod index e016559d6cf..884b15290be 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -82,8 +82,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect @@ -135,7 +135,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect @@ -164,7 +164,7 @@ require ( github.com/go-openapi/swag v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-webauthn/webauthn v0.9.4 // indirect github.com/go-webauthn/x v0.1.5 // indirect @@ -251,7 +251,7 @@ require ( github.com/maruel/natural v1.1.1 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mfridman/interpolate v0.0.2 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -284,7 +284,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/prometheus v0.54.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/cors v1.10.1 // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index b716caa9ec3..7be29dd63bc 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -67,6 +67,8 @@ cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -148,6 +150,34 @@ github.com/avast/retry-go/v4 v4.6.0 h1:K9xNA+KeB8HHc2aWFuLb25Offp+0iVRXEvFx8IinR github.com/avast/retry-go/v4 v4.6.0/go.mod h1:gvWlPhBVsvBbLkVGDg/KwvBv0bEkCOLRRSHKIr2PyOE= github.com/aws/aws-sdk-go v1.54.19 h1:tyWV+07jagrNiCcGRzRhdtVjQs7Vy41NwsuOcl0IbVI= github.com/aws/aws-sdk-go v1.54.19/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.32.2 h1:AkNLZEyYMLnx/Q/mSKkcMqwNFXMAvFto9bNsHqcTduI= +github.com/aws/aws-sdk-go-v2 v1.32.2/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo= +github.com/aws/aws-sdk-go-v2/config v1.28.0 h1:FosVYWcqEtWNxHn8gB/Vs6jOlNwSoyOCA/g/sxyySOQ= +github.com/aws/aws-sdk-go-v2/config v1.28.0/go.mod h1:pYhbtvg1siOOg8h5an77rXle9tVG8T+BWLWAo7cOukc= +github.com/aws/aws-sdk-go-v2/credentials v1.17.41 h1:7gXo+Axmp+R4Z+AK8YFQO0ZV3L0gizGINCOWxSLY9W8= +github.com/aws/aws-sdk-go-v2/credentials v1.17.41/go.mod h1:u4Eb8d3394YLubphT4jLEwN1rLNq2wFOlT6OuxFwPzU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.17 h1:TMH3f/SCAWdNtXXVPPu5D6wrr4G5hI1rAxbcocKfC7Q= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.17/go.mod h1:1ZRXLdTpzdJb9fwTMXiLipENRxkGMTn1sfKexGllQCw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.21 h1:UAsR3xA31QGf79WzpG/ixT9FZvQlh5HY1NRqSHBNOCk= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.21/go.mod h1:JNr43NFf5L9YaG3eKTm7HQzls9J+A9YYcGI5Quh1r2Y= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.21 h1:6jZVETqmYCadGFvrYEQfC5fAQmlo80CeL5psbno6r0s= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.21/go.mod h1:1SR0GbLlnN3QUmYaflZNiH1ql+1qrSiB2vwcJ+4UM60= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.2 h1:s7NA1SOw8q/5c0wr8477yOPp0z+uBaXBnLE0XYb0POA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.2/go.mod h1:fnjjWyAW/Pj5HYOxl9LJqWtEwS7W2qgcRLWP+uWbss0= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.2 h1:Rrqru2wYkKQCS2IM5/JrgKUQIoNTqA6y/iuxkjzxC6M= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.2/go.mod h1:QuCURO98Sqee2AXmqDNxKXYFm2OEDAVAPApMqO0Vqnc= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.2 h1:bSYXVyUzoTHoKalBmwaZxs97HU9DWWI3ehHSAMa7xOk= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.2/go.mod h1:skMqY7JElusiOUjMJMOv1jJsP7YUg7DrhgqZZWuzu1U= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.2 h1:AhmO1fHINP9vFYUE0LHzCWg/LfUWUF+zFPEcY9QXb7o= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.2/go.mod h1:o8aQygT2+MVP0NaV6kbdE1YnnIM8RRVQzoeUH45GOdI= +github.com/aws/aws-sdk-go-v2/service/sts v1.32.2 h1:CiS7i0+FUe+/YY1GvIBLLrR/XNGZ4CtM1Ll0XavNuVo= +github.com/aws/aws-sdk-go-v2/service/sts v1.32.2/go.mod h1:HtaiBI8CjYoNVde8arShXb94UbQQi9L4EMr6D+xGBwo= +github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= +github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= @@ -184,10 +214,11 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= 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.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= @@ -254,6 +285,8 @@ github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7b github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -284,6 +317,8 @@ github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5s github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= +github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= +github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -378,8 +413,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -466,8 +501,8 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -846,6 +881,7 @@ github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLm github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= @@ -877,8 +913,8 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -916,6 +952,14 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= +github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1043,8 +1087,8 @@ github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC 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.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1088,6 +1132,7 @@ github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKl github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE= github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -1133,6 +1178,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1 h1:573e5JlpGOjY/RDJziG62Cw5D66xghWHJcmfWvv6yc4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 h1:T0kbw07Vb6xUyA9MIJZfErMgWseWi1zf7cYvRpoq7ug= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13/go.mod h1:1CKUOzoK+Ga19WuhRH9pxZ+qUUnrlIx108VEA6qSzeQ= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= @@ -1212,6 +1259,8 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= +github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= +github.com/testcontainers/testcontainers-go v0.34.0/go.mod h1:6P/kMkQe8yqPHfPWNulFGdFHTD8HB2vLq/231xY2iPQ= github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a h1:YuO+afVc3eqrjiCUizNCxI53bl/BnPiVwXqLzqYTqgU= github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a/go.mod h1:/sfW47zCZp9FrtGcWyo1VjbgDaodxX9ovZvgLb/MxaA= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= @@ -1380,7 +1429,6 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= 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/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1915,7 +1963,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 193def7ba08..593b62e646e 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -1,8 +1,14 @@ package memory import ( + "context" + "encoding/json" + "fmt" "math/big" + "os" + "strconv" "testing" + "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -11,15 +17,18 @@ import ( "github.com/ethereum/go-ethereum/ethclient/simulated" "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" + "github.com/hashicorp/consul/sdk/freeport" + "github.com/mr-tron/base58" "github.com/stretchr/testify/require" - solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" - chainsel "github.com/smartcontractkit/chain-selectors" "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" + + "github.com/smartcontractkit/chainlink-testing-framework/framework" + "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" ) type EVMChain struct { @@ -31,6 +40,9 @@ type EVMChain struct { type SolanaChain struct { Client *solRpc.Client DeployerKey *solana.PrivateKey + URL string + WSURL string + KeypairPath string } func fundAddress(t *testing.T, from *bind.TransactOpts, to common.Address, amount *big.Int, backend *simulated.Backend) { @@ -53,6 +65,45 @@ func fundAddress(t *testing.T, from *bind.TransactOpts, to common.Address, amoun backend.Commit() } +func generateAndStoreKeypair() (solana.PrivateKey, string, error) { + // Generate a random private key + privateKey, err := solana.NewRandomPrivateKey() + if err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to generate private key: %w", err) + } + + privateKeyBytes, err := base58.Decode(privateKey.String()) + if err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to decode Base58 private key: %w", err) + } + + intArray := make([]int, len(privateKeyBytes)) + for i, b := range privateKeyBytes { + intArray[i] = int(b) + } + + // Marshal the integer array to JSON + keypairJSON, err := json.Marshal(intArray) + if err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to marshal keypair to JSON: %w", err) + } + + // Create a temporary file + tempFile, err := os.CreateTemp("", "solana-keypair-*.json") + if err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to create temporary file: %w", err) + } + defer tempFile.Close() + + // Write the keypair data to the file + if err := os.WriteFile(tempFile.Name(), keypairJSON, 0600); err != nil { + return solana.PrivateKey{}, "", fmt.Errorf("failed to write keypair to file: %w", err) + } + + // Return the path to the temporary file + return privateKey, tempFile.Name(), nil +} + func GenerateChains(t *testing.T, numChains int, numUsers int) map[uint64]EVMChain { chains := make(map[uint64]EVMChain) for i := 0; i < numChains; i++ { @@ -80,13 +131,20 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { chains := make(map[uint64]SolanaChain) for i := 0; i < numChains; i++ { chainID := testSolanaChainSelectors[i] - url, _ := solTestUtil.SetupLocalSolNodeWithFlags(t) - admin, gerr := solana.NewRandomPrivateKey() - solTestUtil.FundTestAccounts(t, []solana.PublicKey{admin.PublicKey()}, url) - require.NoError(t, gerr) + admin, keypairPath, err := generateAndStoreKeypair() + require.NoError(t, err) + url, wsURL, err := solChain(t, chainID, &admin) + require.NoError(t, err) + client := solRpc.New(url) + balance, err := client.GetBalance(context.Background(), admin.PublicKey(), solRpc.CommitmentConfirmed) + require.NoError(t, err) + require.NotEqual(t, balance.Value, 0) // auto funded 500000000.000000000 SOL chains[chainID] = SolanaChain{ - Client: solRpc.New(url), + Client: client, DeployerKey: &admin, + URL: url, + WSURL: wsURL, + KeypairPath: keypairPath, } } return chains @@ -126,3 +184,48 @@ func evmChain(t *testing.T, numUsers int) EVMChain { Users: users, } } + +func solChain(t *testing.T, chainID uint64, adminKey *solana.PrivateKey) (string, string, error) { + t.Helper() + + // initialize the docker network used by CTF + // TODO: framework.DefaultNetwork(once) is broken for me, use a static name for now + framework.DefaultNetworkName = "chainlink" + + port := freeport.GetOne(t) + + bcInput := &blockchain.Input{ + Type: "solana", + ChainID: strconv.FormatUint(chainID, 10), + PublicKey: adminKey.PublicKey().String(), + Port: strconv.Itoa(port), + // TODO: ContractsDir & SolanaPrograms via env vars + } + output, err := blockchain.NewBlockchainNetwork(bcInput) + require.NoError(t, err) + // TODO:cleanup the container + + url := output.Nodes[0].HostHTTPUrl + wsURL := output.Nodes[0].HostWSUrl + + // Wait for api server to boot + client := solRpc.New(url) + var ready bool + for i := 0; i < 30; i++ { + time.Sleep(time.Second) + out, err := client.GetHealth(tests.Context(t)) + if err != nil || out != solRpc.HealthOk { + t.Logf("API server not ready yet (attempt %d)\n", i+1) + continue + } + ready = true + break + } + if !ready { + t.Logf("solana-test-validator is not ready after 30 attempts") + } + require.True(t, ready) + t.Logf("solana-test-validator is ready at %s", url) + + return url, wsURL, nil +} diff --git a/deployment/go.mod b/deployment/go.mod index cbec5d95744..bf3e9c17d62 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -23,6 +23,7 @@ require ( github.com/google/uuid v1.6.0 github.com/hashicorp/consul/sdk v0.16.1 github.com/hashicorp/go-multierror v1.1.1 + github.com/mr-tron/base58 v1.2.0 github.com/pelletier/go-toml/v2 v2.2.3 github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.33.0 @@ -33,6 +34,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b github.com/smartcontractkit/chainlink-common v0.4.1-0.20241223143929-db7919d60550 github.com/smartcontractkit/chainlink-protos/job-distributor v0.6.0 + github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1 github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 github.com/smartcontractkit/libocr v0.0.0-20241223215956-e5b78d8e3919 github.com/stretchr/testify v1.10.0 @@ -117,8 +119,8 @@ require ( github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 // indirect github.com/cdk8s-team/cdk8s-core-go/cdk8s/v2 v2.7.5 // indirect @@ -188,7 +190,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect @@ -217,7 +219,7 @@ require ( github.com/go-openapi/validate v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-webauthn/webauthn v0.9.4 // indirect @@ -331,7 +333,7 @@ require ( github.com/mailru/easyjson v0.7.7 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.61 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -355,7 +357,6 @@ require ( github.com/montanaflynn/stats v0.7.1 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect @@ -387,7 +388,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/prometheus v0.54.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/cors v1.10.1 // indirect diff --git a/deployment/go.sum b/deployment/go.sum index e58794f2e97..7e5021cec20 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -281,10 +281,11 @@ github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40 github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 h1:SjZ2GvvOononHOpK84APFuMvxqsk3tEIaKH/z4Rpu3g= @@ -412,8 +413,8 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= +github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -515,8 +516,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -603,8 +604,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-resty/resty/v2 v2.15.3 h1:bqff+hcqAflpiF591hhJzNdkRsFhlB96CYfBwSFvql8= @@ -1090,8 +1091,8 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -1304,8 +1305,8 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1403,6 +1404,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1 h1:573e5JlpGOjY/RDJziG62Cw5D66xghWHJcmfWvv6yc4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 h1:T0kbw07Vb6xUyA9MIJZfErMgWseWi1zf7cYvRpoq7ug= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13/go.mod h1:1CKUOzoK+Ga19WuhRH9pxZ+qUUnrlIx108VEA6qSzeQ= github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 h1:VIxK8u0Jd0Q/VuhmsNm6Bls6Tb31H/sA3A/rbc5hnhg= @@ -1678,7 +1681,6 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f h1:ketMxHg+vWm3yccyYiq+uK8D3fRmna2Fcj+awpQp84s= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2232,7 +2234,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= diff --git a/go.mod b/go.mod index c12790b12c7..7e518c859f5 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( github.com/gin-contrib/expvar v0.0.1 github.com/gin-contrib/sessions v0.0.5 github.com/gin-contrib/size v0.0.0-20230212012657-e14a14094dc4 - github.com/gin-gonic/gin v1.9.1 + github.com/gin-gonic/gin v1.10.0 github.com/go-ldap/ldap/v3 v3.4.6 github.com/go-viper/mapstructure/v2 v2.1.0 github.com/go-webauthn/webauthn v0.9.4 @@ -160,8 +160,8 @@ require ( github.com/blendle/zapdriver v1.3.1 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect @@ -187,7 +187,7 @@ require ( github.com/cosmos/ibc-go/v7 v7.5.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect github.com/danieljoos/wincred v1.1.2 // indirect @@ -204,7 +204,7 @@ require ( github.com/ethereum/c-kzg-4844 v1.0.0 // indirect github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.7.7 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect @@ -220,7 +220,7 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-webauthn/x v0.1.5 // indirect github.com/goccy/go-json v0.10.3 // indirect github.com/goccy/go-yaml v1.12.0 // indirect @@ -286,7 +286,7 @@ require ( github.com/marcboeker/go-duckdb v1.8.3 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mfridman/interpolate v0.0.2 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -312,7 +312,7 @@ require ( github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rs/cors v1.9.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect @@ -344,10 +344,10 @@ require ( github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722 // indirect - github.com/urfave/cli/v2 v2.25.7 // indirect + github.com/urfave/cli/v2 v2.27.5 // indirect github.com/valyala/fastjson v1.4.1 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect github.com/zeebo/xxh3 v1.0.2 // indirect github.com/zondax/hid v0.9.2 // indirect diff --git a/go.sum b/go.sum index c8778ab3532..a360970a221 100644 --- a/go.sum +++ b/go.sum @@ -204,10 +204,11 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= 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.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= @@ -309,8 +310,9 @@ github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFg github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= +github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= @@ -400,8 +402,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.7.7 h1:QZpT38+sgoPg+TIQjH94sLbl/vX+nlIRA37pEyOsjfY= github.com/gagliardetto/binary v0.7.7/go.mod h1:mUuay5LL8wFVnIlecHakSZMvcdqfs+CsotR5n77kyjM= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -432,8 +434,8 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= -github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA= github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= @@ -476,8 +478,8 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -904,8 +906,8 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -1080,8 +1082,8 @@ github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC 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.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= @@ -1291,8 +1293,8 @@ github.com/unrolled/secure v1.13.0 h1:sdr3Phw2+f8Px8HE5sd1EHdj1aV3yUwed/uZXChLFs github.com/unrolled/secure v1.13.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= -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/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= +github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fastjson v1.4.1 h1:hrltpHpIpkaxll8QltMU8c3QZ5+qIiCL8yKqPFJI/yE= github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o= @@ -1306,8 +1308,8 @@ github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23n github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= 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/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= @@ -1434,7 +1436,6 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= 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/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1978,7 +1979,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index efd538007b1..96338df65d0 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -137,8 +137,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 // indirect github.com/cdk8s-team/cdk8s-core-go/cdk8s/v2 v2.7.5 // indirect @@ -208,7 +208,7 @@ require ( github.com/fatih/color v1.17.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect @@ -238,7 +238,7 @@ require ( github.com/go-openapi/validate v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-webauthn/webauthn v0.9.4 // indirect @@ -351,7 +351,7 @@ require ( github.com/mailru/easyjson v0.7.7 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.61 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -404,7 +404,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/prometheus v0.54.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/cors v1.10.1 // indirect @@ -430,6 +430,7 @@ require ( github.com/smartcontractkit/chainlink-protos/orchestrator v0.4.0 // indirect github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 // indirect + github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1 // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20241009055228-33d0c0bf38de // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index a2f198d4856..59b44b13838 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -231,6 +231,8 @@ github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df h1:GSoSVRLoBaFpOOds6QyY1L8AX7uoY+Ln3BHc22W40X0= @@ -273,10 +275,11 @@ github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40 github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 h1:SjZ2GvvOononHOpK84APFuMvxqsk3tEIaKH/z4Rpu3g= @@ -416,8 +419,8 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= +github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -517,8 +520,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -605,8 +608,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-resty/resty/v2 v2.15.3 h1:bqff+hcqAflpiF591hhJzNdkRsFhlB96CYfBwSFvql8= @@ -1100,8 +1103,8 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -1181,8 +1184,8 @@ github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= -github.com/muesli/termenv v0.12.0 h1:KuQRUE3PgxRFWhq4gHvZtPSLCGDqM5q/cYr1pZ39ytc= -github.com/muesli/termenv v0.12.0/go.mod h1:WCCv32tusQ/EEZ5S8oUIIrC/nIuBcxCVqlN4Xfkv+7A= +github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg= +github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -1322,8 +1325,8 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1425,6 +1428,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1 h1:573e5JlpGOjY/RDJziG62Cw5D66xghWHJcmfWvv6yc4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2 h1:GDGrC5OGiV0RyM1znYWehSQXyZQWTOzrEeJRYmysPCE= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2/go.mod h1:DsT43c1oTBmp3iQkMcoZOoKThwZvt8X3Pz6UmznJ4GY= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.19 h1:9PMwKNqFKc5FXf4VchyD3CGzZelnSgi13fgVdT2X7T4= @@ -1704,7 +1709,6 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f h1:ketMxHg+vWm3yccyYiq+uK8D3fRmna2Fcj+awpQp84s= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2262,7 +2266,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 94d86cb5cd4..ab03dc2d08b 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -107,8 +107,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 // indirect github.com/cdk8s-team/cdk8s-core-go/cdk8s/v2 v2.7.5 // indirect @@ -179,7 +179,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect @@ -209,7 +209,7 @@ require ( github.com/go-openapi/validate v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-webauthn/webauthn v0.9.4 // indirect @@ -327,7 +327,7 @@ require ( github.com/mailru/easyjson v0.7.7 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.61 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -382,7 +382,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/prometheus v0.54.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/cors v1.10.1 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index eb114fa0e28..70bc97f1d5a 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -277,10 +277,11 @@ github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40 github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 h1:SjZ2GvvOononHOpK84APFuMvxqsk3tEIaKH/z4Rpu3g= @@ -511,8 +512,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -599,8 +600,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-resty/resty/v2 v2.15.3 h1:bqff+hcqAflpiF591hhJzNdkRsFhlB96CYfBwSFvql8= @@ -1094,8 +1095,8 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -1312,8 +1313,8 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1416,6 +1417,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1 h1:573e5JlpGOjY/RDJziG62Cw5D66xghWHJcmfWvv6yc4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2 h1:GDGrC5OGiV0RyM1znYWehSQXyZQWTOzrEeJRYmysPCE= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2/go.mod h1:DsT43c1oTBmp3iQkMcoZOoKThwZvt8X3Pz6UmznJ4GY= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.19 h1:9PMwKNqFKc5FXf4VchyD3CGzZelnSgi13fgVdT2X7T4= @@ -1695,7 +1698,6 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f h1:ketMxHg+vWm3yccyYiq+uK8D3fRmna2Fcj+awpQp84s= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2251,7 +2253,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= From 7fcf8457036ee083cd8c5b9ab9a7f3f24f88d8f3 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Thu, 9 Jan 2025 14:47:15 +0000 Subject: [PATCH 34/48] bug --- deployment/environment/memory/chain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 593b62e646e..6ba6ceb0da9 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -138,7 +138,7 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { client := solRpc.New(url) balance, err := client.GetBalance(context.Background(), admin.PublicKey(), solRpc.CommitmentConfirmed) require.NoError(t, err) - require.NotEqual(t, balance.Value, 0) // auto funded 500000000.000000000 SOL + require.NotEqual(t, 0, balance.Value) // auto funded 500000000.000000000 SOL chains[chainID] = SolanaChain{ Client: client, DeployerKey: &admin, From 12f4c9ef8f7ed0e2ba2403d70f5983cd2d251447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Tue, 7 Jan 2025 14:28:11 +0900 Subject: [PATCH 35/48] deployment: memory: Generate more transmitter key types, expose in JD --- deployment/environment/memory/job_client.go | 46 +------- deployment/environment/memory/node.go | 112 ++++++++++++++------ 2 files changed, 82 insertions(+), 76 deletions(-) diff --git a/deployment/environment/memory/job_client.go b/deployment/environment/memory/job_client.go index e44c664b77e..e025ea18fda 100644 --- a/deployment/environment/memory/job_client.go +++ b/deployment/environment/memory/job_client.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "slices" - "strconv" "strings" "github.com/ethereum/go-ethereum/common" @@ -153,49 +152,12 @@ func (j JobClient) ListNodeChainConfigs(ctx context.Context, in *nodev1.ListNode if !ok { return nil, fmt.Errorf("node id not found: %s", in.Filter.NodeIds[0]) } - evmBundle := n.Keys.OCRKeyBundles[chaintype.EVM] - offpk := evmBundle.OffchainPublicKey() - cpk := evmBundle.ConfigEncryptionPublicKey() - - evmKeyBundle := &nodev1.OCR2Config_OCRKeyBundle{ - BundleId: evmBundle.ID(), - ConfigPublicKey: common.Bytes2Hex(cpk[:]), - OffchainPublicKey: common.Bytes2Hex(offpk[:]), - OnchainSigningAddress: evmBundle.OnChainPublicKey(), - } - var chainConfigs []*nodev1.ChainConfig - for evmChainID, transmitter := range n.Keys.TransmittersByEVMChainID { - chainConfigs = append(chainConfigs, &nodev1.ChainConfig{ - Chain: &nodev1.Chain{ - Id: strconv.Itoa(int(evmChainID)), - Type: nodev1.ChainType_CHAIN_TYPE_EVM, - }, - AccountAddress: transmitter.String(), - AdminAddress: transmitter.String(), // TODO: custom address - Ocr1Config: nil, - Ocr2Config: &nodev1.OCR2Config{ - Enabled: true, - IsBootstrap: n.IsBoostrap, - P2PKeyBundle: &nodev1.OCR2Config_P2PKeyBundle{ - PeerId: n.Keys.PeerID.String(), - }, - OcrKeyBundle: evmKeyBundle, - Multiaddr: n.Addr.String(), - Plugins: nil, - ForwarderAddress: ptr(""), - }, - }) - } for _, selector := range n.Chains { family, err := chainsel.GetSelectorFamily(selector) if err != nil { return nil, err } - if family == chainsel.FamilyEVM { - // already handled above - continue - } // NOTE: this supports non-EVM too chainID, err := chainsel.GetChainIDFromSelector(selector) @@ -220,7 +182,6 @@ func (j JobClient) ListNodeChainConfigs(ctx context.Context, in *nodev1.ListNode } bundle := n.Keys.OCRKeyBundles[ocrtype] - offpk := bundle.OffchainPublicKey() cpk := bundle.ConfigEncryptionPublicKey() @@ -245,13 +206,15 @@ func (j JobClient) ListNodeChainConfigs(ctx context.Context, in *nodev1.ListNode panic(fmt.Sprintf("Unsupported chain family %v", family)) } + transmitter := n.Keys.Transmitters[selector] + chainConfigs = append(chainConfigs, &nodev1.ChainConfig{ Chain: &nodev1.Chain{ Id: chainID, Type: ctype, }, - AccountAddress: "", // TODO: support AccountAddress - AdminAddress: "", + AccountAddress: transmitter, + AdminAddress: transmitter, Ocr1Config: nil, Ocr2Config: &nodev1.OCR2Config{ Enabled: true, @@ -266,7 +229,6 @@ func (j JobClient) ListNodeChainConfigs(ctx context.Context, in *nodev1.ListNode }, }) } - // TODO: I think we can pull it from the feeds manager. return &nodev1.ListNodeChainConfigsResponse{ ChainConfigs: chainConfigs, }, nil diff --git a/deployment/environment/memory/node.go b/deployment/environment/memory/node.go index 84f0d2e443f..4c06cb88893 100644 --- a/deployment/environment/memory/node.go +++ b/deployment/environment/memory/node.go @@ -212,10 +212,10 @@ func NewNode( } type Keys struct { - PeerID p2pkey.PeerID - CSA csakey.KeyV2 - TransmittersByEVMChainID map[uint64]common.Address - OCRKeyBundles map[chaintype.ChainType]ocr2key.KeyBundle + PeerID p2pkey.PeerID + CSA csakey.KeyV2 + Transmitters map[uint64]string // chainSelector => address + OCRKeyBundles map[chaintype.ChainType]ocr2key.KeyBundle } func CreateKeys(t *testing.T, @@ -235,7 +235,7 @@ func CreateKeys(t *testing.T, require.Len(t, p2pIDs, 1) peerID := p2pIDs[0].PeerID() // create a transmitter for each chain - transmitters := make(map[uint64]common.Address) + transmitters := make(map[uint64]string) keybundles := make(map[chaintype.ChainType]ocr2key.KeyBundle) for _, chain := range chains { family, err := chainsel.GetSelectorFamily(chain.Selector) @@ -257,44 +257,88 @@ func CreateKeys(t *testing.T, panic(fmt.Sprintf("Unsupported chain family %v", family)) } - keybundle, err := app.GetKeyStore().OCR2().Create(ctx, ctype) + err = app.GetKeyStore().OCR2().EnsureKeys(ctx, ctype) require.NoError(t, err) + keys, err := app.GetKeyStore().OCR2().GetAllOfType(ctype) + require.NoError(t, err) + require.Len(t, keys, 1) + keybundle := keys[0] + keybundles[ctype] = keybundle - if family != chainsel.FamilyEVM { - // TODO: only support EVM transmission keys for now - continue - } + switch family { + case chainsel.FamilyEVM: + evmChainID, err := chainsel.ChainIdFromSelector(chain.Selector) + require.NoError(t, err) + + cid := big.NewInt(int64(evmChainID)) + addrs, err2 := app.GetKeyStore().Eth().EnabledAddressesForChain(ctx, cid) + require.NoError(t, err2) + var transmitter common.Address + if len(addrs) == 1 { + // just fund the address + transmitter = addrs[0] + } else { + // create key and fund it + _, err3 := app.GetKeyStore().Eth().Create(ctx, cid) + require.NoError(t, err3, "failed to create key for chain", evmChainID) + sendingKeys, err3 := app.GetKeyStore().Eth().EnabledAddressesForChain(ctx, cid) + require.NoError(t, err3) + require.Len(t, sendingKeys, 1) + transmitter = sendingKeys[0] + } + transmitters[chain.Selector] = transmitter.String() + + backend := chain.Client.(*Backend).Sim + fundAddress(t, chain.DeployerKey, transmitter, assets.Ether(1000).ToInt(), backend) + // need to look more into it, but it seems like with sim chains nodes are sending txs with 0x from address + fundAddress(t, chain.DeployerKey, common.Address{}, assets.Ether(1000).ToInt(), backend) + case chainsel.FamilySolana: + err = app.GetKeyStore().Solana().EnsureKey(ctx) + require.NoError(t, err, "failed to create key for solana") - evmChainID, err := chainsel.ChainIdFromSelector(chain.Selector) - require.NoError(t, err) + keys, err := app.GetKeyStore().Solana().GetAll() + require.NoError(t, err) + require.Len(t, keys, 1) + + transmitter := keys[0] + transmitters[chain.Selector] = transmitter.ID() - cid := big.NewInt(int64(evmChainID)) - addrs, err2 := app.GetKeyStore().Eth().EnabledAddressesForChain(ctx, cid) - require.NoError(t, err2) - if len(addrs) == 1 { - // just fund the address - transmitters[evmChainID] = addrs[0] - } else { - // create key and fund it - _, err3 := app.GetKeyStore().Eth().Create(ctx, cid) - require.NoError(t, err3, "failed to create key for chain", evmChainID) - sendingKeys, err3 := app.GetKeyStore().Eth().EnabledAddressesForChain(ctx, cid) - require.NoError(t, err3) - require.Len(t, sendingKeys, 1) - transmitters[evmChainID] = sendingKeys[0] + // TODO: funding + case chainsel.FamilyAptos: + err = app.GetKeyStore().Aptos().EnsureKey(ctx) + require.NoError(t, err, "failed to create key for aptos") + + keys, err := app.GetKeyStore().Aptos().GetAll() + require.NoError(t, err) + require.Len(t, keys, 1) + + transmitter := keys[0] + transmitters[chain.Selector] = transmitter.ID() + + // TODO: funding + case chainsel.FamilyStarknet: + err = app.GetKeyStore().StarkNet().EnsureKey(ctx) + require.NoError(t, err, "failed to create key for starknet") + + keys, err := app.GetKeyStore().StarkNet().GetAll() + require.NoError(t, err) + require.Len(t, keys, 1) + + transmitter := keys[0] + transmitters[chain.Selector] = transmitter.ID() + + // TODO: funding + default: + // TODO: other transmission keys unsupported for now } - backend := chain.Client.(*Backend).Sim - fundAddress(t, chain.DeployerKey, transmitters[evmChainID], assets.Ether(1000).ToInt(), backend) - // need to look more into it, but it seems like with sim chains nodes are sending txs with 0x from address - fundAddress(t, chain.DeployerKey, common.Address{}, assets.Ether(1000).ToInt(), backend) } return Keys{ - PeerID: peerID, - CSA: csaKey, - TransmittersByEVMChainID: transmitters, - OCRKeyBundles: keybundles, + PeerID: peerID, + CSA: csaKey, + Transmitters: transmitters, + OCRKeyBundles: keybundles, } } From 6c5471129c92698e8d203cb489590ccd8fb88c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Tue, 7 Jan 2025 15:06:26 +0900 Subject: [PATCH 36/48] deployment: memory: Configure nodes with solana config too --- deployment/environment/memory/node.go | 80 ++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 14 deletions(-) diff --git a/deployment/environment/memory/node.go b/deployment/environment/memory/node.go index 4c06cb88893..60b271e834f 100644 --- a/deployment/environment/memory/node.go +++ b/deployment/environment/memory/node.go @@ -22,6 +22,8 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/utils/mailbox" "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + solcfg "github.com/smartcontractkit/chainlink-solana/pkg/solana/config" + "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/v2/core/capabilities" @@ -77,18 +79,34 @@ func NewNode( registryConfig deployment.CapabilityRegistryConfig, ) *Node { evmchains := make(map[uint64]EVMChain) + solchains := make(map[string]SolChain) for _, chain := range chains { // we're only mapping evm chains here - if family, err := chainsel.GetSelectorFamily(chain.Selector); err != nil || family != chainsel.FamilyEVM { - continue - } - evmChainID, err := chainsel.ChainIdFromSelector(chain.Selector) + family, err := chainsel.GetSelectorFamily(chain.Selector) if err != nil { t.Fatal(err) } - evmchains[evmChainID] = EVMChain{ - Backend: chain.Client.(*Backend).Sim, - DeployerKey: chain.DeployerKey, + switch family { + case chainsel.FamilyEVM: + evmChainID, err := chainsel.ChainIdFromSelector(chain.Selector) + if err != nil { + t.Fatal(err) + } + evmchains[evmChainID] = EVMChain{ + Backend: chain.Client.(*Backend).Sim, + DeployerKey: chain.DeployerKey, + } + case chainsel.FamilySolana: + solanaChainID, err := chainsel.GetChainIDFromSelector(chain.Selector) + if err != nil { + t.Fatal(err) + } + solchains[solanaChainID] = SolChain{ + // TODO: + // Backend: chain.Client.(*Backend).Sim, + // DeployerKey: chain.DeployerKey, + } + default: } } @@ -120,11 +138,17 @@ func NewNode( c.Log.Level = ptr(configv2.LogLevel(logLevel)) - var chainConfigs v2toml.EVMConfigs + var evmConfigs v2toml.EVMConfigs for chainID := range evmchains { - chainConfigs = append(chainConfigs, createConfigV2Chain(chainID)) + evmConfigs = append(evmConfigs, createConfigV2Chain(chainID)) + } + c.EVM = evmConfigs + + var solConfigs solcfg.TOMLConfigs + for chainID, chain := range solchains { + solConfigs = append(solConfigs, createSolanaChainConfig(chainID, chain)) } - c.EVM = chainConfigs + c.Solana = solConfigs }) // Set logging. @@ -164,6 +188,12 @@ func NewNode( CSAETHKeystore: kStore, } + solanaOpts := chainlink.SolanaFactoryConfig{ + Keystore: master.Solana(), + TOMLConfigs: cfg.SolanaConfigs(), + DS: db, + } + // Build Beholder auth ctx := tests.Context(t) require.NoError(t, master.Unlock(ctx, "password")) @@ -171,14 +201,19 @@ func NewNode( beholderAuthHeaders, csaPubKeyHex, err := keystore.BuildBeholderAuth(master) require.NoError(t, err) - // Build relayer factory with EVM. + loopRegistry := plugins.NewLoopRegistry(lggr.Named("LoopRegistry"), cfg.Tracing(), cfg.Telemetry(), beholderAuthHeaders, csaPubKeyHex) + + // Build relayer factory relayerFactory := chainlink.RelayerFactory{ Logger: lggr, - LoopRegistry: plugins.NewLoopRegistry(lggr.Named("LoopRegistry"), cfg.Tracing(), cfg.Telemetry(), beholderAuthHeaders, csaPubKeyHex), + LoopRegistry: loopRegistry, GRPCOpts: loop.GRPCOpts{}, CapabilitiesRegistry: capabilities.NewRegistry(lggr), } - initOps := []chainlink.CoreRelayerChainInitFunc{chainlink.InitEVM(context.Background(), relayerFactory, evmOpts)} + initOps := []chainlink.CoreRelayerChainInitFunc{ + chainlink.InitEVM(context.Background(), relayerFactory, evmOpts), + chainlink.InitSolana(context.Background(), relayerFactory, solanaOpts), + } rci, err := chainlink.NewCoreRelayerChainInteroperators(initOps...) require.NoError(t, err) @@ -194,7 +229,7 @@ func NewNode( RestrictedHTTPClient: &http.Client{}, AuditLogger: audit.NoopLogger, MailMon: mailMon, - LoopRegistry: plugins.NewLoopRegistry(lggr, cfg.Tracing(), cfg.Telemetry(), beholderAuthHeaders, csaPubKeyHex), + LoopRegistry: loopRegistry, }) require.NoError(t, err) t.Cleanup(func() { @@ -357,6 +392,23 @@ func createConfigV2Chain(chainID uint64) *v2toml.EVMConfig { } } +func createSolanaChainConfig(chainID string, chain SolChain) *solcfg.TOMLConfig { + chainConfig := solcfg.Chain{} + chainConfig.SetDefaults() + + return &solcfg.TOMLConfig{ + ChainID: &chainID, + Enabled: ptr(true), + Chain: chainConfig, + MultiNode: solcfg.MultiNodeConfig{}, + Nodes: []*solcfg.Node{{ + Name: ptr("primary"), + URL: &config.URL{}, // TODO: read from chain + SendOnly: false, + }}, + } +} + func ptr[T any](v T) *T { return &v } var _ keystore.Eth = &EthKeystoreSim{} From ba385638383a8a210707274f2c26e9e42d9fbe38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Tue, 7 Jan 2025 15:20:55 +0900 Subject: [PATCH 37/48] Use CTF to spin up the solana validator for in-memory tests --- deployment/environment/memory/chain.go | 88 ++++++++++++++-- deployment/environment/memory/environment.go | 8 +- deployment/environment/memory/node.go | 103 +++++++++++-------- deployment/environment/memory/node_test.go | 2 +- deployment/go.mod | 15 +-- deployment/go.sum | 29 +++--- deployment/solana_chain.go | 55 +++++++++- 7 files changed, 220 insertions(+), 80 deletions(-) diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 193def7ba08..10c51cf07bc 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -1,8 +1,13 @@ package memory import ( + "encoding/json" "math/big" + "os" + "path" + "strconv" "testing" + "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -11,7 +16,7 @@ import ( "github.com/ethereum/go-ethereum/ethclient/simulated" "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" - + "github.com/hashicorp/consul/sdk/freeport" "github.com/stretchr/testify/require" solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" @@ -19,6 +24,11 @@ import ( chainsel "github.com/smartcontractkit/chain-selectors" "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + + chainselectors "github.com/smartcontractkit/chain-selectors" + + "github.com/smartcontractkit/chainlink-testing-framework/framework" + "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" ) @@ -30,7 +40,9 @@ type EVMChain struct { type SolanaChain struct { Client *solRpc.Client - DeployerKey *solana.PrivateKey + URL string + WSURL string + DeployerKey solana.PrivateKey } func fundAddress(t *testing.T, from *bind.TransactOpts, to common.Address, amount *big.Int, backend *simulated.Backend) { @@ -80,13 +92,12 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { chains := make(map[uint64]SolanaChain) for i := 0; i < numChains; i++ { chainID := testSolanaChainSelectors[i] - url, _ := solTestUtil.SetupLocalSolNodeWithFlags(t) - admin, gerr := solana.NewRandomPrivateKey() - solTestUtil.FundTestAccounts(t, []solana.PublicKey{admin.PublicKey()}, url) - require.NoError(t, gerr) + solChain := solChain(t) + admin := solChain.DeployerKey + solTestUtil.FundTestAccounts(t, []solana.PublicKey{admin.PublicKey()}, solChain.URL) chains[chainID] = SolanaChain{ - Client: solRpc.New(url), - DeployerKey: &admin, + Client: solChain.Client, + DeployerKey: solChain.DeployerKey, } } return chains @@ -126,3 +137,64 @@ func evmChain(t *testing.T, numUsers int) EVMChain { Users: users, } } + +func solChain(t *testing.T) SolanaChain { + t.Helper() + + // initialize the docker network used by CTF + // TODO: framework.DefaultNetwork(once) is broken for me, use a static name for now + framework.DefaultNetworkName = "chainlink" + + deployerKey, err := solana.NewRandomPrivateKey() + require.NoError(t, err) + + t.TempDir() + // store the generated keypair somewhere + bytes, err := json.Marshal([]byte(deployerKey)) + require.NoError(t, err) + keypairPath := path.Join(t.TempDir(), "solana-keypair.json") + err = os.WriteFile(keypairPath, bytes, 0600) + require.NoError(t, err) + + port := freeport.GetOne(t) + + bcInput := &blockchain.Input{ + Type: "solana", + // TODO: randomize port + ChainID: chainselectors.SOLANA_DEVNET.ChainID, + PublicKey: deployerKey.PublicKey().String(), + Port: strconv.Itoa(port), + // TODO: ContractsDir & SolanaPrograms via env vars + } + output, err := blockchain.NewBlockchainNetwork(bcInput) + require.NoError(t, err) + + url := output.Nodes[0].HostHTTPUrl + wsURL := output.Nodes[0].HostWSUrl + + // Wait for api server to boot + client := solRpc.New(url) + var ready bool + for i := 0; i < 30; i++ { + time.Sleep(time.Second) + out, err := client.GetHealth(tests.Context(t)) + if err != nil || out != solRpc.HealthOk { + t.Logf("API server not ready yet (attempt %d)\n", i+1) + continue + } + ready = true + break + } + if !ready { + t.Logf("solana-test-validator is not ready after 30 attempts") + } + require.True(t, ready) + t.Logf("solana-test-validator is ready at %s", url) + + return SolanaChain{ + Client: client, + URL: url, + WSURL: wsURL, + DeployerKey: deployerKey, + } +} diff --git a/deployment/environment/memory/environment.go b/deployment/environment/memory/environment.go index 3c5fdc6e779..c9044792834 100644 --- a/deployment/environment/memory/environment.go +++ b/deployment/environment/memory/environment.go @@ -128,10 +128,10 @@ func generateMemoryChainSol(t *testing.T, inputs map[uint64]SolanaChain) map[uin chains[cid] = deployment.SolChain{ Selector: cid, Client: chain.Client, - DeployerKey: chain.DeployerKey, + DeployerKey: &chain.DeployerKey, Confirm: func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error { _, err := solCommomUtil.SendAndConfirm( - context.Background(), chain.Client, instructions, *chain.DeployerKey, solRpc.CommitmentConfirmed, opts..., + context.Background(), chain.Client, instructions, chain.DeployerKey, solRpc.CommitmentConfirmed, opts..., ) if err != nil { return err @@ -153,13 +153,13 @@ func NewNodes(t *testing.T, logLevel zapcore.Level, chains map[uint64]deployment // since we won't run a bootstrapper and a plugin oracle on the same // chainlink node in production. for i := 0; i < numBootstraps; i++ { - node := NewNode(t, ports[i], chains, logLevel, true /* bootstrap */, registryConfig) + node := NewNode(t, ports[i], chains, nil, logLevel, true /* bootstrap */, registryConfig) nodesByPeerID[node.Keys.PeerID.String()] = *node // Note in real env, this ID is allocated by JD. } for i := 0; i < numNodes; i++ { // grab port offset by numBootstraps, since above loop also takes some ports. - node := NewNode(t, ports[numBootstraps+i], chains, logLevel, false /* bootstrap */, registryConfig) + node := NewNode(t, ports[numBootstraps+i], chains, nil, logLevel, false /* bootstrap */, registryConfig) nodesByPeerID[node.Keys.PeerID.String()] = *node // Note in real env, this ID is allocated by JD. } diff --git a/deployment/environment/memory/node.go b/deployment/environment/memory/node.go index 60b271e834f..606c080be94 100644 --- a/deployment/environment/memory/node.go +++ b/deployment/environment/memory/node.go @@ -6,6 +6,7 @@ import ( "math/big" "net" "net/http" + "slices" "strconv" "testing" "time" @@ -74,39 +75,28 @@ func NewNode( t *testing.T, port int, // Port for the P2P V2 listener. chains map[uint64]deployment.Chain, + solchains map[uint64]deployment.SolChain, logLevel zapcore.Level, bootstrap bool, registryConfig deployment.CapabilityRegistryConfig, ) *Node { evmchains := make(map[uint64]EVMChain) - solchains := make(map[string]SolChain) for _, chain := range chains { - // we're only mapping evm chains here family, err := chainsel.GetSelectorFamily(chain.Selector) if err != nil { t.Fatal(err) } - switch family { - case chainsel.FamilyEVM: - evmChainID, err := chainsel.ChainIdFromSelector(chain.Selector) - if err != nil { - t.Fatal(err) - } - evmchains[evmChainID] = EVMChain{ - Backend: chain.Client.(*Backend).Sim, - DeployerKey: chain.DeployerKey, - } - case chainsel.FamilySolana: - solanaChainID, err := chainsel.GetChainIDFromSelector(chain.Selector) - if err != nil { - t.Fatal(err) - } - solchains[solanaChainID] = SolChain{ - // TODO: - // Backend: chain.Client.(*Backend).Sim, - // DeployerKey: chain.DeployerKey, - } - default: + // we're only mapping evm chains here, currently this list could also contain non-EVMs, e.g. Aptos + if family != chainsel.FamilyEVM { + continue + } + evmChainID, err := chainsel.ChainIdFromSelector(chain.Selector) + if err != nil { + t.Fatal(err) + } + evmchains[evmChainID] = EVMChain{ + Backend: chain.Client.(*Backend).Sim, + DeployerKey: chain.DeployerKey, } } @@ -146,7 +136,11 @@ func NewNode( var solConfigs solcfg.TOMLConfigs for chainID, chain := range solchains { - solConfigs = append(solConfigs, createSolanaChainConfig(chainID, chain)) + solanaChainID, err := chainsel.GetChainIDFromSelector(chainID) + if err != nil { + t.Fatal(err) + } + solConfigs = append(solConfigs, createSolanaChainConfig(solanaChainID, chain)) } c.Solana = solConfigs }) @@ -235,11 +229,14 @@ func NewNode( t.Cleanup(func() { require.NoError(t, db.Close()) }) - keys := CreateKeys(t, app, chains) + keys := CreateKeys(t, app, chains, solchains) return &Node{ - App: app, - Chains: maps.Keys(chains), + App: app, + Chains: slices.Concat( + maps.Keys(chains), + maps.Keys(solchains), + ), Keys: keys, Addr: net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: port}, IsBoostrap: bootstrap, @@ -254,7 +251,10 @@ type Keys struct { } func CreateKeys(t *testing.T, - app chainlink.Application, chains map[uint64]deployment.Chain) Keys { + app chainlink.Application, + chains map[uint64]deployment.Chain, + solchains map[uint64]deployment.SolChain, +) Keys { ctx := tests.Context(t) _, err := app.GetKeyStore().P2P().Create(ctx) require.NoError(t, err) @@ -306,7 +306,7 @@ func CreateKeys(t *testing.T, evmChainID, err := chainsel.ChainIdFromSelector(chain.Selector) require.NoError(t, err) - cid := big.NewInt(int64(evmChainID)) + cid := new(big.Int).SetUint64(evmChainID) addrs, err2 := app.GetKeyStore().Eth().EnabledAddressesForChain(ctx, cid) require.NoError(t, err2) var transmitter common.Address @@ -328,18 +328,6 @@ func CreateKeys(t *testing.T, fundAddress(t, chain.DeployerKey, transmitter, assets.Ether(1000).ToInt(), backend) // need to look more into it, but it seems like with sim chains nodes are sending txs with 0x from address fundAddress(t, chain.DeployerKey, common.Address{}, assets.Ether(1000).ToInt(), backend) - case chainsel.FamilySolana: - err = app.GetKeyStore().Solana().EnsureKey(ctx) - require.NoError(t, err, "failed to create key for solana") - - keys, err := app.GetKeyStore().Solana().GetAll() - require.NoError(t, err) - require.Len(t, keys, 1) - - transmitter := keys[0] - transmitters[chain.Selector] = transmitter.ID() - - // TODO: funding case chainsel.FamilyAptos: err = app.GetKeyStore().Aptos().EnsureKey(ctx) require.NoError(t, err, "failed to create key for aptos") @@ -369,6 +357,30 @@ func CreateKeys(t *testing.T, } } + for chain := range solchains { + ctype := chaintype.Solana + err = app.GetKeyStore().OCR2().EnsureKeys(ctx, ctype) + require.NoError(t, err) + keys, err := app.GetKeyStore().OCR2().GetAllOfType(ctype) + require.NoError(t, err) + require.Len(t, keys, 1) + keybundle := keys[0] + + keybundles[ctype] = keybundle + + err = app.GetKeyStore().Solana().EnsureKey(ctx) + require.NoError(t, err, "failed to create key for solana") + + solkeys, err := app.GetKeyStore().Solana().GetAll() + require.NoError(t, err) + require.Len(t, solkeys, 1) + + transmitter := solkeys[0] + transmitters[chain] = transmitter.ID() + + // TODO: funding + } + return Keys{ PeerID: peerID, CSA: csaKey, @@ -392,10 +404,15 @@ func createConfigV2Chain(chainID uint64) *v2toml.EVMConfig { } } -func createSolanaChainConfig(chainID string, chain SolChain) *solcfg.TOMLConfig { +func createSolanaChainConfig(chainID string, chain deployment.SolChain) *solcfg.TOMLConfig { chainConfig := solcfg.Chain{} chainConfig.SetDefaults() + url, err := config.ParseURL(chain.URL) + if err != nil { + panic(err) + } + return &solcfg.TOMLConfig{ ChainID: &chainID, Enabled: ptr(true), @@ -403,7 +420,7 @@ func createSolanaChainConfig(chainID string, chain SolChain) *solcfg.TOMLConfig MultiNode: solcfg.MultiNodeConfig{}, Nodes: []*solcfg.Node{{ Name: ptr("primary"), - URL: &config.URL{}, // TODO: read from chain + URL: url, SendOnly: false, }}, } diff --git a/deployment/environment/memory/node_test.go b/deployment/environment/memory/node_test.go index 78bc2db90e5..b9562f0290a 100644 --- a/deployment/environment/memory/node_test.go +++ b/deployment/environment/memory/node_test.go @@ -15,7 +15,7 @@ import ( func TestNode(t *testing.T) { chains, _ := NewMemoryChains(t, 3, 5) ports := freeport.GetN(t, 1) - node := NewNode(t, ports[0], chains, zapcore.DebugLevel, false, deployment.CapabilityRegistryConfig{}) + node := NewNode(t, ports[0], chains, nil, zapcore.DebugLevel, false, deployment.CapabilityRegistryConfig{}) // We expect 3 transmitter keys keys, err := node.App.GetKeyStore().Eth().GetAll(tests.Context(t)) require.NoError(t, err) diff --git a/deployment/go.mod b/deployment/go.mod index 813acf2ec05..778197eb167 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -33,6 +33,7 @@ require ( github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250103152858-8973fd0c912b github.com/smartcontractkit/chainlink-common v0.4.1-0.20250108194320-2ebd63bbb16e github.com/smartcontractkit/chainlink-protos/job-distributor v0.6.0 + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 github.com/smartcontractkit/libocr v0.0.0-20241223215956-e5b78d8e3919 github.com/stretchr/testify v1.10.0 @@ -117,8 +118,8 @@ require ( github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 // indirect github.com/cdk8s-team/cdk8s-core-go/cdk8s/v2 v2.7.5 // indirect @@ -159,6 +160,7 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect + github.com/creack/pty v1.1.21 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect @@ -188,7 +190,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect @@ -217,7 +219,7 @@ require ( github.com/go-openapi/validate v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-webauthn/webauthn v0.9.4 // indirect @@ -331,7 +333,7 @@ require ( github.com/mailru/easyjson v0.7.7 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.61 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -387,7 +389,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/prometheus v0.54.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/cors v1.10.1 // indirect @@ -411,7 +413,6 @@ require ( github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect github.com/smartcontractkit/chainlink-framework/multinode v0.0.0-20241220173418-09e17ddbeb20 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.4.0 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 // indirect github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 // indirect github.com/smartcontractkit/chainlink-testing-framework/seth v1.50.5 // indirect diff --git a/deployment/go.sum b/deployment/go.sum index d7a410108c0..0295efac27c 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -281,10 +281,11 @@ github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40 github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 h1:SjZ2GvvOononHOpK84APFuMvxqsk3tEIaKH/z4Rpu3g= @@ -412,8 +413,8 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= +github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -515,8 +516,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -603,8 +604,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-resty/resty/v2 v2.15.3 h1:bqff+hcqAflpiF591hhJzNdkRsFhlB96CYfBwSFvql8= @@ -1090,8 +1091,8 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -1304,8 +1305,8 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1678,7 +1679,6 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f h1:ketMxHg+vWm3yccyYiq+uK8D3fRmna2Fcj+awpQp84s= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2232,7 +2232,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index ba02e74f892..5bf6da172b0 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -1,8 +1,12 @@ package deployment import ( + "bytes" "fmt" + "os/exec" "strconv" + "strings" + "time" "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" @@ -14,11 +18,16 @@ import ( type SolChain struct { // Selectors used as canonical chain identifier. Selector uint64 - // RPC cient + // RPC client Client *solRpc.Client + URL string + WSURL string // TODO: raw private key for now, need to replace with a more secure way DeployerKey *solana.PrivateKey - Confirm func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error + // deploy uses the solana CLI which needs a keyfile + KeypairPath string + ProgramsPath string + Confirm func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error } func (c SolChain) String() string { @@ -41,3 +50,45 @@ func (c SolChain) Name() string { } return chainInfo.ChainName } + +func (c SolChain) DeployProgram(programName string) (string, error) { + programFile := fmt.Sprintf("%s/%s.so", c.ProgramsPath, programName) + programKeyPair := fmt.Sprintf("%s/%s-keypair.json", c.ProgramsPath, programName) + + // Construct the CLI command: solana program deploy + // TODO: @terry doing this on the fly + cmd := exec.Command("solana", "program", "deploy", programFile, "--keypair", c.KeypairPath, "--program-id", programKeyPair) + + // Capture the command output + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + // Run the command + if err := cmd.Run(); err != nil { + return "", fmt.Errorf("error deploying program: %s: %s", err.Error(), stderr.String()) + } + + // Parse and return the program ID + output := stdout.String() + + time.Sleep(5 * time.Second) // obviously need to do this better + return parseProgramID(output) +} + +// parseProgramID parses the program ID from the deploy output. +func parseProgramID(output string) (string, error) { + // Look for the program ID in the CLI output + // Example output: "Program Id: " + const prefix = "Program Id: " + startIdx := strings.Index(output, prefix) + if startIdx == -1 { + return "", errors.New("failed to find program ID in output") + } + startIdx += len(prefix) + endIdx := strings.Index(output[startIdx:], "\n") + if endIdx == -1 { + endIdx = len(output) + } + return output[startIdx : startIdx+endIdx], nil +} From e28b265463ab7083a2f99c0eb1217f7d73c05cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Wed, 8 Jan 2025 14:32:15 +0900 Subject: [PATCH 38/48] Use autopatchelf on solana binaries to make them usable on NixOS --- shell.nix | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/shell.nix b/shell.nix index 4065e7e3def..456bbd8a9c1 100644 --- a/shell.nix +++ b/shell.nix @@ -6,6 +6,53 @@ with pkgs; let nodePackages = pkgs.nodePackages.override {inherit nodejs;}; pnpm = pnpm_9; + version = "v2.0.18"; + getBinDerivation = + { + name, + filename, + sha256, + }: + pkgs.stdenv.mkDerivation rec { + inherit name; + url = "https://github.com/anza-xyz/agave/releases/download/${version}/${filename}"; + + nativeBuildInputs = [ + autoPatchelfHook + ]; + + autoPatchelfIgnoreMissingDeps = true; + + buildInputs = with pkgs; [stdenv.cc.cc.libgcc stdenv.cc.cc.lib] ++ lib.optionals stdenv.isLinux [ libudev-zero ]; + + src = pkgs.fetchzip { + inherit url sha256; + }; + + installPhase = '' + mkdir -p $out/bin + ls -lah $src + cp -r $src/bin/* $out/bin + ''; + }; + + solanaBinaries = { + x86_64-linux = getBinDerivation { + name = "solana-cli-x86_64-linux"; + filename = "solana-release-x86_64-unknown-linux-gnu.tar.bz2"; + ### BEGIN_LINUX_SHA256 ### + sha256 = "sha256-3FW6IMZeDtyU4GTsRIwT9BFLNzLPEuP+oiQdur7P13s="; + ### END_LINUX_SHA256 ### + }; + aarch64-apple-darwin = getBinDerivation { + name = "solana-cli-aarch64-apple-darwin"; + filename = "solana-release-aarch64-apple-darwin.tar.bz2"; + ### BEGIN_DARWIN_SHA256 ### + sha256 = "sha256-6VjycYU0NU0evXoqtGAZMYGHQEKijofnFQnBJNVsb6Q="; + ### END_DARWIN_SHA256 ### + }; + }; + mkShell' = mkShell.override { # The current nix default sdk for macOS fails to compile go projects, so we use a newer one for now. stdenv = @@ -50,9 +97,12 @@ in pkg-config libudev-zero libusb1 + solanaBinaries.x86_64-linux ] ++ lib.optionals isCrib [ nur.repos.goreleaser.goreleaser-pro patchelf + ] ++ pkgs.lib.optionals (pkgs.stdenv.isDarwin && pkgs.stdenv.hostPlatform.isAarch64) [ + solanaBinaries.aarch64-apple-darwin ]; shellHook = '' From 5429dc531d47d6105a34b2c322a7143d83371b8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Thu, 9 Jan 2025 17:16:18 +0900 Subject: [PATCH 39/48] memory: solana: Shut down the container when test terminates --- deployment/environment/memory/chain.go | 2 ++ deployment/go.mod | 1 + deployment/go.sum | 2 ++ integration-tests/go.mod | 1 + integration-tests/go.sum | 2 ++ 5 files changed, 8 insertions(+) diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 10c51cf07bc..f1940822087 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -18,6 +18,7 @@ import ( solRpc "github.com/gagliardetto/solana-go/rpc" "github.com/hashicorp/consul/sdk/freeport" "github.com/stretchr/testify/require" + "github.com/testcontainers/testcontainers-go" solTestUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" @@ -168,6 +169,7 @@ func solChain(t *testing.T) SolanaChain { } output, err := blockchain.NewBlockchainNetwork(bcInput) require.NoError(t, err) + testcontainers.CleanupContainer(t, output.Container) url := output.Nodes[0].HostHTTPUrl wsURL := output.Nodes[0].HostWSUrl diff --git a/deployment/go.mod b/deployment/go.mod index 778197eb167..853b88aa485 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -34,6 +34,7 @@ require ( github.com/smartcontractkit/chainlink-common v0.4.1-0.20250108194320-2ebd63bbb16e github.com/smartcontractkit/chainlink-protos/job-distributor v0.6.0 github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce + github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 github.com/smartcontractkit/libocr v0.0.0-20241223215956-e5b78d8e3919 github.com/stretchr/testify v1.10.0 diff --git a/deployment/go.sum b/deployment/go.sum index 0295efac27c..924a16e5534 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1404,6 +1404,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 h1:2bE4LrLsuXQFSigACeShaX45sTeM+Os/y6qDlR/8BCk= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 h1:T0kbw07Vb6xUyA9MIJZfErMgWseWi1zf7cYvRpoq7ug= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13/go.mod h1:1CKUOzoK+Ga19WuhRH9pxZ+qUUnrlIx108VEA6qSzeQ= github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 h1:VIxK8u0Jd0Q/VuhmsNm6Bls6Tb31H/sA3A/rbc5hnhg= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index b5cf870b900..8857bbd63c8 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -430,6 +430,7 @@ require ( github.com/smartcontractkit/chainlink-protos/orchestrator v0.4.0 // indirect github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 // indirect + github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20241009055228-33d0c0bf38de // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index b0f5879cb11..fe499b71558 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1425,6 +1425,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 h1:2bE4LrLsuXQFSigACeShaX45sTeM+Os/y6qDlR/8BCk= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2 h1:GDGrC5OGiV0RyM1znYWehSQXyZQWTOzrEeJRYmysPCE= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2/go.mod h1:DsT43c1oTBmp3iQkMcoZOoKThwZvt8X3Pz6UmznJ4GY= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.19 h1:9PMwKNqFKc5FXf4VchyD3CGzZelnSgi13fgVdT2X7T4= From c6a65cbe73931fa1efb49bad5db56592bcd4c514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Fri, 10 Jan 2025 12:12:16 +0900 Subject: [PATCH 40/48] go mod tidy --- core/scripts/go.mod | 12 +++--- core/scripts/go.sum | 73 ++++++++++++++++++++++++++++------- integration-tests/go.mod | 12 +++--- integration-tests/go.sum | 35 +++++++++-------- integration-tests/load/go.mod | 12 +++--- integration-tests/load/go.sum | 31 ++++++++------- 6 files changed, 112 insertions(+), 63 deletions(-) diff --git a/core/scripts/go.mod b/core/scripts/go.mod index dcef0492207..79addebee3f 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -82,8 +82,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect @@ -135,7 +135,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect @@ -164,7 +164,7 @@ require ( github.com/go-openapi/swag v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-webauthn/webauthn v0.9.4 // indirect github.com/go-webauthn/x v0.1.5 // indirect @@ -251,7 +251,7 @@ require ( github.com/maruel/natural v1.1.1 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mfridman/interpolate v0.0.2 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -284,7 +284,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/prometheus v0.54.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/cors v1.10.1 // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 779360c646d..5bd06c3e173 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -67,6 +67,8 @@ cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= @@ -148,6 +150,34 @@ github.com/avast/retry-go/v4 v4.6.0 h1:K9xNA+KeB8HHc2aWFuLb25Offp+0iVRXEvFx8IinR github.com/avast/retry-go/v4 v4.6.0/go.mod h1:gvWlPhBVsvBbLkVGDg/KwvBv0bEkCOLRRSHKIr2PyOE= github.com/aws/aws-sdk-go v1.54.19 h1:tyWV+07jagrNiCcGRzRhdtVjQs7Vy41NwsuOcl0IbVI= github.com/aws/aws-sdk-go v1.54.19/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.32.2 h1:AkNLZEyYMLnx/Q/mSKkcMqwNFXMAvFto9bNsHqcTduI= +github.com/aws/aws-sdk-go-v2 v1.32.2/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo= +github.com/aws/aws-sdk-go-v2/config v1.28.0 h1:FosVYWcqEtWNxHn8gB/Vs6jOlNwSoyOCA/g/sxyySOQ= +github.com/aws/aws-sdk-go-v2/config v1.28.0/go.mod h1:pYhbtvg1siOOg8h5an77rXle9tVG8T+BWLWAo7cOukc= +github.com/aws/aws-sdk-go-v2/credentials v1.17.41 h1:7gXo+Axmp+R4Z+AK8YFQO0ZV3L0gizGINCOWxSLY9W8= +github.com/aws/aws-sdk-go-v2/credentials v1.17.41/go.mod h1:u4Eb8d3394YLubphT4jLEwN1rLNq2wFOlT6OuxFwPzU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.17 h1:TMH3f/SCAWdNtXXVPPu5D6wrr4G5hI1rAxbcocKfC7Q= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.17/go.mod h1:1ZRXLdTpzdJb9fwTMXiLipENRxkGMTn1sfKexGllQCw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.21 h1:UAsR3xA31QGf79WzpG/ixT9FZvQlh5HY1NRqSHBNOCk= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.21/go.mod h1:JNr43NFf5L9YaG3eKTm7HQzls9J+A9YYcGI5Quh1r2Y= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.21 h1:6jZVETqmYCadGFvrYEQfC5fAQmlo80CeL5psbno6r0s= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.21/go.mod h1:1SR0GbLlnN3QUmYaflZNiH1ql+1qrSiB2vwcJ+4UM60= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.2 h1:s7NA1SOw8q/5c0wr8477yOPp0z+uBaXBnLE0XYb0POA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.2/go.mod h1:fnjjWyAW/Pj5HYOxl9LJqWtEwS7W2qgcRLWP+uWbss0= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.2 h1:Rrqru2wYkKQCS2IM5/JrgKUQIoNTqA6y/iuxkjzxC6M= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.2/go.mod h1:QuCURO98Sqee2AXmqDNxKXYFm2OEDAVAPApMqO0Vqnc= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.2 h1:bSYXVyUzoTHoKalBmwaZxs97HU9DWWI3ehHSAMa7xOk= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.2/go.mod h1:skMqY7JElusiOUjMJMOv1jJsP7YUg7DrhgqZZWuzu1U= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.2 h1:AhmO1fHINP9vFYUE0LHzCWg/LfUWUF+zFPEcY9QXb7o= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.2/go.mod h1:o8aQygT2+MVP0NaV6kbdE1YnnIM8RRVQzoeUH45GOdI= +github.com/aws/aws-sdk-go-v2/service/sts v1.32.2 h1:CiS7i0+FUe+/YY1GvIBLLrR/XNGZ4CtM1Ll0XavNuVo= +github.com/aws/aws-sdk-go-v2/service/sts v1.32.2/go.mod h1:HtaiBI8CjYoNVde8arShXb94UbQQi9L4EMr6D+xGBwo= +github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= +github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= @@ -184,10 +214,11 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= 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.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= @@ -254,6 +285,8 @@ github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7b github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -284,6 +317,8 @@ github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5s github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= +github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= +github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -378,8 +413,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -466,8 +501,8 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -846,6 +881,7 @@ github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLm github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= @@ -877,8 +913,8 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -916,6 +952,14 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= +github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= +github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1043,8 +1087,8 @@ github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC 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.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1088,6 +1132,7 @@ github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKl github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE= github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -1133,6 +1178,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 h1:2bE4LrLsuXQFSigACeShaX45sTeM+Os/y6qDlR/8BCk= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 h1:T0kbw07Vb6xUyA9MIJZfErMgWseWi1zf7cYvRpoq7ug= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13/go.mod h1:1CKUOzoK+Ga19WuhRH9pxZ+qUUnrlIx108VEA6qSzeQ= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= @@ -1212,6 +1259,8 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= +github.com/testcontainers/testcontainers-go v0.34.0 h1:5fbgF0vIN5u+nD3IWabQwRybuB4GY8G2HHgCkbMzMHo= +github.com/testcontainers/testcontainers-go v0.34.0/go.mod h1:6P/kMkQe8yqPHfPWNulFGdFHTD8HB2vLq/231xY2iPQ= github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a h1:YuO+afVc3eqrjiCUizNCxI53bl/BnPiVwXqLzqYTqgU= github.com/theodesp/go-heaps v0.0.0-20190520121037-88e35354fe0a/go.mod h1:/sfW47zCZp9FrtGcWyo1VjbgDaodxX9ovZvgLb/MxaA= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= @@ -1380,7 +1429,6 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= 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/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1915,7 +1963,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 8857bbd63c8..c1cc7259e5f 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -137,8 +137,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 // indirect github.com/cdk8s-team/cdk8s-core-go/cdk8s/v2 v2.7.5 // indirect @@ -208,7 +208,7 @@ require ( github.com/fatih/color v1.17.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect @@ -238,7 +238,7 @@ require ( github.com/go-openapi/validate v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-webauthn/webauthn v0.9.4 // indirect @@ -351,7 +351,7 @@ require ( github.com/mailru/easyjson v0.7.7 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.61 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -404,7 +404,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/prometheus v0.54.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/cors v1.10.1 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index fe499b71558..f234d2bc1fe 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -231,6 +231,8 @@ github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df h1:GSoSVRLoBaFpOOds6QyY1L8AX7uoY+Ln3BHc22W40X0= @@ -273,10 +275,11 @@ github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40 github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 h1:SjZ2GvvOononHOpK84APFuMvxqsk3tEIaKH/z4Rpu3g= @@ -416,8 +419,8 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= +github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -517,8 +520,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -605,8 +608,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-resty/resty/v2 v2.15.3 h1:bqff+hcqAflpiF591hhJzNdkRsFhlB96CYfBwSFvql8= @@ -1100,8 +1103,8 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -1181,8 +1184,8 @@ github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= -github.com/muesli/termenv v0.12.0 h1:KuQRUE3PgxRFWhq4gHvZtPSLCGDqM5q/cYr1pZ39ytc= -github.com/muesli/termenv v0.12.0/go.mod h1:WCCv32tusQ/EEZ5S8oUIIrC/nIuBcxCVqlN4Xfkv+7A= +github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg= +github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -1322,8 +1325,8 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1706,7 +1709,6 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f h1:ketMxHg+vWm3yccyYiq+uK8D3fRmna2Fcj+awpQp84s= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2264,7 +2266,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index ddcf26ebb71..da059e156b7 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -107,8 +107,8 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect - github.com/bytedance/sonic v1.11.6 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 // indirect github.com/cdk8s-team/cdk8s-core-go/cdk8s/v2 v2.7.5 // indirect @@ -179,7 +179,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/solana-go v1.12.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect @@ -209,7 +209,7 @@ require ( github.com/go-openapi/validate v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-viper/mapstructure/v2 v2.1.0 // indirect github.com/go-webauthn/webauthn v0.9.4 // indirect @@ -327,7 +327,7 @@ require ( github.com/mailru/easyjson v0.7.7 // 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.14 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/miekg/dns v1.1.61 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -382,7 +382,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/prometheus/prometheus v0.54.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/cors v1.10.1 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index c5dff273180..af79a1e642a 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -277,10 +277,11 @@ github.com/bxcodec/faker v2.0.1+incompatible h1:P0KUpUw5w6WJXwrPfv35oc91i4d8nf40 github.com/bxcodec/faker v2.0.1+incompatible/go.mod h1:BNzfpVdTwnFJ6GtfYTcQu6l6rHShT+veBxNCnjCx5XM= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 h1:NJvU4S8KEk1GnF6+FvlnzMD/8wXTj/mYJSG6Q4yu3Pw= github.com/bytecodealliance/wasmtime-go/v23 v23.0.0/go.mod h1:5YIL+Ouiww2zpO7u+iZ1U1G5NvmwQYaXdmCZQGjQM0U= -github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= -github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY= github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/c9s/goprocinfo v0.0.0-20210130143923-c95fcf8c64a8 h1:SjZ2GvvOononHOpK84APFuMvxqsk3tEIaKH/z4Rpu3g= @@ -410,8 +411,8 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= +github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -511,8 +512,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= github.com/gagliardetto/gofuzz v1.2.2 h1:XL/8qDMzcgvR4+CyRQW9UGdwPRPMHVJfqQ/uMvSUuQw= @@ -599,8 +600,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-resty/resty/v2 v2.15.3 h1:bqff+hcqAflpiF591hhJzNdkRsFhlB96CYfBwSFvql8= @@ -1094,8 +1095,8 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -1312,8 +1313,8 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1416,6 +1417,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 h1:2bE4LrLsuXQFSigACeShaX45sTeM+Os/y6qDlR/8BCk= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2 h1:GDGrC5OGiV0RyM1znYWehSQXyZQWTOzrEeJRYmysPCE= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2/go.mod h1:DsT43c1oTBmp3iQkMcoZOoKThwZvt8X3Pz6UmznJ4GY= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.19 h1:9PMwKNqFKc5FXf4VchyD3CGzZelnSgi13fgVdT2X7T4= @@ -1695,7 +1698,6 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f h1:ketMxHg+vWm3yccyYiq+uK8D3fRmna2Fcj+awpQp84s= go4.org/netipx v0.0.0-20230125063823-8449b0a6169f/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -2251,7 +2253,6 @@ nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYm pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= 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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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= From 480ed0b98dd794de04e11e286e0fe15dcbac8219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Fri, 10 Jan 2025 16:34:39 +0900 Subject: [PATCH 41/48] Use latest upstream CTF --- core/scripts/go.sum | 4 ++-- deployment/go.mod | 3 +-- deployment/go.sum | 4 ++-- integration-tests/go.mod | 2 +- integration-tests/go.sum | 4 ++-- integration-tests/load/go.sum | 8 ++++---- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 5bd06c3e173..21d260ebdb9 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1178,8 +1178,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 h1:2bE4LrLsuXQFSigACeShaX45sTeM+Os/y6qDlR/8BCk= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2 h1:nTUoe7GZLw17nPLV5t3Vgf4U4pf+VW0Uko5xpNiKdKU= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 h1:T0kbw07Vb6xUyA9MIJZfErMgWseWi1zf7cYvRpoq7ug= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13/go.mod h1:1CKUOzoK+Ga19WuhRH9pxZ+qUUnrlIx108VEA6qSzeQ= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= diff --git a/deployment/go.mod b/deployment/go.mod index 853b88aa485..f8875c64544 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -34,7 +34,7 @@ require ( github.com/smartcontractkit/chainlink-common v0.4.1-0.20250108194320-2ebd63bbb16e github.com/smartcontractkit/chainlink-protos/job-distributor v0.6.0 github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce - github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 + github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2 github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 github.com/smartcontractkit/libocr v0.0.0-20241223215956-e5b78d8e3919 github.com/stretchr/testify v1.10.0 @@ -161,7 +161,6 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect - github.com/creack/pty v1.1.21 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect diff --git a/deployment/go.sum b/deployment/go.sum index 924a16e5534..7e7fb74354d 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -1404,8 +1404,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 h1:2bE4LrLsuXQFSigACeShaX45sTeM+Os/y6qDlR/8BCk= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2 h1:nTUoe7GZLw17nPLV5t3Vgf4U4pf+VW0Uko5xpNiKdKU= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 h1:T0kbw07Vb6xUyA9MIJZfErMgWseWi1zf7cYvRpoq7ug= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13/go.mod h1:1CKUOzoK+Ga19WuhRH9pxZ+qUUnrlIx108VEA6qSzeQ= github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 h1:VIxK8u0Jd0Q/VuhmsNm6Bls6Tb31H/sA3A/rbc5hnhg= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index c1cc7259e5f..5b3322a4a44 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -430,7 +430,7 @@ require ( github.com/smartcontractkit/chainlink-protos/orchestrator v0.4.0 // indirect github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 // indirect - github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 // indirect + github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2 // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20241009055228-33d0c0bf38de // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index f234d2bc1fe..ea4e33c1e7b 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1428,8 +1428,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 h1:2bE4LrLsuXQFSigACeShaX45sTeM+Os/y6qDlR/8BCk= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2 h1:nTUoe7GZLw17nPLV5t3Vgf4U4pf+VW0Uko5xpNiKdKU= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2 h1:GDGrC5OGiV0RyM1znYWehSQXyZQWTOzrEeJRYmysPCE= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2/go.mod h1:DsT43c1oTBmp3iQkMcoZOoKThwZvt8X3Pz6UmznJ4GY= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.19 h1:9PMwKNqFKc5FXf4VchyD3CGzZelnSgi13fgVdT2X7T4= diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index af79a1e642a..b592320e882 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -411,8 +411,8 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= -github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= 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/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= @@ -1417,8 +1417,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7 h1:2bE4LrLsuXQFSigACeShaX45sTeM+Os/y6qDlR/8BCk= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250109062102-4e13e2e084f7/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2 h1:nTUoe7GZLw17nPLV5t3Vgf4U4pf+VW0Uko5xpNiKdKU= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2 h1:GDGrC5OGiV0RyM1znYWehSQXyZQWTOzrEeJRYmysPCE= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2/go.mod h1:DsT43c1oTBmp3iQkMcoZOoKThwZvt8X3Pz6UmznJ4GY= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.19 h1:9PMwKNqFKc5FXf4VchyD3CGzZelnSgi13fgVdT2X7T4= From 6483a932159c7f7d7cdddf5b93bae16dc46de21a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Fri, 10 Jan 2025 16:35:12 +0900 Subject: [PATCH 42/48] Add missing import --- deployment/solana_chain.go | 1 + 1 file changed, 1 insertion(+) diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index 5bf6da172b0..34410c2d06a 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -10,6 +10,7 @@ import ( "github.com/gagliardetto/solana-go" solRpc "github.com/gagliardetto/solana-go/rpc" + "github.com/pkg/errors" solCommomUtil "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" ) From ea35285b601591777f0b35c81f7fe3782dbd4a01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Fri, 10 Jan 2025 16:35:48 +0900 Subject: [PATCH 43/48] make modgraph --- go.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go.md b/go.md index ed41edee2b0..5a9081747f2 100644 --- a/go.md +++ b/go.md @@ -129,6 +129,8 @@ flowchart LR click chainlink-solana href "https://github.com/smartcontractkit/chainlink-solana" chainlink-starknet/relayer --> chainlink-common click chainlink-starknet/relayer href "https://github.com/smartcontractkit/chainlink-starknet" + chainlink-testing-framework/framework + click chainlink-testing-framework/framework href "https://github.com/smartcontractkit/chainlink-testing-framework" chainlink-testing-framework/havoc --> chainlink-testing-framework/lib/grafana click chainlink-testing-framework/havoc href "https://github.com/smartcontractkit/chainlink-testing-framework" chainlink-testing-framework/lib --> chainlink-testing-framework/seth @@ -145,6 +147,7 @@ flowchart LR chainlink/deployment --> ccip-owner-contracts chainlink/deployment --> chainlink-ccip/chains/solana chainlink/deployment --> chainlink-protos/job-distributor + chainlink/deployment --> chainlink-testing-framework/framework chainlink/deployment --> chainlink-testing-framework/lib chainlink/deployment --> chainlink/v2 click chainlink/deployment href "https://github.com/smartcontractkit/chainlink" @@ -200,6 +203,7 @@ flowchart LR click chainlink-protos-repo href "https://github.com/smartcontractkit/chainlink-protos" subgraph chainlink-testing-framework-repo[chainlink-testing-framework] + chainlink-testing-framework/framework chainlink-testing-framework/havoc chainlink-testing-framework/lib chainlink-testing-framework/lib/grafana From 1b3fdd67a68ba9ca73a47ffe837bcf55bd21902a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Fri, 10 Jan 2025 16:37:35 +0900 Subject: [PATCH 44/48] Use framework.DefaultNetwork() --- deployment/environment/memory/chain.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index f1940822087..d3aa3a614f4 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -6,6 +6,7 @@ import ( "os" "path" "strconv" + "sync" "testing" "time" @@ -139,12 +140,14 @@ func evmChain(t *testing.T, numUsers int) EVMChain { } } +var once = &sync.Once{} + func solChain(t *testing.T) SolanaChain { t.Helper() // initialize the docker network used by CTF - // TODO: framework.DefaultNetwork(once) is broken for me, use a static name for now - framework.DefaultNetworkName = "chainlink" + err := framework.DefaultNetwork(once) + require.NoError(t, err) deployerKey, err := solana.NewRandomPrivateKey() require.NoError(t, err) @@ -160,8 +163,7 @@ func solChain(t *testing.T) SolanaChain { port := freeport.GetOne(t) bcInput := &blockchain.Input{ - Type: "solana", - // TODO: randomize port + Type: "solana", ChainID: chainselectors.SOLANA_DEVNET.ChainID, PublicKey: deployerKey.PublicKey().String(), Port: strconv.Itoa(port), From bd14a29ad11cf51b52540d7884dd77cf15dac8e0 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Fri, 10 Jan 2025 11:08:04 +0000 Subject: [PATCH 45/48] changes --- deployment/environment/memory/chain.go | 77 ++++---------------- deployment/environment/memory/environment.go | 29 ++++++-- deployment/solana_chain.go | 40 ++-------- 3 files changed, 44 insertions(+), 102 deletions(-) diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 88483ec13fb..8281b0695f4 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -6,6 +6,7 @@ import ( "fmt" "math/big" "os" + "path/filepath" "strconv" "sync" "testing" @@ -31,9 +32,6 @@ import ( "github.com/smartcontractkit/chainlink-testing-framework/framework" "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" - - "github.com/smartcontractkit/chainlink-testing-framework/framework" - "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" ) type EVMChain struct { @@ -44,7 +42,7 @@ type EVMChain struct { type SolanaChain struct { Client *solRpc.Client - DeployerKey *solana.PrivateKey + DeployerKey solana.PrivateKey URL string WSURL string KeypairPath string @@ -70,45 +68,6 @@ func fundAddress(t *testing.T, from *bind.TransactOpts, to common.Address, amoun backend.Commit() } -func generateAndStoreKeypair() (solana.PrivateKey, string, error) { - // Generate a random private key - privateKey, err := solana.NewRandomPrivateKey() - if err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to generate private key: %w", err) - } - - privateKeyBytes, err := base58.Decode(privateKey.String()) - if err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to decode Base58 private key: %w", err) - } - - intArray := make([]int, len(privateKeyBytes)) - for i, b := range privateKeyBytes { - intArray[i] = int(b) - } - - // Marshal the integer array to JSON - keypairJSON, err := json.Marshal(intArray) - if err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to marshal keypair to JSON: %w", err) - } - - // Create a temporary file - tempFile, err := os.CreateTemp("", "solana-keypair-*.json") - if err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to create temporary file: %w", err) - } - defer tempFile.Close() - - // Write the keypair data to the file - if err := os.WriteFile(tempFile.Name(), keypairJSON, 0600); err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to write keypair to file: %w", err) - } - - // Return the path to the temporary file - return privateKey, tempFile.Name(), nil -} - func GenerateChains(t *testing.T, numChains int, numUsers int) map[uint64]EVMChain { chains := make(map[uint64]EVMChain) for i := 0; i < numChains; i++ { @@ -128,43 +87,39 @@ func getTestSolanaChainSelectors() []uint64 { return result } -func generateAndStoreKeypair() (solana.PrivateKey, string, error) { - // Generate a random private key +func GenerateSolanaKeypair(t testing.TB) (solana.PrivateKey, string, error) { + // Create a temporary directory that will be cleaned up after the test + tmpDir := t.TempDir() + privateKey, err := solana.NewRandomPrivateKey() if err != nil { return solana.PrivateKey{}, "", fmt.Errorf("failed to generate private key: %w", err) } + // Convert private key bytes to JSON array privateKeyBytes, err := base58.Decode(privateKey.String()) if err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to decode Base58 private key: %w", err) + return solana.PrivateKey{}, "", fmt.Errorf("failed to decode private key: %w", err) } + // Convert bytes to array of integers for JSON intArray := make([]int, len(privateKeyBytes)) for i, b := range privateKeyBytes { intArray[i] = int(b) } - // Marshal the integer array to JSON keypairJSON, err := json.Marshal(intArray) if err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to marshal keypair to JSON: %w", err) - } - - // Create a temporary file - tempFile, err := os.CreateTemp("", "solana-keypair-*.json") - if err != nil { - return solana.PrivateKey{}, "", fmt.Errorf("failed to create temporary file: %w", err) + return solana.PrivateKey{}, "", fmt.Errorf("failed to marshal keypair: %w", err) } - defer tempFile.Close() - // Write the keypair data to the file - if err := os.WriteFile(tempFile.Name(), keypairJSON, 0600); err != nil { + // Create the keypair file in the temporary directory + keypairPath := filepath.Join(tmpDir, "solana-keypair.json") + if err := os.WriteFile(keypairPath, keypairJSON, 0600); err != nil { return solana.PrivateKey{}, "", fmt.Errorf("failed to write keypair to file: %w", err) } - // Return the path to the temporary file - return privateKey, tempFile.Name(), nil + return privateKey, keypairPath, nil } func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { @@ -175,7 +130,7 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { chains := make(map[uint64]SolanaChain) for i := 0; i < numChains; i++ { chainID := testSolanaChainSelectors[i] - admin, keypairPath, err := generateAndStoreKeypair() + admin, keypairPath, err := GenerateSolanaKeypair(t) require.NoError(t, err) url, wsURL, err := solChain(t, chainID, &admin) require.NoError(t, err) @@ -185,7 +140,7 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { require.NotEqual(t, 0, balance.Value) // auto funded 500000000.000000000 SOL chains[chainID] = SolanaChain{ Client: client, - DeployerKey: &admin, + DeployerKey: admin, URL: url, WSURL: wsURL, KeypairPath: keypairPath, diff --git a/deployment/environment/memory/environment.go b/deployment/environment/memory/environment.go index 4b058bd5dc7..fca738bee2c 100644 --- a/deployment/environment/memory/environment.go +++ b/deployment/environment/memory/environment.go @@ -3,6 +3,8 @@ package memory import ( "context" "fmt" + "path/filepath" + "runtime" "strconv" "testing" "time" @@ -30,6 +32,20 @@ const ( Memory = "memory" ) +var ( + // Instead of a relative path, use runtime.Caller or go-bindata + ProgramsPath = getProgramsPath() +) + +func getProgramsPath() string { + // Get the directory of the current file (environment.go) + _, currentFile, _, _ := runtime.Caller(0) + // Go up to the root of the deployment package + rootDir := filepath.Dir(filepath.Dir(filepath.Dir(currentFile))) + // Construct the absolute path + return filepath.Join(rootDir, "ccip/changeset/internal", "solana_contracts") +} + type MemoryEnvironmentConfig struct { Chains int SolChains int @@ -126,12 +142,13 @@ func generateMemoryChainSol(t *testing.T, inputs map[uint64]SolanaChain) map[uin for cid, chain := range inputs { chain := chain chains[cid] = deployment.SolChain{ - Selector: cid, - Client: chain.Client, - DeployerKey: chain.DeployerKey, - URL: chain.URL, - WSURL: chain.WSURL, - KeypairPath: chain.KeypairPath, + Selector: cid, + Client: chain.Client, + DeployerKey: &chain.DeployerKey, + URL: chain.URL, + WSURL: chain.WSURL, + KeypairPath: chain.KeypairPath, + ProgramsPath: ProgramsPath, Confirm: func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error { _, err := solCommomUtil.SendAndConfirm( context.Background(), chain.Client, instructions, chain.DeployerKey, solRpc.CommitmentConfirmed, opts..., diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index 91b583293dd..512cfba73e8 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -5,10 +5,7 @@ import ( "fmt" "os/exec" "strconv" -<<<<<<< HEAD -======= "strings" ->>>>>>> b11f530614feb47581ebb5dfc713ad27047be88f "time" "github.com/gagliardetto/solana-go" @@ -19,10 +16,6 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/logger" ) -var ( - deployBinPath = "./internal/solana_contracts" -) - // SolChain represents a Solana chain. type SolChain struct { // Selectors used as canonical chain identifier. @@ -34,7 +27,7 @@ type SolChain struct { // TODO: raw private key for now, need to replace with a more secure way DeployerKey *solana.PrivateKey Confirm func(instructions []solana.Instruction, opts ...solCommomUtil.TxModifier) error - + // deploy uses the solana CLI which needs a keyfile KeypairPath string ProgramsPath string @@ -61,29 +54,13 @@ func (c SolChain) Name() string { return chainInfo.ChainName } -<<<<<<< HEAD func (c SolChain) DeployProgram(logger logger.Logger, programName string) (string, error) { - programFile := fmt.Sprintf("%s/%s.so", deployBinPath, programName) - programKeyPair := fmt.Sprintf("%s/%s-keypair.json", deployBinPath, programName) - - logger.Infow("c.KeypairPath", "path", c.KeypairPath) - logger.Infow("private key", "key", c.DeployerKey) - key, err := solana.PrivateKeyFromSolanaKeygenFile(c.KeypairPath) - if err != nil { - return "", fmt.Errorf("failed to load private key: %w", err) - } - logger.Infow("program key pair", "key", key) - cmd := exec.Command("solana", "program", "deploy", programFile, "--keypair", c.KeypairPath, "--program-id", programKeyPair, "--url", c.URL) - // cmd := exec.Command("solana", "program", "deploy", programFile, "--upgrade-authority", c.DeployerKey.PublicKey().String(), "--program-id", programKeyPair, "--url", c.URL) -======= -func (c SolChain) DeployProgram(programName string) (string, error) { programFile := fmt.Sprintf("%s/%s.so", c.ProgramsPath, programName) programKeyPair := fmt.Sprintf("%s/%s-keypair.json", c.ProgramsPath, programName) + logger.Infow("Deploying program", "programFile", programFile, "programKeyPair", programKeyPair, "keypairPath", c.KeypairPath, "url", c.URL) // Construct the CLI command: solana program deploy - // TODO: @terry doing this on the fly - cmd := exec.Command("solana", "program", "deploy", programFile, "--keypair", c.KeypairPath, "--program-id", programKeyPair) ->>>>>>> b11f530614feb47581ebb5dfc713ad27047be88f + cmd := exec.Command("solana", "program", "deploy", programFile, "--program-id", programKeyPair, "--keypair", c.KeypairPath, "--url", c.URL) // Capture the command output var stdout, stderr bytes.Buffer @@ -98,7 +75,8 @@ func (c SolChain) DeployProgram(programName string) (string, error) { // Parse and return the program ID output := stdout.String() - time.Sleep(5 * time.Second) // obviously need to do this better + // TODO: obviously need to do this better + time.Sleep(5 * time.Second) return parseProgramID(output) } @@ -107,20 +85,12 @@ func parseProgramID(output string) (string, error) { // Look for the program ID in the CLI output // Example output: "Program Id: " const prefix = "Program Id: " -<<<<<<< HEAD - startIdx := bytes.Index([]byte(output), []byte(prefix)) -======= startIdx := strings.Index(output, prefix) ->>>>>>> b11f530614feb47581ebb5dfc713ad27047be88f if startIdx == -1 { return "", errors.New("failed to find program ID in output") } startIdx += len(prefix) -<<<<<<< HEAD - endIdx := bytes.Index([]byte(output[startIdx:]), []byte("\n")) -======= endIdx := strings.Index(output[startIdx:], "\n") ->>>>>>> b11f530614feb47581ebb5dfc713ad27047be88f if endIdx == -1 { endIdx = len(output) } From c97c9aa3fdb48ba97a6b557ceec9f01b57612234 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Fri, 10 Jan 2025 11:13:34 +0000 Subject: [PATCH 46/48] tidying --- core/scripts/go.sum | 5 ----- deployment/go.mod | 2 +- integration-tests/go.sum | 5 ----- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/core/scripts/go.sum b/core/scripts/go.sum index ab82da30603..21d260ebdb9 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1178,13 +1178,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= -<<<<<<< HEAD -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1 h1:573e5JlpGOjY/RDJziG62Cw5D66xghWHJcmfWvv6yc4= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= -======= github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2 h1:nTUoe7GZLw17nPLV5t3Vgf4U4pf+VW0Uko5xpNiKdKU= github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= ->>>>>>> 1b3fdd67a68ba9ca73a47ffe837bcf55bd21902a github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13 h1:T0kbw07Vb6xUyA9MIJZfErMgWseWi1zf7cYvRpoq7ug= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.13/go.mod h1:1CKUOzoK+Ga19WuhRH9pxZ+qUUnrlIx108VEA6qSzeQ= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= diff --git a/deployment/go.mod b/deployment/go.mod index c0ff0a3523b..1fdd31a0d2e 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -18,6 +18,7 @@ require ( github.com/aws/aws-sdk-go v1.54.19 github.com/deckarep/golang-set/v2 v2.6.0 github.com/ethereum/go-ethereum v1.14.11 + github.com/gagliardetto/binary v0.8.0 github.com/gagliardetto/solana-go v1.12.0 github.com/go-resty/resty/v2 v2.15.3 github.com/google/uuid v1.6.0 @@ -192,7 +193,6 @@ require ( github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.6 // indirect - github.com/gagliardetto/binary v0.8.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 5e5ad18c0ee..ea4e33c1e7b 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1428,13 +1428,8 @@ github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dc github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241223151630-eac4f1508dce/go.mod h1:qq+nW0JDnCCGMf2c38ZHjH8xgkAQnXKighjJr5JdDNE= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8 h1:tNS7U9lrxkFvEuyxQv11HHOiV9LPDGC9wYEy+yM/Jv4= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241202202529-2033490e77b8/go.mod h1:EBrEgcdIbwepqguClkv8Ohy7CbyWSJaE4EC9aBJlQK0= -<<<<<<< HEAD -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1 h1:573e5JlpGOjY/RDJziG62Cw5D66xghWHJcmfWvv6yc4= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.1/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= -======= github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2 h1:nTUoe7GZLw17nPLV5t3Vgf4U4pf+VW0Uko5xpNiKdKU= github.com/smartcontractkit/chainlink-testing-framework/framework v0.4.2-0.20250110073248-456673e8eea2/go.mod h1:mMUqvS3BZfvN1OfK4OFTYf1+T0X6nwmSXJM2keaPsSM= ->>>>>>> 1b3fdd67a68ba9ca73a47ffe837bcf55bd21902a github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2 h1:GDGrC5OGiV0RyM1znYWehSQXyZQWTOzrEeJRYmysPCE= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.2/go.mod h1:DsT43c1oTBmp3iQkMcoZOoKThwZvt8X3Pz6UmznJ4GY= github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.19 h1:9PMwKNqFKc5FXf4VchyD3CGzZelnSgi13fgVdT2X7T4= From dc0c1a7d933b0d67df2dd0cf4515642e86a8feb4 Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Fri, 10 Jan 2025 13:47:57 +0000 Subject: [PATCH 47/48] ignoring keypair if not provided --- deployment/ccip/changeset/cs_deploy_chain.go | 98 ++++++++++++------- .../ccip/changeset/cs_deploy_chain_test.go | 42 +------- .../solana_contracts/ccip_router-keypair.json | 1 - deployment/ccip/changeset/test_helpers.go | 6 ++ deployment/environment/memory/chain.go | 18 +++- deployment/solana_chain.go | 30 +++++- 6 files changed, 108 insertions(+), 87 deletions(-) delete mode 100644 deployment/ccip/changeset/internal/solana_contracts/ccip_router-keypair.json diff --git a/deployment/ccip/changeset/cs_deploy_chain.go b/deployment/ccip/changeset/cs_deploy_chain.go index f311aa50c0b..334715d50b3 100644 --- a/deployment/ccip/changeset/cs_deploy_chain.go +++ b/deployment/ccip/changeset/cs_deploy_chain.go @@ -473,6 +473,17 @@ func solRouterProgramData(e deployment.Environment, chain deployment.SolChain, c return programData, nil } +func checkRouterInitialized(e deployment.Environment, chain deployment.SolChain, ccipRouterProgram solana.PublicKey) (bool, error) { + routerConfigPDA := GetRouterConfigPDA(ccipRouterProgram) + routerConfigInfo, err := chain.Client.GetAccountInfoWithOpts(e.GetContext(), routerConfigPDA, &solRpc.GetAccountInfoOpts{ + Commitment: solRpc.CommitmentConfirmed, + }) + if err != nil { + return false, nil + } + return routerConfigInfo != nil && len(routerConfigInfo.Value.Data.GetBinary()) > 0, nil +} + func deployChainContractsSolana( e deployment.Environment, chain deployment.SolChain, @@ -490,8 +501,9 @@ func deployChainContractsSolana( linkTokenContract := chainState.LinkToken e.Logger.Infow("link token", "addr", linkTokenContract.String()) + var ccipRouterProgram solana.PublicKey if chainState.SolCcipRouter.IsZero() { - // deploy and initialize router + //deploy router programID, err := chain.DeployProgram(e.Logger, "ccip_router") if err != nil { return fmt.Errorf("failed to deploy program: %w", err) @@ -500,47 +512,61 @@ func deployChainContractsSolana( tv := deployment.NewTypeAndVersion("SolCcipRouter", deployment.Version1_0_0) e.Logger.Infow("Deployed contract", "Contract", tv.String(), "addr", programID, "chain", chain.String()) - ccipRouterProgram := solana.MustPublicKeyFromBase58(programID) - programData, err := solRouterProgramData(e, chain, ccipRouterProgram) + ccipRouterProgram = solana.MustPublicKeyFromBase58(programID) + err = ab.Save(chain.Selector, programID, tv) if err != nil { - return fmt.Errorf("failed to get solana router program data: %w", err) + return fmt.Errorf("failed to save address: %w", err) } + } else { + e.Logger.Infow("Using existing router", "addr", chainState.SolCcipRouter.String()) + ccipRouterProgram = chainState.SolCcipRouter + } + ccip_router.SetProgramID(ccipRouterProgram) - ccip_router.SetProgramID(ccipRouterProgram) - - defaultGasLimit := solBinary.Uint128{Lo: 3000, Hi: 0, Endianness: nil} - - instruction, err := ccip_router.NewInitializeInstruction( - chain.Selector, // chain selector - defaultGasLimit, // default gas limit - true, // allow out of order execution - EnableExecutionAfter, // period to wait before allowing manual execution - solana.PublicKey{}, - GetRouterConfigPDA(ccipRouterProgram), - GetRouterStatePDA(ccipRouterProgram), - chain.DeployerKey.PublicKey(), - solana.SystemProgramID, - ccipRouterProgram, - programData.Address, - GetExternalExecutionConfigPDA(ccipRouterProgram), - GetExternalTokenPoolsSignerPDA(ccipRouterProgram), - ).ValidateAndBuild() + // check if solana router is initalised + initialized, err := checkRouterInitialized(e, chain, ccipRouterProgram) + if err != nil { + return err + } + if initialized { + e.Logger.Infow("Router already initialized, skipping initialization", "chain", chain.String()) + return nil + } - if err != nil { - return fmt.Errorf("failed to build instruction: %w", err) - } - err = chain.Confirm([]solana.Instruction{instruction}) + programData, err := solRouterProgramData(e, chain, ccipRouterProgram) + if err != nil { + return fmt.Errorf("failed to get solana router program data: %w", err) + } + + defaultGasLimit := solBinary.Uint128{Lo: 3000, Hi: 0, Endianness: nil} + + instruction, err := ccip_router.NewInitializeInstruction( + chain.Selector, // chain selector + defaultGasLimit, // default gas limit + true, // allow out of order execution + EnableExecutionAfter, // period to wait before allowing manual execution + solana.PublicKey{}, + GetRouterConfigPDA(ccipRouterProgram), + GetRouterStatePDA(ccipRouterProgram), + chain.DeployerKey.PublicKey(), + solana.SystemProgramID, + ccipRouterProgram, + programData.Address, + GetExternalExecutionConfigPDA(ccipRouterProgram), + GetExternalTokenPoolsSignerPDA(ccipRouterProgram), + ).ValidateAndBuild() - if err != nil { - return fmt.Errorf("failed to confirm instructions: %w", err) - } + if err != nil { + return fmt.Errorf("failed to build instruction: %w", err) + } + err = chain.Confirm([]solana.Instruction{instruction}) - err = ab.Save(chain.Selector, programID, tv) - if err != nil { - return fmt.Errorf("failed to save address: %w", err) - } - //TODO: deploy token pool contract - //TODO: log errors + if err != nil { + return fmt.Errorf("failed to confirm instructions: %w", err) } + + //TODO: deploy token pool contract + //TODO: log errors + return nil } diff --git a/deployment/ccip/changeset/cs_deploy_chain_test.go b/deployment/ccip/changeset/cs_deploy_chain_test.go index 5ed2f6fdc3a..77a01e573c4 100644 --- a/deployment/ccip/changeset/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/cs_deploy_chain_test.go @@ -3,15 +3,11 @@ package changeset import ( "encoding/json" "fmt" - "os" "testing" - "github.com/mr-tron/base58" "github.com/stretchr/testify/require" "go.uber.org/zap/zapcore" - "github.com/gagliardetto/solana-go" - "github.com/smartcontractkit/chainlink/deployment" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" @@ -48,6 +44,8 @@ func TestDeployChainContractsChangeset(t *testing.T) { ChainSelector: chain, }) } + + SavePreloadedSolAddresses(e, solChainSelectors[0]) e, err = commonchangeset.ApplyChangesets(t, e, nil, []commonchangeset.ChangesetApplication{ { Changeset: commonchangeset.WrapChangeSet(DeployHomeChain), @@ -131,39 +129,3 @@ func TestDeployCCIPContracts(t *testing.T) { require.NoError(t, err) fmt.Println(string(b)) } - -// IGNORE -func TestSolanaKeygen(t *testing.T) { - privateKey, _ := solana.NewRandomPrivateKey() - fmt.Println(privateKey.String()) - - // Decode the Base58 private key - privateKeyBytes, err := base58.Decode(privateKey.String()) - if err != nil { - fmt.Printf("Error decoding Base58 private key: %v\n", err) - return - } - fmt.Printf("Bytes after decode: %v\n", privateKeyBytes) - - // Convert bytes to array of integers - intArray := make([]int, len(privateKeyBytes)) - for i, b := range privateKeyBytes { - intArray[i] = int(b) - } - - // Marshal the integer array to JSON - keypairJSON, err := json.Marshal(intArray) - if err != nil { - fmt.Printf("Error marshaling to JSON: %v\n", err) - return - } - outputFilePath := "/Users/yashvardhan/.config/solana/myid.json" - if err := os.WriteFile(outputFilePath, keypairJSON, 0600); err != nil { - fmt.Printf("Error writing keypair to file: %v\n", err) - return - } - - pk, err := solana.PrivateKeyFromSolanaKeygenFile(outputFilePath) - require.NoError(t, err) - require.Equal(t, pk.String(), privateKey.String()) -} diff --git a/deployment/ccip/changeset/internal/solana_contracts/ccip_router-keypair.json b/deployment/ccip/changeset/internal/solana_contracts/ccip_router-keypair.json deleted file mode 100644 index ebf7818d328..00000000000 --- a/deployment/ccip/changeset/internal/solana_contracts/ccip_router-keypair.json +++ /dev/null @@ -1 +0,0 @@ -[101,238,189,81,99,141,117,176,11,49,33,2,218,239,163,125,209,246,2,133,177,222,143,89,48,80,244,247,247,141,216,183,145,28,85,130,47,80,170,11,121,40,143,49,171,88,54,235,39,125,182,141,1,69,71,62,148,230,124,191,22,218,25,173] \ No newline at end of file diff --git a/deployment/ccip/changeset/test_helpers.go b/deployment/ccip/changeset/test_helpers.go index 03c3ffb175d..2958dc0a778 100644 --- a/deployment/ccip/changeset/test_helpers.go +++ b/deployment/ccip/changeset/test_helpers.go @@ -1257,3 +1257,9 @@ func DefaultRouterMessage(receiverAddress common.Address) router.ClientEVM2AnyMe ExtraArgs: nil, } } + +func SavePreloadedSolAddresses(e deployment.Environment, solChainSelector uint64) { + tv := deployment.NewTypeAndVersion("SolCcipRouter", deployment.Version1_0_0) + // TODO: this should be solTestConfig.CCIPRouterProgram + e.ExistingAddresses.Save(solChainSelector, "AmTB9SpwRjjKd3dHjFJiQoVt2bSzbzFnzBHCSpX4k9MW", tv) +} diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index 8281b0695f4..b1314b6bc8a 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -29,6 +29,7 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + solTestConfig "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/config" "github.com/smartcontractkit/chainlink-testing-framework/framework" "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" @@ -195,12 +196,19 @@ func solChain(t *testing.T, chainID uint64, adminKey *solana.PrivateKey) (string port := freeport.GetOne(t) + fmt.Println(solTestConfig.CcipRouterProgram.String()) + bcInput := &blockchain.Input{ - Type: "solana", - ChainID: strconv.FormatUint(chainID, 10), - PublicKey: adminKey.PublicKey().String(), - Port: strconv.Itoa(port), - // TODO: ContractsDir & SolanaPrograms via env vars + Type: "solana", + ChainID: strconv.FormatUint(chainID, 10), + PublicKey: adminKey.PublicKey().String(), + Port: strconv.Itoa(port), + ContractsDir: ProgramsPath, + // TODO: this should be solTestConfig.CCIPRouterProgram + // TODO: make this a function + SolanaPrograms: map[string]string{ + "ccip_router": "AmTB9SpwRjjKd3dHjFJiQoVt2bSzbzFnzBHCSpX4k9MW", + }, } output, err := blockchain.NewBlockchainNetwork(bcInput) require.NoError(t, err) diff --git a/deployment/solana_chain.go b/deployment/solana_chain.go index 512cfba73e8..825f88c4dcc 100644 --- a/deployment/solana_chain.go +++ b/deployment/solana_chain.go @@ -3,7 +3,9 @@ package deployment import ( "bytes" "fmt" + "os" "os/exec" + "path/filepath" "strconv" "strings" "time" @@ -55,12 +57,30 @@ func (c SolChain) Name() string { } func (c SolChain) DeployProgram(logger logger.Logger, programName string) (string, error) { - programFile := fmt.Sprintf("%s/%s.so", c.ProgramsPath, programName) - programKeyPair := fmt.Sprintf("%s/%s-keypair.json", c.ProgramsPath, programName) + programFile := filepath.Join(c.ProgramsPath, programName+".so") + programKeyPair := filepath.Join(c.ProgramsPath, programName+"-keypair.json") - logger.Infow("Deploying program", "programFile", programFile, "programKeyPair", programKeyPair, "keypairPath", c.KeypairPath, "url", c.URL) - // Construct the CLI command: solana program deploy - cmd := exec.Command("solana", "program", "deploy", programFile, "--program-id", programKeyPair, "--keypair", c.KeypairPath, "--url", c.URL) + // Base command with required args + baseArgs := []string{ + "program", "deploy", + programFile, //.so file + "--keypair", c.KeypairPath, //admin, upgradeAuthority + "--url", c.URL, //rpc url + } + + var cmd *exec.Cmd + if _, err := os.Stat(programKeyPair); err == nil { + // Keypair exists, include program-id + logger.Infow("Deploying program with existing keypair", + "programFile", programFile, + "programKeyPair", programKeyPair) + cmd = exec.Command("solana", append(baseArgs, "--program-id", programKeyPair)...) + } else { + // Keypairs wont be created for devenvs + logger.Infow("Deploying new program", + "programFile", programFile) + cmd = exec.Command("solana", baseArgs...) + } // Capture the command output var stdout, stderr bytes.Buffer From 32776f1d1dcd2c9a356ea4ae12e88dbab34c240f Mon Sep 17 00:00:00 2001 From: yashnevatia Date: Fri, 10 Jan 2025 13:56:03 +0000 Subject: [PATCH 48/48] fix --- deployment/environment/memory/chain.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/deployment/environment/memory/chain.go b/deployment/environment/memory/chain.go index b1314b6bc8a..75e67546b04 100644 --- a/deployment/environment/memory/chain.go +++ b/deployment/environment/memory/chain.go @@ -29,7 +29,6 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" - solTestConfig "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/config" "github.com/smartcontractkit/chainlink-testing-framework/framework" "github.com/smartcontractkit/chainlink-testing-framework/framework/components/blockchain" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" @@ -88,7 +87,7 @@ func getTestSolanaChainSelectors() []uint64 { return result } -func GenerateSolanaKeypair(t testing.TB) (solana.PrivateKey, string, error) { +func generateSolanaKeypair(t testing.TB) (solana.PrivateKey, string, error) { // Create a temporary directory that will be cleaned up after the test tmpDir := t.TempDir() @@ -131,7 +130,7 @@ func GenerateChainsSol(t *testing.T, numChains int) map[uint64]SolanaChain { chains := make(map[uint64]SolanaChain) for i := 0; i < numChains; i++ { chainID := testSolanaChainSelectors[i] - admin, keypairPath, err := GenerateSolanaKeypair(t) + admin, keypairPath, err := generateSolanaKeypair(t) require.NoError(t, err) url, wsURL, err := solChain(t, chainID, &admin) require.NoError(t, err) @@ -196,8 +195,6 @@ func solChain(t *testing.T, chainID uint64, adminKey *solana.PrivateKey) (string port := freeport.GetOne(t) - fmt.Println(solTestConfig.CcipRouterProgram.String()) - bcInput := &blockchain.Input{ Type: "solana", ChainID: strconv.FormatUint(chainID, 10),