diff --git a/Cargo.lock b/Cargo.lock index bc1db31c9..b221a83c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,17 +57,6 @@ dependencies = [ "opaque-debug", ] -[[package]] -name = "aes" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" -dependencies = [ - "cfg-if", - "cipher 0.4.4", - "cpufeatures", -] - [[package]] name = "aes-gcm" version = "0.9.2" @@ -75,9 +64,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc3be92e19a7ef47457b8e6f90707e12b6ac5d20c6f3866584fa3be0787d839f" dependencies = [ "aead", - "aes 0.7.5", + "aes", "cipher 0.3.0", - "ctr 0.7.0", + "ctr", "ghash", "subtle", ] @@ -425,12 +414,6 @@ 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 = "bech32" version = "0.10.0-beta" @@ -482,7 +465,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5973a027b341b462105675962214dfe3c938ad9afd395d84b28602608bdcec7b" dependencies = [ - "bech32 0.10.0-beta", + "bech32", "bitcoin-internals", "bitcoin_hashes", "core2 0.3.3", @@ -699,7 +682,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ - "sha2", "tinyvec", ] @@ -1006,58 +988,6 @@ dependencies = [ "unicode-width", ] -[[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 0.10.7", - "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.5", - "bech32 0.9.1", - "bs58", - "digest 0.10.7", - "generic-array 0.14.7", - "hex", - "ripemd", - "serde", - "serde_derive", - "sha2", - "sha3", - "thiserror", -] - [[package]] name = "colorchoice" version = "1.0.0" @@ -1356,15 +1286,6 @@ dependencies = [ "cipher 0.3.0", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher 0.4.4", -] - [[package]] name = "curve25519-dalek" version = "4.1.1" @@ -1557,7 +1478,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ - "uuid 1.5.0", + "uuid", ] [[package]] @@ -1988,28 +1909,6 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "eth-keystore" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" -dependencies = [ - "aes 0.8.3", - "ctr 0.9.2", - "digest 0.10.7", - "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" @@ -2049,7 +1948,6 @@ dependencies = [ "ethers-contract", "ethers-core", "ethers-providers", - "ethers-signers", "eyre", "group", "hex", @@ -2203,25 +2101,6 @@ dependencies = [ "ws_stream_wasm", ] -[[package]] -name = "ethers-signers" -version = "2.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea44bec930f12292866166f9ddbea6aa76304850e4d8dcd66dc492b43d00ff1" -dependencies = [ - "async-trait", - "coins-bip32", - "coins-bip39", - "const-hex", - "elliptic-curve", - "eth-keystore", - "ethers-core", - "rand", - "sha2", - "thiserror", - "tracing", -] - [[package]] name = "event-listener" version = "2.5.3" @@ -6409,15 +6288,6 @@ dependencies = [ "bytemuck", ] -[[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher 0.4.4", -] - [[package]] name = "same-file" version = "1.0.6" @@ -7537,18 +7407,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152" -[[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.7.1" @@ -10099,16 +9957,6 @@ 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.5.0" diff --git a/coins/ethereum/Cargo.toml b/coins/ethereum/Cargo.toml index 64755c80a..82c0bbcc8 100644 --- a/coins/ethereum/Cargo.toml +++ b/coins/ethereum/Cargo.toml @@ -23,7 +23,6 @@ k256 = { version = "^0.13.1", default-features = false, features = ["std", "ecds frost = { package = "modular-frost", path = "../../crypto/frost", features = ["secp256k1", "tests"] } ethers-core = { version = "2", default-features = false } -ethers-signers = { version = "2", default-features = false } ethers-providers = { version = "2", default-features = false } ethers-contract = { version = "2", default-features = false, features = ["abigen", "providers"] } diff --git a/coins/ethereum/tests/contract.rs b/coins/ethereum/tests/contract.rs index 11b3583eb..9a0a5b79b 100644 --- a/coins/ethereum/tests/contract.rs +++ b/coins/ethereum/tests/contract.rs @@ -2,15 +2,18 @@ use std::{convert::TryFrom, sync::Arc, time::Duration, fs::File}; use rand_core::OsRng; -use ::k256::{elliptic_curve::bigint::ArrayEncoding, U256}; +use ::k256::{ + elliptic_curve::{bigint::ArrayEncoding, PrimeField}, + U256, +}; use ethers_core::{ + types::Signature, abi::Abi, utils::{keccak256, Anvil, AnvilInstance}, }; use ethers_contract::ContractFactory; use ethers_providers::{Middleware, Provider, Http}; -use ethers_signers::{Signer, LocalWallet}; use frost::{ curve::Secp256k1, @@ -40,7 +43,7 @@ struct Artifact { pub async fn deploy_schnorr_verifier_contract( chain_id: u32, client: Arc>, - wallet: &LocalWallet, + wallet: &k256::ecdsa::SigningKey, ) -> eyre::Result>> { let path = "./artifacts/Schnorr.sol/Schnorr.json"; let artifact: Artifact = serde_json::from_reader(File::open(path).unwrap()).unwrap(); @@ -57,8 +60,21 @@ pub async fn deploy_schnorr_verifier_contract( let (max_fee_per_gas, max_priority_fee_per_gas) = client.estimate_eip1559_fees(None).await?; deployment_tx.as_eip1559_mut().unwrap().max_fee_per_gas = Some(max_fee_per_gas); deployment_tx.as_eip1559_mut().unwrap().max_priority_fee_per_gas = Some(max_priority_fee_per_gas); - let signature = wallet.sign_transaction_sync(&deployment_tx)?; - let deployment_tx = deployment_tx.rlp_signed(&signature); + + let sig_hash = deployment_tx.sighash(); + let (sig, rid) = wallet.sign_prehash_recoverable(sig_hash.as_ref()).unwrap(); + + // EIP-155 v + let mut v = u64::from(rid.to_byte()); + assert!((v == 0) || (v == 1)); + v += u64::from((chain_id * 2) + 35); + + let r = sig.r().to_repr(); + let r_ref: &[u8] = r.as_ref(); + let s = sig.s().to_repr(); + let s_ref: &[u8] = s.as_ref(); + let deployment_tx = deployment_tx.rlp_signed(&Signature { r: r_ref.into(), s: s_ref.into(), v }); + let pending_tx = client.send_raw_transaction(deployment_tx).await?; let mut receipt; @@ -81,8 +97,7 @@ async fn deploy_test_contract() -> (u32, AnvilInstance, Schnorr>) let provider = Provider::::try_from(anvil.endpoint()).unwrap().interval(Duration::from_millis(10u64)); let chain_id = provider.get_chainid().await.unwrap().as_u32(); - let wallet: LocalWallet = anvil.keys()[0].clone().into(); - let wallet = wallet.with_chain_id(chain_id); + let wallet = anvil.keys()[0].clone().into(); let client = Arc::new(provider); (chain_id, anvil, deploy_schnorr_verifier_contract(chain_id, client, &wallet).await.unwrap())