diff --git a/go.mod b/go.mod index a86b2e9..e3846de 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,11 @@ go 1.25.7 require ( github.com/Masterminds/semver/v3 v3.4.0 - github.com/smartcontractkit/chainlink-deployments-framework v0.94.0 + github.com/aptos-labs/aptos-go-sdk v1.12.0 + github.com/gagliardetto/solana-go v1.13.0 + github.com/smartcontractkit/chain-selectors v1.0.97 + github.com/smartcontractkit/chainlink-deployments-framework v0.97.0 + github.com/smartcontractkit/mcms v0.40.1 github.com/stretchr/testify v1.11.1 gopkg.in/yaml.v3 v3.0.1 ) @@ -19,7 +23,6 @@ require ( github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect github.com/VictoriaMetrics/fastcache v1.13.0 // indirect github.com/XSAM/otelsql v0.37.0 // indirect - github.com/aptos-labs/aptos-go-sdk v1.12.0 // indirect github.com/avast/retry-go v3.0.0+incompatible // indirect github.com/avast/retry-go/v4 v4.7.0 // indirect github.com/awalterschulze/gographviz v2.0.3+incompatible // indirect @@ -82,7 +85,6 @@ require ( github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.13 // indirect github.com/gagliardetto/binary v0.8.0 // indirect - github.com/gagliardetto/solana-go v1.13.0 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-json-experiment/json v0.0.0-20250223041408-d3c622f1b874 // indirect @@ -159,7 +161,7 @@ require ( github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/go-archive v0.2.0 // indirect github.com/moby/patternmatcher v0.6.0 // indirect - github.com/moby/spdystream v0.5.0 // indirect + github.com/moby/spdystream v0.5.1 // indirect github.com/moby/sys/sequential v0.6.0 // indirect github.com/moby/sys/user v0.4.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect @@ -203,7 +205,7 @@ require ( github.com/shopspring/decimal v1.4.0 // indirect github.com/sigurn/crc16 v0.0.0-20211026045750-20ab5afb07e3 // indirect github.com/sirupsen/logrus v1.9.4 // indirect - github.com/smartcontractkit/chain-selectors v1.0.97 // indirect + github.com/smartcontractkit/ccip-owner-contracts v0.1.0 // indirect github.com/smartcontractkit/chainlink-aptos v0.0.0-20260306142855-8d629e752265 // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana v0.0.0-20260121163256-85accaf3d28d // indirect github.com/smartcontractkit/chainlink-ccip/chains/solana/gobindings v0.0.0-20250912190424-fd2e35d7deb5 // indirect @@ -214,14 +216,13 @@ require ( github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b // indirect github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b // indirect github.com/smartcontractkit/chainlink-sui v0.0.0-20260205175622-33e65031f9a9 // indirect - github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.13 // indirect + github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.18 // indirect github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5 // indirect github.com/smartcontractkit/chainlink-ton v0.0.0-20260219201907-054376f21418 // indirect github.com/smartcontractkit/chainlink-tron/relayer v0.0.11-0.20250815105909-75499abc4335 // indirect github.com/smartcontractkit/freeport v0.1.3-0.20250828155247-add56fa28aad // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/libocr v0.0.0-20250912173940-f3ab0246e23d // indirect - github.com/smartcontractkit/mcms v0.39.0 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect github.com/spf13/afero v1.15.0 // indirect github.com/spf13/cast v1.10.0 // indirect @@ -254,7 +255,7 @@ require ( go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect - go.opentelemetry.io/otel v1.41.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.36.0 // indirect @@ -266,11 +267,11 @@ require ( go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0 // indirect go.opentelemetry.io/otel/log v0.15.0 // indirect - go.opentelemetry.io/otel/metric v1.41.0 // indirect - go.opentelemetry.io/otel/sdk v1.41.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/sdk/log v0.15.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.41.0 // indirect - go.opentelemetry.io/otel/trace v1.41.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/ratelimit v0.3.1 // indirect @@ -282,7 +283,7 @@ require ( golang.org/x/net v0.50.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.41.0 // indirect + golang.org/x/sys v0.42.0 // indirect golang.org/x/term v0.40.0 // indirect golang.org/x/text v0.34.0 // indirect golang.org/x/time v0.14.0 // indirect diff --git a/go.sum b/go.sum index 2670262..65357c0 100644 --- a/go.sum +++ b/go.sum @@ -583,8 +583,8 @@ github.com/moby/go-archive v0.2.0 h1:zg5QDUM2mi0JIM9fdQZWC7U8+2ZfixfTYoHL7rWUcP8 github.com/moby/go-archive v0.2.0/go.mod h1:mNeivT14o8xU+5q1YnNrkQVpK+dnNe/K6fHqnTg4qPU= github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= -github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= -github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/spdystream v0.5.1 h1:9sNYeYZUcci9R6/w7KDaFWEWeV4LStVG78Mpyq/Zm/Y= +github.com/moby/spdystream v0.5.1/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= @@ -730,6 +730,8 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= +github.com/smartcontractkit/ccip-owner-contracts v0.1.0 h1:GiBDtlx7539o7AKlDV+9LsA7vTMPv+0n7ClhSFnZFAk= +github.com/smartcontractkit/ccip-owner-contracts v0.1.0/go.mod h1:NnT6w4Kj42OFFXhSx99LvJZWPpMjmo4+CpDEWfw61xY= github.com/smartcontractkit/chain-selectors v1.0.97 h1:ECOin+SkJv2MUrfqTUu28J0kub04Epds5NPMHERfGjo= github.com/smartcontractkit/chain-selectors v1.0.97/go.mod h1:qy7whtgG5g+7z0jt0nRyii9bLND9m15NZTzuQPkMZ5w= github.com/smartcontractkit/chainlink-aptos v0.0.0-20260306142855-8d629e752265 h1:Q/sYLdOefZUKc/Bxssq1mg8ptQE/AOot2WI+QcLoiVA= @@ -742,8 +744,8 @@ github.com/smartcontractkit/chainlink-common v0.10.1-0.20260217160002-b56cb5356c github.com/smartcontractkit/chainlink-common v0.10.1-0.20260217160002-b56cb5356cc7/go.mod h1:HXgSKzmZ/bhSx8nHU7hHW6dR+BHSXkdcpFv2T8qJcS8= github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9oqASnkS03RE1HQwYQQxrO4l46O5JSzxqLgg= github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= -github.com/smartcontractkit/chainlink-deployments-framework v0.94.0 h1:z+8phMpBzPXGzPhOOl+AtRJt9vj/y9pU6ZB6/xZ4qa8= -github.com/smartcontractkit/chainlink-deployments-framework v0.94.0/go.mod h1:J0ITsNrymaQzLYXHr1mbS7cS0nBD7lJI6bCLVa3j4Po= +github.com/smartcontractkit/chainlink-deployments-framework v0.97.0 h1:LC8SJ4WW3FBHTDhAtpEOqQnZk+s3Qm8+pnGEI3dnkvw= +github.com/smartcontractkit/chainlink-deployments-framework v0.97.0/go.mod h1:24dwRW1PYolrlxSth///ddG3auGqR+50xaJiXfUHhkg= github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/chainlink-protos/job-distributor v0.18.0 h1:q+VDPcxWrj5k9QizSYfUOSMnDH3Sd5HvbPguZOgfXTY= @@ -756,8 +758,8 @@ github.com/smartcontractkit/chainlink-protos/op-catalog v0.0.4 h1:AEnxv4HM3WD1Rb github.com/smartcontractkit/chainlink-protos/op-catalog v0.0.4/go.mod h1:PjZD54vr6rIKEKQj6HNA4hllvYI/QpT+Zefj3tqkFAs= github.com/smartcontractkit/chainlink-sui v0.0.0-20260205175622-33e65031f9a9 h1:KyPROV+v7P8VdiU7JhVuGLcDlEBsURSpQmSCgNBTY+s= github.com/smartcontractkit/chainlink-sui v0.0.0-20260205175622-33e65031f9a9/go.mod h1:KpEWZJMLwbdMHeHQz9rbkES0vRrx4nk6OQXyhlHb9/8= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.13 h1:quHuZ/2I7XZ8pdRw5UAwKW/idsPchHN7KnQ69YWzxS4= -github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.13/go.mod h1:BALK9cj8sk12e15UF6uDhifHgIApa+6N11TcQfInEro= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.18 h1:ZPYXn3VvaZhWOyVHFBsKC543EJbL2d4PthQbdL3WgHs= +github.com/smartcontractkit/chainlink-testing-framework/framework v0.15.18/go.mod h1:BALK9cj8sk12e15UF6uDhifHgIApa+6N11TcQfInEro= github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5 h1:RwZXxdIAOyjp6cwc9Quxgr38k8r7ACz+Lxh9o/A6oH0= github.com/smartcontractkit/chainlink-testing-framework/seth v1.51.5/go.mod h1:kHYJnZUqiPF7/xN5273prV+srrLJkS77GbBXHLKQpx0= github.com/smartcontractkit/chainlink-ton v0.0.0-20260219201907-054376f21418 h1:7f92q/Tz/Ns+gjChmWg5mEonrYutZV33k/1x+Xxsb4I= @@ -772,8 +774,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-20250912173940-f3ab0246e23d h1:LokA9PoCNb8mm8mDT52c3RECPMRsGz1eCQORq+J3n74= github.com/smartcontractkit/libocr v0.0.0-20250912173940-f3ab0246e23d/go.mod h1:Acy3BTBxou83ooMESLO90s8PKSu7RvLCzwSTbxxfOK0= -github.com/smartcontractkit/mcms v0.39.0 h1:ORIpFZnNj24FQUZCktnZCNMUpNmd4kz15/Vddrk/LXc= -github.com/smartcontractkit/mcms v0.39.0/go.mod h1:7YqJPR8w9GiO1L/JjjTrwlSwAZ7i3J7cgOcu88PqtvU= +github.com/smartcontractkit/mcms v0.40.1 h1:r9bU/2GfIf6mHHM4PklSBkfi2Lq4+EGILC81e4IqKz0= +github.com/smartcontractkit/mcms v0.40.1/go.mod h1:7YqJPR8w9GiO1L/JjjTrwlSwAZ7i3J7cgOcu88PqtvU= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= @@ -877,8 +879,8 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= -go.opentelemetry.io/otel v1.41.0 h1:YlEwVsGAlCvczDILpUXpIpPSL/VPugt7zHThEMLce1c= -go.opentelemetry.io/otel v1.41.0/go.mod h1:Yt4UwgEKeT05QbLwbyHXEwhnjxNO6D8L5PQP51/46dE= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2 h1:06ZeJRe5BnYXceSM9Vya83XXVaNGe3H1QqsvqRANQq8= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.12.2/go.mod h1:DvPtKE63knkDVP88qpatBj81JxN+w1bqfVbsbCbj1WY= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 h1:tPLwQlXbJ8NSOfZc4OkgU5h2A38M4c9kfHSVc4PFQGs= @@ -901,18 +903,18 @@ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0 h1:G8Xec/SgZQricwW go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.36.0/go.mod h1:PD57idA/AiFD5aqoxGxCvT/ILJPeHy3MjqU/NS7KogY= go.opentelemetry.io/otel/log v0.15.0 h1:0VqVnc3MgyYd7QqNVIldC3dsLFKgazR6P3P3+ypkyDY= go.opentelemetry.io/otel/log v0.15.0/go.mod h1:9c/G1zbyZfgu1HmQD7Qj84QMmwTp2QCQsZH1aeoWDE4= -go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ= -go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps= -go.opentelemetry.io/otel/sdk v1.41.0 h1:YPIEXKmiAwkGl3Gu1huk1aYWwtpRLeskpV+wPisxBp8= -go.opentelemetry.io/otel/sdk v1.41.0/go.mod h1:ahFdU0G5y8IxglBf0QBJXgSe7agzjE4GiTJ6HT9ud90= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= go.opentelemetry.io/otel/sdk/log v0.15.0 h1:WgMEHOUt5gjJE93yqfqJOkRflApNif84kxoHWS9VVHE= go.opentelemetry.io/otel/sdk/log v0.15.0/go.mod h1:qDC/FlKQCXfH5hokGsNg9aUBGMJQsrUyeOiW5u+dKBQ= go.opentelemetry.io/otel/sdk/log/logtest v0.13.0 h1:9yio6AFZ3QD9j9oqshV1Ibm9gPLlHNxurno5BreMtIA= go.opentelemetry.io/otel/sdk/log/logtest v0.13.0/go.mod h1:QOGiAJHl+fob8Nu85ifXfuQYmJTFAvcrxL6w5/tu168= -go.opentelemetry.io/otel/sdk/metric v1.41.0 h1:siZQIYBAUd1rlIWQT2uCxWJxcCO7q3TriaMlf08rXw8= -go.opentelemetry.io/otel/sdk/metric v1.41.0/go.mod h1:HNBuSvT7ROaGtGI50ArdRLUnvRTRGniSUZbxiWxSO8Y= -go.opentelemetry.io/otel/trace v1.41.0 h1:Vbk2co6bhj8L59ZJ6/xFTskY+tGAbOnCtQGVVa9TIN0= -go.opentelemetry.io/otel/trace v1.41.0/go.mod h1:U1NU4ULCoxeDKc09yCWdWe+3QoyweJcISEVa1RBzOis= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1076,8 +1078,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.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.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= -golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/telemetry v0.0.0-20260209163413-e7419c687ee4 h1:bTLqdHv7xrGlFbvf5/TXNxy/iUwwdkjhqQTJDjW7aj0= golang.org/x/telemetry v0.0.0-20260209163413-e7419c687ee4/go.mod h1:g5NllXBEermZrmR51cJDQxmJUHUOfRAaNyWBM+R+548= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/pkg/contract/contract.go b/pkg/contract/contract.go deleted file mode 100644 index bf680bb..0000000 --- a/pkg/contract/contract.go +++ /dev/null @@ -1,23 +0,0 @@ -package contract - -import cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" - -const ( - BypasserManyChainMultisig cldf.ContractType = "BypasserManyChainMultiSig" - CancellerManyChainMultisig cldf.ContractType = "CancellerManyChainMultiSig" - ProposerManyChainMultisig cldf.ContractType = "ProposerManyChainMultiSig" - ManyChainMultisig cldf.ContractType = "ManyChainMultiSig" - RBACTimelock cldf.ContractType = "RBACTimelock" - CallProxy cldf.ContractType = "CallProxy" - - // LinkToken is the burn/mint link token. It should be used everywhere for - // new deployments. Corresponds to - // https://github.com/smartcontractkit/chainlink/blob/develop/core/gethwrappers/shared/generated/link_token/link_token.go#L34 - LinkToken cldf.ContractType = "LinkToken" - // StaticLinkToken represents the (very old) non-burn/mint link token. - // It is not used in new deployments, but still exists on some chains - // and has a distinct ABI from the new LinkToken. - // Corresponds to the ABI - // https://github.com/smartcontractkit/chainlink/blob/develop/core/gethwrappers/generated/link_token_interface/link_token_interface.go#L34 - StaticLinkToken cldf.ContractType = "StaticLinkToken" -) diff --git a/pkg/family/aptos/state.go b/pkg/family/aptos/state.go new file mode 100644 index 0000000..2b15a62 --- /dev/null +++ b/pkg/family/aptos/state.go @@ -0,0 +1,48 @@ +package aptos + +import ( + "fmt" + + "github.com/Masterminds/semver/v3" + "github.com/aptos-labs/aptos-go-sdk" + + "github.com/smartcontractkit/chainlink-deployments-framework/datastore" + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" +) + +const ( + // todo: move to CLDF? + AptosMCMSType cldf.ContractType = "AptosManyChainMultisig" +) + +// LoadMCMSAddresses tries to load the mcms addresses for all given chain selectors from the environment. +// mcmsContractVersion is the semver that must match each candidate address ref's Version field. +// If no mcms address can be found for any given chain selector, an error will be returned. +func LoadMCMSAddresses(env cldf.Environment, chainSelectors []uint64, mcmsContractVersion semver.Version) (map[uint64]aptos.AccountAddress, error) { + result := make(map[uint64]aptos.AccountAddress) + for _, selector := range chainSelectors { + var mcmsAddress aptos.AccountAddress + found := false + refs := env.DataStore.Addresses().Filter(datastore.AddressRefByChainSelector(selector)) + for _, ref := range refs { + if ref.Type != datastore.ContractType(AptosMCMSType) || ref.Version == nil || !ref.Version.Equal(&mcmsContractVersion) { + continue + } + if err := mcmsAddress.ParseStringRelaxed(ref.Address); err != nil { + return nil, fmt.Errorf( + "failed to parse MCMS address for Aptos chain selector %d (type=%s, version=%s, address=%s): %w", + selector, ref.Type, ref.Version.String(), ref.Address, err, + ) + } + found = true + + break + } + if !found { + return nil, fmt.Errorf("no MCMS address found for Aptos chain selector: %d", selector) + } + result[selector] = mcmsAddress + } + + return result, nil +} diff --git a/pkg/family/aptos/state_test.go b/pkg/family/aptos/state_test.go new file mode 100644 index 0000000..c1e232c --- /dev/null +++ b/pkg/family/aptos/state_test.go @@ -0,0 +1,180 @@ +package aptos + +import ( + "context" + "fmt" + "testing" + + "github.com/Masterminds/semver/v3" + "github.com/stretchr/testify/require" + + aptoschain "github.com/aptos-labs/aptos-go-sdk" + chainsel "github.com/smartcontractkit/chain-selectors" + "github.com/smartcontractkit/chainlink-deployments-framework/chain" + "github.com/smartcontractkit/chainlink-deployments-framework/datastore" + cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + "github.com/smartcontractkit/chainlink-deployments-framework/offchain/ocr" + "github.com/smartcontractkit/chainlink-deployments-framework/pkg/logger" +) + +const testAptosMCMSAddr = "0x3" + +var version1_6_0 = *semver.MustParse("1.6.0") + +func TestLoadMCMSAddresses(t *testing.T) { + t.Parallel() + + chainSel := chainsel.APTOS_TESTNET.Selector + + t.Run("empty selectors", func(t *testing.T) { + t.Parallel() + + ab := cldf.NewMemoryAddressBook() + ds := datastore.NewMemoryDataStore().Seal() + env := testEnv(t, ab, ds) + + got, err := LoadMCMSAddresses(env, nil, version1_6_0) + + require.NoError(t, err) + require.Empty(t, got) + }) + + t.Run("success", func(t *testing.T) { + t.Parallel() + + ab := cldf.NewMemoryAddressBook() + ds := datastore.NewMemoryDataStore() + v := version1_6_0 + require.NoError(t, ds.Addresses().Add(datastore.AddressRef{ + Address: testAptosMCMSAddr, + ChainSelector: chainSel, + Type: datastore.ContractType(AptosMCMSType), + Version: &v, + })) + env := testEnv(t, ab, ds.Seal()) + + got, err := LoadMCMSAddresses(env, []uint64{chainSel}, version1_6_0) + + require.NoError(t, err) + require.Len(t, got, 1) + var want aptoschain.AccountAddress + require.NoError(t, want.ParseStringRelaxed(testAptosMCMSAddr)) + require.Equal(t, want, got[chainSel]) + }) + + t.Run("success with explicit contract version", func(t *testing.T) { + t.Parallel() + + ab := cldf.NewMemoryAddressBook() + ds := datastore.NewMemoryDataStore() + v := *semver.MustParse("1.5.0") + require.NoError(t, ds.Addresses().Add(datastore.AddressRef{ + Address: testAptosMCMSAddr, + ChainSelector: chainSel, + Type: datastore.ContractType(AptosMCMSType), + Version: &v, + })) + env := testEnv(t, ab, ds.Seal()) + + got, err := LoadMCMSAddresses(env, []uint64{chainSel}, v) + + require.NoError(t, err) + require.Len(t, got, 1) + var want aptoschain.AccountAddress + require.NoError(t, want.ParseStringRelaxed(testAptosMCMSAddr)) + require.Equal(t, want, got[chainSel]) + }) + + t.Run("no MCMS in datastore", func(t *testing.T) { + t.Parallel() + + ab := cldf.NewMemoryAddressBook() + ds := datastore.NewMemoryDataStore().Seal() + env := testEnv(t, ab, ds) + + _, err := LoadMCMSAddresses(env, []uint64{chainSel}, version1_6_0) + + require.ErrorContains(t, err, "no MCMS address found for Aptos chain selector") + }) + + t.Run("wrong version ignored", func(t *testing.T) { + t.Parallel() + + ab := cldf.NewMemoryAddressBook() + ds := datastore.NewMemoryDataStore() + wrong := semver.MustParse("1.5.0") + require.NoError(t, ds.Addresses().Add(datastore.AddressRef{ + Address: testAptosMCMSAddr, + ChainSelector: chainSel, + Type: datastore.ContractType(AptosMCMSType), + Version: wrong, + })) + env := testEnv(t, ab, ds.Seal()) + + _, err := LoadMCMSAddresses(env, []uint64{chainSel}, version1_6_0) + + require.ErrorContains(t, err, "no MCMS address found for Aptos chain selector") + }) + + t.Run("nil version ignored", func(t *testing.T) { + t.Parallel() + + ab := cldf.NewMemoryAddressBook() + ds := datastore.NewMemoryDataStore() + require.NoError(t, ds.Addresses().Add(datastore.AddressRef{ + Address: testAptosMCMSAddr, + ChainSelector: chainSel, + Type: datastore.ContractType(AptosMCMSType), + })) + env := testEnv(t, ab, ds.Seal()) + + var err error + require.NotPanics(t, func() { + _, err = LoadMCMSAddresses(env, []uint64{chainSel}, version1_6_0) + }) + + require.ErrorContains(t, err, "no MCMS address found for Aptos chain selector") + }) + + t.Run("invalid address", func(t *testing.T) { + t.Parallel() + + ab := cldf.NewMemoryAddressBook() + ds := datastore.NewMemoryDataStore() + v := version1_6_0 + require.NoError(t, ds.Addresses().Add(datastore.AddressRef{ + Address: "NotHex", + ChainSelector: chainSel, + Type: datastore.ContractType(AptosMCMSType), + Version: &v, + })) + env := testEnv(t, ab, ds.Seal()) + + _, err := LoadMCMSAddresses(env, []uint64{chainSel}, version1_6_0) + + wantPrefix := fmt.Sprintf( + "failed to parse MCMS address for Aptos chain selector %d (type=%s, version=%s, address=%s): ", + chainSel, AptosMCMSType, version1_6_0.String(), "NotHex", + ) + require.ErrorContains(t, err, wantPrefix) + var scratch aptoschain.AccountAddress + parseErr := scratch.ParseStringRelaxed("NotHex") + require.Error(t, parseErr) + require.ErrorContains(t, err, parseErr.Error()) + }) +} + +func testEnv(t *testing.T, ab cldf.AddressBook, ds datastore.DataStore) cldf.Environment { + t.Helper() + return *cldf.NewEnvironment( + "test", + logger.Nop(), + ab, + ds, + nil, + nil, + func() context.Context { return t.Context() }, + ocr.OCRSecrets{}, + chain.NewBlockChains(nil), + ) +} diff --git a/pkg/family/solana/contract.go b/pkg/family/solana/contract.go deleted file mode 100644 index 3ee0e72..0000000 --- a/pkg/family/solana/contract.go +++ /dev/null @@ -1,14 +0,0 @@ -package solana - -import cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" - -// Contract types for Solana MCMS / timelock entries in the datastore. -const ( - ManyChainMultisigProgram cldf.ContractType = "ManyChainMultiSigProgram" - RBACTimelockProgram cldf.ContractType = "RBACTimelockProgram" - AccessControllerProgram cldf.ContractType = "AccessControllerProgram" - ProposerAccessControllerAccount cldf.ContractType = "ProposerAccessControllerAccount" - ExecutorAccessControllerAccount cldf.ContractType = "ExecutorAccessControllerAccount" - CancellerAccessControllerAccount cldf.ContractType = "CancellerAccessControllerAccount" - BypasserAccessControllerAccount cldf.ContractType = "BypasserAccessControllerAccount" -) diff --git a/pkg/family/solana/state.go b/pkg/family/solana/state.go index 058fb6f..cca4e0e 100644 --- a/pkg/family/solana/state.go +++ b/pkg/family/solana/state.go @@ -6,9 +6,8 @@ import ( "github.com/gagliardetto/solana-go" "github.com/smartcontractkit/chainlink-deployments-framework/datastore" cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment" + "github.com/smartcontractkit/chainlink-deployments-framework/engine/cld/mcms/proposalutils" mcmssolanasdk "github.com/smartcontractkit/mcms/sdk/solana" - - "github.com/smartcontractkit/cld-changesets/pkg/contract" ) // GetState loads the MCMSWithTimelockState from the environment @@ -50,17 +49,17 @@ type PDASeed [32]byte func maybeLoadMCMSWithTimelockChainState(refs []datastore.AddressRef) (*MCMSWithTimelockState, error) { state := MCMSWithTimelockState{MCMSWithTimelockPrograms: &MCMSWithTimelockPrograms{}} - mcmProgram := datastore.ContractType(ManyChainMultisigProgram) - timelockProgram := datastore.ContractType(RBACTimelockProgram) - accessControllerProgram := datastore.ContractType(AccessControllerProgram) - proposerMCM := datastore.ContractType(contract.ProposerManyChainMultisig) - cancellerMCM := datastore.ContractType(contract.CancellerManyChainMultisig) - bypasserMCM := datastore.ContractType(contract.BypasserManyChainMultisig) - timelock := datastore.ContractType(contract.RBACTimelock) - proposerAccessControllerAccount := datastore.ContractType(ProposerAccessControllerAccount) - executorAccessControllerAccount := datastore.ContractType(ExecutorAccessControllerAccount) - cancellerAccessControllerAccount := datastore.ContractType(CancellerAccessControllerAccount) - bypasserAccessControllerAccount := datastore.ContractType(BypasserAccessControllerAccount) + mcmProgram := datastore.ContractType(proposalutils.ManyChainMultisigProgram) + timelockProgram := datastore.ContractType(proposalutils.RBACTimelockProgram) + accessControllerProgram := datastore.ContractType(proposalutils.AccessControllerProgram) + proposerMCM := datastore.ContractType(proposalutils.ProposerManyChainMultisig) + cancellerMCM := datastore.ContractType(proposalutils.CancellerManyChainMultisig) + bypasserMCM := datastore.ContractType(proposalutils.BypasserManyChainMultisig) + timelock := datastore.ContractType(proposalutils.RBACTimelock) + proposerAccessControllerAccount := datastore.ContractType(proposalutils.ProposerAccessControllerAccount) + executorAccessControllerAccount := datastore.ContractType(proposalutils.ExecutorAccessControllerAccount) + cancellerAccessControllerAccount := datastore.ContractType(proposalutils.CancellerAccessControllerAccount) + bypasserAccessControllerAccount := datastore.ContractType(proposalutils.BypasserAccessControllerAccount) for _, ref := range refs { address := ref.Address