Replace usage of ethers-signers with 11 lines of ECDSA code

This commit is contained in:
Luke Parker 2023-11-09 13:22:43 -05:00
parent ec51fa233a
commit b51204a4eb
No known key found for this signature in database
3 changed files with 26 additions and 164 deletions

160
Cargo.lock generated
View file

@ -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"

View file

@ -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"] }

View file

@ -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<Provider<Http>>,
wallet: &LocalWallet,
wallet: &k256::ecdsa::SigningKey,
) -> eyre::Result<Schnorr<Provider<Http>>> {
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<Provider<Http>>)
let provider =
Provider::<Http>::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())