diff --git a/contracts/near/.buildkite/pipeline.yml b/contracts/near/.buildkite/pipeline.yml index c1a1f649a..369174715 100644 --- a/contracts/near/.buildkite/pipeline.yml +++ b/contracts/near/.buildkite/pipeline.yml @@ -1,7 +1,9 @@ steps: - command: | source ~/.cargo/env - rustup default stable + rustup install 1.86.0 + rustup default 1.86.0 + rustup target add wasm32-unknown-unknown ci/test_verify_eth_headers.sh label: "verify eth headers" @@ -10,7 +12,9 @@ steps: - command: | source ~/.cargo/env - rustup default stable + rustup install 1.86.0 + rustup default 1.86.0 + rustup target add wasm32-unknown-unknown ci/test_verify_eth_proofs.sh label: "verify eth proofs" @@ -19,7 +23,9 @@ steps: - command: | source ~/.cargo/env - rustup default stable + rustup install 1.86.0 + rustup default 1.86.0 + rustup target add wasm32-unknown-unknown eth-client/test.sh label: "eth-client tests" @@ -28,7 +34,9 @@ steps: - command: | source ~/.cargo/env - rustup default stable + rustup install 1.86.0 + rustup default 1.86.0 + rustup target add wasm32-unknown-unknown eth-prover/test.sh label: "eth-prover tests" @@ -36,6 +44,10 @@ steps: - "queue=medium" - command: | + source ~/.cargo/env + rustup install 1.86.0 + rustup default 1.86.0 + rustup target add wasm32-unknown-unknown ./build_all.sh changed_files=$$(git status --porcelain --untracked-files=no | wc -l) if [ $$changed_files -gt 0 ]; then @@ -49,6 +61,9 @@ steps: - command: | source ~/.cargo/env + rustup install 1.86.0 + rustup default 1.86.0 + rustup target add wasm32-unknown-unknown cargo test label: "rust contracts test" diff --git a/contracts/near/Cargo.lock b/contracts/near/Cargo.lock index 0631bceb5..23f1674c9 100644 --- a/contracts/near/Cargo.lock +++ b/contracts/near/Cargo.lock @@ -1256,9 +1256,9 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", @@ -1362,9 +1362,9 @@ dependencies = [ "hex", "indicatif", "lazy_static", - "near-crypto", + "near-crypto 0.29.2", "near-plugins", - "near-primitives", + "near-primitives 0.29.2", "near-sdk", "near-workspaces", "rlp", @@ -1411,9 +1411,11 @@ dependencies = [ "lazy_static", "near-abi", "near-plugins", + "near-primitives-core 0.34.7", "near-sdk", "near-units", "near-workspaces", + "omni-utils", "rstest", "schemars", "serde", @@ -2288,6 +2290,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -2438,12 +2449,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - [[package]] name = "linux-raw-sys" version = "0.9.4" @@ -2613,6 +2618,16 @@ dependencies = [ "serde", ] +[[package]] +name = "near-account-id" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91f75ff8eee73815c247d0e17f3c0b705f0e993922a5548acd2ad377aeb67fca" +dependencies = [ + "borsh", + "serde", +] + [[package]] name = "near-chain-configs" version = "0.29.2" @@ -2623,11 +2638,11 @@ dependencies = [ "bytesize", "chrono", "derive_more 1.0.0", - "near-config-utils", - "near-crypto", - "near-parameters", - "near-primitives", - "near-time", + "near-config-utils 0.29.2", + "near-crypto 0.29.2", + "near-parameters 0.29.2", + "near-primitives 0.29.2", + "near-time 0.29.2", "num-rational", "serde", "serde_json", @@ -2649,6 +2664,18 @@ dependencies = [ "tracing", ] +[[package]] +name = "near-config-utils" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da2ba8f7129472fc147b867e904e4b8f398aa79f263f54dff6283c4860446ef8" +dependencies = [ + "anyhow", + "json_comments", + "thiserror 2.0.12", + "tracing", +] + [[package]] name = "near-crypto" version = "0.29.2" @@ -2662,10 +2689,10 @@ dependencies = [ "derive_more 1.0.0", "ed25519-dalek", "hex", - "near-account-id", - "near-config-utils", - "near-schema-checker-lib", - "near-stdx", + "near-account-id 1.1.1", + "near-config-utils 0.29.2", + "near-schema-checker-lib 0.29.2", + "near-stdx 0.29.2", "primitive-types 0.10.1", "rand 0.8.5", "secp256k1", @@ -2675,20 +2702,54 @@ dependencies = [ "thiserror 2.0.12", ] +[[package]] +name = "near-crypto" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c12a12485f8baafa85d5c413885b795bfa1d7d0ab7fd49b4f7fbe6cd270325b" +dependencies = [ + "blake2", + "borsh", + "bs58 0.4.0", + "curve25519-dalek", + "derive_more 2.0.1", + "ed25519-dalek", + "hex", + "near-account-id 2.5.0", + "near-config-utils 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", + "primitive-types 0.10.1", + "secp256k1", + "serde", + "serde_json", + "subtle", + "thiserror 2.0.12", +] + [[package]] name = "near-fmt" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0599477a38b5596c283212d4db8eb11c6cc33fb43d02002db9cd3f141ba735f1" dependencies = [ - "near-primitives-core", + "near-primitives-core 0.29.2", +] + +[[package]] +name = "near-fmt" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31b6d8fb4146cf0a7dcadf7816bf7b8efd5c081d6d2ca524bc80815b5f86812" +dependencies = [ + "near-primitives-core 0.34.7", ] [[package]] name = "near-gas" -version = "0.3.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180edcc7dc2fac41f93570d0c7b759c1b6d492f6ad093d749d644a40b4310a97" +checksum = "919d705b6dab5a7c6cc4b9a60e3025ed2f7cf3d4c3c32ad1a47264a4190e6409" dependencies = [ "borsh", "schemars", @@ -2705,9 +2766,9 @@ dependencies = [ "lazy_static", "log", "near-chain-configs", - "near-crypto", + "near-crypto 0.29.2", "near-jsonrpc-primitives", - "near-primitives", + "near-primitives 0.29.2", "reqwest", "serde", "serde_json", @@ -2722,9 +2783,9 @@ checksum = "6f003113d08e1f0ab9e6335efb1f7167662954804274653904ef57a9b5f8e687" dependencies = [ "arbitrary", "near-chain-configs", - "near-crypto", - "near-primitives", - "near-schema-checker-lib", + "near-crypto 0.29.2", + "near-primitives 0.29.2", + "near-schema-checker-lib 0.29.2", "serde", "serde_json", "thiserror 2.0.12", @@ -2739,9 +2800,28 @@ checksum = "fbfe696b28e2406001d4d5be14414a32c91f9c7202ae631367a6b22288ccad8d" dependencies = [ "borsh", "enum-map", - "near-account-id", - "near-primitives-core", - "near-schema-checker-lib", + "near-account-id 1.1.1", + "near-primitives-core 0.29.2", + "near-schema-checker-lib 0.29.2", + "num-rational", + "serde", + "serde_repr", + "serde_yaml", + "strum 0.24.1", + "thiserror 2.0.12", +] + +[[package]] +name = "near-parameters" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a561606a8beb563bf166c8a9ceb7f97058b376d17ea1a9b4b65ebc9bff29ac" +dependencies = [ + "borsh", + "enum-map", + "near-account-id 2.5.0", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", "num-rational", "serde", "serde_repr", @@ -2792,13 +2872,13 @@ dependencies = [ "enum-map", "hex", "itertools 0.12.1", - "near-crypto", - "near-fmt", - "near-parameters", - "near-primitives-core", - "near-schema-checker-lib", - "near-stdx", - "near-time", + "near-crypto 0.29.2", + "near-fmt 0.29.2", + "near-parameters 0.29.2", + "near-primitives-core 0.29.2", + "near-schema-checker-lib 0.29.2", + "near-stdx 0.29.2", + "near-time 0.29.2", "num-rational", "ordered-float", "primitive-types 0.10.1", @@ -2815,6 +2895,46 @@ dependencies = [ "zstd 0.13.3", ] +[[package]] +name = "near-primitives" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ccddcf4a73e19afd681faaa7e83fc4046ec71f4bbe58c58ff4ae4432f36e3aa" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "bitvec", + "borsh", + "bytes", + "bytesize", + "chrono", + "derive_more 2.0.1", + "easy-ext", + "enum-map", + "hex", + "itertools 0.14.0", + "near-crypto 0.34.7", + "near-fmt 0.34.7", + "near-parameters 0.34.7", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", + "near-time 0.34.7", + "num-rational", + "ordered-float", + "primitive-types 0.10.1", + "serde", + "serde_json", + "serde_with", + "sha3", + "smallvec", + "smart-default", + "strum 0.24.1", + "thiserror 2.0.12", + "tracing", + "zstd 0.13.3", +] + [[package]] name = "near-primitives-core" version = "0.29.2" @@ -2827,11 +2947,35 @@ dependencies = [ "bs58 0.4.0", "derive_more 1.0.0", "enum-map", - "near-account-id", - "near-schema-checker-lib", + "near-account-id 1.1.1", + "near-schema-checker-lib 0.29.2", + "num-rational", + "serde", + "serde_repr", + "sha2", + "thiserror 2.0.12", +] + +[[package]] +name = "near-primitives-core" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c93d8c5d6aecfec0aa9d60ab34408c68b13d5c1bfc0f3afeee8c99fa521cdb3" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "borsh", + "bs58 0.4.0", + "derive_more 2.0.1", + "enum-map", + "near-account-id 2.5.0", + "near-gas", + "near-schema-checker-lib 0.34.7", + "near-token", "num-rational", "serde", "serde_repr", + "serde_with", "sha2", "thiserror 2.0.12", ] @@ -2855,14 +2999,30 @@ version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00d54cd2888814fc2398316ec6d870754d7dd08704233bda770a75360afc8a7b" +[[package]] +name = "near-schema-checker-core" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f969a965d1ea04e1f085ee4d6c7273ae1064f578711087f3beaf8d400672cc7e" + [[package]] name = "near-schema-checker-lib" version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "311745157f685c26e05ca8532efbfcc09f63ab9fc7d94b824b2c75946ef37197" dependencies = [ - "near-schema-checker-core", - "near-schema-checker-macro", + "near-schema-checker-core 0.29.2", + "near-schema-checker-macro 0.29.2", +] + +[[package]] +name = "near-schema-checker-lib" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ae7538880de8a8d75e150dd0f4f685211ddd654ab12a339f40458df6d191dd" +dependencies = [ + "near-schema-checker-core 0.34.7", + "near-schema-checker-macro 0.34.7", ] [[package]] @@ -2871,21 +3031,27 @@ version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "515c63689e1e7940ac34629ad9d16ba8fd6bea58ad8ddbd4acf705d6149f3c77" +[[package]] +name = "near-schema-checker-macro" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9eb7d4dc413fe39ffa7fe5591ed4c24bc8139b9de8497689178d0101ae5167" + [[package]] name = "near-sdk" -version = "5.13.0" +version = "5.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad9bb847fb4458b00b64e28c4a7adac5d0658603d988c4b4d12eb18104767b80" +checksum = "0f3fa35758aba48e4f13528ba2f603e860dad03233d446e5c65ebd619296b607" dependencies = [ "base64 0.22.1", "borsh", "bs58 0.5.1", - "near-account-id", - "near-crypto", + "near-account-id 2.5.0", + "near-crypto 0.34.7", "near-gas", - "near-parameters", - "near-primitives", - "near-primitives-core", + "near-parameters 0.34.7", + "near-primitives 0.34.7", + "near-primitives-core 0.34.7", "near-sdk-macros", "near-sys", "near-token", @@ -2893,14 +3059,15 @@ dependencies = [ "once_cell", "serde", "serde_json", + "serde_with", "wee_alloc", ] [[package]] name = "near-sdk-macros" -version = "5.13.0" +version = "5.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0562cf707a41f2f71976f2baa48989369175a96e75b65a4297c815f49327bde" +checksum = "bb141510850a842d010d706c00bcbf31beba188c706415cc9392ffd62a127e09" dependencies = [ "Inflector", "darling 0.20.11", @@ -2919,11 +3086,17 @@ version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf9306662fe8ced267a85aa1d3fc9205f1968d88b9ddbb9a03c657da8457533" +[[package]] +name = "near-stdx" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c5dc0456309fcb256a0609d829971fd99f343e1a7f3b72f85364e64250a4555" + [[package]] name = "near-sys" -version = "0.2.3" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee6acd2229cde1f13daabca434022900ab371d2c19de6be6a5a0497dc942ef7" +checksum = "f4ea77bb86969ff09c83faa517b2209c4876928381ed31e29c06cae2de0a216b" [[package]] name = "near-time" @@ -2935,11 +3108,22 @@ dependencies = [ "time", ] +[[package]] +name = "near-time" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de9ae070cbd84d16b948fcc335ea82db35919bf856e349f333143ff2894eeafd" +dependencies = [ + "parking_lot", + "serde", + "time", +] + [[package]] name = "near-token" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3e60aa26a74dc514b1b6408fdd06cefe2eb0ff029020956c1c6517594048fd" +checksum = "34de6b54d82d0790b2a56b677e7b4ecb7f021a7e8559f8611065c890d56cfcda" dependencies = [ "borsh", "serde", @@ -2979,9 +3163,9 @@ dependencies = [ [[package]] name = "near-vm-runner" -version = "0.29.2" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca3f18ed6a87b334b93b53e4c2c98cf185fd1fde5a4b538980508fb7e51b147" +checksum = "3c9b4794d695cf13a1a117d76a3e87b6b660f8f7862f9df1544ba8bbd96634c9" dependencies = [ "blst", "borsh", @@ -2989,17 +3173,18 @@ dependencies = [ "ed25519-dalek", "enum-map", "lru", - "near-crypto", - "near-parameters", - "near-primitives-core", - "near-schema-checker-lib", - "near-stdx", + "near-crypto 0.34.7", + "near-parameters 0.34.7", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", "num-rational", + "parking_lot", + "rand 0.8.5", "rayon", "ripemd", - "rustix 0.38.44", + "rustix", "serde", - "serde_repr", "sha2", "sha3", "strum 0.24.1", @@ -3023,12 +3208,12 @@ dependencies = [ "json-patch", "libc", "near-abi-client", - "near-account-id", - "near-crypto", + "near-account-id 1.1.1", + "near-crypto 0.29.2", "near-gas", "near-jsonrpc-client", "near-jsonrpc-primitives", - "near-primitives", + "near-primitives 0.29.2", "near-sandbox-utils", "near-token", "rand 0.8.5", @@ -3194,6 +3379,27 @@ dependencies = [ "memchr", ] +[[package]] +name = "omni-utils" +version = "0.1.0" +source = "git+https://github.com/near-one/omni-utils?rev=077d09daf7a7b32ad237f0530033c7db804f2c67#077d09daf7a7b32ad237f0530033c7db804f2c67" +dependencies = [ + "near-sdk", + "omni-utils-derive", + "serde", + "serde_json", +] + +[[package]] +name = "omni-utils-derive" +version = "0.1.0" +source = "git+https://github.com/near-one/omni-utils?rev=077d09daf7a7b32ad237f0530033c7db804f2c67#077d09daf7a7b32ad237f0530033c7db804f2c67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "once_cell" version = "1.21.3" @@ -3915,19 +4121,6 @@ dependencies = [ "semver 1.0.26", ] -[[package]] -name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.9.0", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - [[package]] name = "rustix" version = "1.0.7" @@ -3937,7 +4130,7 @@ dependencies = [ "bitflags 2.9.0", "errno", "libc", - "linux-raw-sys 0.9.4", + "linux-raw-sys", "windows-sys 0.59.0", ] @@ -4209,6 +4402,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ + "indexmap 2.9.0", "itoa", "memchr", "ryu", @@ -4627,7 +4821,7 @@ dependencies = [ "fastrand", "getrandom 0.3.3", "once_cell", - "rustix 1.0.7", + "rustix", "windows-sys 0.59.0", ] @@ -5565,7 +5759,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" dependencies = [ "libc", - "rustix 1.0.7", + "rustix", ] [[package]] diff --git a/contracts/near/Cargo.toml b/contracts/near/Cargo.toml index b9ba64f0e..e822df996 100644 --- a/contracts/near/Cargo.toml +++ b/contracts/near/Cargo.toml @@ -3,6 +3,7 @@ authors = ["Near One "] repository = "https://github.com/Near-One/rainbow-bridge" [workspace] +resolver = "2" members = [ "eth2-client", "eth-prover", @@ -20,7 +21,7 @@ overflow-checks = true [workspace.dependencies] borsh = { version = "1.5.7", features = ["unstable__schema"] } -near-sdk = { version = "5.13.0", features = ["legacy", "unit-testing"] } +near-sdk = { version = "5.24.1", features = ["legacy", "unit-testing"] } rlp = "0.5.2" rlp-derive = "0.1.0" ethereum-types = "0.14.1" @@ -34,6 +35,7 @@ derive_more = "^0.99.2" hex = "0.4.2" bitvec = "1.0.0" near-plugins = { git = "https://github.com/aurora-is-near/near-plugins", tag = "v0.4.1" } +omni-utils = { git = "https://github.com/near-one/omni-utils", rev = "077d09daf7a7b32ad237f0530033c7db804f2c67" } [patch] [patch.crates-io] diff --git a/contracts/near/eth-prover/Cargo.toml b/contracts/near/eth-prover/Cargo.toml index f84e3ceb5..241ce418a 100644 --- a/contracts/near/eth-prover/Cargo.toml +++ b/contracts/near/eth-prover/Cargo.toml @@ -11,7 +11,7 @@ repository.workspace = true # docker image, descriptor of build environment image = "sourcescan/cargo-near:0.16.0-rust-1.86.0" # tag after colon above serves only descriptive purpose; image is identified by digest -image_digest = "sha256:b41cb89907f92b114da9e2be4e109bff30ab792c22ddcbd2a4cff8e340cb9acb" +image_digest = "sha256:3220302ebb7036c1942e772810f21edd9381edf9a339983da43487c77fbad488" # list of environment variables names, whose values, if set, will be used as external build parameters # in a reproducible manner # supported by `sourcescan/cargo-near:0.10.1-rust-1.82.0` image or later images diff --git a/contracts/near/eth-prover/src/tests.rs b/contracts/near/eth-prover/src/tests.rs index 829ac92b5..59dcae912 100644 --- a/contracts/near/eth-prover/src/tests.rs +++ b/contracts/near/eth-prover/src/tests.rs @@ -40,7 +40,7 @@ mod tests { .parse() .unwrap(), predecessor_account_id: "alice.near".parse().unwrap(), - input, + input: input.into(), block_index: 0, block_timestamp: 0, epoch_height: 0, @@ -350,8 +350,6 @@ mod tests { let actual_borsh_proof = "0200000053000000f851a06adc4881ae9f2b2bbbf70a60e5b05f0734c02d731e80ac1503231d851b24ffe680808080808080a0103165b38cd8ad3ffa4b1de70e7391ac2c321ffe265bc77f2316ba33288c37178080808080808080b0010000f901ad30b901a9f901a60182574ab9010000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000080000000000000000000000000002008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000010000000000000000000020000000000080000000000000000000000000000000000000000000000000000004000000f89df89b94d26114cd6ee289accf82350c8d8487fedb8a0c07f863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa00000000000000000000000002c7116a63ab91084a7a5d6fef2e4eda0c84487afa00000000000000000000000007d3cd5685188c6aa498697db91ca548a1249863ea0000000000000000000000000000000000000000000000001158e460913d00000"; let actual_borsh_skip_bridge_call = "01"; - use borsh::BorshSerialize; - let borsh_log_index = borsh::to_vec(&log_index).unwrap().encode_hex::(); let borsh_log_entry_data = borsh::to_vec(&log_entry).unwrap().encode_hex::(); let borsh_receipt_index = borsh::to_vec(&receipt_index) diff --git a/contracts/near/eth-prover/src/tests_storage_proof.rs b/contracts/near/eth-prover/src/tests_storage_proof.rs index ab2aa1db9..01b6f8b0c 100644 --- a/contracts/near/eth-prover/src/tests_storage_proof.rs +++ b/contracts/near/eth-prover/src/tests_storage_proof.rs @@ -90,7 +90,7 @@ mod tests_storage_proof { .parse() .unwrap(), predecessor_account_id: "carol.near".parse().unwrap(), - input, + input: input.into(), block_index: 0, block_timestamp: 0, epoch_height: 0, diff --git a/contracts/near/eth2-client/Cargo.toml b/contracts/near/eth2-client/Cargo.toml index 669a18108..a8373b9dd 100644 --- a/contracts/near/eth2-client/Cargo.toml +++ b/contracts/near/eth2-client/Cargo.toml @@ -11,7 +11,7 @@ repository.workspace = true # docker image, descriptor of build environment image = "sourcescan/cargo-near:0.16.0-rust-1.86.0" # tag after colon above serves only descriptive purpose; image is identified by digest -image_digest = "sha256:b41cb89907f92b114da9e2be4e109bff30ab792c22ddcbd2a4cff8e340cb9acb" +image_digest = "sha256:3220302ebb7036c1942e772810f21edd9381edf9a339983da43487c77fbad488" # list of environment variables names, whose values, if set, will be used as external build parameters # in a reproducible manner # supported by `sourcescan/cargo-near:0.10.1-rust-1.82.0` image or later images @@ -40,6 +40,7 @@ near-sdk.workspace = true borsh.workspace = true bitvec.workspace = true near-plugins.workspace = true +omni-utils.workspace = true near-abi = "0.4.3" schemars = "0.8.22" amcl = { git = "https://github.com/sigp/incubator-milagro-crypto-rust.git", default-features = false, features = [ @@ -54,6 +55,7 @@ serde_json = "1.0" hex = "0.4.0" near-workspaces = "0.18" near-units = "0.2.0" +near-primitives-core = "0.34" tokio = { version = "1", features = ["full"] } anyhow = "1.0" cargo-near-build = "0.4.3" diff --git a/contracts/near/eth2-client/src/lib.rs b/contracts/near/eth2-client/src/lib.rs index 15b286073..180490703 100644 --- a/contracts/near/eth2-client/src/lib.rs +++ b/contracts/near/eth2-client/src/lib.rs @@ -15,6 +15,7 @@ use near_sdk::collections::{LazyOption, LookupMap}; use near_sdk::{ env, near, require, AccountId, BorshStorageKey, PanicOnDefault, Promise, PublicKey, }; +use omni_utils::macros::trusted_relayer; use tree_hash::TreeHash; use amcl::bls381::bls381::utils::serialize_uncompressed_g1; @@ -45,6 +46,7 @@ pub enum Role { UnrestrictedSubmitLightClientUpdate, UnrestrictedSubmitExecutionHeader, DAO, + RelayerManager, } #[near(contract_state)] @@ -90,6 +92,10 @@ pub struct Eth2Client { trusted_blocks_submitter: Option, } +#[trusted_relayer( + manager_roles(Role::DAO, Role::RelayerManager), + config_roles(Role::DAO) +)] #[near] impl Eth2Client { #[init] @@ -131,7 +137,7 @@ impl Eth2Client { hashes_gc_threshold: args.hashes_gc_threshold, network: args.network, finalized_execution_blocks: LookupMap::new(StorageKey::FinalizedExecutionBlocks), - finalized_beacon_header: args.finalized_beacon_header.into(), + finalized_beacon_header: args.finalized_beacon_header, finalized_execution_header: LazyOption::new( StorageKey::FinalizedExecutionHeader, Some(&finalized_execution_header_info), @@ -227,7 +233,8 @@ impl Eth2Client { .map(|header| header.block_number) } - #[pause(except(roles(Role::UnrestrictedSubmitLightClientUpdate, Role::DAO)))] + #[trusted_relayer(bypass_roles(Role::DAO, Role::UnrestrictedSubmitLightClientUpdate))] + #[pause(except(roles(Role::DAO)))] pub fn submit_beacon_chain_light_client_update( &mut self, #[serializer(borsh)] update: LightClientUpdate, @@ -242,7 +249,8 @@ impl Eth2Client { } #[result_serializer(borsh)] - #[pause(except(roles(Role::UnrestrictedSubmitExecutionHeader, Role::DAO)))] + #[trusted_relayer(bypass_roles(Role::DAO, Role::UnrestrictedSubmitExecutionHeader))] + #[pause(except(roles(Role::DAO)))] pub fn submit_execution_header(&mut self, #[serializer(borsh)] block_header: BlockHeader) { if let Some(trusted_blocks_submitter) = &self.trusted_blocks_submitter { require!( @@ -286,8 +294,7 @@ impl Eth2Client { { let header_number_to_remove = (finalized_execution_header.block_number + diff_between_unfinalized_head_and_tail) - .checked_sub(self.hashes_gc_threshold) - .unwrap_or(0); + .saturating_sub(self.hashes_gc_threshold); require!( header_number_to_remove < finalized_execution_header.block_number, @@ -560,8 +567,8 @@ impl Eth2Client { Self::fp2_to_u8(&msg_fp2[0], &mut msg_fp2_0); Self::fp2_to_u8(&msg_fp2[1], &mut msg_fp2_1); - let mut msg_g2_0 = env::bls12381_map_fp2_to_g2(&msg_fp2_0); - let mut msg_g2_1 = env::bls12381_map_fp2_to_g2(&msg_fp2_1); + let mut msg_g2_0 = env::bls12381_map_fp2_to_g2(msg_fp2_0); + let mut msg_g2_1 = env::bls12381_map_fp2_to_g2(msg_fp2_1); let mut msg_g2_concat = vec![0u8; 1]; msg_g2_concat.append(&mut msg_g2_0); msg_g2_concat.push(0); diff --git a/contracts/near/eth2-client/src/tests/integration_tests.rs b/contracts/near/eth2-client/src/tests/integration_tests.rs index 2233befc5..b116e9ddc 100644 --- a/contracts/near/eth2-client/src/tests/integration_tests.rs +++ b/contracts/near/eth2-client/src/tests/integration_tests.rs @@ -98,6 +98,27 @@ mod integration_tests { .args_borsh(init_input) .transact() .await?; + + // Grant alice the bypass roles so she passes the trusted_relayer guard + // on submit methods. The contract is super admin (set during init), so + // it can grant roles. + let _ = contract + .call("acl_grant_role") + .args_json(serde_json::json!({ + "role": "UnrestrictedSubmitLightClientUpdate", + "account_id": alice.id().to_string(), + })) + .transact() + .await?; + let _ = contract + .call("acl_grant_role") + .args_json(serde_json::json!({ + "role": "UnrestrictedSubmitExecutionHeader", + "account_id": alice.id().to_string(), + })) + .transact() + .await?; + Ok((alice, contract)) } diff --git a/contracts/near/eth2-client/src/tests/unit_tests.rs b/contracts/near/eth2-client/src/tests/unit_tests.rs index 84b41974a..02bdab0e5 100644 --- a/contracts/near/eth2-client/src/tests/unit_tests.rs +++ b/contracts/near/eth2-client/src/tests/unit_tests.rs @@ -4,6 +4,7 @@ mod tests { use crate::Eth2Client; use eth_types::eth2::LightClientUpdate; use eth_types::BlockHeader; + use near_plugins::AccessControllable; use near_sdk::test_utils::VMContextBuilder; use near_sdk::{test_vm_config, testing_env, AccountId}; @@ -28,8 +29,8 @@ mod tests { let mut vm_config = test_vm_config(); vm_config.limit_config.max_number_logs = u64::MAX; vm_config.limit_config.max_total_log_length = u64::MAX; - vm_config.limit_config.max_total_prepaid_gas = u64::MAX; - vm_config.limit_config.max_gas_burnt = u64::MAX; + vm_config.limit_config.max_total_prepaid_gas = near_primitives_core::gas::Gas::MAX; + vm_config.limit_config.max_gas_burnt = near_primitives_core::gas::Gas::MAX; testing_env!(builder.build(), vm_config); }; } @@ -50,9 +51,24 @@ mod tests { current_account_id: eth2_client_account(), predecessor_account_id: eth2_client_account(), ); - let contract = Eth2Client::init(init_input); + let mut contract = Eth2Client::init(init_input); assert_eq!(contract.last_block_number(), headers[0][0].number); + // Grant the UnrestrictedSubmitLightClientUpdate role to accounts(0) (the common + // test submitter) so it passes the trusted_relayer guard injected by the + // #[trusted_relayer] macro. The super admin (eth2_client_account) was set during init(). + // Note: only accounts(0) gets the role. Other accounts (e.g. accounts(1)) intentionally + // do NOT get it, so tests like test_panic_on_submit_update_paused still work correctly. + use near_sdk::test_utils::accounts; + contract.acl_grant_role( + crate::Role::UnrestrictedSubmitLightClientUpdate.into(), + accounts(0), + ); + contract.acl_grant_role( + crate::Role::UnrestrictedSubmitExecutionHeader.into(), + accounts(0), + ); + TestContext { contract, headers: &headers, diff --git a/relayer/Cargo.lock b/relayer/Cargo.lock index 6751515f0..55f001859 100644 --- a/relayer/Cargo.lock +++ b/relayer/Cargo.lock @@ -2038,9 +2038,9 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", @@ -3435,6 +3435,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -3914,6 +3923,16 @@ dependencies = [ "serde", ] +[[package]] +name = "near-account-id" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702dbca982e748975658812c7be2ca53211f454137486f98f6cf768934e2cb29" +dependencies = [ + "borsh", + "serde", +] + [[package]] name = "near-chain-configs" version = "0.30.1" @@ -3924,11 +3943,11 @@ dependencies = [ "bytesize", "chrono", "derive_more 1.0.0", - "near-config-utils", - "near-crypto", - "near-parameters", - "near-primitives", - "near-time", + "near-config-utils 0.30.1", + "near-crypto 0.30.1", + "near-parameters 0.30.1", + "near-primitives 0.30.1", + "near-time 0.30.1", "num-rational", "serde", "serde_json", @@ -3950,6 +3969,18 @@ dependencies = [ "tracing", ] +[[package]] +name = "near-config-utils" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da2ba8f7129472fc147b867e904e4b8f398aa79f263f54dff6283c4860446ef8" +dependencies = [ + "anyhow", + "json_comments", + "thiserror 2.0.12", + "tracing", +] + [[package]] name = "near-crypto" version = "0.30.1" @@ -3963,10 +3994,10 @@ dependencies = [ "derive_more 1.0.0", "ed25519-dalek", "hex", - "near-account-id", - "near-config-utils", - "near-schema-checker-lib", - "near-stdx", + "near-account-id 1.1.1", + "near-config-utils 0.30.1", + "near-schema-checker-lib 0.30.1", + "near-stdx 0.30.1", "primitive-types 0.10.1", "rand 0.8.5", "secp256k1", @@ -3976,18 +4007,43 @@ dependencies = [ "thiserror 2.0.12", ] +[[package]] +name = "near-crypto" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c12a12485f8baafa85d5c413885b795bfa1d7d0ab7fd49b4f7fbe6cd270325b" +dependencies = [ + "blake2", + "borsh", + "bs58 0.4.0", + "curve25519-dalek", + "derive_more 2.0.1", + "ed25519-dalek", + "hex", + "near-account-id 2.6.0", + "near-config-utils 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", + "primitive-types 0.10.1", + "secp256k1", + "serde", + "serde_json", + "subtle", + "thiserror 2.0.12", +] + [[package]] name = "near-fetch" version = "0.8.0" source = "git+https://github.com/r-near/fetch?branch=main#2a6aa1b5bfebb24a9bdd86914eb0066117ac8f82" dependencies = [ "base64 0.22.1", - "near-account-id", - "near-crypto", + "near-account-id 1.1.1", + "near-crypto 0.30.1", "near-gas", "near-jsonrpc-client", "near-jsonrpc-primitives", - "near-primitives", + "near-primitives 0.30.1", "near-token", "serde", "serde_json", @@ -4002,14 +4058,23 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64c0e4d846b9c27b30e5f24e788fb8cc55c046f72e2048e2539dbcb04d9a71c4" dependencies = [ - "near-primitives-core", + "near-primitives-core 0.30.1", +] + +[[package]] +name = "near-fmt" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31b6d8fb4146cf0a7dcadf7816bf7b8efd5c081d6d2ca524bc80815b5f86812" +dependencies = [ + "near-primitives-core 0.34.7", ] [[package]] name = "near-gas" -version = "0.3.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180edcc7dc2fac41f93570d0c7b759c1b6d492f6ad093d749d644a40b4310a97" +checksum = "919d705b6dab5a7c6cc4b9a60e3025ed2f7cf3d4c3c32ad1a47264a4190e6409" dependencies = [ "borsh", "schemars", @@ -4026,9 +4091,9 @@ dependencies = [ "lazy_static", "log", "near-chain-configs", - "near-crypto", + "near-crypto 0.30.1", "near-jsonrpc-primitives", - "near-primitives", + "near-primitives 0.30.1", "reqwest 0.12.19", "serde", "serde_json", @@ -4043,9 +4108,9 @@ checksum = "63ac3e779b1ad979957f05e43c92a79fbe7e1315647ab4d530e2a9a66bc62f5e" dependencies = [ "arbitrary", "near-chain-configs", - "near-crypto", - "near-primitives", - "near-schema-checker-lib", + "near-crypto 0.30.1", + "near-primitives 0.30.1", + "near-schema-checker-lib 0.30.1", "serde", "serde_json", "thiserror 2.0.12", @@ -4060,9 +4125,28 @@ checksum = "4dbb139bec6b7088d6afab0a3662725e5ee82d0ad725b67c1d45447c3d45fe55" dependencies = [ "borsh", "enum-map", - "near-account-id", - "near-primitives-core", - "near-schema-checker-lib", + "near-account-id 1.1.1", + "near-primitives-core 0.30.1", + "near-schema-checker-lib 0.30.1", + "num-rational", + "serde", + "serde_repr", + "serde_yaml", + "strum 0.24.1", + "thiserror 2.0.12", +] + +[[package]] +name = "near-parameters" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a561606a8beb563bf166c8a9ceb7f97058b376d17ea1a9b4b65ebc9bff29ac" +dependencies = [ + "borsh", + "enum-map", + "near-account-id 2.6.0", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", "num-rational", "serde", "serde_repr", @@ -4090,13 +4174,13 @@ dependencies = [ "enum-map", "hex", "itertools 0.12.1", - "near-crypto", - "near-fmt", - "near-parameters", - "near-primitives-core", - "near-schema-checker-lib", - "near-stdx", - "near-time", + "near-crypto 0.30.1", + "near-fmt 0.30.1", + "near-parameters 0.30.1", + "near-primitives-core 0.30.1", + "near-schema-checker-lib 0.30.1", + "near-stdx 0.30.1", + "near-time 0.30.1", "num-rational", "ordered-float", "primitive-types 0.10.1", @@ -4113,6 +4197,46 @@ dependencies = [ "zstd 0.13.3", ] +[[package]] +name = "near-primitives" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ccddcf4a73e19afd681faaa7e83fc4046ec71f4bbe58c58ff4ae4432f36e3aa" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "bitvec", + "borsh", + "bytes", + "bytesize", + "chrono", + "derive_more 2.0.1", + "easy-ext", + "enum-map", + "hex", + "itertools 0.14.0", + "near-crypto 0.34.7", + "near-fmt 0.34.7", + "near-parameters 0.34.7", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", + "near-time 0.34.7", + "num-rational", + "ordered-float", + "primitive-types 0.10.1", + "serde", + "serde_json", + "serde_with", + "sha3", + "smallvec", + "smart-default", + "strum 0.24.1", + "thiserror 2.0.12", + "tracing", + "zstd 0.13.3", +] + [[package]] name = "near-primitives-core" version = "0.30.1" @@ -4125,11 +4249,35 @@ dependencies = [ "bs58 0.4.0", "derive_more 1.0.0", "enum-map", - "near-account-id", - "near-schema-checker-lib", + "near-account-id 1.1.1", + "near-schema-checker-lib 0.30.1", + "num-rational", + "serde", + "serde_repr", + "sha2 0.10.9", + "thiserror 2.0.12", +] + +[[package]] +name = "near-primitives-core" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c93d8c5d6aecfec0aa9d60ab34408c68b13d5c1bfc0f3afeee8c99fa521cdb3" +dependencies = [ + "arbitrary", + "base64 0.21.7", + "borsh", + "bs58 0.4.0", + "derive_more 2.0.1", + "enum-map", + "near-account-id 2.6.0", + "near-gas", + "near-schema-checker-lib 0.34.7", + "near-token", "num-rational", "serde", "serde_repr", + "serde_with", "sha2 0.10.9", "thiserror 2.0.12", ] @@ -4153,14 +4301,30 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed1fbfbc3c53b00aa893f8cb64abc5c12601edb8cecb878baf6f8f00e3184d3d" +[[package]] +name = "near-schema-checker-core" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f969a965d1ea04e1f085ee4d6c7273ae1064f578711087f3beaf8d400672cc7e" + [[package]] name = "near-schema-checker-lib" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f424ce08c8d715f529a8f8dcd246f574042f0ed0b393d0aaefdf3cc693d5a9f" dependencies = [ - "near-schema-checker-core", - "near-schema-checker-macro", + "near-schema-checker-core 0.30.1", + "near-schema-checker-macro 0.30.1", +] + +[[package]] +name = "near-schema-checker-lib" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ae7538880de8a8d75e150dd0f4f685211ddd654ab12a339f40458df6d191dd" +dependencies = [ + "near-schema-checker-core 0.34.7", + "near-schema-checker-macro 0.34.7", ] [[package]] @@ -4169,21 +4333,27 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d191936f902770069255b16c95d1fb8edd6f3c3817c9228933a20ec8466737a3" +[[package]] +name = "near-schema-checker-macro" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9eb7d4dc413fe39ffa7fe5591ed4c24bc8139b9de8497689178d0101ae5167" + [[package]] name = "near-sdk" -version = "5.14.0" +version = "5.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1477ca4eb6d4a70a0e5740c5d34c268eedacce936ca557d3450ed5bd873fd06" +checksum = "0f3fa35758aba48e4f13528ba2f603e860dad03233d446e5c65ebd619296b607" dependencies = [ "base64 0.22.1", "borsh", "bs58 0.5.1", - "near-account-id", - "near-crypto", + "near-account-id 2.6.0", + "near-crypto 0.34.7", "near-gas", - "near-parameters", - "near-primitives", - "near-primitives-core", + "near-parameters 0.34.7", + "near-primitives 0.34.7", + "near-primitives-core 0.34.7", "near-sdk-macros", "near-sys", "near-token", @@ -4191,14 +4361,15 @@ dependencies = [ "once_cell", "serde", "serde_json", + "serde_with", "wee_alloc", ] [[package]] name = "near-sdk-macros" -version = "5.14.0" +version = "5.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29fe6d31a827e421d0d3f5c38fe3cc73f9f2a2aae41d2601d37c22d7ec1aae" +checksum = "bb141510850a842d010d706c00bcbf31beba188c706415cc9392ffd62a127e09" dependencies = [ "Inflector", "darling 0.20.11", @@ -4217,11 +4388,17 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f292226fd8f4c7c21cf6b1da1c17e9b484ebc1b9aeb4251d69336d28b7917ace" +[[package]] +name = "near-stdx" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c5dc0456309fcb256a0609d829971fd99f343e1a7f3b72f85364e64250a4555" + [[package]] name = "near-sys" -version = "0.2.4" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d8e0ba9994e4d54cb4b301cd5fa9f2defcb69851148103512b9640a7e91572" +checksum = "f4ea77bb86969ff09c83faa517b2209c4876928381ed31e29c06cae2de0a216b" [[package]] name = "near-time" @@ -4233,11 +4410,22 @@ dependencies = [ "time", ] +[[package]] +name = "near-time" +version = "0.34.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de9ae070cbd84d16b948fcc335ea82db35919bf856e349f333143ff2894eeafd" +dependencies = [ + "parking_lot", + "serde", + "time", +] + [[package]] name = "near-token" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3e60aa26a74dc514b1b6408fdd06cefe2eb0ff029020956c1c6517594048fd" +checksum = "34de6b54d82d0790b2a56b677e7b4ecb7f021a7e8559f8611065c890d56cfcda" dependencies = [ "borsh", "serde", @@ -4245,9 +4433,9 @@ dependencies = [ [[package]] name = "near-vm-runner" -version = "0.30.1" +version = "0.34.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e44b5b6582676805ab61bc60e65e56eec1460c58a7c951dd662b7a5c677554" +checksum = "3c9b4794d695cf13a1a117d76a3e87b6b660f8f7862f9df1544ba8bbd96634c9" dependencies = [ "blst", "borsh", @@ -4255,18 +4443,18 @@ dependencies = [ "ed25519-dalek", "enum-map", "lru 0.12.5", - "near-crypto", - "near-parameters", - "near-primitives-core", - "near-schema-checker-lib", - "near-stdx", + "near-crypto 0.34.7", + "near-parameters 0.34.7", + "near-primitives-core 0.34.7", + "near-schema-checker-lib 0.34.7", + "near-stdx 0.34.7", "num-rational", + "parking_lot", "rand 0.8.5", "rayon", "ripemd", "rustix", "serde", - "serde_repr", "sha2 0.10.9", "sha3", "strum 0.24.1", @@ -4291,12 +4479,12 @@ dependencies = [ "json-patch", "libc", "near-abi-client", - "near-account-id", - "near-crypto", + "near-account-id 1.1.1", + "near-crypto 0.30.1", "near-gas", "near-jsonrpc-client", "near-jsonrpc-primitives", - "near-primitives", + "near-primitives 0.30.1", "near-sandbox-utils", "near-token", "rand 0.8.5", @@ -5258,10 +5446,10 @@ dependencies = [ "figment", "hex", "indicatif", - "near-crypto", + "near-crypto 0.30.1", "near-fetch", "near-gas", - "near-primitives", + "near-primitives 0.30.1", "near-workspaces", "sensitive_url", "serde", @@ -5875,6 +6063,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ + "indexmap 2.9.0", "itoa", "memchr", "ryu", diff --git a/relayer/tests/common/mod.rs b/relayer/tests/common/mod.rs index a29501eb8..c747340c3 100644 --- a/relayer/tests/common/mod.rs +++ b/relayer/tests/common/mod.rs @@ -17,6 +17,8 @@ pub struct TestFixture { pub worker: Worker, pub contract: Contract, pub near_client: ContractClient, + pub near_client_with_contract_signer: ContractClient, + relayer_account_id: near_workspaces::AccountId, } impl TestFixture { @@ -34,24 +36,39 @@ impl TestFixture { .await .wrap_err("Failed to create sandbox environment")?; + let (contract_id, contract_secret_key) = worker.generate_dev_account_credentials(); + // Deploy the contract let contract = worker - .dev_deploy(&wasm) - .await - .wrap_err("Failed to deploy contract")?; + .create_root_account_subaccount_and_deploy( + contract_id.clone(), + contract_secret_key.clone(), + &wasm, + ) + .await? + .into_result()?; + + let contract_signer = InMemorySigner::from_secret_key( + contract.id().clone(), + contract_secret_key + .to_string() + .parse() + .wrap_err("Failed to parse secret key")?, + ); let alice = worker .dev_create_account() .await .wrap_err("Failed to create test account")?; - let secret_key: SecretKey = alice + let alice_secret_key: SecretKey = alice .secret_key() .to_string() .parse() .wrap_err("Failed to parse secret key")?; - let signer = InMemorySigner::from_secret_key(alice.id().clone(), secret_key.clone()); + let alice_signer = + InMemorySigner::from_secret_key(alice.id().clone(), alice_secret_key.clone()); // Create the near-fetch client pointing to the sandbox RPC let near_fetch_client = near_fetch::Client::new(&worker.rpc_addr()); @@ -61,7 +78,15 @@ impl TestFixture { let near_config = NearConfig::default(); let near_client = ContractClient::new( contract.id().clone(), - signer, + alice_signer, + near_fetch_client.clone(), + relayer_config.clone(), + near_config.timeout_secs, + ); + + let near_client_with_contract_signer = ContractClient::new( + contract.id().clone(), + contract_signer, near_fetch_client, relayer_config, near_config.timeout_secs, @@ -71,13 +96,18 @@ impl TestFixture { worker, contract, near_client, + near_client_with_contract_signer, + relayer_account_id: alice.id().clone(), }) } /// Initialize the contract with Sepolia test data pub async fn init_with_sepolia(&self) -> Result { let init_input = load_sepolia_init_data()?; - self.near_client.init_contract(init_input.clone()).await?; + self.near_client_with_contract_signer + .init_contract(init_input.clone()) + .await?; + self.grant_relayer_role().await?; Ok(init_input) } @@ -86,9 +116,39 @@ impl TestFixture { let mut init_input = load_sepolia_init_data()?; init_input.validate_updates = false; init_input.verify_bls_signatures = false; - self.near_client.init_contract(init_input.clone()).await?; + self.near_client_with_contract_signer + .init_contract(init_input.clone()) + .await?; + self.grant_relayer_role().await?; Ok(init_input) } + + /// Grant the relayer's signer the bypass roles so it passes the + /// trusted_relayer guard on submit methods. + /// Must be called after init, since init resets ACL state via acl_init_super_admin. + async fn grant_relayer_role(&self) -> Result<()> { + self.contract + .call("acl_grant_role") + .args_json(serde_json::json!({ + "role": "UnrestrictedSubmitLightClientUpdate", + "account_id": self.relayer_account_id.to_string(), + })) + .transact() + .await? + .into_result() + .wrap_err("Failed to grant UnrestrictedSubmitLightClientUpdate role")?; + self.contract + .call("acl_grant_role") + .args_json(serde_json::json!({ + "role": "UnrestrictedSubmitExecutionHeader", + "account_id": self.relayer_account_id.to_string(), + })) + .transact() + .await? + .into_result() + .wrap_err("Failed to grant UnrestrictedSubmitExecutionHeader role")?; + Ok(()) + } } /// Simple helper to load Sepolia test data