diff --git a/Cargo.lock b/Cargo.lock index 56704e36..a1d7d0df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -172,12 +172,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - [[package]] name = "base64" version = "0.13.1" @@ -276,17 +270,6 @@ dependencies = [ "cty", ] -[[package]] -name = "blake2b_simd" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "constant_time_eq 0.1.5", -] - [[package]] name = "blake2b_simd" version = "1.0.1" @@ -370,25 +353,11 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "bls-signatures" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b44c36726a8b4cae930903a96f3193b496664ed7c28f74f1c1b3feae0e212c3" -dependencies = [ - "blst", - "blstrs", - "fff", - "groupy", - "rand_core 0.5.1", - "thiserror", -] - [[package]] name = "blst" -version = "0.3.3" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd7cb1b48c09ac759808ad27811ca44e27c037d309f837651fc80506bc19819f" +checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" dependencies = [ "cc", "glob", @@ -396,18 +365,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "blstrs" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecf78c2e543a5fd41b41499fc242d603862b436dc2c167658e7f4870523781ac" -dependencies = [ - "blst", - "fff", - "groupy", - "rand_core 0.5.1", -] - [[package]] name = "bs58" version = "0.2.5" @@ -523,17 +480,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "cid" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff0e3bc0b6446b3f9663c1a6aba6ef06c5aeaa1bc92bd18077be337198ab9768" -dependencies = [ - "multibase 0.8.0", - "multihash 0.13.2", - "unsigned-varint 0.5.1", -] - [[package]] name = "cid" version = "0.10.1" @@ -541,7 +487,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd94671561e36e4e7de75f753f577edafb0e7c05d6e4547229fdf7938fbcd2c3" dependencies = [ "core2", - "multibase 0.9.1", + "multibase", "multihash 0.18.1", "serde", "serde_bytes", @@ -555,7 +501,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" dependencies = [ "core2", - "multibase 0.9.1", + "multibase", "multihash 0.19.1", "unsigned-varint 0.8.0", ] @@ -616,7 +562,7 @@ name = "coin-btc-fork" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bech32 0.9.1", "bitcoin", "bitcoin_hashes", @@ -641,7 +587,7 @@ name = "coin-ckb" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bech32 0.9.1", "bitcoin", "blake2b-rs", @@ -661,7 +607,7 @@ name = "coin-cosmos" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bech32 0.9.1", "bitcoin", "bitcoin_hashes", @@ -703,7 +649,7 @@ name = "coin-ethereum" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bitcoin", "bitcoin_hashes", "bytes", @@ -736,25 +682,25 @@ version = "0.1.0" dependencies = [ "anyhow", "base32", - "base64 0.13.1", + "base64", "bech32 0.9.1", "bitcoin", "bitcoin_hashes", "blake2b-rs", "bytes", - "forest_address", + "cid 0.11.1", "forest_bigint", - "forest_cid", - "forest_crypto", - "forest_encoding", - "forest_message", - "forest_vm", + "fvm_ipld_encoding", + "fvm_shared", "hex", "ikc-common", "ikc-device", "ikc-transport", "linked-hash-map", + "multihash-codetable", + "num", "num-bigint 0.4.6", + "num-derive", "num-integer", "num-traits", "prost", @@ -762,6 +708,9 @@ dependencies = [ "secp256k1", "serde", "serde_json", + "serde_tuple", + "strum 0.26.3", + "strum_macros 0.26.4", ] [[package]] @@ -786,7 +735,7 @@ version = "0.1.0" dependencies = [ "anyhow", "bitcoin", - "blake2b_simd 1.0.1", + "blake2b_simd", "hex", "ikc-common", "ikc-device", @@ -818,12 +767,6 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "constant_time_eq" version = "0.2.6" @@ -922,16 +865,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cs_serde_cbor" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7b77425566bdb3932243a292a4b072e1e34fb93aba95926f8d4a3b6ce542c5" -dependencies = [ - "half", - "serde", -] - [[package]] name = "ctr" version = "0.9.2" @@ -1001,41 +934,6 @@ dependencies = [ "syn 2.0.69", ] -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core", - "quote", - "syn 1.0.109", -] - [[package]] name = "dashmap" version = "5.5.3" @@ -1102,31 +1000,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" -[[package]] -name = "derive_builder" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0" -dependencies = [ - "darling", - "derive_builder_core", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "derive_builder_core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "derive_more" version = "0.99.17" @@ -1364,18 +1237,6 @@ dependencies = [ "instant", ] -[[package]] -name = "fff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2544d325b4870bd803d371a7df3c6845e84dcfcb6ebe7ffcae0eac6d5d676133" -dependencies = [ - "byteorder 1.4.3", - "cc", - "lazy_static", - "rand_core 0.5.1", -] - [[package]] name = "fiat-crypto" version = "0.2.5" @@ -1430,24 +1291,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -[[package]] -name = "forest_address" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36b7dbc8805f7d93e4a3c63a5be26dd521d3a62b20cc9453eaf722022d7f8ee" -dependencies = [ - "data-encoding", - "data-encoding-macro", - "forest_encoding", - "leb128", - "log", - "num-derive 0.3.3", - "num-traits", - "once_cell", - "serde", - "thiserror", -] - [[package]] name = "forest_bigint" version = "0.1.4" @@ -1460,98 +1303,6 @@ dependencies = [ "serde", ] -[[package]] -name = "forest_cid" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1a935d7f977a7debbc507de2ab7990b834d85e94c819e5268b1adaefd7d434" -dependencies = [ - "cid 0.6.1", - "cs_serde_bytes", - "cs_serde_cbor", - "forest_json_utils", - "generic-array 0.14.7", - "integer-encoding", - "multibase 0.9.1", - "multihash 0.13.2", - "serde", -] - -[[package]] -name = "forest_crypto" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecfe12e10b7f6aa5643dcde74533d8192720ab7366ce473ff4043c71b5132c27" -dependencies = [ - "bls-signatures", - "forest_address", - "forest_encoding", - "libsecp256k1 0.6.0", - "num-derive 0.3.3", - "num-traits", - "serde", - "thiserror", -] - -[[package]] -name = "forest_encoding" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c8339c6dc1741c3144ba06cfb0512a2e858bd603be97bff24bf630d91cce7d" -dependencies = [ - "blake2b_simd 0.5.11", - "cs_serde_bytes", - "cs_serde_cbor", - "forest_cid", - "serde", - "serde_repr", - "serde_tuple", - "thiserror", -] - -[[package]] -name = "forest_json_utils" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da39ba6848c04b22e70520a1339f04f304502a0ebfd4526ea8a566452ea62a8" -dependencies = [ - "serde", -] - -[[package]] -name = "forest_message" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c512b9fbaea31e6bbc98c10ae32568a87b7d99b8c1f63d334ec91c482b35d30" -dependencies = [ - "derive_builder", - "forest_address", - "forest_bigint", - "forest_cid", - "forest_crypto", - "forest_encoding", - "forest_vm", - "num-traits", - "serde", -] - -[[package]] -name = "forest_vm" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cba5f1b93b15568dc4d96b333c73a1949bfba11ce539a6b5495c02e9a9d9190a" -dependencies = [ - "forest_address", - "forest_bigint", - "forest_cid", - "forest_encoding", - "lazy_static", - "num-derive 0.3.3", - "num-traits", - "serde", - "thiserror", -] - [[package]] name = "fragile" version = "2.0.0" @@ -1690,7 +1441,7 @@ checksum = "6a907c935312f9a47a64fbe1d45f2cb7b2b0a5fbb989a90ecac395b40466069d" dependencies = [ "anyhow", "bitflags 2.4.1", - "blake2b_simd 1.0.1", + "blake2b_simd", "cid 0.10.1", "data-encoding", "data-encoding-macro", @@ -1698,7 +1449,7 @@ dependencies = [ "lazy_static", "multihash 0.18.1", "num-bigint 0.4.6", - "num-derive 0.4.2", + "num-derive", "num-integer", "num-traits", "serde", @@ -1762,18 +1513,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "groupy" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d38f1bec17d75a7c30b754cd74db6e7cb5927529021ced14fbd622411c04d8b" -dependencies = [ - "fff", - "rand 0.7.3", - "rand_xorshift", - "thiserror", -] - [[package]] name = "h2" version = "0.3.26" @@ -1793,12 +1532,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - [[package]] name = "hash-db" version = "0.15.2" @@ -1928,9 +1661,9 @@ checksum = "fc736091aacb31ddaa4cd5f6988b3c21e99913ac846b41f32538c5fae5d71bfe" [[package]] name = "http" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -1950,9 +1683,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" @@ -2032,18 +1765,12 @@ dependencies = [ "cc", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "ikc" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bitcoin", "bytes", "coin-bch", @@ -2077,7 +1804,7 @@ version = "0.1.0" dependencies = [ "aes", "anyhow", - "base64 0.13.1", + "base64", "bitcoin", "byteorder 1.4.3", "bytes", @@ -2108,7 +1835,7 @@ name = "ikc-device" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bytes", "hex", "ikc-common", @@ -2219,12 +1946,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "integer-encoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c27df786dcc3a75ccd134f83ece166af0a1e5785d52b12b7375d0d063e1d5c47" - [[package]] name = "integer-sqrt" version = "0.1.5" @@ -2312,12 +2033,6 @@ dependencies = [ "spin", ] -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - [[package]] name = "libc" version = "0.2.140" @@ -2330,25 +2045,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" -[[package]] -name = "libsecp256k1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" -dependencies = [ - "arrayref", - "base64 0.12.3", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core 0.2.2", - "libsecp256k1-gen-ecmult 0.2.1", - "libsecp256k1-gen-genmult 0.2.1", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "typenum", -] - [[package]] name = "libsecp256k1" version = "0.7.1" @@ -2356,29 +2052,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ "arrayref", - "base64 0.13.1", + "base64", "digest 0.9.0", "hmac-drbg", - "libsecp256k1-core 0.3.0", - "libsecp256k1-gen-ecmult 0.3.0", - "libsecp256k1-gen-genmult 0.3.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", "rand 0.8.5", "serde", "sha2 0.9.9", "typenum", ] -[[package]] -name = "libsecp256k1-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - [[package]] name = "libsecp256k1-core" version = "0.3.0" @@ -2390,31 +2075,13 @@ dependencies = [ "subtle", ] -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" -dependencies = [ - "libsecp256k1-core 0.2.2", -] - [[package]] name = "libsecp256k1-gen-ecmult" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" dependencies = [ - "libsecp256k1-core 0.3.0", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" -dependencies = [ - "libsecp256k1-core 0.2.2", + "libsecp256k1-core", ] [[package]] @@ -2423,7 +2090,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" dependencies = [ - "libsecp256k1-core 0.3.0", + "libsecp256k1-core", ] [[package]] @@ -2560,17 +2227,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "multibase" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b78c60039650ff12e140ae867ef5299a58e19dded4d334c849dc7177083667e2" -dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", -] - [[package]] name = "multibase" version = "0.9.1" @@ -2582,25 +2238,13 @@ dependencies = [ "data-encoding-macro", ] -[[package]] -name = "multihash" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dac63698b887d2d929306ea48b63760431ff8a24fac40ddb22f9c7f49fb7cab" -dependencies = [ - "blake2b_simd 0.5.11", - "generic-array 0.14.7", - "multihash-derive 0.7.2", - "unsigned-varint 0.5.1", -] - [[package]] name = "multihash" version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfd8a792c1694c6da4f68db0a9d707c72bd260994da179e6030a5dcee00bb815" dependencies = [ - "blake2b_simd 1.0.1", + "blake2b_simd", "blake2s_simd", "blake3", "core2", @@ -2629,7 +2273,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c35f0fb09f635b18e95053fc2a9a4843272d3acf898792a14471dcf6f83df0cc" dependencies = [ - "blake2b_simd 1.0.1", + "blake2b_simd", "blake2s_simd", "blake3", "core2", @@ -2642,20 +2286,6 @@ dependencies = [ "strobe-rs", ] -[[package]] -name = "multihash-derive" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure 0.12.6", -] - [[package]] name = "multihash-derive" version = "0.8.1" @@ -2703,11 +2333,10 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2792,17 +2421,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "num-derive" version = "0.4.2" @@ -2904,9 +2522,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.62" +version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ "bitflags 2.4.1", "cfg-if", @@ -2936,9 +2554,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.98" +version = "0.9.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" dependencies = [ "cc", "libc", @@ -3140,9 +2758,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "platforms" @@ -3424,15 +3042,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_xorshift" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77d416b86801d23dde1aa643023b775c3a462efc0ed96443add11546cdf1dca8" -dependencies = [ - "rand_core 0.5.1", -] - [[package]] name = "redox_syscall" version = "0.3.5" @@ -3724,9 +3333,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.2" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -3737,9 +3346,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -3952,9 +3561,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -4048,7 +3657,7 @@ dependencies = [ "hash256-std-hasher", "impl-serde", "lazy_static", - "libsecp256k1 0.7.1", + "libsecp256k1", "log", "merlin", "num-traits", @@ -4123,7 +3732,7 @@ dependencies = [ "bytes", "futures", "hash-db", - "libsecp256k1 0.7.1", + "libsecp256k1", "log", "parity-scale-codec", "parking_lot", @@ -4433,12 +4042,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - [[package]] name = "strum" version = "0.24.1" @@ -4581,7 +4184,7 @@ version = "0.1.0" dependencies = [ "anyhow", "base58", - "base64 0.13.1", + "base64", "bytes", "ethereum-types", "hex", @@ -4622,7 +4225,7 @@ name = "tcx-atom" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bech32 0.9.1", "bytes", "prost", @@ -4638,7 +4241,7 @@ name = "tcx-btc-kin" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bch_addr", "bech32 0.9.1", "bitcoin", @@ -4749,7 +4352,7 @@ name = "tcx-eos" version = "0.1.0" dependencies = [ "anyhow", - "base64 0.13.1", + "base64", "bitcoin", "bytes", "prost", @@ -4807,7 +4410,7 @@ version = "0.1.0" dependencies = [ "anyhow", "base32", - "base64 0.13.1", + "base64", "blake2b-rs", "byteorder 1.4.3", "bytes", @@ -4817,7 +4420,7 @@ dependencies = [ "lazy_static", "multihash-codetable", "num", - "num-derive 0.4.2", + "num-derive", "num-traits", "prost", "serde", @@ -4869,7 +4472,7 @@ version = "0.1.0" dependencies = [ "anyhow", "base58", - "base64 0.13.1", + "base64", "bytes", "hex", "lazy_static", @@ -4904,7 +4507,7 @@ dependencies = [ "anyhow", "bitcoin", "bitcoin_hashes", - "blake2b_simd 1.0.1", + "blake2b_simd", "blst", "byteorder 1.4.3", "digest 0.10.6", @@ -4946,7 +4549,7 @@ version = "0.1.0" dependencies = [ "anyhow", "base58", - "base64 0.13.1", + "base64", "byteorder 1.4.3", "bytes", "parity-scale-codec", @@ -4986,7 +4589,7 @@ version = "0.1.0" dependencies = [ "anyhow", "bitcoin", - "blake2b_simd 1.0.1", + "blake2b_simd", "bytes", "hex", "prost", @@ -5199,16 +4802,15 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -5407,12 +5009,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "unsigned-varint" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fdeedbf205afadfe39ae559b75c3240f24e257d0ca27e85f85cb82aa19ac35" - [[package]] name = "unsigned-varint" version = "0.7.2" diff --git a/imkey-core/ikc-wallet/coin-filecoin/Cargo.toml b/imkey-core/ikc-wallet/coin-filecoin/Cargo.toml index e8e354fc..eac290c4 100644 --- a/imkey-core/ikc-wallet/coin-filecoin/Cargo.toml +++ b/imkey-core/ikc-wallet/coin-filecoin/Cargo.toml @@ -17,6 +17,7 @@ hex = "=0.4.3" secp256k1 = {version ="=0.24.3", features = ["rand", "recovery"] } bech32 = "=0.9.1" num-bigint = "=0.4.6" +num = "0.4.3" num-traits = "=0.2.19" num-integer = "=0.1.46" base64 = "=0.13.1" @@ -31,12 +32,14 @@ blake2b-rs = "=0.2.0" serde = { version = "=1.0.165", features = ["derive"] } serde_json = "=1.0.89" -forest_vm = "=0.3.2" -forest_message = "=0.7.2" -forest_address = "=0.3.2" -forest_encoding = "=0.2.2" -forest_cid = "=0.3.0" -forest_crypto = "=0.5.3" +multihash-codetable = { version = "=0.1.3", features = ["blake2b"] } +cid = "=0.11.1" +fvm_shared = "=4.3.1" +fvm_ipld_encoding = "0.4.0" +serde_tuple = "0.5.0" +strum_macros = "0.26.3" +strum = { version = "0.26.3", features = ["derive"] } num_bigint_chainsafe = { package = "forest_bigint", version = "=0.1.4"} bitcoin = "=0.29.2" +num-derive = "0.4.2" diff --git a/imkey-core/ikc-wallet/coin-filecoin/src/transaction.rs b/imkey-core/ikc-wallet/coin-filecoin/src/transaction.rs index 1338b936..c03cb09c 100644 --- a/imkey-core/ikc-wallet/coin-filecoin/src/transaction.rs +++ b/imkey-core/ikc-wallet/coin-filecoin/src/transaction.rs @@ -2,6 +2,7 @@ use crate::address::FilecoinAddress; use crate::filecoinapi::{FilecoinTxInput, FilecoinTxOutput, Signature}; use crate::utils::{digest, HashSize}; use crate::Result; +use std::borrow::Cow; use ikc_common::apdu::{ApduCheck, Secp256k1Apdu}; use ikc_common::error::CoinError; @@ -9,46 +10,132 @@ use ikc_common::utility::{hex_to_bytes, secp256k1_sign}; use ikc_common::{constants, path, utility, SignParam}; use ikc_device::device_binding::KEY_MANAGER; -use anyhow::anyhow; -use forest_address::Address; -use forest_cid::Cid; -use forest_encoding::Cbor; -use forest_message::UnsignedMessage as ForestUnsignedMessage; -use forest_vm::{Serialized, TokenAmount}; use ikc_transport::message::send_apdu_timeout; use secp256k1::ecdsa::Signature as SecpSignature; use std::str::FromStr; +use num::FromPrimitive; +use num_derive::FromPrimitive; + +use crate::utils::CidCborExt; +use cid::{Cid, CidGeneric}; +use fvm_ipld_encoding::RawBytes; +use fvm_ipld_encoding::{ + de, + repr::{Deserialize_repr, Serialize_repr}, + ser, strict_bytes, +}; +use fvm_shared::address::Address; +use fvm_shared::econ::TokenAmount; +use fvm_shared::message::Message as ForestUnsignedMessage; +use serde_tuple::{self, Deserialize_tuple, Serialize_tuple}; +use std::convert::TryFrom; + #[derive(Default, Debug, Clone, PartialEq, Eq)] pub struct Transaction {} +fn str_to_token_amount(str: &str) -> TokenAmount { + TokenAmount::from_atto(u64::from_str(str).unwrap()) +} + +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub struct ForestSignature { + pub sig_type: SignatureType, + pub bytes: Vec, +} + +impl ser::Serialize for ForestSignature { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: ser::Serializer, + { + let mut bytes = Vec::with_capacity(self.bytes.len() + 1); + // Insert signature type byte + bytes.push(self.sig_type as u8); + bytes.extend_from_slice(&self.bytes); + + strict_bytes::Serialize::serialize(&bytes, serializer) + } +} + +impl<'de> de::Deserialize<'de> for ForestSignature { + fn deserialize(deserializer: D) -> std::result::Result + where + D: de::Deserializer<'de>, + { + let bytes: Cow<'de, [u8]> = strict_bytes::Deserialize::deserialize(deserializer)?; + match bytes.split_first() { + None => Err(de::Error::custom("Cannot deserialize empty bytes")), + Some((&sig_byte, rest)) => { + // Remove signature type byte + let sig_type = SignatureType::from_u8(sig_byte).ok_or_else(|| { + de::Error::custom(format!( + "Invalid signature type byte (must be 1, 2 or 3), was {}", + sig_byte + )) + })?; + + Ok(ForestSignature { + bytes: rest.to_vec(), + sig_type, + }) + } + } + } +} + +#[derive(PartialEq, Clone, Debug, Serialize_tuple, Deserialize_tuple, Hash, Eq)] +pub struct ForestSignedMessage { + pub message: ForestUnsignedMessage, + pub signature: ForestSignature, +} + +#[derive( + Clone, + Debug, + PartialEq, + FromPrimitive, + Copy, + Eq, + Serialize_repr, + Deserialize_repr, + Hash, + strum::Display, + strum::EnumString, +)] +#[repr(u8)] +#[strum(serialize_all = "lowercase")] +pub enum SignatureType { + Secp256k1 = 1, + Bls = 2, + Delegated = 3, +} + impl Transaction { fn convert_message(message: &FilecoinTxInput) -> Result { let to = Address::from_str(&message.to).map_err(|_| CoinError::InvalidAddress)?; let from = Address::from_str(&message.from).map_err(|_| CoinError::InvalidAddress)?; - let value = TokenAmount::from_str(&message.value).map_err(|_| CoinError::InvalidNumber)?; + let value = str_to_token_amount(&message.value); let gas_limit = message.gas_limit; - let gas_fee_cap = - TokenAmount::from_str(&message.gas_fee_cap).map_err(|_| CoinError::InvalidNumber)?; - let gas_premium = - TokenAmount::from_str(&message.gas_premium).map_err(|_| CoinError::InvalidNumber)?; + let gas_fee_cap = str_to_token_amount(&message.gas_fee_cap); + let gas_premium = str_to_token_amount(&message.gas_premium); let message_params_bytes = base64::decode(&message.params).map_err(|_| CoinError::InvalidParam)?; - let params = Serialized::new(message_params_bytes); - - let tmp = ForestUnsignedMessage::builder() - .to(to) - .from(from) - .sequence(message.nonce) - .value(value) - .method_num(message.method) - .params(params) - .gas_limit(gas_limit) - .gas_premium(gas_premium) - .gas_fee_cap(gas_fee_cap) - .build() - .map_err(|_| CoinError::InvalidFormat)?; + let params = RawBytes::from(message_params_bytes); + + let tmp = ForestUnsignedMessage { + version: 0, + from, + to, + sequence: message.nonce, + value, + method_num: message.method, + params, + gas_limit: gas_limit as u64, + gas_fee_cap, + gas_premium, + }; Ok(tmp) } @@ -72,7 +159,7 @@ impl Transaction { let res_msg_pubkey = FilecoinAddress::get_pub_key(sign_param.path.as_str())?; let pubkey_raw = hex_to_bytes(&res_msg_pubkey[..130]).unwrap(); - let mut cid: Cid = unsigned_message.cid()?; + let mut cid: Cid = as CidCborExt>::from_cbor_blake2b256(&unsigned_message)?; let data = &digest(&cid.to_bytes(), HashSize::Default); //organize data @@ -137,14 +224,15 @@ impl Transaction { data_arr[0..64].copy_from_slice(&normalizes_sig_vec[0..64]); data_arr[64] = rec_id.to_i32() as u8; - let forest_sig = forest_crypto::Signature::new_secp256k1(data_arr.to_vec()); - let forest_signed_msg = forest_message::SignedMessage { + let forest_sig = ForestSignature { + sig_type: SignatureType::Secp256k1, + bytes: data_arr.clone().to_vec(), + }; + let forest_signed_msg = ForestSignedMessage { message: unsigned_message, signature: forest_sig, }; - cid = forest_signed_msg - .cid() - .map_err(|_e| anyhow!("{}", "forest_message cid error"))?; + cid = as CidCborExt>::from_cbor_blake2b256(&forest_signed_msg)?; let signature_type = 1; diff --git a/imkey-core/ikc-wallet/coin-filecoin/src/utils.rs b/imkey-core/ikc-wallet/coin-filecoin/src/utils.rs index 3d24863e..458a7fbf 100644 --- a/imkey-core/ikc-wallet/coin-filecoin/src/utils.rs +++ b/imkey-core/ikc-wallet/coin-filecoin/src/utils.rs @@ -1,4 +1,7 @@ use blake2b_rs::Blake2bBuilder; +use cid::Cid; +use fvm_ipld_encoding::Error; +use multihash_codetable::{Code, MultihashDigest}; pub enum HashSize { Checksum = 4, @@ -17,6 +20,24 @@ pub fn digest(ingest: &[u8], hash_size: HashSize) -> Vec { result[0..size].to_vec() } +/// Extension methods for constructing `dag-cbor` [Cid] +pub trait CidCborExt { + /// Default CID builder for Filecoin + /// + /// - The default codec is [`fvm_ipld_encoding::DAG_CBOR`] + /// - The default hash function is 256 bit BLAKE2b + /// + /// This matches [`abi.CidBuilder`](https://github.com/filecoin-project/go-state-types/blob/master/abi/cid.go#L49) in go + fn from_cbor_blake2b256(obj: &S) -> Result { + let bytes = fvm_ipld_encoding::to_vec(obj)?; + Ok(Cid::new_v1( + fvm_ipld_encoding::DAG_CBOR, + Code::Blake2b256.digest(&bytes), + )) + } +} + +impl CidCborExt for Cid {} #[cfg(test)] mod tests { use crate::utils::{digest, HashSize}; diff --git a/token-core/tcx-filecoin/Cargo.toml b/token-core/tcx-filecoin/Cargo.toml index fe9e2cbc..8bd6b7d7 100644 --- a/token-core/tcx-filecoin/Cargo.toml +++ b/token-core/tcx-filecoin/Cargo.toml @@ -23,12 +23,6 @@ serde = { version = "=1.0.165", features = ["derive"] } serde_json = "=1.0.89" base64 = "=0.13.1" lazy_static = "=1.4.0" -#forest_vm = "=0.3.2" -#forest_message = "=0.7.2" -#forest_address = "=0.3.2" -#forest_encoding = "=0.2.2" -#forest_cid = "=0.3.0" -#forest_crypto = "0.5.3" thiserror = "=1.0.56" diff --git a/token-core/tcx-filecoin/src/signer.rs b/token-core/tcx-filecoin/src/signer.rs index 48133600..d53283f7 100644 --- a/token-core/tcx-filecoin/src/signer.rs +++ b/token-core/tcx-filecoin/src/signer.rs @@ -1,30 +1,22 @@ use crate::transaction::{Signature, SignedMessage, UnsignedMessage}; use crate::utils::{digest, HashSize}; use crate::Error; -use anyhow::anyhow; use fvm_shared::address::Address; use std::borrow::Cow; -// use forest_cid::Cid; -// use forest_encoding::Cbor; -// use forest_message::UnsignedMessage as ForestUnsignedMessage; -use fvm_shared::message::Message as ForestUnsignedMessage; -// use forest_vm::{Serialized, TokenAmount}; +use crate::utils::CidCborExt; use cid::{Cid, CidGeneric}; -use std::convert::TryFrom; -use std::str::FromStr; -// use forest_encoding::Cbor; use fvm_ipld_encoding::RawBytes; -// use forest_vm::Serialized; -use crate::utils::CidCborExt; use fvm_ipld_encoding::{ de, repr::{Deserialize_repr, Serialize_repr}, ser, strict_bytes, }; -use fvm_shared::bigint::BigInt; use fvm_shared::econ::TokenAmount; +use fvm_shared::message::Message as ForestUnsignedMessage; use serde_tuple::{self, Deserialize_tuple, Serialize_tuple}; +use std::convert::TryFrom; +use std::str::FromStr; use tcx_constants::CurveType; use tcx_keystore::{tcx_ensure, Keystore, Result, SignatureParameters, Signer, TransactionSigner}; diff --git a/token-core/tcx-primitive/Cargo.toml b/token-core/tcx-primitive/Cargo.toml index d23ddc8d..2da7e089 100644 --- a/token-core/tcx-primitive/Cargo.toml +++ b/token-core/tcx-primitive/Cargo.toml @@ -25,7 +25,7 @@ tiny-bip39 = "=1.0.0" ed25519-bip32 = "=0.3.2" ed25519-dalek = "=2.1.0" blake2b_simd = "=1.0.1" -blst = "=0.3.3" +blst = "=0.3.12" num-bigint = "=0.4.6" num-traits = "=0.2.19" sha2 = "=0.10.6"