diff --git a/.changeset/fair-deers-kneel.md b/.changeset/fair-deers-kneel.md new file mode 100644 index 000000000..668392fd3 --- /dev/null +++ b/.changeset/fair-deers-kneel.md @@ -0,0 +1,6 @@ +--- +"@fuel-connectors/evm-connector": minor +"@fuels/connectors": minor +--- + +Migrate the EVM Connector package as evm-connector diff --git a/packages/connectors/package.json b/packages/connectors/package.json index 7ccd448ea..b4346518e 100644 --- a/packages/connectors/package.json +++ b/packages/connectors/package.json @@ -11,9 +11,7 @@ "types": "./dist/index.d.ts" } }, - "files": [ - "dist" - ], + "files": ["dist"], "scripts": { "build": "tsup", "build:watch": "tsup --watch", @@ -26,6 +24,7 @@ "@fuel-connectors/fuel-development-wallet": "workspace:*", "@fuel-connectors/fuel-wallet": "workspace:*", "@fuel-connectors/fuelet-wallet": "workspace:*", + "@fuel-connectors/evm-connector": "workspace:*", "fuels": "0.79.0", "terser": "5.29.2", "tsup": "8.0.2", diff --git a/packages/connectors/src/index.ts b/packages/connectors/src/index.ts index 235cb6381..af6f3b5dd 100644 --- a/packages/connectors/src/index.ts +++ b/packages/connectors/src/index.ts @@ -2,3 +2,4 @@ export * from './defaultConnectors'; export * from '@fuel-connectors/fuel-development-wallet'; export * from '@fuel-connectors/fuel-wallet'; export * from '@fuel-connectors/fuelet-wallet'; +export * from '@fuel-connectors/evm-connector'; diff --git a/packages/evm-connector/package.json b/packages/evm-connector/package.json new file mode 100644 index 000000000..98d247a84 --- /dev/null +++ b/packages/evm-connector/package.json @@ -0,0 +1,47 @@ +{ + "name": "@fuel-connectors/evm-connector", + "version": "0.1.1", + "type": "module", + "files": ["dist"], + "main": "./dist/wallet-connector-evm.umd.cjs", + "module": "./dist/wallet-connector-evm.js", + "exports": { + ".": { + "import": "./dist/wallet-connector-evm.js", + "require": "./dist/wallet-connector-evm.umd.cjs" + } + }, + "types": "./dist/index.d.ts", + "scripts": { + "build:forc": "pnpm fuels-forc build --release --path ./signature-verification", + "build:resources": "pnpm run build:forc && tsup --dts-only ./src/utils/generatePredicateResources.ts", + "build": "pnpm run build:resources && tsup --dts-only", + "build:watch": "pnpm run build:resources && tsup --watch --dts-only", + "ts:check": "tsc --noEmit", + "test": "vitest" + }, + "peerDependencies": { + "fuels": ">=0.77.0" + }, + "dependencies": { + "@ethereumjs/util": "^9.0.1", + "@ethersproject/bytes": "^5.7.0", + "memoizee": "^0.4.15" + }, + "devDependencies": { + "@types/memoizee": "^0.4.11", + "@fuel-ts/account": "^0.78.0", + "@fuel-ts/fuel-core": "^0.78.0", + "@fuel-ts/forc": "0.74.0", + "fuels": "^0.78.0", + "jsdom": "24.0.0", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "tsx": "^4.7.0", + "typescript": "5.4.3", + "vite": "^5.0.10", + "vite-plugin-dts": "^3.6.4", + "vitest": "^1.4.0", + "tsup": "8.0.2" + } +} diff --git a/packages/evm-connector/signature-verification/Cargo.lock b/packages/evm-connector/signature-verification/Cargo.lock new file mode 100644 index 000000000..682b510a2 --- /dev/null +++ b/packages/evm-connector/signature-verification/Cargo.lock @@ -0,0 +1,4511 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "ahash" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d713b3834d76b85304d4d525563c1276e2e30dc97cc67bfb4585a4a29fc2c89f" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b09b5178381e0874812a9b157f7fe84982617e48f71f4e3235482775e5b540" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyhow" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + +[[package]] +name = "async-graphql" +version = "4.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9ed522678d412d77effe47b3c82314ac36952a35e6e852093dd48287c421f80" +dependencies = [ + "async-graphql-derive", + "async-graphql-parser", + "async-graphql-value", + "async-stream", + "async-trait", + "base64 0.13.1", + "bytes", + "fnv", + "futures-util", + "http", + "indexmap 1.9.3", + "mime", + "multer", + "num-traits", + "once_cell", + "pin-project-lite", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "static_assertions", + "tempfile", + "thiserror", + "tracing", + "tracing-futures", +] + +[[package]] +name = "async-graphql-derive" +version = "4.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c121a894495d7d3fc3d4e15e0a9843e422e4d1d9e3c514d8062a1c94b35b005d" +dependencies = [ + "Inflector", + "async-graphql-parser", + "darling 0.14.4", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "thiserror", +] + +[[package]] +name = "async-graphql-parser" +version = "4.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b6c386f398145c6180206c1869c2279f5a3d45db5be4e0266148c6ac5c6ad68" +dependencies = [ + "async-graphql-value", + "pest", + "serde", + "serde_json", +] + +[[package]] +name = "async-graphql-value" +version = "4.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a941b499fead4a3fb5392cabf42446566d18c86313f69f2deab69560394d65f" +dependencies = [ + "bytes", + "indexmap 1.9.3", + "serde", + "serde_json", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "async-trait" +version = "0.1.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "auto_impl" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "823b8bb275161044e2ac7a25879cb3e2480cb403e3943022c7c769c599b756aa" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "axum" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acee9fd5073ab6b045a275b3e709c163dd36c90685219cb21804a147b58dba43" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower", + "tower-http", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e5939e02c56fecd5c017c37df4238c0a839fa76b7f97acdd7efb804fd181cc" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "tower-layer", + "tower-service", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "serde", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bs58" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +dependencies = [ + "sha2", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c764d619ca78fccbf3069b37bd7af92577f044bb15236036662d79b6559f25b7" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.0", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "clap" +version = "4.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.0", +] + +[[package]] +name = "clap_derive" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + +[[package]] +name = "coins-bip32" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" +dependencies = [ + "bs58", + "coins-core", + "digest", + "hmac", + "k256", + "serde", + "sha2", + "thiserror", +] + +[[package]] +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" +dependencies = [ + "bitvec", + "coins-bip32", + "hmac", + "once_cell", + "pbkdf2 0.12.2", + "rand", + "sha2", + "thiserror", +] + +[[package]] +name = "coins-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" +dependencies = [ + "base64 0.21.7", + "bech32", + "bs58", + "digest", + "generic-array", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2", + "sha3", + "thiserror", +] + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "const-hex" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d59688ad0945eaf6b84cb44fedbe93484c81b48970e98f09db8a22832d7961" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" +dependencies = [ + "cookie", + "idna 0.3.0", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "counter" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d458e66999348f56fd3ffcfbb7f7951542075ca8359687c703de6500c1ddccd" +dependencies = [ + "num-traits", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "critical-section" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ct-logs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8" +dependencies = [ + "sct 0.6.1", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "cynic" +version = "2.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1afa0591b1021e427e548a1f0f147fe6168f6c7c7f7006bace77f28856051b8" +dependencies = [ + "cynic-proc-macros", + "reqwest", + "serde", + "serde_json", + "static_assertions", + "thiserror", +] + +[[package]] +name = "cynic-codegen" +version = "2.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a1bb05cc554f46079d0fa72abe995a2d32d0737d410a41da75b31e3f7ef768" +dependencies = [ + "counter", + "darling 0.13.4", + "graphql-parser", + "once_cell", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "cynic-proc-macros" +version = "2.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa595c4ed7a5374e0e58c5c34f9d93bd6b7d45062790963bd4b4c3c0bf520c4d" +dependencies = [ + "cynic-codegen", + "syn 1.0.109", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "sha2", + "subtle", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-iterator" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd242f399be1da0a5354aa462d57b4ab2b4ee0683cc552f7c007d2d12d36e94" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03cdc46ec28bd728e67540c528013c6a10eb69a02eb31078a1bda695438cbfb8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes", + "ctr", + "digest", + "hex", + "hmac", + "pbkdf2 0.11.0", + "rand", + "scrypt", + "serde", + "serde_json", + "sha2", + "sha3", + "thiserror", + "uuid 0.8.2", +] + +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", +] + +[[package]] +name = "ethers-core" +version = "2.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aab3cef6cc1c9fd7f787043c81ad3052eff2b96a3878ef1526aa446311bdbfc9" +dependencies = [ + "arrayvec", + "bytes", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array", + "k256", + "num_enum", + "open-fastrlp", + "rand", + "rlp", + "serde", + "serde_json", + "strum 0.25.0", + "tempfile", + "thiserror", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "ethers-signers" +version = "2.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3b125a103b56aef008af5d5fb48191984aa326b50bfd2557d231dc499833de3" +dependencies = [ + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "rand", + "sha2", + "thiserror", + "tracing", +] + +[[package]] +name = "ethnum" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" + +[[package]] +name = "eventsource-client" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9146112ee3ce031aa5aebe3e049e10b1d353b9c7630cc6be488c2c62cc5d9c42" +dependencies = [ + "futures", + "hyper", + "hyper-rustls 0.22.1", + "hyper-timeout", + "log", + "pin-project", + "tokio", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382" + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fuel-abi-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8118789261e77d67569859a06a886d53dbf7bd00ea23a18a2dfae26a1f5be25" +dependencies = [ + "itertools 0.10.5", + "lazy_static", + "proc-macro2", + "quote", + "regex", + "serde", + "serde_json", + "syn 2.0.50", + "thiserror", +] + +[[package]] +name = "fuel-asm" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea884860261efdc7300b63db7972cb0e08e8f5379495ad7cdd2bdb7c0cc4623" +dependencies = [ + "bitflags 2.4.2", + "fuel-types", + "serde", + "strum 0.24.1", +] + +[[package]] +name = "fuel-core" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec6c574639f6c2ea44e31ae9954189aeba45b7202dc3059a9355041e44c04c11" +dependencies = [ + "anyhow", + "async-graphql", + "async-trait", + "axum", + "clap", + "derive_more", + "enum-iterator", + "fuel-core-chain-config", + "fuel-core-consensus-module", + "fuel-core-database", + "fuel-core-executor", + "fuel-core-importer", + "fuel-core-metrics", + "fuel-core-poa", + "fuel-core-producer", + "fuel-core-services", + "fuel-core-storage", + "fuel-core-txpool", + "fuel-core-types", + "futures", + "hex", + "hyper", + "itertools 0.10.5", + "postcard", + "rand", + "serde", + "serde_json", + "strum 0.24.1", + "strum_macros 0.24.3", + "thiserror", + "tokio", + "tokio-stream", + "tower-http", + "tracing", + "uuid 1.7.0", +] + +[[package]] +name = "fuel-core-chain-config" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c4002461d438755868c4fd849b31c86ce96d8dbb8c3d2dc373fca2798807c9f" +dependencies = [ + "anyhow", + "bech32", + "fuel-core-storage", + "fuel-core-types", + "hex", + "itertools 0.10.5", + "postcard", + "serde", + "serde_json", + "serde_with 1.14.0", + "tracing", +] + +[[package]] +name = "fuel-core-client" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ad13a01a2f012cc96f2cf33033128f2fa0bd376489f2db76045eb3eb9035101" +dependencies = [ + "anyhow", + "cynic", + "derive_more", + "eventsource-client", + "fuel-core-types", + "futures", + "hex", + "hyper-rustls 0.24.2", + "itertools 0.10.5", + "reqwest", + "schemafy_lib", + "serde", + "serde_json", + "tai64", + "thiserror", + "tracing", +] + +[[package]] +name = "fuel-core-consensus-module" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae7d7e15deb74b573a23446c25309b0e249bf9ba819911e4a3b805f738ad1c75" +dependencies = [ + "anyhow", + "fuel-core-chain-config", + "fuel-core-poa", + "fuel-core-types", + "tokio", +] + +[[package]] +name = "fuel-core-database" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de6c935d61a94e982eaa5a1741ec33fa9a0287b99740c0e91896dea2b14fbf87" +dependencies = [ + "anyhow", + "derive_more", + "fuel-core-storage", + "fuel-core-types", +] + +[[package]] +name = "fuel-core-executor" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e9fbe27d5e1e74fc9931d987d391af2112276e8dcf0395d26ecbcb496f90af" +dependencies = [ + "anyhow", + "fuel-core-chain-config", + "fuel-core-storage", + "fuel-core-types", + "hex", + "parking_lot", + "tracing", +] + +[[package]] +name = "fuel-core-importer" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "820a579cc9842536b82a85fa214c85d73bb947dc9833ff7c814f4f7995bfc696" +dependencies = [ + "anyhow", + "derive_more", + "fuel-core-metrics", + "fuel-core-storage", + "fuel-core-types", + "tokio", + "tracing", +] + +[[package]] +name = "fuel-core-metrics" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa597e5612ea29b82722d9dcaea8c7b536579125bc731aa8c2d49c211153dc56" +dependencies = [ + "axum", + "once_cell", + "pin-project-lite", + "prometheus-client 0.18.1", + "prometheus-client 0.20.0", + "regex", + "tracing", +] + +[[package]] +name = "fuel-core-poa" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd1704cab002c336b345d8146aca54e5a1a02b603f0ece86090795c21ae797b1" +dependencies = [ + "anyhow", + "async-trait", + "fuel-core-chain-config", + "fuel-core-services", + "fuel-core-storage", + "fuel-core-types", + "tokio", + "tokio-stream", + "tracing", +] + +[[package]] +name = "fuel-core-producer" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8571cdd26b688a54ca273e73c83bba05e6c16f0d3910013115bf35d3ad38e9" +dependencies = [ + "anyhow", + "async-trait", + "derive_more", + "fuel-core-storage", + "fuel-core-types", + "tokio", + "tokio-rayon", + "tracing", +] + +[[package]] +name = "fuel-core-services" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4111fb590d80e761163612f2af67e9992c70a736e65414f355dac46d4926f6ba" +dependencies = [ + "anyhow", + "async-trait", + "fuel-core-metrics", + "futures", + "parking_lot", + "tokio", + "tracing", +] + +[[package]] +name = "fuel-core-storage" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a98d3f35a3714556cd484b49e63510086fd99630caf558a1ac583594476b0a" +dependencies = [ + "anyhow", + "derive_more", + "fuel-core-types", + "fuel-vm", + "primitive-types", +] + +[[package]] +name = "fuel-core-txpool" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b08cbcd7c8843a8bb5ee9eca4fd204455e4cefff498d6ce4e2be9a463f57e93c" +dependencies = [ + "anyhow", + "async-trait", + "fuel-core-chain-config", + "fuel-core-metrics", + "fuel-core-services", + "fuel-core-storage", + "fuel-core-types", + "futures", + "parking_lot", + "tokio", + "tokio-rayon", + "tokio-stream", + "tracing", +] + +[[package]] +name = "fuel-core-types" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a118f93a711e9a2555767235a37566754d265fdb295490abbfd9b93f38ebb640" +dependencies = [ + "anyhow", + "bs58", + "derive_more", + "fuel-vm", + "secrecy", + "serde", + "tai64", + "thiserror", + "zeroize", +] + +[[package]] +name = "fuel-crypto" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e0efe99de550a5b5c12a6a4d2eadd26bc5571cfba82d0133baa2805d485ad8c" +dependencies = [ + "coins-bip32", + "coins-bip39", + "ecdsa", + "ed25519-dalek", + "fuel-types", + "k256", + "lazy_static", + "p256", + "rand", + "secp256k1", + "serde", + "sha2", + "zeroize", +] + +[[package]] +name = "fuel-derive" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff58cf4d01a4fb9440c63a8764154dfd3b07c74e4b3639cce8eea77d67e63a7a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", + "synstructure", +] + +[[package]] +name = "fuel-merkle" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89143dd80b29dda305fbb033bc7f868834445ef6b361bf920f0077938fb6c0bc" +dependencies = [ + "derive_more", + "digest", + "fuel-storage", + "hashbrown 0.13.2", + "hex", + "serde", + "sha2", +] + +[[package]] +name = "fuel-storage" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901aee4b46684e483d2c04d40e5ac1b8ccda737ac5a363507b44b9eb23b0fdaa" + +[[package]] +name = "fuel-tx" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1f65e363e5e9a5412cea204f2d2357043327a0c3da5482c3b38b9da045f20e" +dependencies = [ + "bitflags 2.4.2", + "derivative", + "derive_more", + "fuel-asm", + "fuel-crypto", + "fuel-merkle", + "fuel-types", + "hashbrown 0.14.3", + "itertools 0.10.5", + "rand", + "serde", + "serde_json", + "strum 0.24.1", + "strum_macros 0.24.3", +] + +[[package]] +name = "fuel-types" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "148b59be5c54bafff692310663cbce3f097a2a7ff5533224dcfdf387578a72b0" +dependencies = [ + "fuel-derive", + "hex", + "rand", + "serde", +] + +[[package]] +name = "fuel-vm" +version = "0.43.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aed5ba0cde904f16cd748dc9b33e62f4b3dc5fd0a72ec867c973e687cd7347ba" +dependencies = [ + "async-trait", + "backtrace", + "bitflags 2.4.2", + "derivative", + "derive_more", + "ethnum", + "fuel-asm", + "fuel-crypto", + "fuel-merkle", + "fuel-storage", + "fuel-tx", + "fuel-types", + "hashbrown 0.14.3", + "itertools 0.10.5", + "libm", + "paste", + "percent-encoding", + "primitive-types", + "serde", + "sha3", + "static_assertions", + "strum 0.24.1", + "tai64", +] + +[[package]] +name = "fuels" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d0761be35fa13d61c0220aa4535d3cc990542032abfc006bef709121a402637" +dependencies = [ + "fuel-core", + "fuel-core-client", + "fuel-crypto", + "fuel-tx", + "fuels-accounts", + "fuels-core", + "fuels-macros", + "fuels-programs", + "fuels-test-helpers", +] + +[[package]] +name = "fuels-accounts" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04ddc69fefff879a914aa06b2d7e5396a596399e6db4383015a3d222699f4b31" +dependencies = [ + "async-trait", + "chrono", + "elliptic-curve", + "eth-keystore", + "fuel-core-client", + "fuel-crypto", + "fuel-tx", + "fuel-types", + "fuels-core", + "hex", + "rand", + "semver", + "tai64", + "thiserror", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "fuels-code-gen" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19daefd4e70d4b6998b6650dea23d982360650f8710e5c7bc6e8a5b91228814d" +dependencies = [ + "Inflector", + "fuel-abi-types", + "itertools 0.12.1", + "proc-macro2", + "quote", + "regex", + "serde_json", + "syn 2.0.50", +] + +[[package]] +name = "fuels-core" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0389e16906fbb1119006e5c09ce789aeb6d0d8e344372c077ac8484bab8a12b9" +dependencies = [ + "async-trait", + "bech32", + "chrono", + "fuel-abi-types", + "fuel-asm", + "fuel-core-chain-config", + "fuel-core-client", + "fuel-crypto", + "fuel-tx", + "fuel-types", + "fuel-vm", + "fuels-macros", + "hex", + "itertools 0.12.1", + "serde", + "serde_json", + "sha2", + "thiserror", + "uint", +] + +[[package]] +name = "fuels-macros" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce17afcb07246c221da0d5a55d4ffc748d4b49a0fd7058a90b1ad1c6f0023a7" +dependencies = [ + "fuels-code-gen", + "itertools 0.12.1", + "proc-macro2", + "quote", + "rand", + "syn 2.0.50", +] + +[[package]] +name = "fuels-programs" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7898f4e9f3b438de60b55644806bf2718e1c09e0605180c19fb44a8ca0a1165" +dependencies = [ + "async-trait", + "bytes", + "fuel-abi-types", + "fuel-asm", + "fuel-tx", + "fuel-types", + "fuels-accounts", + "fuels-core", + "itertools 0.12.1", + "rand", + "serde_json", + "tokio", +] + +[[package]] +name = "fuels-test-helpers" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7620c418f9501713c2cd976f216b9d46ff847a4d681af56e36af17ad26dac14e" +dependencies = [ + "fuel-core", + "fuel-core-chain-config", + "fuel-core-client", + "fuel-core-poa", + "fuel-core-services", + "fuel-crypto", + "fuel-tx", + "fuel-types", + "fuels-accounts", + "fuels-core", + "futures", + "hex", + "portpicker", + "rand", + "serde", + "serde_json", + "serde_with 3.6.1", + "tempfile", + "tokio", + "which", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "graphql-parser" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ebc8013b4426d5b81a4364c419a95ed0b404af2b82e2457de52d9348f0e474" +dependencies = [ + "combine", + "thiserror", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.2.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "serde", + "spin 0.9.8", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" +dependencies = [ + "ct-logs", + "futures-util", + "hyper", + "log", + "rustls 0.19.1", + "rustls-native-certs 0.5.0", + "tokio", + "tokio-rustls 0.22.0", + "webpki", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "log", + "rustls 0.21.10", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", + "webpki-roots", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "matchit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "multer" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http", + "httparse", + "log", + "memchr", + "mime", + "spin 0.9.8", + "version_check", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate 2.0.0", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pin-project" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "platforms" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" + +[[package]] +name = "portpicker" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9" +dependencies = [ + "rand", +] + +[[package]] +name = "postcard" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8" +dependencies = [ + "cobs", + "embedded-io", + "heapless", + "serde", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prometheus-client" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" +dependencies = [ + "dtoa", + "itoa", + "parking_lot", + "prometheus-client-derive-text-encode", +] + +[[package]] +name = "prometheus-client" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e227aeb6c2cfec819e999c4773b35f8c7fa37298a203ff46420095458eee567e" +dependencies = [ + "dtoa", + "itoa", + "parking_lot", + "prometheus-client-derive-encode", +] + +[[package]] +name = "prometheus-client-derive-encode" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "prometheus-client-derive-text-encode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "proptest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +dependencies = [ + "bitflags 2.4.2", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax", + "unarray", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +dependencies = [ + "idna 0.3.0", + "psl-types", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" +dependencies = [ + "base64 0.21.7", + "bytes", + "cookie", + "cookie_store", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls 0.24.2", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.10", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-rustls 0.24.1", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rlp-derive", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring 0.16.20", + "sct 0.6.1", + "webpki", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki", + "sct 0.7.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092" +dependencies = [ + "openssl-probe", + "rustls 0.19.1", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[package]] +name = "scale-info" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" +dependencies = [ + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "schemafy_core" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41781ae092f4fd52c9287efb74456aea0d3b90032d2ecad272bd14dbbcb0511b" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "schemafy_lib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e953db32579999ca98c451d80801b6f6a7ecba6127196c5387ec0774c528befa" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "schemafy_core", + "serde", + "serde_derive", + "serde_json", + "syn 1.0.109", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac", + "pbkdf2 0.11.0", + "salsa20", + "sha2", +] + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4124a35fe33ae14259c490fd70fa199a32b9ce9502f2ee6bc4f81ec06fa65894" +dependencies = [ + "rand", + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +dependencies = [ + "serde", + "serde_with_macros", +] + +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "serde_with_macros" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros 0.24.3", +] + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.50", +] + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tai64" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed7401421025f4132e6c1f7af5e7f8287383969f36e6628016cd509b8d3da9dc" +dependencies = [ + "serde", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "thiserror" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "tokio-rayon" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cf33a76e0b1dd03b778f83244137bd59887abf25c0e87bc3e7071105f457693" +dependencies = [ + "rayon", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +dependencies = [ + "rustls 0.19.1", + "tokio", + "webpki", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.10", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.3", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.2.3", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.3", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" +dependencies = [ + "bitflags 1.3.2", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "futures", + "futures-task", + "pin-project", + "tracing", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding", +] + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "uuid" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +dependencies = [ + "getrandom", +] + +[[package]] +name = "verification-predicate" +version = "0.1.0" +dependencies = [ + "ethers-core", + "ethers-signers", + "fuels", + "tokio", +] + +[[package]] +name = "verification-script" +version = "0.1.0" +dependencies = [ + "ethers-core", + "ethers-signers", + "fuels", + "tokio", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.50", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "web-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "which" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] diff --git a/packages/evm-connector/signature-verification/Cargo.toml b/packages/evm-connector/signature-verification/Cargo.toml new file mode 100644 index 000000000..75452fd02 --- /dev/null +++ b/packages/evm-connector/signature-verification/Cargo.toml @@ -0,0 +1,17 @@ +[workspace] +members = ["verification-predicate", "verification-script"] +resolver = "2" + +[workspace.package] +authors = ["Fuel Labs "] +version = "0.1.0" +edition = "2021" +homepage = "https://fuel.network/" +license = "Apache-2.0" +repository = "https://github.com/FuelLabs/EVM-Wallet-Connector" + +[workspace.dependencies] +ethers-core = "2.0" +ethers-signers = "2.0" +fuels = { version = "0.55", features = ["fuel-core-lib"] } +tokio = { version = "1.12", features = ["rt", "macros"] } diff --git a/packages/evm-connector/signature-verification/Forc.lock b/packages/evm-connector/signature-verification/Forc.lock new file mode 100644 index 000000000..2adbac7e5 --- /dev/null +++ b/packages/evm-connector/signature-verification/Forc.lock @@ -0,0 +1,18 @@ +[[package]] +name = "core" +source = "path+from-root-CA4CC436CEE99A83" + +[[package]] +name = "std" +source = "git+https://github.com/fuellabs/sway?tag=v0.50.0#11231184a073a3e9c179d1d2e68c90d205638d45" +dependencies = ["core"] + +[[package]] +name = "verification-predicate" +source = "member" +dependencies = ["std"] + +[[package]] +name = "verification-script" +source = "member" +dependencies = ["std"] diff --git a/packages/evm-connector/signature-verification/Forc.toml b/packages/evm-connector/signature-verification/Forc.toml new file mode 100644 index 000000000..62c9a888a --- /dev/null +++ b/packages/evm-connector/signature-verification/Forc.toml @@ -0,0 +1,2 @@ +[workspace] +members = ["verification-predicate", "verification-script"] diff --git a/packages/evm-connector/signature-verification/README.md b/packages/evm-connector/signature-verification/README.md new file mode 100644 index 000000000..48bbc7323 --- /dev/null +++ b/packages/evm-connector/signature-verification/README.md @@ -0,0 +1,62 @@ +# Overview + +The repository consists of 2 projects + +- verification-predicate +- verification-predicate + +The predicate is used to verify the signer in a transaction is that of a specific EVM wallet. + +The Script exists for the purpose of debugging the predicate. +Scripts can emit logs while predicates cannot therefore values may be inspected in the script. + +The Sway code for the 2 projects ought to be identical except for the declaration of the project type on the first line. +The Rust tests (which utilize our Rust SDK and ethers-rs) ought to be close to identical except for the differences in how we set up scripts and predicates. + +## Building the projects + +Prerequsite: have `forc` installed. + +In the root of the repository run + +```bash +forc build --release +``` + +This will build both projects and is required before tests can be run. + +## Running the tests + +Prerequsite: have `cargo` installed. + +In the root of the repository run + +```bash +cargo test +``` + +This will run the tests for both projects. + +## Continuous Integration (CI) + +To satisfy CI checks run the following commands from the root of the repository. + +Format Sway files + +```bash +forc fmt +``` + +Format Rust files + +```bash +cargo fmt +``` + +Check for Rust code suggestions + +```bash +cargo clippy --all-features --all-targets -- -D warnings +``` + +Any warnings presented by clippy must be resolved. diff --git a/packages/evm-connector/signature-verification/fuel-toolchain.toml b/packages/evm-connector/signature-verification/fuel-toolchain.toml new file mode 100644 index 000000000..2fd4b0e21 --- /dev/null +++ b/packages/evm-connector/signature-verification/fuel-toolchain.toml @@ -0,0 +1,6 @@ +[toolchain] +channel = "beta-5" + +[components] +forc = "0.50.0" +fuel-core = "0.22.0" diff --git a/packages/evm-connector/signature-verification/verification-predicate/Cargo.toml b/packages/evm-connector/signature-verification/verification-predicate/Cargo.toml new file mode 100644 index 000000000..d5aaf38da --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-predicate/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "verification-predicate" +description = "A cargo-generate template for Rust + Sway integration testing." +version = { workspace = true } +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +repository = { workspace = true } + +[dev-dependencies] +ethers-core = { workspace = true } +ethers-signers = { workspace = true } +fuels = { workspace = true } +tokio = { workspace = true } + +[[test]] +harness = true +name = "integration_tests" +path = "tests/harness.rs" diff --git a/packages/evm-connector/signature-verification/verification-predicate/Forc.toml b/packages/evm-connector/signature-verification/verification-predicate/Forc.toml new file mode 100644 index 000000000..b7483f5b9 --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-predicate/Forc.toml @@ -0,0 +1,5 @@ +[project] +authors = ["Fuel Labs "] +entry = "main.sw" +license = "Apache-2.0" +name = "verification-predicate" diff --git a/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json b/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json new file mode 100644 index 000000000..663ee3a9f --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate-abi.json @@ -0,0 +1,65 @@ +{ + "types": [ + { + "typeId": 0, + "type": "b256", + "components": null, + "typeParameters": null + }, + { + "typeId": 1, + "type": "bool", + "components": null, + "typeParameters": null + }, + { + "typeId": 2, + "type": "struct EvmAddress", + "components": [ + { + "name": "value", + "type": 0, + "typeArguments": null + } + ], + "typeParameters": null + }, + { + "typeId": 3, + "type": "u64", + "components": null, + "typeParameters": null + } + ], + "functions": [ + { + "inputs": [ + { + "name": "witness_index", + "type": 3, + "typeArguments": null + } + ], + "name": "main", + "output": { + "name": "", + "type": 1, + "typeArguments": null + }, + "attributes": null + } + ], + "loggedTypes": [], + "messagesTypes": [], + "configurables": [ + { + "name": "SIGNER", + "configurableType": { + "name": "", + "type": 2, + "typeArguments": [] + }, + "offset": 1952 + } + ] +} diff --git a/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root b/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root new file mode 100644 index 000000000..27770df53 --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate-bin-root @@ -0,0 +1 @@ +0xad8bfa6ad9c15d9d57af61964c2372ed1fa1ace00aeefbc8ed5cf07192510d68 \ No newline at end of file diff --git a/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin b/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin new file mode 100644 index 000000000..af05cc157 Binary files /dev/null and b/packages/evm-connector/signature-verification/verification-predicate/out/release/verification-predicate.bin differ diff --git a/packages/evm-connector/signature-verification/verification-predicate/src/main.sw b/packages/evm-connector/signature-verification/verification-predicate/src/main.sw new file mode 100644 index 000000000..8571bf84d --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-predicate/src/main.sw @@ -0,0 +1,101 @@ +predicate; + +use std::{ + b512::B512, + bytes::Bytes, + constants::ZERO_B256, + tx::{ + tx_id, + tx_witness_data, + }, + vm::evm::{ + ecr::ec_recover_evm_address, + evm_address::EvmAddress, + }, +}; + +/// Personal sign prefix for Ethereum inclusive of the 32 bytes for the length of the Tx ID. +/// +/// # Additional Information +/// +/// Take "\x19Ethereum Signed Message:\n32" and converted to hex. +/// The 00000000 at the end is the padding added by Sway to fill the word. +const ETHEREUM_PREFIX = 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000; + +struct SignedData { + /// The id of the transaction to be signed. + transaction_id: b256, + /// EIP-191 personal sign prefix. + ethereum_prefix: b256, + /// Additional data used for reserving memory for hashing (hack). + #[allow(dead_code)] + empty: b256, +} + +configurable { + /// The Ethereum address that signed the transaction. + SIGNER: EvmAddress = EvmAddress { + value: ZERO_B256, + }, +} + +fn main(witness_index: u64) -> bool { + // Retrieve the Ethereum signature from the witness data in the Tx at the specified index. + let signature: B512 = tx_witness_data(witness_index); + + // Hash the Fuel Tx (as the signed message) and attempt to recover the signer from the signature. + let result = ec_recover_evm_address(signature, personal_sign_hash(tx_id())); + + // If the signers match then the predicate has validated the Tx. + if result.is_ok() { + if SIGNER == result.unwrap() { + return true; + } + } + + // Otherwise, an invalid signature has been passed and we invalidate the Tx. + false +} + +/// Return the Keccak-256 hash of the transaction ID in the format of EIP-191. +/// +/// # Arguments +/// +/// * `transaction_id`: [b256] - Fuel Tx ID. +fn personal_sign_hash(transaction_id: b256) -> b256 { + // Hack, allocate memory to reduce manual `asm` code. + let data = SignedData { + transaction_id, + ethereum_prefix: ETHEREUM_PREFIX, + empty: ZERO_B256, + }; + + // Pointer to the data we have signed external to Sway. + let data_ptr = asm(ptr: data.transaction_id) { + ptr + }; + + // The Ethereum prefix is 28 bytes (plus padding we exclude). + // The Tx ID is 32 bytes at the end of the prefix. + let len_to_hash = 28 + 32; + + // Create a buffer in memory to overwrite with the result being the hash. + let mut buffer = b256::min(); + + // Copy the Tx ID to the end of the prefix and hash the exact len of the prefix and id (without + // the padding at the end because that would alter the hash). + asm( + hash: buffer, + tx_id: data_ptr, + end_of_prefix: data_ptr + len_to_hash, + prefix: data.ethereum_prefix, + id_len: 32, + hash_len: len_to_hash, + ) { + mcp end_of_prefix tx_id id_len; + k256 hash prefix hash_len; + } + + // The buffer contains the hash. + buffer +} diff --git a/packages/evm-connector/signature-verification/verification-predicate/tests/harness.rs b/packages/evm-connector/signature-verification/verification-predicate/tests/harness.rs new file mode 100644 index 000000000..e0ff92e78 --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-predicate/tests/harness.rs @@ -0,0 +1,158 @@ +mod utils; + +use utils::{compact, create_predicate, create_transaction}; + +use fuels::{ + accounts::{Account, ViewOnlyAccount}, + prelude::{launch_provider_and_get_wallet, AssetId, TxPolicies}, + tx::Witness, + types::transaction::Transaction, +}; + +use ethers_core::rand::thread_rng; +use ethers_signers::{LocalWallet, Signer as EthSigner}; + +#[tokio::test] +async fn valid_signature_transfers_funds() { + // Create a Fuel wallet which will fund the predicate for test purposes + let fuel_wallet = launch_provider_and_get_wallet().await.unwrap(); + + // Network related + let fuel_provider = fuel_wallet.provider().unwrap(); + + // Create an Ethereum wallet used to sign the Fuel Transaction ID + let ethereum_wallet = LocalWallet::new(&mut thread_rng()); + + // Create the predicate for signature verification + let predicate = create_predicate(ethereum_wallet.address().0, fuel_provider).await; + + // Define the quantity and asset that the predicate account will contain + let starting_balance = 100; + let asset_id = AssetId::default(); + + // Define the amount that will be transferred from the predicate to the recipient for a test + let transfer_amount = 10; + + // Fund the predicate to check the change of balance upon signature recovery + fuel_wallet + .transfer( + &predicate.address().clone(), + starting_balance, + asset_id, + TxPolicies::default(), + ) + .await + .unwrap(); + + // Create a transaction to send to the Fuel network + let mut script_transaction = create_transaction( + &predicate, + asset_id, + starting_balance, + transfer_amount, + fuel_wallet.address(), + fuel_provider, + ) + .await; + + // Now that we have the Tx the Ethereum wallet must sign the ID of the Fuel Tx + let tx_id = script_transaction.id(fuel_provider.chain_id()); + + // Original signature `{ r, s, v }` which is equivalent to [u8; 65] + let signature = ethereum_wallet.sign_message(*tx_id).await.unwrap(); + + // Convert into compact format `[u8; 64]` for Sway + let compact_signature = compact(&signature); + + // Add the signed data as a witness onto the Tx + script_transaction + .append_witness(Witness::from(compact_signature.to_vec())) + .unwrap(); + + // Check predicate balance before sending the Tx + let balance_before = predicate.get_asset_balance(&asset_id).await.unwrap(); + + // Execute the Tx + let _tx_id = fuel_provider + .send_transaction(script_transaction) + .await + .unwrap(); + + // Check predicate balance after sending the Tx + let balance_after = predicate.get_asset_balance(&asset_id).await.unwrap(); + + assert_eq!(balance_before, starting_balance); + assert_eq!(balance_after, starting_balance - transfer_amount); +} + +#[tokio::test] +async fn invalid_signature_reverts_predicate() { + // Create a Fuel wallet which will fund the predicate for test purposes + let fuel_wallet = launch_provider_and_get_wallet().await.unwrap(); + + // Network related + let fuel_provider = fuel_wallet.provider().unwrap(); + + // Create an Ethereum wallet used to sign the Fuel Transaction ID + let ethereum_wallet = LocalWallet::new(&mut thread_rng()); + + // Create the predicate for signature verification + let predicate = create_predicate(ethereum_wallet.address().0, fuel_provider).await; + + // Define the quantity and asset that the predicate account will contain + let starting_balance = 100; + let asset_id = AssetId::default(); + + // Define the amount that will be transferred from the predicate to the recipient for a test + let transfer_amount = 10; + + // Fund the predicate to check the change of balance upon signature recovery + fuel_wallet + .transfer( + &predicate.address().clone(), + starting_balance, + asset_id, + TxPolicies::default(), + ) + .await + .unwrap(); + + // Create a transaction to send to the Fuel network + let mut script_transaction = create_transaction( + &predicate, + asset_id, + starting_balance, + transfer_amount, + fuel_wallet.address(), + fuel_provider, + ) + .await; + + // Now that we have the Tx the Ethereum wallet must sign the ID of the Fuel Tx + let tx_id = script_transaction.id(fuel_provider.chain_id()); + + // Original signature `{ r, s, v }` which is equivalent to [u8; 65] + let signature = ethereum_wallet.sign_message(*tx_id).await.unwrap(); + + // Convert into compact format `[u8; 64]` for Sway + let mut compact_signature = compact(&signature); + + // Invalidate the signature to force a different address to be recovered + // Flipping 1 byte is sufficient to fail recovery + // Keep it within the bounds of a u8 + if compact_signature[0] < 255 { + compact_signature[0] += 1; + } else { + compact_signature[0] -= 1; + } + + // Add the signed data as a witness onto the Tx + script_transaction + .append_witness(Witness::from(compact_signature.to_vec())) + .unwrap(); + + // Execute the Tx, causing a revert because the predicate fails to recovery correct address + let tx_result = fuel_provider.send_transaction(script_transaction).await; + + assert!(tx_result.is_err()); +} diff --git a/packages/evm-connector/signature-verification/verification-predicate/tests/utils/mod.rs b/packages/evm-connector/signature-verification/verification-predicate/tests/utils/mod.rs new file mode 100644 index 000000000..cf9244549 --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-predicate/tests/utils/mod.rs @@ -0,0 +1,87 @@ +use fuels::{ + accounts::{predicate::Predicate, Account}, + prelude::{abigen, AssetId, Bech32Address, Provider, ScriptTransaction, TxPolicies}, + types::{ + transaction_builders::{BuildableTransaction, ScriptTransactionBuilder}, + Bits256, EvmAddress, + }, +}; + +use ethers_core::types::{Signature, U256}; + +const PREDICATE_BINARY_PATH: &str = "./out/release/verification-predicate.bin"; + +abigen!(Predicate( + name = "MyPredicate", + abi = "verification-predicate/out/release/verification-predicate-abi.json" +)); + +fn pad_ethereum_address(eth_wallet_address: &[u8]) -> [u8; 32] { + let mut address: [u8; 32] = [0; 32]; + address[12..].copy_from_slice(eth_wallet_address); + address +} + +pub(crate) async fn create_predicate( + ethereum_address: [u8; 20], + fuel_provider: &Provider, +) -> Predicate { + let padded_ethereum_address = pad_ethereum_address(ðereum_address); + let evm_address = EvmAddress::from(Bits256(padded_ethereum_address)); + + // Create the predicate by setting the signer and pass in the witness argument + let witness_index = 0; + let configurables = MyPredicateConfigurables::new().with_SIGNER(evm_address); + let predicate_data = MyPredicateEncoder::encode_data(witness_index); + + Predicate::load_from(PREDICATE_BINARY_PATH) + .unwrap() + .with_provider(fuel_provider.clone()) + .with_data(predicate_data) + .with_configurables(configurables) +} + +pub(crate) async fn create_transaction( + predicate: &Predicate, + asset_id: AssetId, + starting_balance: u64, + transfer_amount: u64, + recipient: &Bech32Address, + provider: &Provider, +) -> ScriptTransaction { + // Fetch predicate input in order to have a UTXO with funds for transfer + let inputs = predicate + .get_asset_inputs_for_amount(asset_id, starting_balance) + .await + .unwrap(); + + // Specify amount to transfer to recipient, send the rest back to the predicate + let outputs = predicate.get_asset_outputs_for_amount(recipient, asset_id, transfer_amount); + + // Create the Tx + let transaction_builder = ScriptTransactionBuilder::prepare_transfer( + inputs, + outputs, + TxPolicies::default().with_witness_limit(72), + ); + + transaction_builder.build(provider).await.unwrap() +} + +// This can probably be cleaned up +pub(crate) fn compact(signature: &Signature) -> [u8; 64] { + let shifted_parity = U256::from(signature.v - 27) << 255; + + let r = signature.r; + let y_parity_and_s = shifted_parity | signature.s; + + let mut sig = [0u8; 64]; + let mut r_bytes = [0u8; 32]; + let mut s_bytes = [0u8; 32]; + r.to_big_endian(&mut r_bytes); + y_parity_and_s.to_big_endian(&mut s_bytes); + sig[..32].copy_from_slice(&r_bytes); + sig[32..64].copy_from_slice(&s_bytes); + + sig +} diff --git a/packages/evm-connector/signature-verification/verification-script/Cargo.toml b/packages/evm-connector/signature-verification/verification-script/Cargo.toml new file mode 100644 index 000000000..7f635010e --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-script/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "verification-script" +description = "A cargo-generate template for Rust + Sway integration testing." +version = { workspace = true } +edition = { workspace = true } +authors = { workspace = true } +license = { workspace = true } +repository = { workspace = true } + +[dev-dependencies] +ethers-core = { workspace = true } +ethers-signers = { workspace = true } +fuels = { workspace = true } +tokio = { workspace = true } + +[[test]] +harness = true +name = "integration_tests" +path = "tests/harness.rs" diff --git a/packages/evm-connector/signature-verification/verification-script/Forc.toml b/packages/evm-connector/signature-verification/verification-script/Forc.toml new file mode 100644 index 000000000..696ec575e --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-script/Forc.toml @@ -0,0 +1,7 @@ +[project] +authors = ["Fuel Labs "] +entry = "main.sw" +license = "Apache-2.0" +name = "verification-script" + +[dependencies] diff --git a/packages/evm-connector/signature-verification/verification-script/out/release/verification-script-abi.json b/packages/evm-connector/signature-verification/verification-script/out/release/verification-script-abi.json new file mode 100644 index 000000000..e62e89c5a --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-script/out/release/verification-script-abi.json @@ -0,0 +1,65 @@ +{ + "types": [ + { + "typeId": 0, + "type": "b256", + "components": null, + "typeParameters": null + }, + { + "typeId": 1, + "type": "bool", + "components": null, + "typeParameters": null + }, + { + "typeId": 2, + "type": "struct EvmAddress", + "components": [ + { + "name": "value", + "type": 0, + "typeArguments": null + } + ], + "typeParameters": null + }, + { + "typeId": 3, + "type": "u64", + "components": null, + "typeParameters": null + } + ], + "functions": [ + { + "inputs": [ + { + "name": "witness_index", + "type": 3, + "typeArguments": null + } + ], + "name": "main", + "output": { + "name": "", + "type": 1, + "typeArguments": null + }, + "attributes": null + } + ], + "loggedTypes": [], + "messagesTypes": [], + "configurables": [ + { + "name": "SIGNER", + "configurableType": { + "name": "", + "type": 2, + "typeArguments": [] + }, + "offset": 1904 + } + ] +} diff --git a/packages/evm-connector/signature-verification/verification-script/out/release/verification-script-bin-hash b/packages/evm-connector/signature-verification/verification-script/out/release/verification-script-bin-hash new file mode 100644 index 000000000..9432fd2ab --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-script/out/release/verification-script-bin-hash @@ -0,0 +1 @@ +0x77cd4db37e5d831a668fe00d9a5d6dd8b968790274411463f12c01bc58b37c07 \ No newline at end of file diff --git a/packages/evm-connector/signature-verification/verification-script/out/release/verification-script.bin b/packages/evm-connector/signature-verification/verification-script/out/release/verification-script.bin new file mode 100644 index 000000000..16ab4420f Binary files /dev/null and b/packages/evm-connector/signature-verification/verification-script/out/release/verification-script.bin differ diff --git a/packages/evm-connector/signature-verification/verification-script/src/main.sw b/packages/evm-connector/signature-verification/verification-script/src/main.sw new file mode 100644 index 000000000..fde80f7e9 --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-script/src/main.sw @@ -0,0 +1,100 @@ +script; + +use std::{ + b512::B512, + constants::ZERO_B256, + tx::{ + tx_id, + tx_witness_data, + }, + vm::evm::{ + ecr::ec_recover_evm_address, + evm_address::EvmAddress, + }, +}; + +/// Personal sign prefix for Ethereum inclusive of the 32 bytes for the length of the Tx ID. +/// +/// # Additional Information +/// +/// Take "\x19Ethereum Signed Message:\n32" and converted to hex. +/// The 00000000 at the end is the padding added by Sway to fill the word. +const ETHEREUM_PREFIX = 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000; + +struct SignedData { + /// The id of the transaction to be signed. + transaction_id: b256, + /// EIP-191 personal sign prefix. + ethereum_prefix: b256, + /// Additional data used for reserving memory for hashing (hack). + #[allow(dead_code)] + empty: b256, +} + +configurable { + /// The Ethereum address that signed the transaction. + SIGNER: EvmAddress = EvmAddress { + value: ZERO_B256, + }, +} + +fn main(witness_index: u64) -> bool { + // Retrieve the Ethereum signature from the witness data in the Tx at the specified index. + let signature: B512 = tx_witness_data(witness_index); + + // Hash the Fuel Tx (as the signed message) and attempt to recover the signer from the signature. + let result = ec_recover_evm_address(signature, personal_sign_hash(tx_id())); + + // If the signers match then the predicate has validated the Tx. + if result.is_ok() { + if SIGNER == result.unwrap() { + return true; + } + } + + // Otherwise, an invalid signature has been passed and we invalidate the Tx. + false +} + +/// Return the Keccak-256 hash of the transaction ID in the format of EIP-191. +/// +/// # Arguments +/// +/// * `transaction_id`: [b256] - Fuel Tx ID. +fn personal_sign_hash(transaction_id: b256) -> b256 { + // Hack, allocate memory to reduce manual `asm` code. + let data = SignedData { + transaction_id, + ethereum_prefix: ETHEREUM_PREFIX, + empty: ZERO_B256, + }; + + // Pointer to the data we have signed external to Sway. + let data_ptr = asm(ptr: data.transaction_id) { + ptr + }; + + // The Ethereum prefix is 28 bytes (plus padding we exclude). + // The Tx ID is 32 bytes at the end of the prefix. + let len_to_hash = 28 + 32; + + // Create a buffer in memory to overwrite with the result being the hash. + let mut buffer = b256::min(); + + // Copy the Tx ID to the end of the prefix and hash the exact len of the prefix and id (without + // the padding at the end because that would alter the hash). + asm( + hash: buffer, + tx_id: data_ptr, + end_of_prefix: data_ptr + len_to_hash, + prefix: data.ethereum_prefix, + id_len: 32, + hash_len: len_to_hash, + ) { + mcp end_of_prefix tx_id id_len; + k256 hash prefix hash_len; + } + + // The buffer contains the hash. + buffer +} diff --git a/packages/evm-connector/signature-verification/verification-script/tests/harness.rs b/packages/evm-connector/signature-verification/verification-script/tests/harness.rs new file mode 100644 index 000000000..4d1654927 --- /dev/null +++ b/packages/evm-connector/signature-verification/verification-script/tests/harness.rs @@ -0,0 +1,167 @@ +use fuels::{ + prelude::{abigen, launch_provider_and_get_wallet, TxPolicies}, + tx::Witness, + types::{transaction::Transaction, Bits256, EvmAddress}, +}; + +use ethers_core::{ + rand::thread_rng, + types::{Signature, U256}, +}; +use ethers_signers::{LocalWallet, Signer as EthSigner}; + +const SCRIPT_BINARY_PATH: &str = "./out/release/verification-script.bin"; + +abigen!(Script( + name = "MyScript", + abi = "verification-script/out/release/verification-script-abi.json" +)); + +fn convert_eth_address(eth_wallet_address: &[u8]) -> [u8; 32] { + let mut address: [u8; 32] = [0; 32]; + address[12..].copy_from_slice(eth_wallet_address); + address +} + +#[tokio::test] +async fn valid_signature_returns_true_for_validating() { + // Create a Fuel wallet which will fund the predicate for test purposes + let fuel_wallet = launch_provider_and_get_wallet().await.unwrap(); + + // Create eth wallet and convert to EVMAddress + let eth_wallet = LocalWallet::new(&mut thread_rng()); + let padded_eth_address = convert_eth_address(ð_wallet.address().0); + let evm_address = EvmAddress::from(Bits256(padded_eth_address)); + + // Create the predicate by setting the signer and pass in the witness argument + let witness_index = 1; + let configurables = MyScriptConfigurables::new().with_SIGNER(evm_address); + + let script_call_handler = MyScript::new(fuel_wallet.clone(), SCRIPT_BINARY_PATH) + .with_configurables(configurables) + .main(witness_index) + .with_tx_policies( + TxPolicies::default() + .with_witness_limit(144) + .with_script_gas_limit(1_000_000), + ); + + let mut tx = script_call_handler.build_tx().await.unwrap(); + + // Now that we have the Tx the ethereum wallet must sign the ID + let consensus_parameters = fuel_wallet.provider().unwrap().consensus_parameters(); + let tx_id = tx.id(consensus_parameters.chain_id); + + let signature = eth_wallet.sign_message(*tx_id).await.unwrap(); + + // Convert into compact format `[u8; 64]` for Sway + let compact_signature = compact(&signature); + + // Add the signed data as a witness onto the Tx + tx.append_witness(Witness::from(compact_signature.to_vec())) + .unwrap(); + + // Execute the Tx + let tx_id = fuel_wallet + .provider() + .unwrap() + .send_transaction(tx) + .await + .unwrap(); + + let tx_status = fuel_wallet + .provider() + .unwrap() + .tx_status(&tx_id) + .await + .unwrap(); + + let response = script_call_handler.get_response_from(tx_status).unwrap(); + + assert!(response.value); +} + +#[tokio::test] +async fn invalid_signature_returns_false_for_failed_validation() { + // Create a Fuel wallet which will fund the predicate for test purposes + let fuel_wallet = launch_provider_and_get_wallet().await.unwrap(); + + // Create eth wallet and convert to EVMAddress + let eth_wallet = LocalWallet::new(&mut thread_rng()); + let padded_eth_address = convert_eth_address(ð_wallet.address().0); + let evm_address = EvmAddress::from(Bits256(padded_eth_address)); + + // Create the predicate by setting the signer and pass in the witness argument + let witness_index = 1; + let configurables = MyScriptConfigurables::new().with_SIGNER(evm_address); + + let script_call_handler = MyScript::new(fuel_wallet.clone(), SCRIPT_BINARY_PATH) + .with_configurables(configurables) + .main(witness_index) + .with_tx_policies( + TxPolicies::default() + .with_witness_limit(144) + .with_script_gas_limit(1_000_000), + ); + + let mut tx = script_call_handler.build_tx().await.unwrap(); + + // Now that we have the Tx the ethereum wallet must sign the ID + let consensus_parameters = fuel_wallet.provider().unwrap().consensus_parameters(); + let tx_id = tx.id(consensus_parameters.chain_id); + + let signature = eth_wallet.sign_message(*tx_id).await.unwrap(); + + // Convert into compact format `[u8; 64]` for Sway + let mut compact_signature = compact(&signature); + + // Invalidate the signature to force a different address to be recovered + // Flipping 1 byte is sufficient to fail recovery + // Keep it within the bounds of a u8 + if compact_signature[0] < 255 { + compact_signature[0] += 1; + } else { + compact_signature[0] -= 1; + } + + // Add the signed data as a witness onto the Tx + tx.append_witness(Witness::from(compact_signature.to_vec())) + .unwrap(); + + // Execute the Tx + let tx_id = fuel_wallet + .provider() + .unwrap() + .send_transaction(tx) + .await + .unwrap(); + + let tx_status = fuel_wallet + .provider() + .unwrap() + .tx_status(&tx_id) + .await + .unwrap(); + + let response = script_call_handler.get_response_from(tx_status).unwrap(); + + assert!(!response.value); +} + +// This can probably be cleaned up +fn compact(signature: &Signature) -> [u8; 64] { + let shifted_parity = U256::from(signature.v - 27) << 255; + + let r = signature.r; + let y_parity_and_s = shifted_parity | signature.s; + + let mut sig = [0u8; 64]; + let mut r_bytes = [0u8; 32]; + let mut s_bytes = [0u8; 32]; + r.to_big_endian(&mut r_bytes); + y_parity_and_s.to_big_endian(&mut s_bytes); + sig[..32].copy_from_slice(&r_bytes); + sig[32..64].copy_from_slice(&s_bytes); + + sig +} diff --git a/packages/evm-connector/src/EvmWalletConnector.ts b/packages/evm-connector/src/EvmWalletConnector.ts new file mode 100644 index 000000000..d2ee97b30 --- /dev/null +++ b/packages/evm-connector/src/EvmWalletConnector.ts @@ -0,0 +1,430 @@ +import { hexToBytes } from '@ethereumjs/util'; +// External libraries +import { + type BytesLike, + arrayify, + hexlify, + splitSignature, +} from '@ethersproject/bytes'; +import memoize from 'memoizee'; + +import { + type AbiMap, + Address, + type Asset, + type ConnectorMetadata, + FuelConnector, + type InputValue, + type JsonAbi, + type Network, + Predicate, + Provider, + type TransactionRequestLike, + type Version, + getPredicateRoot, + transactionRequestify, +} from 'fuels'; + +import { BETA_5_URL, WINDOW } from './constants'; +import type { EVMWalletConnectorConfig } from './types'; +import type { EIP1193Provider } from './utils/eip-1193'; +import { METAMASK_ICON } from './utils/metamask-icon'; +import { predicates } from './utils/predicateResources'; + +export class EVMWalletConnector extends FuelConnector { + ethProvider: EIP1193Provider | null = null; + fuelProvider: Provider | null = null; + private predicate: { abi: JsonAbi; bytecode: Uint8Array }; + private setupLock = false; + private _currentAccount: string | null = null; + private config: Required; + private _ethereumEvents = 0; + + // metadata placeholder + metadata: ConnectorMetadata = { + image: METAMASK_ICON, + install: { + action: 'Install', + description: 'Install a ethereum Wallet to connect to Fuel', + link: 'https://ethereum.org/en/wallets/find-wallet/', + }, + }; + + constructor(config: EVMWalletConnectorConfig = {}) { + super(); + this.name = 'EVM wallet connector'; + this.predicate = predicates['verification-predicate']; + this.installed = true; + this.config = Object.assign(config, { + fuelProvider: config.fuelProvider || BETA_5_URL, + ethProvider: config.ethProvider || window.ethereum, + }); + this.setupEthereumEvents(); + } + + setupEthereumEvents() { + this._ethereumEvents = Number( + setInterval(() => { + if (WINDOW?.ethereum) { + clearInterval(this._ethereumEvents); + window.dispatchEvent( + new CustomEvent('FuelConnector', { detail: this }), + ); + } + }, 500), + ); + } + + async getLazyEthereum() { + if (this.config.ethProvider) { + return this.config.ethProvider; + } + if (WINDOW?.ethereum) { + return WINDOW.ethereum; + } + return null; + } + + /** + * ============================================================ + * Application communication methods + * ============================================================ + */ + + async getProviders() { + if (!this.fuelProvider || !this.ethProvider) { + this.ethProvider = await this.getLazyEthereum(); + + if (!this.ethProvider) { + throw new Error('Ethereum provider not found'); + } + + if (typeof this.config.fuelProvider === 'string') { + this.fuelProvider = await Provider.create(this.config.fuelProvider); + } else { + this.fuelProvider = this.config.fuelProvider; + } + + if (!this.fuelProvider) { + throw new Error('Fuel provider not found'); + } + } + + return { fuelProvider: this.fuelProvider, ethProvider: this.ethProvider }; + } + + async setup() { + if (this.setupLock) return; + this.setupLock = true; + await this.setupCurrentAccount(); + await this.setupEventBridge(); + } + + async setupEventBridge() { + const { ethProvider } = await this.getProviders(); + ethProvider.on('accountsChanged', async (accounts) => { + this.emit('accounts', await this.accounts()); + if (this._currentAccount !== accounts[0]) { + await this.setupCurrentAccount(); + } + }); + ethProvider.on('connect', async (_arg) => { + this.emit('connection', await this.isConnected()); + }); + ethProvider.on('disconnect', async (_arg) => { + this.emit('connection', await this.isConnected()); + }); + } + + async setupCurrentAccount() { + const [currentAccount = null] = await this.accounts(); + this._currentAccount = currentAccount; + this.emit('currentAccount', currentAccount); + } + + /** + * ============================================================ + * Connector methods + * ============================================================ + */ + + async ping(): Promise { + await this.getProviders(); + await this.setup(); + return true; + } + + async version(): Promise { + return { app: '0.0.0', network: '0.0.0' }; + } + + async isConnected(): Promise { + const accounts = await this.accounts(); + return accounts.length > 0; + } + + async accounts(): Promise> { + const accounts = await this.getPredicateAccounts(); + return accounts.map((account) => account.predicateAccount); + } + + async connect(): Promise { + if (!(await this.isConnected())) { + const { ethProvider } = await this.getProviders(); + await ethProvider.request({ + method: 'wallet_requestPermissions', + params: [ + { + eth_accounts: {}, + }, + ], + }); + const wallet_chain_id = await ethProvider.request({ + method: 'eth_chainId', + params: [], + }); + if (wallet_chain_id !== '0x1') { + await ethProvider.request({ + method: 'wallet_switchEthereumChain', + params: [ + { + chainId: '0x1', + }, + ], + }); + } + } + this.connected = true; + return true; + } + + async disconnect(): Promise { + if (await this.isConnected()) { + const { ethProvider } = await this.getProviders(); + await ethProvider.request({ + method: 'wallet_revokePermissions', + params: [ + { + eth_accounts: {}, + }, + ], + }); + } + this.connected = false; + return true; + } + + async signMessage(_address: string, _message: string): Promise { + throw new Error('A predicate account cannot sign messages'); + } + + async sendTransaction( + address: string, + transaction: TransactionRequestLike, + ): Promise { + if (!(await this.isConnected())) { + throw Error('No connected accounts'); + } + const { ethProvider, fuelProvider } = await this.getProviders(); + const chainId = fuelProvider.getChainId(); + const account = await this.getPredicateFromAddress(address); + if (!account) { + throw Error(`No account found for ${address}`); + } + const transactionRequest = transactionRequestify(transaction); + + // Create a predicate and set the witness index to call in predicate` + const predicate = createPredicate( + account.ethAccount, + fuelProvider, + this.predicate.bytecode, + this.predicate.abi, + [transactionRequest.witnesses.length], + ); + predicate.connect(fuelProvider); + + // Attach missing inputs (including estimated predicate gas usage) / outputs to the request + await predicate.provider.estimateTxDependencies(transactionRequest); + + // To each input of the request, attach the predicate and its data + const requestWithPredicateAttached = + predicate.populateTransactionPredicateData(transactionRequest); + + const txID = requestWithPredicateAttached.getTransactionId(chainId); + const signature = await ethProvider.request({ + method: 'personal_sign', + params: [txID, account.ethAccount], + }); + + // Transform the signature into compact form for Sway to understand + const compactSignature = splitSignature(hexToBytes(signature)).compact; + + // We have a witness, attach it to the transaction for inspection / recovery via the predicate + // TODO: is below comment still relevant? + // TODO: not that there is a strange witness before we add out compact signature + // it is [ 0x ] and we may need to update versions later if / when this is fixed + transactionRequest.witnesses.push(compactSignature); + + const transactionWithPredicateEstimated = + await fuelProvider.estimatePredicates(requestWithPredicateAttached); + + const response = await fuelProvider.operations.submit({ + encodedTransaction: hexlify( + transactionWithPredicateEstimated.toTransactionBytes(), + ), + }); + + return response.submit.id; + } + + async currentAccount(): Promise { + if (!(await this.isConnected())) { + throw Error('No connected accounts'); + } + + const { ethProvider } = await this.getProviders(); + const ethAccounts: string[] = await ethProvider.request({ + method: 'eth_accounts', + }); + const currentEthAccount = ethAccounts[0]; + if (!currentEthAccount) { + throw new Error('No Ethereum account selected'); + } + + // Eth Wallet (MetaMask at least) return the current select account as the first + // item in the accounts list. + const fuelAccount = getPredicateAddress( + currentEthAccount, + this.predicate.bytecode, + this.predicate.abi, + ); + + return fuelAccount; + } + + async addAssets(_assets: Asset[]): Promise { + console.warn('A predicate account cannot add assets'); + return false; + } + + async addAsset(_asset: Asset): Promise { + console.warn('A predicate account cannot add an asset'); + return false; + } + + async assets(): Promise> { + // TODO: can get assets at a predicates address? emit warning/throw error if not? + return []; + } + + async addNetwork(_networkUrl: string): Promise { + console.warn('Cannot add a network'); + return false; + } + + async selectNetwork(_network: Network): Promise { + // TODO: actually allow selecting networks once mainnet is released? + console.warn('Cannot select a network'); + return false; + } + + async networks(): Promise { + return [await this.currentNetwork()]; + } + + async currentNetwork(): Promise { + const { fuelProvider } = await this.getProviders(); + const chainId = fuelProvider.getChainId(); + return { url: fuelProvider.url, chainId: chainId }; + } + + async addAbi(_abiMap: AbiMap): Promise { + console.warn('Cannot add an ABI to a predicate account'); + return false; + } + + async getAbi(_contractId: string): Promise { + throw Error('Cannot get contractId ABI for a predicate'); + } + + async hasAbi(_contractId: string): Promise { + console.warn('A predicate account cannot have an ABI'); + return false; + } + + private async getPredicateFromAddress(address: string) { + const accounts = await this.getPredicateAccounts(); + return accounts.find((account) => account.predicateAccount === address); + } + + private async getPredicateAccounts(): Promise< + Array<{ + ethAccount: string; + predicateAccount: string; + }> + > { + const { ethProvider, fuelProvider } = await this.getProviders(); + const ethAccounts: Array = await ethProvider.request({ + method: 'eth_accounts', + }); + const _chainId = fuelProvider.getChainId(); + const accounts = ethAccounts.map((account) => ({ + ethAccount: account, + predicateAccount: getPredicateAddress( + account, + this.predicate.bytecode, + this.predicate.abi, + ), + })); + return accounts; + } +} + +export const getPredicateAddress = memoize( + ( + ethAddress: string, + predicateBytecode: BytesLike, + predicateAbi: JsonAbi, + ): string => { + const configurable = { + SIGNER: Address.fromB256( + ethAddress.replace('0x', '0x000000000000000000000000'), + ).toEvmAddress(), + }; + + // @ts-ignore + const { predicateBytes } = Predicate.processPredicateData( + predicateBytecode, + predicateAbi, + configurable, + ); + const address = Address.fromB256(getPredicateRoot(predicateBytes)); + return address.toString(); + }, +); + +export const createPredicate = memoize(function createPredicate< + TInputData extends InputValue[], +>( + ethAddress: string, + provider: Provider, + predicateBytecode: BytesLike, + predicateAbi: JsonAbi, + inputData?: TInputData, +): Predicate { + const configurable = { + SIGNER: Address.fromB256( + ethAddress.replace('0x', '0x000000000000000000000000'), + ).toEvmAddress(), + }; + + const predicate = new Predicate({ + bytecode: arrayify(predicateBytecode), + abi: predicateAbi, + provider, + configurableConstants: configurable, + inputData, + }); + + return predicate; +}); diff --git a/packages/evm-connector/src/constants.ts b/packages/evm-connector/src/constants.ts new file mode 100644 index 000000000..2fb52704a --- /dev/null +++ b/packages/evm-connector/src/constants.ts @@ -0,0 +1,10 @@ +import type { EIP1193Provider } from './utils/eip-1193'; + +declare global { + interface Window { + ethereum: EIP1193Provider | null; + } +} +const HAS_WINDOW = typeof window !== 'undefined'; +export const WINDOW = HAS_WINDOW ? window : null; +export const BETA_5_URL = 'https://beta-5.fuel.network/graphql'; diff --git a/packages/evm-connector/src/index.ts b/packages/evm-connector/src/index.ts new file mode 100644 index 000000000..747cf72a2 --- /dev/null +++ b/packages/evm-connector/src/index.ts @@ -0,0 +1 @@ +export * from './EvmWalletConnector'; diff --git a/packages/evm-connector/src/test/chainConfig.json b/packages/evm-connector/src/test/chainConfig.json new file mode 100644 index 000000000..e9736df42 --- /dev/null +++ b/packages/evm-connector/src/test/chainConfig.json @@ -0,0 +1,520 @@ +{ + "chain_name": "local_testnet", + "block_gas_limit": 5000000000, + "initial_state": { + "coins": [ + { + "owner": "0x94ffcc53b892684acefaebc8a3d4a595e528a8cf664eeb3ef36f1020b0809d0d", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x6e8ec14985922d2b5daf0a9ae68ca63d849e72f09fbc8ab2ddbb88b779a083a0", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x09c0b2d1a486c439a87bcba6b46a7a1a23f3897cc83a94521a96da5c23bc58db", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x5d99ee966b42cd8fc7bdd1364b389153a9e78b42b7d4a691470674e817888d4e", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xbdaad6a89e073e177895b3e5a9ccd15806749eda134a6438dae32fc5b6601f3f", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x95a7aa6cc32743f8706c40ef49a7423b47da763bb4bbc055b1f07254dc729036", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xcee104acd38b940c8f1c62c6d7ea00a0ad2241d6dee0509a4bf27297508870d3", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x7e3626e306588eba79cafab73f0709e55ab8f4bdfe8c8b75034a430fc56ece89", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x1c31df52b6df56407dd95f83082e8beb9cfc9532ac111d5bd8491651d95ba775", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x09dd7a49174d6fcc9f4c6f7942c18060a935ddd03ee69b594189b8c3581276ea", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x86604282dc604481b809845be49667607c470644f6822fc01eb0d22f167e08cf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xbca334a06d19db5041c78fe2f465b07be5bec828f38b7796b2877e7d1542c950", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xbd9a1dc8d3ec3521c43f6c2c01611b4d0204c7610204ff0178488c8738a30bd2", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0xb32197cf75efe05bf453c26178139f09b391582065549c1422bc92555ecffb64", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x3b24509ed4ab3c7959f5c9391c1445c59290cdb5f13d6f780922f376b7029f30", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x77c6f40b7da70d885f68efaad7c661327482a63ea10dcb4271de819438254ae1", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x6a2c4691c547c43924650dbd30620b184b5fe3fb6dbe5c4446110b08f6f405bf", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + }, + { + "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0101010101010101010101010101010101010101010101010101010101010101" + }, + { + "owner": "0x49075a7538e2c88ebe1926ce4d898198a2a4e790d14512943a9864bc536b3c82", + "amount": "0xFFFFFFFFFFFFFFFF", + "asset_id": "0x0202020202020202020202020202020202020202020202020202020202020202" + } + ], + "messages": [ + { + "sender": "0xc43454aa38dd91f88109a4b7aef5efb96ce34e3f24992fe0f81d233ca686f80f", + "recipient": "0x69a2b736b60159b43bb8a4f98c0589f6da5fa3a3d101e8e269c499eb942753ba", + "nonce": "0101010101010101010101010101010101010101010101010101010101010101", + "amount": "0x000000000000FFFF", + "data": "", + "da_height": "0x00" + }, + { + "sender": "0x69a2b736b60159b43bb8a4f98c0589f6da5fa3a3d101e8e269c499eb942753ba", + "recipient": "0xc43454aa38dd91f88109a4b7aef5efb96ce34e3f24992fe0f81d233ca686f80f", + "nonce": "0e1ef2963832068b0e1ef2963832068b0e1ef2963832068b0e1ef2963832068b", + "amount": "0xb04f3c08f59b309e", + "data": "", + "da_height": "0x00" + } + ] + }, + "consensus_parameters": { + "tx_params": { + "max_inputs": 255, + "max_outputs": 255, + "max_witnesses": 255, + "max_gas_per_tx": 10000000, + "max_size": 17825792 + }, + "predicate_params": { + "max_predicate_length": 1048576, + "max_predicate_data_length": 1048576, + "max_gas_per_predicate": 10000000, + "max_message_data_length": 1048576 + }, + "script_params": { + "max_script_length": 1048576, + "max_script_data_length": 1048576 + }, + "contract_params": { + "contract_max_size": 16777216, + "max_storage_slots": 255 + }, + "fee_params": { + "gas_price_factor": 92, + "gas_per_byte": 4 + } + }, + "gas_costs": { + "add": 1, + "addi": 1, + "aloc": 1, + "and": 1, + "andi": 1, + "bal": 13, + "bhei": 1, + "bhsh": 1, + "burn": 132, + "cb": 1, + "cfei": 1, + "cfsi": 1, + "croo": 16, + "div": 1, + "divi": 1, + "ecr1": 3000, + "eck1": 951, + "ed19": 3000, + "eq": 1, + "exp": 1, + "expi": 1, + "flag": 1, + "gm": 1, + "gt": 1, + "gtf": 1, + "ji": 1, + "jmp": 1, + "jne": 1, + "jnei": 1, + "jnzi": 1, + "jmpf": 1, + "jmpb": 1, + "jnzf": 1, + "jnzb": 1, + "jnef": 1, + "jneb": 1, + "lb": 1, + "log": 9, + "lt": 1, + "lw": 1, + "mint": 135, + "mlog": 1, + "modOp": 1, + "modi": 1, + "moveOp": 1, + "movi": 1, + "mroo": 2, + "mul": 1, + "muli": 1, + "mldv": 1, + "noop": 1, + "not": 1, + "or": 1, + "ori": 1, + "poph": 2, + "popl": 2, + "pshh": 2, + "pshl": 2, + "ret": 13, + "rvrt": 13, + "sb": 1, + "sll": 1, + "slli": 1, + "srl": 1, + "srli": 1, + "srw": 12, + "sub": 1, + "subi": 1, + "sw": 1, + "sww": 67, + "time": 1, + "tr": 105, + "tro": 60, + "wdcm": 1, + "wqcm": 1, + "wdop": 1, + "wqop": 1, + "wdml": 1, + "wqml": 1, + "wddv": 1, + "wqdv": 2, + "wdmd": 3, + "wqmd": 4, + "wdam": 2, + "wqam": 3, + "wdmm": 3, + "wqmm": 3, + "xor": 1, + "xori": 1, + "call": { + "LightOperation": { + "base": 144, + "units_per_gas": 214 + } + }, + "ccp": { + "LightOperation": { + "base": 15, + "units_per_gas": 103 + } + }, + "csiz": { + "LightOperation": { + "base": 17, + "units_per_gas": 790 + } + }, + "k256": { + "LightOperation": { + "base": 11, + "units_per_gas": 214 + } + }, + "ldc": { + "LightOperation": { + "base": 15, + "units_per_gas": 272 + } + }, + "logd": { + "LightOperation": { + "base": 26, + "units_per_gas": 64 + } + }, + "mcl": { + "LightOperation": { + "base": 1, + "units_per_gas": 3333 + } + }, + "mcli": { + "LightOperation": { + "base": 1, + "units_per_gas": 3333 + } + }, + "mcp": { + "LightOperation": { + "base": 1, + "units_per_gas": 2000 + } + }, + "mcpi": { + "LightOperation": { + "base": 3, + "units_per_gas": 2000 + } + }, + "meq": { + "LightOperation": { + "base": 1, + "units_per_gas": 2500 + } + }, + "retd": { + "LightOperation": { + "base": 29, + "units_per_gas": 62 + } + }, + "s256": { + "LightOperation": { + "base": 2, + "units_per_gas": 214 + } + }, + "scwq": { + "LightOperation": { + "base": 13, + "units_per_gas": 5 + } + }, + "smo": { + "LightOperation": { + "base": 209, + "units_per_gas": 55 + } + }, + "srwq": { + "LightOperation": { + "base": 47, + "units_per_gas": 5 + } + }, + "swwq": { + "LightOperation": { + "base": 44, + "units_per_gas": 5 + } + }, + "contract_root": { + "LightOperation": { + "base": 75, + "units_per_gas": 1 + } + }, + "state_root": { + "LightOperation": { + "base": 412, + "units_per_gas": 1 + } + }, + "vm_initialization": { + "HeavyOperation": { + "base": 2000, + "gas_per_unit": 0 + } + }, + "new_storage_per_byte": 1 + }, + "consensus": { + "PoA": { + "signing_key": "0x94ffcc53b892684acefaebc8a3d4a595e528a8cf664eeb3ef36f1020b0809d0d" + } + } +} diff --git a/packages/evm-connector/src/test/mockProvider.ts b/packages/evm-connector/src/test/mockProvider.ts new file mode 100644 index 000000000..3823cd167 --- /dev/null +++ b/packages/evm-connector/src/test/mockProvider.ts @@ -0,0 +1,176 @@ +import EventEmitter from 'node:events'; +import { + bytesToHex, + ecsign, + hashPersonalMessage, + hexToBytes, + privateToAddress, + toRpcSig, +} from '@ethereumjs/util'; + +interface IMockProvider { + request(args: { + method: 'eth_accounts'; + params: string[]; + }): Promise; + request(args: { + method: 'eth_requestAccounts'; + params: string[]; + }): Promise; + request(args: { + method: 'wallet_requestPermissions'; + params: string[]; + }): Promise; + + request(args: { + method: 'wallet_revokePermissions'; + params: string[]; + }): Promise; + + request(args: { method: 'net_version' }): Promise; + request(args: { method: 'eth_chainId'; params: string[] }): Promise; + + request(args: { method: 'personal_sign'; params: string[] }): Promise; + request(args: { method: 'eth_decrypt'; params: string[] }): Promise; + + // biome-ignore lint/suspicious/noExplicitAny: This request pattern will match against unknown request types and error. + request(args: { method: string; params?: any[] }): Promise; +} + +export class MockProvider extends EventEmitter implements IMockProvider { + private accounts: { address: string; privateKey: Uint8Array }[] = []; + private connected = false; + + public debug = false; + + public isMetaMask = true; + public manualConfirmEnable = false; + + private acceptEnable?: (value: unknown) => void; + + private rejectEnable?: (value: unknown) => void; + + constructor(numAccounts = 3) { + super(); + for (let i = 0; i < numAccounts; i += 1) { + // const privateKey = randomBytes(32); + const privateKey = hexToBytes( + '0x96dfa8c25bdae93fa0b6460079f8bb18aaec70c8451b5e32251cbc22f0dbf308', + ); + const address = bytesToHex(privateToAddress(privateKey)); + this.accounts.push({ address, privateKey: privateKey }); + } + } + + get selectedAddress(): string { + if (this.accounts && this.accounts.length > 0) { + const selectedAddress = this.accounts[0]?.address; + if (selectedAddress) { + return selectedAddress; + } + } + throw new Error('Address not defined'); + } + + get networkVersion(): number { + return 1; + } + + get chainId(): string { + return `0x${(1).toString(16)}`; + } + + answerEnable(acceptance: boolean) { + if (acceptance) this.acceptEnable?.('Accepted'); + else this.rejectEnable?.('User rejected'); + } + + getAccounts(): string[] { + return this.accounts.map(({ address }) => address); + } + + // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. + async request({ method, params }: any): Promise { + switch (method) { + case 'eth_requestAccounts': + if (this.manualConfirmEnable) { + return new Promise((resolve, reject) => { + this.acceptEnable = resolve; + this.rejectEnable = reject; + }).then(() => this.accounts.map(({ address }) => address)); + } + this.connected = true; + return this.accounts.map(({ address }) => address); + + case 'wallet_requestPermissions': + if (this.manualConfirmEnable) { + return new Promise((resolve, reject) => { + this.acceptEnable = resolve; + this.rejectEnable = reject; + }).then(() => this.accounts.map(({ address }) => address)); + } + this.connected = true; + return this.accounts.map(({ address }) => address); + + case 'eth_accounts': + return this.connected ? this.getAccounts() : []; + + case 'wallet_revokePermissions': + return null; + + case 'net_version': + return this.networkVersion; + + case 'eth_chainId': + return this.chainId; + + case 'personal_sign': { + const [message, address] = params; + const account = this.accounts.find((a) => a.address === address); + if (!account) throw new Error('Account not found'); + + const hash = hashPersonalMessage(hexToBytes(message)); + const signed = ecsign(hash, account.privateKey); + const signedStr = toRpcSig(signed.v, signed.r, signed.s); + + return signedStr; + } + + case 'eth_sendTransaction': { + throw new Error('This service can not send transactions.'); + } + + default: + throw new Error( + `The method ${method} is not implemented by the mock provider.`, + ); + } + } + + // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the EIP 1193 interface. + sendAsync(props: { method: string }, cb: any) { + switch (props.method) { + case 'eth_accounts': + cb(null, { result: [this.getAccounts()] }); + break; + + case 'net_version': + cb(null, { result: this.networkVersion }); + break; + + default: + throw new Error(`Method '${props.method}' is not supported yet.`); + } + } + + // biome-ignore lint/suspicious/noExplicitAny: This pattern matches the NodeJS.EventEmitter interface. + on(props: string, listener: (...args: any[]) => void) { + super.on(props, listener); + return this; + } + + removeAllListeners() { + super.removeAllListeners(); + return this; + } +} diff --git a/packages/evm-connector/src/test/testConnector.ts b/packages/evm-connector/src/test/testConnector.ts new file mode 100644 index 000000000..3a0ae3522 --- /dev/null +++ b/packages/evm-connector/src/test/testConnector.ts @@ -0,0 +1,19 @@ +import type { Provider } from 'fuels'; + +import { EVMWalletConnector } from '../index'; +import type { EIP1193Provider } from '../utils/eip-1193'; + +export class testEVMWalletConnector extends EVMWalletConnector { + constructor(ethProvider: EIP1193Provider, fuelProvider: Provider) { + super(); + this.ethProvider = ethProvider; + this.fuelProvider = fuelProvider; + } + + async getProviders() { + if (this.fuelProvider && this.ethProvider) { + return { fuelProvider: this.fuelProvider, ethProvider: this.ethProvider }; + } + throw 'Providers must exists'; + } +} diff --git a/packages/evm-connector/src/test/walletConnector.test.ts b/packages/evm-connector/src/test/walletConnector.test.ts new file mode 100644 index 000000000..6b9c6ff21 --- /dev/null +++ b/packages/evm-connector/src/test/walletConnector.test.ts @@ -0,0 +1,510 @@ +import path from 'node:path'; +import { launchNodeAndGetWallets } from '@fuel-ts/account/test-utils'; +import { + type Asset, + BaseAssetId, + type Provider, + ScriptTransactionRequest, + Wallet, + WalletUnlocked, + bn, +} from 'fuels'; +import { + afterAll, + afterEach, + beforeAll, + beforeEach, + describe, + expect, + test, +} from 'vitest'; +import { createPredicate, getPredicateAddress } from '../index'; +import { predicates } from '../utils/predicateResources'; +import { MockProvider } from './mockProvider'; +import { testEVMWalletConnector as EVMWalletConnector } from './testConnector'; + +const predicate = 'verification-predicate'; + +describe('EVM Wallet Connector', () => { + // Providers used to interact with wallets + let ethProvider: MockProvider; + let fuelProvider: Provider; + + // Our connector bridging MetaMask and predicate accounts + let connector: EVMWalletConnector; + + // Accounts from hardhat used to determine predicate accounts + let ethAccount1: string; + let ethAccount2: string; + + // Predicate accounts associated with the ethereum accounts + let predicateAccount1: string; + let predicateAccount2: string; + + let stopProvider: () => void; + + const bytecode = predicates[predicate].bytecode; + const abi = predicates[predicate].abi; + + const chainConfigPath = path.join(__dirname, 'chainConfig.json'); + + beforeAll(async () => { + //Launch test node + process.env.GENESIS_SECRET = + '0x6e48a022f9d4ae187bca4e2645abd62198ae294ee484766edbdaadf78160dc68'; + const { stop, provider } = await launchNodeAndGetWallets({ + launchNodeOptions: { + args: ['--chain', chainConfigPath], + loggingEnabled: false, + }, + }); + + fuelProvider = provider; + stopProvider = stop; + }); + + afterAll(() => { + stopProvider?.(); + }); + + beforeEach(async () => { + // Create the Ethereum provider + ethProvider = new MockProvider(); + + const accounts = ethProvider.getAccounts(); + if (accounts.length < 2) { + throw new Error('Not enough accounts available'); + } + ethAccount1 = accounts[0] as string; + ethAccount2 = accounts[1] as string; + + const predicateAccounts = await Promise.all( + accounts.map(async (account) => + getPredicateAddress(account, bytecode, abi), + ), + ); + if (predicateAccounts.length < 2) { + throw new Error('Not enough predicate accounts available'); + } + predicateAccount1 = predicateAccounts[0] as string; + predicateAccount2 = predicateAccounts[1] as string; + + // Class contains state, reset the state for each test + connector = new EVMWalletConnector(ethProvider, fuelProvider); + }); + + afterEach(() => { + ethProvider.removeAllListeners(); + }); + + describe('connect()', () => { + test('connects to ethers signer', async () => { + const connected = await connector.connect(); + + expect(connected).to.be.true; + }); + }); + + describe('isConnected()', () => { + test('false when not connected', async () => { + const connected = await connector.isConnected(); + + expect(connected).to.be.false; + }); + + test('true when connected', async () => { + await connector.connect(); + const connected = await connector.isConnected(); + + expect(connected).to.be.true; + }); + }); + + describe('disconnect()', () => { + test('disconnects from ethers signer', async () => { + await connector.connect(); + + const connected = await connector.disconnect(); + + expect(connected).to.be.true; + }); + }); + + describe('accounts()', () => { + test('returns the predicate accounts associated with the wallet', async () => { + await connector.connect(); + + const predicateAccounts = await connector.accounts(); + const acc1 = predicateAccounts[0]; + const acc2 = predicateAccounts[1]; + + expect(acc1).to.be.equal(predicateAccount1); + expect(acc2).to.be.equal(predicateAccount2); + }); + }); + + describe('currentAccount()', () => { + test('returns the predicate account associated with the current signer account', async () => { + await connector.connect(); + + const account = await connector.currentAccount(); + + expect(account).to.be.equal(predicateAccount1); + }); + + test('throws error when not connected', async () => { + await expect(() => connector.currentAccount()).rejects.toThrowError( + 'No connected accounts', + ); + }); + }); + + describe('signMessage()', () => { + test('throws error', async () => { + await expect(() => + connector.signMessage('address', 'message'), + ).rejects.toThrowError('A predicate account cannot sign messages'); + }); + }); + + describe('sendTransaction()', () => { + const ALT_ASSET_ID = + '0x0101010101010101010101010101010101010101010101010101010101010101'; + + test('transfer when the current signer is passed in', async () => { + const predicate = await createPredicate( + ethAccount1, + fuelProvider, + bytecode, + abi, + ); + + const fundingWallet = new WalletUnlocked('0x01', fuelProvider); + + // Transfer base asset coins to predicate + await fundingWallet + .transfer(predicate.address, 1_000_000, BaseAssetId, { + gasLimit: 10000, + gasPrice: 1, + }) + .then((resp) => resp.wait()); + // Transfer alt asset coins to predicate + await fundingWallet + .transfer(predicate.address, 1_000_000, ALT_ASSET_ID, { + gasLimit: 10000, + gasPrice: 1, + }) + .then((resp) => resp.wait()); + + // Check predicate balances + const predicateETHBalanceInitial = await predicate.getBalance(); + const predicateAltBalanceInitial = + await predicate.getBalance(ALT_ASSET_ID); + + // Check predicate has the balance required + expect(predicateETHBalanceInitial.gte(1000000)); + expect(predicateAltBalanceInitial.gte(1000000)); + + // Amount to transfer + const amountToTransfer = 10; + + // Create a recipient Wallet + const recipientWallet = Wallet.generate({ provider: fuelProvider }); + const recipientBalanceInitial = + await recipientWallet.getBalance(ALT_ASSET_ID); + + // Create transfer from predicate to recipient + const transactionRequest = new ScriptTransactionRequest({ + gasLimit: 10000, + gasPrice: 1, + }); + transactionRequest.addCoinOutput( + recipientWallet.address, + amountToTransfer, + ALT_ASSET_ID, + ); + + // fund transaction + const resources = await predicate.getResourcesToSpend([ + { + assetId: BaseAssetId, + amount: bn(1_000_000), + }, + { + assetId: ALT_ASSET_ID, + amount: bn(1_000_000), + }, + ]); + transactionRequest.addResources(resources); + + // Connect ETH account + await connector.connect(); + + // TODO: The user accounts mapping must be populated in order to check if the account is valid + // Temporary hack here? + await connector.accounts(); + + // Send transaction using EvmWalletConnector + await connector.sendTransaction(predicateAccount1, transactionRequest); + + // Check balances are correct + const predicateAltBalanceFinal = await predicate.getBalance(ALT_ASSET_ID); + const recipientBalanceFinal = + await recipientWallet.getBalance(ALT_ASSET_ID); + + expect(predicateAltBalanceFinal.toString()).eq( + predicateAltBalanceInitial.sub(amountToTransfer).toString(), + ); + expect(recipientBalanceFinal.toString()).eq( + recipientBalanceInitial.add(amountToTransfer).toString(), + ); + }); + + test('transfer when a different valid signer is passed in', async () => { + const predicate = await createPredicate( + ethAccount2, + fuelProvider, + bytecode, + abi, + ); + + const fundingWallet = new WalletUnlocked('0x01', fuelProvider); + + // Transfer base asset coins to predicate + await fundingWallet + .transfer(predicate.address, 1_000_000, BaseAssetId, { + gasLimit: 10000, + gasPrice: 1, + }) + .then((resp) => resp.wait()); + // Transfer alt asset coins to predicate + await fundingWallet + .transfer(predicate.address, 1_000_000, ALT_ASSET_ID, { + gasLimit: 10000, + gasPrice: 1, + }) + .then((resp) => resp.wait()); + + // Check predicate balances + const predicateETHBalanceInitial = await predicate.getBalance(); + const predicateAltBalanceInitial = + await predicate.getBalance(ALT_ASSET_ID); + + // Check predicate has the balance required + expect(predicateETHBalanceInitial.gte(1000000)); + expect(predicateAltBalanceInitial.gte(1000000)); + + // Amount to transfer + const amountToTransfer = 10; + + // Create a recipient Wallet + const recipientWallet = Wallet.generate({ provider: fuelProvider }); + const recipientBalanceInitial = + await recipientWallet.getBalance(ALT_ASSET_ID); + + // Create transfer from predicate to recipient + const transactionRequest = new ScriptTransactionRequest({ + gasLimit: 10000, + gasPrice: 1, + }); + transactionRequest.addCoinOutput( + recipientWallet.address, + amountToTransfer, + ALT_ASSET_ID, + ); + + // fund transaction + const resources = await predicate.getResourcesToSpend([ + { + assetId: BaseAssetId, + amount: bn(1_000_000), + }, + { + assetId: ALT_ASSET_ID, + amount: bn(1_000_000), + }, + ]); + transactionRequest.addResources(resources); + + // Connect ETH account + await connector.connect(); + + // TODO: The user accounts mapping must be populated in order to check if the account is valid + // Temporary hack here? + await connector.accounts(); + + // Send transaction using EvmWalletConnector + await connector.sendTransaction(predicateAccount2, transactionRequest); + + // Check balances are correct + const predicateAltBalanceFinal = await predicate.getBalance(ALT_ASSET_ID); + const recipientBalanceFinal = + await recipientWallet.getBalance(ALT_ASSET_ID); + + expect(predicateAltBalanceFinal.toString()).eq( + predicateAltBalanceInitial.sub(amountToTransfer).toString(), + ); + expect(recipientBalanceFinal.toString()).eq( + recipientBalanceInitial.add(amountToTransfer).toString(), + ); + }); + + test('errors when an invalid signer is passed in', async () => { + const predicate = await createPredicate( + ethAccount1, + fuelProvider, + bytecode, + abi, + ); + + const fundingWallet = new WalletUnlocked('0x01', fuelProvider); + + // Transfer base asset coins to predicate + await fundingWallet + .transfer(predicate.address, 1_000_000, BaseAssetId, { + gasLimit: 10000, + gasPrice: 1, + }) + .then((resp) => resp.wait()); + // Transfer alt asset coins to predicate + await fundingWallet + .transfer(predicate.address, 1_000_000, ALT_ASSET_ID, { + gasLimit: 10000, + gasPrice: 1, + }) + .then((resp) => resp.wait()); + + // Check predicate balances + const predicateETHBalanceInitial = await predicate.getBalance(); + const predicateAltBalanceInitial = + await predicate.getBalance(ALT_ASSET_ID); + + // Check predicate has the balance required + expect(predicateETHBalanceInitial.gte(1000000)); + expect(predicateAltBalanceInitial.gte(1000000)); + + // Amount to transfer + const amountToTransfer = 10; + + // Create a recipient Wallet + const recipientWallet = Wallet.generate({ provider: fuelProvider }); + + // Create transfer from predicate to recipient + const transactionRequest = new ScriptTransactionRequest({ + gasLimit: 10000, + gasPrice: 1, + }); + transactionRequest.addCoinOutput( + recipientWallet.address, + amountToTransfer, + ALT_ASSET_ID, + ); + + // fund transaction + const resources = await predicate.getResourcesToSpend([ + { + assetId: BaseAssetId, + amount: bn(1_000_000), + }, + { + assetId: ALT_ASSET_ID, + amount: bn(1_000_000), + }, + ]); + transactionRequest.addResources(resources); + + // Connect ETH account + await connector.connect(); + + // TODO: The user accounts mapping must be populated in order to check if the account is valid + // Temporary hack here? + await connector.accounts(); + + await expect(() => + connector.sendTransaction( + predicateAccount2.replaceAll('h', 'X'), + transactionRequest, + ), + ).rejects.toThrowError( + `No account found for ${predicateAccount2.replaceAll('h', 'X')}`, + ); + }); + }); + + describe('assets()', () => { + test('returns an empty array', async () => { + expect(await connector.assets()).to.deep.equal([]); + }); + }); + + describe('addAsset()', () => { + test('returns false', async () => { + const asset: Asset = { + name: '', + symbol: '', + icon: '', + networks: [], + }; + expect(await connector.addAsset(asset)).to.be.false; + }); + }); + + describe('addAssets()', () => { + test('returns false', async () => { + expect(await connector.addAssets([])).to.be.false; + }); + }); + + describe('addAbi()', () => { + test('returns false', async () => { + expect(await connector.addAbi({})).to.be.false; + }); + }); + + describe('getAbi()', () => { + test('throws error', async () => { + await expect(() => connector.getAbi('contractId')).rejects.toThrowError( + 'Cannot get contractId ABI for a predicate', + ); + }); + }); + + describe('hasAbi()', () => { + test('returns false', async () => { + expect(await connector.hasAbi('contractId')).to.be.false; + }); + }); + + describe('network()', () => { + test('returns the fuel network info', async () => { + const network = await connector.currentNetwork(); + + expect(network.chainId.toString()).to.be.equal( + (await fuelProvider.getNetwork()).chainId.toString(), + ); + expect(network.url).to.be.equal(fuelProvider.url); + }); + }); + + describe('networks()', () => { + test('returns an array of fuel network info', async () => { + const networks = await connector.networks(); + const network = networks.pop(); + + const networkChainId = network?.chainId.toString(); + const connectorNetwork = await connector.fuelProvider?.getNetwork(); + const expectedChainId = connectorNetwork + ? connectorNetwork.chainId.toString() + : undefined; + expect(networkChainId).to.be.equal(expectedChainId); + + expect(network?.url).to.be.equal(fuelProvider.url); + }); + }); + + describe('addNetwork()', () => { + test('throws error', async () => { + expect(await connector.addNetwork('')).to.be.false; + }); + }); +}); diff --git a/packages/evm-connector/src/types.ts b/packages/evm-connector/src/types.ts new file mode 100644 index 000000000..156d2ad12 --- /dev/null +++ b/packages/evm-connector/src/types.ts @@ -0,0 +1,7 @@ +import type { Provider } from 'fuels'; +import type { EIP1193Provider } from './utils/eip-1193'; + +export type EVMWalletConnectorConfig = { + fuelProvider?: Provider | string; + ethProvider?: EIP1193Provider; +}; diff --git a/packages/evm-connector/src/utils/eip-1193.ts b/packages/evm-connector/src/utils/eip-1193.ts new file mode 100644 index 000000000..65f4c11ba --- /dev/null +++ b/packages/evm-connector/src/utils/eip-1193.ts @@ -0,0 +1,6 @@ +import type EventEmitter from 'node:events'; + +export interface EIP1193Provider extends EventEmitter { + // biome-ignore lint/suspicious/noExplicitAny: + request(args: { method: string; params?: any[] }): Promise; +} diff --git a/packages/evm-connector/src/utils/generatePredicateResources.ts b/packages/evm-connector/src/utils/generatePredicateResources.ts new file mode 100644 index 000000000..384b53abb --- /dev/null +++ b/packages/evm-connector/src/utils/generatePredicateResources.ts @@ -0,0 +1,42 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const predicates = ['verification-predicate']; + +let code = 'export const predicates = {\n'; + +predicates.forEach((predicate) => { + const outputDirectory = `${__dirname}/../../signature-verification/${predicate}/out/release`; + const abiPath = `${outputDirectory}/${predicate}-abi.json`; + const bytecodePath = `${outputDirectory}/${predicate}.bin`; + + const abi = fs.readFileSync(abiPath, 'utf8'); + const bytecode = fs.readFileSync(bytecodePath); + + code += ` '${predicate}': {\n`; + code += ` abi: ${abi},\n`; + code += ` bytecode: base64ToUint8Array('${bytecode.toString( + 'base64', + )}'),\n`; + code += ' },\n'; +}); + +code += ` +}; + +function base64ToUint8Array(base64: string) { + var binaryString = atob(base64); + var bytes = new Uint8Array(binaryString.length); + for (var i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} +`; + +fs.writeFileSync(`${__dirname}/predicateResources.ts`, code); +console.log('Generated'); diff --git a/packages/evm-connector/src/utils/metamask-icon.ts b/packages/evm-connector/src/utils/metamask-icon.ts new file mode 100644 index 000000000..84fa4d308 --- /dev/null +++ b/packages/evm-connector/src/utils/metamask-icon.ts @@ -0,0 +1,2 @@ +export const METAMASK_ICON = + 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIGlkPSJMYXllcl8xIiB4PSIwIiB5PSIwIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzMTguNiAzMTguNiI+CiAgPHN0eWxlPgogICAgLnN0MSwuc3Q2e2ZpbGw6I2U0NzYxYjtzdHJva2U6I2U0NzYxYjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmR9LnN0NntmaWxsOiNmNjg1MWI7c3Ryb2tlOiNmNjg1MWJ9CiAgPC9zdHlsZT4KICA8cGF0aCBmaWxsPSIjZTI3NjFiIiBzdHJva2U9IiNlMjc2MWIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0ibTI3NC4xIDM1LjUtOTkuNSA3My45TDE5MyA2NS44eiIvPgogIDxwYXRoIGQ9Im00NC40IDM1LjUgOTguNyA3NC42LTE3LjUtNDQuM3ptMTkzLjkgMTcxLjMtMjYuNSA0MC42IDU2LjcgMTUuNiAxNi4zLTU1LjN6bS0yMDQuNC45TDUwLjEgMjYzbDU2LjctMTUuNi0yNi41LTQwLjZ6IiBjbGFzcz0ic3QxIi8+CiAgPHBhdGggZD0ibTEwMy42IDEzOC4yLTE1LjggMjMuOSA1Ni4zIDIuNS0yLTYwLjV6bTExMS4zIDAtMzktMzQuOC0xLjMgNjEuMiA1Ni4yLTIuNXpNMTA2LjggMjQ3LjRsMzMuOC0xNi41LTI5LjItMjIuOHptNzEuMS0xNi41IDMzLjkgMTYuNS00LjctMzkuM3oiIGNsYXNzPSJzdDEiLz4KICA8cGF0aCBmaWxsPSIjZDdjMWIzIiBzdHJva2U9IiNkN2MxYjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0ibTIxMS44IDI0Ny40LTMzLjktMTYuNSAyLjcgMjIuMS0uMyA5LjN6bS0xMDUgMCAzMS41IDE0LjktLjItOS4zIDIuNS0yMi4xeiIvPgogIDxwYXRoIGZpbGw9IiMyMzM0NDciIHN0cm9rZT0iIzIzMzQ0NyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJtMTM4LjggMTkzLjUtMjguMi04LjMgMTkuOS05LjF6bTQwLjkgMCA4LjMtMTcuNCAyMCA5LjF6Ii8+CiAgPHBhdGggZmlsbD0iI2NkNjExNiIgc3Ryb2tlPSIjY2Q2MTE2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGQ9Im0xMDYuOCAyNDcuNCA0LjgtNDAuNi0zMS4zLjl6TTIwNyAyMDYuOGw0LjggNDAuNiAyNi41LTM5Ljd6bTIzLjgtNDQuNy01Ni4yIDIuNSA1LjIgMjguOSA4LjMtMTcuNCAyMCA5LjF6bS0xMjAuMiAyMy4xIDIwLTkuMSA4LjIgMTcuNCA1LjMtMjguOS01Ni4zLTIuNXoiLz4KICA8cGF0aCBmaWxsPSIjZTQ3NTFmIiBzdHJva2U9IiNlNDc1MWYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0ibTg3LjggMTYyLjEgMjMuNiA0Ni0uOC0yMi45em0xMjAuMyAyMy4xLTEgMjIuOSAyMy43LTQ2em0tNjQtMjAuNi01LjMgMjguOSA2LjYgMzQuMSAxLjUtNDQuOXptMzAuNSAwLTIuNyAxOCAxLjIgNDUgNi43LTM0LjF6Ii8+CiAgPHBhdGggZD0ibTE3OS44IDE5My41LTYuNyAzNC4xIDQuOCAzLjMgMjkuMi0yMi44IDEtMjIuOXptLTY5LjItOC4zLjggMjIuOSAyOS4yIDIyLjggNC44LTMuMy02LjYtMzQuMXoiIGNsYXNzPSJzdDYiLz4KICA8cGF0aCBmaWxsPSIjYzBhZDllIiBzdHJva2U9IiNjMGFkOWUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0ibTE4MC4zIDI2Mi4zLjMtOS4zLTIuNS0yLjJoLTM3LjdsLTIuMyAyLjIuMiA5LjMtMzEuNS0xNC45IDExIDkgMjIuMyAxNS41aDM4LjNsMjIuNC0xNS41IDExLTl6Ii8+CiAgPHBhdGggZmlsbD0iIzE2MTYxNiIgc3Ryb2tlPSIjMTYxNjE2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGQ9Im0xNzcuOSAyMzAuOS00LjgtMy4zaC0yNy43bC00LjggMy4zLTIuNSAyMi4xIDIuMy0yLjJoMzcuN2wyLjUgMi4yeiIvPgogIDxwYXRoIGZpbGw9IiM3NjNkMTYiIHN0cm9rZT0iIzc2M2QxNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJtMjc4LjMgMTE0LjIgOC41LTQwLjgtMTIuNy0zNy45LTk2LjIgNzEuNCAzNyAzMS4zIDUyLjMgMTUuMyAxMS42LTEzLjUtNS0zLjYgOC03LjMtNi4yLTQuOCA4LTYuMXpNMzEuOCA3My40bDguNSA0MC44LTUuNCA0IDggNi4xLTYuMSA0LjggOCA3LjMtNSAzLjYgMTEuNSAxMy41IDUyLjMtMTUuMyAzNy0zMS4zLTk2LjItNzEuNHoiLz4KICA8cGF0aCBkPSJtMjY3LjIgMTUzLjUtNTIuMy0xNS4zIDE1LjkgMjMuOS0yMy43IDQ2IDMxLjItLjRoNDYuNXptLTE2My42LTE1LjMtNTIuMyAxNS4zLTE3LjQgNTQuMmg0Ni40bDMxLjEuNC0yMy42LTQ2em03MSAyNi40IDMuMy01Ny43IDE1LjItNDEuMWgtNjcuNWwxNSA0MS4xIDMuNSA1Ny43IDEuMiAxOC4yLjEgNDQuOGgyNy43bC4yLTQ0Ljh6IiBjbGFzcz0ic3Q2Ii8+Cjwvc3ZnPg=='; diff --git a/packages/evm-connector/src/utils/predicateResources.ts b/packages/evm-connector/src/utils/predicateResources.ts new file mode 100644 index 000000000..e6192f823 --- /dev/null +++ b/packages/evm-connector/src/utils/predicateResources.ts @@ -0,0 +1,81 @@ +export const predicates = { + 'verification-predicate': { + abi: { + types: [ + { + typeId: 0, + type: 'b256', + components: null, + typeParameters: null, + }, + { + typeId: 1, + type: 'bool', + components: null, + typeParameters: null, + }, + { + typeId: 2, + type: 'struct EvmAddress', + components: [ + { + name: 'value', + type: 0, + typeArguments: null, + }, + ], + typeParameters: null, + }, + { + typeId: 3, + type: 'u64', + components: null, + typeParameters: null, + }, + ], + functions: [ + { + inputs: [ + { + name: 'witness_index', + type: 3, + typeArguments: null, + }, + ], + name: 'main', + output: { + name: '', + type: 1, + typeArguments: null, + }, + attributes: null, + }, + ], + loggedTypes: [], + messagesTypes: [], + configurables: [ + { + name: 'SIGNER', + configurableType: { + name: '', + type: 2, + typeArguments: [], + }, + offset: 1952, + }, + ], + }, + bytecode: base64ToUint8Array( + 'dAAAA0cAAAAAAAAAAAAHSF38wAEQ//MAGuxQAJEABrhxRAADYUkSAHZIAAJhQRIMdAAAB3JMAAITSSTAWkkgAXZIAAJhQRJKdAAAASQAAABdQQAAXU/wDxBNMwBdU/AQEFFDAF1f8BAQXXMAYUEEAVBHs1ga6QAAGuUQACD4MwBY++ACUPvgBHQAAMIaQ9AAUEe2eHJIAEAoRQSAUEO2eBpEAABySAAgKO0UgFBHsCBySAAgKEU0gFBHsEBySAAgKEV0gFBHtMhySABgKEe0gFBHtMhQS7SockwAIChJRMBQS7SoXU/wCBBNFMBQU7TIUFFAIF1X8AldW/AIKE0VQEFJRYBQR7SoUEuwyHJMACAbTATAEE0kwHJQACAoTXUAckwAIBtMFMAQTSTAclAAIChNdQBQT7HQclAAQChNJQBQS7YQclAAQChJNQBQS7YQUE+wiHJQAEAoTQUAUEOygHJQACAoQRUAPkk0ABpAgAATQQBAdkAAClBDsjhf7ABHUEe2EFBJAAhyTABAKEkUwFBLs/hyRABIKEkEQHQAAAZQQ7GIX+wQMV/sADlQS7P4ckQASChJBEBQQ7WockQASChBJEBQQ7KgckQASChBJEBdQ7B/E0EAQHZAADxQQ7WoUEey6HJIAEgoRQSAXUOwtRNBAAB2QAABNgAAAFBDsuhQQQAIUEe1KHJIAEAoRQSAUEO1KHJEACAbRARAEEUEQFBDtShySAAgG0gUgBBJBIBQQ7FIckwAIChBFMBQRQAgckwAIChFJMBQR7O4ckgAQChFBIBQQ7OYGukQABrlAAAg+DMAWPvgAlD74AR0AABiGkPQAFBHtfBySAAgKEUEgFBDshBf7ABCUEe18FBLtYhyTAAgKEkUwFBHtYhwRAAMUEe1iFBLsQhyTAAgKEkUwFBFAAhyTAAgKEUkwFBLtEByRAAoKEkEQHQAAApQQ7KgUEEAQFBHsGBf7BAMUEkQIHJMAAgoSQTAUEu0QHJAACgoSRQAUEO2UHJEACgoQSRAXUOwiBNBAABcR/BQdkAAARpEAAB2RAABdAAAG1BDtlBQR7MwckgAKChFBIBdQ7DKE0EAAHZAAAE2AAAAUEOzMFBBAAhQR7VockgAIChFBIBQQ7EoXUfwERBFEwBySAAgKEEUgFBHtWhQS7RockwAIChJBMBQQ7SIckwAIChBFMChQSQgdkAAASQAAABcQ/BQJEAAABrwUACRAAAoX/EAAF/xEAFf8SACX/EwA1/zsAQa7FAAkQAAABpDoAAaR5AAGkvgAHJMAEAoRQTAGvUQAJIAAAAa+SAAWfBQKF1DwABdR8ABXUvAAl1PwANd78AEkgAAKEr4AAAa8FAAkQAAOF/xAABf8RABX/EgAl/xMANf8UAEX/FQBV/zsAYa7FAAkQAAeBpDoAAaR5AAGkvgAF1P8BAQTTMAGlAAACZQAAAaUHAAX+1ACF/sAAlf7AAKUFOwQHJUAEAo7QVAGuuwABrlQAAg+DMAWPvgAlD74AR0AAAWUEOwWHJQACAoQTUAUEOwWF1PsAhdU7AKQUE1AHJMACAoRQTAGvUQAJIAAHga+SAAWfBQOF1DwABdR8ABXUvAAl1PwANdU8AEXVfABV3vwAaSAAA4SvgAABrwUACRAABYX/EAAF/xEAFf8SACX/EwA1/xQARf8VAFX/FgBl/xcAdf8YAIX/GQCV/zsAoa7FAAkQAAQBpDoAAaZ5AAGmPgAF1H8AkmRAAAGkRwAHJIACAo7QSAGkuwAF1NIABdUSABXVUgAl1JIANfRTAAX0VAAV9FUAJfRSADXUvwCRNJIAB2SAAsXUmQAhNJIAB2SAAiXUmQAl1P8AkQSSTAXU2QAl1RkABdVZABFVklQHZYAAF0AAAHJkgAABpYcAAVXVAAdlwAAXQAAAEoWUVAGlFgAF9lQAAaWAAAXVPwCRZRZQB2UAAFX2UgAV9lIAIaRAAAJkQAAHQAAA9dUZAAEFFEwBBRRYAQVRWAXFVQAF5RUAAQWWBAdQAADl9lEABdR/AJX2UQAV1H8AlfZRACGkQAACZEAABQQQAgXUfwCSZEAAAaRHAAUEuwIHJMACAoSQTAXUEgAF1NIAFdUSACXUkgA19FAABfRTABX0VAAl9FIANdQ/AJE0EAAHZAACxdQZACE0EAAHZAACJdQZACXUvwCRBBBIBdSZACXU2QAF1RkAEVVQUAdlQAAXQAAAcmQAAAGlRwABVZQAB2WAABdAAAAShVNQAaTVAAX2UwABpUAABdT/AJFk1UwHZMAAVfZQABX2UAAhpAAAAmQAAAdAAAD11NkAAQTTSAEE01QBBRFUBcUUAAXk1AABBVUEB1AAAOX2UQAF1D8AlfZQABXUPwCV9lAAIaQAAAJkAAABr0AACSAABAGvmAAFnwUFhdQ8AAXUfAAV1LwAJdT8ADXVPABF1XwAVdW8AGXV/AB11jwAhdZ8AJXe/ACpIAAFhK+AAARwAAABlFdGhlcmV1bSBTaWduZWQgTWVzc2FnZToKMzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdIAAAAAAAAB2gAAAAAAAAHoA==', + ), + }, +}; + +function base64ToUint8Array(base64: string) { + const binaryString = atob(base64); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} diff --git a/packages/evm-connector/tsconfig.json b/packages/evm-connector/tsconfig.json new file mode 100644 index 000000000..610622201 --- /dev/null +++ b/packages/evm-connector/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "ES2022", + "lib": ["DOM", "ES2022"], + "module": "es2022", + "moduleResolution": "Node", + "strict": true, + "noUncheckedIndexedAccess": true, + "declaration": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "outDir": "./dist" + }, + "exclude": ["./dist/**/*"] +} diff --git a/packages/evm-connector/tsup.config.js b/packages/evm-connector/tsup.config.js new file mode 100644 index 000000000..8e0c2622e --- /dev/null +++ b/packages/evm-connector/tsup.config.js @@ -0,0 +1,9 @@ +import baseConfig from '@fuels/tsup-config'; +import { defineConfig } from 'tsup'; + +export default defineConfig((options) => ({ + ...baseConfig(options, { withReact: false }), + format: ['cjs'], + external: ['fuels'], + entry: ['src/index.ts'], +})); diff --git a/packages/evm-connector/vite.config.ts b/packages/evm-connector/vite.config.ts new file mode 100644 index 000000000..6b36d3120 --- /dev/null +++ b/packages/evm-connector/vite.config.ts @@ -0,0 +1,31 @@ +// vite.config.js +import { resolve } from 'node:path'; +import { defineConfig } from 'vite'; +import dts from 'vite-plugin-dts'; + +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +export default defineConfig({ + plugins: [ + dts({ + include: [resolve(__dirname, 'src/')], + }), + ], + define: { + __dirname: JSON.stringify(path.dirname(__filename)), + __filename: JSON.stringify(fileURLToPath(import.meta.url)), + }, + build: { + lib: { + // Could also be a dictionary or array of multiple entry points + entry: resolve(__dirname, 'src/index.ts'), + name: '@fuels/wallet-connector-evm', + // the proper extensions will be added + fileName: 'wallet-connector-evm', + }, + }, + test: { + environment: 'jsdom', + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b039aebb7..a41e8fd78 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,7 +40,7 @@ importers: version: 1.13.0 vitest: specifier: 1.4.0 - version: 1.4.0 + version: 1.4.0(@types/node@20.11.30)(jsdom@24.0.0) examples/nodejs: dependencies: @@ -53,7 +53,7 @@ importers: devDependencies: tsup: specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) tsx: specifier: 4.7.1 version: 4.7.1 @@ -99,10 +99,13 @@ importers: version: 5.4.3 vite: specifier: 5.2.6 - version: 5.2.6 + version: 5.2.6(@types/node@20.11.30) packages/connectors: devDependencies: + '@fuel-connectors/evm-connector': + specifier: workspace:* + version: link:../evm-connector '@fuel-connectors/fuel-development-wallet': specifier: workspace:* version: link:../fuel-development-wallet @@ -120,10 +123,65 @@ importers: version: 5.29.2 tsup: specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + typescript: + specifier: 5.4.3 + version: 5.4.3 + + packages/evm-connector: + dependencies: + '@ethereumjs/util': + specifier: ^9.0.1 + version: 9.0.3 + '@ethersproject/bytes': + specifier: ^5.7.0 + version: 5.7.0 + memoizee: + specifier: ^0.4.15 + version: 0.4.15 + devDependencies: + '@fuel-ts/account': + specifier: ^0.78.0 + version: 0.78.0(dexie@4.0.1) + '@fuel-ts/forc': + specifier: 0.74.0 + version: 0.74.0 + '@fuel-ts/fuel-core': + specifier: ^0.78.0 + version: 0.78.0 + '@types/memoizee': + specifier: ^0.4.11 + version: 0.4.11 + fuels: + specifier: ^0.78.0 + version: 0.78.0(dexie@4.0.1) + jsdom: + specifier: 24.0.0 + version: 24.0.0 + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.4.3)(webpack@5.91.0) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.11.30)(typescript@5.4.3) + tsup: + specifier: 8.0.2 + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) + tsx: + specifier: ^4.7.0 + version: 4.7.1 typescript: specifier: 5.4.3 version: 5.4.3 + vite: + specifier: ^5.0.10 + version: 5.2.6(@types/node@20.11.30) + vite-plugin-dts: + specifier: ^3.6.4 + version: 3.7.3(@types/node@20.11.30)(typescript@5.4.3)(vite@5.2.6) + vitest: + specifier: ^1.4.0 + version: 1.4.0(@types/node@20.11.30)(jsdom@24.0.0) packages/fuel-development-wallet: devDependencies: @@ -135,7 +193,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -160,7 +218,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -181,7 +239,7 @@ importers: version: 0.79.0(dexie@4.0.1) tsup: specifier: 8.0.2 - version: 8.0.2(typescript@5.4.3) + version: 8.0.2(ts-node@10.9.2)(typescript@5.4.3) typescript: specifier: 5.4.3 version: 5.4.3 @@ -722,6 +780,13 @@ packages: prettier: 2.8.8 dev: true + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -1311,6 +1376,48 @@ packages: dev: true optional: true + /@ethereumjs/rlp@5.0.2: + resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==} + engines: {node: '>=18'} + hasBin: true + dev: false + + /@ethereumjs/util@9.0.3: + resolution: {integrity: sha512-PmwzWDflky+7jlZIFqiGsBPap12tk9zK5SVH9YW2OEnDN7OEhCjUOMzbOqwuClrbkSIkM2ERivd7sXZ48Rh/vg==} + engines: {node: '>=18'} + dependencies: + '@ethereumjs/rlp': 5.0.2 + ethereum-cryptography: 2.1.3 + dev: false + + /@ethersproject/bytes@5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + dev: false + + /@fuel-ts/abi-coder@0.78.0: + resolution: {integrity: sha512-66HGsaJUL3P9Qg3jwa8dGadTMZSnsHZj3FLOsL+IaQiaU0pwVzmYdhLjm/GfhmKatWIvwgHiKqVu9Vv/7A0ZQQ==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/crypto': 0.78.0 + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/hasher': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/math': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@fuel-ts/versions': 0.78.0 + ethers: 6.11.1 + type-fest: 3.13.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@fuel-ts/abi-coder@0.79.0: resolution: {integrity: sha512-Jdp0megar7aFP+jecnUvd1SR488wYG0AMb0C7lXpXoWIryk8DwHv8odIMXnj5WA7/VpApXiREgYoTCFs8k65oA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1328,6 +1435,23 @@ packages: - bufferutil - utf-8-validate + /@fuel-ts/abi-typegen@0.78.0: + resolution: {integrity: sha512-YLdh6cAXXsQei4DQlNg5LB/lULVvLBXfwP203VGZ9BGkRnzm3LBHKh/G3d1/L1nBuB/JiBw5iJvR3AosZ18l8g==} + engines: {node: ^18.18.2 || ^20.0.0} + hasBin: true + dependencies: + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@fuel-ts/versions': 0.78.0 + commander: 9.5.0 + glob: 10.3.12 + handlebars: 4.7.8 + mkdirp: 1.0.4 + ramda: 0.29.1 + rimraf: 3.0.2 + dev: true + /@fuel-ts/abi-typegen@0.79.0: resolution: {integrity: sha512-YGSc8KmFiYGp/H1ONbKsmX9CQwtV3TSt9NKcfguD26mlW5vNdmpDgEmELxn9xZCKqu4swAtMhT85f+jHzE//CQ==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1344,6 +1468,45 @@ packages: ramda: 0.29.1 rimraf: 3.0.2 + /@fuel-ts/account@0.78.0(dexie@4.0.1): + resolution: {integrity: sha512-dJOiwtVLBaiBafaIxpfb17+F3T+d+4yR/exIHYlQ/+uLOvXDFdxLfy/cz7uYMc94tvye9UPblUTgNpc2fPEnSA==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/abi-coder': 0.78.0 + '@fuel-ts/address': 0.78.0 + '@fuel-ts/crypto': 0.78.0 + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/fuel-core': 0.78.0 + '@fuel-ts/hasher': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/math': 0.78.0 + '@fuel-ts/merkle': 0.78.0 + '@fuel-ts/transactions': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@fuel-ts/versions': 0.78.0 + '@fuels/assets': 0.1.5 + '@fuels/vm-asm': 0.42.1 + '@noble/curves': 1.4.0 + dexie-observable: 4.0.1-beta.13(dexie@4.0.1) + ethers: 6.11.1 + events: 3.3.0 + graphql: 16.8.1 + graphql-request: 5.0.0(graphql@16.8.1) + graphql-tag: 2.12.6(graphql@16.8.1) + json-rpc-2.0: 1.7.0 + portfinder: 1.0.32 + ramda: 0.29.1 + tai64: 1.0.0 + tree-kill: 1.2.2 + uuid: 9.0.1 + transitivePeerDependencies: + - bufferutil + - dexie + - encoding + - supports-color + - utf-8-validate + dev: true + /@fuel-ts/account@0.79.0(dexie@4.0.1): resolution: {integrity: sha512-Rj0jV7JrXAolHk6/qlgCrK0YYjSVV6ehqf2g8lxmS102ShcS+/bVHvGhxhUeefGtHOdmHuVEJEcchcbpfuiYaQ==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1382,6 +1545,22 @@ packages: - supports-color - utf-8-validate + /@fuel-ts/address@0.78.0: + resolution: {integrity: sha512-1qT4jgMej8cqUFS40gQ53RTHYnYtgilKnY7GF7GFJdxFpBNIWQWNRbzYZM0NV/MYfLDRHEXCv0Ec0ditPVtXbw==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/crypto': 0.78.0 + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@fuel-ts/versions': 0.78.0 + '@noble/hashes': 1.4.0 + bech32: 2.0.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@fuel-ts/address@0.79.0: resolution: {integrity: sha512-KiDWMQB6cyY9sUCi7e7NPx2sCCejYjC/vLQrTnu4AxV2aVVwQ4GWcRpHO1OGYZ5RalR/yvcR9ebQhpidnU0lUw==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1397,6 +1576,30 @@ packages: - bufferutil - utf-8-validate + /@fuel-ts/contract@0.78.0(dexie@4.0.1): + resolution: {integrity: sha512-v2oZ8XIE35rZo4rk3ILsrLyV084qe07JtYTs8JwdpCpdk5FKfoCevzh7U9PKjtz+VabUSBFFLXzMY41knbfRpg==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/abi-coder': 0.78.0 + '@fuel-ts/account': 0.78.0(dexie@4.0.1) + '@fuel-ts/address': 0.78.0 + '@fuel-ts/crypto': 0.78.0 + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/hasher': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/merkle': 0.78.0 + '@fuel-ts/program': 0.78.0(dexie@4.0.1) + '@fuel-ts/transactions': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@fuel-ts/versions': 0.78.0 + transitivePeerDependencies: + - bufferutil + - dexie + - encoding + - supports-color + - utf-8-validate + dev: true + /@fuel-ts/contract@0.79.0(dexie@4.0.1): resolution: {integrity: sha512-kyC/pynI5kgTcm9R7xl1qrfUfMWsUQhXfnyv8AXeFuPIIrQMxIvKlKL4bgmQ6AUFJhTDiAv2fmc5dlbqO8RS7w==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1420,6 +1623,19 @@ packages: - supports-color - utf-8-validate + /@fuel-ts/crypto@0.78.0: + resolution: {integrity: sha512-3SV7lFjK9EvEwgE5v+2R5PeTTZdr/27LaD4FvZ+O2qby0YV503jmDvy4AlZ0Ps3q9dQl5AmpIUkFpoWhVUJMWA==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@noble/hashes': 1.4.0 + ethers: 6.11.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@fuel-ts/crypto@0.79.0: resolution: {integrity: sha512-kjXhoNK3rVrx0nDGDN9L1nZ6yU6XBVOujhrA5un9RD/hw4DdXfBL4XSIwu6HJ5ZLCcx555kabNHku9VxpIGopg==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1432,12 +1648,39 @@ packages: - bufferutil - utf-8-validate + /@fuel-ts/errors@0.78.0: + resolution: {integrity: sha512-54hclzlXn847pOLz59GitIQ3jQFPwjuZFVUolgmESQ6d3udfG6loCups1GbPPnSBJADyDtnn6q+k49g/lO+e6Q==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/versions': 0.78.0 + dev: true + /@fuel-ts/errors@0.79.0: resolution: {integrity: sha512-duca9y2b2z2uOgecxSqaCiRnWbu8Mb+O9zcJelXRpML9yAd7RUMn9enCEohCyFJpFCn4O3tKizJvnmNkeDrbew==} engines: {node: ^18.18.2 || ^20.0.0} dependencies: '@fuel-ts/versions': 0.79.0 + /@fuel-ts/forc@0.74.0: + resolution: {integrity: sha512-ran2OoHeUiITnPzUoUFe+MG2sc8DurQHm8f4hd6wzlByNDkG2qMQv23NVtWbSqOpnlvoBarQoqeyJriO7rQfAQ==} + hasBin: true + requiresBuild: true + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /@fuel-ts/forc@0.78.0: + resolution: {integrity: sha512-pzxaKvBx1cRlq9pfdma+86vWQc8HyjWQd5kh1DqEKYbje8Li2HfMZvLDGVpSB+/D2vimnIOOCWOS7NO4j1xrQQ==} + hasBin: true + requiresBuild: true + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + /@fuel-ts/forc@0.79.0: resolution: {integrity: sha512-+8fthdhkKLrnjwMNf8Cg66IYfEIOHipxE+q+Pem4iECDKq8o5U94sjut+AG1MisoXuU4P6hYd5uKioT4YLV+ow==} hasBin: true @@ -1447,6 +1690,16 @@ packages: transitivePeerDependencies: - encoding + /@fuel-ts/fuel-core@0.78.0: + resolution: {integrity: sha512-2ktK9mFSJBJrvXFuUU2meQjkv8XXNBE3++rwx51Z3vbV+0nb8+omgSzgRYPIdszHltPT12LUf8hyhdqOU4PtkA==} + hasBin: true + requiresBuild: true + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + /@fuel-ts/fuel-core@0.79.0: resolution: {integrity: sha512-7RfY2YsXaw5iSzMQgdHjA+NB4WH24qaaMrHqg3+llBBVst0ZsdgC6DK61Z/DUf7sAnLX/DC147b05O5xI6/QCg==} hasBin: true @@ -1456,6 +1709,22 @@ packages: transitivePeerDependencies: - encoding + /@fuel-ts/hasher@0.78.0: + resolution: {integrity: sha512-nw6jAYF4m9kydxvt2iPHsxbpti+N2HbDRnXz7nPuVBCYFDxoql5HzmMdK4DhaqgzLCGomkFZH2O1wJ/nLlPSOQ==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/address': 0.78.0 + '@fuel-ts/crypto': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/math': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@noble/hashes': 1.4.0 + ramda: 0.29.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@fuel-ts/hasher@0.79.0: resolution: {integrity: sha512-y4qcJjIqHxYas3QJm5eI2tcR2Ql/+ReF8avCJ/TS4c/7ZTqESlW4GYHuzgt4+BRawXa+keDfyrbV3gSVS0UByQ==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1471,10 +1740,24 @@ packages: - bufferutil - utf-8-validate + /@fuel-ts/interfaces@0.78.0: + resolution: {integrity: sha512-VRj1V8bmJ0l6hiRXw5sNk1KcHEtu8AYy4U4WqAeTUpQwJBMKDQN89QtJPqoZMHh1/j9wOcJbfnnRyskpKRkgJg==} + engines: {node: ^18.18.2 || ^20.0.0} + dev: true + /@fuel-ts/interfaces@0.79.0: resolution: {integrity: sha512-L0KrElKvtLRYDzR/SNH26jVLSLBlE+xng9Wm4gyLSrR7Wnf6pB/l+/BrqGdwbWlN9kD205tC7pUa0KD5AugE2w==} engines: {node: ^18.18.2 || ^20.0.0} + /@fuel-ts/math@0.78.0: + resolution: {integrity: sha512-JeDz/7GQJrIhm0EM3jim1qOCNw3/FoG0M3hN2TSzItN5tiaupwjMXb5CgQS5k+WwmXWKQikWJwQBz5dLdbB3qA==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/errors': 0.78.0 + '@types/bn.js': 5.1.5 + bn.js: 5.2.1 + dev: true + /@fuel-ts/math@0.79.0: resolution: {integrity: sha512-x5BxKYzrBF+RfqaUQyWXl4dLn16CMOWQdiVL22ixwFJY42lLKMCaFkN+91dXbF1T0bOlsYclZXfNIlCxGqqfFA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1483,6 +1766,18 @@ packages: '@types/bn.js': 5.1.5 bn.js: 5.2.1 + /@fuel-ts/merkle@0.78.0: + resolution: {integrity: sha512-Aw+TNQJv/nOPMkq9YoSMBOePn1/ZWblJbs1lGQ1F4HK4Dv0ghPeJPJgMoY8E7CAQKD2iajX8QqdSUUBwHpnfjQ==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/hasher': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/math': 0.78.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@fuel-ts/merkle@0.79.0: resolution: {integrity: sha512-VNKvpayikz6HusX2KhSkJTdPyamG+4sv5zOugCRFfjLMJHp1YpGwvy64AY4SijVMojNWP7Pf6Yr4juEKc01XaQ==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1494,6 +1789,29 @@ packages: - bufferutil - utf-8-validate + /@fuel-ts/program@0.78.0(dexie@4.0.1): + resolution: {integrity: sha512-NOWoP5uZZAIBAp0/vy/zWRnTYwhft4DGE45y1G2wDh+A2AmUdvts3w4IwhEQIYy+RcssAzW9+UMyYWKNA1DNdg==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/abi-coder': 0.78.0 + '@fuel-ts/account': 0.78.0(dexie@4.0.1) + '@fuel-ts/address': 0.78.0 + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/hasher': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/math': 0.78.0 + '@fuel-ts/transactions': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@fuel-ts/versions': 0.78.0 + '@fuels/vm-asm': 0.42.1 + transitivePeerDependencies: + - bufferutil + - dexie + - encoding + - supports-color + - utf-8-validate + dev: true + /@fuel-ts/program@0.79.0(dexie@4.0.1): resolution: {integrity: sha512-TwLP2qYuR13anM57cDEUGPUlakuVGUnJ4W5h3uUGINfO5USnyQkW9vwvLcFsXL8WvqOimFGMnmRv+ElsMM4Q3A==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1516,6 +1834,28 @@ packages: - supports-color - utf-8-validate + /@fuel-ts/script@0.78.0(dexie@4.0.1): + resolution: {integrity: sha512-by4f627nhl6dxhA6dctbA7t14ZOO/pz1tRK+2hpE8fsOCiWMiunrSkAoAMKPrjJaarDPlK1waFgDIqa2/Lfzdg==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/abi-coder': 0.78.0 + '@fuel-ts/abi-typegen': 0.78.0 + '@fuel-ts/account': 0.78.0(dexie@4.0.1) + '@fuel-ts/address': 0.78.0 + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/math': 0.78.0 + '@fuel-ts/program': 0.78.0(dexie@4.0.1) + '@fuel-ts/transactions': 0.78.0 + '@fuel-ts/utils': 0.78.0 + transitivePeerDependencies: + - bufferutil + - dexie + - encoding + - supports-color + - utf-8-validate + dev: true + /@fuel-ts/script@0.79.0(dexie@4.0.1): resolution: {integrity: sha512-w3qB3oD1y/HMOzSU7pWRSMHDn+nurYB/zqk0HRDVPdF6t53hv6yaXQukSzHhsk2Fvsy+nsDEWVj63VZl0ehzAw==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1537,6 +1877,22 @@ packages: - supports-color - utf-8-validate + /@fuel-ts/transactions@0.78.0: + resolution: {integrity: sha512-NcnZd6Yh8dY9h8F0m5jEjLf5+aVBG1g82yjYJPsZsNuQ8CFMKzJJwvyEV3aKXOayG/kBRK4r3oBGbX6dIr7imA==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/abi-coder': 0.78.0 + '@fuel-ts/address': 0.78.0 + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/hasher': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/math': 0.78.0 + '@fuel-ts/utils': 0.78.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@fuel-ts/transactions@0.79.0: resolution: {integrity: sha512-k7S4FSO6RrSaSjUaHnuK9KmfaH856ertn+Eall75ZhVV+00Lh+Ewe64xMzzqmKqdr7Puii2QAaKCtssHVDAfOQ==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1552,6 +1908,16 @@ packages: - bufferutil - utf-8-validate + /@fuel-ts/utils@0.78.0: + resolution: {integrity: sha512-PnWRSbMyEQDjXJxbESoOsec6FEdyvxr34A72eEtsqypJ5vM4RQsQ8/DHMGiI6gDAWkLZhZWcNGNuzqpHcvl5xA==} + engines: {node: ^18.18.2 || ^20.0.0} + dependencies: + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + ramda: 0.29.1 + rimraf: 3.0.2 + dev: true + /@fuel-ts/utils@0.79.0: resolution: {integrity: sha512-9hESU0q04jKlOvOC3qr9hpmJF2pgf5cdF785sV2apyTOfw9Luzi+O5uzTr9EKmazKr5nl8KhuDKAtTCIiBRfmA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1561,6 +1927,15 @@ packages: ramda: 0.29.1 rimraf: 3.0.2 + /@fuel-ts/versions@0.78.0: + resolution: {integrity: sha512-w0cXfNcOcpqC2gJoKx+so8by6QMEs0pqlSWThhBoarkvy33DdMk682kiO0QfF47d7IlqLvDPiJhRTGQYo24IFA==} + engines: {node: ^18.18.2 || ^20.0.0} + hasBin: true + dependencies: + chalk: 4.1.2 + cli-table: 0.3.11 + dev: true + /@fuel-ts/versions@0.79.0: resolution: {integrity: sha512-nTpBnfgYqyaK5snKmUaF43M1jcOQOOteQmsxrLnkrWIff4nR3vXGPM4Dm90pCNATMpz9DNs9gSDuC2oSKqoxnA==} engines: {node: ^18.18.2 || ^20.0.0} @@ -1679,6 +2054,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: @@ -1699,11 +2081,60 @@ packages: read-yaml-file: 1.1.0 dev: true + /@microsoft/api-extractor-model@7.28.3(@types/node@20.11.30): + resolution: {integrity: sha512-wT/kB2oDbdZXITyDh2SQLzaWwTOFbV326fP0pUwNW00WeliARs0qjmXBWmGWardEzp2U3/axkO3Lboqun6vrig==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.62.0(@types/node@20.11.30) + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/api-extractor@7.39.0(@types/node@20.11.30): + resolution: {integrity: sha512-PuXxzadgnvp+wdeZFPonssRAj/EW4Gm4s75TXzPk09h3wJ8RS3x7typf95B4vwZRrPTQBGopdUl+/vHvlPdAcg==} + hasBin: true + dependencies: + '@microsoft/api-extractor-model': 7.28.3(@types/node@20.11.30) + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.62.0(@types/node@20.11.30) + '@rushstack/rig-package': 0.5.1 + '@rushstack/ts-command-line': 4.17.1 + colors: 1.2.5 + lodash: 4.17.21 + resolve: 1.22.8 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.3.3 + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/tsdoc-config@0.16.2: + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true + + /@microsoft/tsdoc@0.14.2: + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true + /@noble/curves@1.2.0: resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} dependencies: '@noble/hashes': 1.3.2 + /@noble/curves@1.3.0: + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + dependencies: + '@noble/hashes': 1.3.3 + dev: false + /@noble/curves@1.4.0: resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} dependencies: @@ -1713,6 +2144,11 @@ packages: resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} engines: {node: '>= 16'} + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: false + /@noble/hashes@1.4.0: resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} @@ -2026,6 +2462,20 @@ packages: react: 18.2.0 dev: false + /@rollup/pluginutils@5.1.0: + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + /@rollup/rollup-android-arm-eabi@4.13.0: resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} cpu: [arm] @@ -2130,18 +2580,71 @@ packages: dev: true optional: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + /@rushstack/node-core-library@3.62.0(@types/node@20.11.30): + resolution: {integrity: sha512-88aJn2h8UpSvdwuDXBv1/v1heM6GnBf3RjEy6ZPP7UnzHNCqOHA2Ut+ScYUbXcqIdfew9JlTAe3g+cnX9xQ/Aw==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.11.30 + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.8 + semver: 7.5.4 + z-schema: 5.0.5 dev: true - /@tanstack/query-core@5.28.8: - resolution: {integrity: sha512-cx64XHeB0kvKxFt22ibvegPeOxnaWVFUbAuhXoIrb7+XePEexHWoB9Kq5n9qroNPkRwQZwgFAP9HNbQz5ohoIg==} - - /@tanstack/query-devtools@5.28.6: - resolution: {integrity: sha512-DXJGqbrsteWU9XehDf6s3k3QxwQqGUlNXpitsF1xbwkYBcDaAakiC6hjJSMfPBHOrbZCnWfAGCVf4vh2D75/xw==} + /@rushstack/rig-package@0.5.1: + resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} + dependencies: + resolve: 1.22.8 + strip-json-comments: 3.1.1 dev: true - /@tanstack/react-query-devtools@5.28.8(@tanstack/react-query@5.28.8)(react@18.2.0): + /@rushstack/ts-command-line@4.17.1: + resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==} + dependencies: + '@types/argparse': 1.0.38 + argparse: 1.0.10 + colors: 1.2.5 + string-argv: 0.3.2 + dev: true + + /@scure/base@1.1.6: + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + dev: false + + /@scure/bip32@1.3.3: + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + dev: false + + /@scure/bip39@1.2.2: + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + dev: false + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@tanstack/query-core@5.28.8: + resolution: {integrity: sha512-cx64XHeB0kvKxFt22ibvegPeOxnaWVFUbAuhXoIrb7+XePEexHWoB9Kq5n9qroNPkRwQZwgFAP9HNbQz5ohoIg==} + + /@tanstack/query-devtools@5.28.6: + resolution: {integrity: sha512-DXJGqbrsteWU9XehDf6s3k3QxwQqGUlNXpitsF1xbwkYBcDaAakiC6hjJSMfPBHOrbZCnWfAGCVf4vh2D75/xw==} + dev: true + + /@tanstack/react-query-devtools@5.28.8(@tanstack/react-query@5.28.8)(react@18.2.0): resolution: {integrity: sha512-NorR2ueGlGdB5PTvt1WynzjfNI/OJwiisB1r0UAwgi0Em2UalZpMltwvoIrGhJ0T2V+8b0MV5wD+cmf0PPdHGA==} peerDependencies: '@tanstack/react-query': ^5.28.8 @@ -2160,6 +2663,26 @@ packages: '@tanstack/query-core': 5.28.8 react: 18.2.0 + /@tsconfig/node10@1.0.10: + resolution: {integrity: sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/argparse@1.0.38: + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + dev: true + /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: @@ -2194,6 +2717,20 @@ packages: dependencies: '@types/node': 20.11.30 + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + dependencies: + '@types/eslint': 8.56.6 + '@types/estree': 1.0.5 + dev: true + + /@types/eslint@8.56.6: + resolution: {integrity: sha512-ymwc+qb1XkjT/gfoQwxIeHZ6ixH23A+tCT2ADSA/DPVKzAjwYkTXBMCQ/f6fe4wEa85Lhp26VPeUxI7wMhAi7A==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true @@ -2202,12 +2739,20 @@ packages: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + /@types/lodash@4.17.0: resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} /@types/long@4.0.0: resolution: {integrity: sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==} + /@types/memoizee@0.4.11: + resolution: {integrity: sha512-2gyorIBZu8GoDr9pYjROkxWWcFtHCquF7TVbN2I+/OvgZhnIGQS0vX5KJz4lXNKb8XOSfxFOSG5OLru1ESqLUg==} + dev: true + /@types/minimist@1.2.5: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true @@ -2264,7 +2809,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.3) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.2.6 + vite: 5.2.6(@types/node@20.11.30) transitivePeerDependencies: - supports-color dev: true @@ -2288,7 +2833,7 @@ packages: strip-literal: 2.0.0 test-exclude: 6.0.0 v8-to-istanbul: 9.2.0 - vitest: 1.4.0 + vitest: 1.4.0(@types/node@20.11.30)(jsdom@24.0.0) transitivePeerDependencies: - supports-color dev: true @@ -2332,6 +2877,188 @@ packages: pretty-format: 29.7.0 dev: true + /@volar/language-core@1.11.1: + resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + dependencies: + '@volar/source-map': 1.11.1 + dev: true + + /@volar/source-map@1.11.1: + resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + dependencies: + muggle-string: 0.3.1 + dev: true + + /@volar/typescript@1.11.1: + resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + dependencies: + '@volar/language-core': 1.11.1 + path-browserify: 1.0.1 + dev: true + + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + dependencies: + '@babel/parser': 7.24.1 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + dependencies: + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/language-core@1.8.27(typescript@5.4.3): + resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.11.1 + '@volar/source-map': 1.11.1 + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 + computeds: 0.0.1 + minimatch: 9.0.3 + muggle-string: 0.3.1 + path-browserify: 1.0.1 + typescript: 5.4.3 + vue-template-compiler: 2.7.16 + dev: true + + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + dev: true + + /@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: true + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: true + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: true + + /@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + dev: true + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: true + + /@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + dev: true + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: true + + /@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + dev: true + + /@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + dev: true + + /@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: true + + /@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + dev: true + + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /acorn-import-assertions@1.9.0(acorn@8.11.3): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.11.3 + dev: true + /acorn-walk@8.3.2: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} @@ -2346,6 +3073,32 @@ packages: /aes-js@4.0.0-beta.5: resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -2397,6 +3150,10 @@ packages: normalize-path: 3.0.0 picomatch: 2.3.1 + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -2640,6 +3397,11 @@ packages: optionalDependencies: fsevents: 2.3.3 + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: true + /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -2715,6 +3477,11 @@ packages: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} engines: {node: '>=0.1.90'} + /colors@1.2.5: + resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} + engines: {node: '>=0.1.90'} + dev: true + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -2743,6 +3510,10 @@ packages: resolution: {integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==} dev: true + /computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + dev: true + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -2750,6 +3521,10 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -2773,6 +3548,13 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /cssstyle@4.0.1: + resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + engines: {node: '>=18'} + dependencies: + rrweb-cssom: 0.6.0 + dev: true + /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -2798,6 +3580,22 @@ packages: stream-transform: 2.1.3 dev: true + /d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + dependencies: + es5-ext: 0.10.64 + type: 2.7.2 + dev: false + + /data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + dev: true + /data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -2829,6 +3627,10 @@ packages: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true + /de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + dev: true + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -2864,6 +3666,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: true + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -2923,6 +3729,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2957,6 +3768,14 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -2965,6 +3784,11 @@ packages: strip-ansi: 6.0.1 dev: true + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -3035,6 +3859,10 @@ packages: engines: {node: '>= 0.4'} dev: true + /es-module-lexer@1.5.0: + resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} + dev: true + /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -3066,6 +3894,42 @@ packages: is-symbol: 1.0.4 dev: true + /es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + dev: false + + /es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + dev: false + + /es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + dependencies: + d: 1.0.2 + ext: 1.7.0 + dev: false + + /es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + dev: false + /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -3167,18 +4031,66 @@ packages: engines: {node: '>=0.8.0'} dev: true + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.2 + dev: false + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: true + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 dev: true + /ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + dev: false + /ethers@6.11.1: resolution: {integrity: sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==} engines: {node: '>=14.0.0'} @@ -3194,6 +4106,13 @@ packages: - bufferutil - utf-8-validate + /event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + dev: false + /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true @@ -3232,6 +4151,12 @@ packages: strip-final-newline: 3.0.0 dev: true + /ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + dev: false + /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true @@ -3249,6 +4174,10 @@ packages: resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -3260,6 +4189,10 @@ packages: micromatch: 4.0.5 dev: true + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + /fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: @@ -3316,6 +4249,15 @@ packages: combined-stream: 1.0.8 mime-types: 2.1.35 + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -3344,6 +4286,51 @@ packages: requiresBuild: true optional: true + /fuels@0.78.0(dexie@4.0.1): + resolution: {integrity: sha512-v4uXn6M5nDDsmbFvePotEAWSVlKIgfu2rqvcnQ9uObhgy5slpw+9yDNp8Ds2Z10wyC0bCJZZZslQhQiK/oltiQ==} + engines: {node: ^18.18.2 || ^20.0.0} + hasBin: true + dependencies: + '@fuel-ts/abi-coder': 0.78.0 + '@fuel-ts/abi-typegen': 0.78.0 + '@fuel-ts/account': 0.78.0(dexie@4.0.1) + '@fuel-ts/address': 0.78.0 + '@fuel-ts/contract': 0.78.0(dexie@4.0.1) + '@fuel-ts/crypto': 0.78.0 + '@fuel-ts/errors': 0.78.0 + '@fuel-ts/forc': 0.78.0 + '@fuel-ts/fuel-core': 0.78.0 + '@fuel-ts/hasher': 0.78.0 + '@fuel-ts/interfaces': 0.78.0 + '@fuel-ts/math': 0.78.0 + '@fuel-ts/merkle': 0.78.0 + '@fuel-ts/program': 0.78.0(dexie@4.0.1) + '@fuel-ts/script': 0.78.0(dexie@4.0.1) + '@fuel-ts/transactions': 0.78.0 + '@fuel-ts/utils': 0.78.0 + '@fuel-ts/versions': 0.78.0 + bundle-require: 4.0.2(esbuild@0.19.12) + chalk: 4.1.2 + chokidar: 3.6.0 + commander: 9.5.0 + esbuild: 0.19.12 + glob: 10.3.12 + handlebars: 4.7.8 + joycon: 3.1.1 + lodash.camelcase: 4.3.0 + portfinder: 1.0.32 + rimraf: 3.0.2 + toml: 3.0.0 + tree-kill: 1.2.2 + yup: 0.32.11 + transitivePeerDependencies: + - bufferutil + - dexie + - encoding + - supports-color + - utf-8-validate + dev: true + /fuels@0.79.0(dexie@4.0.1): resolution: {integrity: sha512-koo7YKNzq821FOa7aLXdSAEllCLHWd+dcNwoAqyHkPw/zGKIUmeNpPDFXuL1zMGxkibTTJEaQ22vM4zHKP2rng==} engines: {node: ^18.18.2 || ^20.0.0} @@ -3472,6 +4459,10 @@ packages: dependencies: is-glob: 4.0.3 + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + /glob@10.3.10: resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} engines: {node: '>=16 || 14 >=14.17'} @@ -3629,14 +4620,46 @@ packages: function-bind: 1.1.2 dev: true + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true + /html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + dependencies: + whatwg-encoding: 3.1.1 + dev: true + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true @@ -3664,11 +4687,23 @@ packages: safer-buffer: 2.1.2 dev: true + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} dev: true + /import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: true + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -3802,6 +4837,14 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true + + /is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + dev: false + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -3914,6 +4957,19 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.11.30 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true + /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -3933,6 +4989,42 @@ packages: esprima: 4.0.1 dev: true + /jsdom@24.0.0: + resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + cssstyle: 4.0.1 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.4 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.16.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} @@ -3946,6 +5038,10 @@ packages: /json-rpc-2.0@1.7.0: resolution: {integrity: sha512-asnLgC1qD5ytP+fvBP8uL0rvj+l8P6iYICbzZ8dVxCpESffVjzA7KkYkbKCIbavs7cllwH1ZUaNtJwphdeRqpg==} + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -3972,6 +5068,10 @@ packages: engines: {node: '>=6'} dev: true + /kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + dev: true + /lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} engines: {node: '>=14'} @@ -4031,6 +5131,11 @@ packages: strip-bom: 3.0.0 dev: true + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + /local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} @@ -4059,6 +5164,14 @@ packages: /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true @@ -4120,6 +5233,12 @@ packages: yallist: 4.0.0 dev: true + /lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + dependencies: + es5-ext: 0.10.64 + dev: false + /magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} @@ -4142,6 +5261,10 @@ packages: semver: 7.6.0 dev: true + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -4152,6 +5275,19 @@ packages: engines: {node: '>=8'} dev: true + /memoizee@0.4.15: + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.7 + dev: false + /meow@6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} @@ -4277,6 +5413,10 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: true + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -4297,6 +5437,10 @@ packages: /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: false + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -4339,6 +5483,10 @@ packages: path-key: 4.0.0 dev: true + /nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: true + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -4453,6 +5601,16 @@ packages: lines-and-columns: 1.2.4 dev: true + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: true + + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -4557,7 +5715,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /postcss-load-config@4.0.2: + /postcss-load-config@4.0.2(ts-node@10.9.2): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: @@ -4570,6 +5728,7 @@ packages: optional: true dependencies: lilconfig: 3.1.1 + ts-node: 10.9.2(@types/node@20.11.30)(typescript@5.4.3) yaml: 2.4.1 dev: true @@ -4614,11 +5773,19 @@ packages: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -4631,6 +5798,12 @@ packages: /ramda@0.29.1: resolution: {integrity: sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==} + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: @@ -4772,6 +5945,10 @@ packages: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -4781,6 +5958,13 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + dev: true + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -4844,6 +6028,10 @@ packages: fsevents: 2.3.3 dev: true + /rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -4860,6 +6048,10 @@ packages: isarray: 2.0.5 dev: true + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -4873,11 +6065,27 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true + /saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + dependencies: + xmlchars: 2.2.0 + dev: true + /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -4888,6 +6096,14 @@ packages: hasBin: true dev: true + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} @@ -4896,6 +6112,12 @@ packages: lru-cache: 6.0.0 dev: true + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + dependencies: + randombytes: 2.1.0 + dev: true + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true @@ -5016,6 +6238,11 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -5161,6 +6388,11 @@ packages: min-indent: 1.0.1 dev: true + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + /strip-literal@2.0.0: resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} dependencies: @@ -5194,11 +6426,22 @@ packages: dependencies: has-flag: 4.0.0 + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true + /tai64@1.0.0: resolution: {integrity: sha512-bfidqCho3mtZsqNFyVXc4obhDmRIUbQp2godk137z/z47BJ+oKYIVHgJrdYOAciRJ6+P2iDjDtcm/DgQ7I11fQ==} dependencies: @@ -5206,11 +6449,41 @@ packages: '@types/node': 10.12.18 long: 4.0.0 + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} dev: true + /terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.91.0): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + esbuild: 0.19.12 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.29.2 + webpack: 5.91.0(esbuild@0.19.12) + dev: true + /terser@5.29.2: resolution: {integrity: sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==} engines: {node: '>=10'} @@ -5244,6 +6517,13 @@ packages: any-promise: 1.3.0 dev: true + /timers-ext@0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + dependencies: + es5-ext: 0.10.64 + next-tick: 1.1.0 + dev: false + /tinybench@2.6.0: resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} dev: true @@ -5282,6 +6562,16 @@ packages: /toposort@2.0.2: resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: true + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -5291,6 +6581,13 @@ packages: punycode: 2.3.1 dev: true + /tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + dependencies: + punycode: 2.3.1 + dev: true + /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -5304,6 +6601,53 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true + /ts-loader@9.5.1(typescript@5.4.3)(webpack@5.91.0): + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.16.0 + micromatch: 4.0.5 + semver: 7.6.0 + source-map: 0.7.4 + typescript: 5.4.3 + webpack: 5.91.0(esbuild@0.19.12) + dev: true + + /ts-node@10.9.2(@types/node@20.11.30)(typescript@5.4.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.10 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.11.30 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /tslib@2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} @@ -5334,7 +6678,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2 + postcss-load-config: 4.0.2(ts-node@10.9.2) resolve-from: 5.0.0 rollup: 3.29.4 source-map: 0.8.0-beta.0 @@ -5346,7 +6690,7 @@ packages: - ts-node dev: true - /tsup@8.0.2(typescript@5.4.3): + /tsup@8.0.2(ts-node@10.9.2)(typescript@5.4.3): resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} engines: {node: '>=18'} hasBin: true @@ -5373,7 +6717,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2 + postcss-load-config: 4.0.2(ts-node@10.9.2) resolve-from: 5.0.0 rollup: 4.13.0 source-map: 0.8.0-beta.0 @@ -5494,6 +6838,10 @@ packages: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} + /type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + dev: false + /typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -5544,6 +6892,12 @@ packages: hasBin: true dev: true + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /typescript@5.4.3: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} @@ -5583,6 +6937,11 @@ packages: engines: {node: '>= 4.0.0'} dev: true + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: true + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -5594,6 +6953,19 @@ packages: picocolors: 1.0.0 dev: true + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + /use-callback-ref@1.3.2(@types/react@18.2.71)(react@18.2.0): resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} @@ -5629,6 +7001,10 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + /v8-to-istanbul@9.2.0: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} @@ -5645,7 +7021,12 @@ packages: spdx-expression-parse: 3.0.1 dev: true - /vite-node@1.4.0: + /validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + dev: true + + /vite-node@1.4.0(@types/node@20.11.30): resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -5654,7 +7035,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.6 + vite: 5.2.6(@types/node@20.11.30) transitivePeerDependencies: - '@types/node' - less @@ -5666,7 +7047,31 @@ packages: - terser dev: true - /vite@5.2.6: + /vite-plugin-dts@3.7.3(@types/node@20.11.30)(typescript@5.4.3)(vite@5.2.6): + resolution: {integrity: sha512-26eTlBYdpjRLWCsTJebM8vkCieE+p9gP3raf+ecDnzzK5E3FG6VE1wcy55OkRpfWWVlVvKkYFe6uvRHYWx7Nog==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + dependencies: + '@microsoft/api-extractor': 7.39.0(@types/node@20.11.30) + '@rollup/pluginutils': 5.1.0 + '@vue/language-core': 1.8.27(typescript@5.4.3) + debug: 4.3.4 + kolorist: 1.8.0 + typescript: 5.4.3 + vite: 5.2.6(@types/node@20.11.30) + vue-tsc: 1.8.27(typescript@5.4.3) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + dev: true + + /vite@5.2.6(@types/node@20.11.30): resolution: {integrity: sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -5694,6 +7099,7 @@ packages: terser: optional: true dependencies: + '@types/node': 20.11.30 esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.13.0 @@ -5701,7 +7107,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@1.4.0: + /vitest@1.4.0(@types/node@20.11.30)(jsdom@24.0.0): resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -5726,6 +7132,7 @@ packages: jsdom: optional: true dependencies: + '@types/node': 20.11.30 '@vitest/expect': 1.4.0 '@vitest/runner': 1.4.0 '@vitest/snapshot': 1.4.0 @@ -5735,6 +7142,7 @@ packages: chai: 4.4.1 debug: 4.3.4 execa: 8.0.1 + jsdom: 24.0.0 local-pkg: 0.5.0 magic-string: 0.30.8 pathe: 1.1.2 @@ -5743,8 +7151,8 @@ packages: strip-literal: 2.0.0 tinybench: 2.6.0 tinypool: 0.8.3 - vite: 5.2.6 - vite-node: 1.4.0 + vite: 5.2.6(@types/node@20.11.30) + vite-node: 1.4.0(@types/node@20.11.30) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -5756,6 +7164,40 @@ packages: - terser dev: true + /vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + dev: true + + /vue-tsc@1.8.27(typescript@5.4.3): + resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@volar/typescript': 1.11.1 + '@vue/language-core': 1.8.27(typescript@5.4.3) + semver: 7.6.0 + typescript: 5.4.3 + dev: true + + /w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + dependencies: + xml-name-validator: 5.0.0 + dev: true + + /watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: true + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -5774,6 +7216,76 @@ packages: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true + /webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: true + + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack@5.91.0(esbuild@0.19.12): + resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.11.3 + acorn-import-assertions: 1.9.0(acorn@8.11.3) + browserslist: 4.23.0 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.16.0 + es-module-lexer: 1.5.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.91.0) + watchpack: 2.4.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + dependencies: + iconv-lite: 0.6.3 + dev: true + + /whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + dev: true + + /whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + dev: true + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -5884,6 +7396,19 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /ws@8.5.0: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} @@ -5896,6 +7421,15 @@ packages: utf-8-validate: optional: true + /xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + dev: true + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true @@ -5971,6 +7505,11 @@ packages: yargs-parser: 21.1.1 dev: true + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -5992,3 +7531,15 @@ packages: nanoclone: 0.2.1 property-expr: 2.0.6 toposort: 2.0.2 + + /z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.11.0 + optionalDependencies: + commander: 9.5.0 + dev: true