diff --git a/.changeset/twelve-socks-drop.md b/.changeset/twelve-socks-drop.md new file mode 100644 index 00000000000..0c554c01b75 --- /dev/null +++ b/.changeset/twelve-socks-drop.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +#added Sui keystore and relayer plugin basic integration diff --git a/.github/actions/setup-sui/action.yaml b/.github/actions/setup-sui/action.yaml new file mode 100644 index 00000000000..03849fc37b4 --- /dev/null +++ b/.github/actions/setup-sui/action.yaml @@ -0,0 +1,29 @@ +name: Setup Sui CLI +description: Install and cache Sui CLI using suiup +inputs: + version: + description: Sui CLI version to install (e.g., mainnet-v1.57.2) + required: false + default: mainnet-v1.57.2 + +runs: + using: composite + steps: + - uses: actions/cache@v4 + id: cache + name: Cache Sui CLI + with: + path: | + ~/.suiup/bin + key: ${{ runner.os }}-suiup-${{ inputs.version }} + + - if: ${{ steps.cache.outputs.cache-hit != 'true' }} + name: Install suiup and Sui CLI + shell: bash + run: | + curl -sSfL https://raw.githubusercontent.com/MystenLabs/suiup/main/install.sh | sh + "$HOME/.local/bin/suiup" install sui@${{ inputs.version }} --yes + + - name: Export Sui CLI to PATH + shell: bash + run: echo "PATH=$HOME/.suiup/bin:$HOME/.local/bin:$PATH" >> $GITHUB_ENV diff --git a/.github/integration-in-memory-tests.yml b/.github/integration-in-memory-tests.yml index 92a231b7189..18e8f981a17 100644 --- a/.github/integration-in-memory-tests.yml +++ b/.github/integration-in-memory-tests.yml @@ -634,6 +634,126 @@ runner-test-matrix: aptos_cli_version: 7.8.1 install_plugins_public: true + # # TON tests + # - id: smoke/ccip/ccip_ton_messaging_test.go:* + # path: integration-tests/smoke/ccip/ccip_ton_messaging_test.go + # test_env_type: in-memory + # runs_on: ubuntu-latest + # triggers: + # - PR Integration CCIP Tests + # - Nightly Integration CCIP Tests + # test_cmd: + # cd smoke/ccip && go test ccip_ton_messaging_test.go -timeout 20m -test.parallel=1 -count=1 -json + # test_go_project_path: integration-tests + + - id: smoke/ccip/ccip_aptos_token_transfer_test.go:Test_CCIP_TokenTransfer_BnM_Aptos2EVM + path: integration-tests/smoke/ccip/ccip_aptos_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_TokenTransfer_BnM_Aptos2EVM" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + + - id: smoke/ccip/ccip_aptos_token_transfer_test.go:Test_CCIP_TokenTransfer_BnM_EVM2Aptos + path: integration-tests/smoke/ccip/ccip_aptos_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_TokenTransfer_BnM_EVM2Aptos" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + + - id: smoke/ccip/ccip_aptos_token_transfer_test.go:Test_CCIP_TokenTransfer_LnR_Aptos2EVM + path: integration-tests/smoke/ccip/ccip_aptos_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_TokenTransfer_LnR_Aptos2EVM" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + + - id: smoke/ccip/ccip_aptos_token_transfer_test.go:Test_CCIP_TokenTransfer_LnR_EVM2Aptos + path: integration-tests/smoke/ccip/ccip_aptos_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_TokenTransfer_LnR_EVM2Aptos" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + + - id: smoke/ccip/ccip_aptos_token_transfer_test.go:Test_CCIP_TokenTransfer_LnR_without_TransferRef_EVM2Aptos + path: integration-tests/smoke/ccip/ccip_aptos_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_TokenTransfer_LnR_without_TransferRef_EVM2Aptos" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + + - id: smoke/ccip/ccip_aptos_token_transfer_test.go:Test_CCIP_TokenTransfer_LnR_without_TransferRef_Aptos2EVM + path: integration-tests/smoke/ccip/ccip_aptos_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_TokenTransfer_LnR_without_TransferRef_Aptos2EVM" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + + - id: smoke/ccip/ccip_aptos_msghasher_test.go:* + path: integration-tests/smoke/ccip/ccip_aptos_msghasher_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_AptosMessageHasher_OnChainVerification" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + + - id: smoke/ccip/ccip_aptos_regulated_token_transfer_test.go:Test_CCIP_RegulatedTokenTransfer_EVM2Aptos + path: integration-tests/smoke/ccip/ccip_aptos_regulated_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_RegulatedTokenTransfer_EVM2Aptos" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + + - id: smoke/ccip/ccip_aptos_regulated_token_transfer_test.go:Test_CCIP_RegulatedTokenTransfer_Aptos2EVM + path: integration-tests/smoke/ccip/ccip_aptos_regulated_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_RegulatedTokenTransfer_Aptos2EVM" -timeout 20m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + aptos_cli_version: 7.8.1 + install_plugins_public: true + # TON tests - id: smoke/ccip/ccip_ton_messaging_test.go:Test_CCIPMessaging_TON2EVM path: integration-tests/smoke/ccip/ccip_ton_messaging_test.go @@ -656,4 +776,53 @@ runner-test-matrix: test_cmd: go test ./smoke/ccip -run "Test_CCIPMessaging_EVM2TON" -timeout 20m -test.parallel=1 -count=1 -json test_go_project_path: integration-tests install_plugins_public: true + + # Sui tests + - id: smoke/ccip/ccip_sui_messaging_test.go:Test_CCIP_Messaging_Sui2EVM + path: integration-tests/smoke/ccip/ccip_sui_messaging_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_Messaging_Sui2EVM" -timeout 10m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + sui_cli_version: mainnet-1.57.2 + install_plugins_public: true + + - id: smoke/ccip/ccip_sui_messaging_test.go:Test_CCIP_Messaging_EVM2Sui + path: integration-tests/smoke/ccip/ccip_sui_messaging_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIP_Messaging_EVM2Sui" -timeout 10m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + sui_cli_version: mainnet-1.57.2 + install_plugins_public: true + + - id: smoke/ccip/ccip_sui_token_transfer_test.go:Test_CCIPTokenTransfer_Sui2EVM + path: integration-tests/smoke/ccip/ccip_sui_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIPTokenTransfer_Sui2EVM" -timeout 10m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + sui_cli_version: mainnet-1.57.2 + install_plugins_public: true + + - id: smoke/ccip/ccip_sui_token_transfer_test.go:Test_CCIPTokenTransfer_EVM2SUI + path: integration-tests/smoke/ccip/ccip_sui_token_transfer_test.go + test_env_type: in-memory + runs_on: ubuntu-latest + triggers: + - PR Integration CCIP Tests + - Nightly Integration CCIP Tests + test_cmd: go test ./smoke/ccip -run "Test_CCIPTokenTransfer_EVM2SUI" -timeout 10m -test.parallel=1 -count=1 -json + test_go_project_path: integration-tests + sui_cli_version: mainnet-1.57.2 + install_plugins_public: true # END: CCIP tests diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml index 1553340ec44..980e64608f8 100644 --- a/.github/workflows/ci-core.yml +++ b/.github/workflows/ci-core.yml @@ -202,6 +202,7 @@ jobs: should-run: ${{ needs.filter.outputs.should-run-deployment-tests }} setup-solana: "true" setup-aptos: "true" + setup-sui: "true" trunk-auto-quarantine: "true" name: Core Tests (${{ matrix.type.cmd }}) # Be careful modifying the job name, as it is used to fetch the job URL @@ -244,6 +245,12 @@ jobs: with: CLI_VERSION: 7.8.1 + - name: Setup Sui CLI v1.57.2 + if: ${{ matrix.type.should-run == 'true' && matrix.type.setup-sui == 'true' }} + uses: ./.github/actions/setup-sui + with: + version: mainnet-1.57.2 + - name: Setup wasmd if: ${{ matrix.type.should-run == 'true' }} uses: ./.github/actions/setup-wasmd diff --git a/core/capabilities/ccip/ccipaptos/pluginconfig.go b/core/capabilities/ccip/ccipaptos/pluginconfig.go index d85db7e5e09..2c802f0608e 100644 --- a/core/capabilities/ccip/ccipaptos/pluginconfig.go +++ b/core/capabilities/ccip/ccipaptos/pluginconfig.go @@ -18,20 +18,23 @@ func initializePluginConfigFunc(chainselFamily string) ccipcommon.InitFunction { var cwProvider ccipcommon.ChainRWProvider var transmitterFactory types.ContractTransmitterFactory var msgHasher ccipocr3.MessageHasher + var executeCodec ccipocr3.ExecutePluginCodec if chainselFamily == chainsel.FamilyAptos { cwProvider = ChainCWProvider{} transmitterFactory = ocrimpls.NewAptosContractTransmitterFactory(extraDataCodec) msgHasher = NewMessageHasherV1(logger.Sugared(lggr).Named(chainselFamily).Named("MessageHasherV1"), extraDataCodec) + executeCodec = NewExecutePluginCodecV1(extraDataCodec) } else { cwProvider = ccipsui.ChainCWProvider{} transmitterFactory = ocrimpls.NewSuiContractTransmitterFactory(extraDataCodec) msgHasher = ccipsui.NewMessageHasherV1(logger.Sugared(lggr).Named(chainselFamily).Named("MessageHasherV1"), extraDataCodec) + executeCodec = ccipsui.NewExecutePluginCodecV1(extraDataCodec) } return ccipcommon.PluginConfig{ CommitPluginCodec: NewCommitPluginCodecV1(), - ExecutePluginCodec: NewExecutePluginCodecV1(extraDataCodec), + ExecutePluginCodec: executeCodec, MessageHasher: msgHasher, TokenDataEncoder: NewAptosTokenDataEncoder(), GasEstimateProvider: NewGasEstimateProvider(), diff --git a/core/capabilities/ccip/ccipevm/gas_helpers_test.go b/core/capabilities/ccip/ccipevm/gas_helpers_test.go index d14118996fe..9410d9a969d 100644 --- a/core/capabilities/ccip/ccipevm/gas_helpers_test.go +++ b/core/capabilities/ccip/ccipevm/gas_helpers_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/message_hasher" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/message_hasher" "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3" ) diff --git a/core/capabilities/ccip/ccipevm/msghasher.go b/core/capabilities/ccip/ccipevm/msghasher.go index 6ee8133d9fd..b7e72317bcf 100644 --- a/core/capabilities/ccip/ccipevm/msghasher.go +++ b/core/capabilities/ccip/ccipevm/msghasher.go @@ -12,8 +12,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" chainsel "github.com/smartcontractkit/chain-selectors" - - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/message_hasher" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/message_hasher" "github.com/smartcontractkit/chainlink-ccip/pkg/logutil" cciptypes "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3" "github.com/smartcontractkit/chainlink-common/pkg/logger" @@ -332,5 +331,9 @@ func SerializeClientSVMExtraArgsV1(data message_hasher.ClientSVMExtraArgsV1) ([] return SerializeExtraArgs(svmExtraArgsV1Tag, "encodeSVMExtraArgsV1", data) } +func SerializeClientSUIExtraArgsV1(data message_hasher.ClientSuiExtraArgsV1) ([]byte, error) { + return SerializeExtraArgs(suiVMExtraArgsV1Tag, "encodeSUIExtraArgsV1", data) +} + // Interface compliance check var _ cciptypes.MessageHasher = (*MessageHasherV1)(nil) diff --git a/core/capabilities/ccip/ccipsui/executecodec.go b/core/capabilities/ccip/ccipsui/executecodec.go new file mode 100644 index 00000000000..b85428cc325 --- /dev/null +++ b/core/capabilities/ccip/ccipsui/executecodec.go @@ -0,0 +1,356 @@ +package ccipsui + +import ( + "context" + "fmt" + "math/big" + + "github.com/aptos-labs/aptos-go-sdk" + "github.com/aptos-labs/aptos-go-sdk/bcs" + + "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3" +) + +// ExecutePluginCodecV1 is a codec for encoding and decoding execute plugin reports. +// Compatible with ccip_offramp::offramp version 1.6.0 +type ExecutePluginCodecV1 struct { + extraDataCodec ccipocr3.ExtraDataCodecBundle +} + +func NewExecutePluginCodecV1(extraDataCodec ccipocr3.ExtraDataCodecBundle) *ExecutePluginCodecV1 { + return &ExecutePluginCodecV1{ + extraDataCodec: extraDataCodec, + } +} + +func (e *ExecutePluginCodecV1) Encode(ctx context.Context, report ccipocr3.ExecutePluginReport) ([]byte, error) { + if len(report.ChainReports) == 0 { + return nil, nil + } + + if len(report.ChainReports) != 1 { + return nil, fmt.Errorf("ExecutePluginCodecV1 expects exactly one ChainReport, found %d", len(report.ChainReports)) + } + + chainReport := report.ChainReports[0] + + if len(chainReport.Messages) != 1 { + return nil, fmt.Errorf("only single report message expected, got %d", len(chainReport.Messages)) + } + + if len(chainReport.OffchainTokenData) != 1 { + return nil, fmt.Errorf("only single group of offchain token data expected, got %d", len(chainReport.OffchainTokenData)) + } + + message := chainReport.Messages[0] + offchainTokenData := chainReport.OffchainTokenData[0] + + s := &bcs.Serializer{} + + // 1. source_chain_selector: u64 + s.U64(uint64(chainReport.SourceChainSelector)) + + // --- Start Message Header --- + // 2. message_id: fixed_vector_u8(32) + if len(message.Header.MessageID) != 32 { + return nil, fmt.Errorf("invalid message ID length: expected 32, got %d", len(message.Header.MessageID)) + } + s.FixedBytes(message.Header.MessageID[:]) + + // 3. header_source_chain_selector: u64 + s.U64(uint64(message.Header.SourceChainSelector)) + + // 4. dest_chain_selector: u64 + s.U64(uint64(message.Header.DestChainSelector)) + + // 5. sequence_number: u64 + s.U64(uint64(message.Header.SequenceNumber)) + + // 6. nonce: u64 + s.U64(message.Header.Nonce) + // --- End Message Header --- + + // 7. sender: vector + s.WriteBytes(message.Sender) + + // 8. data: vector + s.WriteBytes(message.Data) + + // 9. receiver: address (Aptos address, 32 bytes) + var receiverAddr aptos.AccountAddress + if err := receiverAddr.ParseStringRelaxed(message.Receiver.String()); err != nil { + return nil, fmt.Errorf("failed to parse receiver address '%s': %w", message.Receiver.String(), err) + } + s.Struct(&receiverAddr) + + // 10. gas_limit: u256 + // Extract gas limit from ExtraArgs + decodedExtraArgsMap, err := e.extraDataCodec.DecodeExtraArgs(message.ExtraArgs, chainReport.SourceChainSelector) + if err != nil { + return nil, fmt.Errorf("failed to decode ExtraArgs: %w", err) + } + gasLimit, tokenReceiver, err := parseExtraDataMap(decodedExtraArgsMap) // Use a helper to extract the gas limit + if err != nil { + return nil, fmt.Errorf("failed to extract values from decoded ExtraArgs map: %w", err) + } + s.U256(*gasLimit) + + // 11. token_receiver + var tokenReceiverAddr aptos.AccountAddress + copy(tokenReceiverAddr[:], tokenReceiver[:]) + s.Struct(&tokenReceiverAddr) + + // 11. token_amounts: vector + bcs.SerializeSequenceWithFunction(message.TokenAmounts, s, func(s *bcs.Serializer, item ccipocr3.RampTokenAmount) { + // 11a. source_pool_address: vector + s.WriteBytes(item.SourcePoolAddress) + + // 11b. dest_token_address: address + var destTokenAddr aptos.AccountAddress + if err2 := destTokenAddr.ParseStringRelaxed(item.DestTokenAddress.String()); err2 != nil { + s.SetError(fmt.Errorf("failed to parse dest_token_address '%s': %w", item.DestTokenAddress.String(), err2)) + } + s.Struct(&destTokenAddr) + + // 11c. dest_gas_amount: u32 + // Extract dest gas amount from DestExecData + destExecDataDecodedMap, err2 := e.extraDataCodec.DecodeTokenAmountDestExecData(item.DestExecData, chainReport.SourceChainSelector) + if err2 != nil { + s.SetError(fmt.Errorf("failed to decode DestExecData for token %s: %w", destTokenAddr.String(), err2)) + return + } + destGasAmount, err3 := extractDestGasAmountFromMap(destExecDataDecodedMap) + if err3 != nil { + s.SetError(fmt.Errorf("failed to extract dest gas amount from decoded DestExecData map for token %s: %w", destTokenAddr.String(), err3)) + return + } + s.U32(destGasAmount) + + // 11d. extra_data: vector + s.WriteBytes(item.ExtraData) + + // 11e. amount: u256 + if item.Amount.Int == nil { + s.SetError(fmt.Errorf("token amount is nil for token %s", destTokenAddr.String())) + return + } + s.U256(*item.Amount.Int) + }) + if err != nil { // Check error from SerializeSequenceWithFunction itself + return nil, fmt.Errorf("failed during token_amounts serialization: %w", err) + } + if s.Error() != nil { // Check error set within the lambda + return nil, fmt.Errorf("failed to serialize token_amounts: %w", s.Error()) + } + + // 12. offchain_token_data: vector> + bcs.SerializeSequenceWithFunction(offchainTokenData, s, func(s *bcs.Serializer, item []byte) { + s.WriteBytes(item) + }) + if err != nil { // Check error from SerializeSequenceWithFunction itself + return nil, fmt.Errorf("failed during offchain_token_data serialization: %w", err) + } + if s.Error() != nil { // Check error set within the lambda (though unlikely here) + return nil, fmt.Errorf("failed to serialize offchain_token_data: %w", s.Error()) + } + + // 13. proofs: vector + bcs.SerializeSequenceWithFunction(chainReport.Proofs, s, func(s *bcs.Serializer, item ccipocr3.Bytes32) { + if len(item) != 32 { + s.SetError(fmt.Errorf("invalid proof length: expected 32, got %d", len(item))) + return + } + s.FixedBytes(item[:]) + }) + if err != nil { // Check error from SerializeSequenceWithFunction itself + return nil, fmt.Errorf("failed during proofs serialization: %w", err) + } + if s.Error() != nil { // Check error set within the lambda + return nil, fmt.Errorf("failed to serialize proofs: %w", s.Error()) + } + + // Final check and return + if s.Error() != nil { + return nil, fmt.Errorf("BCS serialization failed: %w", s.Error()) + } + + return s.ToBytes(), nil +} + +func (e *ExecutePluginCodecV1) Decode(ctx context.Context, encodedReport []byte) (ccipocr3.ExecutePluginReport, error) { + des := bcs.NewDeserializer(encodedReport) + report := ccipocr3.ExecutePluginReport{} + var chainReport ccipocr3.ExecutePluginReportSingleChain + var message ccipocr3.Message + + // 1. source_chain_selector: u64 + chainReport.SourceChainSelector = ccipocr3.ChainSelector(des.U64()) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize source_chain_selector: %w", des.Error()) + } + + // --- Start Message Header --- + // 2. message_id: fixed_vector_u8(32) + messageIDBytes := des.ReadFixedBytes(32) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize message_id: %w", des.Error()) + } + copy(message.Header.MessageID[:], messageIDBytes) + + // 3. header_source_chain_selector: u64 + message.Header.SourceChainSelector = ccipocr3.ChainSelector(des.U64()) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize header_source_chain_selector: %w", des.Error()) + } + + // 4. dest_chain_selector: u64 + message.Header.DestChainSelector = ccipocr3.ChainSelector(des.U64()) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize dest_chain_selector: %w", des.Error()) + } + + // 5. sequence_number: u64 + message.Header.SequenceNumber = ccipocr3.SeqNum(des.U64()) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize sequence_number: %w", des.Error()) + } + + // 6. nonce: u64 + message.Header.Nonce = des.U64() + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize nonce: %w", des.Error()) + } + + // --- End Message Header --- + + // 7. sender: vector + message.Sender = des.ReadBytes() + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize sender: %w", des.Error()) + } + + // 8. data: vector + message.Data = des.ReadBytes() + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize data: %w", des.Error()) + } + + // 9. receiver: address + var receiverAddr aptos.AccountAddress + des.Struct(&receiverAddr) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize receiver: %w", des.Error()) + } + + // 10. gas_limit: u256 + _ = des.U256() + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize gas_limit: %w", des.Error()) + } + + // 10b. token_receiver: fixed_vector_u8(32) + tokenReceiverBytes := des.ReadFixedBytes(32) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize token_receiver: %w", des.Error()) + } + + // Sui OffRamp uses token_receiver as the actual message target. + // Hence, we set message.Receiver = tokenReceiverBytes. + message.Receiver = tokenReceiverBytes + + // 11. token_amounts: vector + message.TokenAmounts = bcs.DeserializeSequenceWithFunction(des, func(des *bcs.Deserializer, item *ccipocr3.RampTokenAmount) { + // 11a. source_pool_address: vector + item.SourcePoolAddress = des.ReadBytes() + if des.Error() != nil { + return // Error handled by caller + } + + // 11b. dest_token_address: address + var destTokenAddr aptos.AccountAddress + des.Struct(&destTokenAddr) + if des.Error() != nil { + return // Error handled by caller + } + item.DestTokenAddress = destTokenAddr[:] + + // 11c. dest_gas_amount: u32 + destGasAmount := des.U32() + if des.Error() != nil { + return // Error handled by caller + } + // Encode dest gas amount back into DestExecData + destData, err := bcs.SerializeU32(destGasAmount) + if err != nil { + des.SetError(fmt.Errorf("abi encode dest gas amount: %w", err)) + return + } + item.DestExecData = destData + + // 11d. extra_data: vector + item.ExtraData = des.ReadBytes() + if des.Error() != nil { + return // Error handled by caller + } + + // 11e. amount: u256 + amountU256 := des.U256() + if des.Error() != nil { + return // Error handled by caller + } + item.Amount = ccipocr3.NewBigInt(&amountU256) + }) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize token_amounts: %w", des.Error()) + } + + // 12. offchain_token_data: vector> + offchainTokenDataGroup := bcs.DeserializeSequenceWithFunction(des, func(des *bcs.Deserializer, item *[]byte) { + *item = des.ReadBytes() + }) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize offchain_token_data: %w", des.Error()) + } + // Wrap it in the expected [][][]byte structure + chainReport.OffchainTokenData = [][][]byte{offchainTokenDataGroup} + + // 13. proofs: vector + proofsBytes := bcs.DeserializeSequenceWithFunction(des, func(des *bcs.Deserializer, item *[]byte) { + *item = des.ReadFixedBytes(32) + }) + if des.Error() != nil { + return report, fmt.Errorf("failed to deserialize proofs: %w", des.Error()) + } + // Convert [][]byte to [][32]byte + chainReport.Proofs = make([]ccipocr3.Bytes32, len(proofsBytes)) + for i, proofB := range proofsBytes { + if len(proofB) != 32 { + // This shouldn't happen if ReadFixedBytes worked correctly + return report, fmt.Errorf("internal error: deserialized proof %d has length %d, expected 32", i, len(proofB)) + } + copy(chainReport.Proofs[i][:], proofB) + } + + // Check if all bytes were consumed + if des.Remaining() > 0 { + return report, fmt.Errorf("unexpected remaining bytes after decoding: %d", des.Remaining()) + } + + // Set empty fields + message.Header.MsgHash = ccipocr3.Bytes32{} + message.Header.OnRamp = ccipocr3.UnknownAddress{} + message.FeeToken = ccipocr3.UnknownAddress{} + message.ExtraArgs = ccipocr3.Bytes{} + message.FeeTokenAmount = ccipocr3.BigInt{} + + // Assemble the final report + chainReport.Messages = []ccipocr3.Message{message} + // ProofFlagBits is not part of the Sui report, initialize it empty/zero. + chainReport.ProofFlagBits = ccipocr3.NewBigInt(big.NewInt(0)) + report.ChainReports = []ccipocr3.ExecutePluginReportSingleChain{chainReport} + + return report, nil +} + +// Ensure ExecutePluginCodec implements the ExecutePluginCodec interface +var _ ccipocr3.ExecutePluginCodec = (*ExecutePluginCodecV1)(nil) diff --git a/core/capabilities/ccip/ccipsui/msghasher.go b/core/capabilities/ccip/ccipsui/msghasher.go index b1b151bbd10..7df33889079 100644 --- a/core/capabilities/ccip/ccipsui/msghasher.go +++ b/core/capabilities/ccip/ccipsui/msghasher.go @@ -120,7 +120,7 @@ func (h *MessageHasherV1) Hash(ctx context.Context, msg ccipocr3common.Message) return [32]byte{}, err } - gasLimit, err := parseExtraDataMap(decodedExtraArgsMap) + gasLimit, tokenReceiver, err := parseExtraDataMap(decodedExtraArgsMap) if err != nil { return [32]byte{}, fmt.Errorf("decode extra args to get gas limit: %w", err) } @@ -132,7 +132,7 @@ func (h *MessageHasherV1) Hash(ctx context.Context, msg ccipocr3common.Message) return [32]byte{}, err } - msgHash, err := computeMessageDataHash(metaDataHashInput, msg.Header.MessageID, receiverAddress, uint64(msg.Header.SequenceNumber), gasLimit, msg.Header.Nonce, msg.Sender, msg.Data, rampTokenAmounts) + msgHash, err := computeMessageDataHash(metaDataHashInput, msg.Header.MessageID, receiverAddress, uint64(msg.Header.SequenceNumber), gasLimit, tokenReceiver, msg.Header.Nonce, msg.Sender, msg.Data, rampTokenAmounts) if err != nil { return [32]byte{}, err } @@ -152,6 +152,7 @@ func computeMessageDataHash( receiver [32]byte, sequenceNumber uint64, gasLimit *big.Int, + tokenReceiver [32]byte, nonce uint64, sender []byte, data []byte, @@ -177,6 +178,7 @@ func computeMessageDataHash( {Type: bytes32Type}, // receiver as bytes32 {Type: uint64Type}, // sequenceNumber {Type: uint256Type}, // gasLimit + {Type: bytes32Type}, // tokenReceiver {Type: uint64Type}, // nonce } headerEncoded, err := headerArgs.Pack( @@ -184,6 +186,7 @@ func computeMessageDataHash( receiver, sequenceNumber, gasLimit, + tokenReceiver, nonce, ) if err != nil { @@ -289,28 +292,48 @@ func encodeBytes(b []byte) []byte { return result } -func parseExtraDataMap(input map[string]any) (*big.Int, error) { - var outputGas *big.Int +func parseExtraDataMap(input map[string]any) (*big.Int, [32]byte, error) { + outputGas, ok := input["gasLimit"] + if !ok { + return nil, [32]byte{}, errors.New("gas limit not found in extra data map") + } + outputGasInt, ok := outputGas.(*big.Int) + if !ok { + return nil, [32]byte{}, errors.New("gas limit not a *big.Int") + } + + tokenReceiver, ok := input["tokenReceiver"] + if !ok { + return nil, [32]byte{}, errors.New("token receiver not found in extra data map") + } + tokenReceiverBytes, ok := tokenReceiver.([32]byte) + if !ok { + return nil, [32]byte{}, errors.New("token receiver not a [32]byte") + } + return outputGasInt, tokenReceiverBytes, nil +} + +func extractDestGasAmountFromMap(input map[string]any) (uint32, error) { + // Iterate through the expected fields in the struct for fieldName, fieldValue := range input { lowercase := strings.ToLower(fieldName) switch lowercase { - case "gaslimit": - // Expect [][32]byte - if val, ok := fieldValue.(*big.Int); ok { - outputGas = val - return outputGas, nil + case "destgasamount": + // Expect uint32 + if val, ok := fieldValue.(uint32); ok { + return val, nil } - return nil, fmt.Errorf("unexpected type for gas limit: %T", fieldValue) + return 0, errors.New("invalid type for destgasamount, expected uint32") default: - // no error here, as we only need the keys to gasLimit, other keys can be skipped without like AllowOutOfOrderExecution etc. } } - return outputGas, errors.New("gas limit not found in extra data map") + + return 0, errors.New("invalid token message, dest gas amount not found in the DestExecDataDecoded map") } func addressBytesToBytes32(addr []byte) ([32]byte, error) { if len(addr) > 32 { - return [32]byte{}, fmt.Errorf("invalid Aptos address length, expected 32, got %d", len(addr)) + return [32]byte{}, fmt.Errorf("invalid Sui address length, expected 32, got %d", len(addr)) } var result [32]byte // Left pad by copying to the end of the 32 byte array diff --git a/core/capabilities/ccip/configs/evm/contract_reader.go b/core/capabilities/ccip/configs/evm/contract_reader.go index ad06fd1ae0b..dee3aec3d03 100644 --- a/core/capabilities/ccip/configs/evm/contract_reader.go +++ b/core/capabilities/ccip/configs/evm/contract_reader.go @@ -18,12 +18,12 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_0_0/rmn_proxy_contract" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/ccip_home" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/nonce_manager" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_home" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_remote" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" kcr "github.com/smartcontractkit/chainlink-evm/gethwrappers/keystone/generated/capabilities_registry_1_1_0" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/aggregator_v3_interface" ) diff --git a/core/capabilities/ccip/configs/sui/chain_writer.go b/core/capabilities/ccip/configs/sui/chain_writer.go index 59711910a6e..c56bb1d76a9 100644 --- a/core/capabilities/ccip/configs/sui/chain_writer.go +++ b/core/capabilities/ccip/configs/sui/chain_writer.go @@ -121,6 +121,12 @@ func GetChainWriterConfig(publicKeyStr string) (chainwriter.ChainWriterConfig, e ModuleId: strPtr("offramp"), Function: strPtr("finish_execute"), Params: []codec.SuiFunctionParam{ + { + Name: "ref", + Type: "object_id", + Required: true, + IsMutable: &nonMutable, + }, { Name: "state", Type: "object_id", diff --git a/core/capabilities/ccip/configs/sui/contract_reader.go b/core/capabilities/ccip/configs/sui/contract_reader.go index 2bc155e8418..0b6104f57d1 100644 --- a/core/capabilities/ccip/configs/sui/contract_reader.go +++ b/core/capabilities/ccip/configs/sui/contract_reader.go @@ -35,10 +35,6 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { } fromAddress = "0x" + fromAddress - offRampStatePointer := "_::offramp::OffRampStatePointer::off_ramp_state_id" - onRampStatePointer := "_::onramp::OnRampStatePointer::on_ramp_state_id" - ccipObjectRefStatePointer := "_::state_object::CCIPObjectRefPointer::object_ref_id" - return map[string]any{ "IsLoopPlugin": true, "EventsIndexer": map[string]any{ @@ -63,10 +59,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, }, // ref: https://github.com/smartcontractkit/chainlink-ccip/blob/bee7c32c71cf0aec594c051fef328b4a7281a1fc/pkg/reader/ccip.go#L1440 @@ -77,10 +78,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, }, }, @@ -103,10 +109,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, { Name: "token", @@ -120,10 +131,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, { Name: "tokens", @@ -137,22 +153,33 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, }, + ResultTupleToStruct: []string{"max_fee_juels_per_msg, link_token, token_price_staleness_threshold"}, }, "GetDestinationChainGasPrice": { Name: "get_dest_chain_gas_price", SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, { Name: "destChainSelector", @@ -171,10 +198,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "off_ramp_state_id", - PointerTag: &offRampStatePointer, - Type: "object_id", - Required: true, + Name: "off_ramp_state_id", + PointerTag: &codec.PointerTag{ + Module: "offramp", + PointerName: "OffRampStatePointer", + FieldName: "off_ramp_state_id", + DerivationKey: "OffRampState", + }, + Type: "object_id", + Required: true, }, { Name: "ocrPluginType", @@ -189,10 +221,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "off_ramp_state_id", - PointerTag: &offRampStatePointer, - Type: "object_id", - Required: true, + Name: "off_ramp_state_id", + PointerTag: &codec.PointerTag{ + Module: "offramp", + PointerName: "OffRampStatePointer", + FieldName: "off_ramp_state_id", + DerivationKey: "OffRampState", + }, + Type: "object_id", + Required: true, }, }, }, @@ -202,16 +239,26 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, { - Name: "off_ramp_state_id", - PointerTag: &offRampStatePointer, - Type: "object_id", - Required: true, + Name: "off_ramp_state_id", + PointerTag: &codec.PointerTag{ + Module: "offramp", + PointerName: "OffRampStatePointer", + FieldName: "off_ramp_state_id", + DerivationKey: "OffRampState", + }, + Type: "object_id", + Required: true, }, }, }, @@ -220,16 +267,26 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, { - Name: "off_ramp_state_id", - PointerTag: &offRampStatePointer, - Type: "object_id", - Required: true, + Name: "off_ramp_state_id", + PointerTag: &codec.PointerTag{ + Module: "offramp", + PointerName: "OffRampStatePointer", + FieldName: "off_ramp_state_id", + DerivationKey: "OffRampState", + }, + Type: "object_id", + Required: true, }, }, }, @@ -238,16 +295,26 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "object_ref_id", - Type: "object_id", - PointerTag: &ccipObjectRefStatePointer, - Required: true, + Name: "object_ref_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "state_object", + PointerName: "CCIPObjectRefPointer", + FieldName: "object_ref_id", + DerivationKey: "CCIPObjectRef", + }, + Required: true, }, { - Name: "off_ramp_state_id", - PointerTag: &offRampStatePointer, - Type: "object_id", - Required: true, + Name: "off_ramp_state_id", + PointerTag: &codec.PointerTag{ + Module: "offramp", + PointerName: "OffRampStatePointer", + FieldName: "off_ramp_state_id", + DerivationKey: "OffRampState", + }, + Type: "object_id", + Required: true, }, { Name: "sourceChainSelector", @@ -256,31 +323,6 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { }, }, }, - // consts.MethodNameGetExecutionState:{ - // "Name": "get_execution_state", - // "Params": []map[string]any{ - // { - // "Name": "sourceChainSelector", - // "Type": "u64", - // "Required": true, - // }, - // { - // "Name": "sequenceNumber", - // "Type": "u64", - // "Required": true, - // }, - // }, - // }, - // consts.MethodNameGetMerkleRoot: map[string]any{ - // "Name": "get_merkle_root", - // "Params": []map[string]any{ - // { - // "Name": "root", - // "Type": "vector", - // "Required": true, - // }, - // }, - // }, }, "Events": map[string]*chainreaderConfig.ChainReaderEvent{ "ExecutionStateChanged": { @@ -330,10 +372,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "on_ramp_state_id", - Type: "object_id", - PointerTag: &onRampStatePointer, - Required: true, + Name: "on_ramp_state_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "onramp", + PointerName: "OnRampStatePointer", + FieldName: "on_ramp_state_id", + DerivationKey: "OnRampState", + }, + Required: true, }, }, }, @@ -342,10 +389,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "on_ramp_state_id", - Type: "object_id", - PointerTag: &onRampStatePointer, - Required: true, + Name: "on_ramp_state_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "onramp", + PointerName: "OnRampStatePointer", + FieldName: "on_ramp_state_id", + DerivationKey: "OnRampState", + }, + Required: true, }, }, }, @@ -354,10 +406,15 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "on_ramp_state_id", - Type: "object_id", - PointerTag: &onRampStatePointer, - Required: true, + Name: "on_ramp_state_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "onramp", + PointerName: "OnRampStatePointer", + FieldName: "on_ramp_state_id", + DerivationKey: "OnRampState", + }, + Required: true, }, { Name: "destChainSelector", @@ -365,17 +422,22 @@ func GetChainReaderConfig(pubKeyStr string) (map[string]any, error) { Required: true, }, }, - ResultTupleToStruct: []string{"isEnabled", "sequenceNumber", "allowListEnabled", "allowedSenders"}, + ResultTupleToStruct: []string{"sequenceNumber", "allowListEnabled", "router"}, }, "GetExpectedNextSequenceNumber": { Name: "get_expected_next_sequence_number", SignerAddress: fromAddress, Params: []codec.SuiFunctionParam{ { - Name: "on_ramp_state_id", - Type: "object_id", - PointerTag: &onRampStatePointer, - Required: true, + Name: "on_ramp_state_id", + Type: "object_id", + PointerTag: &codec.PointerTag{ + Module: "onramp", + PointerName: "OnRampStatePointer", + FieldName: "on_ramp_state_id", + DerivationKey: "OnRampState", + }, + Required: true, }, { Name: "destChainSelector", diff --git a/core/scripts/ccip/revert-reason/handler/reason.go b/core/scripts/ccip/revert-reason/handler/reason.go index 3d188a8621d..3e5f84adabc 100644 --- a/core/scripts/ccip/revert-reason/handler/reason.go +++ b/core/scripts/ccip/revert-reason/handler/reason.go @@ -27,9 +27,9 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/burn_mint_token_pool" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/lock_release_token_pool" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/usdc_token_pool" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc677" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/erc20" ) diff --git a/core/scripts/cre/environment/cre b/core/scripts/cre/environment/cre deleted file mode 120000 index ddc42778e64..00000000000 --- a/core/scripts/cre/environment/cre +++ /dev/null @@ -1 +0,0 @@ -cre_v0.2.1_darwin_arm64 \ No newline at end of file diff --git a/core/scripts/cre/environment/cre b/core/scripts/cre/environment/cre new file mode 100644 index 00000000000..ddc42778e64 --- /dev/null +++ b/core/scripts/cre/environment/cre @@ -0,0 +1 @@ +cre_v0.2.1_darwin_arm64 \ No newline at end of file diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 13641b52d81..997e9097383 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -46,7 +46,7 @@ require ( github.com/rs/zerolog v1.33.0 github.com/shopspring/decimal v1.4.0 github.com/smartcontractkit/chainlink-automation v0.8.1 - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0 + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a github.com/smartcontractkit/chainlink-common v0.9.6-0.20251010135052-c1f318b35ed1 github.com/smartcontractkit/chainlink-data-streams v0.1.5 github.com/smartcontractkit/chainlink-deployments-framework v0.54.0 @@ -61,7 +61,7 @@ require ( github.com/smartcontractkit/chainlink/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/cron-based v0.0.0-20251008094352-f74459c46e8c github.com/smartcontractkit/chainlink/core/scripts/cre/environment/examples/workflows/v1/proof-of-reserve/web-trigger-based v0.0.0-20251008094352-f74459c46e8c github.com/smartcontractkit/chainlink/system-tests/lib v0.0.0-20251008094352-f74459c46e8c - github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.7.0 + github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.8.0 github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d github.com/spf13/cobra v1.9.1 github.com/spf13/viper v1.21.0 @@ -71,8 +71,8 @@ require ( github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722 github.com/urfave/cli v1.22.16 go.uber.org/zap v1.27.0 - golang.org/x/sync v0.16.0 - golang.org/x/text v0.28.0 + golang.org/x/sync v0.17.0 + golang.org/x/text v0.29.0 google.golang.org/protobuf v1.36.7 gopkg.in/yaml.v3 v3.0.1 k8s.io/api v0.32.3 @@ -149,12 +149,13 @@ require ( github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect - github.com/block-vision/sui-go-sdk v1.0.9 // indirect + github.com/block-vision/sui-go-sdk v1.1.2 // indirect github.com/brianvoe/gofakeit/v7 v7.3.0 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/buger/goterm v1.0.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v28 v28.0.0 // indirect @@ -493,17 +494,18 @@ require ( github.com/smartcontractkit/chainlink-protos/svr v1.1.0 // indirect github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207 // indirect github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 // indirect - github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f // indirect + github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 // indirect + github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 // indirect github.com/smartcontractkit/chainlink-testing-framework/framework/components/fake v0.10.0 // indirect github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect github.com/smartcontractkit/chainlink-ton v0.0.0-20251009173109-af31806bede5 // indirect github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20251009173109-af31806bede5 // indirect github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513 // indirect - github.com/smartcontractkit/cre-sdk-go v0.7.0 // indirect + github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81 // indirect github.com/smartcontractkit/crib-sdk v0.4.0 // indirect github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect - github.com/smartcontractkit/mcms v0.25.0 // indirect + github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 // indirect github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20250624150019-e49f7e125e6b // indirect @@ -592,16 +594,16 @@ require ( go.uber.org/ratelimit v0.3.1 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/arch v0.11.0 // indirect - golang.org/x/crypto v0.40.0 // indirect + golang.org/x/crypto v0.42.0 // indirect golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc // indirect golang.org/x/lint v0.0.0-20241112194109-818c5a804067 // indirect - golang.org/x/mod v0.26.0 // indirect - golang.org/x/net v0.42.0 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/term v0.33.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/term v0.35.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools v0.36.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.16.0 // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 36bc4eebb4f..8567aa9923b 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -252,8 +252,8 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= 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= -github.com/block-vision/sui-go-sdk v1.0.9 h1:vp8y+nSshTdTyhiDYy6Z/4aEsyTbveJ6n8ALg53GHWg= -github.com/block-vision/sui-go-sdk v1.0.9/go.mod h1:V9vmxB2pyYdy8eXV+x5lb/PcSVt3ytvF43m3NUlybx0= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/brianvoe/gofakeit/v7 v7.3.0 h1:TWStf7/lLpAjKw+bqwzeORo9jvrxToWEwp9b1J2vApQ= github.com/brianvoe/gofakeit/v7 v7.3.0/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA= @@ -277,6 +277,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -1593,8 +1595,8 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf h github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf/go.mod h1:tEjqontct1/5cKHm4q75nopZa1rwzaQZwd9U9wn0uZE= 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.1.1-solana.0.20251006204220-06f2720ee9a0 h1:/FUN8x1iF3jYR3LYiIwvtHtJ6O6fZrMxtkbvTgO2GZA= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a h1:3vOXsnGxG5KiRZmPSueaHGprc0VTB+Z211pblOvQsNU= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 h1:f8ak6g6P2KT4HjUbleU+Bh0gUJXMoGuoriMSyGxxD4M= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5/go.mod h1:Ve1xD71bl193YIZQEoJMmBqLGQJdNs29bwbuObwvbhQ= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 h1:Z4t2ZY+ZyGWxtcXvPr11y4o3CGqhg3frJB5jXkCSvWA= @@ -1643,8 +1645,10 @@ github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222- github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207/go.mod h1:HIpGvF6nKCdtZ30xhdkKWGM9+4Z4CVqJH8ZBL1FTEiY= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 h1:QgjF+S64bGDyaNcz11zDg7GC7FwNmYrsHN6jiJPRVkk= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524/go.mod h1:vcms/UPnfg7LZ2txinn59yJR6rXZ31XOk5++03LOeys= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f h1:7saUNbu+edzDgRPedNFfTsx5+5RL40r1r0pgISoh8Hs= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f/go.mod h1:CTR5agBB07sCpRltBkHmnkCZ+g8sXRafCJge/Hqr7aM= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 h1:7KMcSEptDirqBY/jzNhxFvWmDE2s5KQE6uMPQ1inad4= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854/go.mod h1:VlyZhVw+a93Sk8rVHOIH6tpiXrMzuWLZrjs1eTIExW8= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 h1:/BKZfcmGghI+LQdXdJXz63l0vYntSg6rd3bfU/5W55I= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854/go.mod h1:xMf64ftqTx9LuvHjMSxBMmgN41EOMQJ/OpGnvLf4NiM= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34 h1:W7/I1dpKXmuXSisuWs6tYGQCF+VtMdJX9iegzKjPYWQ= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34/go.mod h1:SoCjdzeZHP500QtKAjJ9I6rHD03SkQmRL4dNkOoe6yk= github.com/smartcontractkit/chainlink-testing-framework/framework/components/dockercompose v0.1.15 h1:usf6YCNmSO8R1/rU28wUfIdp7zXlqGGOAttXW5mgkXU= @@ -1665,10 +1669,10 @@ github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9 github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513/go.mod h1:ccjEgNeqOO+bjPddnL4lUrNLzyCvGCxgBjJdhFX3wa8= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d h1:qLmSOOtB/Ogn79eIDkuujOu8M5Jd747V1H7Brk/nTvo= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d/go.mod h1:4WhGgCA0smBbBud5mK+jnDb2wwndMvoqaWBJ3OV/7Bw= -github.com/smartcontractkit/cre-sdk-go v0.7.0 h1:QmCc/a6kGCmzhm0k0WFJZKxjklDedtAfvrA+vTnLcW0= -github.com/smartcontractkit/cre-sdk-go v0.7.0/go.mod h1:qVhKhBLANrGWKav6aHqO2UM7IltiouOnUbxu8ZQlKVM= -github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.7.0 h1:9rDE5Hy7mozQ7aEqQwCgktZ2nQTeJDXNSkicyU8cqJc= -github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.7.0/go.mod h1:UaZJB6YRx3rsuvEtZWJ9zFH/ap3gXz30BldsrpUrYfM= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81 h1:CfnjzJvn3iX93PzdGucyGJmgv/KDXv8DfKcLw/mix24= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81/go.mod h1:CQY8hCISjctPmt8ViDVgFm4vMGLs5fYI198QhkBS++Y= +github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.8.0 h1:aO++xdGcQ8TpxAfXrm7EHeIVLDitB8xg7J8/zSxbdBY= +github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.8.0/go.mod h1:PWyrIw16It4TSyq6mDXqmSR0jF2evZRKuBxu7pK1yDw= github.com/smartcontractkit/crib-sdk v0.4.0 h1:in97WjiveVY1cz1LZOcLGVwnkRucfCipPeOpjkJ1QJM= github.com/smartcontractkit/crib-sdk v0.4.0/go.mod h1:L8/7tmnAwtgfaXGPgq4Ujrlkevd7rfqS7Zf3wgE84bk= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY= @@ -1677,8 +1681,8 @@ github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12i github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7/go.mod h1:FX7/bVdoep147QQhsOPkYsPEXhGZjeYx6lBSaSXtZOA= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d h1:/0/80Ic6wpKH5F1nwDoRj9+70IxXunvCyNcCkA+9ik0= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d/go.mod h1:Acy3BTBxou83ooMESLO90s8PKSu7RvLCzwSTbxxfOK0= -github.com/smartcontractkit/mcms v0.25.0 h1:GTkG6jQ2CYoVQFKkRQnA42IvUrR4gObeHqwrQNRhmGM= -github.com/smartcontractkit/mcms v0.25.0/go.mod h1:7v5DNfWqIS81nISbuFBrlV1QHZfD+pFQzjsxqqhcK9o= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 h1:Vt13oeOTFZ8IMQQTuWi9MbvR5wl/a1v4BRIV0GyJj7Q= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4/go.mod h1:g8Ot7s0gVJrJWvH1qib2jC7u6Npos1gTlKpoFSbJVI8= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 h1:rN8PnOZj53L70zlm1aYz1k14lXNCt7NoV666TDfcTJA= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618/go.mod h1:iwy4yWFuK+1JeoIRTaSOA9pl+8Kf//26zezxEXrAQEQ= github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 h1:AWLLzOSCbSdBEYrAXZn0XKnTFXxr1BANaW2d5qTZbSM= @@ -2016,6 +2020,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -2033,8 +2038,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -2077,8 +2082,8 @@ 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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2140,8 +2145,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= 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= @@ -2169,8 +2174,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2265,8 +2270,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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= @@ -2280,8 +2285,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= -golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2298,8 +2303,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2371,8 +2376,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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 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= diff --git a/core/services/keystore/keys/suikey/key.go b/core/services/keystore/keys/suikey/key.go index 79186b2a412..5d9ba5ac018 100644 --- a/core/services/keystore/keys/suikey/key.go +++ b/core/services/keystore/keys/suikey/key.go @@ -102,7 +102,6 @@ func (s Key) Raw() internal.Raw { return s.raw } // Sign is used to sign a message func (s Key) Sign(msg []byte) ([]byte, error) { - fmt.Printf("About to sign Sui MSG: %s\n", msg) var noHash crypto.Hash return s.signFn(cryptorand.Reader, msg, noHash) // no specific hash function used } diff --git a/core/services/keystore/sui.go b/core/services/keystore/sui.go index 41bd607cf2e..1d78da4b1f0 100644 --- a/core/services/keystore/sui.go +++ b/core/services/keystore/sui.go @@ -159,11 +159,6 @@ func (ks *sui) Sign(_ context.Context, id string, msg []byte) ([]byte, error) { } func (ks *sui) getByID(id string) (suikey.Key, error) { - // ks.logger.Info("SUIKEYID: ", id) - for id := range ks.keyRing.Sui { - fmt.Printf("keyID: %s\n", id) - } - key, found := ks.keyRing.Sui[id] if !found { return suikey.Key{}, KeyNotFoundError{ID: id, KeyType: "Sui"} diff --git a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/test_helpers.go b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/test_helpers.go index f4ae403bb12..7b18bc183c5 100644 --- a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/test_helpers.go +++ b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/test_helpers.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccip" "github.com/smartcontractkit/chainlink-evm/pkg/client" diff --git a/deployment/ccip/changeset/aptos/config/chain.go b/deployment/ccip/changeset/aptos/config/chain.go index d0129bf2a7b..6f97f1db47f 100644 --- a/deployment/ccip/changeset/aptos/config/chain.go +++ b/deployment/ccip/changeset/aptos/config/chain.go @@ -8,7 +8,7 @@ import ( chainsel "github.com/smartcontractkit/chain-selectors" aptos_fee_quoter "github.com/smartcontractkit/chainlink-aptos/bindings/ccip/fee_quoter" - evm_fee_quoter "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + evm_fee_quoter "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/aptos/utils" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/v1_6" aptosstate "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/aptos" diff --git a/deployment/ccip/changeset/aptos/config/lane.go b/deployment/ccip/changeset/aptos/config/lane.go index 29aa79cd324..4e3aad36448 100644 --- a/deployment/ccip/changeset/aptos/config/lane.go +++ b/deployment/ccip/changeset/aptos/config/lane.go @@ -7,7 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" chainsel "github.com/smartcontractkit/chain-selectors" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/v1_6" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" ) diff --git a/deployment/ccip/changeset/aptos/config/lane_test.go b/deployment/ccip/changeset/aptos/config/lane_test.go index c97b5dadccf..b2272795d50 100644 --- a/deployment/ccip/changeset/aptos/config/lane_test.go +++ b/deployment/ccip/changeset/aptos/config/lane_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/require" aptos_fee_quoter "github.com/smartcontractkit/chainlink-aptos/bindings/ccip/fee_quoter" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/v1_6" "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/ccipevm" diff --git a/deployment/ccip/changeset/crossfamily/v1_6/cs_add_evm_solana_lane.go b/deployment/ccip/changeset/crossfamily/v1_6/cs_add_evm_solana_lane.go index 8218a6ad200..6b1696cc7e6 100644 --- a/deployment/ccip/changeset/crossfamily/v1_6/cs_add_evm_solana_lane.go +++ b/deployment/ccip/changeset/crossfamily/v1_6/cs_add_evm_solana_lane.go @@ -8,7 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" mcmslib "github.com/smartcontractkit/mcms" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" "github.com/smartcontractkit/chainlink-deployments-framework/operations" diff --git a/deployment/ccip/changeset/internal/deploy_home_chain.go b/deployment/ccip/changeset/internal/deploy_home_chain.go index db9c3a951a2..82052677646 100644 --- a/deployment/ccip/changeset/internal/deploy_home_chain.go +++ b/deployment/ccip/changeset/internal/deploy_home_chain.go @@ -161,6 +161,77 @@ func BuildSetOCR3ConfigArgs( return offrampOCR3Configs, nil } +// we can't use the EVM one because we need the 32 byte transmitter address +type MultiOCR3BaseOCRConfigArgsSui struct { + ConfigDigest [32]byte + OcrPluginType byte + F byte + IsSignatureVerificationEnabled bool + Signers [][]byte + Transmitters []string +} + +// BuildSetOCR3ConfigArgsSolana builds OCR3 config for Aptos chains +func BuildSetOCR3ConfigArgsSui( + donID uint32, + ccipHome *ccip_home.CCIPHome, + destSelector uint64, + configType globals.ConfigType, +) ([]MultiOCR3BaseOCRConfigArgsSui, error) { + chainCfg, err := ccipHome.GetChainConfig(nil, destSelector) + if err != nil { + return nil, fmt.Errorf("error getting chain config for chain selector %d it must be set before OCR3Config set up: %w", destSelector, err) + } + var offrampOCR3Configs []MultiOCR3BaseOCRConfigArgsSui + for _, pluginType := range []types.PluginType{types.PluginTypeCCIPCommit, types.PluginTypeCCIPExec} { + ocrConfig, err2 := ccipHome.GetAllConfigs(&bind.CallOpts{ + Context: context.Background(), + }, donID, uint8(pluginType)) + if err2 != nil { + return nil, err2 + } + + configForOCR3 := ocrConfig.ActiveConfig + // we expect only an active config + switch configType { + case globals.ConfigTypeActive: + if ocrConfig.ActiveConfig.ConfigDigest == [32]byte{} { + return nil, fmt.Errorf("invalid OCR3 config state, expected active config, donID: %d, activeConfig: %v, candidateConfig: %v", + donID, hexutil.Encode(ocrConfig.ActiveConfig.ConfigDigest[:]), hexutil.Encode(ocrConfig.CandidateConfig.ConfigDigest[:])) + } + case globals.ConfigTypeCandidate: + if ocrConfig.CandidateConfig.ConfigDigest == [32]byte{} { + return nil, fmt.Errorf("invalid OCR3 config state, expected candidate config, donID: %d, activeConfig: %v, candidateConfig: %v", + donID, hexutil.Encode(ocrConfig.ActiveConfig.ConfigDigest[:]), hexutil.Encode(ocrConfig.CandidateConfig.ConfigDigest[:])) + } + configForOCR3 = ocrConfig.CandidateConfig + } + + if err := validateOCR3Config(destSelector, configForOCR3.Config, &chainCfg); err != nil { + return nil, err + } + + var signerAddresses [][]byte + var transmitterAddresses []string + for _, node := range configForOCR3.Config.Nodes { + signerAddresses = append(signerAddresses, node.SignerKey) + + transmitterAddress := "0x" + hex.EncodeToString(node.TransmitterKey) + transmitterAddresses = append(transmitterAddresses, transmitterAddress) + } + + offrampOCR3Configs = append(offrampOCR3Configs, MultiOCR3BaseOCRConfigArgsSui{ + ConfigDigest: configForOCR3.ConfigDigest, + OcrPluginType: uint8(pluginType), + F: configForOCR3.Config.FRoleDON, + IsSignatureVerificationEnabled: pluginType == types.PluginTypeCCIPCommit, + Signers: signerAddresses, + Transmitters: transmitterAddresses, + }) + } + return offrampOCR3Configs, nil +} + func validateOCR3Config(chainSel uint64, configForOCR3 ccip_home.CCIPHomeOCR3Config, chainConfig *ccip_home.CCIPHomeChainConfig) error { if chainConfig != nil { // chainConfigs must be set before OCR3 configs due to the added fChain == F validation @@ -556,6 +627,11 @@ func BuildOCR3ConfigForCCIPHome( return nil, fmt.Errorf("failed to decode SVM address '%s': %w", transmitter, err) } parsed = pk.Bytes() + case chain_selectors.FamilySui: + parsed, err = hex.DecodeString(strings.TrimPrefix(string(transmitter), "0x")) + if err != nil { + return nil, fmt.Errorf("failed to decode SUI address '%s': %w", transmitter, err) + } case chain_selectors.FamilyTon: pk := address.MustParseAddr(string(transmitter)) if pk == nil || pk.IsAddrNone() { diff --git a/deployment/ccip/changeset/sui/cs_set_ocr3_offramp.go b/deployment/ccip/changeset/sui/cs_set_ocr3_offramp.go new file mode 100644 index 00000000000..1a31e4f029c --- /dev/null +++ b/deployment/ccip/changeset/sui/cs_set_ocr3_offramp.go @@ -0,0 +1,185 @@ +package sui + +import ( + "encoding/hex" + "fmt" + "strings" + + "golang.org/x/crypto/blake2b" + + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + "github.com/smartcontractkit/chainlink-deployments-framework/operations" + + "github.com/smartcontractkit/chainlink-sui/bindings/bind" + sui_deployment "github.com/smartcontractkit/chainlink-sui/deployment" + sui_ops "github.com/smartcontractkit/chainlink-sui/deployment/ops" + offrampops "github.com/smartcontractkit/chainlink-sui/deployment/ops/ccip_offramp" + + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/globals" + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/internal" + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/v1_6" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" + + "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" +) + +var _ cldf.ChangeSetV2[v1_6.SetOCR3OffRampConfig] = SetOCR3Offramp{} + +type SetOCR3Offramp struct{} + +// Ed25519Scheme Ed25519 signature scheme flag +// https://docs.sui.io/concepts/cryptography/transaction-auth/keys-addresses#address-format +const Ed25519Scheme byte = 0x00 + +// Apply implements deployment.ChangeSetV2. +func (s SetOCR3Offramp) Apply(e cldf.Environment, config v1_6.SetOCR3OffRampConfig) (cldf.ChangesetOutput, error) { + state, err := stateview.LoadOnchainState(e) + if err != nil { + return cldf.ChangesetOutput{}, fmt.Errorf("failed to load Sui onchain state: %w", err) + } + + suiState, err := sui_deployment.LoadOnchainStatesui(e) + if err != nil { + return cldf.ChangesetOutput{}, fmt.Errorf("failed to load Sui onchain state: %w", err) + } + + ab := cldf.NewMemoryAddressBook() + + for _, remoteSelector := range config.RemoteChainSels { + suiChains := e.BlockChains.SuiChains() + suiChain := suiChains[remoteSelector] + suiSigner := suiChain.Signer + + deps := Deps{ + AB: ab, + SuiChain: sui_ops.OpTxDeps{ + Client: suiChain.Client, + Signer: suiSigner, + GetCallOpts: func() *bind.CallOpts { + b := uint64(400_000_000) + return &bind.CallOpts{ + WaitForExecution: true, + GasBudget: &b, + } + }, + }, + CCIPOnChainState: state, + } + + // DonIds for the chain + donID, err := internal.DonIDForChain(deps.CCIPOnChainState.Chains[config.HomeChainSel].CapabilityRegistry, + deps.CCIPOnChainState.Chains[config.HomeChainSel].CCIPHome, + remoteSelector) + if err != nil { + return cldf.ChangesetOutput{}, err + } + + ocr3Args, err := internal.BuildSetOCR3ConfigArgsSui( + donID, + deps.CCIPOnChainState.Chains[config.HomeChainSel].CCIPHome, + remoteSelector, + globals.ConfigTypeActive, + ) + if err != nil { + return cldf.ChangesetOutput{}, err + } + + var commitArgs *internal.MultiOCR3BaseOCRConfigArgsSui + var execArgs *internal.MultiOCR3BaseOCRConfigArgsSui + for _, ocr3Arg := range ocr3Args { + switch ocr3Arg.OcrPluginType { + case uint8(types.PluginTypeCCIPCommit): + commitArgs = &ocr3Arg + case uint8(types.PluginTypeCCIPExec): + execArgs = &ocr3Arg + default: + return cldf.ChangesetOutput{}, err + } + } + + // convert transmitters to account address + var commitTransmitters []string + + for _, transmitter := range commitArgs.Transmitters { + // 1) Strip any “0x” prefix + clean := strings.TrimPrefix(transmitter, "0x") + + // 2) Decode the clean hex into bytes + pubKeyBytes, err := hex.DecodeString(clean) + if err != nil { + return cldf.ChangesetOutput{}, fmt.Errorf("failed to decode transmitter %q: %w", transmitter, err) + } + flagged := append([]byte{Ed25519Scheme}, pubKeyBytes...) + + hash := blake2b.Sum256(flagged) + addr := "0x" + hex.EncodeToString(hash[:]) + commitTransmitters = append(commitTransmitters, addr) + } + + setOCR3ConfigCommitInput := offrampops.SetOCR3ConfigInput{ + OffRampPackageId: suiState[remoteSelector].OffRampAddress, + OffRampStateId: suiState[remoteSelector].OffRampStateObjectId, + OwnerCapObjectId: suiState[remoteSelector].OffRampOwnerCapId, + CCIPObjectRefId: suiState[remoteSelector].CCIPObjectRef, + // commit plugin config + ConfigDigest: commitArgs.ConfigDigest[:], + OCRPluginType: commitArgs.OcrPluginType, + BigF: commitArgs.F, + IsSignatureVerificationEnabled: commitArgs.IsSignatureVerificationEnabled, + Signers: commitArgs.Signers, + Transmitters: commitTransmitters, + } + + // convert exec transmitters to account address + var execTransmitters []string + + for _, transmitter := range execArgs.Transmitters { + // 1) Strip any “0x” prefix + clean := strings.TrimPrefix(transmitter, "0x") + + // 2) Decode the clean hex into bytes + pubKeyBytes, err := hex.DecodeString(clean) + if err != nil { + return cldf.ChangesetOutput{}, fmt.Errorf("failed to decode transmitter %q: %w", transmitter, err) + } + + flagged := append([]byte{Ed25519Scheme}, pubKeyBytes...) + + hash := blake2b.Sum256(flagged) + addr := "0x" + hex.EncodeToString(hash[:]) + execTransmitters = append(execTransmitters, addr) + } + _, err = operations.ExecuteOperation(e.OperationsBundle, offrampops.SetOCR3ConfigOp, deps.SuiChain, setOCR3ConfigCommitInput) + if err != nil { + return cldf.ChangesetOutput{}, err + } + + setOCR3ConfigExecInput := offrampops.SetOCR3ConfigInput{ + OffRampPackageId: suiState[remoteSelector].OffRampAddress, + OffRampStateId: suiState[remoteSelector].OffRampStateObjectId, + OwnerCapObjectId: suiState[remoteSelector].OffRampOwnerCapId, + CCIPObjectRefId: suiState[remoteSelector].CCIPObjectRef, + // exec plugin config + ConfigDigest: execArgs.ConfigDigest[:], + OCRPluginType: execArgs.OcrPluginType, + BigF: execArgs.F, + IsSignatureVerificationEnabled: execArgs.IsSignatureVerificationEnabled, + Signers: execArgs.Signers, + Transmitters: execTransmitters, + } + + _, err = operations.ExecuteOperation(e.OperationsBundle, offrampops.SetOCR3ConfigOp, deps.SuiChain, setOCR3ConfigExecInput) + if err != nil { + return cldf.ChangesetOutput{}, err + } + } + + return cldf.ChangesetOutput{ + AddressBook: ab, + }, nil +} + +// VerifyPreconditions implements deployment.ChangeSetV2. +func (s SetOCR3Offramp) VerifyPreconditions(e cldf.Environment, config v1_6.SetOCR3OffRampConfig) error { + return nil +} diff --git a/deployment/ccip/changeset/sui/dependencies.go b/deployment/ccip/changeset/sui/dependencies.go new file mode 100644 index 00000000000..797218b7cb9 --- /dev/null +++ b/deployment/ccip/changeset/sui/dependencies.go @@ -0,0 +1,13 @@ +package sui + +import ( + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + sui_ops "github.com/smartcontractkit/chainlink-sui/deployment/ops" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" +) + +type Deps struct { + AB *cldf.AddressBookMap + SuiChain sui_ops.OpTxDeps + CCIPOnChainState stateview.CCIPOnChainState +} diff --git a/deployment/ccip/changeset/testhelpers/messagelimitationstest/helpers.go b/deployment/ccip/changeset/testhelpers/messagelimitationstest/helpers.go index 1f674270e3a..409ab631e4f 100644 --- a/deployment/ccip/changeset/testhelpers/messagelimitationstest/helpers.go +++ b/deployment/ccip/changeset/testhelpers/messagelimitationstest/helpers.go @@ -9,8 +9,8 @@ import ( aptos_feequoter "github.com/smartcontractkit/chainlink-aptos/bindings/ccip/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" ccipclient "github.com/smartcontractkit/chainlink/deployment/ccip/shared/client" diff --git a/deployment/ccip/changeset/testhelpers/messagingtest/helpers.go b/deployment/ccip/changeset/testhelpers/messagingtest/helpers.go index 22bcc7bd1ad..e40347bb07d 100644 --- a/deployment/ccip/changeset/testhelpers/messagingtest/helpers.go +++ b/deployment/ccip/changeset/testhelpers/messagingtest/helpers.go @@ -181,6 +181,14 @@ func Run(t *testing.T, tc TestCase) (out TestCaseOutput) { FeeToken: feeToken, ExtraArgs: tc.ExtraArgs, } + + case chain_selectors.FamilySui: + msg = testhelpers.SuiSendRequest{ + Data: tc.MsgData, + Receiver: common.LeftPadBytes(tc.Receiver, 32), + ExtraArgs: tc.ExtraArgs, + FeeToken: tc.FeeToken, + } case chain_selectors.FamilyAptos: feeToken := aptos.AccountAddress{} if len(tc.FeeToken) > 0 { @@ -372,6 +380,9 @@ func Run(t *testing.T, tc TestCase) (out TestCaseOutput) { // Aptos does only support out-of-order execution case chain_selectors.FamilyAptos: unorderedExec = true + // Sui does only support out-of-order execution + case chain_selectors.FamilySui: + unorderedExec = true // TON does only support out-of-order execution case chain_selectors.FamilyTon: unorderedExec = true diff --git a/deployment/ccip/changeset/testhelpers/test_assertions.go b/deployment/ccip/changeset/testhelpers/test_assertions.go index 454cb163999..6c07b01f7bb 100644 --- a/deployment/ccip/changeset/testhelpers/test_assertions.go +++ b/deployment/ccip/changeset/testhelpers/test_assertions.go @@ -20,12 +20,17 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + aptos_ccip_offramp "github.com/smartcontractkit/chainlink-aptos/bindings/ccip_offramp" module_offramp "github.com/smartcontractkit/chainlink-aptos/bindings/ccip_offramp/offramp" "github.com/smartcontractkit/chainlink-aptos/relayer/codec" + sui_module_offramp "github.com/smartcontractkit/chainlink-sui/bindings/generated/ccip/ccip_offramp/offramp" + sui_ccip_offramp "github.com/smartcontractkit/chainlink-sui/bindings/packages/offramp" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" solconfig "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/config" "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/latest/ccip_offramp" solccip "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/ccip" @@ -35,14 +40,15 @@ import ( chainsel "github.com/smartcontractkit/chain-selectors" + ccipocr3common "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3" commonutils "github.com/smartcontractkit/chainlink-common/pkg/utils" "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" cldf_aptos "github.com/smartcontractkit/chainlink-deployments-framework/chain/aptos" cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" cldf_solana "github.com/smartcontractkit/chainlink-deployments-framework/chain/solana" + cldf_sui "github.com/smartcontractkit/chainlink-deployments-framework/chain/sui" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" - "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" ) @@ -244,6 +250,16 @@ func ConfirmCommitForAllWithExpectedSeqNums( expectedSeqNum, true, )) + case chainsel.FamilySui: + return commonutils.JustError(ConfirmCommitWithExpectedSeqNumRangeSui( + t, + srcChain, + e.BlockChains.SuiChains()[dstChain], + state.SuiChains[dstChain].OffRampAddress, + startBlock, + expectedSeqNum, + true, + )) case chainsel.FamilyAptos: return commonutils.JustError(ConfirmCommitWithExpectedSeqNumRangeAptos( t, @@ -369,6 +385,17 @@ func ConfirmMultipleCommits( enforceSingleCommit, ) return err + case chainsel.FamilySui: + _, err := ConfirmCommitWithExpectedSeqNumRangeSui( + t, + srcChain, + env.BlockChains.SuiChains()[destChain], + state.SuiChains[destChain].OffRampAddress, + startBlocks[destChain], + seqRange, + enforceSingleCommit, + ) + return err case chainsel.FamilyAptos: _, err := ConfirmCommitWithExpectedSeqNumRangeAptos( t, @@ -462,6 +489,7 @@ func ConfirmCommitWithExpectedSeqNumRange( iter, err := offRamp.FilterCommitReportAccepted(&bind.FilterOpts{ Context: t.Context(), }) + // In some test case the test ends while the filter is still running resulting in a context.Canceled error. if err != nil && !errors.Is(err, context.Canceled) { require.NoError(t, err) @@ -839,6 +867,18 @@ func ConfirmExecWithSeqNrsForAll( if err != nil { return err } + case chainsel.FamilySui: + innerExecutionStates, err = ConfirmExecWithExpectedSeqNrsSui( + t, + srcChain, + e.BlockChains.SuiChains()[dstChain], + state.SuiChains[dstChain].OffRampAddress, + startBlock, + seqRange, + ) + if err != nil { + return err + } case chainsel.FamilyTon: innerExecutionStates, err = ConfirmExecWithExpectedSeqNrsTON( t, @@ -1081,6 +1121,82 @@ func ConfirmExecWithExpectedSeqNrsAptos( } } +func ConfirmExecWithExpectedSeqNrsSui( + t *testing.T, + srcSelector uint64, + dest cldf_sui.Chain, + offRampAddress string, + startVersion *uint64, + expectedSeqNrs []uint64, +) (executionStates map[uint64]int, err error) { + if startVersion != nil { + t.Logf("[DEBUG] startVersion = %d", *startVersion) + } else { + t.Log("[DEBUG] startVersion = nil (streaming from latest)") + } + + if len(expectedSeqNrs) == 0 { + t.Log("[DEBUG] expectedSeqNrs is empty") + return nil, errors.New("no expected sequence numbers provided") + } + + done := make(chan any) + defer close(done) + + t.Log("[DEBUG] Subscribing to Sui events...", offRampAddress) + sink, errChan := SuiEventEmitter[module_offramp.ExecutionStateChanged](t, dest.Client, offRampAddress, "offramp", "ExecutionStateChanged", done) + + t.Log("[DEBUG] Event subscription established") + + executionStates = make(map[uint64]int) + seqNrsToWatch := make(map[uint64]bool) + for _, seqNr := range expectedSeqNrs { + seqNrsToWatch[seqNr] = true + } + t.Logf("[DEBUG] Watching for sequence numbers: %+v", seqNrsToWatch) + + timeout := time.NewTimer(tests.WaitTimeout(t)) + defer timeout.Stop() + + for { + select { + case event := <-sink: + t.Logf("[DEBUG] Received event: %+v", event) + + if !seqNrsToWatch[event.Event.SequenceNumber] { + t.Logf("[DEBUG] Ignoring event with unexpected sequence number: %d", event.Event.SequenceNumber) + continue + } + + if event.Event.SourceChainSelector != srcSelector { + t.Logf("[DEBUG] Ignoring event with unexpected source chain selector: got %d, expected %d", + event.Event.SourceChainSelector, srcSelector) + continue + } + + if seqNrsToWatch[event.Event.SequenceNumber] && event.Event.SourceChainSelector == srcSelector { + t.Logf("(Sui) received ExecutionStateChanged (state %s) on chain %d (offramp %s) with expected sequence number %d (tx %s)", + executionStateToString(event.Event.State), dest.Selector, offRampAddress, event.Event.SequenceNumber, event.Version, + ) + if event.Event.State == EXECUTION_STATE_INPROGRESS { + continue + } + executionStates[event.Event.SequenceNumber] = int(event.Event.State) + delete(seqNrsToWatch, event.Event.SequenceNumber) + if len(seqNrsToWatch) == 0 { + return executionStates, nil + } + } + + case err := <-errChan: + require.NoError(t, err) + case <-timeout.C: + return nil, fmt.Errorf("(Sui) timed out waiting for ExecutionStateChanged on chain %d (offramp %s) from chain %d with expected sequence numbers %+v", + dest.Selector, offRampAddress, srcSelector, expectedSeqNrs) + } + } +} + func ConfirmNoExecConsistentlyWithSeqNr( t *testing.T, sourceSelector uint64, @@ -1247,3 +1363,150 @@ func AssertTimelockOwnership( require.Equal(t, homeChainTimelockAddress, owner) } } + +func SuiEventEmitter[T any]( + t *testing.T, + client sui.ISuiAPI, + packageID, moduleName, event string, + done chan any, +) (<-chan struct { + Event T + Version string +}, <-chan error) { + ch := make(chan struct { + Event T + Version string + }, 200) + errChan := make(chan error) + limit := uint64(50) + var lastSeenTxDigest string + + go func() { + ticker := time.NewTicker(time.Second * 2) + defer ticker.Stop() + + for { + for { + // As this can take a few iterations if there are many events, check for done before each request + select { + case <-done: + return + default: + } + eventFilter := models.EventFilterByMoveEventType{ + MoveEventType: fmt.Sprintf("%s::%s::%s", packageID, moduleName, event), + } + + events, err := client.SuiXQueryEvents(t.Context(), models.SuiXQueryEventsRequest{ + SuiEventFilter: eventFilter, + Limit: limit, + DescendingOrder: false, + }) + if err != nil { + errChan <- err + return + } + + if len(events.Data) == 0 { + // No new events found + break + } + + for _, ev := range events.Data { + if ev.Id.TxDigest == lastSeenTxDigest { + continue // skip duplicates + } + lastSeenTxDigest = ev.Id.TxDigest + + var out T + if err := codec.DecodeAptosJsonValue(ev.ParsedJson, &out); err != nil { + errChan <- err + continue + } + + ch <- struct { + Event T + Version string + }{ + Event: out, + Version: ev.Id.EventSeq, // use the actual version + } + } + } + select { + case <-done: + return + case <-ticker.C: + continue + } + } + }() + return ch, errChan +} + +func ConfirmCommitWithExpectedSeqNumRangeSui( + t *testing.T, + srcSelector uint64, + dest cldf_sui.Chain, + offRampAddress string, + startVersion *uint64, + expectedSeqNumRange ccipocr3common.SeqNumRange, + enforceSingleCommit bool, +) (any, error) { + // Bound the offRamp + boundOffRamp, err := sui_ccip_offramp.NewOfframp(offRampAddress, dest.Client) + require.NoError(t, err) + + done := make(chan any) + defer close(done) + sink, errChan := SuiEventEmitter[sui_module_offramp.CommitReportAccepted](t, dest.Client, boundOffRamp.Address(), "offramp", "CommitReportAccepted", done) + + timeout := time.NewTimer(tests.WaitTimeout(t)) + defer timeout.Stop() + + seenMessages := NewCommitReportTracker(srcSelector, expectedSeqNumRange) + + verifyCommitReport := func(report sui_module_offramp.CommitReportAccepted) bool { + processRoots := func(roots []sui_module_offramp.MerkleRoot) bool { + for _, mr := range roots { + t.Logf("(Sui) Received commit report for [%d, %d] on selector %d from source selector %d expected seq nr range %s, token prices: %v", + mr.MinSeqNr, mr.MaxSeqNr, dest.Selector, srcSelector, expectedSeqNumRange.String(), report.PriceUpdates.TokenPriceUpdates, + ) + seenMessages.visitCommitReport(srcSelector, mr.MinSeqNr, mr.MaxSeqNr) + + if mr.SourceChainSelector == srcSelector && uint64(expectedSeqNumRange.Start()) >= mr.MinSeqNr && uint64(expectedSeqNumRange.End()) <= mr.MaxSeqNr { + t.Logf("(Sui) All sequence numbers committed in a single report [%d, %d]", + expectedSeqNumRange.Start(), expectedSeqNumRange.End(), + ) + return true + } + + if !enforceSingleCommit && seenMessages.allCommited(srcSelector) { + t.Logf( + "(Sui) All sequence numbers already committed from range [%d, %d]", + expectedSeqNumRange.Start(), expectedSeqNumRange.End(), + ) + return true + } + } + return false + } + + return processRoots(report.BlessedMerkleRoots) || processRoots(report.UnblessedMerkleRoots) + } + + for { + select { + case event := <-sink: + verified := verifyCommitReport(event.Event) + if verified { + return &event.Event, nil + } + case err := <-errChan: + require.NoError(t, err) + case <-timeout.C: + return nil, fmt.Errorf("(sui) timed out after waiting for commit report on chain selector %d from source selector %d expected seq nr range %s", + dest.Selector, srcSelector, expectedSeqNumRange.String()) + } + } +} diff --git a/deployment/ccip/changeset/testhelpers/test_environment.go b/deployment/ccip/changeset/testhelpers/test_environment.go index 0eb6deea399..287994602e5 100644 --- a/deployment/ccip/changeset/testhelpers/test_environment.go +++ b/deployment/ccip/changeset/testhelpers/test_environment.go @@ -24,6 +24,7 @@ import ( ops "github.com/smartcontractkit/chainlink-ton/deployment/ccip" tonOperation "github.com/smartcontractkit/chainlink-ton/deployment/ccip/operation" + chain_selectors "github.com/smartcontractkit/chain-selectors" mcmstypes "github.com/smartcontractkit/mcms/types" cldf_aptos "github.com/smartcontractkit/chainlink-deployments-framework/chain/aptos" @@ -37,17 +38,17 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/logger" "github.com/smartcontractkit/chainlink-testing-framework/lib/utils/testcontext" - chain_selectors "github.com/smartcontractkit/chain-selectors" - cldf_chain "github.com/smartcontractkit/chainlink-deployments-framework/chain" + cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" + cldf_sui "github.com/smartcontractkit/chainlink-deployments-framework/chain/sui" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" - latest_fee_quoter "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/latest/fee_quoter" - + sui_cs "github.com/smartcontractkit/chainlink-sui/deployment/changesets" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" aptoscs "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/aptos" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/internal" + sui_cs_core "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/sui" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/v1_6" ccipops "github.com/smartcontractkit/chainlink/deployment/ccip/operation/evm/v1_6" ccipseq "github.com/smartcontractkit/chainlink/deployment/ccip/sequence/evm/v1_6" @@ -55,12 +56,15 @@ import ( "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" commonconfig "github.com/smartcontractkit/chainlink-common/pkg/config" + ccipocr3common "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3" solBinary "github.com/gagliardetto/binary" solFeeQuoterV0_1_0 "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_0/fee_quoter" solFeeQuoterV0_1_1 "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/fee_quoter" + fee_quoterV1_6_3 "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chainconfig" "github.com/smartcontractkit/chainlink-ccip/execute/tokendata/lbtc" cciptypes "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3" @@ -109,6 +113,7 @@ type TestConfigs struct { Chains int // only used in memory mode, for docker mode, this is determined by the integration-test config toml input SolChains int // only used in memory mode, for docker mode, this is determined by the integration-test config toml input AptosChains int // only used in memory mode, for docker mode, this is determined by the integration-test config toml input + SuiChains int // only used in memory mode, for docker mode, this is determined by the integration-test config toml input TonChains int // only used in memory mode, for docker mode, this is determined by the integration-test config toml input ChainIDs []uint64 // only used in memory mode, for docker mode, this is determined by the integration-test config toml input NumOfUsersPerChain int // only used in memory mode, for docker mode, this is determined by the integration-test config toml input @@ -336,6 +341,12 @@ func WithAptosChains(numChains int) TestOps { } } +func WithSuiChains(numChains int) TestOps { + return func(testCfg *TestConfigs) { + testCfg.SuiChains = numChains + } +} + func WithTonChains(numChains int) TestOps { return func(testCfg *TestConfigs) { testCfg.TonChains = numChains @@ -401,6 +412,7 @@ type MemoryEnvironment struct { Chains map[uint64]cldf_evm.Chain SolChains map[uint64]cldf_solana.Chain AptosChains map[uint64]cldf_aptos.Chain + SuiChains map[uint64]cldf_sui.Chain TonChains map[uint64]cldf_ton.Chain } @@ -458,12 +470,14 @@ func (m *MemoryEnvironment) StartChains(t *testing.T) { solChains := memory.NewMemoryChainsSol(t, tc.SolChains, commitSha) aptosChains := memory.NewMemoryChainsAptos(t, tc.AptosChains) + suiChains := memory.NewMemoryChainsSui(t, tc.SuiChains) tonChains := memory.NewMemoryChainsTon(t, tc.TonChains) // if we have Aptos and Solana chains, we need to set their chain selectors on the wrapper // environment, so we have to convert it back to the concrete type. This needs to be refactored m.AptosChains = cldf_chain.NewBlockChainsFromSlice(aptosChains).AptosChains() m.SolChains = cldf_chain.NewBlockChainsFromSlice(solChains).SolanaChains() m.TonChains = cldf_chain.NewBlockChainsFromSlice(tonChains).TonChains() + m.SuiChains = cldf_chain.NewBlockChainsFromSlice(suiChains).SuiChains() blockChains := map[uint64]cldf_chain.BlockChain{} for selector, ch := range m.Chains { @@ -479,6 +493,10 @@ func (m *MemoryEnvironment) StartChains(t *testing.T) { blockChains[selector] = ch } + for selector, ch := range m.SuiChains { + blockChains[selector] = ch + } + env := cldf.Environment{ BlockChains: cldf_chain.NewBlockChains(blockChains), } @@ -748,14 +766,18 @@ func NewEnvironment(t *testing.T, tEnv TestEnvironment) DeployedEnv { func NewEnvironmentWithJobsAndContracts(t *testing.T, tEnv TestEnvironment) DeployedEnv { var err error e := NewEnvironmentWithPrerequisitesContracts(t, tEnv) + evmChains := e.Env.BlockChains.ListChainSelectors(cldf_chain.WithFamily(chain_selectors.FamilyEVM)) solChains := e.Env.BlockChains.ListChainSelectors(cldf_chain.WithFamily(chain_selectors.FamilySolana)) aptosChains := e.Env.BlockChains.ListChainSelectors(cldf_chain.WithFamily(chain_selectors.FamilyAptos)) tonChains := e.Env.BlockChains.ListChainSelectors(cldf_chain.WithFamily(chain_selectors.FamilyTon)) + suiChains := e.Env.BlockChains.ListChainSelectors(cldf_chain.WithFamily(chain_selectors.FamilySui)) //nolint:gocritic // we need to segregate EVM and Solana chains allChains := append(evmChains, solChains...) allChains = append(allChains, aptosChains...) allChains = append(allChains, tonChains...) + allChains = append(allChains, suiChains...) + mcmsCfg := make(map[uint64]commontypes.MCMSWithTimelockConfig) for _, c := range e.Env.BlockChains.ListChainSelectors(cldf_chain.WithFamily(chain_selectors.FamilyEVM)) { @@ -778,8 +800,10 @@ func NewEnvironmentWithJobsAndContracts(t *testing.T, tEnv TestEnvironment) Depl // load the state again to get the latest addresses state, err := stateview.LoadOnchainState(e.Env, stateview.WithLoadLegacyContracts(true)) require.NoError(t, err) + err = state.ValidatePostDeploymentState(e.Env, !tEnv.TestConfigs().SkipDONConfiguration) require.NoError(t, err) + return e } @@ -1018,7 +1042,7 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn evmContractParams := make(map[uint64]ccipseq.ChainContractParams) var ( - evmChains, solChains, aptosChains, tonChains []uint64 + evmChains, solChains, aptosChains, suiChains, tonChains []uint64 ) for _, chain := range allChains { if _, ok := e.Env.BlockChains.EVMChains()[chain]; ok { @@ -1030,6 +1054,12 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn if _, ok := e.Env.BlockChains.AptosChains()[chain]; ok { aptosChains = append(aptosChains, chain) } + if _, ok := e.Env.BlockChains.SuiChains()[chain]; ok { + suiChains = append(suiChains, chain) + } + } + + for _, chain := range allChains { if _, ok := e.Env.BlockChains.TonChains()[chain]; ok { tonChains = append(tonChains, chain) } @@ -1048,8 +1078,8 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn if useLatestFeeQuoter { params.FeeQuoterOpts = &opsutil.ContractOpts{ Version: semver.MustParse("1.6.0-latest"), - EVMBytecode: common.FromHex(latest_fee_quoter.FeeQuoterBin), - ZkSyncVMBytecode: latest_fee_quoter.ZkBytecode, + EVMBytecode: common.FromHex(fee_quoterV1_6_3.FeeQuoterBin), + ZkSyncVMBytecode: fee_quoterV1_6_3.ZkBytecode, } } evmContractParams[chain] = params @@ -1093,9 +1123,34 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn apps = append(apps, solCs...) } } + e.Env, _, err = commonchangeset.ApplyChangesets(t, e.Env, apps) require.NoError(t, err) + // Currently only one sui chain is supported in test environment + if len(suiChains) != 0 { + // Deploy Link Token + e.Env, _, err = commonchangeset.ApplyChangesets(t, e.Env, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.Configure(sui_cs.DeployLinkToken{}, sui_cs.DeployLinkTokenConfig{ + ChainSelector: suiChains[0], + }), + }) + require.NoError(t, err) + + state, err := stateview.LoadOnchainState(e.Env) + require.NoError(t, err) + + e.Env, _, err = commonchangeset.ApplyChangesets(t, e.Env, []commonchangeset.ConfiguredChangeSet{ + commonchangeset.Configure(sui_cs.DeploySuiChain{}, sui_cs.DeploySuiChainConfig{ + SuiChainSelector: suiChains[0], + DestChainSelector: evmChains[0], + DestChainOnRampAddressBytes: state.MustGetEVMChainState(e.HomeChainSel).OnRamp.Address().Bytes(), + LinkTokenCoinMetadataObjectId: state.SuiChains[suiChains[0]].LinkTokenCoinMetadataId, + }), + }) + require.NoError(t, err) + } + if len(aptosChains) != 0 { // Currently only one aptos chain is supported in test environment aptosCs := DeployChainContractsToAptosCS(t, e, aptosChains[0]) @@ -1285,6 +1340,37 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn } } + for _, chain := range suiChains { + // TODO(sui): update this for token transfers + tokenInfo := map[ccipocr3common.UnknownEncodedAddress]ccipocr3common.TokenInfo{} + tokenInfo[ccipocr3common.UnknownEncodedAddress(state.SuiChains[chain].LinkTokenAddress)] = tokenConfig.TokenSymbolToInfo[shared.LinkSymbol] + ocrOverride := func(params v1_6.CCIPOCRParams) v1_6.CCIPOCRParams { + // Commit + params.CommitOffChainConfig.RMNEnabled = false + // Execute + params.ExecuteOffChainConfig.MultipleReportsEnabled = false + params.ExecuteOffChainConfig.MaxReportMessages = 1 + params.ExecuteOffChainConfig.MaxSingleChainReports = 1 + params.ExecuteOffChainConfig.MaxCommitReportsToFetch = 1 + if tc.OCRConfigOverride != nil { + tc.OCRConfigOverride(params) + } + return params + } + commitOCRConfigs[chain] = v1_6.DeriveOCRParamsForCommit(v1_6.SimulationTest, e.FeedChainSel, tokenInfo, ocrOverride) + execOCRConfigs[chain] = v1_6.DeriveOCRParamsForExec(v1_6.SimulationTest, tokenDataProviders, ocrOverride) + chainConfigs[chain] = v1_6.ChainConfig{ + Readers: nodeInfo.NonBootstraps().PeerIDs(), + // #nosec G115 - Overflow is not a concern in this test scenario + FChain: uint8(len(nodeInfo.NonBootstraps().PeerIDs()) / 3), + EncodableChainConfig: chainconfig.ChainConfig{ + GasPriceDeviationPPB: ccipocr3common.BigInt{Int: big.NewInt(DefaultGasPriceDeviationPPB)}, + DAGasPriceDeviationPPB: ccipocr3common.BigInt{Int: big.NewInt(DefaultDAGasPriceDeviationPPB)}, + OptimisticConfirmations: globals.OptimisticConfirmations, + }, + } + } + for _, chain := range aptosChains { tokenInfo := map[cciptypes.UnknownEncodedAddress]pluginconfig.TokenInfo{} linkTokenAddress := state.AptosChains[chain].LinkTokenAddress @@ -1412,13 +1498,22 @@ func AddCCIPContractsToEnvironment(t *testing.T, allChains []uint64, tEnv TestEn )) apps = append(apps, commonchangeset.Configure( // Enable the OCR config on the remote chains. - cldf.CreateLegacyChangeSet(v1_6.SetOCR3OffRampChangeset), + sui_cs_core.SetOCR3Offramp{}, v1_6.SetOCR3OffRampConfig{ HomeChainSel: e.HomeChainSel, - RemoteChainSels: evmChains, + RemoteChainSels: suiChains, CCIPHomeConfigType: globals.ConfigTypeActive, }, - )) + ), + commonchangeset.Configure( + // Enable the OCR config on the remote chains. + cldf.CreateLegacyChangeSet(v1_6.SetOCR3OffRampChangeset), + v1_6.SetOCR3OffRampConfig{ + HomeChainSel: e.HomeChainSel, + RemoteChainSels: evmChains, + CCIPHomeConfigType: globals.ConfigTypeActive, + }, + )) apps = append(apps, commonchangeset.Configure( // Enable the OCR config on the remote chains. aptoscs.SetOCR3Offramp{}, diff --git a/deployment/ccip/changeset/testhelpers/test_helpers_solana_v0_1_0.go b/deployment/ccip/changeset/testhelpers/test_helpers_solana_v0_1_0.go index 7578f16e305..29cc251952b 100644 --- a/deployment/ccip/changeset/testhelpers/test_helpers_solana_v0_1_0.go +++ b/deployment/ccip/changeset/testhelpers/test_helpers_solana_v0_1_0.go @@ -2,6 +2,7 @@ package testhelpers import ( "context" + "encoding/hex" "encoding/json" "errors" "fmt" @@ -35,12 +36,44 @@ import ( aptos_fee_quoter "github.com/smartcontractkit/chainlink-aptos/bindings/ccip/fee_quoter" "github.com/smartcontractkit/chainlink-aptos/bindings/helpers" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/latest/offramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/burn_mint_token_pool" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/usdc_token_pool" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/message_hasher" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/message_hasher" + + "github.com/smartcontractkit/chainlink-evm/gethwrappers/keystone/generated/capabilities_registry" + + cldf_aptos "github.com/smartcontractkit/chainlink-deployments-framework/chain/aptos" + cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" + cldf_solana "github.com/smartcontractkit/chainlink-deployments-framework/chain/solana" + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + cldf_offchain "github.com/smartcontractkit/chainlink-deployments-framework/offchain" + + aptoscs "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/aptos" + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/aptos/config" + + ccipChangeSetSolanaV0_1_0 "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/solana_v0_1_0" + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/v1_6" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/evm" + solanastateview "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/solana" + + commoncs "github.com/smartcontractkit/chainlink/deployment/common/changeset" + "github.com/smartcontractkit/chainlink/deployment/common/changeset/state" + "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" + "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/ccipevm" + "github.com/smartcontractkit/chainlink/v2/core/services/relay" + + "github.com/smartcontractkit/chainlink-ccip/pkg/consts" + "github.com/smartcontractkit/chainlink-ccip/pkg/reader" + cciptypes "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3" + + "github.com/smartcontractkit/chainlink-common/pkg/logger" + "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" solconfig "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/config" "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_0/base_token_pool" @@ -54,41 +87,22 @@ import ( solcommon "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" solstate "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/state" soltokens "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/tokens" - "github.com/smartcontractkit/chainlink-ccip/pkg/consts" - "github.com/smartcontractkit/chainlink-ccip/pkg/reader" - "github.com/smartcontractkit/chainlink-common/pkg/logger" - cciptypes "github.com/smartcontractkit/chainlink-common/pkg/types/ccipocr3" - "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + cldf_chain "github.com/smartcontractkit/chainlink-deployments-framework/chain" - cldf_aptos "github.com/smartcontractkit/chainlink-deployments-framework/chain/aptos" - cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" - cldf_solana "github.com/smartcontractkit/chainlink-deployments-framework/chain/solana" - cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" - cldf_offchain "github.com/smartcontractkit/chainlink-deployments-framework/offchain" + "github.com/smartcontractkit/chainlink-evm/gethwrappers/generated/mock_ethusd_aggregator_wrapper" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/keystone/generated/capabilities_registry" + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/aggregator_v3_interface" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc677" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/mock_v3_aggregator_contract" "github.com/smartcontractkit/chainlink/deployment" - aptoscs "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/aptos" - "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/aptos/config" - ccipChangeSetSolanaV0_1_0 "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/solana_v0_1_0" - "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/v1_6" - "github.com/smartcontractkit/chainlink/deployment/ccip/shared" + ccipclient "github.com/smartcontractkit/chainlink/deployment/ccip/shared/client" - "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" - "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/evm" - solanastateview "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/solana" - commoncs "github.com/smartcontractkit/chainlink/deployment/common/changeset" - "github.com/smartcontractkit/chainlink/deployment/common/changeset/state" - "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" commontypes "github.com/smartcontractkit/chainlink/deployment/common/types" "github.com/smartcontractkit/chainlink/deployment/environment/devenv" "github.com/smartcontractkit/chainlink/deployment/environment/memory" - "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/ccipevm" + "github.com/smartcontractkit/chainlink/v2/core/services/ocr2/plugins/ccip/abihelpers" - "github.com/smartcontractkit/chainlink/v2/core/services/relay" ) const ( @@ -206,6 +220,8 @@ func WaitForEventFilterRegistration(t *testing.T, oc cldf_offchain.Client, chain case chainsel.FamilyAptos: // Aptos is not using LogPoller return nil + case chainsel.FamilySui: + // Sui is not using LogPoller case chainsel.FamilyTon: // TODO: TON is not using LogPoller return nil @@ -303,6 +319,15 @@ func LatestBlock(ctx context.Context, env cldf.Environment, chainSelector uint64 return block, nil case chainsel.FamilySolana: return env.BlockChains.SolanaChains()[chainSelector].Client.GetSlot(ctx, solconfig.DefaultCommitment) + case chainsel.FamilySui: + suiClient := env.BlockChains.SuiChains()[chainSelector].Client + seqNum, err := suiClient.SuiGetLatestCheckpointSequenceNumber(ctx) + if err != nil { + return 0, fmt.Errorf("failed to get sui latest checkpoint: %w", err) + } + + fmt.Println("LATEST BLOCK ON SUI: ", seqNum) + return seqNum, nil case chainsel.FamilyAptos: chainInfo, err := env.BlockChains.AptosChains()[chainSelector].Client.Info() if err != nil { @@ -320,6 +345,9 @@ func LatestBlocksByChain(ctx context.Context, env cldf.Environment) (map[uint64] chains := []uint64{} chains = slices.AppendSeq(chains, maps.Keys(env.BlockChains.EVMChains())) chains = slices.AppendSeq(chains, maps.Keys(env.BlockChains.SolanaChains())) + suiChains := env.BlockChains.SuiChains() + chains = slices.AppendSeq(chains, maps.Keys(suiChains)) + chains = slices.AppendSeq(chains, maps.Keys(env.BlockChains.AptosChains())) for _, selector := range chains { block, err := LatestBlock(ctx, env, selector) @@ -408,9 +436,10 @@ func retryCcipSendUntilNativeFeeIsSufficient( msg := cfg.Message.(router.ClientEVM2AnyMessage) var retryCount int for { + fmt.Println("ABOUT TO SEND THIS MSG: ", msg, cfg.DestChain) fee, err := r.GetFee(&bind.CallOpts{Context: context.Background()}, cfg.DestChain, msg) if err != nil { - return nil, 0, fmt.Errorf("failed to get fee: %w", cldf.MaybeDataErr(err)) + return nil, 0, fmt.Errorf("failed to get EVM fee: %w", cldf.MaybeDataErr(err)) } cfg.Sender.Value = fee @@ -492,6 +521,8 @@ func SendRequest( return SendRequestEVM(e, state, cfg) case chainsel.FamilySolana: return SendRequestSol(e, state, cfg) + case chainsel.FamilySui: + return SendRequestSui(e, state, cfg) case chainsel.FamilyAptos: return SendRequestAptos(e, state, cfg) case chainsel.FamilyTon: @@ -556,6 +587,14 @@ func SendRequestEVM( }, nil } +func SendRequestSui( + e cldf.Environment, + state stateview.CCIPOnChainState, + cfg *ccipclient.CCIPSendReqConfig, +) (*ccipclient.AnyMsgSentEvent, error) { + return SendSuiCCIPRequest(e, cfg) +} + func SendRequestSol( e cldf.Environment, state stateview.CCIPOnChainState, @@ -963,6 +1002,8 @@ func AddLane( })) } + // changesets = append(changesets, AddEVMDestChangesets(e, 909606746561742123, 18395503381733958356, false)...) + switch toFamily { case chainsel.FamilyEVM: changesets = append(changesets, AddEVMDestChangesets(e, to, from, isTestRouter)...) @@ -982,8 +1023,12 @@ func AddLane( TestRouter: false, })) } + + fmt.Println("ADDLANE CHANGESETS: ", changesets) + e.Env, _, err = commoncs.ApplyChangesets(t, e.Env, changesets) if err != nil { + fmt.Println("ERROR APPLYING CHANGESET", err) return err } return nil @@ -1106,6 +1151,7 @@ func AddEVMSrcChangesets(from, to uint64, isTestRouter bool, gasprice map[uint64 }, ), } + return evmSrcChangesets } @@ -1143,6 +1189,27 @@ func AddEVMDestChangesets(e *DeployedEnv, to, from uint64, isTestRouter bool) [] return evmDstChangesets } +func AddSuiDestChangeset(e *DeployedEnv, to, from uint64, isTestRouter bool) []commoncs.ConfiguredChangeSet { + suiDstChangesets := []commoncs.ConfiguredChangeSet{ + commoncs.Configure( + cldf.CreateLegacyChangeSet(v1_6.UpdateOffRampSourcesChangeset), + v1_6.UpdateOffRampSourcesConfig{ + UpdatesByChain: map[uint64]map[uint64]v1_6.OffRampSourceUpdate{ + to: { + from: { + IsEnabled: true, + TestRouter: isTestRouter, + IsRMNVerificationDisabled: !e.RmnEnabledSourceChains[from], + }, + }, + }, + }, + ), + } + + return suiDstChangesets +} + func AddLaneAptosChangesets(t *testing.T, srcChainSelector, destChainSelector uint64, gasPrices map[uint64]*big.Int, tokenPrices map[aptos.AccountAddress]*big.Int) []commoncs.ConfiguredChangeSet { srcFamily, err := chainsel.GetSelectorFamily(srcChainSelector) require.NoError(t, err) @@ -1339,6 +1406,11 @@ func AddLaneWithDefaultPricesAndFeeQuoterConfig(t *testing.T, e *DeployedEnv, st gasPrices[from] = big.NewInt(1e17) gasPrices[to] = big.NewInt(1e17) tokenPrices[tonState.LinkTokenAddress.String()] = deployment.EDecMult(20, 28) + case chainsel.FamilySui: + suiState := state.SuiChains[from] + gasPrices[from] = big.NewInt(1e17) + gasPrices[to] = big.NewInt(1e17) + tokenPrices[suiState.LinkTokenCoinMetadataId] = deployment.EDecMult(20, 28) } fqCfg := v1_6.DefaultFeeQuoterDestChainConfig(true, to) @@ -1927,6 +1999,14 @@ func Transfer( FeeToken: feeTokenAddr, TokenAmounts: tokens.([]AptosTokenAmount), } + case chainsel.FamilySui: + msg = SuiSendRequest{ + Data: data, + Receiver: common.LeftPadBytes(receiver, 32), + ExtraArgs: extraArgs, + FeeToken: feeToken, + TokenAmounts: tokens.([]SuiTokenAmount), + } default: t.Errorf("unsupported source chain: %v", family) } @@ -1945,6 +2025,7 @@ type TestTransferRequest struct { Tokens []router.ClientEVMTokenAmount SolTokens []solRouter.SVMTokenAmount AptosTokens []AptosTokenAmount + SuiTokens []SuiTokenAmount Data []byte ExtraArgs []byte ExpectedTokenBalances []ExpectedBalance @@ -1992,7 +2073,7 @@ func TransferMultiple( case chainsel.FamilyEVM: destFamily, err := chainsel.GetSelectorFamily(tt.DestChain) require.NoError(t, err) - if destFamily == chainsel.FamilySolana { + if destFamily == chainsel.FamilySolana || destFamily == chainsel.FamilySui { // for EVM2Solana token transfer we need to use tokenReceiver instead logical receiver expectedTokenBalances.add(tt.DestChain, tt.TokenReceiverATA, tt.ExpectedTokenBalances) } else { @@ -2016,6 +2097,9 @@ func TransferMultiple( case chainsel.FamilyAptos: tokens = tt.AptosTokens expectedTokenBalances.add(tt.DestChain, tt.Receiver, tt.ExpectedTokenBalances) + case chainsel.FamilySui: + tokens = tt.SuiTokens + expectedTokenBalances.add(tt.DestChain, tt.Receiver, tt.ExpectedTokenBalances) default: t.Errorf("unsupported source chain: %v", family) } @@ -2131,6 +2215,11 @@ func WaitForTokenBalances( receiver := aptos.AccountAddress{} copy(receiver[32-len(id.receiver):], id.receiver) WaitForTokenBalanceAptos(ctx, t, fungibleAssetMetadata, receiver, env.BlockChains.AptosChains()[chainSelector], expectedBalance) + case chainsel.FamilySui: + tokenHex := "0x" + hex.EncodeToString(id.token) + tokenReceiverHex := "0x" + hex.EncodeToString(id.receiver) + fmt.Println("Waiting for TokenBalance sui: ", tokenHex, tokenReceiverHex) + WaitForTokenBalanceSui(ctx, t, tokenHex, tokenReceiverHex, env.BlockChains.SuiChains()[chainSelector], balance) default: } return nil diff --git a/deployment/ccip/changeset/testhelpers/test_sui_helpers.go b/deployment/ccip/changeset/testhelpers/test_sui_helpers.go new file mode 100644 index 00000000000..8ffcedb3f86 --- /dev/null +++ b/deployment/ccip/changeset/testhelpers/test_sui_helpers.go @@ -0,0 +1,652 @@ +package testhelpers + +import ( + "context" + "encoding/hex" + "errors" + "math/big" + "strconv" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + suitx "github.com/block-vision/sui-go-sdk/transaction" + + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/burn_mint_token_pool" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/message_hasher" + + "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" + + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc677" + + suiBind "github.com/smartcontractkit/chainlink-sui/bindings/bind" + sui_cs "github.com/smartcontractkit/chainlink-sui/deployment/changesets" + sui_ops "github.com/smartcontractkit/chainlink-sui/deployment/ops" + ccipops "github.com/smartcontractkit/chainlink-sui/deployment/ops/ccip" + burnminttokenpoolops "github.com/smartcontractkit/chainlink-sui/deployment/ops/ccip_burn_mint_token_pool" + suiofframp_helper "github.com/smartcontractkit/chainlink-sui/relayer/chainwriter/ptb/offramp" + + suideps "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/sui" + ccipclient "github.com/smartcontractkit/chainlink/deployment/ccip/shared/client" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" + commoncs "github.com/smartcontractkit/chainlink/deployment/common/changeset" + + "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/ccipevm" + + cldf_sui "github.com/smartcontractkit/chainlink-deployments-framework/chain/sui" + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + "github.com/smartcontractkit/chainlink-deployments-framework/operations" +) + +type SuiSendRequest struct { + Receiver []byte + Data []byte + ExtraArgs []byte + FeeToken string + FeeTokenStore string + TokenAmounts []SuiTokenAmount +} + +type SuiTokenAmount struct { + Token string + Amount uint64 +} + +type RampMessageHeader struct { + MessageID []byte `json:"message_id"` + SourceChainSelector string `json:"source_chain_selector"` + DestChainSelector string `json:"dest_chain_selector"` + SequenceNumber string `json:"sequence_number"` + Nonce string `json:"nonce"` +} + +type Sui2AnyRampMessage struct { + Header RampMessageHeader `json:"header"` + Sender string `json:"sender"` + Data []byte `json:"data"` + Receiver []byte `json:"receiver"` + ExtraArgs []byte `json:"extra_args"` + FeeToken string `json:"fee_token"` + FeeTokenAmount string `json:"fee_token_amount"` + FeeValueJuels string `json:"fee_value_juels"` +} + +type CCIPMessageSent struct { + DestChainSelector string `json:"dest_chain_selector"` + SequenceNumber string `json:"sequence_number"` + Message Sui2AnyRampMessage `json:"message"` +} + +func SendSuiCCIPRequest(e cldf.Environment, cfg *ccipclient.CCIPSendReqConfig) (*ccipclient.AnyMsgSentEvent, error) { + ctx := e.GetContext() + state, err := stateview.LoadOnchainState(e) + if err != nil { + return &ccipclient.AnyMsgSentEvent{}, err + } + + if err != nil { + return &ccipclient.AnyMsgSentEvent{}, err + } + + suiChains := e.BlockChains.SuiChains() + suiChain := suiChains[cfg.SourceChain] + + deps := suideps.Deps{ + SuiChain: sui_ops.OpTxDeps{ + Client: suiChain.Client, + Signer: suiChain.Signer, + GetCallOpts: func() *suiBind.CallOpts { + b := uint64(400_000_000) + return &suiBind.CallOpts{ + Signer: suiChain.Signer, + WaitForExecution: true, + GasBudget: &b, + } + }, + }, + } + + ccipObjectRefID := state.SuiChains[cfg.SourceChain].CCIPObjectRef + ccipPackageID := state.SuiChains[cfg.SourceChain].CCIPAddress + onRampPackageID := state.SuiChains[cfg.SourceChain].OnRampAddress + onRampStateObjectID := state.SuiChains[cfg.SourceChain].OnRampStateObjectId + linkTokenPkgID := state.SuiChains[cfg.SourceChain].LinkTokenAddress + linkTokenObjectMetadataID := state.SuiChains[cfg.SourceChain].LinkTokenCoinMetadataId + ccipOwnerCapID := state.SuiChains[cfg.SourceChain].CCIPOwnerCapObjectId + + bigIntSourceUsdPerToken, parsed := new(big.Int).SetString("21377040000000000000000000000", 10) // 1e27 since sui is 1e9 + if !parsed { + return &ccipclient.AnyMsgSentEvent{}, errors.New("failed converting SourceUSDPerToken to bigInt") + } + + bigIntGasUsdPerUnitGas, ok := new(big.Int).SetString("41946474500", 10) // optimism sep 4145822215 + if !ok { + return &ccipclient.AnyMsgSentEvent{}, errors.New("failed converting GasUsdPerUnitGas to bigInt") + } + + // getValidatedFee + msg := cfg.Message.(SuiSendRequest) + + // Update Prices on FeeQuoter with minted LinkToken + _, err = operations.ExecuteOperation(e.OperationsBundle, ccipops.FeeQuoterUpdatePricesWithOwnerCapOp, deps.SuiChain, + ccipops.FeeQuoterUpdatePricesWithOwnerCapInput{ + CCIPPackageId: ccipPackageID, + CCIPObjectRef: ccipObjectRefID, + OwnerCapObjectId: ccipOwnerCapID, + SourceTokens: []string{linkTokenObjectMetadataID}, + SourceUsdPerToken: []*big.Int{bigIntSourceUsdPerToken}, + GasDestChainSelectors: []uint64{cfg.DestChain}, + GasUsdPerUnitGas: []*big.Int{bigIntGasUsdPerUnitGas}, + }) + if err != nil { + return &ccipclient.AnyMsgSentEvent{}, errors.New("failed to updatePrice for Sui chain " + err.Error()) + } + + // TODO: might be needed for validation + // feeQuoter, err := module_fee_quoter.NewFeeQuoter(ccipPackageID, deps.SuiChain.Client) + // if err != nil { + // return &ccipclient.AnyMsgSentEvent{}, err + // } + + // validatedFee, err := feeQuoter.DevInspect().GetValidatedFee(ctx, &suiBind.CallOpts{ + // Signer: deps.SuiChain.Signer, + // WaitForExecution: true, + // }, + // suiBind.Object{Id: ccipObjectRefID}, + // suiBind.Object{Id: "0x6"}, + // cfg.DestChain, + // []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // 0x00, 0x00, 0x00, 0x00, 0xdd, 0xbb, 0x6f, 0x35, + // 0x8f, 0x29, 0x04, 0x08, 0xd7, 0x68, 0x47, 0xb4, + // 0xf6, 0x02, 0xf0, 0xfd, 0x59, 0x92, 0x95, 0xfd, + // }, + // []byte("hello evm from sui"), + // []string{}, + // []uint64{}, + // linkTokenObjectMetadataID, + // []byte{}, + // ) + // if err != nil { + // return &ccipclient.AnyMsgSentEvent{}, err + // } + + // fmt.Println("VALIDATED FEE:", validatedFee) + + if len(msg.TokenAmounts) > 0 { + BurnMintTPPkgID := state.SuiChains[cfg.SourceChain].CCIPBurnMintTokenPool + BurnMintTPState := state.SuiChains[cfg.SourceChain].CCIPBurnMintTokenPoolState + + // 3 ptb calls + // 1. create_token_transfer_params + // 2. lock_or_burn + // 3. ccip_send + + // 1. create_token_transfer_params + client := sui.NewSuiClient(suiChain.URL) + ptb := suitx.NewTransaction() + ptb.SetSuiClient(client.(*sui.Client)) + + // Bind contracts + ccipStateHelperContract, err := suiBind.NewBoundContract( + ccipPackageID, + "ccip", + "onramp_state_helper", + client, + ) + if err != nil { + return nil, errors.New("failed to create onramp state helper bound contract when appending PTB command: " + err.Error()) + } + + BurnMintTPContract, err := suiBind.NewBoundContract( + BurnMintTPPkgID, + "burn_mint_token_pool", + "burn_mint_token_pool", + client, + ) + if err != nil { + return nil, errors.New("failed to create burn_mint_token_pool bound contract when appending PTB command: " + err.Error()) + } + + onRampContract, err := suiBind.NewBoundContract( + onRampPackageID, + "ccip_onramp", + "onramp", + client, + ) + if err != nil { + return nil, errors.New("failed to create ccip_onramp contract when appending PTB command: " + err.Error()) + } + + /********* 1. create_token_transfer_params *******/ + typeArgsList := []string{} + typeParamsList := []string{} + paramTypes := []string{ + "vector", + } + + // For SUI -> EVM BurnMint Pool token Transfer, we can use msg.Receiver as tokenReceiver, this field is only used in usdc token pool + // bc we need to check the recipient with Circle's packages from the onramp side before sending USDC. and it's not used anyway else. + decodedTokenReceiver, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000000") + var tokenReceiver [32]byte + copy(tokenReceiver[:], decodedTokenReceiver) + + paramValues := []any{ + decodedTokenReceiver, + } + + onRampCreateTokenTransferParamsCall, err := ccipStateHelperContract.EncodeCallArgsWithGenerics( + "create_token_transfer_params", + typeArgsList, + typeParamsList, + paramTypes, + paramValues, + nil, + ) + if err != nil { + return nil, errors.New("failed to encode onRampCreateTokenTransferParamsCall call: " + err.Error()) + } + + createTokenTransferParamsResult, err := ccipStateHelperContract.AppendPTB(ctx, deps.SuiChain.GetCallOpts(), ptb, onRampCreateTokenTransferParamsCall) + if err != nil { + return nil, errors.New("failed to build PTB (get_token_param_data) using bindings: " + err.Error()) + } + + /********* 2. lock_or_burn *******/ + normalizedModuleBMTP, err := client.SuiGetNormalizedMoveModule(ctx, models.GetNormalizedMoveModuleRequest{ + Package: BurnMintTPPkgID, + ModuleName: "burn_mint_token_pool", + }) + if err != nil { + return nil, errors.New("failed to get normalized module: " + err.Error()) + } + + functionSignatureLnB, isValidLockOrBurn := normalizedModuleBMTP.ExposedFunctions["lock_or_burn"] + if !isValidLockOrBurn { + return nil, errors.New("missing function signature for receiver function not found in module lock_or_burn") + } + + // Figure out the parameter types from the normalized module of the token pool + paramTypesLockBurn, err := suiofframp_helper.DecodeParameters(e.Logger, functionSignatureLnB.(map[string]any), "parameters") + if err != nil { + return nil, errors.New("failed to decode parameters for token pool function: " + err.Error()) + } + + typeArgsListLinkTokenPkgID := []string{linkTokenPkgID + "::link::LINK"} + typeParamsList = []string{} + paramValuesLockBurn := []any{ + suiBind.Object{Id: ccipObjectRefID}, // ref + createTokenTransferParamsResult, // token_params + suiBind.Object{Id: msg.TokenAmounts[0].Token}, // minted token to send to EVM + cfg.DestChain, + suiBind.Object{Id: "0x6"}, // clock + suiBind.Object{Id: BurnMintTPState}, // BurnMintstate + } + + lockOrBurnParamsCall, err := BurnMintTPContract.EncodeCallArgsWithGenerics( + "lock_or_burn", + typeArgsListLinkTokenPkgID, + typeParamsList, + paramTypesLockBurn, + paramValuesLockBurn, + nil, + ) + if err != nil { + return nil, errors.New("failed to encode lockOrBurnParamsCall call: " + err.Error()) + } + + _, err = BurnMintTPContract.AppendPTB(ctx, deps.SuiChain.GetCallOpts(), ptb, lockOrBurnParamsCall) + if err != nil { + return nil, errors.New("failed to build PTB (get_token_param_data) using bindings: " + err.Error()) + } + + /********* 3. ccip_send *******/ + normalizedModule, err := client.SuiGetNormalizedMoveModule(ctx, models.GetNormalizedMoveModuleRequest{ + Package: onRampPackageID, + ModuleName: "onramp", + }) + if err != nil { + return nil, errors.New("failed to get normalized module: " + err.Error()) + } + + functionSignature, parsedccipSend := normalizedModule.ExposedFunctions["ccip_send"] + if !parsedccipSend { + return nil, errors.New("missing function signature for receiver function not found in module ccip_send") + } + + // Figure out the parameter types from the normalized module of the token pool + paramTypesCCIPSend, err := suiofframp_helper.DecodeParameters(e.Logger, functionSignature.(map[string]any), "parameters") + if err != nil { + return nil, errors.New("failed to decode parameters for token pool function: " + err.Error()) + } + + paramValuesCCIPSend := []any{ + suiBind.Object{Id: ccipObjectRefID}, + suiBind.Object{Id: onRampStateObjectID}, + suiBind.Object{Id: "0x6"}, + cfg.DestChain, + msg.Receiver, // receiver + []byte("hello evm from sui"), + createTokenTransferParamsResult, // tokenParams from the original create_token_transfer_params + suiBind.Object{Id: linkTokenObjectMetadataID}, // feeTokenMetadata + suiBind.Object{Id: msg.FeeToken}, + []byte{}, // extraArgs + } + + encodedOnRampCCIPSendCall, err := onRampContract.EncodeCallArgsWithGenerics( + "ccip_send", + typeArgsListLinkTokenPkgID, + []string{}, + paramTypesCCIPSend, + paramValuesCCIPSend, + nil, + ) + if err != nil { + return nil, errors.New("failed to encode calls for ccip_send: " + err.Error()) + } + + _, err = onRampContract.AppendPTB(ctx, deps.SuiChain.GetCallOpts(), ptb, encodedOnRampCCIPSendCall) + if err != nil { + return nil, errors.New("failed to build PTB (receiver call) using bindings: " + err.Error()) + } + + executeCCIPSend, err := suiBind.ExecutePTB(ctx, deps.SuiChain.GetCallOpts(), client, ptb) + if err != nil { + return nil, errors.New("failed to execute ccip_send with err: " + err.Error()) + } + + suiEvent := executeCCIPSend.Events[2].ParsedJson + + seqStr, _ := suiEvent["sequence_number"].(string) + seq, _ := strconv.ParseUint(seqStr, 10, 64) + + return &ccipclient.AnyMsgSentEvent{ + SequenceNumber: seq, + RawEvent: suiEvent, // just dump raw + }, nil + } + + // TODO: SUI CCIPSend using bindings + client := sui.NewSuiClient(suiChain.URL) + ptb := suitx.NewTransaction() + ptb.SetSuiClient(client.(*sui.Client)) + + ccipStateHelperContract, err := suiBind.NewBoundContract( + ccipPackageID, + "ccip", + "onramp_state_helper", + client, + ) + if err != nil { + return nil, errors.New("failed to create onramp state helper bound contract when appending PTB command: " + err.Error()) + } + + // Note: these will be different for token transfers + typeArgsList := []string{} + typeParamsList := []string{} + paramTypes := []string{ + "vector", + } + + // For SUI -> EVM BurnMint Pool token Transfer, we can use msg.Receiver as tokenReceiver, this field is only used in usdc token pool + // bc we need to check the recipient with Circle's packages from the onramp side before sending USDC. and it's not used anyway else. + decodedTokenReceiver, _ := hex.DecodeString("0000000000000000000000000000000000000000000000000000000000000000") + var tokenReceiver [32]byte + copy(tokenReceiver[:], decodedTokenReceiver) + + paramValues := []any{ + decodedTokenReceiver, + } + + onRampCreateTokenTransferParamsCall, err := ccipStateHelperContract.EncodeCallArgsWithGenerics( + "create_token_transfer_params", + typeArgsList, + typeParamsList, + paramTypes, + paramValues, + nil, + ) + if err != nil { + return nil, errors.New("failed to encode onRampCreateTokenTransferParamsCall call: " + err.Error()) + } + + extractedAny2SuiMessageResult, err := ccipStateHelperContract.AppendPTB(ctx, deps.SuiChain.GetCallOpts(), ptb, onRampCreateTokenTransferParamsCall) + if err != nil { + return nil, errors.New("failed to build PTB (get_token_param_data) using bindings: " + err.Error()) + } + + onRampContract, err := suiBind.NewBoundContract( + onRampPackageID, + "ccip_onramp", + "onramp", + client, + ) + if err != nil { + return nil, errors.New("failed to create onramp bound contract when appending PTB command: " + err.Error()) + } + + // normalize module + normalizedModule, err := client.SuiGetNormalizedMoveModule(ctx, models.GetNormalizedMoveModuleRequest{ + Package: onRampPackageID, + ModuleName: "onramp", + }) + if err != nil { + return nil, errors.New("failed to get normalized module: " + err.Error()) + } + + functionSignature, ok := normalizedModule.ExposedFunctions["ccip_send"] + if !ok { + return nil, errors.New("missing function signature for receiver function not found in module ccip_send") + } + + // Figure out the parameter types from the normalized module of the token pool + paramTypes, err = suiofframp_helper.DecodeParameters(e.Logger, functionSignature.(map[string]any), "parameters") + if err != nil { + return nil, errors.New("failed to decode parameters for token pool function: " + err.Error()) + } + + typeArgsList = []string{linkTokenPkgID + "::link::LINK"} + typeParamsList = []string{} + paramValues = []any{ + suiBind.Object{Id: ccipObjectRefID}, + suiBind.Object{Id: onRampStateObjectID}, + suiBind.Object{Id: "0x6"}, + cfg.DestChain, + msg.Receiver, // receiver (TODO: replace this with sender Address use environment.NormalizeTo32Bytes(ethereumAddress) from sui repo) + []byte("hello evm from sui"), + extractedAny2SuiMessageResult, // tokenParams + suiBind.Object{Id: linkTokenObjectMetadataID}, // feeTokenMetadata + suiBind.Object{Id: msg.FeeToken}, + []byte{}, // extraArgs + } + + encodedOnRampCCIPSendCall, err := onRampContract.EncodeCallArgsWithGenerics( + "ccip_send", + typeArgsList, + typeParamsList, + paramTypes, + paramValues, + nil, + ) + if err != nil { + return nil, errors.New("failed to encode receiver call: " + err.Error()) + } + + _, err = onRampContract.AppendPTB(ctx, deps.SuiChain.GetCallOpts(), ptb, encodedOnRampCCIPSendCall) + if err != nil { + return nil, errors.New("failed to build PTB (receiver call) using bindings: " + err.Error()) + } + + executeCCIPSend, err := suiBind.ExecutePTB(ctx, deps.SuiChain.GetCallOpts(), client, ptb) + if err != nil { + return nil, errors.New("failed to execute ccip_send with err: " + err.Error()) + } + + if len(executeCCIPSend.Events) == 0 { + return nil, errors.New("no events returned from Sui CCIPSend") + } + + suiEvent := executeCCIPSend.Events[0].ParsedJson + + seqStr, _ := suiEvent["sequence_number"].(string) + seq, _ := strconv.ParseUint(seqStr, 10, 64) + + return &ccipclient.AnyMsgSentEvent{ + SequenceNumber: seq, + RawEvent: suiEvent, // just dump raw + }, nil +} + +func MakeSuiExtraArgs(gasLimit uint64, allowOOO bool, receiverObjectIDs [][32]byte, tokenReceiver [32]byte) []byte { + extraArgs, err := ccipevm.SerializeClientSUIExtraArgsV1(message_hasher.ClientSuiExtraArgsV1{ + GasLimit: new(big.Int).SetUint64(gasLimit), + AllowOutOfOrderExecution: allowOOO, + TokenReceiver: tokenReceiver, + ReceiverObjectIds: receiverObjectIDs, + }) + if err != nil { + panic(err) + } + return extraArgs +} + +func HandleTokenAndPoolDeploymentForSUI(e cldf.Environment, suiChainSel, evmChainSel uint64) (cldf.Environment, *burn_mint_erc677.BurnMintERC677, *burn_mint_token_pool.BurnMintTokenPool, error) { + suiChains := e.BlockChains.SuiChains() + suiChain := suiChains[suiChainSel] + + evmChain := e.BlockChains.EVMChains()[evmChainSel] + + // Deploy Transferrable TOKEN on ETH + // EVM + evmDeployerKey := evmChain.DeployerKey + state, err := stateview.LoadOnchainState(e) + if err != nil { + return cldf.Environment{}, nil, nil, errors.New("failed load onstate chains " + err.Error()) + } + + linkTokenPkgID := state.SuiChains[suiChainSel].LinkTokenAddress + linkTokenObjectMetadataID := state.SuiChains[suiChainSel].LinkTokenCoinMetadataId + linkTokenTreasuryCapID := state.SuiChains[suiChainSel].LinkTokenTreasuryCapId + + // Deploy transferrable token on EVM + evmToken, evmPool, err := deployTransferTokenOneEnd(e.Logger, evmChain, evmDeployerKey, e.ExistingAddresses, "TOKEN") + if err != nil { + return cldf.Environment{}, nil, nil, errors.New("failed to deploy transfer token for evm chain " + err.Error()) + } + + err = attachTokenToTheRegistry(evmChain, state.MustGetEVMChainState(evmChain.Selector), evmDeployerKey, evmToken.Address(), evmPool.Address()) + if err != nil { + return cldf.Environment{}, nil, nil, errors.New("failed to attach token to registry for evm " + err.Error()) + } + + // eploy & Configure BurnMint TP on SUI + e, _, err = commoncs.ApplyChangesets(&testing.T{}, e, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.DeployTPAndConfigure{}, sui_cs.DeployTPAndConfigureConfig{ + SuiChainSelector: suiChainSel, + TokenPoolTypes: []string{"bnm"}, + BurnMintTpInput: burnminttokenpoolops.DeployAndInitBurnMintTokenPoolInput{ + CoinObjectTypeArg: linkTokenPkgID + "::link::LINK", + CoinMetadataObjectId: linkTokenObjectMetadataID, + TreasuryCapObjectId: linkTokenTreasuryCapID, + + // apply dest chain updates + RemoteChainSelectorsToRemove: []uint64{}, + RemoteChainSelectorsToAdd: []uint64{evmChainSel}, + RemotePoolAddressesToAdd: [][]string{{evmPool.Address().String()}}, // this gets convert to 32byte bytes internally + RemoteTokenAddressesToAdd: []string{ + evmToken.Address().String(), // this gets convert to 32byte bytes internally + }, + + // set chain rate limiter configs + RemoteChainSelectors: []uint64{evmChainSel}, + OutboundIsEnableds: []bool{false}, + OutboundCapacities: []uint64{100000}, + OutboundRates: []uint64{100}, + InboundIsEnableds: []bool{false}, + InboundCapacities: []uint64{100000}, + InboundRates: []uint64{100}, + }, + }), + }) + if err != nil { + return cldf.Environment{}, nil, nil, err + } + + // reload onChainState to get deployed TP contracts + state, err = stateview.LoadOnchainState(e) + if err != nil { + return cldf.Environment{}, nil, nil, errors.New("failed load onstate chains " + err.Error()) + } + + // TODO: might be needed for validation + // ensure tokenPool is added + // (ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object, remoteChainSelector uint64) + // bmtp, err := sui_module_bnmtp.NewBurnMintTokenPool(state.SuiChains[suiChainSel].CCIPBurnMintTokenPool, e.BlockChains.SuiChains()[suiChainSel].Client) + // if err != nil { + // return cldf.Environment{}, nil, nil, err + // } + + // val, err := bmtp.DevInspect().GetRemotePools(context.Background(), &suiBind.CallOpts{ + // Signer: e.BlockChains.SuiChains()[suiChainSel].Signer, + // WaitForExecution: true, + // }, []string{linkTokenPkgID + "::link::LINK"}, suiBind.Object{Id: state.SuiChains[suiChainSel].CCIPBurnMintTokenPoolState}, evmChainSel) + // if err != nil { + // return cldf.Environment{}, nil, nil, err + // } + + // val1, err := bmtp.DevInspect().IsRemotePool(context.Background(), &suiBind.CallOpts{ + // Signer: e.BlockChains.SuiChains()[suiChainSel].Signer, + // WaitForExecution: true, + // }, []string{linkTokenPkgID + "::link::LINK"}, suiBind.Object{Id: state.SuiChains[suiChainSel].CCIPBurnMintTokenPoolState}, evmChainSel, evmPool.Address().Bytes()) + // if err != nil { + // return cldf.Environment{}, nil, nil, err + // } + + suiTokenBytes, err := hex.DecodeString(strings.TrimPrefix(linkTokenObjectMetadataID, "0x")) + if err != nil { + return cldf.Environment{}, nil, nil, errors.New("error while decoding suiToken") + } + suiPoolBytes, err := hex.DecodeString(strings.TrimPrefix(state.SuiChains[suiChainSel].CCIPBurnMintTokenPool, "0x")) + if err != nil { + return cldf.Environment{}, nil, nil, errors.New("error while decoding suiPool") + } + + err = setTokenPoolCounterPart(e.BlockChains.EVMChains()[evmChain.Selector], evmPool, evmDeployerKey, suiChain.Selector, suiTokenBytes, suiPoolBytes) + if err != nil { + return cldf.Environment{}, nil, nil, errors.New("failed to add token to the counterparty " + err.Error()) + } + + err = grantMintBurnPermissions(e.Logger, e.BlockChains.EVMChains()[evmChain.Selector], evmToken, evmDeployerKey, evmPool.Address()) + if err != nil { + return cldf.Environment{}, nil, nil, errors.New("failed to grant burnMint " + err.Error()) + } + + return e, evmToken, evmPool, nil +} + +func WaitForTokenBalanceSui( + ctx context.Context, + t *testing.T, + fungibleAsset string, + account string, + chain cldf_sui.Chain, + expected *big.Int, +) { + require.Eventually(t, func() bool { + balanceReq := models.SuiXGetBalanceRequest{ + Owner: account, + CoinType: fungibleAsset + "::link::LINK", // Sui Link token Type + } + + response, err := chain.Client.SuiXGetBalance(ctx, balanceReq) + require.NoError(t, err) + + balance, ok := new(big.Int).SetString(response.TotalBalance, 10) + require.True(t, ok) + + return balance.Cmp(expected) == 0 + }, tests.WaitTimeout(t), 500*time.Millisecond) +} diff --git a/deployment/ccip/changeset/v1_6/cs_active_candidate_test.go b/deployment/ccip/changeset/v1_6/cs_active_candidate_test.go index 80ac6251b46..33ebd1b7b45 100644 --- a/deployment/ccip/changeset/v1_6/cs_active_candidate_test.go +++ b/deployment/ccip/changeset/v1_6/cs_active_candidate_test.go @@ -22,7 +22,7 @@ import ( "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" "github.com/smartcontractkit/chainlink/v2/core/logger" diff --git a/deployment/ccip/changeset/v1_6/cs_add_new_chain_e2e.go b/deployment/ccip/changeset/v1_6/cs_add_new_chain_e2e.go index 59d13f9edd7..acec8cc87f2 100644 --- a/deployment/ccip/changeset/v1_6/cs_add_new_chain_e2e.go +++ b/deployment/ccip/changeset/v1_6/cs_add_new_chain_e2e.go @@ -24,7 +24,7 @@ import ( commontypes "github.com/smartcontractkit/chainlink/deployment/common/types" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/latest/don_id_claimer" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" ) diff --git a/deployment/ccip/changeset/v1_6/cs_chain_contracts.go b/deployment/ccip/changeset/v1_6/cs_chain_contracts.go index 4c85521fa5d..9e1ddbc011c 100644 --- a/deployment/ccip/changeset/v1_6/cs_chain_contracts.go +++ b/deployment/ccip/changeset/v1_6/cs_chain_contracts.go @@ -23,7 +23,7 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/logger" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/pluginconfig" cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" @@ -59,12 +59,15 @@ const ( bytes4 public constant CHAIN_FAMILY_SELECTOR_EVM = 0x2812d52c; // bytes4(keccak256("CCIP ChainFamilySelector SVM")); bytes4 public constant CHAIN_FAMILY_SELECTOR_SVM = 0x1e10bdc4; + // bytes4(keccak256("CCIP ChainFamilySelector Sui")) + bytes4(keccak256("CCIP ChainFamilySelector Sui")) = 0xc4e05953 ``` */ EVMFamilySelector = "2812d52c" SVMFamilySelector = "1e10bdc4" AptosFamilySelector = "ac77ffec" TVMFamilySelector = "647e2ba9" + SuiFamilySelector = "c4e05953" ) var ( @@ -1346,7 +1349,6 @@ func UpdateRouterRampsChangeset(e cldf.Environment, cfg UpdateRouterRampsConfig) if err := cfg.Validate(e, state); err != nil { return cldf.ChangesetOutput{}, err } - report, err := operations.ExecuteSequence( e.OperationsBundle, ccipseqs.RouterApplyRampUpdatesSequence, @@ -1412,6 +1414,13 @@ func (c SetOCR3OffRampConfig) validateRemoteChain(e *cldf.Environment, state *st if err := commoncs.ValidateOwnership(e.GetContext(), c.MCMS != nil, e.BlockChains.EVMChains()[chainSelector].DeployerKey.From, chainState.Timelock.Address(), chainState.OffRamp); err != nil { return err } + case chain_selectors.FamilySui: + _, ok := state.SuiChains[chainSelector] + if !ok { + return fmt.Errorf("remote chain %d not found in onchain state", chainSelector) + } + return nil + case chain_selectors.FamilyTon: _, ok := state.TonChains[chainSelector] if !ok { @@ -1724,6 +1733,8 @@ func DefaultFeeQuoterDestChainConfig(configEnabled bool, destChainSelector ...ui familySelector, _ = hex.DecodeString(AptosFamilySelector) // aptos } else if destFamily == chain_selectors.FamilyTon { familySelector, _ = hex.DecodeString(TVMFamilySelector) // ton + } else if destFamily == chain_selectors.FamilySui { + familySelector, _ = hex.DecodeString(SuiFamilySelector) // Sui } } return fee_quoter.FeeQuoterDestChainConfig{ diff --git a/deployment/ccip/changeset/v1_6/cs_chain_contracts_test.go b/deployment/ccip/changeset/v1_6/cs_chain_contracts_test.go index 0bda706c907..157e7bc3caf 100644 --- a/deployment/ccip/changeset/v1_6/cs_chain_contracts_test.go +++ b/deployment/ccip/changeset/v1_6/cs_chain_contracts_test.go @@ -40,7 +40,7 @@ import ( "github.com/smartcontractkit/chainlink-evm/pkg/utils" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" diff --git a/deployment/ccip/changeset/v1_6/cs_deploy_chain_test.go b/deployment/ccip/changeset/v1_6/cs_deploy_chain_test.go index b3b60171261..56561cf01cb 100644 --- a/deployment/ccip/changeset/v1_6/cs_deploy_chain_test.go +++ b/deployment/ccip/changeset/v1_6/cs_deploy_chain_test.go @@ -15,7 +15,7 @@ import ( cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset" @@ -145,7 +145,7 @@ func testDeployChainContractsChangesetWithEnv(t *testing.T, e cldf.Environment, } // deploy feequoter with higher version - newFqVersion := semver.MustParse("1.6.2") + newFqVersion := semver.MustParse("1.6.4") for sel, params := range contractParams { params.FeeQuoterOpts = &opsutils.ContractOpts{ Version: newFqVersion, @@ -167,6 +167,7 @@ func testDeployChainContractsChangesetWithEnv(t *testing.T, e cldf.Environment, // verify all contracts populated postState, err := stateview.LoadOnchainState(e) require.NoError(t, err) + for _, sel := range evmSelectors { require.Equal(t, state.Chains[sel].RMNRemote, postState.Chains[sel].RMNRemote) require.Equal(t, state.Chains[sel].Router, postState.Chains[sel].Router) diff --git a/deployment/ccip/changeset/v1_6/cs_translate_onramp_to_feequoter.go b/deployment/ccip/changeset/v1_6/cs_translate_onramp_to_feequoter.go index 5f0fb034419..fc34c9ea765 100644 --- a/deployment/ccip/changeset/v1_6/cs_translate_onramp_to_feequoter.go +++ b/deployment/ccip/changeset/v1_6/cs_translate_onramp_to_feequoter.go @@ -5,7 +5,7 @@ import ( "github.com/ethereum/go-ethereum/common" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" "github.com/smartcontractkit/chainlink-deployments-framework/operations" diff --git a/deployment/ccip/changeset/v1_6/cs_translate_onramp_to_feequoter_test.go b/deployment/ccip/changeset/v1_6/cs_translate_onramp_to_feequoter_test.go index 817760af3f4..3660a4c7a66 100644 --- a/deployment/ccip/changeset/v1_6/cs_translate_onramp_to_feequoter_test.go +++ b/deployment/ccip/changeset/v1_6/cs_translate_onramp_to_feequoter_test.go @@ -17,7 +17,7 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/evm_2_evm_onramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/rmn_contract" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/token_admin_registry" "github.com/smartcontractkit/chainlink/deployment" diff --git a/deployment/ccip/changeset/v1_6/cs_update_bidirectional_lanes.go b/deployment/ccip/changeset/v1_6/cs_update_bidirectional_lanes.go index 5f76ad19da6..266ae289268 100644 --- a/deployment/ccip/changeset/v1_6/cs_update_bidirectional_lanes.go +++ b/deployment/ccip/changeset/v1_6/cs_update_bidirectional_lanes.go @@ -4,7 +4,7 @@ import ( "fmt" "math/big" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" "github.com/smartcontractkit/chainlink-deployments-framework/operations" diff --git a/deployment/ccip/changeset/v1_6/cs_update_bidirectional_lanes_test.go b/deployment/ccip/changeset/v1_6/cs_update_bidirectional_lanes_test.go index 93a8bf0f284..39db02547e2 100644 --- a/deployment/ccip/changeset/v1_6/cs_update_bidirectional_lanes_test.go +++ b/deployment/ccip/changeset/v1_6/cs_update_bidirectional_lanes_test.go @@ -12,7 +12,7 @@ import ( cldf_chain "github.com/smartcontractkit/chainlink-deployments-framework/chain" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" diff --git a/deployment/ccip/operation/evm/v1_6/ops_fee_quoter.go b/deployment/ccip/operation/evm/v1_6/ops_fee_quoter.go index 9b3176c03eb..f49689c3405 100644 --- a/deployment/ccip/operation/evm/v1_6/ops_fee_quoter.go +++ b/deployment/ccip/operation/evm/v1_6/ops_fee_quoter.go @@ -13,7 +13,7 @@ import ( chain_selectors "github.com/smartcontractkit/chain-selectors" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/deployment" "github.com/smartcontractkit/chainlink/deployment/ccip/shared" @@ -47,7 +47,7 @@ var ( shared.FeeQuoter, fee_quoter.FeeQuoterMetaData, &opsutil.ContractOpts{ - Version: &deployment.Version1_6_0, + Version: &deployment.Version1_6_3, // defaults to v1_6_3, but can be overwritten by input params.FeeQuoterOpts EVMBytecode: common.FromHex(fee_quoter.FeeQuoterBin), ZkSyncVMBytecode: fee_quoter.ZkBytecode, }, diff --git a/deployment/ccip/sequence/evm/migration/evm2evm_onramp_feequoter.go b/deployment/ccip/sequence/evm/migration/evm2evm_onramp_feequoter.go index 3bfe22ac141..20c800f990b 100644 --- a/deployment/ccip/sequence/evm/migration/evm2evm_onramp_feequoter.go +++ b/deployment/ccip/sequence/evm/migration/evm2evm_onramp_feequoter.go @@ -4,7 +4,7 @@ import ( "github.com/ethereum/go-ethereum/common" onramp1_5 "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/evm_2_evm_onramp" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" ) type EVM2EVMOnRampMigrate struct { diff --git a/deployment/ccip/sequence/evm/migration/seq_translate_onramp_fq.go b/deployment/ccip/sequence/evm/migration/seq_translate_onramp_fq.go index 6e91e3f544e..922ce2a93d5 100644 --- a/deployment/ccip/sequence/evm/migration/seq_translate_onramp_fq.go +++ b/deployment/ccip/sequence/evm/migration/seq_translate_onramp_fq.go @@ -7,7 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/evm_2_evm_onramp" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" "github.com/smartcontractkit/chainlink-deployments-framework/operations" migration_ops "github.com/smartcontractkit/chainlink/deployment/ccip/operation/evm/v1_5" diff --git a/deployment/ccip/sequence/evm/v1_6/seq_deploy_chain.go b/deployment/ccip/sequence/evm/v1_6/seq_deploy_chain.go index 0e94d6257fd..96c2db1c824 100644 --- a/deployment/ccip/sequence/evm/v1_6/seq_deploy_chain.go +++ b/deployment/ccip/sequence/evm/v1_6/seq_deploy_chain.go @@ -12,10 +12,10 @@ import ( "github.com/ethereum/go-ethereum/common" "golang.org/x/sync/errgroup" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/nonce_manager" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_home" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_remote" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink-deployments-framework/deployment" "github.com/smartcontractkit/chainlink-deployments-framework/operations" diff --git a/deployment/ccip/sequence/evm/v1_6/seq_fee_quoter.go b/deployment/ccip/sequence/evm/v1_6/seq_fee_quoter.go index 3da7d77ddbc..57b6a051815 100644 --- a/deployment/ccip/sequence/evm/v1_6/seq_fee_quoter.go +++ b/deployment/ccip/sequence/evm/v1_6/seq_fee_quoter.go @@ -5,7 +5,7 @@ import ( "github.com/Masterminds/semver/v3" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" "github.com/smartcontractkit/chainlink-deployments-framework/operations" diff --git a/deployment/ccip/sequence/evm/v1_6/seq_offramp.go b/deployment/ccip/sequence/evm/v1_6/seq_offramp.go index ca8f00e44f9..179a9c94dc5 100644 --- a/deployment/ccip/sequence/evm/v1_6/seq_offramp.go +++ b/deployment/ccip/sequence/evm/v1_6/seq_offramp.go @@ -29,6 +29,7 @@ var ( if !ok { return nil, fmt.Errorf("chain with selector %d not defined", chainSel) } + report, err := operations.ExecuteOperation(b, ccipops.OffRampApplySourceChainConfigUpdatesOp, chain, update) if err != nil { return nil, fmt.Errorf("failed to execute OffRampApplySourceChainConfigUpdatesOp on %s: %w", chain, err) diff --git a/deployment/ccip/shared/stateview/evm/state.go b/deployment/ccip/shared/stateview/evm/state.go index 95756901749..27c64f673a3 100644 --- a/deployment/ccip/shared/stateview/evm/state.go +++ b/deployment/ccip/shared/stateview/evm/state.go @@ -38,7 +38,6 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/token_pool_factory" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/usdc_token_pool" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/ccip_home" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/nonce_manager" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" @@ -47,6 +46,7 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_remote" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_2/cctp_message_transmitter_proxy" usdc_token_pool_v1_6_2 "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_2/usdc_token_pool" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink-common/pkg/logger" capabilities_registry "github.com/smartcontractkit/chainlink-evm/gethwrappers/keystone/generated/capabilities_registry_1_1_0" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/aggregator_v3_interface" @@ -233,6 +233,9 @@ func (c CCIPChainState) validateCCIPHomeVersionedActiveConfig(e cldf.Environment if _, exists := e.BlockChains.AptosChains()[chainSel]; exists { return nil } + if _, exists := e.BlockChains.SuiChains()[chainSel]; exists { + return nil + } offRamp, ok := offRampsByChain[chainSel] if !ok { return fmt.Errorf("offRamp for chain %d not found in the state", chainSel) diff --git a/deployment/ccip/shared/stateview/state.go b/deployment/ccip/shared/stateview/state.go index 6792f3286d7..5aece3b5ece 100644 --- a/deployment/ccip/shared/stateview/state.go +++ b/deployment/ccip/shared/stateview/state.go @@ -19,6 +19,41 @@ import ( "golang.org/x/exp/maps" "golang.org/x/sync/errgroup" + solOffRamp "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/ccip_offramp" + solState "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/state" + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc20" + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc20_with_drip" + "github.com/smartcontractkit/chainlink-ton/pkg/ccip/codec" + + cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" + cldf_chain_utils "github.com/smartcontractkit/chainlink-deployments-framework/chain/utils" + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + + "github.com/smartcontractkit/chainlink-evm/gethwrappers/generated/link_token_interface" + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/link_token" + + suistate "github.com/smartcontractkit/chainlink-sui/deployment" + tonstate "github.com/smartcontractkit/chainlink-ton/deployment/state" + + ccipshared "github.com/smartcontractkit/chainlink/deployment/ccip/shared" + aptosstate "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/aptos" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/evm" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/solana" + + commonstate "github.com/smartcontractkit/chainlink/deployment/common/changeset/state" + "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" + + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/erc20" + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/erc677" + + "github.com/smartcontractkit/chainlink/deployment" + "github.com/smartcontractkit/chainlink/deployment/ccip/view" + commoncs "github.com/smartcontractkit/chainlink/deployment/common/changeset" + commontypes "github.com/smartcontractkit/chainlink/deployment/common/types" + "github.com/smartcontractkit/chainlink/deployment/helpers" + + suiutil "github.com/smartcontractkit/chainlink-sui/bindings/utils" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/latest/don_id_claimer" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/latest/factory_burn_mint_erc20" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/latest/fast_transfer_token_pool" @@ -44,7 +79,6 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/token_pool_factory" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/usdc_token_pool" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/ccip_home" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/nonce_manager" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" @@ -53,38 +87,18 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_remote" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_2/cctp_message_transmitter_proxy" usdc_token_pool_v1_6_2 "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_2/usdc_token_pool" - solOffRamp "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/ccip_offramp" - solState "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/state" - cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" - cldf_chain_utils "github.com/smartcontractkit/chainlink-deployments-framework/chain/utils" - cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/generated/link_token_interface" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" capabilities_registry "github.com/smartcontractkit/chainlink-evm/gethwrappers/keystone/generated/capabilities_registry_1_1_0" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/aggregator_v3_interface" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc20" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc20_with_drip" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc677" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/erc20" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/erc677" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/link_token" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/multicall3" - "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/weth9" - tonstate "github.com/smartcontractkit/chainlink-ton/deployment/state" - "github.com/smartcontractkit/chainlink-ton/pkg/ccip/codec" - "github.com/smartcontractkit/chainlink/deployment" - ccipshared "github.com/smartcontractkit/chainlink/deployment/ccip/shared" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/bindings/burn_mint_with_external_minter_fast_transfer_token_pool" "github.com/smartcontractkit/chainlink/deployment/ccip/shared/bindings/hybrid_with_external_minter_fast_transfer_token_pool" "github.com/smartcontractkit/chainlink/deployment/ccip/shared/bindings/signer_registry" - aptosstate "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/aptos" - "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/evm" - "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview/solana" - "github.com/smartcontractkit/chainlink/deployment/ccip/view" - commoncs "github.com/smartcontractkit/chainlink/deployment/common/changeset" - commonstate "github.com/smartcontractkit/chainlink/deployment/common/changeset/state" - "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" - commontypes "github.com/smartcontractkit/chainlink/deployment/common/types" - "github.com/smartcontractkit/chainlink/deployment/helpers" + + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc677" + + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/multicall3" + "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/weth9" ) const chainNotSupportedErr = "chain not supported" @@ -99,6 +113,7 @@ type CCIPOnChainState struct { Chains map[uint64]evm.CCIPChainState SolChains map[uint64]solana.CCIPChainState AptosChains map[uint64]aptosstate.CCIPChainState + SuiChains map[uint64]suistate.CCIPChainState TonChains map[uint64]tonstate.CCIPChainState evmMu *sync.RWMutex } @@ -145,6 +160,7 @@ func (c CCIPOnChainState) WriteEVMChainState(selector uint64, chainState evm.CCI func (c CCIPOnChainState) ValidatePostDeploymentState(e cldf.Environment, validateHomeChain bool) error { onRampsBySelector := make(map[uint64]common.Address) offRampsBySelector := make(map[uint64]offramp.OffRampInterface) + for _, selector := range c.EVMChains() { chainState := c.MustGetEVMChainState(selector) if chainState.OnRamp == nil { @@ -332,6 +348,11 @@ func (c CCIPOnChainState) OffRampPermissionLessExecutionThresholdSeconds(ctx con return 0, fmt.Errorf("failed to get offramp dynamic config for Aptos chain %d: %w", selector, err) } return offrampDynamicConfig.PermissionlessExecutionThresholdSeconds, nil + + case chain_selectors.FamilySui: + + // TODO: fetch this value from offRamp getOffRampDynamicConfig + return (uint32(2 * 60 * 60)), nil } return 0, fmt.Errorf("unsupported chain family %s", family) } @@ -388,6 +409,10 @@ func (c CCIPOnChainState) SupportedChains() map[uint64]struct{} { for chain := range c.AptosChains { chains[chain] = struct{}{} } + for chain := range c.SuiChains { + chains[chain] = struct{}{} + } + for chain := range c.TonChains { chains[chain] = struct{}{} } @@ -644,6 +669,15 @@ func (c CCIPOnChainState) GetOffRampAddressBytes(chainSelector uint64) ([]byte, case chain_selectors.FamilyAptos: ccipAddress := c.AptosChains[chainSelector].CCIPAddress offRampAddress = ccipAddress[:] + case chain_selectors.FamilySui: + offRampAddr := c.SuiChains[chainSelector].OffRampAddress + + normalizedAddr, err := suiutil.ConvertStringToAddressBytes(offRampAddr) + if err != nil { + return nil, err + } + + offRampAddress = normalizedAddr[:] case chain_selectors.FamilyTon: or := c.TonChains[chainSelector].OffRamp rawBytes := codec.ToRawAddr(&or) @@ -680,6 +714,18 @@ func (c CCIPOnChainState) GetOnRampAddressBytes(chainSelector uint64) ([]byte, e return nil, fmt.Errorf("no ccip address found in the state for Aptos chain %d", chainSelector) } onRampAddressBytes = ccipAddress[:] + case chain_selectors.FamilySui: + onRampAddress := c.SuiChains[chainSelector].OnRampAddress + if onRampAddress == "" { + return nil, fmt.Errorf("no ccip address found in the state for Aptos chain %d", chainSelector) + } + + normalizedAddr, err := suiutil.ConvertStringToAddressBytes(onRampAddress) + if err != nil { + return nil, err + } + + onRampAddressBytes = normalizedAddr[:] case chain_selectors.FamilyTon: ramp := c.TonChains[chainSelector].OnRamp if ramp.IsAddrNone() { @@ -746,6 +792,15 @@ func (c CCIPOnChainState) ValidateRamp(chainSelector uint64, rampType cldf.Contr return fmt.Errorf("ccip package does not exist on aptos chain %d", chainSelector) } + case chain_selectors.FamilySui: + // no-op right now + chainState, exists := c.SuiChains[chainSelector] + if !exists { + return fmt.Errorf("chain %d does not exist", chainSelector) + } + if chainState.CCIPAddress == "" { + return fmt.Errorf("ccip package does not exist on sui chain %d", chainSelector) + } case chain_selectors.FamilyTon: chainState, exists := c.TonChains[chainSelector] if !exists { @@ -836,10 +891,16 @@ func LoadOnchainState(e cldf.Environment, opts ...LoadOption) (CCIPOnChainState, return CCIPOnChainState{}, err } + suiChains, err := suistate.LoadOnchainStatesui(e) + if err != nil { + return CCIPOnChainState{}, err + } + state := CCIPOnChainState{ Chains: make(map[uint64]evm.CCIPChainState), SolChains: solanaState.SolChains, AptosChains: aptosChains, + SuiChains: suiChains, TonChains: tonChains, evmMu: &sync.RWMutex{}, } diff --git a/deployment/ccip/shared/token_pools.go b/deployment/ccip/shared/token_pools.go index ae8c04e0057..8cfc9e3826e 100644 --- a/deployment/ccip/shared/token_pools.go +++ b/deployment/ccip/shared/token_pools.go @@ -3,6 +3,7 @@ package shared import ( "context" "fmt" + "strings" "github.com/Masterminds/semver/v3" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -90,7 +91,12 @@ func NewTokenPoolWithMetadata[P tokenPool]( } version, err := semver.NewVersion(versionStr) if err != nil { - return pool, TokenPoolMetadata{}, fmt.Errorf("failed parsing version %s of pool with address %s: %w", versionStr, poolAddress, err) + // fallback: try to normalize invalid semver like 1.6.x-dev -> 1.6.0-dev + safeVersion := strings.ReplaceAll(versionStr, "x", "3") + version, err = semver.NewVersion(safeVersion) + if err != nil { + return pool, TokenPoolMetadata{}, fmt.Errorf("failed parsing version %s (normalized as %s): %w", versionStr, safeVersion, err) + } } token, err := erc20.NewERC20(tokenAddress, chainClient) if err != nil { diff --git a/deployment/ccip/view/v1_6/feequoter.go b/deployment/ccip/view/v1_6/feequoter.go index e51e3aa1381..5135827f4c8 100644 --- a/deployment/ccip/view/v1_6/feequoter.go +++ b/deployment/ccip/view/v1_6/feequoter.go @@ -6,7 +6,7 @@ import ( "github.com/ethereum/go-ethereum/common" router1_2 "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/deployment/ccip/view/v1_2" "github.com/smartcontractkit/chainlink/deployment/common/view/types" diff --git a/deployment/environment.go b/deployment/environment.go index a60f8e2f440..335cc3086ee 100644 --- a/deployment/environment.go +++ b/deployment/environment.go @@ -399,6 +399,10 @@ func ChainConfigsToOCRConfig(chainConfigs []*nodev1.ChainConfig) (map[chain_sele pubkey = common.Hex2Bytes(chainConfig.Ocr2Config.OcrKeyBundle.OnchainSigningAddress) } + if chainConfig.Chain.Type == nodev1.ChainType_CHAIN_TYPE_UNSPECIFIED { + chainConfig.Chain.Type = nodev1.ChainType_CHAIN_TYPE_SUI + } + details, err := chainToDetails(chainConfig.Chain) if err != nil { return nil, err @@ -427,6 +431,8 @@ func chainToDetails(c *nodev1.Chain) (chain_selectors.ChainDetails, error) { family = chain_selectors.FamilySolana case nodev1.ChainType_CHAIN_TYPE_STARKNET: family = chain_selectors.FamilyStarknet + case nodev1.ChainType_CHAIN_TYPE_SUI: + family = chain_selectors.FamilySui case nodev1.ChainType_CHAIN_TYPE_TON: family = chain_selectors.FamilyTon case nodev1.ChainType_CHAIN_TYPE_TRON: @@ -476,6 +482,8 @@ func detailsToChain(details chain_selectors.ChainDetails) (*nodev1.Chain, error) t = nodev1.ChainType_CHAIN_TYPE_TRON case chain_selectors.FamilyStarknet: t = nodev1.ChainType_CHAIN_TYPE_STARKNET + case chain_selectors.FamilySui: + t = nodev1.ChainType_CHAIN_TYPE_SUI default: return nil, fmt.Errorf("unsupported chain family %s", family) } diff --git a/deployment/environment/crib/ccip_deployer.go b/deployment/environment/crib/ccip_deployer.go index 77670d91deb..de8634afbbb 100644 --- a/deployment/environment/crib/ccip_deployer.go +++ b/deployment/environment/crib/ccip_deployer.go @@ -19,9 +19,9 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chainconfig" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/token_pool" - evm_fee_quoter "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_home" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_remote" + evm_fee_quoter "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cciptypes "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3" "github.com/smartcontractkit/chainlink-ccip/pluginconfig" "github.com/smartcontractkit/chainlink-common/pkg/logger" diff --git a/deployment/environment/memory/environment.go b/deployment/environment/memory/environment.go index f2151a8ca09..50d81b0b624 100644 --- a/deployment/environment/memory/environment.go +++ b/deployment/environment/memory/environment.go @@ -7,17 +7,20 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/core/types" + "github.com/smartcontractkit/freeport" "github.com/stretchr/testify/require" "go.uber.org/zap/zapcore" + "github.com/smartcontractkit/chainlink/deployment" + "github.com/smartcontractkit/chainlink-common/pkg/logger" + cldf_chain "github.com/smartcontractkit/chainlink-deployments-framework/chain" cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" "github.com/smartcontractkit/chainlink-deployments-framework/datastore" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" focr "github.com/smartcontractkit/chainlink-deployments-framework/offchain/ocr" - "github.com/smartcontractkit/chainlink/deployment" ) const ( @@ -28,6 +31,7 @@ type MemoryEnvironmentConfig struct { Chains int SolChains int AptosChains int + SuiChains int ZkChains int TonChains int TronChains int @@ -101,6 +105,10 @@ func NewMemoryChainsAptos(t *testing.T, numChains int) []cldf_chain.BlockChain { return generateChainsAptos(t, numChains) } +func NewMemoryChainsSui(t *testing.T, numChains int) []cldf_chain.BlockChain { + return GenerateChainsSui(t, numChains) +} + func NewMemoryChainsZk(t *testing.T, numChains int) []cldf_chain.BlockChain { return GenerateChainsZk(t, numChains) } @@ -216,12 +224,13 @@ func NewMemoryEnvironment( } solChains := NewMemoryChainsSol(t, config.SolChains, solanaCommitSha) aptosChains := NewMemoryChainsAptos(t, config.AptosChains) + suiChains := NewMemoryChainsSui(t, config.SuiChains) zkChains := NewMemoryChainsZk(t, config.ZkChains) tonChains := NewMemoryChainsTon(t, config.TonChains) tronChains := NewMemoryChainsTron(t, config.TronChains) chains := cldf_chain.NewBlockChainsFromSlice( - slices.Concat(evmChains, solChains, aptosChains, zkChains, tonChains, tronChains), + slices.Concat(evmChains, solChains, aptosChains, zkChains, suiChains, tonChains, tronChains), ) c := NewNodesConfig{ diff --git a/deployment/environment/memory/evm_chains.go b/deployment/environment/memory/evm_chains.go index bffdb3bce1c..5ecf486a9f1 100644 --- a/deployment/environment/memory/evm_chains.go +++ b/deployment/environment/memory/evm_chains.go @@ -5,12 +5,14 @@ import ( "strconv" "testing" + "github.com/stretchr/testify/require" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient/simulated" + chain_selectors "github.com/smartcontractkit/chain-selectors" - "github.com/stretchr/testify/require" cldf_chain "github.com/smartcontractkit/chainlink-deployments-framework/chain" cldf_evm_provider "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm/provider" diff --git a/deployment/environment/memory/node.go b/deployment/environment/memory/node.go index 80363d7df72..bb28b5a49a9 100644 --- a/deployment/environment/memory/node.go +++ b/deployment/environment/memory/node.go @@ -28,8 +28,10 @@ import ( cldf_evm "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" cldf_evm_provider "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm/provider" cldf_solana "github.com/smartcontractkit/chainlink-deployments-framework/chain/solana" + cldf_sui "github.com/smartcontractkit/chainlink-deployments-framework/chain/sui" cldf_ton "github.com/smartcontractkit/chainlink-deployments-framework/chain/ton" cldf_tron "github.com/smartcontractkit/chainlink-deployments-framework/chain/tron" + "github.com/smartcontractkit/chainlink-evm/pkg/assets" "github.com/smartcontractkit/chainlink-evm/pkg/client" v2toml "github.com/smartcontractkit/chainlink-evm/pkg/config/toml" @@ -94,6 +96,10 @@ func (n Node) ReplayLogs(ctx context.Context, chains map[uint64]uint64) error { fmt.Printf("ReplayFromBlock: family: %q chainID: %q\n", family, chainID) continue } + if family == "sui" { + fmt.Printf("ReplayFromBlock: family: %q chainID: %q\n", family, chainID) + continue + } if err := n.App.ReplayFromBlock(ctx, family, chainID, block, false); err != nil { return err } @@ -184,6 +190,8 @@ func (n Node) JDChainConfigs() ([]*nodev1.ChainConfig, error) { ocrtype = chaintype.Cosmos case chainsel.FamilyAptos: ocrtype = chaintype.Aptos + case chainsel.FamilySui: + ocrtype = chaintype.Sui case chainsel.FamilyTon: ocrtype = chaintype.TON case chainsel.FamilyTron: @@ -213,6 +221,8 @@ func (n Node) JDChainConfigs() ([]*nodev1.ChainConfig, error) { ctype = nodev1.ChainType_CHAIN_TYPE_STARKNET case chainsel.FamilyAptos: ctype = nodev1.ChainType_CHAIN_TYPE_APTOS + case chainsel.FamilySui: + ctype = nodev1.ChainType_CHAIN_TYPE_SUI case chainsel.FamilyTon: ctype = nodev1.ChainType_CHAIN_TYPE_TON case chainsel.FamilyTron: @@ -357,6 +367,16 @@ func NewNode( } c.Aptos = aptosConfigs + var suiConfigs chainlink.RawConfigs + for chainID, chain := range nodecfg.BlockChains.SuiChains() { + suiChainID, err := chainsel.GetChainIDFromSelector(chainID) + if err != nil { + t.Fatal(err) + } + suiConfigs = append(suiConfigs, createSuiChainConfig(suiChainID, chain)) + } + c.Sui = suiConfigs + var tonConfigs chainlink.RawConfigs for chainID, chain := range nodecfg.BlockChains.TonChains() { tonChainID, err := chainsel.GetChainIDFromSelector(chainID) @@ -443,6 +463,7 @@ func NewNode( nodecfg.BlockChains.EVMChains(), nodecfg.BlockChains.SolanaChains(), nodecfg.BlockChains.AptosChains(), + nodecfg.BlockChains.SuiChains(), nodecfg.BlockChains.TonChains(), nodecfg.BlockChains.TronChains(), ) @@ -488,6 +509,7 @@ func CreateKeys(t *testing.T, chains map[uint64]cldf_evm.Chain, solchains map[uint64]cldf_solana.Chain, aptoschains map[uint64]cldf_aptos.Chain, + suichains map[uint64]cldf_sui.Chain, tonchains map[uint64]cldf_ton.Chain, tronchains map[uint64]cldf_tron.Chain, ) Keys { @@ -642,6 +664,35 @@ func CreateKeys(t *testing.T, } } + if len(suichains) > 0 { + ctype := chaintype.Sui + 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 + + for sel, chain := range suichains { + keystore := app.GetKeyStore().Sui() + err = keystore.EnsureKey(ctx) + require.NoError(t, err, "failed to create key for sui") + + keys, err := keystore.GetAll() + require.NoError(t, err) + require.Len(t, keys, 1) + + transmitter := keys[0] + transmitters[sel] = transmitter.ID() + t.Logf("Created Sui Key: ID %v, Account %v", transmitter.ID(), transmitter.Account()) + + err = FundSuiAccount(chain.FaucetURL, "0x"+transmitter.Account()) + require.NoError(t, err) + } + } + if len(tronchains) > 0 { ctype := chaintype.Tron err = app.GetKeyStore().OCR2().EnsureKeys(ctx, ctype) diff --git a/deployment/environment/memory/sui_chains.go b/deployment/environment/memory/sui_chains.go new file mode 100644 index 00000000000..0267f232493 --- /dev/null +++ b/deployment/environment/memory/sui_chains.go @@ -0,0 +1,99 @@ +package memory + +import ( + "crypto/ed25519" + "crypto/rand" + "encoding/hex" + "fmt" + "testing" + + "github.com/block-vision/sui-go-sdk/models" + "github.com/go-resty/resty/v2" + "github.com/stretchr/testify/require" + + chainsel "github.com/smartcontractkit/chain-selectors" + + cldf_chain "github.com/smartcontractkit/chainlink-deployments-framework/chain" + cldf_sui "github.com/smartcontractkit/chainlink-deployments-framework/chain/sui" + cldf_sui_provider "github.com/smartcontractkit/chainlink-deployments-framework/chain/sui/provider" + "github.com/smartcontractkit/chainlink-testing-framework/framework" + + "github.com/smartcontractkit/chainlink/v2/core/services/chainlink" +) + +func getTestSuiChainSelectors() []uint64 { + // TODO: CTF to support different chain ids, need to investigate if it's possible (thru node config.yaml?) + return []uint64{chainsel.SUI_LOCALNET.Selector} +} + +func randomSeed() []byte { + seed := make([]byte, ed25519.SeedSize) + _, err := rand.Read(seed) + if err != nil { + panic(fmt.Sprintf("failed to generate random seed: %+v", err)) + } + + return seed +} + +func GenerateChainsSui(t *testing.T, numChains int) []cldf_chain.BlockChain { + testSuiChainSelectors := getTestSuiChainSelectors() + if len(testSuiChainSelectors) < numChains { + t.Fatalf("not enough test sui chain selectors available") + } + chains := make([]cldf_chain.BlockChain, 0, numChains) + for i := range numChains { + selector := testSuiChainSelectors[i] + + seeded := ed25519.NewKeyFromSeed(randomSeed()) // 64 bytes: seed||pub + seed := seeded[:32] // or: seeded.Seed() if available + hexKey := hex.EncodeToString(seed) // 64 hex chars + + // generate adhoc sui privKey + c, err := cldf_sui_provider.NewCTFChainProvider(t, selector, + cldf_sui_provider.CTFChainProviderConfig{ + Once: once, + DeployerSignerGen: cldf_sui_provider.AccountGenPrivateKey(hexKey), + }, + ).Initialize(t.Context()) + require.NoError(t, err) + + chains = append(chains, c) + } + + t.Logf("Created %d Sui chains: %+v", len(chains), chains) + return chains +} + +func createSuiChainConfig(chainID string, chain cldf_sui.Chain) chainlink.RawConfig { + chainConfig := chainlink.RawConfig{} + + chainConfig["Enabled"] = true + chainConfig["ChainID"] = chainID + chainConfig["NetworkName"] = "sui-localnet" + chainConfig["NetworkNameFull"] = "sui-localnet" + chainConfig["Nodes"] = []any{ + map[string]any{ + "Name": "primary", + "URL": chain.URL, + }, + } + + return chainConfig +} + +func FundSuiAccount(url string, address string) error { + r := resty.New().SetBaseURL(url) + b := &models.FaucetRequest{ + FixedAmountRequest: &models.FaucetFixedAmountRequest{ + Recipient: address, + }, + } + resp, err := r.R().SetBody(b).SetHeader("Content-Type", "application/json").Post("/gas") + if err != nil { + return err + } + framework.L.Info().Any("Resp", resp).Msg("Address is funded!") + + return nil +} diff --git a/deployment/environment/web/sdk/client/client.go b/deployment/environment/web/sdk/client/client.go index cdb459fb6f5..63d054c18ae 100644 --- a/deployment/environment/web/sdk/client/client.go +++ b/deployment/environment/web/sdk/client/client.go @@ -196,6 +196,12 @@ func (c *client) FetchKeys(ctx context.Context, chainType string) ([]string, err accounts = append(accounts, key.Id) } return accounts, nil + case generated.OCR2ChainTypeSui: + var accounts []string + for _, key := range keys.SuiKeys.GetResults() { + accounts = append(accounts, key.Id) + } + return accounts, nil case generated.OCR2ChainTypeSolana: var accounts []string for _, key := range keys.SolanaKeys.GetResults() { diff --git a/deployment/environment/web/sdk/internal/generated/generated.go b/deployment/environment/web/sdk/internal/generated/generated.go index 3e23de72296..ca6dcde4ee8 100644 --- a/deployment/environment/web/sdk/internal/generated/generated.go +++ b/deployment/environment/web/sdk/internal/generated/generated.go @@ -2341,6 +2341,7 @@ func (v *FetchKeysAptosKeysAptosKeysPayloadResultsAptosKey) GetAccount() string type FetchKeysResponse struct { SolanaKeys FetchKeysSolanaKeysSolanaKeysPayload `json:"solanaKeys"` AptosKeys FetchKeysAptosKeysAptosKeysPayload `json:"aptosKeys"` + SuiKeys FetchKeysSuiKeysSuiKeysPayload `json:"suiKeys"` } // GetSolanaKeys returns FetchKeysResponse.SolanaKeys, and is useful for accessing the field via an interface. @@ -2349,6 +2350,9 @@ func (v *FetchKeysResponse) GetSolanaKeys() FetchKeysSolanaKeysSolanaKeysPayload // GetAptosKeys returns FetchKeysResponse.AptosKeys, and is useful for accessing the field via an interface. func (v *FetchKeysResponse) GetAptosKeys() FetchKeysAptosKeysAptosKeysPayload { return v.AptosKeys } +// GetSuiKeys returns FetchKeysResponse.SuiKeys, and is useful for accessing the field via an interface. +func (v *FetchKeysResponse) GetSuiKeys() FetchKeysSuiKeysSuiKeysPayload { return v.SuiKeys } + // FetchKeysSolanaKeysSolanaKeysPayload includes the requested fields of the GraphQL type SolanaKeysPayload. type FetchKeysSolanaKeysSolanaKeysPayload struct { Results []FetchKeysSolanaKeysSolanaKeysPayloadResultsSolanaKey `json:"results"` @@ -2367,6 +2371,28 @@ type FetchKeysSolanaKeysSolanaKeysPayloadResultsSolanaKey struct { // GetId returns FetchKeysSolanaKeysSolanaKeysPayloadResultsSolanaKey.Id, and is useful for accessing the field via an interface. func (v *FetchKeysSolanaKeysSolanaKeysPayloadResultsSolanaKey) GetId() string { return v.Id } +// FetchKeysSuiKeysSuiKeysPayload includes the requested fields of the GraphQL type SuiKeysPayload. +type FetchKeysSuiKeysSuiKeysPayload struct { + Results []FetchKeysSuiKeysSuiKeysPayloadResultsSuiKey `json:"results"` +} + +// GetResults returns FetchKeysSuiKeysSuiKeysPayload.Results, and is useful for accessing the field via an interface. +func (v *FetchKeysSuiKeysSuiKeysPayload) GetResults() []FetchKeysSuiKeysSuiKeysPayloadResultsSuiKey { + return v.Results +} + +// FetchKeysSuiKeysSuiKeysPayloadResultsSuiKey includes the requested fields of the GraphQL type SuiKey. +type FetchKeysSuiKeysSuiKeysPayloadResultsSuiKey struct { + Id string `json:"id"` + Account string `json:"account"` +} + +// GetId returns FetchKeysSuiKeysSuiKeysPayloadResultsSuiKey.Id, and is useful for accessing the field via an interface. +func (v *FetchKeysSuiKeysSuiKeysPayloadResultsSuiKey) GetId() string { return v.Id } + +// GetAccount returns FetchKeysSuiKeysSuiKeysPayloadResultsSuiKey.Account, and is useful for accessing the field via an interface. +func (v *FetchKeysSuiKeysSuiKeysPayloadResultsSuiKey) GetAccount() string { return v.Account } + // FetchOCR2KeyBundlesOcr2KeyBundlesOCR2KeyBundlesPayload includes the requested fields of the GraphQL type OCR2KeyBundlesPayload. type FetchOCR2KeyBundlesOcr2KeyBundlesOCR2KeyBundlesPayload struct { Results []FetchOCR2KeyBundlesOcr2KeyBundlesOCR2KeyBundlesPayloadResultsOCR2KeyBundle `json:"results"` @@ -6427,6 +6453,7 @@ const ( OCR2ChainTypeAptos OCR2ChainType = "APTOS" OCR2ChainTypeTron OCR2ChainType = "TRON" OCR2ChainTypeTon OCR2ChainType = "TON" + OCR2ChainTypeSui OCR2ChainType = "SUI" ) // OCR2Spec includes the GraphQL fields of OCR2Spec requested by the fragment OCR2Spec. @@ -8118,6 +8145,12 @@ query FetchKeys { account } } + suiKeys { + results { + id + account + } + } } ` diff --git a/deployment/environment/web/sdk/internal/genqlient.graphql b/deployment/environment/web/sdk/internal/genqlient.graphql index a19e0c4df8a..2c9588ecc0b 100644 --- a/deployment/environment/web/sdk/internal/genqlient.graphql +++ b/deployment/environment/web/sdk/internal/genqlient.graphql @@ -57,6 +57,12 @@ query FetchKeys { account } } + suiKeys { + results { + id + account + } + } } ##################### diff --git a/deployment/environment/web/sdk/internal/schema.graphql b/deployment/environment/web/sdk/internal/schema.graphql index 3753b1a8deb..111cd4b2eff 100644 --- a/deployment/environment/web/sdk/internal/schema.graphql +++ b/deployment/environment/web/sdk/internal/schema.graphql @@ -34,6 +34,7 @@ type Query { p2pKeys: P2PKeysPayload! solanaKeys: SolanaKeysPayload! aptosKeys: AptosKeysPayload! + suiKeys: SuiKeysPayload! cosmosKeys: CosmosKeysPayload! starknetKeys: StarkNetKeysPayload! tronKeys: TronKeysPayload! @@ -800,6 +801,7 @@ enum OCR2ChainType { APTOS TRON TON + SUI } type OCR2KeyBundle { @@ -1066,6 +1068,14 @@ type StarkNetKey { type StarkNetKeysPayload { results: [StarkNetKey!]! } +type SuiKey { + id: ID! + account: String! +} + +type SuiKeysPayload { + results: [SuiKey!]! +} type TaskRun { id: ID! dotID: String! diff --git a/deployment/go.mod b/deployment/go.mod index 8575245371b..26b354d3e7f 100644 --- a/deployment/go.mod +++ b/deployment/go.mod @@ -17,6 +17,7 @@ require ( github.com/Masterminds/semver/v3 v3.4.0 github.com/aptos-labs/aptos-go-sdk v1.9.1-0.20250613185448-581cb03acb8f github.com/aws/aws-sdk-go v1.55.7 + github.com/block-vision/sui-go-sdk v1.1.2 github.com/cosmos/gogoproto v1.7.0 github.com/deckarep/golang-set/v2 v2.6.0 github.com/ethereum/go-ethereum v1.16.2 @@ -37,7 +38,7 @@ require ( github.com/smartcontractkit/ccip-owner-contracts v0.1.0 github.com/smartcontractkit/chain-selectors v1.0.73 github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0 + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 github.com/smartcontractkit/chainlink-common v0.9.6-0.20251010135052-c1f318b35ed1 @@ -49,13 +50,15 @@ require ( github.com/smartcontractkit/chainlink-protos/job-distributor v0.13.1 github.com/smartcontractkit/chainlink-protos/orchestrator v0.10.0 github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 + github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 + github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34 github.com/smartcontractkit/chainlink-testing-framework/lib v1.54.5 github.com/smartcontractkit/chainlink-ton v0.0.0-20251009173109-af31806bede5 github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20251009173109-af31806bede5 github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d - github.com/smartcontractkit/mcms v0.25.0 + github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945 @@ -67,10 +70,11 @@ require ( github.com/xssnick/tonutils-go v1.14.1 github.com/zksync-sdk/zksync2-go v1.1.1-0.20250620124214-2c742ee399c6 go.uber.org/zap v1.27.0 + golang.org/x/crypto v0.42.0 golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc - golang.org/x/mod v0.26.0 + golang.org/x/mod v0.27.0 golang.org/x/oauth2 v0.30.0 - golang.org/x/sync v0.16.0 + golang.org/x/sync v0.17.0 google.golang.org/grpc v1.74.2 google.golang.org/protobuf v1.36.7 gopkg.in/guregu/null.v4 v4.0.0 @@ -138,11 +142,11 @@ require ( github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect - github.com/block-vision/sui-go-sdk v1.0.9 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/buger/goterm v1.0.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v28 v28.0.0 // indirect @@ -413,7 +417,6 @@ require ( github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect github.com/smartcontractkit/chainlink-protos/svr v1.1.0 // indirect github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207 // indirect - github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f // indirect github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.2 // indirect github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513 // indirect @@ -479,13 +482,12 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/ratelimit v0.3.1 // indirect golang.org/x/arch v0.11.0 // indirect - golang.org/x/crypto v0.40.0 // indirect - golang.org/x/net v0.42.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/term v0.33.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/term v0.35.0 // indirect + golang.org/x/text v0.29.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools v0.36.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.16.0 // indirect diff --git a/deployment/go.sum b/deployment/go.sum index 83707d59c21..a446dfa2ccf 100644 --- a/deployment/go.sum +++ b/deployment/go.sum @@ -221,8 +221,8 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= 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= -github.com/block-vision/sui-go-sdk v1.0.9 h1:vp8y+nSshTdTyhiDYy6Z/4aEsyTbveJ6n8ALg53GHWg= -github.com/block-vision/sui-go-sdk v1.0.9/go.mod h1:V9vmxB2pyYdy8eXV+x5lb/PcSVt3ytvF43m3NUlybx0= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/bradleyjkemp/cupaloy/v2 v2.6.0 h1:knToPYa2xtfg42U3I6punFEjaGFKWQRXJwj0JTv4mTs= github.com/bradleyjkemp/cupaloy/v2 v2.6.0/go.mod h1:bm7JXdkRd4BHJk9HpwqAI8BoAY1lps46Enkdqw6aRX0= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= @@ -245,6 +245,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -1330,8 +1332,8 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf h github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf/go.mod h1:tEjqontct1/5cKHm4q75nopZa1rwzaQZwd9U9wn0uZE= 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.1.1-solana.0.20251006204220-06f2720ee9a0 h1:/FUN8x1iF3jYR3LYiIwvtHtJ6O6fZrMxtkbvTgO2GZA= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a h1:3vOXsnGxG5KiRZmPSueaHGprc0VTB+Z211pblOvQsNU= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 h1:f8ak6g6P2KT4HjUbleU+Bh0gUJXMoGuoriMSyGxxD4M= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5/go.mod h1:Ve1xD71bl193YIZQEoJMmBqLGQJdNs29bwbuObwvbhQ= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 h1:Z4t2ZY+ZyGWxtcXvPr11y4o3CGqhg3frJB5jXkCSvWA= @@ -1380,8 +1382,10 @@ github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222- github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207/go.mod h1:HIpGvF6nKCdtZ30xhdkKWGM9+4Z4CVqJH8ZBL1FTEiY= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 h1:QgjF+S64bGDyaNcz11zDg7GC7FwNmYrsHN6jiJPRVkk= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524/go.mod h1:vcms/UPnfg7LZ2txinn59yJR6rXZ31XOk5++03LOeys= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f h1:7saUNbu+edzDgRPedNFfTsx5+5RL40r1r0pgISoh8Hs= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f/go.mod h1:CTR5agBB07sCpRltBkHmnkCZ+g8sXRafCJge/Hqr7aM= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 h1:7KMcSEptDirqBY/jzNhxFvWmDE2s5KQE6uMPQ1inad4= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854/go.mod h1:VlyZhVw+a93Sk8rVHOIH6tpiXrMzuWLZrjs1eTIExW8= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 h1:/BKZfcmGghI+LQdXdJXz63l0vYntSg6rd3bfU/5W55I= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854/go.mod h1:xMf64ftqTx9LuvHjMSxBMmgN41EOMQJ/OpGnvLf4NiM= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34 h1:W7/I1dpKXmuXSisuWs6tYGQCF+VtMdJX9iegzKjPYWQ= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34/go.mod h1:SoCjdzeZHP500QtKAjJ9I6rHD03SkQmRL4dNkOoe6yk= github.com/smartcontractkit/chainlink-testing-framework/lib v1.54.5 h1:jARz/SWbmWoGJJGVcAnWwGMb8JuHRTQQsM3m6ZwrAGk= @@ -1398,16 +1402,16 @@ github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9 github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513/go.mod h1:ccjEgNeqOO+bjPddnL4lUrNLzyCvGCxgBjJdhFX3wa8= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d h1:qLmSOOtB/Ogn79eIDkuujOu8M5Jd747V1H7Brk/nTvo= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d/go.mod h1:4WhGgCA0smBbBud5mK+jnDb2wwndMvoqaWBJ3OV/7Bw= -github.com/smartcontractkit/cre-sdk-go v0.7.0 h1:QmCc/a6kGCmzhm0k0WFJZKxjklDedtAfvrA+vTnLcW0= -github.com/smartcontractkit/cre-sdk-go v0.7.0/go.mod h1:qVhKhBLANrGWKav6aHqO2UM7IltiouOnUbxu8ZQlKVM= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81 h1:CfnjzJvn3iX93PzdGucyGJmgv/KDXv8DfKcLw/mix24= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81/go.mod h1:CQY8hCISjctPmt8ViDVgFm4vMGLs5fYI198QhkBS++Y= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7/go.mod h1:FX7/bVdoep147QQhsOPkYsPEXhGZjeYx6lBSaSXtZOA= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d h1:/0/80Ic6wpKH5F1nwDoRj9+70IxXunvCyNcCkA+9ik0= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d/go.mod h1:Acy3BTBxou83ooMESLO90s8PKSu7RvLCzwSTbxxfOK0= -github.com/smartcontractkit/mcms v0.25.0 h1:GTkG6jQ2CYoVQFKkRQnA42IvUrR4gObeHqwrQNRhmGM= -github.com/smartcontractkit/mcms v0.25.0/go.mod h1:7v5DNfWqIS81nISbuFBrlV1QHZfD+pFQzjsxqqhcK9o= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 h1:Vt13oeOTFZ8IMQQTuWi9MbvR5wl/a1v4BRIV0GyJj7Q= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4/go.mod h1:g8Ot7s0gVJrJWvH1qib2jC7u6Npos1gTlKpoFSbJVI8= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 h1:rN8PnOZj53L70zlm1aYz1k14lXNCt7NoV666TDfcTJA= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618/go.mod h1:iwy4yWFuK+1JeoIRTaSOA9pl+8Kf//26zezxEXrAQEQ= github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 h1:AWLLzOSCbSdBEYrAXZn0XKnTFXxr1BANaW2d5qTZbSM= @@ -1694,6 +1698,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= @@ -1709,8 +1714,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1751,8 +1756,8 @@ 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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1812,8 +1817,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= 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= @@ -1841,8 +1846,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1934,8 +1939,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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= @@ -1949,8 +1954,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= -golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1966,8 +1971,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2038,8 +2043,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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 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= diff --git a/deployment/version.go b/deployment/version.go index ebdb8ab2d33..10d0699d200 100644 --- a/deployment/version.go +++ b/deployment/version.go @@ -16,4 +16,5 @@ var ( Version1_6_1Dev = *semver.MustParse("1.6.1-dev") Version1_6_2 = *semver.MustParse("1.6.2") Version1_6_3Dev = *semver.MustParse("1.6.3-dev") + Version1_6_3 = *semver.MustParse("1.6.3") ) diff --git a/go.md b/go.md index a09218ced71..0b645abc5a5 100644 --- a/go.md +++ b/go.md @@ -313,6 +313,8 @@ flowchart LR chainlink-sui --> chainlink-aptos chainlink-sui --> chainlink-ccip click chainlink-sui href "https://github.com/smartcontractkit/chainlink-sui" + chainlink-sui/deployment --> chainlink-deployments-framework + click chainlink-sui/deployment href "https://github.com/smartcontractkit/chainlink-sui" chainlink-testing-framework/framework click chainlink-testing-framework/framework href "https://github.com/smartcontractkit/chainlink-testing-framework" chainlink-testing-framework/framework/components/dockercompose --> chainlink-testing-framework/framework @@ -360,6 +362,7 @@ flowchart LR chainlink/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based --> cre-sdk-go/capabilities/scheduler/cron click chainlink/core/scripts/cre/environment/examples/workflows/v2/proof-of-reserve/cron-based href "https://github.com/smartcontractkit/chainlink" chainlink/deployment --> ccip-contract-examples/chains/evm + chainlink/deployment --> chainlink-sui/deployment chainlink/deployment --> chainlink-testing-framework/lib chainlink/deployment --> chainlink-ton/deployment chainlink/deployment --> chainlink/v2 @@ -516,6 +519,12 @@ flowchart LR end click chainlink-protos-repo href "https://github.com/smartcontractkit/chainlink-protos" + subgraph chainlink-sui-repo[chainlink-sui] + chainlink-sui + chainlink-sui/deployment + end + click chainlink-sui-repo href "https://github.com/smartcontractkit/chainlink-sui" + subgraph chainlink-testing-framework-repo[chainlink-testing-framework] chainlink-testing-framework/framework chainlink-testing-framework/framework/components/dockercompose @@ -551,5 +560,5 @@ flowchart LR click tdh2-repo href "https://github.com/smartcontractkit/tdh2" classDef outline stroke-dasharray:6,fill:none; - class chainlink-repo,chainlink-ccip-repo,chainlink-common-repo,chainlink-evm-repo,chainlink-framework-repo,chainlink-protos-repo,chainlink-testing-framework-repo,chainlink-ton-repo,cre-sdk-go-repo,tdh2-repo outline + class chainlink-repo,chainlink-ccip-repo,chainlink-common-repo,chainlink-evm-repo,chainlink-framework-repo,chainlink-protos-repo,chainlink-sui-repo,chainlink-testing-framework-repo,chainlink-ton-repo,cre-sdk-go-repo,tdh2-repo outline ``` diff --git a/go.mod b/go.mod index 7ab631d1af1..7373d5bf5ee 100644 --- a/go.mod +++ b/go.mod @@ -82,7 +82,7 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.73 github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf github.com/smartcontractkit/chainlink-automation v0.8.1 - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0 + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 github.com/smartcontractkit/chainlink-common v0.9.6-0.20251010135052-c1f318b35ed1 @@ -100,12 +100,12 @@ require ( github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207 github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 - github.com/smartcontractkit/chainlink-sui v0.0.0-20250916145228-cc9dd5b92c88 + github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 github.com/smartcontractkit/chainlink-ton v0.0.0-20251009173109-af31806bede5 github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250815105909-75499abc4335 - github.com/smartcontractkit/cre-sdk-go v0.7.0 + github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81 github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v0.7.0 - github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.7.0 + github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.8.0 github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 @@ -133,12 +133,12 @@ require ( go.opentelemetry.io/otel/trace v1.37.0 go.uber.org/atomic v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.40.0 + golang.org/x/crypto v0.42.0 golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc - golang.org/x/mod v0.26.0 + golang.org/x/mod v0.27.0 golang.org/x/oauth2 v0.30.0 - golang.org/x/sync v0.16.0 - golang.org/x/term v0.33.0 + golang.org/x/sync v0.17.0 + golang.org/x/term v0.35.0 golang.org/x/time v0.12.0 gonum.org/v1/gonum v0.16.0 google.golang.org/grpc v1.74.2 @@ -179,10 +179,11 @@ require ( github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect - github.com/block-vision/sui-go-sdk v1.0.9 // indirect + github.com/block-vision/sui-go-sdk v1.1.2 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/buger/goterm v1.0.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v28 v28.0.0 // indirect @@ -398,10 +399,10 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/ratelimit v0.3.1 // indirect golang.org/x/arch v0.11.0 // indirect - golang.org/x/net v0.42.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/text v0.27.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/text v0.29.0 // indirect + golang.org/x/tools v0.36.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250528174236-200df99c418a // indirect diff --git a/go.sum b/go.sum index 6beabae4fdd..566e51dfa14 100644 --- a/go.sum +++ b/go.sum @@ -148,8 +148,8 @@ github.com/bits-and-blooms/bitset v1.20.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6 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= -github.com/block-vision/sui-go-sdk v1.0.9 h1:vp8y+nSshTdTyhiDYy6Z/4aEsyTbveJ6n8ALg53GHWg= -github.com/block-vision/sui-go-sdk v1.0.9/go.mod h1:V9vmxB2pyYdy8eXV+x5lb/PcSVt3ytvF43m3NUlybx0= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= @@ -170,6 +170,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -1107,8 +1109,8 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf h github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf/go.mod h1:tEjqontct1/5cKHm4q75nopZa1rwzaQZwd9U9wn0uZE= 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.1.1-solana.0.20251006204220-06f2720ee9a0 h1:/FUN8x1iF3jYR3LYiIwvtHtJ6O6fZrMxtkbvTgO2GZA= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a h1:3vOXsnGxG5KiRZmPSueaHGprc0VTB+Z211pblOvQsNU= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 h1:f8ak6g6P2KT4HjUbleU+Bh0gUJXMoGuoriMSyGxxD4M= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5/go.mod h1:Ve1xD71bl193YIZQEoJMmBqLGQJdNs29bwbuObwvbhQ= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 h1:Z4t2ZY+ZyGWxtcXvPr11y4o3CGqhg3frJB5jXkCSvWA= @@ -1153,20 +1155,20 @@ github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222- github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207/go.mod h1:HIpGvF6nKCdtZ30xhdkKWGM9+4Z4CVqJH8ZBL1FTEiY= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 h1:QgjF+S64bGDyaNcz11zDg7GC7FwNmYrsHN6jiJPRVkk= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524/go.mod h1:vcms/UPnfg7LZ2txinn59yJR6rXZ31XOk5++03LOeys= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916145228-cc9dd5b92c88 h1:L2mllixqv7DOgkSnd4GDBuRz6UzYujrhETqRJNZOxOk= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916145228-cc9dd5b92c88/go.mod h1:CTR5agBB07sCpRltBkHmnkCZ+g8sXRafCJge/Hqr7aM= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 h1:7KMcSEptDirqBY/jzNhxFvWmDE2s5KQE6uMPQ1inad4= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854/go.mod h1:VlyZhVw+a93Sk8rVHOIH6tpiXrMzuWLZrjs1eTIExW8= github.com/smartcontractkit/chainlink-ton v0.0.0-20251009173109-af31806bede5 h1:/nQQk0m0vcgOHS/7/uwdnIZFB632t4/I8lz+RTsQU/Q= github.com/smartcontractkit/chainlink-ton v0.0.0-20251009173109-af31806bede5/go.mod h1:L4KmKujzDxXBWu/Tk9HzQ9tysaW17PIv9hW0dB2/qsg= github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250815105909-75499abc4335 h1:7bxYNrPpygn8PUSBiEKn8riMd7CXMi/4bjTy0fHhcrY= github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250815105909-75499abc4335/go.mod h1:ccjEgNeqOO+bjPddnL4lUrNLzyCvGCxgBjJdhFX3wa8= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d h1:qLmSOOtB/Ogn79eIDkuujOu8M5Jd747V1H7Brk/nTvo= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d/go.mod h1:4WhGgCA0smBbBud5mK+jnDb2wwndMvoqaWBJ3OV/7Bw= -github.com/smartcontractkit/cre-sdk-go v0.7.0 h1:QmCc/a6kGCmzhm0k0WFJZKxjklDedtAfvrA+vTnLcW0= -github.com/smartcontractkit/cre-sdk-go v0.7.0/go.mod h1:qVhKhBLANrGWKav6aHqO2UM7IltiouOnUbxu8ZQlKVM= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81 h1:CfnjzJvn3iX93PzdGucyGJmgv/KDXv8DfKcLw/mix24= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81/go.mod h1:CQY8hCISjctPmt8ViDVgFm4vMGLs5fYI198QhkBS++Y= github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v0.7.0 h1:4C0wM23L1aOLkBru8+iz4VEuryMjijt5RZeZK+EqhUs= github.com/smartcontractkit/cre-sdk-go/capabilities/networking/http v0.7.0/go.mod h1:Lb1l60MI3D8OhvEJVu4GB7rmmTqXpK3smnJZxvdisqY= -github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.7.0 h1:9rDE5Hy7mozQ7aEqQwCgktZ2nQTeJDXNSkicyU8cqJc= -github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.7.0/go.mod h1:UaZJB6YRx3rsuvEtZWJ9zFH/ap3gXz30BldsrpUrYfM= +github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.8.0 h1:aO++xdGcQ8TpxAfXrm7EHeIVLDitB8xg7J8/zSxbdBY= +github.com/smartcontractkit/cre-sdk-go/capabilities/scheduler/cron v0.8.0/go.mod h1:PWyrIw16It4TSyq6mDXqmSR0jF2evZRKuBxu7pK1yDw= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= @@ -1430,6 +1432,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= @@ -1444,8 +1447,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1487,8 +1490,8 @@ golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= 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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1547,8 +1550,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= 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= @@ -1576,8 +1579,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1666,8 +1669,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1679,8 +1682,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= -golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1696,8 +1699,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= -golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1766,8 +1769,8 @@ golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= 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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 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= diff --git a/integration-tests/ccip-tests/actions/ccip_helpers.go b/integration-tests/ccip-tests/actions/ccip_helpers.go index 454ec0634af..217bc9676ec 100644 --- a/integration-tests/ccip-tests/actions/ccip_helpers.go +++ b/integration-tests/ccip-tests/actions/ccip_helpers.go @@ -75,7 +75,7 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/evm_2_evm_onramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/mock_rmn_contract" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/rmn_contract" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" ) const ( diff --git a/integration-tests/ccip-tests/contracts/contract_models.go b/integration-tests/ccip-tests/contracts/contract_models.go index f07e586b155..200b6b2f9ee 100644 --- a/integration-tests/ccip-tests/contracts/contract_models.go +++ b/integration-tests/ccip-tests/contracts/contract_models.go @@ -43,7 +43,7 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/rmn_contract" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/lock_release_token_pool" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/usdc_token_pool" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink-evm/gethwrappers/generated/link_token_interface" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc677" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/erc20" diff --git a/integration-tests/go.mod b/integration-tests/go.mod index cc24a556938..13e9b38718c 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -47,7 +47,7 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.73 github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf github.com/smartcontractkit/chainlink-automation v0.8.1 - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0 + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 github.com/smartcontractkit/chainlink-common v0.9.6-0.20251010135052-c1f318b35ed1 @@ -55,6 +55,8 @@ require ( github.com/smartcontractkit/chainlink-evm v0.3.4-0.20251007172225-ba2f4b5ef962 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20251003185510-17234095940f github.com/smartcontractkit/chainlink-protos/job-distributor v0.13.1 + github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 + github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.5 github.com/smartcontractkit/chainlink-testing-framework/lib v1.54.5 github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.51.0 @@ -64,7 +66,7 @@ require ( github.com/smartcontractkit/chainlink-testing-framework/wasp v1.51.0 github.com/smartcontractkit/chainlink-ton v0.0.0-20251009173109-af31806bede5 github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d - github.com/smartcontractkit/mcms v0.25.0 + github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 github.com/spf13/cobra v1.9.1 github.com/stretchr/testify v1.11.1 @@ -74,10 +76,10 @@ require ( github.com/xssnick/tonutils-go v1.14.1 go.uber.org/atomic v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.40.0 + golang.org/x/crypto v0.42.0 golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc - golang.org/x/sync v0.16.0 - golang.org/x/text v0.28.0 + golang.org/x/sync v0.17.0 + golang.org/x/text v0.29.0 google.golang.org/grpc v1.74.2 gopkg.in/guregu/null.v4 v4.0.0 k8s.io/apimachinery v0.33.2 @@ -152,11 +154,12 @@ require ( github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect - github.com/block-vision/sui-go-sdk v1.0.9 // indirect + github.com/block-vision/sui-go-sdk v1.1.2 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/buger/goterm v1.0.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v28 v28.0.0 // indirect @@ -499,7 +502,6 @@ require ( github.com/smartcontractkit/chainlink-protos/svr v1.1.0 // indirect github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207 // indirect github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 // indirect - github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f // indirect github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34 // indirect github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20251009173109-af31806bede5 // indirect github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513 // indirect @@ -595,13 +597,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.26.0 // indirect - golang.org/x/net v0.42.0 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/term v0.33.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/term v0.35.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools v0.36.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.16.0 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index e738c09042f..cd45cebaaa6 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -259,8 +259,8 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= 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= -github.com/block-vision/sui-go-sdk v1.0.9 h1:vp8y+nSshTdTyhiDYy6Z/4aEsyTbveJ6n8ALg53GHWg= -github.com/block-vision/sui-go-sdk v1.0.9/go.mod h1:V9vmxB2pyYdy8eXV+x5lb/PcSVt3ytvF43m3NUlybx0= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -285,6 +285,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -1574,8 +1576,8 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf h github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf/go.mod h1:tEjqontct1/5cKHm4q75nopZa1rwzaQZwd9U9wn0uZE= 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.1.1-solana.0.20251006204220-06f2720ee9a0 h1:/FUN8x1iF3jYR3LYiIwvtHtJ6O6fZrMxtkbvTgO2GZA= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a h1:3vOXsnGxG5KiRZmPSueaHGprc0VTB+Z211pblOvQsNU= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 h1:f8ak6g6P2KT4HjUbleU+Bh0gUJXMoGuoriMSyGxxD4M= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5/go.mod h1:Ve1xD71bl193YIZQEoJMmBqLGQJdNs29bwbuObwvbhQ= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 h1:Z4t2ZY+ZyGWxtcXvPr11y4o3CGqhg3frJB5jXkCSvWA= @@ -1624,8 +1626,10 @@ github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222- github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207/go.mod h1:HIpGvF6nKCdtZ30xhdkKWGM9+4Z4CVqJH8ZBL1FTEiY= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 h1:QgjF+S64bGDyaNcz11zDg7GC7FwNmYrsHN6jiJPRVkk= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524/go.mod h1:vcms/UPnfg7LZ2txinn59yJR6rXZ31XOk5++03LOeys= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f h1:7saUNbu+edzDgRPedNFfTsx5+5RL40r1r0pgISoh8Hs= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f/go.mod h1:CTR5agBB07sCpRltBkHmnkCZ+g8sXRafCJge/Hqr7aM= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 h1:7KMcSEptDirqBY/jzNhxFvWmDE2s5KQE6uMPQ1inad4= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854/go.mod h1:VlyZhVw+a93Sk8rVHOIH6tpiXrMzuWLZrjs1eTIExW8= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 h1:/BKZfcmGghI+LQdXdJXz63l0vYntSg6rd3bfU/5W55I= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854/go.mod h1:xMf64ftqTx9LuvHjMSxBMmgN41EOMQJ/OpGnvLf4NiM= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34 h1:W7/I1dpKXmuXSisuWs6tYGQCF+VtMdJX9iegzKjPYWQ= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34/go.mod h1:SoCjdzeZHP500QtKAjJ9I6rHD03SkQmRL4dNkOoe6yk= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.5 h1:S5HND0EDtlA+xp2E+mD11DlUTp2wD6uojwixye8ZB/k= @@ -1650,16 +1654,16 @@ github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9 github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513/go.mod h1:ccjEgNeqOO+bjPddnL4lUrNLzyCvGCxgBjJdhFX3wa8= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d h1:qLmSOOtB/Ogn79eIDkuujOu8M5Jd747V1H7Brk/nTvo= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d/go.mod h1:4WhGgCA0smBbBud5mK+jnDb2wwndMvoqaWBJ3OV/7Bw= -github.com/smartcontractkit/cre-sdk-go v0.7.0 h1:QmCc/a6kGCmzhm0k0WFJZKxjklDedtAfvrA+vTnLcW0= -github.com/smartcontractkit/cre-sdk-go v0.7.0/go.mod h1:qVhKhBLANrGWKav6aHqO2UM7IltiouOnUbxu8ZQlKVM= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81 h1:CfnjzJvn3iX93PzdGucyGJmgv/KDXv8DfKcLw/mix24= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81/go.mod h1:CQY8hCISjctPmt8ViDVgFm4vMGLs5fYI198QhkBS++Y= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7/go.mod h1:FX7/bVdoep147QQhsOPkYsPEXhGZjeYx6lBSaSXtZOA= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d h1:/0/80Ic6wpKH5F1nwDoRj9+70IxXunvCyNcCkA+9ik0= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d/go.mod h1:Acy3BTBxou83ooMESLO90s8PKSu7RvLCzwSTbxxfOK0= -github.com/smartcontractkit/mcms v0.25.0 h1:GTkG6jQ2CYoVQFKkRQnA42IvUrR4gObeHqwrQNRhmGM= -github.com/smartcontractkit/mcms v0.25.0/go.mod h1:7v5DNfWqIS81nISbuFBrlV1QHZfD+pFQzjsxqqhcK9o= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 h1:Vt13oeOTFZ8IMQQTuWi9MbvR5wl/a1v4BRIV0GyJj7Q= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4/go.mod h1:g8Ot7s0gVJrJWvH1qib2jC7u6Npos1gTlKpoFSbJVI8= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 h1:rN8PnOZj53L70zlm1aYz1k14lXNCt7NoV666TDfcTJA= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618/go.mod h1:iwy4yWFuK+1JeoIRTaSOA9pl+8Kf//26zezxEXrAQEQ= github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 h1:AWLLzOSCbSdBEYrAXZn0XKnTFXxr1BANaW2d5qTZbSM= @@ -2025,6 +2029,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= @@ -2040,8 +2045,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -2082,8 +2087,8 @@ 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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2143,8 +2148,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= 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= @@ -2172,8 +2177,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2267,8 +2272,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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= @@ -2282,8 +2287,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= -golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2299,8 +2304,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2371,8 +2376,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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 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= diff --git a/integration-tests/load/ccip/destination_gun.go b/integration-tests/load/ccip/destination_gun.go index 6ea0445e35c..ff7da48b9a9 100644 --- a/integration-tests/load/ccip/destination_gun.go +++ b/integration-tests/load/ccip/destination_gun.go @@ -19,7 +19,7 @@ import ( selectors "github.com/smartcontractkit/chain-selectors" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/message_hasher" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/message_hasher" "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_1/ccip_router" solccip "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/ccip" soltokens "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/tokens" diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 3982cf4c973..475dcf05b1a 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -29,7 +29,7 @@ require ( github.com/slack-go/slack v0.15.0 github.com/smartcontractkit/chain-selectors v1.0.73 github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0 + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 github.com/smartcontractkit/chainlink-common v0.9.6-0.20251010135052-c1f318b35ed1 @@ -47,7 +47,7 @@ require ( go.uber.org/atomic v1.11.0 go.uber.org/ratelimit v0.3.1 golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc - golang.org/x/sync v0.16.0 + golang.org/x/sync v0.17.0 ) require ( @@ -126,11 +126,12 @@ require ( github.com/bits-and-blooms/bitset v1.21.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect - github.com/block-vision/sui-go-sdk v1.0.9 // indirect + github.com/block-vision/sui-go-sdk v1.1.2 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/buger/goterm v1.0.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v28 v28.0.0 // indirect @@ -488,7 +489,8 @@ require ( github.com/smartcontractkit/chainlink-protos/svr v1.1.0 // indirect github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207 // indirect github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 // indirect - github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f // indirect + github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 // indirect + github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 // indirect github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.51.0 // indirect github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect github.com/smartcontractkit/chainlink-testing-framework/sentinel v0.1.2 // indirect @@ -498,7 +500,7 @@ require ( github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d // indirect - github.com/smartcontractkit/mcms v0.25.0 // indirect + github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 // indirect github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945 // indirect @@ -594,15 +596,15 @@ require ( go.uber.org/zap v1.27.0 // indirect go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect golang.org/x/arch v0.11.0 // indirect - golang.org/x/crypto v0.40.0 // indirect - golang.org/x/mod v0.26.0 // indirect - golang.org/x/net v0.42.0 // indirect + golang.org/x/crypto v0.42.0 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/term v0.33.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/term v0.35.0 // indirect + golang.org/x/text v0.29.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools v0.36.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.16.0 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 8fc10d30a1d..644185390e9 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -259,8 +259,8 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= 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= -github.com/block-vision/sui-go-sdk v1.0.9 h1:vp8y+nSshTdTyhiDYy6Z/4aEsyTbveJ6n8ALg53GHWg= -github.com/block-vision/sui-go-sdk v1.0.9/go.mod h1:V9vmxB2pyYdy8eXV+x5lb/PcSVt3ytvF43m3NUlybx0= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -285,6 +285,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -1553,8 +1555,8 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf h github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf/go.mod h1:tEjqontct1/5cKHm4q75nopZa1rwzaQZwd9U9wn0uZE= 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.1.1-solana.0.20251006204220-06f2720ee9a0 h1:/FUN8x1iF3jYR3LYiIwvtHtJ6O6fZrMxtkbvTgO2GZA= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a h1:3vOXsnGxG5KiRZmPSueaHGprc0VTB+Z211pblOvQsNU= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 h1:f8ak6g6P2KT4HjUbleU+Bh0gUJXMoGuoriMSyGxxD4M= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5/go.mod h1:Ve1xD71bl193YIZQEoJMmBqLGQJdNs29bwbuObwvbhQ= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 h1:Z4t2ZY+ZyGWxtcXvPr11y4o3CGqhg3frJB5jXkCSvWA= @@ -1603,8 +1605,10 @@ github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222- github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207/go.mod h1:HIpGvF6nKCdtZ30xhdkKWGM9+4Z4CVqJH8ZBL1FTEiY= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 h1:QgjF+S64bGDyaNcz11zDg7GC7FwNmYrsHN6jiJPRVkk= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524/go.mod h1:vcms/UPnfg7LZ2txinn59yJR6rXZ31XOk5++03LOeys= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f h1:7saUNbu+edzDgRPedNFfTsx5+5RL40r1r0pgISoh8Hs= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f/go.mod h1:CTR5agBB07sCpRltBkHmnkCZ+g8sXRafCJge/Hqr7aM= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 h1:7KMcSEptDirqBY/jzNhxFvWmDE2s5KQE6uMPQ1inad4= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854/go.mod h1:VlyZhVw+a93Sk8rVHOIH6tpiXrMzuWLZrjs1eTIExW8= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 h1:/BKZfcmGghI+LQdXdJXz63l0vYntSg6rd3bfU/5W55I= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854/go.mod h1:xMf64ftqTx9LuvHjMSxBMmgN41EOMQJ/OpGnvLf4NiM= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34 h1:W7/I1dpKXmuXSisuWs6tYGQCF+VtMdJX9iegzKjPYWQ= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34/go.mod h1:SoCjdzeZHP500QtKAjJ9I6rHD03SkQmRL4dNkOoe6yk= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.5 h1:S5HND0EDtlA+xp2E+mD11DlUTp2wD6uojwixye8ZB/k= @@ -1629,16 +1633,16 @@ github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9 github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513/go.mod h1:ccjEgNeqOO+bjPddnL4lUrNLzyCvGCxgBjJdhFX3wa8= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d h1:qLmSOOtB/Ogn79eIDkuujOu8M5Jd747V1H7Brk/nTvo= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d/go.mod h1:4WhGgCA0smBbBud5mK+jnDb2wwndMvoqaWBJ3OV/7Bw= -github.com/smartcontractkit/cre-sdk-go v0.7.0 h1:QmCc/a6kGCmzhm0k0WFJZKxjklDedtAfvrA+vTnLcW0= -github.com/smartcontractkit/cre-sdk-go v0.7.0/go.mod h1:qVhKhBLANrGWKav6aHqO2UM7IltiouOnUbxu8ZQlKVM= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81 h1:CfnjzJvn3iX93PzdGucyGJmgv/KDXv8DfKcLw/mix24= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81/go.mod h1:CQY8hCISjctPmt8ViDVgFm4vMGLs5fYI198QhkBS++Y= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e/go.mod h1:T4zH9R8R8lVWKfU7tUvYz2o2jMv1OpGCdpY2j2QZXzU= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7/go.mod h1:FX7/bVdoep147QQhsOPkYsPEXhGZjeYx6lBSaSXtZOA= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d h1:/0/80Ic6wpKH5F1nwDoRj9+70IxXunvCyNcCkA+9ik0= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d/go.mod h1:Acy3BTBxou83ooMESLO90s8PKSu7RvLCzwSTbxxfOK0= -github.com/smartcontractkit/mcms v0.25.0 h1:GTkG6jQ2CYoVQFKkRQnA42IvUrR4gObeHqwrQNRhmGM= -github.com/smartcontractkit/mcms v0.25.0/go.mod h1:7v5DNfWqIS81nISbuFBrlV1QHZfD+pFQzjsxqqhcK9o= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 h1:Vt13oeOTFZ8IMQQTuWi9MbvR5wl/a1v4BRIV0GyJj7Q= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4/go.mod h1:g8Ot7s0gVJrJWvH1qib2jC7u6Npos1gTlKpoFSbJVI8= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 h1:rN8PnOZj53L70zlm1aYz1k14lXNCt7NoV666TDfcTJA= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618/go.mod h1:iwy4yWFuK+1JeoIRTaSOA9pl+8Kf//26zezxEXrAQEQ= github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 h1:AWLLzOSCbSdBEYrAXZn0XKnTFXxr1BANaW2d5qTZbSM= @@ -2005,6 +2009,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= @@ -2020,8 +2025,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -2062,8 +2067,8 @@ 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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2123,8 +2128,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= 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= @@ -2152,8 +2157,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2245,8 +2250,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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= @@ -2260,8 +2265,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= -golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2277,8 +2282,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2349,8 +2354,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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 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= diff --git a/integration-tests/smoke/ccip/ccip_add_chain_test.go b/integration-tests/smoke/ccip/ccip_add_chain_test.go index c59c788ce47..594ade485d6 100644 --- a/integration-tests/smoke/ccip/ccip_add_chain_test.go +++ b/integration-tests/smoke/ccip/ccip_add_chain_test.go @@ -20,7 +20,7 @@ import ( "github.com/smartcontractkit/chainlink/deployment/common/proposalutils" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" commonchangeset "github.com/smartcontractkit/chainlink/deployment/common/changeset" diff --git a/integration-tests/smoke/ccip/ccip_fast_transfer_test.go b/integration-tests/smoke/ccip/ccip_fast_transfer_test.go index 1195364f887..56be8ea36f6 100644 --- a/integration-tests/smoke/ccip/ccip_fast_transfer_test.go +++ b/integration-tests/smoke/ccip/ccip_fast_transfer_test.go @@ -25,7 +25,7 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_0/rmn_contract" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_5_1/token_pool" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf_chain "github.com/smartcontractkit/chainlink-deployments-framework/chain" evmChain "github.com/smartcontractkit/chainlink-deployments-framework/chain/evm" "github.com/smartcontractkit/chainlink/deployment/ccip/shared/bindings" diff --git a/integration-tests/smoke/ccip/ccip_fees_test.go b/integration-tests/smoke/ccip/ccip_fees_test.go index 74ed6147507..ff5bed3a2ee 100644 --- a/integration-tests/smoke/ccip/ccip_fees_test.go +++ b/integration-tests/smoke/ccip/ccip_fees_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/require" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink-evm/gethwrappers/shared/generated/initial/burn_mint_erc677" chain_selectors "github.com/smartcontractkit/chain-selectors" diff --git a/integration-tests/smoke/ccip/ccip_messaging_test.go b/integration-tests/smoke/ccip/ccip_messaging_test.go index f65f942d657..895d0cbe07d 100644 --- a/integration-tests/smoke/ccip/ccip_messaging_test.go +++ b/integration-tests/smoke/ccip/ccip_messaging_test.go @@ -16,15 +16,17 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/exp/maps" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/message_hasher" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" solconfig "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/config" solccip "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/ccip" solcommon "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/common" "github.com/smartcontractkit/chainlink-common/pkg/config" "github.com/smartcontractkit/chainlink-common/pkg/utils/tests" "github.com/smartcontractkit/chainlink-deployments-framework/chain" + + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" + msg_hasher163 "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/message_hasher" + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" mt "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers/messagingtest" soltesthelpers "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers/solana" @@ -273,7 +275,7 @@ func Test_CCIPMessaging_MultiExecReports_EVM2Solana(t *testing.T) { solana.SystemProgramID, } - extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(message_hasher.ClientSVMExtraArgsV1{ + extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(msg_hasher163.ClientSVMExtraArgsV1{ AccountIsWritableBitmap: solccip.GenerateBitMapForIndexes([]int{0, 1}), Accounts: accounts, ComputeUnits: 80_000, @@ -413,7 +415,7 @@ func Test_CCIPMessaging_EVM2Solana(t *testing.T) { solana.SystemProgramID, } - extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(message_hasher.ClientSVMExtraArgsV1{ + extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(msg_hasher163.ClientSVMExtraArgsV1{ AccountIsWritableBitmap: solccip.GenerateBitMapForIndexes([]int{0, 1}), Accounts: accounts, ComputeUnits: 80_000, @@ -465,7 +467,7 @@ func Test_CCIPMessaging_EVM2Solana(t *testing.T) { accountsFailure[1] = receiverTargetAccountPDA accountsFailure[2] = solana.SystemProgramID - extraArgsFailure, err := ccipevm.SerializeClientSVMExtraArgsV1(message_hasher.ClientSVMExtraArgsV1{ + extraArgsFailure, err := ccipevm.SerializeClientSVMExtraArgsV1(msg_hasher163.ClientSVMExtraArgsV1{ AccountIsWritableBitmap: solccip.GenerateBitMapForIndexes(writableIndexes), Accounts: accountsFailure, ComputeUnits: 80_000, @@ -495,7 +497,7 @@ func Test_CCIPMessaging_EVM2Solana(t *testing.T) { solana.SystemProgramID, } - extraArgsSuccess, err := ccipevm.SerializeClientSVMExtraArgsV1(message_hasher.ClientSVMExtraArgsV1{ + extraArgsSuccess, err := ccipevm.SerializeClientSVMExtraArgsV1(msg_hasher163.ClientSVMExtraArgsV1{ AccountIsWritableBitmap: solccip.GenerateBitMapForIndexes([]int{0, 1}), // Mark relevant accounts as writable Accounts: accountsSuccess, ComputeUnits: 80_000, @@ -536,7 +538,7 @@ func Test_CCIPMessaging_EVM2Solana(t *testing.T) { solana.SystemProgramID, } - extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(message_hasher.ClientSVMExtraArgsV1{ + extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(msg_hasher163.ClientSVMExtraArgsV1{ AccountIsWritableBitmap: solccip.GenerateBitMapForIndexes([]int{0, 1}), Accounts: accounts, ComputeUnits: 1_000_000, @@ -573,7 +575,7 @@ func Test_CCIPMessaging_EVM2Solana(t *testing.T) { solana.SystemProgramID, } - extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(message_hasher.ClientSVMExtraArgsV1{ + extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(msg_hasher163.ClientSVMExtraArgsV1{ AccountIsWritableBitmap: solccip.GenerateBitMapForIndexes([]int{0, 1}), Accounts: accounts, ComputeUnits: 1_000_000, diff --git a/integration-tests/smoke/ccip/ccip_reader_test.go b/integration-tests/smoke/ccip/ccip_reader_test.go index 158ab351042..3733d3b4a5b 100644 --- a/integration-tests/smoke/ccip/ccip_reader_test.go +++ b/integration-tests/smoke/ccip/ccip_reader_test.go @@ -49,10 +49,10 @@ import ( "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_0_0/rmn_proxy_contract" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/ccip_reader_tester" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/offramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/onramp" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/rmn_remote" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" "github.com/smartcontractkit/chainlink-evm/pkg/client" "github.com/smartcontractkit/chainlink-evm/pkg/heads/headstest" "github.com/smartcontractkit/chainlink-evm/pkg/logpoller" @@ -942,6 +942,7 @@ func TestCCIPReader_DiscoverContracts(t *testing.T) { []cciptypes.ChainSelector{chainS1, chainD}, []cciptypes.ChainSelector{chainS1, chainD}, ) + require.NoError(t, err) require.Equal(t, contractAddresses[consts.ContractNameOnRamp][chainS1], cciptypes.UnknownAddress(common.LeftPadBytes(onRampS1Addr.Bytes(), 32))) diff --git a/integration-tests/smoke/ccip/ccip_sui_messaging_test.go b/integration-tests/smoke/ccip/ccip_sui_messaging_test.go new file mode 100644 index 00000000000..b07f21846f9 --- /dev/null +++ b/integration-tests/smoke/ccip/ccip_sui_messaging_test.go @@ -0,0 +1,213 @@ +package ccip + +import ( + "encoding/hex" + "fmt" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + + chain_selectors "github.com/smartcontractkit/chain-selectors" + + "github.com/smartcontractkit/chainlink-deployments-framework/chain" + + suiutil "github.com/smartcontractkit/chainlink-sui/bindings/utils" + sui_deployment "github.com/smartcontractkit/chainlink-sui/deployment" + sui_cs "github.com/smartcontractkit/chainlink-sui/deployment/changesets" + sui_ops "github.com/smartcontractkit/chainlink-sui/deployment/ops" + ccipops "github.com/smartcontractkit/chainlink-sui/deployment/ops/ccip" + linkops "github.com/smartcontractkit/chainlink-sui/deployment/ops/link" + + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers/messagingtest" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" + commoncs "github.com/smartcontractkit/chainlink/deployment/common/changeset" + + testsetups "github.com/smartcontractkit/chainlink/integration-tests/testsetups/ccip" + + "github.com/smartcontractkit/chainlink/v2/core/logger" +) + +func Test_CCIP_Messaging_Sui2EVM(t *testing.T) { + e, _, _ := testsetups.NewIntegrationEnvironment( + t, + testhelpers.WithNumOfChains(2), + testhelpers.WithSuiChains(1), + ) + + evmChainSelectors := e.Env.BlockChains.ListChainSelectors(chain.WithFamily(chain_selectors.FamilyEVM)) + suiChainSelectors := e.Env.BlockChains.ListChainSelectors(chain.WithFamily(chain_selectors.FamilySui)) + + fmt.Println("EVM: ", evmChainSelectors[0]) + fmt.Println("Sui: ", suiChainSelectors[0]) + + sourceChain := suiChainSelectors[0] + destChain := evmChainSelectors[0] + + state, err := stateview.LoadOnchainState(e.Env) + require.NoError(t, err) + + suiState, err := sui_deployment.LoadOnchainStatesui(e.Env) + require.NoError(t, err) + + t.Log("Source chain (Sui): ", sourceChain, "Dest chain (EVM): ", destChain) + + err = testhelpers.AddLaneWithDefaultPricesAndFeeQuoterConfig(t, &e, state, sourceChain, destChain, false) + require.NoError(t, err) + + suiSenderAddr, err := e.Env.BlockChains.SuiChains()[sourceChain].Signer.GetAddress() + require.NoError(t, err) + + normalizedAddr, err := suiutil.ConvertStringToAddressBytes(suiSenderAddr) + require.NoError(t, err) + + suiSenderByte := normalizedAddr[:] + + // SUI FeeToken + // mint link token to use as feeToken + _, output, err := commoncs.ApplyChangesets(t, e.Env, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.MintLinkToken{}, sui_cs.MintLinkTokenConfig{ + ChainSelector: sourceChain, + TokenPackageId: suiState[sourceChain].LinkTokenAddress, + TreasuryCapId: suiState[sourceChain].LinkTokenTreasuryCapId, + Amount: 1000000000000, // 1000 Link with 1e9 + }), + }) + require.NoError(t, err) + + rawOutput := output[0].Reports[0] + outputMap, ok := rawOutput.Output.(sui_ops.OpTxResult[linkops.MintLinkTokenOutput]) + require.True(t, ok) + + var ( + nonce uint64 + sender = common.LeftPadBytes(suiSenderByte, 32) + out messagingtest.TestCaseOutput + setup = messagingtest.NewTestSetupWithDeployedEnv( + t, + e, + state, + sourceChain, + destChain, + sender, + false, // testRouter + ) + ) + + t.Run("Message to EVM", func(t *testing.T) { + require.NoError(t, err) + out = messagingtest.Run(t, + messagingtest.TestCase{ + TestSetup: setup, + Nonce: &nonce, + ValidationType: messagingtest.ValidationTypeExec, + Receiver: state.Chains[destChain].Receiver.Address().Bytes(), + ExtraArgs: nil, + Replayed: true, + FeeToken: outputMap.Objects.MintedLinkTokenObjectId, + ExpectedExecutionState: testhelpers.EXECUTION_STATE_SUCCESS, + }, + ) + }) + + fmt.Printf("out: %v\n", out) +} + +func Test_CCIP_Messaging_EVM2Sui(t *testing.T) { + lggr := logger.TestLogger(t) + e, _, _ := testsetups.NewIntegrationEnvironment( + t, + testhelpers.WithNumOfChains(2), + testhelpers.WithSuiChains(1), + ) + + evmChainSelectors := e.Env.BlockChains.ListChainSelectors(chain.WithFamily(chain_selectors.FamilyEVM)) + suiChainSelectors := e.Env.BlockChains.ListChainSelectors(chain.WithFamily(chain_selectors.FamilySui)) + + state, err := stateview.LoadOnchainState(e.Env) + require.NoError(t, err) + + sourceChain := evmChainSelectors[0] + destChain := suiChainSelectors[0] + + lggr.Debug("Source chain (EVM): ", sourceChain, "Dest chain (Sui): ", destChain) + + err = testhelpers.AddLaneWithDefaultPricesAndFeeQuoterConfig(t, &e, state, sourceChain, destChain, false) + require.NoError(t, err) + + var ( + nonce uint64 + sender = common.LeftPadBytes(e.Env.BlockChains.EVMChains()[sourceChain].DeployerKey.From.Bytes(), 32) + setup = messagingtest.NewTestSetupWithDeployedEnv( + t, + e, + state, + sourceChain, + destChain, + sender, + false, // test router + ) + ) + + // Deploy SUI Receiver + _, output, err := commoncs.ApplyChangesets(t, e.Env, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.DeployDummyReceiver{}, sui_cs.DeployDummyReceiverConfig{ + SuiChainSelector: destChain, + McmsOwner: "0x1", + }), + }) + require.NoError(t, err) + + rawOutput := output[0].Reports[0] + + outputMap, ok := rawOutput.Output.(sui_ops.OpTxResult[ccipops.DeployDummyReceiverObjects]) + require.True(t, ok) + + id := strings.TrimPrefix(outputMap.PackageId, "0x") + receiverByteDecoded, err := hex.DecodeString(id) + require.NoError(t, err) + + // register the receiver + _, _, err = commoncs.ApplyChangesets(t, e.Env, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.RegisterDummyReceiver{}, sui_cs.RegisterDummyReceiverConfig{ + SuiChainSelector: destChain, + CCIPObjectRefObjectId: state.SuiChains[destChain].CCIPObjectRef, + DummyReceiverPackageId: outputMap.PackageId, + }), + }) + require.NoError(t, err) + + receiverByte := receiverByteDecoded + + var clockObj [32]byte + copy(clockObj[:], hexutil.MustDecode( + "0x0000000000000000000000000000000000000000000000000000000000000006", + )) + + var stateObj [32]byte + copy(stateObj[:], hexutil.MustDecode( + outputMap.Objects.CCIPReceiverStateObjectId, + )) + + receiverObjectIDs := [][32]byte{clockObj, stateObj} + + t.Run("Message to Sui", func(t *testing.T) { + // ccipChainState := state.SuiChains[destChain] + message := []byte("Hello Sui, from EVM!") + messagingtest.Run(t, + messagingtest.TestCase{ + TestSetup: setup, + Nonce: &nonce, + ValidationType: messagingtest.ValidationTypeExec, + Receiver: receiverByte, + MsgData: message, + ExtraArgs: testhelpers.MakeSuiExtraArgs(1000000, true, receiverObjectIDs, [32]byte{}), + ExpectedExecutionState: testhelpers.EXECUTION_STATE_SUCCESS, + }, + ) + }) +} diff --git a/integration-tests/smoke/ccip/ccip_sui_token_transfer_test.go b/integration-tests/smoke/ccip/ccip_sui_token_transfer_test.go new file mode 100644 index 00000000000..f68f7d488cd --- /dev/null +++ b/integration-tests/smoke/ccip/ccip_sui_token_transfer_test.go @@ -0,0 +1,381 @@ +package ccip + +import ( + "encoding/hex" + "fmt" + "math/big" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/common/hexutil" + + chain_selectors "github.com/smartcontractkit/chain-selectors" + + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" + + "github.com/smartcontractkit/chainlink-deployments-framework/chain" + + sui_cs "github.com/smartcontractkit/chainlink-sui/deployment/changesets" + sui_ops "github.com/smartcontractkit/chainlink-sui/deployment/ops" + ccipops "github.com/smartcontractkit/chainlink-sui/deployment/ops/ccip" + linkops "github.com/smartcontractkit/chainlink-sui/deployment/ops/link" + + "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers" + "github.com/smartcontractkit/chainlink/deployment/ccip/shared/stateview" + commoncs "github.com/smartcontractkit/chainlink/deployment/common/changeset" + + testsetups "github.com/smartcontractkit/chainlink/integration-tests/testsetups/ccip" +) + +func Test_CCIPTokenTransfer_Sui2EVM(t *testing.T) { + ctx := testhelpers.Context(t) + e, _, _ := testsetups.NewIntegrationEnvironment( + t, + testhelpers.WithNumOfChains(2), + testhelpers.WithSuiChains(1), + ) + + evmChainSelectors := e.Env.BlockChains.ListChainSelectors(chain.WithFamily(chain_selectors.FamilyEVM)) + suiChainSelectors := e.Env.BlockChains.ListChainSelectors(chain.WithFamily(chain_selectors.FamilySui)) + + fmt.Println("EVM: ", evmChainSelectors[0]) + fmt.Println("Sui: ", suiChainSelectors[0]) + + sourceChain := suiChainSelectors[0] + destChain := evmChainSelectors[0] + + state, err := stateview.LoadOnchainState(e.Env) + require.NoError(t, err) + + t.Log("Source chain (Sui): ", sourceChain, "Dest chain (EVM): ", destChain) + + err = testhelpers.AddLaneWithDefaultPricesAndFeeQuoterConfig(t, &e, state, sourceChain, destChain, false) + require.NoError(t, err) + + _, err = e.Env.BlockChains.SuiChains()[sourceChain].Signer.GetAddress() + require.NoError(t, err) + + // SUI FeeToken + // mint link token to use as feeToken + _, feeTokenOutput, err := commoncs.ApplyChangesets(t, e.Env, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.MintLinkToken{}, sui_cs.MintLinkTokenConfig{ + ChainSelector: sourceChain, + TokenPackageId: state.SuiChains[sourceChain].LinkTokenAddress, + TreasuryCapId: state.SuiChains[sourceChain].LinkTokenTreasuryCapId, + Amount: 1000000000000, // 1000Link with 1e9, + }), + }) + require.NoError(t, err) + + rawOutput := feeTokenOutput[0].Reports[0] + outputMap, ok := rawOutput.Output.(sui_ops.OpTxResult[linkops.MintLinkTokenOutput]) + require.True(t, ok) + + // SUI TransferToken + // mint link token to use as Transfer Token + _, transferTokenOutput, err := commoncs.ApplyChangesets(t, e.Env, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.MintLinkToken{}, sui_cs.MintLinkTokenConfig{ + ChainSelector: sourceChain, + TokenPackageId: state.SuiChains[sourceChain].LinkTokenAddress, + TreasuryCapId: state.SuiChains[sourceChain].LinkTokenTreasuryCapId, + Amount: 1000000000, // 1Link with 1e9 + }), + }) + require.NoError(t, err) + + rawOutputTransferToken := transferTokenOutput[0].Reports[0] + outputMapTransferToken, ok := rawOutputTransferToken.Output.(sui_ops.OpTxResult[linkops.MintLinkTokenOutput]) + require.True(t, ok) + + // mint more token + _, transferTokenOutput1, err := commoncs.ApplyChangesets(t, e.Env, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.MintLinkToken{}, sui_cs.MintLinkTokenConfig{ + ChainSelector: sourceChain, + TokenPackageId: state.SuiChains[sourceChain].LinkTokenAddress, + TreasuryCapId: state.SuiChains[sourceChain].LinkTokenTreasuryCapId, + Amount: 2000000000, // 1Link with 1e9 + }), + }) + require.NoError(t, err) + + rawOutputTransferToken1 := transferTokenOutput1[0].Reports[0] + outputMapTransferToken1, ok := rawOutputTransferToken1.Output.(sui_ops.OpTxResult[linkops.MintLinkTokenOutput]) + require.True(t, ok) + + // Receiver Address + ccipReceiverAddress := state.Chains[destChain].Receiver.Address() + + // Token Pool setup on both SUI and EVM + updatedEnv, evmToken, _, err := testhelpers.HandleTokenAndPoolDeploymentForSUI(e.Env, sourceChain, destChain) // SourceChain = SUI, destChain = EVM + require.NoError(t, err) + tcs := []testhelpers.TestTransferRequest{ + { + Name: "Send token to EOA", + SourceChain: sourceChain, + DestChain: destChain, + Receiver: updatedEnv.BlockChains.EVMChains()[destChain].DeployerKey.From.Bytes(), // internally left padded to 32byte + ExpectedStatus: testhelpers.EXECUTION_STATE_SUCCESS, + FeeToken: outputMap.Objects.MintedLinkTokenObjectId, + SuiTokens: []testhelpers.SuiTokenAmount{ + { + Token: outputMapTransferToken.Objects.MintedLinkTokenObjectId, + Amount: 1000000000, // Send 1Link to EVM + }, + }, + ExpectedTokenBalances: []testhelpers.ExpectedBalance{ + { + Token: evmToken.Address().Bytes(), + Amount: big.NewInt(1e18), + }, + }, + }, + { + Name: "Send token to Receiver", + SourceChain: sourceChain, + DestChain: destChain, + Receiver: ccipReceiverAddress.Bytes(), // internally left padded to 32byte + ExpectedStatus: testhelpers.EXECUTION_STATE_SUCCESS, + SuiTokens: []testhelpers.SuiTokenAmount{ + { + Token: outputMapTransferToken1.Objects.MintedLinkTokenObjectId, + Amount: 2000000000, // Send 1Link to EVM + }, + }, + FeeToken: outputMap.Objects.MintedLinkTokenObjectId, + ExpectedTokenBalances: []testhelpers.ExpectedBalance{ + { + Token: evmToken.Address().Bytes(), + Amount: big.NewInt(2e18), + }, + }, + }, + } + + startBlocks, expectedSeqNums, expectedExecutionStates, expectedTokenBalances := testhelpers.TransferMultiple(ctx, t, updatedEnv, state, tcs) + + err = testhelpers.ConfirmMultipleCommits( + t, + updatedEnv, + state, + startBlocks, + false, + expectedSeqNums, + ) + require.NoError(t, err) + + execStates := testhelpers.ConfirmExecWithSeqNrsForAll( + t, + updatedEnv, + state, + testhelpers.SeqNumberRangeToSlice(expectedSeqNums), + startBlocks, + ) + require.Equal(t, expectedExecutionStates, execStates) + + testhelpers.WaitForTokenBalances(ctx, t, updatedEnv, expectedTokenBalances) +} + +func Test_CCIPTokenTransfer_EVM2SUI(t *testing.T) { + ctx := testhelpers.Context(t) + e, _, _ := testsetups.NewIntegrationEnvironment( + t, + testhelpers.WithNumOfChains(2), + testhelpers.WithSuiChains(1), + ) + + evmChainSelectors := e.Env.BlockChains.ListChainSelectors(chain.WithFamily(chain_selectors.FamilyEVM)) + suiChainSelectors := e.Env.BlockChains.ListChainSelectors(chain.WithFamily(chain_selectors.FamilySui)) + + fmt.Println("EVM: ", evmChainSelectors[0]) + fmt.Println("Sui: ", suiChainSelectors[0]) + + sourceChain := evmChainSelectors[0] + destChain := suiChainSelectors[0] + + t.Log("Source chain (Sui): ", sourceChain, "Dest chain (EVM): ", destChain) + + state, err := stateview.LoadOnchainState(e.Env) + require.NoError(t, err) + + deployerSourceChain := e.Env.BlockChains.EVMChains()[sourceChain].DeployerKey + var suiTokenAddr [32]byte + suiTokenHex := state.SuiChains[destChain].LinkTokenAddress + suiTokenHex = strings.TrimPrefix(suiTokenHex, "0x") + + suiTokenBytes, err := hex.DecodeString(suiTokenHex) + require.NoError(t, err) + + require.NoError(t, err) + + require.Len(t, suiTokenBytes, 32, "expected 32-byte sui address") + copy(suiTokenAddr[:], suiTokenBytes) + + err = testhelpers.AddLaneWithDefaultPricesAndFeeQuoterConfig(t, &e, state, sourceChain, destChain, false) + require.NoError(t, err) + + // get sui address in [32]bytes for extraArgs.TokenReceiver + var suiAddr [32]byte + suiAddrStr, err := e.Env.BlockChains.SuiChains()[destChain].Signer.GetAddress() + require.NoError(t, err) + + suiAddrStr = strings.TrimPrefix(suiAddrStr, "0x") + + addrBytes, err := hex.DecodeString(suiAddrStr) + require.NoError(t, err) + + require.Len(t, addrBytes, 32, "expected 32-byte sui address") + copy(suiAddr[:], addrBytes) + + // Token Pool setup on both SUI and EVM + updatedEnv, evmToken, _, err := testhelpers.HandleTokenAndPoolDeploymentForSUI(e.Env, destChain, sourceChain) // sourceChain=EVM, destChain=SUI + require.NoError(t, err) + + state, err = stateview.LoadOnchainState(e.Env) + require.NoError(t, err) + + // update env to include deployed contracts + e.Env = updatedEnv + + testhelpers.MintAndAllow( + t, + e.Env, + state, + map[uint64][]testhelpers.MintTokenInfo{ + sourceChain: { + testhelpers.NewMintTokenInfo(deployerSourceChain, evmToken), + }, + }, + ) + + // Deploy SUI Receiver + _, output, err := commoncs.ApplyChangesets(t, e.Env, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.DeployDummyReceiver{}, sui_cs.DeployDummyReceiverConfig{ + SuiChainSelector: destChain, + McmsOwner: "0x1", + }), + }) + require.NoError(t, err) + + rawOutput := output[0].Reports[0] + + outputMap, ok := rawOutput.Output.(sui_ops.OpTxResult[ccipops.DeployDummyReceiverObjects]) + require.True(t, ok) + + id := strings.TrimPrefix(outputMap.PackageId, "0x") + receiverByteDecoded, err := hex.DecodeString(id) + require.NoError(t, err) + + // register the receiver + _, _, err = commoncs.ApplyChangesets(t, e.Env, []commoncs.ConfiguredChangeSet{ + commoncs.Configure(sui_cs.RegisterDummyReceiver{}, sui_cs.RegisterDummyReceiverConfig{ + SuiChainSelector: destChain, + CCIPObjectRefObjectId: state.SuiChains[destChain].CCIPObjectRef, + DummyReceiverPackageId: outputMap.PackageId, + }), + }) + require.NoError(t, err) + + receiverByte := receiverByteDecoded + + var clockObj [32]byte + copy(clockObj[:], hexutil.MustDecode( + "0x0000000000000000000000000000000000000000000000000000000000000006", + )) + + var stateObj [32]byte + copy(stateObj[:], hexutil.MustDecode( + outputMap.Objects.CCIPReceiverStateObjectId, + )) + + receiverObjectIDs := [][32]byte{clockObj, stateObj} + + // TODO: might be needed for validation + // getPoolBySourceToken + // onRamp, err := onramp.NewOnRamp(state.Chains[sourceChain].OnRamp.Address(), e.Env.BlockChains.EVMChains()[sourceChain].Client) + // require.NoError(t, err) + + // poolAddr, err := onRamp.GetPoolBySourceToken(&bind.CallOpts{}, destChain, evmToken.Address()) + // require.NoError(t, err) + + // fmt.Println("POOL ADDR: ", poolAddr) + + // getRemoteToken + // tp, err := burn_from_mint_token_pool.NewBurnFromMintTokenPool(evmTokenPool.Address(), e.Env.BlockChains.EVMChains()[sourceChain].Client) + // require.NoError(t, err) + + // remoteToken, err := tp.GetRemoteToken(&bind.CallOpts{}, destChain) + // require.NoError(t, err) + + // remotePool, err := tp.GetRemotePools(&bind.CallOpts{}, destChain) + // require.NoError(t, err) + + // fmt.Println("REMOTETOKEN: ", remoteToken) + // fmt.Println("REMOTEPOOL: ", remotePool) + + // fmt.Println("TOKENBALANCE TEST: RECEIVER: ", suiAddrStr, " TOKENN: ", suiTokenHex) + + tcs := []testhelpers.TestTransferRequest{ + { + Name: "Send token to EOA", + SourceChain: sourceChain, + DestChain: destChain, + Receiver: receiverByte, // receiver contract pkgId + TokenReceiverATA: suiAddr[:], // tokenReceiver extracted from extraArgs (the address that actually gets the token) + ExpectedStatus: testhelpers.EXECUTION_STATE_SUCCESS, + Tokens: []router.ClientEVMTokenAmount{ + { + Token: evmToken.Address(), + Amount: big.NewInt(1e18), + }, + }, + ExtraArgs: testhelpers.MakeSuiExtraArgs(1000000, true, receiverObjectIDs, suiAddr), + ExpectedTokenBalances: []testhelpers.ExpectedBalance{ + { + Token: suiTokenBytes, + Amount: big.NewInt(1e9), + }, + }, + }, + { + Name: "Send token to an Object", + SourceChain: sourceChain, + DestChain: destChain, + Receiver: receiverByte, // receiver contract pkgId + TokenReceiverATA: stateObj[:], // tokenReceiver extracted from extraArgs (the object that actually gets the token) + ExpectedStatus: testhelpers.EXECUTION_STATE_SUCCESS, + Tokens: []router.ClientEVMTokenAmount{ + { + Token: evmToken.Address(), + Amount: big.NewInt(1e18), + }, + }, + ExtraArgs: testhelpers.MakeSuiExtraArgs(1000000, true, receiverObjectIDs, stateObj), // receiver is objectId this time + ExpectedTokenBalances: []testhelpers.ExpectedBalance{}, + }, + } + + startBlocks, expectedSeqNums, expectedExecutionStates, expectedTokenBalances := testhelpers.TransferMultiple(ctx, t, e.Env, state, tcs) + + err = testhelpers.ConfirmMultipleCommits( + t, + e.Env, + state, + startBlocks, + false, + expectedSeqNums, + ) + require.NoError(t, err) + + execStates := testhelpers.ConfirmExecWithSeqNrsForAll( + t, + e.Env, + state, + testhelpers.SeqNumberRangeToSlice(expectedSeqNums), + startBlocks, + ) + require.Equal(t, expectedExecutionStates, execStates) + + testhelpers.WaitForTokenBalances(ctx, t, e.Env, expectedTokenBalances) +} diff --git a/integration-tests/smoke/ccip/ccip_token_price_updates_test.go b/integration-tests/smoke/ccip/ccip_token_price_updates_test.go index 013bdf351de..996414e64c7 100644 --- a/integration-tests/smoke/ccip/ccip_token_price_updates_test.go +++ b/integration-tests/smoke/ccip/ccip_token_price_updates_test.go @@ -19,7 +19,7 @@ import ( "github.com/smartcontractkit/chainlink/deployment/ccip/changeset/testhelpers/cciptesthelpertypes" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/fee_quoter" + "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/fee_quoter" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" cldf_offchain "github.com/smartcontractkit/chainlink-deployments-framework/offchain" diff --git a/integration-tests/smoke/ccip/ccip_token_transfer_test.go b/integration-tests/smoke/ccip/ccip_token_transfer_test.go index 9123bdcc3f5..efc8b8316dc 100644 --- a/integration-tests/smoke/ccip/ccip_token_transfer_test.go +++ b/integration-tests/smoke/ccip/ccip_token_transfer_test.go @@ -12,12 +12,13 @@ import ( chain_selectors "github.com/smartcontractkit/chain-selectors" "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_2_0/router" - "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_0/message_hasher" solconfig "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/config" soltestutils "github.com/smartcontractkit/chainlink-ccip/chains/solana/contracts/tests/testutils" "github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings/v0_1_0/ccip_router" solstate "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/state" soltokens "github.com/smartcontractkit/chainlink-ccip/chains/solana/utils/tokens" + + msg_hasher163 "github.com/smartcontractkit/chainlink-ccip/chains/evm/gobindings/generated/v1_6_3/message_hasher" "github.com/smartcontractkit/chainlink-deployments-framework/chain" "github.com/smartcontractkit/chainlink-evm/pkg/utils" @@ -298,7 +299,7 @@ func TestTokenTransfer_EVM2Solana(t *testing.T) { require.NoError(t, ferr) t.Logf("Token receiver ATA: %s\n", tokenReceiverATA.String()) - extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(message_hasher.ClientSVMExtraArgsV1{ + extraArgs, err := ccipevm.SerializeClientSVMExtraArgsV1(msg_hasher163.ClientSVMExtraArgsV1{ TokenReceiver: tokenReceiver, }) require.NoError(t, err) diff --git a/plugins/plugins.public.yaml b/plugins/plugins.public.yaml index 4fa02144846..31581b90119 100644 --- a/plugins/plugins.public.yaml +++ b/plugins/plugins.public.yaml @@ -15,7 +15,7 @@ plugins: sui: - moduleURI: "github.com/smartcontractkit/chainlink-sui" - gitRef: "v0.0.0-20250905130432-a45f4cd002a5" + gitRef: "v0.0.0-20251010233212-b9ec3ced4b03" installPath: "./relayer/cmd/chainlink-sui" cosmos: diff --git a/system-tests/lib/go.mod b/system-tests/lib/go.mod index 12212197d8c..c82d6aa1308 100644 --- a/system-tests/lib/go.mod +++ b/system-tests/lib/go.mod @@ -11,9 +11,6 @@ replace github.com/smartcontractkit/chainlink/v2 => ../../ replace github.com/smartcontractkit/chainlink/deployment => ../../deployment -// Uncomment to work with local version of crib-sdk -// replace github.com/smartcontractkit/crib-sdk => ../../../crib-sdk - require ( dario.cat/mergo v1.0.2 github.com/Masterminds/semver/v3 v3.4.0 @@ -57,7 +54,7 @@ require ( github.com/zksync-sdk/zksync2-go v1.1.1-0.20250620124214-2c742ee399c6 go.uber.org/ratelimit v0.3.1 go.uber.org/zap v1.27.0 - golang.org/x/sync v0.16.0 + golang.org/x/sync v0.17.0 google.golang.org/grpc v1.74.2 google.golang.org/protobuf v1.36.7 gopkg.in/yaml.v3 v3.0.1 @@ -130,12 +127,13 @@ require ( github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect - github.com/block-vision/sui-go-sdk v1.0.9 // indirect + github.com/block-vision/sui-go-sdk v1.1.2 // indirect github.com/brianvoe/gofakeit/v7 v7.3.0 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/buger/goterm v1.0.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v28 v28.0.0 // indirect @@ -450,7 +448,7 @@ require ( github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf // indirect github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0 // indirect + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.6 // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.5 // indirect @@ -466,14 +464,15 @@ require ( github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect github.com/smartcontractkit/chainlink-protos/svr v1.1.0 // indirect github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207 // indirect - github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f // indirect + github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 // indirect + github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 // indirect github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect github.com/smartcontractkit/chainlink-ton v0.0.0-20251009173109-af31806bede5 // indirect github.com/smartcontractkit/chainlink-ton/deployment v0.0.0-20251009173109-af31806bede5 // indirect github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513 // indirect github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect - github.com/smartcontractkit/mcms v0.25.0 // indirect + github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect github.com/smartcontractkit/wsrpc v0.8.5-0.20250502134807-c57d3d995945 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect @@ -554,17 +553,17 @@ require ( go.uber.org/mock v0.5.2 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.11.0 // indirect - golang.org/x/crypto v0.40.0 // indirect + golang.org/x/crypto v0.42.0 // indirect golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc // indirect golang.org/x/lint v0.0.0-20241112194109-818c5a804067 // indirect - golang.org/x/mod v0.26.0 // indirect - golang.org/x/net v0.42.0 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/term v0.33.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/term v0.35.0 // indirect + golang.org/x/text v0.29.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools v0.36.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.16.0 // indirect diff --git a/system-tests/lib/go.sum b/system-tests/lib/go.sum index 4d59404c355..0e8f5e31ae8 100644 --- a/system-tests/lib/go.sum +++ b/system-tests/lib/go.sum @@ -248,8 +248,8 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= 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= -github.com/block-vision/sui-go-sdk v1.0.9 h1:vp8y+nSshTdTyhiDYy6Z/4aEsyTbveJ6n8ALg53GHWg= -github.com/block-vision/sui-go-sdk v1.0.9/go.mod h1:V9vmxB2pyYdy8eXV+x5lb/PcSVt3ytvF43m3NUlybx0= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/brianvoe/gofakeit/v7 v7.3.0 h1:TWStf7/lLpAjKw+bqwzeORo9jvrxToWEwp9b1J2vApQ= github.com/brianvoe/gofakeit/v7 v7.3.0/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA= @@ -273,6 +273,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -1571,8 +1573,8 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf h github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf/go.mod h1:tEjqontct1/5cKHm4q75nopZa1rwzaQZwd9U9wn0uZE= 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.1.1-solana.0.20251006204220-06f2720ee9a0 h1:/FUN8x1iF3jYR3LYiIwvtHtJ6O6fZrMxtkbvTgO2GZA= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a h1:3vOXsnGxG5KiRZmPSueaHGprc0VTB+Z211pblOvQsNU= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 h1:f8ak6g6P2KT4HjUbleU+Bh0gUJXMoGuoriMSyGxxD4M= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5/go.mod h1:Ve1xD71bl193YIZQEoJMmBqLGQJdNs29bwbuObwvbhQ= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 h1:Z4t2ZY+ZyGWxtcXvPr11y4o3CGqhg3frJB5jXkCSvWA= @@ -1621,8 +1623,10 @@ github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222- github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207/go.mod h1:HIpGvF6nKCdtZ30xhdkKWGM9+4Z4CVqJH8ZBL1FTEiY= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 h1:QgjF+S64bGDyaNcz11zDg7GC7FwNmYrsHN6jiJPRVkk= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524/go.mod h1:vcms/UPnfg7LZ2txinn59yJR6rXZ31XOk5++03LOeys= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f h1:7saUNbu+edzDgRPedNFfTsx5+5RL40r1r0pgISoh8Hs= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f/go.mod h1:CTR5agBB07sCpRltBkHmnkCZ+g8sXRafCJge/Hqr7aM= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 h1:7KMcSEptDirqBY/jzNhxFvWmDE2s5KQE6uMPQ1inad4= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854/go.mod h1:VlyZhVw+a93Sk8rVHOIH6tpiXrMzuWLZrjs1eTIExW8= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 h1:/BKZfcmGghI+LQdXdJXz63l0vYntSg6rd3bfU/5W55I= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854/go.mod h1:xMf64ftqTx9LuvHjMSxBMmgN41EOMQJ/OpGnvLf4NiM= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34 h1:W7/I1dpKXmuXSisuWs6tYGQCF+VtMdJX9iegzKjPYWQ= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34/go.mod h1:SoCjdzeZHP500QtKAjJ9I6rHD03SkQmRL4dNkOoe6yk= github.com/smartcontractkit/chainlink-testing-framework/framework/components/dockercompose v0.1.15 h1:usf6YCNmSO8R1/rU28wUfIdp7zXlqGGOAttXW5mgkXU= @@ -1643,8 +1647,8 @@ github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9 github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250908203554-5bd9d2fe9513/go.mod h1:ccjEgNeqOO+bjPddnL4lUrNLzyCvGCxgBjJdhFX3wa8= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d h1:qLmSOOtB/Ogn79eIDkuujOu8M5Jd747V1H7Brk/nTvo= github.com/smartcontractkit/chainlink-tron/relayer/gotron-sdk v0.0.5-0.20250422175525-b7575d96bd4d/go.mod h1:4WhGgCA0smBbBud5mK+jnDb2wwndMvoqaWBJ3OV/7Bw= -github.com/smartcontractkit/cre-sdk-go v0.7.0 h1:QmCc/a6kGCmzhm0k0WFJZKxjklDedtAfvrA+vTnLcW0= -github.com/smartcontractkit/cre-sdk-go v0.7.0/go.mod h1:qVhKhBLANrGWKav6aHqO2UM7IltiouOnUbxu8ZQlKVM= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81 h1:CfnjzJvn3iX93PzdGucyGJmgv/KDXv8DfKcLw/mix24= +github.com/smartcontractkit/cre-sdk-go v0.7.1-0.20250919133015-2df149f34a81/go.mod h1:CQY8hCISjctPmt8ViDVgFm4vMGLs5fYI198QhkBS++Y= github.com/smartcontractkit/crib-sdk v0.4.0 h1:in97WjiveVY1cz1LZOcLGVwnkRucfCipPeOpjkJ1QJM= github.com/smartcontractkit/crib-sdk v0.4.0/go.mod h1:L8/7tmnAwtgfaXGPgq4Ujrlkevd7rfqS7Zf3wgE84bk= github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e h1:Hv9Mww35LrufCdM9wtS9yVi/rEWGI1UnjHbcKKU0nVY= @@ -1653,8 +1657,8 @@ github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12i github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7/go.mod h1:FX7/bVdoep147QQhsOPkYsPEXhGZjeYx6lBSaSXtZOA= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d h1:/0/80Ic6wpKH5F1nwDoRj9+70IxXunvCyNcCkA+9ik0= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d/go.mod h1:Acy3BTBxou83ooMESLO90s8PKSu7RvLCzwSTbxxfOK0= -github.com/smartcontractkit/mcms v0.25.0 h1:GTkG6jQ2CYoVQFKkRQnA42IvUrR4gObeHqwrQNRhmGM= -github.com/smartcontractkit/mcms v0.25.0/go.mod h1:7v5DNfWqIS81nISbuFBrlV1QHZfD+pFQzjsxqqhcK9o= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 h1:Vt13oeOTFZ8IMQQTuWi9MbvR5wl/a1v4BRIV0GyJj7Q= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4/go.mod h1:g8Ot7s0gVJrJWvH1qib2jC7u6Npos1gTlKpoFSbJVI8= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 h1:rN8PnOZj53L70zlm1aYz1k14lXNCt7NoV666TDfcTJA= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618/go.mod h1:iwy4yWFuK+1JeoIRTaSOA9pl+8Kf//26zezxEXrAQEQ= github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 h1:AWLLzOSCbSdBEYrAXZn0XKnTFXxr1BANaW2d5qTZbSM= @@ -1985,6 +1989,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -2002,8 +2007,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -2046,8 +2051,8 @@ 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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2109,8 +2114,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= 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= @@ -2138,8 +2143,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2233,8 +2238,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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= @@ -2248,8 +2253,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= -golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2266,8 +2271,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2339,8 +2344,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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 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= diff --git a/system-tests/tests/go.mod b/system-tests/tests/go.mod index c98b16974d5..66fdcbca0ac 100644 --- a/system-tests/tests/go.mod +++ b/system-tests/tests/go.mod @@ -71,7 +71,7 @@ require ( github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 github.com/spf13/cobra v1.9.1 github.com/stretchr/testify v1.11.1 - golang.org/x/sync v0.16.0 + golang.org/x/sync v0.17.0 google.golang.org/protobuf v1.36.8 gopkg.in/yaml.v3 v3.0.1 ) @@ -154,12 +154,13 @@ require ( github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect - github.com/block-vision/sui-go-sdk v1.0.9 // indirect + github.com/block-vision/sui-go-sdk v1.1.2 // indirect github.com/brianvoe/gofakeit/v7 v7.3.0 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.6 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/buger/goterm v1.0.4 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v28 v28.0.0 // indirect @@ -542,7 +543,7 @@ require ( github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf // indirect github.com/smartcontractkit/chainlink-automation v0.8.1 // indirect - github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0 // indirect + github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 // indirect github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.6 // indirect @@ -558,7 +559,8 @@ require ( github.com/smartcontractkit/chainlink-protos/rmn/v1.6/go v0.0.0-20250131130834-15e0d4cde2a6 // indirect github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 // indirect github.com/smartcontractkit/chainlink-protos/svr v1.1.0 // indirect - github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f // indirect + github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 // indirect + github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 // indirect github.com/smartcontractkit/chainlink-testing-framework/framework/components/dockercompose v0.1.15 // indirect github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 // indirect github.com/smartcontractkit/chainlink-testing-framework/parrot v0.6.2 // indirect @@ -568,7 +570,7 @@ require ( github.com/smartcontractkit/crib-sdk v0.4.0 // indirect github.com/smartcontractkit/freeport v0.1.3-0.20250716200817-cb5dfd0e369e // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect - github.com/smartcontractkit/mcms v0.25.0 // indirect + github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 // indirect github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20250624150019-e49f7e125e6b // indirect @@ -680,17 +682,17 @@ require ( go.uber.org/zap v1.27.0 // indirect go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect golang.org/x/arch v0.11.0 // indirect - golang.org/x/crypto v0.40.0 // indirect + golang.org/x/crypto v0.42.0 // indirect golang.org/x/exp v0.0.0-20250711185948-6ae5c78190dc // indirect golang.org/x/lint v0.0.0-20241112194109-818c5a804067 // indirect - golang.org/x/mod v0.26.0 // indirect - golang.org/x/net v0.42.0 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/term v0.33.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/sys v0.36.0 // indirect + golang.org/x/term v0.35.0 // indirect + golang.org/x/text v0.29.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools v0.36.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.16.0 // indirect diff --git a/system-tests/tests/go.sum b/system-tests/tests/go.sum index 250cf75352e..d9cab79440b 100644 --- a/system-tests/tests/go.sum +++ b/system-tests/tests/go.sum @@ -284,8 +284,8 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= 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= -github.com/block-vision/sui-go-sdk v1.0.9 h1:vp8y+nSshTdTyhiDYy6Z/4aEsyTbveJ6n8ALg53GHWg= -github.com/block-vision/sui-go-sdk v1.0.9/go.mod h1:V9vmxB2pyYdy8eXV+x5lb/PcSVt3ytvF43m3NUlybx0= +github.com/block-vision/sui-go-sdk v1.1.2 h1:p9DPfb51mEcTmF0Lx9ORpH+Nh9Rzg4Sv3Pu5gsJZ2AA= +github.com/block-vision/sui-go-sdk v1.1.2/go.mod h1:KlibJnwEpWt8qhQkIPxc/2ZE4kwh0Md6LvMHmW5kemA= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/brianvoe/gofakeit/v7 v7.3.0 h1:TWStf7/lLpAjKw+bqwzeORo9jvrxToWEwp9b1J2vApQ= github.com/brianvoe/gofakeit/v7 v7.3.0/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA= @@ -313,6 +313,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6 github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -1774,8 +1776,8 @@ github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf h github.com/smartcontractkit/chainlink-aptos v0.0.0-20250916164650-970686360fbf/go.mod h1:tEjqontct1/5cKHm4q75nopZa1rwzaQZwd9U9wn0uZE= 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.1.1-solana.0.20251006204220-06f2720ee9a0 h1:/FUN8x1iF3jYR3LYiIwvtHtJ6O6fZrMxtkbvTgO2GZA= -github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251006204220-06f2720ee9a0/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a h1:3vOXsnGxG5KiRZmPSueaHGprc0VTB+Z211pblOvQsNU= +github.com/smartcontractkit/chainlink-ccip v0.1.1-solana.0.20251009203201-900123a5c46a/go.mod h1:W3d6TbZ4PNLGb8QOK8URc/tVWBhnAOwtAYsQ2iPgwtw= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5 h1:f8ak6g6P2KT4HjUbleU+Bh0gUJXMoGuoriMSyGxxD4M= github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20250912190424-fd2e35d7deb5/go.mod h1:Ve1xD71bl193YIZQEoJMmBqLGQJdNs29bwbuObwvbhQ= github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 h1:Z4t2ZY+ZyGWxtcXvPr11y4o3CGqhg3frJB5jXkCSvWA= @@ -1824,8 +1826,10 @@ github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222- github.com/smartcontractkit/chainlink-protos/workflows/go v0.0.0-20251008185222-47a7460f5207/go.mod h1:HIpGvF6nKCdtZ30xhdkKWGM9+4Z4CVqJH8ZBL1FTEiY= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524 h1:QgjF+S64bGDyaNcz11zDg7GC7FwNmYrsHN6jiJPRVkk= github.com/smartcontractkit/chainlink-solana v1.1.2-0.20251007010318-c9a7b2d44524/go.mod h1:vcms/UPnfg7LZ2txinn59yJR6rXZ31XOk5++03LOeys= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f h1:7saUNbu+edzDgRPedNFfTsx5+5RL40r1r0pgISoh8Hs= -github.com/smartcontractkit/chainlink-sui v0.0.0-20250916193659-4becc28a467f/go.mod h1:CTR5agBB07sCpRltBkHmnkCZ+g8sXRafCJge/Hqr7aM= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854 h1:7KMcSEptDirqBY/jzNhxFvWmDE2s5KQE6uMPQ1inad4= +github.com/smartcontractkit/chainlink-sui v0.0.0-20251012014843-5d44e7731854/go.mod h1:VlyZhVw+a93Sk8rVHOIH6tpiXrMzuWLZrjs1eTIExW8= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854 h1:/BKZfcmGghI+LQdXdJXz63l0vYntSg6rd3bfU/5W55I= +github.com/smartcontractkit/chainlink-sui/deployment v0.0.0-20251012014843-5d44e7731854/go.mod h1:xMf64ftqTx9LuvHjMSxBMmgN41EOMQJ/OpGnvLf4NiM= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34 h1:W7/I1dpKXmuXSisuWs6tYGQCF+VtMdJX9iegzKjPYWQ= github.com/smartcontractkit/chainlink-testing-framework/framework v0.10.34/go.mod h1:SoCjdzeZHP500QtKAjJ9I6rHD03SkQmRL4dNkOoe6yk= github.com/smartcontractkit/chainlink-testing-framework/framework/components/dockercompose v0.1.15 h1:usf6YCNmSO8R1/rU28wUfIdp7zXlqGGOAttXW5mgkXU= @@ -1862,8 +1866,8 @@ github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12i github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7/go.mod h1:FX7/bVdoep147QQhsOPkYsPEXhGZjeYx6lBSaSXtZOA= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d h1:/0/80Ic6wpKH5F1nwDoRj9+70IxXunvCyNcCkA+9ik0= github.com/smartcontractkit/libocr v0.0.0-20250905115425-2785a5cee79d/go.mod h1:Acy3BTBxou83ooMESLO90s8PKSu7RvLCzwSTbxxfOK0= -github.com/smartcontractkit/mcms v0.25.0 h1:GTkG6jQ2CYoVQFKkRQnA42IvUrR4gObeHqwrQNRhmGM= -github.com/smartcontractkit/mcms v0.25.0/go.mod h1:7v5DNfWqIS81nISbuFBrlV1QHZfD+pFQzjsxqqhcK9o= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4 h1:Vt13oeOTFZ8IMQQTuWi9MbvR5wl/a1v4BRIV0GyJj7Q= +github.com/smartcontractkit/mcms v0.26.1-0.20251009182503-22a4319a7bf4/go.mod h1:g8Ot7s0gVJrJWvH1qib2jC7u6Npos1gTlKpoFSbJVI8= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618 h1:rN8PnOZj53L70zlm1aYz1k14lXNCt7NoV666TDfcTJA= github.com/smartcontractkit/quarantine v0.0.0-20250909213106-ece491bef618/go.mod h1:iwy4yWFuK+1JeoIRTaSOA9pl+8Kf//26zezxEXrAQEQ= github.com/smartcontractkit/smdkg v0.0.0-20250916143931-2876ea233fd8 h1:AWLLzOSCbSdBEYrAXZn0XKnTFXxr1BANaW2d5qTZbSM= @@ -2274,6 +2278,7 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -2291,8 +2296,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= -golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -2335,8 +2340,8 @@ 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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2398,8 +2403,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= -golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= 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= @@ -2427,8 +2432,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2522,8 +2527,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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= @@ -2537,8 +2542,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg= -golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2555,8 +2560,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2628,8 +2633,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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 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=