diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict index d210eacf..c41f17da 100644 --- a/.vscode/spellright.dict +++ b/.vscode/spellright.dict @@ -1,4 +1,5 @@ abis Fastconfirmation +postconfirm testnet unstaking \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 8aab8c1d..7f92f31f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -48,10 +48,10 @@ name = "alloy" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-contract", "alloy-core", - "alloy-eips", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-genesis", "alloy-json-rpc", "alloy-network", @@ -60,7 +60,7 @@ dependencies = [ "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types", - "alloy-serde", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-signer", "alloy-signer-local", "alloy-transport", @@ -69,24 +69,47 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.66" +version = "0.1.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e42c54af787e3521229df1787d7b8300910dc6d9d04d378eb593b26388bd11" +checksum = "28e2652684758b0d9b389d248b209ed9fd9989ef489a550265fe4bb8454fe7eb" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "num_enum", "strum", ] +[[package]] +name = "alloy-consensus" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fbf458101ed6c389e9bb70a34ebc56039868ad10472540614816cdedc8f5265" +dependencies = [ + "alloy-eips 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-primitives 0.8.25", + "alloy-rlp", + "alloy-serde 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-trie", + "auto_impl", + "c-kzg", + "derive_more 2.0.1", + "either", + "k256", + "once_cell", + "rand 0.8.5", + "serde", + "serde_with", + "thiserror 2.0.12", +] + [[package]] name = "alloy-consensus" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-eips", - "alloy-primitives 0.8.23", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-primitives 0.8.25", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-trie", "auto_impl", "c-kzg", @@ -100,16 +123,30 @@ dependencies = [ "thiserror 2.0.12", ] +[[package]] +name = "alloy-consensus-any" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc982af629e511292310fe85b433427fd38cb3105147632b574abc997db44c91" +dependencies = [ + "alloy-consensus 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-primitives 0.8.25", + "alloy-rlp", + "alloy-serde 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", +] + [[package]] name = "alloy-consensus-any" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 0.8.23", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-primitives 0.8.25", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "serde", ] @@ -118,15 +155,15 @@ name = "alloy-contract" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-dyn-abi", "alloy-json-abi", "alloy-network", - "alloy-network-primitives", - "alloy-primitives 0.8.23", + "alloy-network-primitives 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-primitives 0.8.25", "alloy-provider", "alloy-pubsub", - "alloy-rpc-types-eth", + "alloy-rpc-types-eth 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-sol-types", "alloy-transport", "futures", @@ -136,25 +173,25 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca1380cc3c81b83d5234865779494970c83b5893b423c59cdd68c3cd1ed0b671" +checksum = "9d8bcce99ad10fe02640cfaec1c6bc809b837c783c1d52906aa5af66e2a196f6" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-rlp", "alloy-sol-types", ] [[package]] name = "alloy-dyn-abi" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7078bef2bc353c1d1a97b44981d0186198be320038fbfbb0b37d1dd822a555d3" +checksum = "eb8e762aefd39a397ff485bc86df673465c4ad3ec8819cc60833a8a3ba5cdc87" dependencies = [ "alloy-json-abi", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-sol-type-parser", "alloy-sol-types", "const-hex", @@ -170,7 +207,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "675264c957689f0fd75f5993a73123c2cc3b5c235a38f5b9037fe6c826bfb2c0" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-rlp", "crc", "serde", @@ -183,7 +220,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-rlp", "serde", ] @@ -194,12 +231,33 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b15b13d38b366d01e818fe8e710d4d702ef7499eacd44926a06171dd9585d0c" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-rlp", "serde", "thiserror 2.0.12", ] +[[package]] +name = "alloy-eips" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e86967eb559920e4b9102e4cb825fe30f2e9467988353ce4809f0d3f2c90cd4" +dependencies = [ + "alloy-eip2124", + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives 0.8.25", + "alloy-rlp", + "alloy-serde 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "auto_impl", + "c-kzg", + "derive_more 2.0.1", + "either", + "once_cell", + "serde", + "sha2", +] + [[package]] name = "alloy-eips" version = "0.12.6" @@ -208,9 +266,9 @@ dependencies = [ "alloy-eip2124", "alloy-eip2930", "alloy-eip7702", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "auto_impl", "c-kzg", "derive_more 2.0.1", @@ -225,33 +283,33 @@ name = "alloy-genesis" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-eips", - "alloy-primitives 0.8.23", - "alloy-serde", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-primitives 0.8.25", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-trie", "serde", ] [[package]] name = "alloy-hardforks" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1692158e9d100486fa6c2429edb42680298678ee74644b058c44f8484a278fea" +checksum = "473ee2ab7f5262b36e8fbc1b5327d5c9d488ab247e31ac739b929dbe2444ae79" dependencies = [ "alloy-chains", "alloy-eip2124", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "auto_impl", "dyn-clone", ] [[package]] name = "alloy-json-abi" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec80745c33797e8baf547a8cfeb850e60d837fe9b9e67b3f579c1fcd26f527e9" +checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-sol-type-parser", "serde", "serde_json", @@ -262,7 +320,7 @@ name = "alloy-json-rpc" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-sol-types", "serde", "serde_json", @@ -275,15 +333,15 @@ name = "alloy-network" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus", - "alloy-consensus-any", - "alloy-eips", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-consensus-any 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-json-rpc", - "alloy-network-primitives", - "alloy-primitives 0.8.23", + "alloy-network-primitives 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-primitives 0.8.25", "alloy-rpc-types-any", - "alloy-rpc-types-eth", - "alloy-serde", + "alloy-rpc-types-eth 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-signer", "alloy-sol-types", "async-trait", @@ -295,15 +353,28 @@ dependencies = [ "thiserror 2.0.12", ] +[[package]] +name = "alloy-network-primitives" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db973a7a23cbe96f2958e5687c51ce2d304b5c6d0dc5ccb3de8667ad8476f50b" +dependencies = [ + "alloy-consensus 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-primitives 0.8.25", + "alloy-serde 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "serde", +] + [[package]] name = "alloy-network-primitives" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 0.8.23", - "alloy-serde", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-primitives 0.8.25", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "serde", ] @@ -315,7 +386,7 @@ dependencies = [ "alloy-genesis", "alloy-hardforks", "alloy-network", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-signer", "alloy-signer-local", "k256", @@ -349,9 +420,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eacedba97e65cdc7ab592f2b22ef5d3ab8d60b2056bc3a6e6363577e8270ec6f" +checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" dependencies = [ "alloy-rlp", "bytes", @@ -360,7 +431,7 @@ dependencies = [ "derive_more 2.0.1", "foldhash", "hashbrown 0.15.2", - "indexmap 2.8.0", + "indexmap 2.9.0", "itoa", "k256", "keccak-asm", @@ -380,17 +451,17 @@ version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ "alloy-chains", - "alloy-consensus", - "alloy-eips", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-json-rpc", "alloy-network", - "alloy-network-primitives", + "alloy-network-primitives 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-node-bindings", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-pubsub", "alloy-rpc-client", "alloy-rpc-types-anvil", - "alloy-rpc-types-eth", + "alloy-rpc-types-eth 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-rpc-types-trace", "alloy-sol-types", "alloy-transport", @@ -421,7 +492,7 @@ version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ "alloy-json-rpc", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-transport", "bimap", "futures", @@ -461,7 +532,7 @@ version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ "alloy-json-rpc", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-pubsub", "alloy-transport", "alloy-transport-http", @@ -486,11 +557,11 @@ name = "alloy-rpc-types" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-rpc-types-engine", - "alloy-rpc-types-eth", + "alloy-rpc-types-eth 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-rpc-types-trace", - "alloy-serde", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "serde", ] @@ -499,9 +570,9 @@ name = "alloy-rpc-types-anvil" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-primitives 0.8.23", - "alloy-rpc-types-eth", - "alloy-serde", + "alloy-primitives 0.8.25", + "alloy-rpc-types-eth 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "serde", ] @@ -510,9 +581,9 @@ name = "alloy-rpc-types-any" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus-any", - "alloy-rpc-types-eth", - "alloy-serde", + "alloy-consensus-any 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-rpc-types-eth 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", ] [[package]] @@ -520,11 +591,11 @@ name = "alloy-rpc-types-engine" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus", - "alloy-eips", - "alloy-primitives 0.8.23", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-primitives 0.8.25", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "derive_more 2.0.1", "jsonwebtoken", "rand 0.8.5", @@ -532,18 +603,38 @@ dependencies = [ "strum", ] +[[package]] +name = "alloy-rpc-types-eth" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e13d71eac04513a71af4b3df580f52f2b4dcbff9d971cc9a52519acf55514cb" +dependencies = [ + "alloy-consensus 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-consensus-any 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-eips 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-network-primitives 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-primitives 0.8.25", + "alloy-rlp", + "alloy-serde 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-sol-types", + "itertools 0.14.0", + "serde", + "serde_json", + "thiserror 2.0.12", +] + [[package]] name = "alloy-rpc-types-eth" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus", - "alloy-consensus-any", - "alloy-eips", - "alloy-network-primitives", - "alloy-primitives 0.8.23", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-consensus-any 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-eips 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-network-primitives 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-primitives 0.8.25", "alloy-rlp", - "alloy-serde", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-sol-types", "itertools 0.14.0", "serde", @@ -556,20 +647,31 @@ name = "alloy-rpc-types-trace" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-primitives 0.8.23", - "alloy-rpc-types-eth", - "alloy-serde", + "alloy-primitives 0.8.25", + "alloy-rpc-types-eth 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-serde 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "serde", "serde_json", "thiserror 2.0.12", ] +[[package]] +name = "alloy-serde" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a1cd73fc054de6353c7f22ff9b846b0f0f145cd0112da07d4119e41e9959207" +dependencies = [ + "alloy-primitives 0.8.25", + "serde", + "serde_json", +] + [[package]] name = "alloy-serde" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "serde", "serde_json", ] @@ -579,7 +681,7 @@ name = "alloy-signer" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "async-trait", "auto_impl", "either", @@ -593,9 +695,9 @@ name = "alloy-signer-local" version = "0.12.6" source = "git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5#bc190c61f1bee74271a29ea6275ab674fcfe73d5" dependencies = [ - "alloy-consensus", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-network", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-signer", "async-trait", "elliptic-curve", @@ -607,9 +709,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3637022e781bc73a9e300689cd91105a0e6be00391dd4e2110a71cc7e9f20a94" +checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -621,15 +723,15 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9bd22d0bba90e40f40c625c33d39afb7d62b22192476a2ce1dcf8409dce880" +checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.8.0", + "indexmap 2.9.0", "proc-macro-error2", "proc-macro2", "quote", @@ -640,9 +742,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae4646e8123ec2fd10f9c22e361ffe4365c42811431829c2eabae528546bcc" +checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" dependencies = [ "alloy-json-abi", "const-hex", @@ -658,9 +760,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488a747fdcefeec5c1ed5aa9e08becd775106777fdeae2a35730729fc8a95910" +checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" dependencies = [ "serde", "winnow", @@ -668,12 +770,12 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767957235807b021126dca1598ac3ef477007eace07961607dc5f490550909c7" +checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" dependencies = [ "alloy-json-abi", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-sol-macro", "const-hex", "serde", @@ -737,7 +839,7 @@ version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d95a94854e420f07e962f7807485856cde359ab99ab6413883e15235ad996e8b" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-rlp", "arrayvec", "derive_more 1.0.0", @@ -1029,9 +1131,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "aws-config" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a84fe2c5e9965fba0fbc2001db252f1d57527d82a905cca85127df227bca748" +checksum = "8c39646d1a6b51240a1a23bb57ea4eebede7e16fbc237fdc876980233dcecb4f" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1071,9 +1173,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.12.6" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dabb68eb3a7aa08b46fddfd59a3d55c978243557a90ab804769f7e20e67d2b01" +checksum = "19b756939cb2f8dc900aa6dcd505e6e2428e9cae7ff7b028c49e3946efa70878" dependencies = [ "aws-lc-sys", "zeroize", @@ -1081,9 +1183,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.27.1" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77926887776171ced7d662120a75998e444d3750c951abfe07f90da130514b1f" +checksum = "b9f7720b74ed28ca77f90769a71fd8c637a0137f6fae4ae947e1050229cff57f" dependencies = [ "bindgen", "cc", @@ -1119,9 +1221,9 @@ dependencies = [ [[package]] name = "aws-sdk-kms" -version = "1.63.0" +version = "1.65.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a971bfe62ca4a228627a1b74a87a7a142979b20b168d2e2884f4893212ebb715" +checksum = "f5325c5e2badf4148e850017cc56cc205888c6e0b52c9e29d3501ec577005230" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1133,6 +1235,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", + "fastrand", "http 0.2.12", "once_cell", "regex-lite", @@ -1141,9 +1244,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.62.0" +version = "1.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d5330ad4e8a1ff49e9f26b738611caa72b105c41d41733801d1a36e8f9de936" +checksum = "02d4bdb0e5f80f0689e61c77ab678b2b9304af329616af38aef5b6b967b8e736" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1155,6 +1258,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", + "fastrand", "http 0.2.12", "once_cell", "regex-lite", @@ -1163,9 +1267,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.63.0" +version = "1.65.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7956b1a85d49082347a7d17daa2e32df191f3e23c03d47294b99f95413026a78" +checksum = "acbbb3ce8da257aedbccdcb1aadafbbb6a5fe9adf445db0e1ea897bdc7e22d08" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1177,6 +1281,7 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", + "fastrand", "http 0.2.12", "once_cell", "regex-lite", @@ -1185,9 +1290,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.63.0" +version = "1.65.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065c533fbe6f84962af33fcf02b0350b7c1f79285baab5924615d2be3b232855" +checksum = "96a78a8f50a1630db757b60f679c8226a8a70ee2ab5f5e6e51dc67f6c61c7cfd" dependencies = [ "aws-credential-types", "aws-runtime", @@ -1200,6 +1305,7 @@ dependencies = [ "aws-smithy-types", "aws-smithy-xml", "aws-types", + "fastrand", "http 0.2.12", "once_cell", "regex-lite", @@ -1263,9 +1369,9 @@ dependencies = [ [[package]] name = "aws-smithy-http-client" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0497ef5d53065b7cd6a35e9c1654bd1fefeae5c52900d91d1b188b0af0f29324" +checksum = "8aff1159006441d02e57204bf57a1b890ba68bedb6904ffd2873c1c4c11c546b" dependencies = [ "aws-smithy-async", "aws-smithy-runtime-api", @@ -1298,6 +1404,16 @@ dependencies = [ "aws-smithy-types", ] +[[package]] +name = "aws-smithy-observability" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445d065e76bc1ef54963db400319f1dd3ebb3e0a74af20f7f7630625b0cc7cc0" +dependencies = [ + "aws-smithy-runtime-api", + "once_cell", +] + [[package]] name = "aws-smithy-query" version = "0.60.7" @@ -1310,13 +1426,14 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6328865e36c6fd970094ead6b05efd047d3a80ec5fc3be5e743910da9f2ebf8" +checksum = "0152749e17ce4d1b47c7747bdfec09dac1ccafdcbc741ebf9daa2a373356730f" dependencies = [ "aws-smithy-async", "aws-smithy-http", "aws-smithy-http-client", + "aws-smithy-observability", "aws-smithy-runtime-api", "aws-smithy-types", "bytes", @@ -1663,9 +1780,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.16" +version = "1.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" dependencies = [ "jobserver", "libc", @@ -1729,9 +1846,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.32" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" +checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" dependencies = [ "clap_builder", "clap_derive", @@ -1758,9 +1875,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.32" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" +checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" dependencies = [ "anstream", "anstyle", @@ -2035,12 +2152,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", + "darling_core 0.20.11", + "darling_macro 0.20.11", ] [[package]] @@ -2059,9 +2176,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" dependencies = [ "fnv", "ident_case", @@ -2084,11 +2201,11 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.10", + "darling_core 0.20.11", "quote", "syn 2.0.100", ] @@ -2382,9 +2499,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -2489,9 +2606,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -2726,7 +2843,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.8.0", + "indexmap 2.9.0", "slab", "tokio", "tokio-util", @@ -2745,7 +2862,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.3.1", - "indexmap 2.8.0", + "indexmap 2.9.0", "slab", "tokio", "tokio-util", @@ -2986,9 +3103,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" dependencies = [ "bytes", "futures-channel", @@ -2996,6 +3113,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "hyper 1.6.0", + "libc", "pin-project-lite", "socket2", "tokio", @@ -3005,14 +3123,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -3067,9 +3186,9 @@ dependencies = [ [[package]] name = "icu_locid_transform_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" [[package]] name = "icu_normalizer" @@ -3091,9 +3210,9 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" [[package]] name = "icu_properties" @@ -3112,9 +3231,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" [[package]] name = "icu_provider" @@ -3233,9 +3352,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -3299,10 +3418,11 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -3573,9 +3693,9 @@ checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" [[package]] name = "log" -version = "0.4.26" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lru" @@ -3764,7 +3884,7 @@ dependencies = [ name = "mcr-protocol-client-core-mock" version = "0.0.1" dependencies = [ - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "anyhow", "futures", "mcr-protocol-client-core-util", @@ -3795,7 +3915,7 @@ dependencies = [ "alloy", "alloy-contract", "alloy-network", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-provider", "alloy-rpc-types", "alloy-signer", @@ -3915,9 +4035,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" dependencies = [ "adler2", ] @@ -4081,15 +4201,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.1" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.71" +version = "0.10.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" dependencies = [ "bitflags", "cfg-if", @@ -4119,9 +4239,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.106" +version = "0.9.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" +checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" dependencies = [ "cc", "libc", @@ -4283,9 +4403,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.15" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" dependencies = [ "memchr", "thiserror 2.0.12", @@ -4367,9 +4487,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" dependencies = [ "proc-macro2", "syn 2.0.100", @@ -4527,9 +4647,9 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +checksum = "541d0f57c6ec747a90738a52741d3221f7960e8ac2f0ff4b1a63680e033b4ab5" dependencies = [ "cfg_aliases", "libc", @@ -4632,9 +4752,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ "bitflags", ] @@ -4771,9 +4891,9 @@ dependencies = [ [[package]] name = "ruint" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825df406ec217a8116bd7b06897c6cc8f65ffefc15d030ae2c9540acc9ed50b6" +checksum = "78a46eb779843b2c4f21fac5773e25d6d5b7c8f0922876c91541790d2ca27eef" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", @@ -4788,6 +4908,7 @@ dependencies = [ "primitive-types", "proptest", "rand 0.8.5", + "rand 0.9.0", "rlp", "ruint-macro", "serde", @@ -4902,9 +5023,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ "bitflags", "errno", @@ -4935,7 +5056,7 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.103.0", + "rustls-webpki 0.103.1", "subtle", "zeroize", ] @@ -5003,9 +5124,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.0" +version = "0.103.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa4eeac2588ffff23e9d7a7e9b3f971c5fb5b7ebc9452745e0c232c64f83b2f" +checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" dependencies = [ "aws-lc-rs", "ring", @@ -5140,9 +5261,9 @@ dependencies = [ name = "secure-signer-eth" version = "0.0.1" dependencies = [ - "alloy-consensus", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", "alloy-network", - "alloy-primitives 0.8.23", + "alloy-primitives 0.8.25", "alloy-signer", "alloy-transport-http", "async-trait", @@ -5322,7 +5443,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.8.0", + "indexmap 2.9.0", "serde", "serde_derive", "serde_json", @@ -5336,7 +5457,7 @@ version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ - "darling 0.20.10", + "darling 0.20.11", "proc-macro2", "quote", "syn 2.0.100", @@ -5469,18 +5590,18 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" dependencies = [ "serde", ] [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -5581,9 +5702,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.23" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d975606bae72d8aad5b07d9342465e123a2cccf53a5a735aedf81ca92a709ecb" +checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" dependencies = [ "paste", "proc-macro2", @@ -5631,14 +5752,14 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ "fastrand", "getrandom 0.3.2", "once_cell", - "rustix 1.0.3", + "rustix 1.0.5", "windows-sys 0.59.0", ] @@ -5687,6 +5808,46 @@ dependencies = [ "tokio", ] +[[package]] +name = "test-test2-mcr-network-anvil-component-core" +version = "0.0.1" +dependencies = [ + "alloy", + "alloy-consensus 0.12.6 (git+https://github.com/alloy-rs/alloy.git?rev=bc190c61f1bee74271a29ea6275ab674fcfe73d5)", + "alloy-network", + "alloy-primitives 0.8.25", + "alloy-provider", + "alloy-rlp", + "alloy-rpc-types", + "alloy-rpc-types-eth 0.12.6 (registry+https://github.com/rust-lang/crates.io-index)", + "alloy-signer", + "alloy-sol-types", + "alloy-transport", + "alloy-transport-http", + "anyhow", + "async-stream", + "async-trait", + "bytes", + "futures", + "hex", + "kestrel", + "mcr-config", + "mcr-network-anvil-component-core", + "mcr-protocol-client-core-mock", + "mcr-protocol-client-core-util", + "mcr-protocol-client-eth-core", + "mcr-protocol-deployer-eth-core", + "mcr-types", + "network-anvil-component-core", + "secure-signer", + "secure-signer-loader", + "serde_json", + "strip-ansi-escapes", + "tokio", + "tokio-stream", + "url", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -5748,9 +5909,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.40" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9c75b47bdff86fa3334a3db91356b8d7d86a9b839dab7d0bdc5c3d3a077618" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -5769,9 +5930,9 @@ checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.21" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29aa485584182073ed57fd5004aa09c371f021325014694e432313345865fd04" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", @@ -5813,9 +5974,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.1" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", @@ -5924,7 +6085,7 @@ version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ - "indexmap 2.8.0", + "indexmap 2.9.0", "toml_datetime", "winnow", ] @@ -6415,11 +6576,37 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings 0.4.0", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -6435,7 +6622,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ "windows-result", - "windows-strings", + "windows-strings 0.3.1", "windows-targets 0.53.0", ] @@ -6457,6 +6644,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -6605,9 +6801,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" dependencies = [ "memchr", ] @@ -6733,18 +6929,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", @@ -6816,9 +7012,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744" dependencies = [ "aes", "arbitrary", @@ -6827,16 +7023,14 @@ dependencies = [ "crc32fast", "crossbeam-utils", "deflate64", - "displaydoc", "flate2", "getrandom 0.3.2", "hmac", - "indexmap 2.8.0", + "indexmap 2.9.0", "lzma-rs", "memchr", "pbkdf2", "sha1", - "thiserror 2.0.12", "time", "xz2", "zeroize", @@ -6869,18 +7063,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.3" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.14+zstd.1.5.7" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index b617e30e..3116f7a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -65,7 +65,8 @@ alloy = { git = "https://github.com/alloy-rs/alloy.git", package = "alloy", rev "pubsub", "providers", ] } -alloy-rpc-types-eth = "0.12" +alloy-rpc-types-eth = "0.12" +# alloy-rpc-types-eth = { git = "https://github.com/alloy-rs/alloy.git", rev = "bc190c61f1bee74271a29ea6275ab674fcfe73d5" } alloy-eips = { git = "https://github.com/alloy-rs/alloy.git", rev = "bc190c61f1bee74271a29ea6275ab674fcfe73d5" } alloy-contract = { git = "https://github.com/alloy-rs/alloy.git", rev = "bc190c61f1bee74271a29ea6275ab674fcfe73d5" } alloy-network = { git = "https://github.com/alloy-rs/alloy.git", rev = "bc190c61f1bee74271a29ea6275ab674fcfe73d5" } @@ -114,6 +115,8 @@ strip-ansi-escapes = "0.2.1" cargo_metadata = "0.19.2" ignore = "0.4.20" convert_case = "0.8.0" +url = "2.4.1" +bytes = "1.6.0" # model checking and verification diff --git a/README.md b/README.md index 4c20b407..c1514b35 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,11 @@ f ------ | 5e771e3e47 | Movement Labs' Fast Finality Settlement is a proof of stake settlement system. ## Getting started + To get started using `ffs` we recommending reviewing our CLI documentation: - [The SDK CLI Guide](sdk/cli/README.md) provides a general introduction to the CLI. -- [The CLI Docs](docs/cli/README.md) provide subcommand level documentation of the CLIs. +- [The CLI Docs](docs/cli/README.md) provide subcommand level documentation of the CLIs. If you are interested in lower-level programmatic usage, we recommend reading through the crate docs: @@ -26,9 +27,15 @@ If you are interested in lower-level programmatic usage, we recommend reading th cargo doc --open --no-deps ``` -To develop a better sense of the protocol, please review the associated MIPs, beginning with [MIP-34](https://github.com/movementlabsxyz/MIP/pull/34). +To develop a better sense of the protocol, please review the associated MIPs, beginning with [MIP-34](https://github.com/movementlabsxyz/MIP/pull/34). + +If you are considering using `ffs` in production, jump to [Production](#production). + +### Testing and simulation + +To check out testing, see the [tests](./network/mcr/components/eth/anvil/tests/README.md) directory. -If you are considering using `ffs` in production, jump to [Production](#production). +To check out simulation, see the [simulations](./network/mcr/components/eth/anvil/simulations/README.md) directory. ## Contributing diff --git a/network/mcr/README.md b/network/mcr/README.md new file mode 100644 index 00000000..0e6ede3c --- /dev/null +++ b/network/mcr/README.md @@ -0,0 +1,10 @@ +# MCR Network + +This is the MCR Network component. + +It is for ??? + +## Content + +- [`components`](./components/README.md): ??? +- [`cli`](./cli/README.md): The CLI for the MCR Network. diff --git a/network/mcr/components/eth/anvil/tests/README.md b/network/mcr/components/eth/anvil/tests/README.md new file mode 100644 index 00000000..84ad8389 --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/README.md @@ -0,0 +1,8 @@ +# Tests + +Tests are used to test the protocol. + +- [`basic`](./basic/README.md): Bring up a basic network. +- [`test2`](./test2/README.md): Stake MOVE tokens from a validator, post a commitment, and then post confirm the commitment. + +Once a test is finalized, it should be added to the `tests.yml` file in the `.github` folder of the repository. diff --git a/network/mcr/components/eth/anvil/tests/basic/README.md b/network/mcr/components/eth/anvil/tests/basic/README.md new file mode 100644 index 00000000..b7dad83b --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/basic/README.md @@ -0,0 +1,29 @@ +# Basic + +This test is used to bring up a basic network. + +## Usage + +```bash +cargo run --bin test-basic-mcr-network-anvil-component-core +``` + +You may have to kill the process as anvil does not exit cleanly. + +Check with + +```bash +ps aux | grep anvil +``` + +And kill the process with `pkill`. + +```bash +pkill anvil +``` + +## Steps + +1. Bring up an anvil network. +2. Bring up an MCR network. +3. Post a commitment on the MCR network. diff --git a/network/mcr/components/eth/anvil/tests/basic/src/basic/client/mod.rs b/network/mcr/components/eth/anvil/tests/basic/src/basic/client/mod.rs deleted file mode 100644 index a59eb7f8..00000000 --- a/network/mcr/components/eth/anvil/tests/basic/src/basic/client/mod.rs +++ /dev/null @@ -1,29 +0,0 @@ -use mcr_protocol_client_core_util::McrClientOperations; -use mcr_protocol_client_eth_core::config::StandardClient; -use mcr_types::commitment::Commitment; - -#[derive(Debug, Clone)] -pub enum Act { - PostCommitment(Commitment), -} - -pub struct Client { - pub mcr_protocol_client: StandardClient, -} - -impl Client { - pub fn new(mcr_protocol_client: StandardClient) -> Self { - Self { mcr_protocol_client } - } - - pub async fn act(&self, act: Act) -> Result<(), anyhow::Error> { - println!("acting on {:?}", act); - - match act { - Act::PostCommitment(commitment) => { - self.mcr_protocol_client.post_commitment(commitment).await?; - Ok(()) - } - } - } -} diff --git a/network/mcr/components/eth/anvil/tests/basic/src/basic/config.rs b/network/mcr/components/eth/anvil/tests/basic/src/basic/config.rs deleted file mode 100644 index 9cd039b4..00000000 --- a/network/mcr/components/eth/anvil/tests/basic/src/basic/config.rs +++ /dev/null @@ -1,12 +0,0 @@ -use mcr_network_anvil_component_core::dev::lifecycle::up; - -#[derive(Debug, Clone)] -pub struct Config { - pub up: up::Config, -} - -impl Config { - pub fn to_be_filled() -> Result { - Ok(Self { up: up::Config::to_be_filled()? }) - } -} diff --git a/network/mcr/components/eth/anvil/tests/basic/src/basic/mod.rs b/network/mcr/components/eth/anvil/tests/basic/src/basic/mod.rs deleted file mode 100644 index ccea6535..00000000 --- a/network/mcr/components/eth/anvil/tests/basic/src/basic/mod.rs +++ /dev/null @@ -1,99 +0,0 @@ -pub mod client; -pub mod config; - -use anyhow::Context; -use client::{Act, Client}; -use config::Config; -use mcr_network_anvil_component_core::dev::lifecycle::up::Up; -use mcr_protocol_client_eth_core::config::Config as EthConfig; -use mcr_protocol_deployer_eth_core::artifacts::output::Artifacts; -use mcr_types::commitment::Commitment; -use network_anvil_component_core::util::parser::AnvilData; -use secure_signer::key::TryFromCanonicalString; -use secure_signer_loader::identifiers::SignerIdentifier; -use tokio::time::Duration; -pub struct Basic { - up: Up, -} - -// todo: perhaps move into Up API. -pub struct UpState { - pub anvil_data: AnvilData, - pub artifacts: Artifacts, -} - -impl UpState { - pub fn try_to_default_mcr_protocol_client_config(&self) -> Result { - // todo: this should be retrieved from the anvil data. - let rpc_url = "http://localhost:8545".to_string(); - let ws_url = "ws://localhost:8545".to_string(); - let chain_id = self.anvil_data.chain_id; - let commitment_lead_tolerance = 100; - - // get the signer identifier - let signer_identifier_hex_key = self.anvil_data.private_keys[0].clone(); - let canonical_identifier_string = format!( - "local::{}", - signer_identifier_hex_key - .strip_prefix("0x") - .context("invalid signer identifier")? - ); - let signer_identifier = - SignerIdentifier::try_from_canonical_string(&canonical_identifier_string) - .map_err(|_| anyhow::anyhow!("invalid signer identifier"))?; - - Ok(EthConfig { - mcr_contract_address: self.artifacts.mcr_proxy.clone(), - rpc_url: rpc_url.clone(), - ws_url: ws_url.clone(), - chain_id: chain_id, - signer_identifier: signer_identifier, - run_commitment_admin_mode: false, - gas_limit: 323924465909782, - transaction_send_retries: 3, - mcr_address: self.artifacts.mcr_proxy.clone(), - commitment_lead_tolerance: commitment_lead_tolerance, - move_token_address: self.artifacts.token_proxy.clone(), - staking_address: self.artifacts.staking_proxy.clone(), - }) - } - - pub async fn try_build_default_mcr_protocol_client(&self) -> Result { - let mcr_protocol_client_config = self.try_to_default_mcr_protocol_client_config()?; - let mcr_protocol_client = mcr_protocol_client_config.build().await?; - Ok(Client::new(mcr_protocol_client)) - } -} - -impl Basic { - pub fn new(config: Config) -> Self { - Basic { up: Up::new(config.up) } - } - - pub async fn run(self) -> Result<(), anyhow::Error> { - // clone the anvil data and artifacts from up - let anvil_data = self.up.anvil_data().clone(); - let artifacts = self.up.artifacts().clone(); - - let up_task = kestrel::task(async move { self.up.run().await }); - - // wait for the anvil data and artifacts for up to 30 seconds - println!("waiting for anvil data"); - let anvil_data = anvil_data.read().wait_for(Duration::from_secs(30)).await?; - println!("waiting for artifacts"); - let artifacts = artifacts.read().wait_for(Duration::from_secs(30)).await?; - println!("up state"); - let up_state = UpState { anvil_data, artifacts }; - - // get the mcr protocol client - let mcr_protocol_client = up_state.try_build_default_mcr_protocol_client().await?; - - // act with the client - mcr_protocol_client.act(Act::PostCommitment(Commitment::default())).await?; - - // end the up task - kestrel::end!(up_task)?; - - Ok(()) - } -} diff --git a/network/mcr/components/eth/anvil/tests/basic/src/client.rs b/network/mcr/components/eth/anvil/tests/basic/src/client.rs new file mode 100644 index 00000000..9f352dd5 --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/basic/src/client.rs @@ -0,0 +1,29 @@ +use mcr_protocol_client_core_util::McrClientOperations; +use mcr_protocol_client_eth_core::config::StandardClient; +use mcr_types::commitment::Commitment; + +#[derive(Debug, Clone)] +pub enum Act { + PostCommitment(Commitment), +} + +pub struct Client { + pub mcr_protocol_client: StandardClient, +} + +impl Client { + pub fn new(mcr_protocol_client: StandardClient) -> Self { + Self { mcr_protocol_client } + } + + pub async fn act(&self, act: Act) -> Result<(), anyhow::Error> { + println!("acting on {:?}", act); + + match act { + Act::PostCommitment(commitment) => { + self.mcr_protocol_client.post_commitment(commitment).await?; + Ok(()) + } + } + } +} \ No newline at end of file diff --git a/network/mcr/components/eth/anvil/tests/basic/src/config.rs b/network/mcr/components/eth/anvil/tests/basic/src/config.rs new file mode 100644 index 00000000..1b0f17ad --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/basic/src/config.rs @@ -0,0 +1,12 @@ +use mcr_network_anvil_component_core::dev::lifecycle::up; + +#[derive(Debug, Clone)] +pub struct Config { + pub up: up::Config, +} + +impl Config { + pub fn to_be_filled() -> Result { + Ok(Self { up: up::Config::to_be_filled()? }) + } +} \ No newline at end of file diff --git a/network/mcr/components/eth/anvil/tests/basic/src/lib.rs b/network/mcr/components/eth/anvil/tests/basic/src/lib.rs index e2846d7a..9fb30fde 100644 --- a/network/mcr/components/eth/anvil/tests/basic/src/lib.rs +++ b/network/mcr/components/eth/anvil/tests/basic/src/lib.rs @@ -1,2 +1,93 @@ -pub mod basic; -pub use basic::*; +mod client; +pub mod config; + +pub use client::{Act, Client}; +pub use config::Config; + +use anyhow::Context; +use mcr_network_anvil_component_core::dev::lifecycle::up::Up; +use mcr_protocol_client_eth_core::config::Config as EthConfig; +use mcr_protocol_deployer_eth_core::artifacts::output::Artifacts; +use mcr_types::commitment::Commitment; +use network_anvil_component_core::util::parser::AnvilData; +use secure_signer::key::TryFromCanonicalString; +use secure_signer_loader::identifiers::SignerIdentifier; +use tokio::time::Duration; + +pub struct Basic { + up: Up, +} + +pub struct UpState { + pub anvil_data: AnvilData, + pub artifacts: Artifacts, +} + +impl UpState { + pub fn try_to_default_mcr_protocol_client_config(&self) -> Result { + let rpc_url = "http://localhost:8545".to_string(); + let ws_url = "ws://localhost:8545".to_string(); + let chain_id = self.anvil_data.chain_id; + let commitment_lead_tolerance = 100; + + let signer_identifier_hex_key = self.anvil_data.private_keys[0].clone(); + let canonical_identifier_string = format!( + "local::{}", + signer_identifier_hex_key + .strip_prefix("0x") + .context("invalid signer identifier")? + ); + let signer_identifier = + SignerIdentifier::try_from_canonical_string(&canonical_identifier_string) + .map_err(|_| anyhow::anyhow!("invalid signer identifier"))?; + + Ok(EthConfig { + mcr_contract_address: self.artifacts.mcr_proxy.clone(), + rpc_url: rpc_url.clone(), + ws_url: ws_url.clone(), + chain_id: chain_id, + signer_identifier: signer_identifier, + run_commitment_admin_mode: false, + gas_limit: 323924465909782, + transaction_send_retries: 3, + mcr_address: self.artifacts.mcr_proxy.clone(), + commitment_lead_tolerance: commitment_lead_tolerance, + move_token_address: self.artifacts.token_proxy.clone(), + staking_address: self.artifacts.staking_proxy.clone(), + }) + } + + pub async fn try_build_default_mcr_protocol_client(&self) -> Result { + let mcr_protocol_client_config = self.try_to_default_mcr_protocol_client_config()?; + let mcr_protocol_client = mcr_protocol_client_config.build().await?; + Ok(Client::new(mcr_protocol_client)) + } +} + +impl Basic { + pub fn new(config: Config) -> Self { + Basic { up: Up::new(config.up) } + } + + pub async fn run(self) -> Result<(), anyhow::Error> { + let anvil_data = self.up.anvil_data().clone(); + let artifacts = self.up.artifacts().clone(); + + let up_task = kestrel::task(async move { self.up.run().await }); + + println!("waiting for anvil data"); + let anvil_data = anvil_data.read().wait_for(Duration::from_secs(30)).await?; + println!("waiting for artifacts"); + let artifacts = artifacts.read().wait_for(Duration::from_secs(30)).await?; + println!("up state"); + let up_state = UpState { anvil_data, artifacts }; + + let mcr_protocol_client = up_state.try_build_default_mcr_protocol_client().await?; + + mcr_protocol_client.act(Act::PostCommitment(Commitment::default())).await?; + + kestrel::end!(up_task)?; + + Ok(()) + } +} diff --git a/network/mcr/components/eth/anvil/tests/test2/Cargo.toml b/network/mcr/components/eth/anvil/tests/test2/Cargo.toml new file mode 100644 index 00000000..c986cc0f --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/test2/Cargo.toml @@ -0,0 +1,55 @@ +[package] +name = "test-test2-mcr-network-anvil-component-core" +version = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +authors = { workspace = true } +repository = { workspace = true } +homepage = { workspace = true } +publish = { workspace = true } +rust-version = { workspace = true } + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +mcr-protocol-client-core-util = { workspace = true } + +anyhow = { workspace = true } +async-stream = { workspace = true } +async-trait = { workspace = true } +futures = { workspace = true } +tokio = { workspace = true } +tokio-stream = { workspace = true } +serde_json = { workspace = true } +mcr-types = { workspace = true } +mcr-config = { workspace = true } +kestrel = { workspace = true } +mcr-protocol-client-eth-core = { workspace = true } +mcr-protocol-deployer-eth-core = { workspace = true } +mcr-network-anvil-component-core = { workspace = true } +strip-ansi-escapes = { workspace = true } +network-anvil-component-core = { workspace = true } +secure-signer = { workspace = true } +secure-signer-loader = { workspace = true } +alloy = { workspace = true } +alloy-provider = { workspace = true } +alloy-primitives = { workspace = true } +alloy-sol-types = { workspace = true } +alloy-rpc-types = { workspace = true } +alloy-rpc-types-eth = { workspace = true } +alloy-network = { workspace = true } +alloy-signer = { workspace = true } +alloy-transport = { workspace = true } +alloy-transport-http = { workspace = true } +url = { workspace = true } +alloy-rlp = { workspace = true } +hex = { workspace = true } +alloy-consensus = { workspace = true } +bytes = { workspace = true } + +[dev-dependencies] +mcr-protocol-client-core-mock = { workspace = true } + + +[lints] +workspace = true diff --git a/network/mcr/components/eth/anvil/tests/test2/README.md b/network/mcr/components/eth/anvil/tests/test2/README.md new file mode 100644 index 00000000..b1ec3f56 --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/test2/README.md @@ -0,0 +1,29 @@ +# Test2 + +This test is used to transfer MOVE tokens to a validator, stake, commit and postconfirm. + +## Usage + +```bash +cargo run --bin test-test2-mcr-network-anvil-component-core +``` + +You may have to kill the process as anvil does not exit cleanly. + +Check with + +```bash +ps aux | grep anvil +``` + +And kill the process with `pkill`. + +```bash +pkill anvil +``` + +## Steps + +1. Bring up an anvil network. +2. Bring up an MCR network. +3. Post a commitment on the MCR network. diff --git a/network/mcr/components/eth/anvil/tests/test2/src/client.rs b/network/mcr/components/eth/anvil/tests/test2/src/client.rs new file mode 100644 index 00000000..a22b1010 --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/test2/src/client.rs @@ -0,0 +1,202 @@ +use mcr_protocol_client_core_util::{McrClientOperations, U256}; +use mcr_protocol_client_eth_core::config::StandardClient; +use mcr_types::commitment::Commitment; + +use alloy_primitives::{Address, TxKind, keccak256}; +use alloy_provider::{ProviderBuilder, Provider}; +use alloy_rpc_types::{TransactionRequest, TransactionInput}; +use alloy::signers::local::PrivateKeySigner; +use alloy_consensus::transaction::SignableTransaction; +use bytes::BytesMut; +use alloy_network::TxSigner; +use url::Url; +use hex; +use std::borrow::Cow; + +#[derive(Debug, Clone)] +pub enum Act { + PostCommitment(Commitment), + GetTokenBalance { + token_address: String, + address: String, + }, + TransferTokens { + token_address: String, + to: String, + amount: U256, + private_key_sender: String, + address_sender: String, + }, +} + +pub struct Client { + pub mcr_protocol_client: StandardClient, +} + +impl Client { + pub fn new(mcr_protocol_client: StandardClient) -> Self { + Self { mcr_protocol_client } + } + + pub async fn act(&self, act: Act) -> Result, anyhow::Error> { + match act { + Act::PostCommitment(commitment) => { + self.handle_post_commitment(commitment).await?; + Ok(None) + }, + Act::GetTokenBalance { token_address, address } => { + let balance = self.handle_get_token_balance(&token_address, &address).await?; + Ok(Some(balance)) + } + Act::TransferTokens { + token_address, + to, + amount, + private_key_sender, + address_sender, + } => { + self.handle_transfer_tokens(token_address, to, amount, private_key_sender, address_sender).await?; + Ok(None) + } + } + } + + // post a commitment + async fn handle_post_commitment(&self, commitment: Commitment) -> Result<(), anyhow::Error> { + self.mcr_protocol_client.post_commitment(commitment).await?; + Ok(()) + } + + async fn handle_get_token_balance( + &self, + token_address: &str, + address: &str, + ) -> Result { + use serde_json::json; + + let url = Url::parse("http://localhost:8545")?; + let provider = ProviderBuilder::new().on_http(url); + + let token: Address = token_address.parse()?; + let owner: Address = address.parse()?; + + // Encode selector + address + let selector = &keccak256(b"balanceOf(address)")[..4]; + let mut data = Vec::from(selector); + data.extend_from_slice(&[0u8; 12]); // left-pad address + data.extend_from_slice(&owner.to_vec()); + let data_hex = format!("0x{}", hex::encode(data)); + + // Build eth_call params manually + let params = json!([{ + "to": format!("{:#x}", token), + "data": data_hex + }, "latest"]); + + // Send raw RPC call + let raw: String = provider.raw_request(Cow::Borrowed("eth_call"), params).await?; + let raw_bytes = hex::decode(raw.strip_prefix("0x").unwrap_or(&raw))?; + let balance = U256::from_be_bytes::<32>( + raw_bytes + .as_slice() + .try_into() + .map_err(|_| anyhow::anyhow!("Expected 32 bytes for U256"))?, + ); + println!("[handle_get_token_balance] token balance: {}", balance); + Ok(balance) + } + + + // transfer move tokens + async fn handle_transfer_tokens( + &self, + token_address: String, + to: String, + amount: U256, + private_key_sender: String, + address_sender: String, + ) -> Result<(), anyhow::Error> { + println!("[handle_transfer_tokens] token_address: {:?}", token_address); + println!("[handle_transfer_tokens] to: {:?}", to); + println!("[handle_transfer_tokens] amount: {:?}", amount); + println!("[handle_transfer_tokens] private_key_sender: {:?}", private_key_sender); + println!("[handle_transfer_tokens] address_sender: {:?}", address_sender); + + // get the balance of the token using handle_get_token_balance + let url = Url::parse("http://localhost:8545")?; + let provider = ProviderBuilder::new().on_http(url); + let token: Address = token_address.parse()?; + + + let move_balance = self.handle_get_token_balance(&token_address, &address_sender).await?; + println!("[handle_transfer_tokens] MOVE balance: {:?}", move_balance); + if move_balance == U256::ZERO { + return Err(anyhow::anyhow!("insufficient MOVE token balance")); + } + + let sender_address: Address = address_sender.parse()?; + let eth_balance = provider.get_balance(sender_address).await?; + println!("[handle_transfer_tokens] ETH balance: {:?}", eth_balance); + if eth_balance == U256::ZERO { + return Err(anyhow::anyhow!("insufficient ETH balance to cover gas")); + } + + let url = Url::parse("http://localhost:8545")?; + let provider = ProviderBuilder::new().on_http(url); + + let token: Address = token_address.parse()?; + let to_addr: Address = to.parse()?; + + // Encode ERC20 transfer(address,uint256) + let selector = keccak256(b"transfer(address,uint256)")[..4].to_vec(); + let mut data = selector; + data.extend_from_slice(&[0u8; 12]); + data.extend_from_slice(&to_addr.to_vec()); + data.extend_from_slice(&amount.to_be_bytes::<32>()); + + // Use alloy_signers instead of raw k256 + let key_bytes = hex::decode(private_key_sender.strip_prefix("0x").unwrap_or(&private_key_sender))?; + let key_array: [u8; 32] = key_bytes + .as_slice() + .try_into() + .map_err(|_| anyhow::anyhow!("private key must be 32 bytes"))?; + let signer = PrivateKeySigner::from_bytes((&key_array).into())?; + + // let signer = PrivateKeySigner::from_bytes(&key_array)?; + let from = signer.address(); + + // create the transaction request + let tx = TransactionRequest { + from: Some(from), + to: Some(TxKind::Call(token)), + input: TransactionInput::new(data.into()), + gas: Some(100_000), + nonce: Some(provider.get_transaction_count(from).await?), + chain_id: Some(provider.get_chain_id().await?.into()), + gas_price: Some(provider.get_gas_price().await?.into()), + ..Default::default() + }; + + // build the typed transaction + let typed_tx = tx + .build_typed_tx() + .map_err(|e| anyhow::anyhow!("failed to build typed transaction: {:?}", e))?; + + // sign the transaction + let mut tx = typed_tx; + let sig = signer.sign_transaction(&mut tx).await?; + let signed = tx.into_signed(sig); + + let mut out = BytesMut::new(); + signed.rlp_encode(&mut out); + let raw_tx = out.to_vec(); + + let tx_hash = provider.send_raw_transaction(&raw_tx).await?; + println!("Sent tx: {:?}", tx_hash); + + Ok(()) + } + + + +} diff --git a/network/mcr/components/eth/anvil/tests/test2/src/config.rs b/network/mcr/components/eth/anvil/tests/test2/src/config.rs new file mode 100644 index 00000000..1b0f17ad --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/test2/src/config.rs @@ -0,0 +1,12 @@ +use mcr_network_anvil_component_core::dev::lifecycle::up; + +#[derive(Debug, Clone)] +pub struct Config { + pub up: up::Config, +} + +impl Config { + pub fn to_be_filled() -> Result { + Ok(Self { up: up::Config::to_be_filled()? }) + } +} \ No newline at end of file diff --git a/network/mcr/components/eth/anvil/tests/test2/src/lib.rs b/network/mcr/components/eth/anvil/tests/test2/src/lib.rs new file mode 100644 index 00000000..6693ee10 --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/test2/src/lib.rs @@ -0,0 +1,132 @@ +mod client; +pub mod config; + +pub use client::{Act, Client}; +pub use config::Config; + +use anyhow::Context; +use mcr_network_anvil_component_core::dev::lifecycle::up::Up; +use mcr_protocol_client_eth_core::config::Config as EthConfig; +use mcr_protocol_deployer_eth_core::artifacts::output::Artifacts; +use network_anvil_component_core::util::parser::AnvilData; +use secure_signer::key::TryFromCanonicalString; +use secure_signer_loader::identifiers::SignerIdentifier; +use tokio::time::Duration; +use mcr_protocol_client_core_util::U256; + + +pub struct Test { + up: Up, +} + +pub struct UpState { + pub anvil_data: AnvilData, + pub artifacts: Artifacts, +} + +impl UpState { + pub fn try_to_default_mcr_protocol_client_config(&self) -> Result { + let rpc_url = "http://localhost:8545".to_string(); + let ws_url = "ws://localhost:8545".to_string(); + let chain_id = self.anvil_data.chain_id; + let commitment_lead_tolerance = 100; + + let signer_identifier_hex_key = self.anvil_data.private_keys[0].clone(); + let canonical_identifier_string = format!( + "local::{}", + signer_identifier_hex_key + .strip_prefix("0x") + .context("invalid signer identifier")? + ); + let signer_identifier = + SignerIdentifier::try_from_canonical_string(&canonical_identifier_string) + .map_err(|_| anyhow::anyhow!("invalid signer identifier"))?; + + Ok(EthConfig { + mcr_contract_address: self.artifacts.mcr_proxy.clone(), + rpc_url: rpc_url.clone(), + ws_url: ws_url.clone(), + chain_id: chain_id, + signer_identifier: signer_identifier, + run_commitment_admin_mode: false, + gas_limit: 323924465909782, + transaction_send_retries: 3, + mcr_address: self.artifacts.mcr_proxy.clone(), + commitment_lead_tolerance: commitment_lead_tolerance, + move_token_address: self.artifacts.token_proxy.clone(), + staking_address: self.artifacts.staking_proxy.clone(), + }) + } + + pub async fn try_build_default_mcr_protocol_client(&self) -> Result { + let mcr_protocol_client_config = self.try_to_default_mcr_protocol_client_config()?; + let mcr_protocol_client = mcr_protocol_client_config.build().await?; + Ok(Client::new(mcr_protocol_client)) + } +} + +impl Test { + pub fn new(config: Config) -> Self { + Test { up: Up::new(config.up) } + } + + pub async fn run(self) -> Result<(), anyhow::Error> { + let anvil_data = self.up.anvil_data().clone(); + let artifacts = self.up.artifacts().clone(); + + let up_task = kestrel::task(async move { self.up.run().await }); + + println!("waiting for anvil data"); + let anvil_data = anvil_data.read().wait_for(Duration::from_secs(30)).await?; + println!("waiting for artifacts"); + let artifacts = artifacts.read().wait_for(Duration::from_secs(30)).await?; + println!("up state"); + let up_state = UpState { anvil_data, artifacts }; + + let mcr_protocol_client = up_state.try_build_default_mcr_protocol_client().await?; + + // Get the second account from anvil data to transfer to + // print all fields of anvil data + println!("------------------------------------------------------"); + println!("anvil data: {:?}", up_state.anvil_data); + println!("------------------------------------------------------"); + println!("artifacts: {:?}", up_state.artifacts); + println!("------------------------------------------------------"); + + // println!("transferring tokens to {:?}", up_state.anvil_data.addresses[1]); + + let recipient = up_state.anvil_data.signers[1].clone(); + let move_token = up_state.artifacts.token_proxy; + + println!("......................................................"); + println!("recipient: {:?}", recipient); + println!("move token: {:?}", move_token); + println!("transferring tokens to {:?}", recipient); + println!("......................................................"); + + // for each account, check the balance of the move token + for i in 0..up_state.anvil_data.signers.len() { + let balance = mcr_protocol_client.act(Act::GetTokenBalance { + token_address: move_token.clone(), + address: up_state.anvil_data.signers[i].clone(), + }).await?; + println!("balance of account {:?}: {:?}", up_state.anvil_data.signers[i], balance); + } + + // Transfer 1000 tokens to the second account + mcr_protocol_client.act(Act::TransferTokens { + token_address: move_token, + to: recipient, + amount: U256::from(1000), + private_key_sender: up_state.anvil_data.private_keys[1].clone(), + address_sender: up_state.anvil_data.signers[1].clone(), + }).await?; + + // // Post a commitment + // mcr_protocol_client.act(Act::PostCommitment(Commitment::default())).await?; + + kestrel::end!(up_task)?; + + Ok(()) + } +} diff --git a/network/mcr/components/eth/anvil/tests/test2/src/main.rs b/network/mcr/components/eth/anvil/tests/test2/src/main.rs new file mode 100644 index 00000000..4207ae5c --- /dev/null +++ b/network/mcr/components/eth/anvil/tests/test2/src/main.rs @@ -0,0 +1,9 @@ +use test_test2_mcr_network_anvil_component_core::{config::Config, Test}; + +#[tokio::main] +pub async fn main() -> Result<(), anyhow::Error> { + let config = Config::to_be_filled()?; + let test = Test::new(config); + test.run().await?; + Ok(()) +} diff --git a/sdk/cli/ffs-dev/docs/README.md b/sdk/cli/ffs-dev/docs/README.md index 2c568c26..f2a1232c 100644 --- a/sdk/cli/ffs-dev/docs/README.md +++ b/sdk/cli/ffs-dev/docs/README.md @@ -12,11 +12,23 @@ This document contains the help content for the `ffs-dev` command-line program. * [`ffs-dev markdown workspace`↴](#ffs-dev-markdown-workspace) * [`ffs-dev mcr`↴](#ffs-dev-mcr) * [`ffs-dev mcr network`↴](#ffs-dev-mcr-network) -* [`ffs-dev mcr network run`↴](#ffs-dev-mcr-network-run) +* [`ffs-dev mcr network markdown`↴](#ffs-dev-mcr-network-markdown) +* [`ffs-dev mcr network markdown generate`↴](#ffs-dev-mcr-network-markdown-generate) +* [`ffs-dev mcr network markdown file`↴](#ffs-dev-mcr-network-markdown-file) +* [`ffs-dev mcr network markdown print`↴](#ffs-dev-mcr-network-markdown-print) +* [`ffs-dev mcr network markdown workspace`↴](#ffs-dev-mcr-network-markdown-workspace) * [`ffs-dev mcr network client`↴](#ffs-dev-mcr-network-client) -* [`ffs-dev mcr network client run`↴](#ffs-dev-mcr-network-client-run) +* [`ffs-dev mcr network client markdown`↴](#ffs-dev-mcr-network-client-markdown) +* [`ffs-dev mcr network client markdown generate`↴](#ffs-dev-mcr-network-client-markdown-generate) +* [`ffs-dev mcr network client markdown file`↴](#ffs-dev-mcr-network-client-markdown-file) +* [`ffs-dev mcr network client markdown print`↴](#ffs-dev-mcr-network-client-markdown-print) +* [`ffs-dev mcr network client markdown workspace`↴](#ffs-dev-mcr-network-client-markdown-workspace) * [`ffs-dev mcr network coordinator`↴](#ffs-dev-mcr-network-coordinator) -* [`ffs-dev mcr network coordinator run`↴](#ffs-dev-mcr-network-coordinator-run) +* [`ffs-dev mcr network coordinator markdown`↴](#ffs-dev-mcr-network-coordinator-markdown) +* [`ffs-dev mcr network coordinator markdown generate`↴](#ffs-dev-mcr-network-coordinator-markdown-generate) +* [`ffs-dev mcr network coordinator markdown file`↴](#ffs-dev-mcr-network-coordinator-markdown-file) +* [`ffs-dev mcr network coordinator markdown print`↴](#ffs-dev-mcr-network-coordinator-markdown-print) +* [`ffs-dev mcr network coordinator markdown workspace`↴](#ffs-dev-mcr-network-coordinator-markdown-workspace) * [`ffs-dev mcr network coordinator eth`↴](#ffs-dev-mcr-network-coordinator-eth) * [`ffs-dev mcr network coordinator eth anvil`↴](#ffs-dev-mcr-network-coordinator-eth-anvil) * [`ffs-dev mcr network coordinator eth anvil up`↴](#ffs-dev-mcr-network-coordinator-eth-anvil-up) @@ -25,34 +37,52 @@ This document contains the help content for the `ffs-dev` command-line program. * [`ffs-dev mcr network coordinator eth live`↴](#ffs-dev-mcr-network-coordinator-eth-live) * [`ffs-dev mcr network coordinator eth live up`↴](#ffs-dev-mcr-network-coordinator-eth-live-up) * [`ffs-dev mcr protocol`↴](#ffs-dev-mcr-protocol) -* [`ffs-dev mcr protocol run`↴](#ffs-dev-mcr-protocol-run) +* [`ffs-dev mcr protocol markdown`↴](#ffs-dev-mcr-protocol-markdown) +* [`ffs-dev mcr protocol markdown generate`↴](#ffs-dev-mcr-protocol-markdown-generate) +* [`ffs-dev mcr protocol markdown file`↴](#ffs-dev-mcr-protocol-markdown-file) +* [`ffs-dev mcr protocol markdown print`↴](#ffs-dev-mcr-protocol-markdown-print) +* [`ffs-dev mcr protocol markdown workspace`↴](#ffs-dev-mcr-protocol-markdown-workspace) * [`ffs-dev mcr protocol client`↴](#ffs-dev-mcr-protocol-client) -* [`ffs-dev mcr protocol client run`↴](#ffs-dev-mcr-protocol-client-run) +* [`ffs-dev mcr protocol client markdown`↴](#ffs-dev-mcr-protocol-client-markdown) +* [`ffs-dev mcr protocol client markdown generate`↴](#ffs-dev-mcr-protocol-client-markdown-generate) +* [`ffs-dev mcr protocol client markdown file`↴](#ffs-dev-mcr-protocol-client-markdown-file) +* [`ffs-dev mcr protocol client markdown print`↴](#ffs-dev-mcr-protocol-client-markdown-print) +* [`ffs-dev mcr protocol client markdown workspace`↴](#ffs-dev-mcr-protocol-client-markdown-workspace) * [`ffs-dev mcr protocol client eth`↴](#ffs-dev-mcr-protocol-client-eth) * [`ffs-dev mcr protocol client eth post-admin-commitment`↴](#ffs-dev-mcr-protocol-client-eth-post-admin-commitment) -* [`ffs-dev mcr protocol client post-commitment`↴](#ffs-dev-mcr-protocol-client-post-commitment) -* [`ffs-dev mcr protocol client deploy`↴](#ffs-dev-mcr-protocol-client-deploy) -* [`ffs-dev mcr protocol client deploy anvil`↴](#ffs-dev-mcr-protocol-client-deploy-anvil) -* [`ffs-dev pcp`↴](#ffs-dev-pcp) -* [`ffs-dev pcp protocol`↴](#ffs-dev-pcp-protocol) -* [`ffs-dev pcp protocol run`↴](#ffs-dev-pcp-protocol-run) -* [`ffs-dev pcp protocol client`↴](#ffs-dev-pcp-protocol-client) -* [`ffs-dev pcp protocol client run`↴](#ffs-dev-pcp-protocol-client-run) -* [`ffs-dev pcp protocol client eth`↴](#ffs-dev-pcp-protocol-client-eth) -* [`ffs-dev pcp protocol client eth post-admin-commitment`↴](#ffs-dev-pcp-protocol-client-eth-post-admin-commitment) -* [`ffs-dev pcp protocol client post-commitment`↴](#ffs-dev-pcp-protocol-client-post-commitment) -* [`ffs-dev pcp protocol client deploy`↴](#ffs-dev-pcp-protocol-client-deploy) -* [`ffs-dev pcp protocol client deploy anvil`↴](#ffs-dev-pcp-protocol-client-deploy-anvil) +* [`ffs-dev mcr protocol client eth post-commitment`↴](#ffs-dev-mcr-protocol-client-eth-post-commitment) +* [`ffs-dev mcr protocol client eth post-commitment-batch`↴](#ffs-dev-mcr-protocol-client-eth-post-commitment-batch) +* [`ffs-dev mcr protocol client eth stream-commitments`↴](#ffs-dev-mcr-protocol-client-eth-stream-commitments) +* [`ffs-dev mcr protocol client eth get-commitment`↴](#ffs-dev-mcr-protocol-client-eth-get-commitment) +* [`ffs-dev mcr protocol client eth get-accepted-commitment-at-height`↴](#ffs-dev-mcr-protocol-client-eth-get-accepted-commitment-at-height) +* [`ffs-dev mcr protocol client eth get-posted-commitment-at-height`↴](#ffs-dev-mcr-protocol-client-eth-get-posted-commitment-at-height) +* [`ffs-dev mcr protocol client eth get-max-tolerable-commitment-height`↴](#ffs-dev-mcr-protocol-client-eth-get-max-tolerable-commitment-height) +* [`ffs-dev mcr protocol client eth stake`↴](#ffs-dev-mcr-protocol-client-eth-stake) +* [`ffs-dev mcr protocol client eth get-stake`↴](#ffs-dev-mcr-protocol-client-eth-get-stake) +* [`ffs-dev mcr protocol client eth unstake`↴](#ffs-dev-mcr-protocol-client-eth-unstake) +* [`ffs-dev mcr protocol client eth grant-trusted-attester`↴](#ffs-dev-mcr-protocol-client-eth-grant-trusted-attester) +* [`ffs-dev mcr protocol deployer`↴](#ffs-dev-mcr-protocol-deployer) +* [`ffs-dev mcr protocol deployer markdown`↴](#ffs-dev-mcr-protocol-deployer-markdown) +* [`ffs-dev mcr protocol deployer markdown generate`↴](#ffs-dev-mcr-protocol-deployer-markdown-generate) +* [`ffs-dev mcr protocol deployer markdown file`↴](#ffs-dev-mcr-protocol-deployer-markdown-file) +* [`ffs-dev mcr protocol deployer markdown print`↴](#ffs-dev-mcr-protocol-deployer-markdown-print) +* [`ffs-dev mcr protocol deployer markdown workspace`↴](#ffs-dev-mcr-protocol-deployer-markdown-workspace) +* [`ffs-dev mcr protocol deployer eth`↴](#ffs-dev-mcr-protocol-deployer-eth) +* [`ffs-dev mcr protocol deployer eth apply`↴](#ffs-dev-mcr-protocol-deployer-eth-apply) +* [`ffs-dev mcr protocol deployer eth apply where`↴](#ffs-dev-mcr-protocol-deployer-eth-apply-where) +* [`ffs-dev mcr protocol deployer eth apply using`↴](#ffs-dev-mcr-protocol-deployer-eth-apply-using) +* [`ffs-dev mcr protocol deployer eth destroy`↴](#ffs-dev-mcr-protocol-deployer-eth-destroy) ## `ffs-dev` **Usage:** `ffs-dev ` +KEEP THIS UNTIL PRODUCTION-READY : Defined in: sdk/cli/ffs-dev/src/cli/mod.rs + ###### **Subcommands:** * `markdown` — Generate CLI documentation * `mcr` — Manage MCR -* `pcp` — Manage PCP @@ -64,15 +94,28 @@ Generate CLI documentation ###### **Subcommands:** -* `file` — Write the CLI documentation to a file -* `print` — Print the CLI documentation to the console -* `workspace` — Write the CLI documentation to a file in the workspace +* `generate` — Generate and update the documentation +* `file` — Print the documentation to a file (providing the file path) +* `print` — Print the documentation in the shell +* `workspace` — Generate the documentation for the workspace + + + +## `ffs-dev markdown generate` + +Generate and update the documentation + +**Usage:** `ffs-dev markdown generate [OPTIONS]` + +###### **Options:** + +* `--file ` — Override the default docs location ## `ffs-dev markdown file` -Write the CLI documentation to a file +Print the documentation to a file (providing the file path) **Usage:** `ffs-dev markdown file --file ` @@ -84,7 +127,7 @@ Write the CLI documentation to a file ## `ffs-dev markdown print` -Print the CLI documentation to the console +Print the documentation in the shell **Usage:** `ffs-dev markdown print` @@ -92,7 +135,7 @@ Print the CLI documentation to the console ## `ffs-dev markdown workspace` -Write the CLI documentation to a file in the workspace +Generate the documentation for the workspace **Usage:** `ffs-dev markdown workspace --relative-path ` @@ -108,104 +151,265 @@ Manage MCR **Usage:** `ffs-dev mcr ` +KEEP THIS UNTIL PRODUCTION-READY : Defined in: sdk/cli/ffs-dev/src/cli/mcr/mod.rs + ###### **Subcommands:** -* `network` — ??? -* `protocol` — The subcommands of the `mcr-protocol` CLI 2 +* `network` — Subcommands for bringing-up an MCR network +* `protocol` — Subcommands for the MCR protocol ## `ffs-dev mcr network` -??? +Subcommands for bringing-up an MCR network **Usage:** `ffs-dev mcr network ` +KEEP THIS UNTIL PRODUCTION-READY : Defined in: network/mcr/cli/network/src/cli/mod.rs + +###### **Subcommands:** + +* `markdown` — Generates markdown for the CLI +* `client` — The client-specific commands of the MCR network +* `coordinator` — The coordinator-specific commands of the MCR network + + + +## `ffs-dev mcr network markdown` + +Generates markdown for the CLI + +**Usage:** `ffs-dev mcr network markdown ` + ###### **Subcommands:** -* `run` — ??? -* `client` — ??? -* `coordinator` — ??? +* `generate` — Generate and update the documentation +* `file` — Print the documentation to a file (providing the file path) +* `print` — Print the documentation in the shell +* `workspace` — Generate the documentation for the workspace + + +## `ffs-dev mcr network markdown generate` +Generate and update the documentation + +**Usage:** `ffs-dev mcr network markdown generate [OPTIONS]` + +###### **Options:** -## `ffs-dev mcr network run` +* `--file ` — Override the default docs location -??? -**Usage:** `ffs-dev mcr network run` + +## `ffs-dev mcr network markdown file` + +Print the documentation to a file (providing the file path) + +**Usage:** `ffs-dev mcr network markdown file --file ` + +###### **Options:** + +* `--file ` — the file to write out to + + + +## `ffs-dev mcr network markdown print` + +Print the documentation in the shell + +**Usage:** `ffs-dev mcr network markdown print` + + + +## `ffs-dev mcr network markdown workspace` + +Generate the documentation for the workspace + +**Usage:** `ffs-dev mcr network markdown workspace --relative-path ` + +###### **Options:** + +* `--relative-path ` — The file to write out to, relative to the crate root ## `ffs-dev mcr network client` -??? +The client-specific commands of the MCR network **Usage:** `ffs-dev mcr network client ` ###### **Subcommands:** -* `run` — ??? +* `markdown` — Generates markdown for the CLI -## `ffs-dev mcr network client run` +## `ffs-dev mcr network client markdown` -??? +Generates markdown for the CLI -**Usage:** `ffs-dev mcr network client run` +**Usage:** `ffs-dev mcr network client markdown ` + +###### **Subcommands:** + +* `generate` — Generate and update the documentation +* `file` — Print the documentation to a file (providing the file path) +* `print` — Print the documentation in the shell +* `workspace` — Generate the documentation for the workspace + + + +## `ffs-dev mcr network client markdown generate` + +Generate and update the documentation + +**Usage:** `ffs-dev mcr network client markdown generate [OPTIONS]` + +###### **Options:** + +* `--file ` — Override the default docs location + + + +## `ffs-dev mcr network client markdown file` + +Print the documentation to a file (providing the file path) + +**Usage:** `ffs-dev mcr network client markdown file --file ` + +###### **Options:** + +* `--file ` — the file to write out to + + + +## `ffs-dev mcr network client markdown print` + +Print the documentation in the shell + +**Usage:** `ffs-dev mcr network client markdown print` + + + +## `ffs-dev mcr network client markdown workspace` + +Generate the documentation for the workspace + +**Usage:** `ffs-dev mcr network client markdown workspace --relative-path ` + +###### **Options:** + +* `--relative-path ` — The file to write out to, relative to the crate root ## `ffs-dev mcr network coordinator` -??? +The coordinator-specific commands of the MCR network **Usage:** `ffs-dev mcr network coordinator ` ###### **Subcommands:** -* `run` — ??? -* `eth` — ??? +* `markdown` — Generate markdown for the CLI +* `eth` — Ethereum-specific commands of the network coordinator, i.e., for bringing-up an Ethereum-based MCR network + + + +## `ffs-dev mcr network coordinator markdown` + +Generate markdown for the CLI + +**Usage:** `ffs-dev mcr network coordinator markdown ` + +###### **Subcommands:** + +* `generate` — Generate and update the documentation +* `file` — Print the documentation to a file (providing the file path) +* `print` — Print the documentation in the shell +* `workspace` — Generate the documentation for the workspace + + + +## `ffs-dev mcr network coordinator markdown generate` + +Generate and update the documentation + +**Usage:** `ffs-dev mcr network coordinator markdown generate [OPTIONS]` + +###### **Options:** + +* `--file ` — Override the default docs location + + + +## `ffs-dev mcr network coordinator markdown file` + +Print the documentation to a file (providing the file path) + +**Usage:** `ffs-dev mcr network coordinator markdown file --file ` + +###### **Options:** + +* `--file ` — the file to write out to + +## `ffs-dev mcr network coordinator markdown print` -## `ffs-dev mcr network coordinator run` +Print the documentation in the shell -??? +**Usage:** `ffs-dev mcr network coordinator markdown print` -**Usage:** `ffs-dev mcr network coordinator run` + + +## `ffs-dev mcr network coordinator markdown workspace` + +Generate the documentation for the workspace + +**Usage:** `ffs-dev mcr network coordinator markdown workspace --relative-path ` + +###### **Options:** + +* `--relative-path ` — The file to write out to, relative to the crate root ## `ffs-dev mcr network coordinator eth` -??? +Ethereum-specific commands of the network coordinator, i.e., for bringing-up an Ethereum-based MCR network **Usage:** `ffs-dev mcr network coordinator eth ` +KEEP THIS UNTIL PRODUCTION-READY : Defined in: network/mcr/cli/coordinator/src/cli/eth/mod.rs + ###### **Subcommands:** -* `anvil` — ??? -* `live` — ??? +* `anvil` — Anvil-specific commands of the network coordinator, i.e., for bringing-up an MCR network on Anvil +* `live` — Live-Ethereum-based commands of the network coordinator, i.e., for bringing-up an MCR network on a live Ethereum network ## `ffs-dev mcr network coordinator eth anvil` -??? +Anvil-specific commands of the network coordinator, i.e., for bringing-up an MCR network on Anvil **Usage:** `ffs-dev mcr network coordinator eth anvil ` +KEEP THIS UNTIL PRODUCTION-READY : Defined in: network/mcr/cli/coordinator/src/cli/eth/anvil/mod.rs + ###### **Subcommands:** -* `up` — ??? +* `up` — Brings-up an MCR network on Anvil ## `ffs-dev mcr network coordinator eth anvil up` -??? +Brings-up an MCR network on Anvil **Usage:** `ffs-dev mcr network coordinator eth anvil up ` @@ -237,10 +441,10 @@ Run up with all parameters passed explicitly as CLI flags. See Orfile documentat Default value: `1000000000000000000000000` * `--custodians ` — The custodians By default this should be an empty vector -* `--initial-commitment-height ` — The initial block height +* `--initial-commitment-height ` — The initial block height Default value: `1` -* `--leading-commitment-tolerance ` — The leading block tolerance +* `--leading-commitment-tolerance ` — The leading block tolerance Default value: `10` * `--epoch-duration ` — The epoch duration @@ -248,7 +452,7 @@ Run up with all parameters passed explicitly as CLI flags. See Orfile documentat Default value: `1000000` * `--reward-contract ` — The reward contract * `--proxy-admin ` — The existing proxy admin -* `--move-token-proxy ` — The existing move token proxy +* `--token-proxy ` — The existing move token proxy * `--staking-proxy ` — The existing staking proxy * `--mcr-proxy ` — The existing MCR proxy * `--reward-proxy ` — The existing ARO proxy @@ -266,7 +470,7 @@ Run up with parameters from environment variables, config files, and CLI flags. ###### **Arguments:** -* `` +* `` — Extra arguments to be passed to the CLI ###### **Options:** @@ -278,19 +482,21 @@ Run up with parameters from environment variables, config files, and CLI flags. ## `ffs-dev mcr network coordinator eth live` -??? +Live-Ethereum-based commands of the network coordinator, i.e., for bringing-up an MCR network on a live Ethereum network **Usage:** `ffs-dev mcr network coordinator eth live ` +KEEP THIS UNTIL PRODUCTION-READY : Defined in: network/mcr/cli/coordinator/src/cli/eth/live/mod.rs + ###### **Subcommands:** -* `up` — The arguments to be passed to the Forge Apply script +* `up` — Brings-up an MCR network on a live Ethereum network ## `ffs-dev mcr network coordinator eth live up` -The arguments to be passed to the Forge Apply script +Brings-up an MCR network on a live Ethereum network **Usage:** `ffs-dev mcr network coordinator eth live up [OPTIONS] --signer-identifier --fork-url --contract-admin ` @@ -309,10 +515,10 @@ The arguments to be passed to the Forge Apply script Default value: `1000000000000000000000000` * `--custodians ` — The custodians By default this should be an empty vector -* `--initial-commitment-height ` — The initial block height +* `--initial-commitment-height ` — The initial block height Default value: `1` -* `--leading-commitment-tolerance ` — The leading block tolerance +* `--leading-commitment-tolerance ` — The leading block tolerance Default value: `10` * `--epoch-duration ` — The epoch duration @@ -320,7 +526,7 @@ The arguments to be passed to the Forge Apply script Default value: `1000000` * `--reward-contract ` — The reward contract * `--proxy-admin ` — The existing proxy admin -* `--move-token-proxy ` — The existing move token proxy +* `--token-proxy ` — The existing move token proxy * `--staking-proxy ` — The existing staking proxy * `--mcr-proxy ` — The existing MCR proxy * `--reward-proxy ` — The existing ARO proxy @@ -330,63 +536,181 @@ The arguments to be passed to the Forge Apply script ## `ffs-dev mcr protocol` -The subcommands of the `mcr-protocol` CLI 2 +Subcommands for the MCR protocol **Usage:** `ffs-dev mcr protocol ` ###### **Subcommands:** -* `run` — ??? -* `client` — ??? +* `markdown` — Generates markdown for the CLI +* `client` — The client-specific commands of the MCR protocol +* `deployer` — The deployer-specific commands of the MCR protocol + +## `ffs-dev mcr protocol markdown` + +Generates markdown for the CLI + +**Usage:** `ffs-dev mcr protocol markdown ` + +###### **Subcommands:** + +* `generate` — Generate and update the documentation +* `file` — Print the documentation to a file (providing the file path) +* `print` — Print the documentation in the shell +* `workspace` — Generate the documentation for the workspace + + + +## `ffs-dev mcr protocol markdown generate` + +Generate and update the documentation + +**Usage:** `ffs-dev mcr protocol markdown generate [OPTIONS]` + +###### **Options:** + +* `--file ` — Override the default docs location + + + +## `ffs-dev mcr protocol markdown file` + +Print the documentation to a file (providing the file path) + +**Usage:** `ffs-dev mcr protocol markdown file --file ` + +###### **Options:** + +* `--file ` — the file to write out to + -## `ffs-dev mcr protocol run` -??? +## `ffs-dev mcr protocol markdown print` -**Usage:** `ffs-dev mcr protocol run` +Print the documentation in the shell + +**Usage:** `ffs-dev mcr protocol markdown print` + + + +## `ffs-dev mcr protocol markdown workspace` + +Generate the documentation for the workspace + +**Usage:** `ffs-dev mcr protocol markdown workspace --relative-path ` + +###### **Options:** + +* `--relative-path ` — The file to write out to, relative to the crate root ## `ffs-dev mcr protocol client` -??? +The client-specific commands of the MCR protocol **Usage:** `ffs-dev mcr protocol client ` +KEEP THIS UNTIL PRODUCTION-READY : Defined in: protocol/mcr/cli/client/src/cli/mod.rs + ###### **Subcommands:** -* `run` — ??? -* `eth` — ??? -* `post-commitment` — Post a commitment to an MCR implementation -* `deploy` — Deploy MCR contracts using deployer-core +* `markdown` — Generates markdown for the CLI +* `eth` — Ethereum-specific commands of the protocol, such as staking and committing + + + +## `ffs-dev mcr protocol client markdown` + +Generates markdown for the CLI + +**Usage:** `ffs-dev mcr protocol client markdown ` + +###### **Subcommands:** + +* `generate` — Generate and update the documentation +* `file` — Print the documentation to a file (providing the file path) +* `print` — Print the documentation in the shell +* `workspace` — Generate the documentation for the workspace + + + +## `ffs-dev mcr protocol client markdown generate` + +Generate and update the documentation +**Usage:** `ffs-dev mcr protocol client markdown generate [OPTIONS]` + +###### **Options:** + +* `--file ` — Override the default docs location + + + +## `ffs-dev mcr protocol client markdown file` + +Print the documentation to a file (providing the file path) + +**Usage:** `ffs-dev mcr protocol client markdown file --file ` + +###### **Options:** + +* `--file ` — the file to write out to -## `ffs-dev mcr protocol client run` -??? +## `ffs-dev mcr protocol client markdown print` -**Usage:** `ffs-dev mcr protocol client run` +Print the documentation in the shell + +**Usage:** `ffs-dev mcr protocol client markdown print` + + + +## `ffs-dev mcr protocol client markdown workspace` + +Generate the documentation for the workspace + +**Usage:** `ffs-dev mcr protocol client markdown workspace --relative-path ` + +###### **Options:** + +* `--relative-path ` — The file to write out to, relative to the crate root ## `ffs-dev mcr protocol client eth` -??? +Ethereum-specific commands of the protocol, such as staking and committing **Usage:** `ffs-dev mcr protocol client eth ` +KEEP THIS UNTIL PRODUCTION-READY : Defined in: protocol/mcr/cli/client/src/cli/eth/mod.rs + ###### **Subcommands:** -* `post-admin-commitment` — +* `post-admin-commitment` — Force a commitment (admin only) +* `post-commitment` — Post a single commitment +* `post-commitment-batch` — Post a batch of commitments +* `stream-commitments` — Stream commitments +* `get-commitment` — Get a commitment for a given height and attester +* `get-accepted-commitment-at-height` — Get accepted commitment at a specific height +* `get-posted-commitment-at-height` — Get posted commitment at a specific height +* `get-max-tolerable-commitment-height` — Get max tolerable commitment height +* `stake` — Stake tokens for the MCR domain +* `get-stake` — Get the current epoch stake for an attester +* `unstake` — Unstake tokens from the MCR domain +* `grant-trusted-attester` — Grant TRUSTED_ATTESTER role to an attester ## `ffs-dev mcr protocol client eth post-admin-commitment` -**Usage:** `ffs-dev mcr protocol client eth post-admin-commitment [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries ` +Force a commitment (admin only) + +**Usage:** `ffs-dev mcr protocol client eth post-admin-commitment [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address --commitment-id --commitment-value ` ###### **Options:** @@ -398,119 +722,233 @@ The subcommands of the `mcr-protocol` CLI 2 * `--run-commitment-admin-mode` — Whether to run in settlement admin mode * `--gas-limit ` — The gas limit for transactions * `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address +* `--height ` — The commitment height at which to commit +* `--commitment-id ` — The commitment id to commit +* `--commitment-value ` — The commitment value to commit -## `ffs-dev mcr protocol client post-commitment` +## `ffs-dev mcr protocol client eth post-commitment` -Post a commitment to an MCR implementation +Post a single commitment -**Usage:** `ffs-dev mcr protocol client post-commitment [OPTIONS]` +**Usage:** `ffs-dev mcr protocol client eth post-commitment [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address --height --commitment-id --commitment-value ` ###### **Options:** -* `--commitment-hex ` — Hex-encoded commitment -* `--preimage-string ` — String to be hashed into a commitment +* `--mcr-contract-address ` — The address of the MCR settlement contract +* `--rpc-url ` — The Ethereum RPC connection URL +* `--ws-url ` — The Ethereum WebSocket connection URL +* `--chain-id ` — The Ethereum chain ID +* `--signer-identifier ` — The signer identifier +* `--run-commitment-admin-mode` — Whether to run in settlement admin mode +* `--gas-limit ` — The gas limit for transactions +* `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address +* `--height ` — The height of the commitment block at which to commit +* `--commitment-id ` — The id of the commitment block at which to commit +* `--commitment-value ` — The commitment value to commit -## `ffs-dev mcr protocol client deploy` +## `ffs-dev mcr protocol client eth post-commitment-batch` -Deploy MCR contracts using deployer-core +Post a batch of commitments -**Usage:** `ffs-dev mcr protocol client deploy ` +**Usage:** `ffs-dev mcr protocol client eth post-commitment-batch [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address --height --commitment-id --commitment-value ` -###### **Subcommands:** +###### **Options:** -* `anvil` — Deploy to local Anvil network +* `--mcr-contract-address ` — The address of the MCR settlement contract +* `--rpc-url ` — The Ethereum RPC connection URL +* `--ws-url ` — The Ethereum WebSocket connection URL +* `--chain-id ` — The Ethereum chain ID +* `--signer-identifier ` — The signer identifier +* `--run-commitment-admin-mode` — Whether to run in settlement admin mode +* `--gas-limit ` — The gas limit for transactions +* `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address +* `--height ` — The height of the block to commit +* `--commitment-id ` — The id of the block to commit +* `--commitment-value ` — The commitment value to commit -## `ffs-dev mcr protocol client deploy anvil` +## `ffs-dev mcr protocol client eth stream-commitments` -Deploy to local Anvil network +Stream commitments -**Usage:** `ffs-dev mcr protocol client deploy anvil [OPTIONS] --admin --private-key ` +**Usage:** `ffs-dev mcr protocol client eth stream-commitments [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address ` ###### **Options:** -* `--admin ` — Admin address for deployed contracts -* `--rpc-url ` — RPC URL (defaults to http://localhost:8545) +* `--mcr-contract-address ` — The address of the MCR settlement contract +* `--rpc-url ` — The Ethereum RPC connection URL +* `--ws-url ` — The Ethereum WebSocket connection URL +* `--chain-id ` — The Ethereum chain ID +* `--signer-identifier ` — The signer identifier +* `--run-commitment-admin-mode` — Whether to run in settlement admin mode +* `--gas-limit ` — The gas limit for transactions +* `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address + + + +## `ffs-dev mcr protocol client eth get-commitment` + +Get a commitment for a given height and attester + +**Usage:** `ffs-dev mcr protocol client eth get-commitment [OPTIONS] --height --attester --mcr-address ` + +###### **Options:** + +* `--height ` — Block height to check commitment for +* `--attester ` — Attester address to check commitment for +* `--mcr-address ` — MCR contract address +* `--rpc-url ` — RPC URL (optional, defaults to http://localhost:8545) Default value: `http://localhost:8545` -* `--private-key ` — Private key for deployment +* `--private-key ` — Private key for signing transactions (optional) -## `ffs-dev pcp` +## `ffs-dev mcr protocol client eth get-accepted-commitment-at-height` -Manage PCP +Get accepted commitment at a specific height -**Usage:** `ffs-dev pcp ` +**Usage:** `ffs-dev mcr protocol client eth get-accepted-commitment-at-height [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address --height ` -###### **Subcommands:** +###### **Options:** -* `protocol` — ??? ??? +* `--mcr-contract-address ` — The address of the MCR settlement contract +* `--rpc-url ` — The Ethereum RPC connection URL +* `--ws-url ` — The Ethereum WebSocket connection URL +* `--chain-id ` — The Ethereum chain ID +* `--signer-identifier ` — The signer identifier +* `--run-commitment-admin-mode` — Whether to run in settlement admin mode +* `--gas-limit ` — The gas limit for transactions +* `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address +* `--height ` — The height to get the commitment for -## `ffs-dev pcp protocol` +## `ffs-dev mcr protocol client eth get-posted-commitment-at-height` -??? ??? +Get posted commitment at a specific height -**Usage:** `ffs-dev pcp protocol ` +**Usage:** `ffs-dev mcr protocol client eth get-posted-commitment-at-height [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address --height ` -###### **Subcommands:** +###### **Options:** -* `run` — -* `client` — The subcommands of the `pcp-protocol-client` CLI +* `--mcr-contract-address ` — The address of the MCR settlement contract +* `--rpc-url ` — The Ethereum RPC connection URL +* `--ws-url ` — The Ethereum WebSocket connection URL +* `--chain-id ` — The Ethereum chain ID +* `--signer-identifier ` — The signer identifier +* `--run-commitment-admin-mode` — Whether to run in settlement admin mode +* `--gas-limit ` — The gas limit for transactions +* `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address +* `--height ` — The height to get the commitment for -## `ffs-dev pcp protocol run` +## `ffs-dev mcr protocol client eth get-max-tolerable-commitment-height` -**Usage:** `ffs-dev pcp protocol run` +Get max tolerable commitment height +**Usage:** `ffs-dev mcr protocol client eth get-max-tolerable-commitment-height [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address ` +###### **Options:** -## `ffs-dev pcp protocol client` +* `--mcr-contract-address ` — The address of the MCR settlement contract +* `--rpc-url ` — The Ethereum RPC connection URL +* `--ws-url ` — The Ethereum WebSocket connection URL +* `--chain-id ` — The Ethereum chain ID +* `--signer-identifier ` — The signer identifier +* `--run-commitment-admin-mode` — Whether to run in settlement admin mode +* `--gas-limit ` — The gas limit for transactions +* `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address -The subcommands of the `pcp-protocol-client` CLI -**Usage:** `ffs-dev pcp protocol client ` -###### **Subcommands:** +## `ffs-dev mcr protocol client eth stake` -* `run` — -* `eth` — -* `post-commitment` — Post a commitment to an PCP implementation -* `deploy` — Deploy PCP contracts using deployer-core +Stake tokens for the MCR domain + +**Usage:** `ffs-dev mcr protocol client eth stake [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address --amount ` + +###### **Options:** + +* `--mcr-contract-address ` — The address of the MCR settlement contract +* `--rpc-url ` — The Ethereum RPC connection URL +* `--ws-url ` — The Ethereum WebSocket connection URL +* `--chain-id ` — The Ethereum chain ID +* `--signer-identifier ` — The signer identifier +* `--run-commitment-admin-mode` — Whether to run in settlement admin mode +* `--gas-limit ` — The gas limit for transactions +* `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address +* `--amount ` — Amount to stake -## `ffs-dev pcp protocol client run` +## `ffs-dev mcr protocol client eth get-stake` -**Usage:** `ffs-dev pcp protocol client run` +Get the current epoch stake for an attester +**Usage:** `ffs-dev mcr protocol client eth get-stake [OPTIONS] --attester --custodian --mcr-address ` +###### **Options:** -## `ffs-dev pcp protocol client eth` +* `--private-key ` — Private key for signing transactions (optional) -**Usage:** `ffs-dev pcp protocol client eth ` + Default value: `0x1111111111111111111111111111111111111111111111111111111111111111` +* `--rpc-url ` — RPC URL (optional, defaults to http://localhost:8545) -###### **Subcommands:** + Default value: `http://localhost:8545` +* `--attester ` — The attester address +* `--custodian ` — The custodian (MOVE token) address +* `--mcr-address ` — The MCR contract address -* `post-admin-commitment` — +## `ffs-dev mcr protocol client eth unstake` -## `ffs-dev pcp protocol client eth post-admin-commitment` +Unstake tokens from the MCR domain -**Usage:** `ffs-dev pcp protocol client eth post-admin-commitment [OPTIONS] --pcp-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries ` +**Usage:** `ffs-dev mcr protocol client eth unstake [OPTIONS] --mcr-contract-address --rpc-url --ws-url --chain-id --signer-identifier --gas-limit --transaction-send-retries --mcr-address --commitment-lead-tolerance --move-token-address --staking-address --amount ` ###### **Options:** -* `--pcp-contract-address ` — The address of the PCP settlement contract +* `--mcr-contract-address ` — The address of the MCR settlement contract * `--rpc-url ` — The Ethereum RPC connection URL * `--ws-url ` — The Ethereum WebSocket connection URL * `--chain-id ` — The Ethereum chain ID @@ -518,47 +956,193 @@ The subcommands of the `pcp-protocol-client` CLI * `--run-commitment-admin-mode` — Whether to run in settlement admin mode * `--gas-limit ` — The gas limit for transactions * `--transaction-send-retries ` — The number of retries for sending transactions +* `--mcr-address ` — The MCR address +* `--commitment-lead-tolerance ` — The block lead tolerance +* `--move-token-address ` — The move token address +* `--staking-address ` — The staking address +* `--amount ` — Amount to unstake -## `ffs-dev pcp protocol client post-commitment` +## `ffs-dev mcr protocol client eth grant-trusted-attester` -Post a commitment to an PCP implementation +Grant TRUSTED_ATTESTER role to an attester -**Usage:** `ffs-dev pcp protocol client post-commitment [OPTIONS]` +**Usage:** `ffs-dev mcr protocol client eth grant-trusted-attester --attester --mcr-address --private-key ` ###### **Options:** -* `--commitment-hex ` — Hex-encoded commitment -* `--preimage-string ` — String to be hashed into a commitment +* `--attester ` — The address to grant TRUSTED_ATTESTER role to +* `--mcr-address ` — The MCR contract address +* `--private-key ` — The private key to use for signing transactions -## `ffs-dev pcp protocol client deploy` +## `ffs-dev mcr protocol deployer` -Deploy PCP contracts using deployer-core +The deployer-specific commands of the MCR protocol -**Usage:** `ffs-dev pcp protocol client deploy ` +**Usage:** `ffs-dev mcr protocol deployer ` ###### **Subcommands:** -* `anvil` — Deploy to local Anvil network +* `markdown` — +* `eth` — + + +## `ffs-dev mcr protocol deployer markdown` + +**Usage:** `ffs-dev mcr protocol deployer markdown ` + +###### **Subcommands:** +* `generate` — Generate and update the documentation +* `file` — Print the documentation to a file (providing the file path) +* `print` — Print the documentation in the shell +* `workspace` — Generate the documentation for the workspace -## `ffs-dev pcp protocol client deploy anvil` -Deploy to local Anvil network -**Usage:** `ffs-dev pcp protocol client deploy anvil [OPTIONS] --admin --private-key ` +## `ffs-dev mcr protocol deployer markdown generate` + +Generate and update the documentation + +**Usage:** `ffs-dev mcr protocol deployer markdown generate [OPTIONS]` ###### **Options:** -* `--admin ` — Admin address for deployed contracts -* `--rpc-url ` — RPC URL (defaults to http://localhost:8545) +* `--file ` — Override the default docs location - Default value: `http://localhost:8545` -* `--private-key ` — Private key for deployment + + +## `ffs-dev mcr protocol deployer markdown file` + +Print the documentation to a file (providing the file path) + +**Usage:** `ffs-dev mcr protocol deployer markdown file --file ` + +###### **Options:** + +* `--file ` — the file to write out to + + + +## `ffs-dev mcr protocol deployer markdown print` + +Print the documentation in the shell + +**Usage:** `ffs-dev mcr protocol deployer markdown print` + + + +## `ffs-dev mcr protocol deployer markdown workspace` + +Generate the documentation for the workspace + +**Usage:** `ffs-dev mcr protocol deployer markdown workspace --relative-path ` + +###### **Options:** + +* `--relative-path ` — The file to write out to, relative to the crate root + + + +## `ffs-dev mcr protocol deployer eth` + +**Usage:** `ffs-dev mcr protocol deployer eth ` + +###### **Subcommands:** + +* `apply` — +* `destroy` — + + + +## `ffs-dev mcr protocol deployer eth apply` + +**Usage:** `ffs-dev mcr protocol deployer eth apply ` + +###### **Subcommands:** + +* `where` — Run config with all parameters passed explicitly as CLI flags. See Orfile documentation for more details: +* `using` — Run config with parameters from environment variables, config files, and CLI flags. See Orfile documentation for more details: + + + +## `ffs-dev mcr protocol deployer eth apply where` + +Run config with all parameters passed explicitly as CLI flags. See Orfile documentation for more details: + +**Usage:** `ffs-dev mcr protocol deployer eth apply where [OPTIONS] --signer-identifier --fork-url --contract-admin ` + +###### **Options:** + +* `--signer-identifier ` — The signer identifier +* `--fork-url ` — The fork url for deployment +* `--contract-admin ` — Admin address for deployed contracts +* `--token-name ` — The token name + + Default value: `Move Token` +* `--token-symbol ` — The token symbol + + Default value: `MOVE` +* `--initial-token-mint ` — The initial token mint + + Default value: `1000000000000000000000000` +* `--custodians ` — The custodians By default this should be an empty vector +* `--initial-commitment-height ` — The initial block height + + Default value: `1` +* `--leading-commitment-tolerance ` — The leading block tolerance + + Default value: `10` +* `--epoch-duration ` — The epoch duration + + Default value: `1000000` +* `--reward-contract ` — The reward contract +* `--proxy-admin ` — The existing proxy admin +* `--token-proxy ` — The existing move token proxy +* `--staking-proxy ` — The existing staking proxy +* `--mcr-proxy ` — The existing MCR proxy +* `--reward-proxy ` — The existing ARO proxy +* `--jsonl-prefix ` — The JSONL prefix to give to the output from the deployer + + + +## `ffs-dev mcr protocol deployer eth apply using` + +Run config with parameters from environment variables, config files, and CLI flags. See Orfile documentation for more details: + +**Usage:** `ffs-dev mcr protocol deployer eth apply using [OPTIONS] --signer-identifier --fork-url [EXTRA_ARGS]...` + +###### **Arguments:** + +* `` — Extra arguments to be passed to the CLI + +###### **Options:** + +* `--script-args-path ` +* `--signer-identifier ` — The signer identifier +* `--fork-url ` — The fork url for deployment +* `--jsonl-prefix ` — The JSONL prefix to give to the output from the deployer + + + +## `ffs-dev mcr protocol deployer eth destroy` + +**Usage:** `ffs-dev mcr protocol deployer eth destroy [OPTIONS] --signer-identifier --fork-url --proxy-admin --token-proxy --staking-proxy --mcr-proxy --reward-proxy ` + +###### **Options:** + +* `--signer-identifier ` — The signer identifier +* `--fork-url ` — The fork url for deployment +* `--proxy-admin ` — The proxy admin +* `--token-proxy ` — The move token proxy +* `--staking-proxy ` — The staking proxy +* `--mcr-proxy ` — The mcr proxy +* `--reward-proxy ` — The reward proxy +* `--jsonl-prefix ` — The JSONL prefix to give to the output from the deployer