From defe7ac3936ca46c5647567cec3ce157a3a3425a Mon Sep 17 00:00:00 2001 From: benluelo Date: Wed, 29 May 2024 13:17:30 -0400 Subject: [PATCH] feat(devnet): move keygen and cosmwasm address computation into devnet-utils --- Cargo.lock | 58 ++++++++++----------- Cargo.toml | 2 +- flake.nix | 2 +- networks/devnet.nix | 1 - networks/mkCosmosDevnet.nix | 13 +++-- tools/devnet-utils/Cargo.toml | 19 +++++++ tools/devnet-utils/src/main.rs | 92 ++++++++++++++++++++++++++++++++++ tools/keygen/Cargo.toml | 17 ------- tools/keygen/src/main.rs | 46 ----------------- tools/tools.nix | 6 +-- 10 files changed, 152 insertions(+), 104 deletions(-) create mode 100644 tools/devnet-utils/Cargo.toml create mode 100644 tools/devnet-utils/src/main.rs delete mode 100644 tools/keygen/Cargo.toml delete mode 100644 tools/keygen/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index 7a0bc4d0ba..afb4c2837d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1265,9 +1265,9 @@ dependencies = [ [[package]] name = "cosmwasm-crypto" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b08e6670ab9e13a1a8a9cfad8fdad48bf0aaf88a6e81f39f2d9b2fc79b1890" +checksum = "6bf91c32ff87ffec3f1a36d03c96a528bc7447b9774c0616e5b092d7a3fd6503" dependencies = [ "digest 0.10.7", "ed25519-zebra", @@ -1287,9 +1287,9 @@ dependencies = [ [[package]] name = "cosmwasm-derive" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8b0918fc1a24b2ee08142c8d99d03f4c8e6d74244bdb304dbb29c0dab8e77e9" +checksum = "9125094db6fdf355525d0968d5a2b3a23f82dfc9553efd64942a545ac086eed8" dependencies = [ "syn 1.0.109", ] @@ -1366,15 +1366,15 @@ dependencies = [ [[package]] name = "cosmwasm-std" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88191bd0d4743613eb7a2f086acb0838404cb531bf658382effafc7ba91e8320" +checksum = "eae364adb252732194283cd06dea3de2a1ed1e97d5033cdfd0fb651daa5a0100" dependencies = [ "base64 0.21.7", "bech32", "bnum 0.10.0", - "cosmwasm-crypto 2.0.2", - "cosmwasm-derive 2.0.2", + "cosmwasm-crypto 2.0.3", + "cosmwasm-derive 2.0.3", "derivative", "forward_ref", "hex", @@ -1626,7 +1626,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50c1804013d21060b994dea28a080f9eab78a3bcb6b617f05e7634b0600bf7b1" dependencies = [ "cosmwasm-schema 2.0.2", - "cosmwasm-std 2.0.2", + "cosmwasm-std 2.0.3", "cw-storage-plus 2.0.0", "cw-utils 2.0.0", "schemars", @@ -1710,7 +1710,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" dependencies = [ - "cosmwasm-std 2.0.2", + "cosmwasm-std 2.0.3", "schemars", "serde", ] @@ -1752,7 +1752,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" dependencies = [ "cosmwasm-schema 2.0.2", - "cosmwasm-std 2.0.2", + "cosmwasm-std 2.0.3", "schemars", "serde", "thiserror", @@ -1793,7 +1793,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" dependencies = [ "cosmwasm-schema 2.0.2", - "cosmwasm-std 2.0.2", + "cosmwasm-std 2.0.3", "cw-storage-plus 2.0.0", "schemars", "semver", @@ -2027,6 +2027,20 @@ dependencies = [ "strum 0.26.2", ] +[[package]] +name = "devnet-utils" +version = "0.1.0" +dependencies = [ + "base64 0.21.7", + "bip39", + "clap 4.5.4", + "cosmwasm-std 2.0.3", + "ed25519-compact", + "hex", + "strum 0.26.2", + "unionlabs", +] + [[package]] name = "digest" version = "0.9.0" @@ -3925,18 +3939,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "keygen" -version = "0.1.0" -dependencies = [ - "base64 0.21.7", - "bip39", - "clap 4.5.4", - "ed25519-compact", - "hex", - "strum 0.26.2", -] - [[package]] name = "lalrpop" version = "0.20.2" @@ -7048,7 +7050,7 @@ name = "token-factory-api" version = "0.1.0" dependencies = [ "cosmwasm-schema 2.0.2", - "cosmwasm-std 2.0.2", + "cosmwasm-std 2.0.3", ] [[package]] @@ -7523,7 +7525,7 @@ name = "ucs01-relay" version = "1.0.1" dependencies = [ "cosmwasm-schema 2.0.2", - "cosmwasm-std 2.0.2", + "cosmwasm-std 2.0.3", "cw-controllers", "cw-storage-plus 2.0.0", "cw2 2.0.0", @@ -7544,7 +7546,7 @@ name = "ucs01-relay-api" version = "0.1.0" dependencies = [ "cosmwasm-schema 2.0.2", - "cosmwasm-std 2.0.2", + "cosmwasm-std 2.0.3", "ethabi", "serde-utils", "thiserror", @@ -8317,7 +8319,7 @@ dependencies = [ "chain-utils", "clap 4.5.4", "contracts", - "cosmwasm-std 2.0.2", + "cosmwasm-std 2.0.3", "csv", "ethers", "futures", diff --git a/Cargo.toml b/Cargo.toml index e80ef7a670..0ad4b7a136 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,7 +58,7 @@ members = [ "light-clients/linea-light-client", "tools/generate-rust-sol-bindings", - "tools/keygen", + "tools/devnet-utils", "tools/parse-wasm-client-type", "tools/tidy", diff --git a/flake.nix b/flake.nix index c29b016285..89808c67bd 100644 --- a/flake.nix +++ b/flake.nix @@ -330,7 +330,7 @@ ]; }); }; - keygen = self'.packages.keygen; + devnet-utils = self'.packages.devnet-utils; # this pr (https://github.com/numtide/treefmt/pull/250) was merged one day after v0.6.1 was cut, so in order to use the --hidden flag we need to build latest # expression taken from here https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/tools/treefmt/default.nix treefmt = super.rustPlatform.buildRustPackage rec { diff --git a/networks/devnet.nix b/networks/devnet.nix index 8f8b5f9d3e..509daec786 100644 --- a/networks/devnet.nix +++ b/networks/devnet.nix @@ -5,7 +5,6 @@ mkCosmosDevnet = import ./mkCosmosDevnet.nix { inherit pkgs dbg; - ucliBin = pkgs.lib.getExe self'.packages.ucli; }; lnav = inputs'.nixpkgs-lnav.legacyPackages.lnav; diff --git a/networks/mkCosmosDevnet.nix b/networks/mkCosmosDevnet.nix index 74ad57466a..6297ca6ffe 100644 --- a/networks/mkCosmosDevnet.nix +++ b/networks/mkCosmosDevnet.nix @@ -1,6 +1,5 @@ { pkgs , dbg -, ucliBin , ... }: { node @@ -43,9 +42,9 @@ let assert (builtins.isInt idx); pkgs.runCommand "${chainName}-mnemonic_${toString idx}" - { buildInputs = [ pkgs.keygen ]; } + { buildInputs = [ pkgs.devnet-utils ]; } '' - keygen mnemonic $(echo ${toString idx} | sha256sum - | cut -d' ' -f1) > $out + devnet-utils keygen mnemonic $(echo ${toString idx} | sha256sum - | cut -d' ' -f1) > $out echo "validator ${toString idx} mnemonic: $(cat $out)" ''; @@ -54,9 +53,9 @@ let assert (builtins.isInt idx); pkgs.runCommand "${chainName}-node-key_${toString idx}" - { buildInputs = [ pkgs.keygen ]; } + { buildInputs = [ pkgs.devnet-utils ]; } '' - NODE_KEY=$(keygen key --key-type ed25519 "$(cat ${mkNodeMnemonic idx})" | tr -d '\n') + NODE_KEY=$(devnet-utils keygen key --key-type ed25519 "$(cat ${mkNodeMnemonic idx})" | tr -d '\n') echo "validator ${toString idx} node_key: $NODE_KEY" @@ -489,9 +488,9 @@ let ''; getContractAddress = creator: checksum: salt: - pkgs.runCommand "get-contract-address" { buildInputs = [ pkgs.jq ]; } '' + pkgs.runCommand "get-contract-address" { buildInputs = [ pkgs.jq pkgs.devnet-utils ]; } '' export HOME=$(pwd) - CANONICAL_ADDR=$(${ucliBin} \ + CANONICAL_ADDR=$(devnet-utils \ compute \ instantiate2-address \ --creator "0x$(cat ${creator})" \ diff --git a/tools/devnet-utils/Cargo.toml b/tools/devnet-utils/Cargo.toml new file mode 100644 index 0000000000..abb27a7102 --- /dev/null +++ b/tools/devnet-utils/Cargo.toml @@ -0,0 +1,19 @@ +[package] +edition = { workspace = true } +license-file = { workspace = true } +name = "devnet-utils" +repository = { workspace = true } +version = "0.1.0" + +[lints] +workspace = true + +[dependencies] +base64 = { workspace = true } +bip39 = "2.0.0" +clap = { workspace = true, features = ["derive", "error-context", "help"] } +cosmwasm-std = "2.0.3" +ed25519-compact = { version = "2.1.1", default-features = false, features = ["ed25519"] } +hex = { workspace = true, features = ["std"] } +strum = { version = "0.26.1", features = ["derive"] } +unionlabs.workspace = true diff --git a/tools/devnet-utils/src/main.rs b/tools/devnet-utils/src/main.rs new file mode 100644 index 0000000000..24af70f605 --- /dev/null +++ b/tools/devnet-utils/src/main.rs @@ -0,0 +1,92 @@ +use base64::{display::Base64Display, engine::general_purpose::STANDARD}; +use bip39::Mnemonic; +use clap::{Parser, Subcommand}; +use ed25519_compact::{KeyPair, Seed}; +use unionlabs::hash::{H160, H256}; + +#[derive(Parser)] +#[clap(arg_required_else_help = true)] +struct App { + #[clap(subcommand)] + command: Cmd, +} + +#[derive(Subcommand)] +enum Cmd { + #[clap(subcommand)] + Keygen(KeygenCmd), + #[command(subcommand)] + Compute(ComputeCmd), +} + +#[derive(Subcommand)] +enum KeygenCmd { + Key { + mnemonic: Mnemonic, + #[arg(long)] + key_type: KeyType, + }, + Mnemonic { + seed: String, + }, +} + +#[derive(Subcommand)] +pub enum ComputeCmd { + Instantiate2Address { + #[arg(long)] + creator: H160, + #[arg(long)] + checksum: H256, + #[arg(long)] + salt: String, + }, +} + +#[derive(strum::EnumString, Clone)] +#[strum(serialize_all = "kebab-case")] +enum KeyType { + Ed25519, +} + +fn main() { + let app = App::parse(); + + match app.command { + Cmd::Keygen(cmd) => match cmd { + KeygenCmd::Key { mnemonic, key_type } => match key_type { + KeyType::Ed25519 => { + let key_pair = + KeyPair::from_seed(Seed::new(mnemonic.to_entropy().try_into().unwrap())); + + println!("{}", Base64Display::new(&*key_pair.sk, &STANDARD)); + } + }, + KeygenCmd::Mnemonic { seed } => { + println!( + "{}", + Mnemonic::from_entropy(&hex::decode(seed).unwrap()).unwrap() + ); + } + }, + Cmd::Compute(cmd) => match cmd { + ComputeCmd::Instantiate2Address { + creator, + checksum, + salt, + } => { + println!( + "{}", + hex::encode( + &*cosmwasm_std::instantiate2_address( + &checksum.0, + &creator.0.into(), + &hex::decode(salt).unwrap(), + ) + .unwrap() + ) + ); + } + }, + } +} diff --git a/tools/keygen/Cargo.toml b/tools/keygen/Cargo.toml deleted file mode 100644 index 871ef471b6..0000000000 --- a/tools/keygen/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -edition = { workspace = true } -license-file = { workspace = true } -name = "keygen" -repository = { workspace = true } -version = "0.1.0" - -[lints] -workspace = true - -[dependencies] -base64 = { workspace = true } -bip39 = "2.0.0" -clap = { workspace = true, features = ["derive"] } -ed25519-compact = { version = "2.1.1", default-features = false, features = ["ed25519"] } -hex = { workspace = true, features = ["std"] } -strum = { version = "0.26.1", features = ["derive"] } diff --git a/tools/keygen/src/main.rs b/tools/keygen/src/main.rs deleted file mode 100644 index 3c3c6eae3c..0000000000 --- a/tools/keygen/src/main.rs +++ /dev/null @@ -1,46 +0,0 @@ -use base64::{display::Base64Display, engine::general_purpose::STANDARD}; -use bip39::Mnemonic; -use clap::Parser; -use ed25519_compact::{KeyPair, Seed}; - -#[derive(clap::Parser)] -enum App { - Key { - mnemonic: Mnemonic, - #[arg(long)] - key_type: KeyType, - }, - Mnemonic { - seed: String, - }, -} - -#[derive(strum::EnumString, Clone)] -#[strum(serialize_all = "kebab-case")] -enum KeyType { - Ed25519, -} - -fn main() { - let app = App::parse(); - - match app { - App::Key { mnemonic, key_type } => match key_type { - KeyType::Ed25519 => { - let key_pair = - KeyPair::from_seed(Seed::new(mnemonic.to_entropy().try_into().unwrap())); - - println!("{}", Base64Display::new(&*key_pair.sk, &STANDARD)); - } - }, - App::Mnemonic { seed } => { - println!( - "{}", - Mnemonic::from_entropy(&hex::decode(seed).unwrap()).unwrap() - ); - } - } -} - -#[test] -fn mnemonic() {} diff --git a/tools/tools.nix b/tools/tools.nix index 310d4f3d99..12c641962d 100644 --- a/tools/tools.nix +++ b/tools/tools.nix @@ -1,7 +1,7 @@ { ... }: { perSystem = { pkgs, crane, ... }: { - packages.keygen = (crane.buildWorkspaceMember { - crateDirFromRoot = "tools/keygen"; - }).packages.keygen; + packages.devnet-utils = (crane.buildWorkspaceMember { + crateDirFromRoot = "tools/devnet-utils"; + }).packages.devnet-utils; }; }