mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 12:19:24 +00:00
Replace usage of ethers-signers with 11 lines of ECDSA code
This commit is contained in:
160
Cargo.lock
generated
160
Cargo.lock
generated
@@ -57,17 +57,6 @@ dependencies = [
|
|||||||
"opaque-debug",
|
"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]]
|
[[package]]
|
||||||
name = "aes-gcm"
|
name = "aes-gcm"
|
||||||
version = "0.9.2"
|
version = "0.9.2"
|
||||||
@@ -75,9 +64,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "bc3be92e19a7ef47457b8e6f90707e12b6ac5d20c6f3866584fa3be0787d839f"
|
checksum = "bc3be92e19a7ef47457b8e6f90707e12b6ac5d20c6f3866584fa3be0787d839f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aead",
|
"aead",
|
||||||
"aes 0.7.5",
|
"aes",
|
||||||
"cipher 0.3.0",
|
"cipher 0.3.0",
|
||||||
"ctr 0.7.0",
|
"ctr",
|
||||||
"ghash",
|
"ghash",
|
||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
@@ -425,12 +414,6 @@ version = "1.6.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
|
checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bech32"
|
|
||||||
version = "0.9.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bech32"
|
name = "bech32"
|
||||||
version = "0.10.0-beta"
|
version = "0.10.0-beta"
|
||||||
@@ -482,7 +465,7 @@ version = "0.31.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5973a027b341b462105675962214dfe3c938ad9afd395d84b28602608bdcec7b"
|
checksum = "5973a027b341b462105675962214dfe3c938ad9afd395d84b28602608bdcec7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bech32 0.10.0-beta",
|
"bech32",
|
||||||
"bitcoin-internals",
|
"bitcoin-internals",
|
||||||
"bitcoin_hashes",
|
"bitcoin_hashes",
|
||||||
"core2 0.3.3",
|
"core2 0.3.3",
|
||||||
@@ -699,7 +682,6 @@ version = "0.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896"
|
checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"sha2",
|
|
||||||
"tinyvec",
|
"tinyvec",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1006,58 +988,6 @@ dependencies = [
|
|||||||
"unicode-width",
|
"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]]
|
[[package]]
|
||||||
name = "colorchoice"
|
name = "colorchoice"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
@@ -1356,15 +1286,6 @@ dependencies = [
|
|||||||
"cipher 0.3.0",
|
"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]]
|
[[package]]
|
||||||
name = "curve25519-dalek"
|
name = "curve25519-dalek"
|
||||||
version = "4.1.1"
|
version = "4.1.1"
|
||||||
@@ -1557,7 +1478,7 @@ version = "0.8.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
|
checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"uuid 1.5.0",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1988,28 +1909,6 @@ dependencies = [
|
|||||||
"windows-sys",
|
"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]]
|
[[package]]
|
||||||
name = "ethabi"
|
name = "ethabi"
|
||||||
version = "18.0.0"
|
version = "18.0.0"
|
||||||
@@ -2049,7 +1948,6 @@ dependencies = [
|
|||||||
"ethers-contract",
|
"ethers-contract",
|
||||||
"ethers-core",
|
"ethers-core",
|
||||||
"ethers-providers",
|
"ethers-providers",
|
||||||
"ethers-signers",
|
|
||||||
"eyre",
|
"eyre",
|
||||||
"group",
|
"group",
|
||||||
"hex",
|
"hex",
|
||||||
@@ -2203,25 +2101,6 @@ dependencies = [
|
|||||||
"ws_stream_wasm",
|
"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]]
|
[[package]]
|
||||||
name = "event-listener"
|
name = "event-listener"
|
||||||
version = "2.5.3"
|
version = "2.5.3"
|
||||||
@@ -6409,15 +6288,6 @@ dependencies = [
|
|||||||
"bytemuck",
|
"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]]
|
[[package]]
|
||||||
name = "same-file"
|
name = "same-file"
|
||||||
version = "1.0.6"
|
version = "1.0.6"
|
||||||
@@ -7537,18 +7407,6 @@ version = "1.0.7"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152"
|
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]]
|
[[package]]
|
||||||
name = "sct"
|
name = "sct"
|
||||||
version = "0.7.1"
|
version = "0.7.1"
|
||||||
@@ -10099,16 +9957,6 @@ version = "0.2.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
|
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]]
|
[[package]]
|
||||||
name = "uuid"
|
name = "uuid"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
|
|||||||
@@ -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"] }
|
frost = { package = "modular-frost", path = "../../crypto/frost", features = ["secp256k1", "tests"] }
|
||||||
|
|
||||||
ethers-core = { version = "2", default-features = false }
|
ethers-core = { version = "2", default-features = false }
|
||||||
ethers-signers = { version = "2", default-features = false }
|
|
||||||
ethers-providers = { version = "2", default-features = false }
|
ethers-providers = { version = "2", default-features = false }
|
||||||
ethers-contract = { version = "2", default-features = false, features = ["abigen", "providers"] }
|
ethers-contract = { version = "2", default-features = false, features = ["abigen", "providers"] }
|
||||||
|
|
||||||
|
|||||||
@@ -2,15 +2,18 @@ use std::{convert::TryFrom, sync::Arc, time::Duration, fs::File};
|
|||||||
|
|
||||||
use rand_core::OsRng;
|
use rand_core::OsRng;
|
||||||
|
|
||||||
use ::k256::{elliptic_curve::bigint::ArrayEncoding, U256};
|
use ::k256::{
|
||||||
|
elliptic_curve::{bigint::ArrayEncoding, PrimeField},
|
||||||
|
U256,
|
||||||
|
};
|
||||||
|
|
||||||
use ethers_core::{
|
use ethers_core::{
|
||||||
|
types::Signature,
|
||||||
abi::Abi,
|
abi::Abi,
|
||||||
utils::{keccak256, Anvil, AnvilInstance},
|
utils::{keccak256, Anvil, AnvilInstance},
|
||||||
};
|
};
|
||||||
use ethers_contract::ContractFactory;
|
use ethers_contract::ContractFactory;
|
||||||
use ethers_providers::{Middleware, Provider, Http};
|
use ethers_providers::{Middleware, Provider, Http};
|
||||||
use ethers_signers::{Signer, LocalWallet};
|
|
||||||
|
|
||||||
use frost::{
|
use frost::{
|
||||||
curve::Secp256k1,
|
curve::Secp256k1,
|
||||||
@@ -40,7 +43,7 @@ struct Artifact {
|
|||||||
pub async fn deploy_schnorr_verifier_contract(
|
pub async fn deploy_schnorr_verifier_contract(
|
||||||
chain_id: u32,
|
chain_id: u32,
|
||||||
client: Arc<Provider<Http>>,
|
client: Arc<Provider<Http>>,
|
||||||
wallet: &LocalWallet,
|
wallet: &k256::ecdsa::SigningKey,
|
||||||
) -> eyre::Result<Schnorr<Provider<Http>>> {
|
) -> eyre::Result<Schnorr<Provider<Http>>> {
|
||||||
let path = "./artifacts/Schnorr.sol/Schnorr.json";
|
let path = "./artifacts/Schnorr.sol/Schnorr.json";
|
||||||
let artifact: Artifact = serde_json::from_reader(File::open(path).unwrap()).unwrap();
|
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?;
|
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_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);
|
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 pending_tx = client.send_raw_transaction(deployment_tx).await?;
|
||||||
|
|
||||||
let mut receipt;
|
let mut receipt;
|
||||||
@@ -81,8 +97,7 @@ async fn deploy_test_contract() -> (u32, AnvilInstance, Schnorr<Provider<Http>>)
|
|||||||
let provider =
|
let provider =
|
||||||
Provider::<Http>::try_from(anvil.endpoint()).unwrap().interval(Duration::from_millis(10u64));
|
Provider::<Http>::try_from(anvil.endpoint()).unwrap().interval(Duration::from_millis(10u64));
|
||||||
let chain_id = provider.get_chainid().await.unwrap().as_u32();
|
let chain_id = provider.get_chainid().await.unwrap().as_u32();
|
||||||
let wallet: LocalWallet = anvil.keys()[0].clone().into();
|
let wallet = anvil.keys()[0].clone().into();
|
||||||
let wallet = wallet.with_chain_id(chain_id);
|
|
||||||
let client = Arc::new(provider);
|
let client = Arc::new(provider);
|
||||||
|
|
||||||
(chain_id, anvil, deploy_schnorr_verifier_contract(chain_id, client, &wallet).await.unwrap())
|
(chain_id, anvil, deploy_schnorr_verifier_contract(chain_id, client, &wallet).await.unwrap())
|
||||||
|
|||||||
Reference in New Issue
Block a user