diff --git a/.changeset/flat-spiders-sing.md b/.changeset/flat-spiders-sing.md new file mode 100644 index 00000000000..6fba341b191 --- /dev/null +++ b/.changeset/flat-spiders-sing.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +Set chainType in chain client #internal diff --git a/.changeset/fresh-falcons-cheer.md b/.changeset/fresh-falcons-cheer.md new file mode 100644 index 00000000000..505582cc4fd --- /dev/null +++ b/.changeset/fresh-falcons-cheer.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +#added solana: compute unit limit configuration and transaction instruction diff --git a/.changeset/three-otters-drum.md b/.changeset/three-otters-drum.md new file mode 100644 index 00000000000..c3888df8580 --- /dev/null +++ b/.changeset/three-otters-drum.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +Hedera chain type: broadcast transactions only to a single healthy RPC instead of all healthy RPCs to avoid redundant relay fees. #changed diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 79db8c2859d..cef5304f30c 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -661,11 +661,19 @@ jobs: with: repository: smartcontractkit/chainlink-solana ref: ${{ needs.get_solana_sha.outputs.sha }} + - name: Download Artifacts + if: (needs.changes.outputs.core_changes == 'true' || github.event_name == 'workflow_dispatch') && needs.solana-test-image-exists.outputs.exists == 'false' + uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + with: + name: artifacts + path: ${{ env.CONTRACT_ARTIFACTS_PATH }} - name: Build Test Image if: (needs.changes.outputs.core_changes == 'true' || github.event_name == 'workflow_dispatch') && needs.solana-test-image-exists.outputs.exists == 'false' uses: smartcontractkit/.github/actions/ctf-build-test-image@a5e4f4c8fbb8e15ab2ad131552eca6ac83c4f4b3 # ctf-build-test-image@0.1.0 with: + repository: chainlink-solana-tests tag: ${{ needs.get_solana_sha.outputs.sha }} + suites: smoke QA_AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }} QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }} QA_AWS_ACCOUNT_NUMBER: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }} diff --git a/core/chains/evm/client/chain_client.go b/core/chains/evm/client/chain_client.go index 310528424d6..d5c9cd32bce 100644 --- a/core/chains/evm/client/chain_client.go +++ b/core/chains/evm/client/chain_client.go @@ -153,6 +153,7 @@ func NewChainClient( return &chainClient{ multiNode: multiNode, logger: logger.Sugared(lggr), + chainType: chainType, clientErrors: clientErrors, } } @@ -174,6 +175,14 @@ func (c *chainClient) BatchCallContext(ctx context.Context, b []rpc.BatchElem) e // Similar to BatchCallContext, ensure the provided BatchElem slice is passed through func (c *chainClient) BatchCallContextAll(ctx context.Context, b []rpc.BatchElem) error { + if c.chainType == chaintype.ChainHedera { + activeRPC, err := c.multiNode.SelectNodeRPC() + if err != nil { + return err + } + + return activeRPC.BatchCallContext(ctx, b) + } return c.multiNode.BatchCallContextAll(ctx, b) } @@ -291,6 +300,13 @@ func (c *chainClient) PendingNonceAt(ctx context.Context, account common.Address } func (c *chainClient) SendTransaction(ctx context.Context, tx *types.Transaction) error { + if c.chainType == chaintype.ChainHedera { + activeRPC, err := c.multiNode.SelectNodeRPC() + if err != nil { + return err + } + return activeRPC.SendTransaction(ctx, tx) + } return c.multiNode.SendTransaction(ctx, tx) } diff --git a/core/chains/evm/client/chain_client_test.go b/core/chains/evm/client/chain_client_test.go index 47041e40e91..f6041228214 100644 --- a/core/chains/evm/client/chain_client_test.go +++ b/core/chains/evm/client/chain_client_test.go @@ -874,8 +874,9 @@ func TestEthClient_ErroringClient(t *testing.T) { err = erroringClient.SendTransaction(ctx, nil) require.Equal(t, err, commonclient.ErroringNodeError) - code, err := erroringClient.SendTransactionReturnCode(ctx, nil, common.Address{}) - require.Equal(t, code, commonclient.Unknown) + tx := testutils.NewLegacyTransaction(uint64(42), testutils.NewAddress(), big.NewInt(142), 242, big.NewInt(342), []byte{1, 2, 3}) + code, err := erroringClient.SendTransactionReturnCode(ctx, tx, common.Address{}) + require.Equal(t, code, commonclient.Retryable) require.Equal(t, err, commonclient.ErroringNodeError) _, err = erroringClient.SequenceAt(ctx, common.Address{}, nil) diff --git a/core/chains/evm/client/errors.go b/core/chains/evm/client/errors.go index ba13e1bfea8..448d33080d9 100644 --- a/core/chains/evm/client/errors.go +++ b/core/chains/evm/client/errors.go @@ -390,7 +390,11 @@ func (s *SendError) IsL2Full(configErrors *ClientErrors) bool { // IsServiceUnavailable indicates if the error was caused by a service being unavailable func (s *SendError) IsServiceUnavailable(configErrors *ClientErrors) bool { - return s.is(ServiceUnavailable, configErrors) + if s == nil || s.err == nil { + return false + } + + return s.is(ServiceUnavailable, configErrors) || pkgerrors.Is(s.err, commonclient.ErroringNodeError) } // IsTerminallyStuck indicates if a transaction was stuck without any chance of inclusion diff --git a/core/chains/evm/client/errors_test.go b/core/chains/evm/client/errors_test.go index 84e518db666..276146fd06b 100644 --- a/core/chains/evm/client/errors_test.go +++ b/core/chains/evm/client/errors_test.go @@ -9,6 +9,7 @@ import ( pkgerrors "github.com/pkg/errors" "github.com/stretchr/testify/assert" + commonclient "github.com/smartcontractkit/chainlink/v2/common/client" evmclient "github.com/smartcontractkit/chainlink/v2/core/chains/evm/client" ) @@ -248,6 +249,12 @@ func Test_Eth_Errors(t *testing.T) { err = newSendErrorWrapped(test.message) assert.Equal(t, err.IsServiceUnavailable(clientErrors), test.expect) } + { + err = evmclient.NewSendError(commonclient.ErroringNodeError) + assert.True(t, err.IsServiceUnavailable(clientErrors)) + err = evmclient.NewSendError(fmt.Errorf("failed to send transaction: %w", commonclient.ErroringNodeError)) + assert.True(t, err.IsServiceUnavailable(clientErrors)) + } }) t.Run("IsTxFeeExceedsCap", func(t *testing.T) { diff --git a/core/chains/evm/config/toml/defaults/Hedera_Mainnet.toml b/core/chains/evm/config/toml/defaults/Hedera_Mainnet.toml index 4d5e48816fa..7f15a8cf13d 100644 --- a/core/chains/evm/config/toml/defaults/Hedera_Mainnet.toml +++ b/core/chains/evm/config/toml/defaults/Hedera_Mainnet.toml @@ -18,6 +18,8 @@ Mode = 'SuggestedPrice' BumpThreshold = 0 BumpMin = '10 gwei' BumpPercent = 20 +# Dynamic gas estimation is a must Hedera, since Hedera consumes 80% of gaslimit by default, we will end up overpaying for gas +EstimateLimit = true [Transactions] # To hit throttling you'd need to maintain 15 m gas /sec over a prolonged period of time. diff --git a/core/chains/evm/config/toml/defaults/Hedera_Testnet.toml b/core/chains/evm/config/toml/defaults/Hedera_Testnet.toml index 6086a43af2c..e15b4e98d69 100644 --- a/core/chains/evm/config/toml/defaults/Hedera_Testnet.toml +++ b/core/chains/evm/config/toml/defaults/Hedera_Testnet.toml @@ -18,6 +18,8 @@ Mode = 'SuggestedPrice' BumpThreshold = 0 BumpMin = '10 gwei' BumpPercent = 20 +# Dynamic gas estimation is a must Hedera, since Hedera consumes 80% of gaslimit by default, we will end up overpaying for gas +EstimateLimit = true [Transactions] # To hit throttling you'd need to maintain 15 m gas /sec over a prolonged period of time. diff --git a/core/cmd/solana_node_commands_test.go b/core/cmd/solana_node_commands_test.go index adc699de79b..bc4aa15f7bc 100644 --- a/core/cmd/solana_node_commands_test.go +++ b/core/cmd/solana_node_commands_test.go @@ -20,7 +20,7 @@ import ( func solanaStartNewApplication(t *testing.T, cfgs ...*solcfg.TOMLConfig) *cltest.TestApplication { for i := range cfgs { - cfgs[i].SetDefaults() + cfgs[i].Chain.SetDefaults() } return startNewApplicationV2(t, func(c *chainlink.Config, s *chainlink.Secrets) { c.Solana = cfgs @@ -72,17 +72,17 @@ func TestShell_IndexSolanaNodes(t *testing.T) { rt := cmd.RendererTable{b} require.NoError(t, nodes.RenderTable(rt)) renderLines := strings.Split(b.String(), "\n") - assert.Equal(t, 17, len(renderLines)) + assert.Equal(t, 19, len(renderLines)) assert.Contains(t, renderLines[2], "Name") assert.Contains(t, renderLines[2], n1.Name) assert.Contains(t, renderLines[3], "Chain ID") assert.Contains(t, renderLines[3], n1.ChainID) assert.Contains(t, renderLines[4], "State") assert.Contains(t, renderLines[4], n1.State) - assert.Contains(t, renderLines[9], "Name") - assert.Contains(t, renderLines[9], n2.Name) - assert.Contains(t, renderLines[10], "Chain ID") - assert.Contains(t, renderLines[10], n2.ChainID) - assert.Contains(t, renderLines[11], "State") - assert.Contains(t, renderLines[11], n2.State) + assert.Contains(t, renderLines[10], "Name") + assert.Contains(t, renderLines[10], n2.Name) + assert.Contains(t, renderLines[11], "Chain ID") + assert.Contains(t, renderLines[11], n2.ChainID) + assert.Contains(t, renderLines[12], "State") + assert.Contains(t, renderLines[12], n2.State) } diff --git a/core/config/docs/chains-solana.toml b/core/config/docs/chains-solana.toml index 9376445061a..98b777f11c2 100644 --- a/core/config/docs/chains-solana.toml +++ b/core/config/docs/chains-solana.toml @@ -36,9 +36,13 @@ ComputeUnitPriceDefault = 0 # Default FeeBumpPeriod = '3s' # Default # BlockHistoryPollPeriod is the rate to poll for blocks in the block history fee estimator BlockHistoryPollPeriod = '5s' # Default +# ComputeUnitLimitDefault is the compute units limit applied to transactions unless overriden during the txm enqueue +ComputeUnitLimitDefault = 200_000 # Default [[Solana.Nodes]] # Name is a unique (per-chain) identifier for this node. Name = 'primary' # Example # URL is the HTTP(S) endpoint for this node. URL = 'http://solana.web' # Example +# SendOnly is a multinode config that only sends transactions to a node and does not read state +SendOnly = false # Default diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 81501034ce4..b53f5e415a0 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -22,7 +22,7 @@ require ( github.com/prometheus/client_golang v1.20.0 github.com/shopspring/decimal v1.4.0 github.com/smartcontractkit/chainlink-automation v1.0.4 - github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc + github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715 github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000 github.com/smartcontractkit/libocr v0.0.0-20240717100443-f6226e09bee7 github.com/spf13/cobra v1.8.1 @@ -275,7 +275,7 @@ require ( github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7 // indirect github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2 // indirect github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664 // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1 // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 08f3fb2b764..f56ebc9d548 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1083,16 +1083,16 @@ github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8um github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283 h1:f0vdqcOL9kJZwfmWE76roIyEuiZx/R82js0IfXNAvXg= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283/go.mod h1:KP82vFCqm+M1G1t6Vos5CewGUGYJkxxCEdxnta4uLlE= -github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc h1:ALbyaoRzUSXQ2NhGFKVOyJqO22IB5yQjhjKWbIZGbrI= -github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc/go.mod h1:F6WUS6N4mP5ScwpwyTyAJc9/vjR+GXbMCRUOVekQi1g= +github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715 h1:6s5a5g62qvUiHSyknLLw9h8Y0FfdVEsNHc5o/Q/T9w4= +github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715/go.mod h1:F6WUS6N4mP5ScwpwyTyAJc9/vjR+GXbMCRUOVekQi1g= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7 h1:lTGIOQYLk1Ufn++X/AvZnt6VOcuhste5yp+C157No/Q= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7/go.mod h1:BMYE1vC/pGmdFSsOJdPrAA0/4gZ0Xo0SxTMdGspBtRo= github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2 h1:yRk4ektpx/UxwarqAfgxUXLrsYXlaNeP1NOwzHGrK2Q= github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2/go.mod h1:rNhNSrrRMvkgAm5SA6bNTdh2340bTQQZdUVNtZ2o2bk= github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f h1:p4p3jBT91EQyLuAMvHD+zNJsuAYI/QjJbzuGUJ7wIgg= github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f/go.mod h1:FLlWBt2hwiMVgt9AcSo6wBJYIRd/nsc8ENbV1Wir1bw= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664 h1:JPs35oSO07PK3Qv7Kyv0GJHVLacIE1IkrvefaPyBjKs= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664/go.mod h1:iJ9DKYo0F64ue7IogAIELwU2DfrhEAh76eSmZOilT8A= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff h1:piMugtrRlbVdcC6xZF37me686eS1YwpLQ0kN2v2b9YE= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff/go.mod h1:5jD47oCERRQ4eGi0iNdk9ZV5HMEdolfQwHpUX1+Ix4s= github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae h1:d+B8y2Nd/PrnPMNoaSPn3eDgUgxcVcIqAxGrvYu/gGw= github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae/go.mod h1:ec/a20UZ7YRK4oxJcnTBFzp1+DBcJcwqEaerUMsktMs= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go index ed69475a54e..8598869dcd4 100644 --- a/core/services/chainlink/config_test.go +++ b/core/services/chainlink/config_test.go @@ -709,11 +709,12 @@ func TestConfig_Marshal(t *testing.T) { ComputeUnitPriceDefault: ptr[uint64](100), FeeBumpPeriod: commoncfg.MustNewDuration(time.Minute), BlockHistoryPollPeriod: commoncfg.MustNewDuration(time.Minute), + ComputeUnitLimitDefault: ptr[uint32](100_000), }, Nodes: []*solcfg.Node{ {Name: ptr("primary"), URL: commoncfg.MustParseURL("http://solana.web")}, - {Name: ptr("foo"), URL: commoncfg.MustParseURL("http://solana.foo")}, - {Name: ptr("bar"), URL: commoncfg.MustParseURL("http://solana.bar")}, + {Name: ptr("foo"), URL: commoncfg.MustParseURL("http://solana.foo"), SendOnly: true}, + {Name: ptr("bar"), URL: commoncfg.MustParseURL("http://solana.bar"), SendOnly: true}, }, }, } @@ -1213,18 +1214,22 @@ ComputeUnitPriceMin = 10 ComputeUnitPriceDefault = 100 FeeBumpPeriod = '1m0s' BlockHistoryPollPeriod = '1m0s' +ComputeUnitLimitDefault = 100000 [[Solana.Nodes]] Name = 'primary' URL = 'http://solana.web' +SendOnly = false [[Solana.Nodes]] Name = 'foo' URL = 'http://solana.foo' +SendOnly = true [[Solana.Nodes]] Name = 'bar' URL = 'http://solana.bar' +SendOnly = true `}, {"Starknet", Config{Starknet: full.Starknet}, `[[Starknet]] ChainID = 'foobar' diff --git a/core/services/chainlink/testdata/config-full.toml b/core/services/chainlink/testdata/config-full.toml index 36002f46c5f..38ae12ab3b8 100644 --- a/core/services/chainlink/testdata/config-full.toml +++ b/core/services/chainlink/testdata/config-full.toml @@ -498,18 +498,22 @@ ComputeUnitPriceMin = 10 ComputeUnitPriceDefault = 100 FeeBumpPeriod = '1m0s' BlockHistoryPollPeriod = '1m0s' +ComputeUnitLimitDefault = 100000 [[Solana.Nodes]] Name = 'primary' URL = 'http://solana.web' +SendOnly = false [[Solana.Nodes]] Name = 'foo' URL = 'http://solana.foo' +SendOnly = true [[Solana.Nodes]] Name = 'bar' URL = 'http://solana.bar' +SendOnly = true [[Starknet]] ChainID = 'foobar' diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml index 5d16b9b87cb..d2c41c438a7 100644 --- a/core/services/chainlink/testdata/config-multi-chain-effective.toml +++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml @@ -657,10 +657,12 @@ ComputeUnitPriceMin = 0 ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' +ComputeUnitLimitDefault = 200000 [[Solana.Nodes]] Name = 'primary' URL = 'http://mainnet.solana.com' +SendOnly = false [[Solana]] ChainID = 'testnet' @@ -680,10 +682,12 @@ ComputeUnitPriceMin = 0 ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' +ComputeUnitLimitDefault = 200000 [[Solana.Nodes]] Name = 'secondary' URL = 'http://testnet.solana.com' +SendOnly = false [[Starknet]] ChainID = 'foobar' diff --git a/core/services/chainlink/testdata/config-multi-chain.toml b/core/services/chainlink/testdata/config-multi-chain.toml index 5373e0e62d3..6d8fe8f9e38 100644 --- a/core/services/chainlink/testdata/config-multi-chain.toml +++ b/core/services/chainlink/testdata/config-multi-chain.toml @@ -93,6 +93,7 @@ MaxRetries = 12 [[Solana.Nodes]] Name = 'primary' URL = 'http://mainnet.solana.com' +SendOnly = false [[Solana]] ChainID = 'testnet' @@ -101,6 +102,7 @@ OCR2CachePollPeriod = '1m0s' [[Solana.Nodes]] Name = 'secondary' URL = 'http://testnet.solana.com' +SendOnly = false [[Starknet]] ChainID = 'foobar' diff --git a/core/web/resolver/testdata/config-full.toml b/core/web/resolver/testdata/config-full.toml index 971036991f2..7e07de71d79 100644 --- a/core/web/resolver/testdata/config-full.toml +++ b/core/web/resolver/testdata/config-full.toml @@ -497,18 +497,22 @@ ComputeUnitPriceMin = 0 ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' +ComputeUnitLimitDefault = 200000 [[Solana.Nodes]] Name = 'primary' URL = 'http://solana.web' +SendOnly = false [[Solana.Nodes]] Name = 'foo' URL = 'http://solana.foo' +SendOnly = false [[Solana.Nodes]] Name = 'bar' URL = 'http://solana.bar' +SendOnly = false [[Starknet]] ChainID = 'foobar' diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml index 480fc1b4c09..73479c6728d 100644 --- a/core/web/resolver/testdata/config-multi-chain-effective.toml +++ b/core/web/resolver/testdata/config-multi-chain-effective.toml @@ -657,10 +657,12 @@ ComputeUnitPriceMin = 0 ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' +ComputeUnitLimitDefault = 200000 [[Solana.Nodes]] Name = 'primary' URL = 'http://mainnet.solana.com' +SendOnly = false [[Solana]] ChainID = 'testnet' @@ -680,10 +682,12 @@ ComputeUnitPriceMin = 0 ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' +ComputeUnitLimitDefault = 200000 [[Solana.Nodes]] Name = 'secondary' URL = 'http://testnet.solana.com' +SendOnly = false [[Starknet]] ChainID = 'foobar' diff --git a/core/web/resolver/testdata/config-multi-chain.toml b/core/web/resolver/testdata/config-multi-chain.toml index 9abb1719402..472ea72ce70 100644 --- a/core/web/resolver/testdata/config-multi-chain.toml +++ b/core/web/resolver/testdata/config-multi-chain.toml @@ -101,6 +101,7 @@ MaxRetries = 12 [[Solana.Nodes]] Name = 'primary' URL = 'http://mainnet.solana.com' +SendOnly = false [[Solana]] ChainID = 'testnet' @@ -109,6 +110,7 @@ OCR2CachePollPeriod = '1m0s' [[Solana.Nodes]] Name = 'secondary' URL = 'http://testnet.solana.com' +SendOnly = false [[Starknet]] ChainID = 'foobar' diff --git a/core/web/solana_chains_controller_test.go b/core/web/solana_chains_controller_test.go index 048a3790b1a..3f64431b049 100644 --- a/core/web/solana_chains_controller_test.go +++ b/core/web/solana_chains_controller_test.go @@ -58,6 +58,7 @@ ComputeUnitPriceMin = 0 ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' +ComputeUnitLimitDefault = 200000 Nodes = [] `, } diff --git a/docs/CONFIG.md b/docs/CONFIG.md index 628692f7c33..50d12a464d9 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -4067,7 +4067,7 @@ LimitDefault = 500000 LimitMax = 500000 LimitMultiplier = '1' LimitTransfer = 21000 -EstimateLimit = false +EstimateLimit = true BumpMin = '10 gwei' BumpPercent = 20 BumpThreshold = 0 @@ -4170,7 +4170,7 @@ LimitDefault = 500000 LimitMax = 500000 LimitMultiplier = '1' LimitTransfer = 21000 -EstimateLimit = false +EstimateLimit = true BumpMin = '10 gwei' BumpPercent = 20 BumpThreshold = 0 @@ -9882,6 +9882,7 @@ ComputeUnitPriceMin = 0 # Default ComputeUnitPriceDefault = 0 # Default FeeBumpPeriod = '3s' # Default BlockHistoryPollPeriod = '5s' # Default +ComputeUnitLimitDefault = 200_000 # Default ``` @@ -9994,11 +9995,18 @@ BlockHistoryPollPeriod = '5s' # Default ``` BlockHistoryPollPeriod is the rate to poll for blocks in the block history fee estimator +### ComputeUnitLimitDefault +```toml +ComputeUnitLimitDefault = 200_000 # Default +``` +ComputeUnitLimitDefault is the compute units limit applied to transactions unless overriden during the txm enqueue + ## Solana.Nodes ```toml [[Solana.Nodes]] Name = 'primary' # Example URL = 'http://solana.web' # Example +SendOnly = false # Default ``` @@ -10014,6 +10022,12 @@ URL = 'http://solana.web' # Example ``` URL is the HTTP(S) endpoint for this node. +### SendOnly +```toml +SendOnly = false # Default +``` +SendOnly is a multinode config that only sends transactions to a node and does not read state + ## Starknet ```toml [[Starknet]] diff --git a/go.mod b/go.mod index 53633f263b5..0101565b0e2 100644 --- a/go.mod +++ b/go.mod @@ -75,11 +75,11 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.23 github.com/smartcontractkit/chainlink-automation v1.0.4 github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283 - github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc + github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715 github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7 github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2 github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664 + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae github.com/smartcontractkit/libocr v0.0.0-20240717100443-f6226e09bee7 github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1 diff --git a/go.sum b/go.sum index 166b268a80e..222ec23b3e8 100644 --- a/go.sum +++ b/go.sum @@ -1044,16 +1044,16 @@ github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8um github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283 h1:f0vdqcOL9kJZwfmWE76roIyEuiZx/R82js0IfXNAvXg= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283/go.mod h1:KP82vFCqm+M1G1t6Vos5CewGUGYJkxxCEdxnta4uLlE= -github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc h1:ALbyaoRzUSXQ2NhGFKVOyJqO22IB5yQjhjKWbIZGbrI= -github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc/go.mod h1:F6WUS6N4mP5ScwpwyTyAJc9/vjR+GXbMCRUOVekQi1g= +github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715 h1:6s5a5g62qvUiHSyknLLw9h8Y0FfdVEsNHc5o/Q/T9w4= +github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715/go.mod h1:F6WUS6N4mP5ScwpwyTyAJc9/vjR+GXbMCRUOVekQi1g= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7 h1:lTGIOQYLk1Ufn++X/AvZnt6VOcuhste5yp+C157No/Q= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7/go.mod h1:BMYE1vC/pGmdFSsOJdPrAA0/4gZ0Xo0SxTMdGspBtRo= github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2 h1:yRk4ektpx/UxwarqAfgxUXLrsYXlaNeP1NOwzHGrK2Q= github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2/go.mod h1:rNhNSrrRMvkgAm5SA6bNTdh2340bTQQZdUVNtZ2o2bk= github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f h1:p4p3jBT91EQyLuAMvHD+zNJsuAYI/QjJbzuGUJ7wIgg= github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f/go.mod h1:FLlWBt2hwiMVgt9AcSo6wBJYIRd/nsc8ENbV1Wir1bw= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664 h1:JPs35oSO07PK3Qv7Kyv0GJHVLacIE1IkrvefaPyBjKs= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664/go.mod h1:iJ9DKYo0F64ue7IogAIELwU2DfrhEAh76eSmZOilT8A= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff h1:piMugtrRlbVdcC6xZF37me686eS1YwpLQ0kN2v2b9YE= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff/go.mod h1:5jD47oCERRQ4eGi0iNdk9ZV5HMEdolfQwHpUX1+Ix4s= github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae h1:d+B8y2Nd/PrnPMNoaSPn3eDgUgxcVcIqAxGrvYu/gGw= github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae/go.mod h1:ec/a20UZ7YRK4oxJcnTBFzp1+DBcJcwqEaerUMsktMs= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 5eeb68f773b..c6d9681d72a 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -40,7 +40,7 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.23 github.com/smartcontractkit/chainlink-automation v1.0.4 github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283 - github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc + github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715 github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.9 github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 @@ -408,7 +408,7 @@ require ( github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7 // indirect github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2 // indirect github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664 // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 0a8d40353bd..8bfcec264c5 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1425,16 +1425,16 @@ github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8um github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283 h1:f0vdqcOL9kJZwfmWE76roIyEuiZx/R82js0IfXNAvXg= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283/go.mod h1:KP82vFCqm+M1G1t6Vos5CewGUGYJkxxCEdxnta4uLlE= -github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc h1:ALbyaoRzUSXQ2NhGFKVOyJqO22IB5yQjhjKWbIZGbrI= -github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc/go.mod h1:F6WUS6N4mP5ScwpwyTyAJc9/vjR+GXbMCRUOVekQi1g= +github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715 h1:6s5a5g62qvUiHSyknLLw9h8Y0FfdVEsNHc5o/Q/T9w4= +github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715/go.mod h1:F6WUS6N4mP5ScwpwyTyAJc9/vjR+GXbMCRUOVekQi1g= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7 h1:lTGIOQYLk1Ufn++X/AvZnt6VOcuhste5yp+C157No/Q= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7/go.mod h1:BMYE1vC/pGmdFSsOJdPrAA0/4gZ0Xo0SxTMdGspBtRo= github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2 h1:yRk4ektpx/UxwarqAfgxUXLrsYXlaNeP1NOwzHGrK2Q= github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2/go.mod h1:rNhNSrrRMvkgAm5SA6bNTdh2340bTQQZdUVNtZ2o2bk= github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f h1:p4p3jBT91EQyLuAMvHD+zNJsuAYI/QjJbzuGUJ7wIgg= github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f/go.mod h1:FLlWBt2hwiMVgt9AcSo6wBJYIRd/nsc8ENbV1Wir1bw= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664 h1:JPs35oSO07PK3Qv7Kyv0GJHVLacIE1IkrvefaPyBjKs= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664/go.mod h1:iJ9DKYo0F64ue7IogAIELwU2DfrhEAh76eSmZOilT8A= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff h1:piMugtrRlbVdcC6xZF37me686eS1YwpLQ0kN2v2b9YE= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff/go.mod h1:5jD47oCERRQ4eGi0iNdk9ZV5HMEdolfQwHpUX1+Ix4s= github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae h1:d+B8y2Nd/PrnPMNoaSPn3eDgUgxcVcIqAxGrvYu/gGw= github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae/go.mod h1:ec/a20UZ7YRK4oxJcnTBFzp1+DBcJcwqEaerUMsktMs= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 h1:mgjBQIEy+3V3G6K8e+6by3xndgsXdYYsdy+7kzQZwSk= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 7fc07069d54..5abb26e7ff6 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -15,7 +15,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.33.0 github.com/slack-go/slack v0.12.2 - github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc + github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715 github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.9 github.com/smartcontractkit/chainlink-testing-framework/seth v1.50.1 github.com/smartcontractkit/chainlink-testing-framework/wasp v1.50.0 @@ -390,7 +390,7 @@ require ( github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7 // indirect github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2 // indirect github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664 // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae // indirect github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 // indirect github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 0715c672cf5..2f18e2be99a 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1399,16 +1399,16 @@ github.com/smartcontractkit/chainlink-automation v1.0.4 h1:iyW181JjKHLNMnDleI8um github.com/smartcontractkit/chainlink-automation v1.0.4/go.mod h1:u4NbPZKJ5XiayfKHD/v3z3iflQWqvtdhj13jVZXj/cM= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283 h1:f0vdqcOL9kJZwfmWE76roIyEuiZx/R82js0IfXNAvXg= github.com/smartcontractkit/chainlink-ccip v0.0.0-20240924115754-8858b0423283/go.mod h1:KP82vFCqm+M1G1t6Vos5CewGUGYJkxxCEdxnta4uLlE= -github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc h1:ALbyaoRzUSXQ2NhGFKVOyJqO22IB5yQjhjKWbIZGbrI= -github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925085218-aded1b263ecc/go.mod h1:F6WUS6N4mP5ScwpwyTyAJc9/vjR+GXbMCRUOVekQi1g= +github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715 h1:6s5a5g62qvUiHSyknLLw9h8Y0FfdVEsNHc5o/Q/T9w4= +github.com/smartcontractkit/chainlink-common v0.2.3-0.20240925150249-664dd5a59715/go.mod h1:F6WUS6N4mP5ScwpwyTyAJc9/vjR+GXbMCRUOVekQi1g= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7 h1:lTGIOQYLk1Ufn++X/AvZnt6VOcuhste5yp+C157No/Q= github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240911175228-daf2600bb7b7/go.mod h1:BMYE1vC/pGmdFSsOJdPrAA0/4gZ0Xo0SxTMdGspBtRo= github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2 h1:yRk4ektpx/UxwarqAfgxUXLrsYXlaNeP1NOwzHGrK2Q= github.com/smartcontractkit/chainlink-data-streams v0.0.0-20240916152957-433914114bd2/go.mod h1:rNhNSrrRMvkgAm5SA6bNTdh2340bTQQZdUVNtZ2o2bk= github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f h1:p4p3jBT91EQyLuAMvHD+zNJsuAYI/QjJbzuGUJ7wIgg= github.com/smartcontractkit/chainlink-feeds v0.0.0-20240910155501-42f20443189f/go.mod h1:FLlWBt2hwiMVgt9AcSo6wBJYIRd/nsc8ENbV1Wir1bw= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664 h1:JPs35oSO07PK3Qv7Kyv0GJHVLacIE1IkrvefaPyBjKs= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240911182932-3c609a6ac664/go.mod h1:iJ9DKYo0F64ue7IogAIELwU2DfrhEAh76eSmZOilT8A= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff h1:piMugtrRlbVdcC6xZF37me686eS1YwpLQ0kN2v2b9YE= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20240927143737-7e527aa85bff/go.mod h1:5jD47oCERRQ4eGi0iNdk9ZV5HMEdolfQwHpUX1+Ix4s= github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae h1:d+B8y2Nd/PrnPMNoaSPn3eDgUgxcVcIqAxGrvYu/gGw= github.com/smartcontractkit/chainlink-starknet/relayer v0.0.1-beta-test.0.20240911194142-506bc469d8ae/go.mod h1:ec/a20UZ7YRK4oxJcnTBFzp1+DBcJcwqEaerUMsktMs= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 h1:mgjBQIEy+3V3G6K8e+6by3xndgsXdYYsdy+7kzQZwSk= diff --git a/integration-tests/testconfig/ocr/overrides/hedera_testnet.toml b/integration-tests/testconfig/ocr/overrides/hedera_testnet.toml new file mode 100755 index 00000000000..9741dbef36c --- /dev/null +++ b/integration-tests/testconfig/ocr/overrides/hedera_testnet.toml @@ -0,0 +1,48 @@ +[ChainlinkImage] +version = "283fe46b1d149c57ef2c70e6d5a1520dbc5b482e" + +[Network] +selected_networks = ["HEDERA_TESTNET"] + +[Soak.Common] +chainlink_node_funding = 30 +number_of_contracts = 2 + +[Soak.OCR2] +[Soak.OCR2.Common] +test_duration = "240m" + +[Soak.OCR2.Soak] +ocr_version = "2" +number_of_contracts = 2 +time_between_rounds = "5m" + +[Seth] +pending_nonce_protection_enabled = true + +[Network.EVMNetworks.HEDERA_TESTNET] +evm_name = "HEDERA_TESTNET" +evm_chain_id = 296 +client_implementation = "Ethereum" +evm_simulated = false +evm_chainlink_transaction_limit = 5000 +evm_minimum_confirmations = 1 +evm_gas_estimation_buffer = 100000 +evm_supports_eip1559 = false +evm_default_gas_limit = 6000000 + +[[Seth.networks]] +name = "HEDERA_TESTNET" +transaction_timeout = "2m" +transfer_gas_fee = 800_000 +gas_limit = 2_000_000 +# legacy transactions +gas_price = 2_500_000_000_000 +# EIP-1559 transactions +eip_1559_dynamic_fees = false +gas_fee_cap = 109_694_825_437 +gas_tip_cap = 30_000_000_000 +# if set to true we will estimate gas for every transaction +gas_price_estimation_enabled = false +# how many last blocks to use, when estimating gas for a transaction +gas_price_estimation_blocks = 0 \ No newline at end of file