diff --git a/.SPLICE-VERSION b/.SPLICE-VERSION index 60681dc4d..757bb1d29 100644 --- a/.SPLICE-VERSION +++ b/.SPLICE-VERSION @@ -1 +1 @@ -SPLICE_VERSION=0.9.4 +SPLICE_VERSION=0.10.0 diff --git a/compose/localnet/config/canton/app.conf b/compose/localnet/config/canton/app.conf index 3a8fcabc3..99e5a79bc 100644 --- a/compose/localnet/config/canton/app.conf +++ b/compose/localnet/config/canton/app.conf @@ -23,10 +23,16 @@ canton { features { enable-preview-commands = yes enable-testing-commands = yes + # Canton >=3.7 disables the participant repair service by default; keep it + # enabled for offline party replication / ACS export-import tooling. + enable-repair-commands = yes } parameters { manual-start = no non-standard-config = yes + # Canton >=3.7 disables remote private-key export by default; keep it + # enabled so ceremony tooling can sign via exported namespace keys. + enable-key-download = yes # Bumping because our topology state can get very large due to # a large number of participants. timeouts.processing.verify-active = 40.seconds diff --git a/compose/localnet/config/splice/app.conf b/compose/localnet/config/splice/app.conf index f67cd88d3..64dbfd829 100644 --- a/compose/localnet/config/splice/app.conf +++ b/compose/localnet/config/splice/app.conf @@ -20,17 +20,17 @@ _storage { _validator_backend { latest-packages-only = true - domain-migration-id = 0 storage = ${_storage} admin-api = { address = "0.0.0.0" port = 5003 } participant-client = { - admin-api = { + admin-api.client-config = { address = canton port = 5002 } + admin-api.auth-config.type = "none" ledger-api.client-config = { address = canton port = 5001 @@ -55,8 +55,11 @@ canton.features.enable-testing-commands = yes # SV _sv_participant_client = { admin-api { - address = canton - port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}00 + client-config { + address = canton + port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}00 + } + auth-config.type = "none" } ledger-api { client-config { @@ -112,7 +115,7 @@ canton { storage.config.properties.databaseName = validator-participant1 admin-api.port = ${SPLICE_VALIDATOR_ADMIN_API_PORT_PREFIX}01 participant-client { - admin-api.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}01 + admin-api.client-config.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}01 ledger-api = { client-config.port = ${CANTON_PARTICIPANT_LEDGER_API_PORT_PREFIX}01 @@ -145,7 +148,7 @@ canton { storage.config.properties.databaseName = validator-participant2 admin-api.port = ${SPLICE_VALIDATOR_ADMIN_API_PORT_PREFIX}02 participant-client { - admin-api.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}02 + admin-api.client-config.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}02 ledger-api = { client-config.port = ${CANTON_PARTICIPANT_LEDGER_API_PORT_PREFIX}02 @@ -178,7 +181,7 @@ canton { storage.config.properties.databaseName = validator-participant3 admin-api.port = ${SPLICE_VALIDATOR_ADMIN_API_PORT_PREFIX}03 participant-client { - admin-api.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}03 + admin-api.client-config.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}03 ledger-api = { client-config.port = ${CANTON_PARTICIPANT_LEDGER_API_PORT_PREFIX}03 @@ -211,7 +214,7 @@ canton { storage.config.properties.databaseName = validator-participant4 admin-api.port = ${SPLICE_VALIDATOR_ADMIN_API_PORT_PREFIX}04 participant-client { - admin-api.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}04 + admin-api.client-config.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}04 ledger-api = { client-config.port = ${CANTON_PARTICIPANT_LEDGER_API_PORT_PREFIX}04 @@ -244,7 +247,7 @@ canton { storage.config.properties.databaseName = validator-participant5 admin-api.port = ${SPLICE_VALIDATOR_ADMIN_API_PORT_PREFIX}05 participant-client { - admin-api.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}05 + admin-api.client-config.port = ${CANTON_PARTICIPANT_ADMIN_API_PORT_PREFIX}05 ledger-api = { client-config.port = ${CANTON_PARTICIPANT_LEDGER_API_PORT_PREFIX}05 @@ -272,7 +275,6 @@ canton { scan-apps.scan-app { is-first-sv = true - domain-migration-id = 0 storage = ${_storage} { config.properties { databaseName = scan @@ -303,7 +305,6 @@ canton { sv-apps.sv { latest-packages-only = true - domain-migration-id = 0 expected-validator-onboardings = [ { secret = ${PARTICIPANT1_VALIDATOR_ONBOARDING_SECRET} }, { secret = ${PARTICIPANT2_VALIDATOR_ONBOARDING_SECRET} }, diff --git a/eds/go.mod b/eds/go.mod index 7ef3157ff..3863c35b3 100644 --- a/eds/go.mod +++ b/eds/go.mod @@ -239,7 +239,7 @@ require ( github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260709145319-7782fb89eb16 // indirect github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9a9d3b335a // indirect github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8 // indirect - github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 // indirect + github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 // indirect github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260923220748-d8bac63fa0a7 // indirect github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260923220748-d8bac63fa0a7 // indirect github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20261013132128-58831cfe6302 // indirect diff --git a/eds/go.sum b/eds/go.sum index 78462cee5..cb681f537 100644 --- a/eds/go.sum +++ b/eds/go.sum @@ -742,8 +742,8 @@ github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9 github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9a9d3b335a/go.mod h1:fYWA2unezrM6+9LvEtHHMpdvwIZS7vY0gCk6iyWxSbU= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8 h1:3exBy63KSpPPrJok93HmDzECh/iMtNv0cWyPPH8u1aw= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8/go.mod h1:EhVSzBDITnheg03bg1TRdaoMDY5GkLjepmbuIq2+qPY= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 h1:vMQhRsScpLqy7pVFoyATGgcNuwcQh0QFT8f3rAcQ8ew= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 h1:crxCIgxznqE5T5EUIrAibVpf7/NeZIoc/ugbCXB9Vp4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0 h1:kZsB1b09QaV/SkFspT7Ao12knUEOufgunmOHaQ4pBwg= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0/go.mod h1:WLoTz0Hw3OF2lzrvysvUyluOjx7RNoOxcBxLIN/zU4c= github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260923220748-d8bac63fa0a7 h1:yowRLvwBwoP6NdIayZkhV+PANKICcDnJ1RzLpascXVM= diff --git a/go.mod b/go.mod index b9a46003c..07f373d31 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( github.com/smartcontractkit/chainlink-deployments-framework v0.127.0 github.com/smartcontractkit/chainlink-evm/gethwrappers v0.0.0-20260915165527-3701875605f4 github.com/smartcontractkit/chainlink-protos/job-distributor v0.20.0 - github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 + github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 github.com/smartcontractkit/chainlink-testing-framework/wasp v1.53.0 github.com/smartcontractkit/go-daml v0.0.0-20260702101944-3a593d4e8e19 github.com/smartcontractkit/mcms v0.56.1 diff --git a/go.sum b/go.sum index 19cb6ad60..f2eddf3b5 100644 --- a/go.sum +++ b/go.sum @@ -1258,8 +1258,8 @@ github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9 github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9a9d3b335a/go.mod h1:fYWA2unezrM6+9LvEtHHMpdvwIZS7vY0gCk6iyWxSbU= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8 h1:3exBy63KSpPPrJok93HmDzECh/iMtNv0cWyPPH8u1aw= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8/go.mod h1:EhVSzBDITnheg03bg1TRdaoMDY5GkLjepmbuIq2+qPY= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 h1:vMQhRsScpLqy7pVFoyATGgcNuwcQh0QFT8f3rAcQ8ew= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 h1:crxCIgxznqE5T5EUIrAibVpf7/NeZIoc/ugbCXB9Vp4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 h1:VIxK8u0Jd0Q/VuhmsNm6Bls6Tb31H/sA3A/rbc5hnhg= github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0/go.mod h1:lyAu+oMXdNUzEDScj2DXB2IueY+SDXPPfyl/kb63tMM= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0 h1:kZsB1b09QaV/SkFspT7Ao12knUEOufgunmOHaQ4pBwg= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 95965d353..eefa27c49 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -298,7 +298,7 @@ require ( github.com/smartcontractkit/chainlink-protos/op-catalog v0.1.0 // indirect github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9a9d3b335a // indirect github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8 // indirect - github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 // indirect + github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 // indirect github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0 // indirect github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260923220748-d8bac63fa0a7 // indirect github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260923220748-d8bac63fa0a7 // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index 7bde8fc19..e977cab69 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -797,8 +797,8 @@ github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9 github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9a9d3b335a/go.mod h1:fYWA2unezrM6+9LvEtHHMpdvwIZS7vY0gCk6iyWxSbU= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8 h1:3exBy63KSpPPrJok93HmDzECh/iMtNv0cWyPPH8u1aw= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8/go.mod h1:EhVSzBDITnheg03bg1TRdaoMDY5GkLjepmbuIq2+qPY= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 h1:vMQhRsScpLqy7pVFoyATGgcNuwcQh0QFT8f3rAcQ8ew= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 h1:crxCIgxznqE5T5EUIrAibVpf7/NeZIoc/ugbCXB9Vp4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0 h1:kZsB1b09QaV/SkFspT7Ao12knUEOufgunmOHaQ4pBwg= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0/go.mod h1:WLoTz0Hw3OF2lzrvysvUyluOjx7RNoOxcBxLIN/zU4c= github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260923220748-d8bac63fa0a7 h1:yowRLvwBwoP6NdIayZkhV+PANKICcDnJ1RzLpascXVM= diff --git a/party-ceremony/ceremony/ops/ledger/operations.go b/party-ceremony/ceremony/ops/ledger/operations.go index 236890c70..3a6131631 100644 --- a/party-ceremony/ceremony/ops/ledger/operations.go +++ b/party-ceremony/ceremony/ops/ledger/operations.go @@ -4,9 +4,10 @@ import ( "encoding/base64" "encoding/hex" "fmt" + "time" "github.com/Masterminds/semver/v3" - retry "github.com/avast/retry-go/v4" + "github.com/avast/retry-go/v4" apiv2 "github.com/digital-asset/dazl-client/v8/go/api/com/daml/ledger/api/v2" "github.com/digital-asset/dazl-client/v8/go/api/com/daml/ledger/api/v2/interactive" "google.golang.org/protobuf/encoding/protojson" @@ -148,6 +149,12 @@ var UploadDarsOp = operations.NewOperation( ) // VerifyPartyOp checks that the decentralized party is visible on the Ledger API. +// +// After the P2P mapping is confirmed in the topology state, the party may take +// a moment to become visible on the deploy runner's Ledger API (each +// participant materializes the party asynchronously). We therefore poll until +// the party shows up, using the same bounds as the P2P confirmation loop in +// the onboarding ceremony. var VerifyPartyOp = operations.NewOperation( "canton-ceremony/ledger/verify-party", semver.MustParse("1.0.0"), @@ -155,12 +162,23 @@ var VerifyPartyOp = operations.NewOperation( func(b operations.Bundle, deps ContractDeployDeps, in VerifyPartyInput) (VerifyPartyOutput, error) { ctx := b.GetContext() - exists, err := deps.LedgerClient.PartyExists(ctx, in.DecentralizedPartyID) + err := retry.Do( + func() error { + exists, qErr := deps.LedgerClient.PartyExists(ctx, in.DecentralizedPartyID) + if qErr != nil { + return retry.Unrecoverable(fmt.Errorf("checking party %q: %w", in.DecentralizedPartyID, qErr)) + } + if !exists { + return fmt.Errorf("party %q not yet visible on ledger", in.DecentralizedPartyID) + } + + return nil + }, + retry.Context(ctx), + retry.Attempts(30), + retry.Delay(500*time.Millisecond), + ) if err != nil { - return VerifyPartyOutput{}, fmt.Errorf("checking party %q: %w", in.DecentralizedPartyID, err) - } - - if !exists { return VerifyPartyOutput{}, fmt.Errorf("party %q not found on ledger; ensure onboarding is complete", in.DecentralizedPartyID) } diff --git a/party-ceremony/integration-tests/go.mod b/party-ceremony/integration-tests/go.mod index 598b64865..ee3c8746e 100644 --- a/party-ceremony/integration-tests/go.mod +++ b/party-ceremony/integration-tests/go.mod @@ -18,7 +18,7 @@ require ( github.com/smartcontractkit/chainlink-canton/authentication v1.2.0 github.com/smartcontractkit/chainlink-canton/party-ceremony v0.0.0-00010101000000-000000000000 github.com/smartcontractkit/chainlink-deployments-framework v0.127.0 - github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 + github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad github.com/stretchr/testify v1.12.1 github.com/testcontainers/testcontainers-go v0.44.0 diff --git a/party-ceremony/integration-tests/go.sum b/party-ceremony/integration-tests/go.sum index b4810f4d9..f2ff9d0b9 100644 --- a/party-ceremony/integration-tests/go.sum +++ b/party-ceremony/integration-tests/go.sum @@ -680,8 +680,8 @@ github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9 github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9a9d3b335a/go.mod h1:fYWA2unezrM6+9LvEtHHMpdvwIZS7vY0gCk6iyWxSbU= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8 h1:3exBy63KSpPPrJok93HmDzECh/iMtNv0cWyPPH8u1aw= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8/go.mod h1:EhVSzBDITnheg03bg1TRdaoMDY5GkLjepmbuIq2+qPY= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 h1:vMQhRsScpLqy7pVFoyATGgcNuwcQh0QFT8f3rAcQ8ew= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 h1:crxCIgxznqE5T5EUIrAibVpf7/NeZIoc/ugbCXB9Vp4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0 h1:kZsB1b09QaV/SkFspT7Ao12knUEOufgunmOHaQ4pBwg= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0/go.mod h1:WLoTz0Hw3OF2lzrvysvUyluOjx7RNoOxcBxLIN/zU4c= github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260923220748-d8bac63fa0a7 h1:yowRLvwBwoP6NdIayZkhV+PANKICcDnJ1RzLpascXVM= diff --git a/party-ceremony/internal/client/vault_signer.go b/party-ceremony/internal/client/vault_signer.go index 11aff0e85..1fccc3b8c 100644 --- a/party-ceremony/internal/client/vault_signer.go +++ b/party-ceremony/internal/client/vault_signer.go @@ -37,11 +37,13 @@ type VaultSigner struct { // vault client and extracting the Ed25519 seed from the returned proto. // // fingerprint identifies which key to export (see [FindNamespaceKeyFingerprint]). -// protocolVersion 34 matches Canton 3.4.x node serialisation. +// protocolVersion 36 is the minimum protocol version accepted by Canton >=3.7 +// (protocol versions <=35 are deleted there); crypto messages still serialise +// as crypto/v30, so response parsing is unaffected. func NewVaultSigner(ctx context.Context, vault cryptoadminv30.VaultServiceClient, fingerprint string) (*VaultSigner, error) { resp, err := vault.ExportKeyPair(ctx, &cryptoadminv30.ExportKeyPairRequest{ Fingerprint: fingerprint, - ProtocolVersion: 34, + ProtocolVersion: 36, }) if err != nil { return nil, fmt.Errorf("ExportKeyPair %q: %w", fingerprint, err) diff --git a/registry-kit/go.mod b/registry-kit/go.mod index a8bed8326..7cab86c81 100644 --- a/registry-kit/go.mod +++ b/registry-kit/go.mod @@ -223,7 +223,7 @@ require ( github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260709145319-7782fb89eb16 // indirect github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9a9d3b335a // indirect github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8 // indirect - github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 // indirect + github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 // indirect github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260923220748-d8bac63fa0a7 // indirect github.com/smartcontractkit/chainlink-ton/cciplib v0.1.1-0.20260923220748-d8bac63fa0a7 // indirect github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20261013132128-58831cfe6302 // indirect diff --git a/registry-kit/go.sum b/registry-kit/go.sum index 5168aa17e..626a37804 100644 --- a/registry-kit/go.sum +++ b/registry-kit/go.sum @@ -709,8 +709,8 @@ github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9 github.com/smartcontractkit/chainlink-stellar/bindings v0.0.0-20260921193419-5f9a9d3b335a/go.mod h1:fYWA2unezrM6+9LvEtHHMpdvwIZS7vY0gCk6iyWxSbU= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8 h1:3exBy63KSpPPrJok93HmDzECh/iMtNv0cWyPPH8u1aw= github.com/smartcontractkit/chainlink-sui v0.0.0-20260630144638-b69f16bdddd8/go.mod h1:EhVSzBDITnheg03bg1TRdaoMDY5GkLjepmbuIq2+qPY= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9 h1:vMQhRsScpLqy7pVFoyATGgcNuwcQh0QFT8f3rAcQ8ew= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.16.9/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1 h1:crxCIgxznqE5T5EUIrAibVpf7/NeZIoc/ugbCXB9Vp4= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.17.1/go.mod h1:0AyKX9qZxTh2yLe/wyluhMESv9LxEB5KZrqcC4jvr9c= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0 h1:kZsB1b09QaV/SkFspT7Ao12knUEOufgunmOHaQ4pBwg= github.com/smartcontractkit/chainlink-testing-framework/seth v1.52.0/go.mod h1:WLoTz0Hw3OF2lzrvysvUyluOjx7RNoOxcBxLIN/zU4c= github.com/smartcontractkit/chainlink-ton v1.0.5-0.20260923220748-d8bac63fa0a7 h1:yowRLvwBwoP6NdIayZkhV+PANKICcDnJ1RzLpascXVM=