diff --git a/crate/Cargo.lock b/crate/Cargo.lock index fd784b9..adeb7a1 100644 --- a/crate/Cargo.lock +++ b/crate/Cargo.lock @@ -4123,7 +4123,6 @@ dependencies = [ [[package]] name = "namada_account" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "namada_core", @@ -4135,7 +4134,6 @@ dependencies = [ [[package]] name = "namada_controller" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "namada_core", "smooth-operator", @@ -4145,7 +4143,6 @@ dependencies = [ [[package]] name = "namada_core" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "bech32 0.11.0", "borsh", @@ -4194,7 +4191,6 @@ dependencies = [ [[package]] name = "namada_ethereum_bridge" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "ethers", @@ -4222,7 +4218,6 @@ dependencies = [ [[package]] name = "namada_events" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "namada_core", @@ -4236,7 +4231,6 @@ dependencies = [ [[package]] name = "namada_gas" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "namada_core", @@ -4249,7 +4243,6 @@ dependencies = [ [[package]] name = "namada_governance" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "itertools 0.14.0", @@ -4272,7 +4265,6 @@ dependencies = [ [[package]] name = "namada_ibc" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "data-encoding", @@ -4307,7 +4299,6 @@ dependencies = [ [[package]] name = "namada_io" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "async-trait", "kdam", @@ -4320,7 +4311,6 @@ dependencies = [ [[package]] name = "namada_macros" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "data-encoding", "proc-macro2", @@ -4332,7 +4322,6 @@ dependencies = [ [[package]] name = "namada_merkle_tree" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "eyre", @@ -4347,7 +4336,6 @@ dependencies = [ [[package]] name = "namada_parameters" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "namada_core", "namada_macros", @@ -4362,7 +4350,6 @@ dependencies = [ [[package]] name = "namada_proof_of_stake" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "itertools 0.14.0", @@ -4386,7 +4373,6 @@ dependencies = [ [[package]] name = "namada_replay_protection" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "namada_core", ] @@ -4394,7 +4380,6 @@ dependencies = [ [[package]] name = "namada_sdk" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "async-trait", "bech32 0.11.0", @@ -4463,7 +4448,6 @@ dependencies = [ [[package]] name = "namada_shielded_token" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "async-trait", "borsh", @@ -4506,7 +4490,6 @@ dependencies = [ [[package]] name = "namada_state" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "clru", @@ -4529,7 +4512,6 @@ dependencies = [ [[package]] name = "namada_storage" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "itertools 0.14.0", @@ -4548,7 +4530,6 @@ dependencies = [ [[package]] name = "namada_systems" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "namada_core", "namada_events", @@ -4558,7 +4539,6 @@ dependencies = [ [[package]] name = "namada_token" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "namada_core", @@ -4576,7 +4556,6 @@ dependencies = [ [[package]] name = "namada_trans_token" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "konst", "namada_core", @@ -4593,7 +4572,6 @@ dependencies = [ [[package]] name = "namada_tx" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "ark-bls12-381", "bitflags 2.9.4", @@ -4622,7 +4600,6 @@ dependencies = [ [[package]] name = "namada_tx_env" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "namada_core", "namada_events", @@ -4632,7 +4609,6 @@ dependencies = [ [[package]] name = "namada_vm" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "clru", @@ -4656,7 +4632,6 @@ dependencies = [ [[package]] name = "namada_vote_ext" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "borsh", "namada_core", @@ -4668,7 +4643,6 @@ dependencies = [ [[package]] name = "namada_vp" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "namada_core", "namada_events", @@ -4684,7 +4658,6 @@ dependencies = [ [[package]] name = "namada_vp_env" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "derivative", "masp_primitives", @@ -4699,7 +4672,6 @@ dependencies = [ [[package]] name = "namada_wallet" version = "0.251.3" -source = "git+https://github.com/anoma/namada?tag=libs-v0.251.3#f879de013e5b67c7e7c3440f43b815d8a6da5ab7" dependencies = [ "bimap", "borsh", diff --git a/crate/Cargo.toml b/crate/Cargo.toml index 033c4d8..ff6addb 100644 --- a/crate/Cargo.toml +++ b/crate/Cargo.toml @@ -18,7 +18,7 @@ nodejs = [] web = [] [build-dependencies] -namada_tx = { git = "https://github.com/anoma/namada", tag="libs-v0.251.3" } +namada_tx = { path = "/home/mj/Projects/heliax/namada/crates/tx" } [dependencies] aes-gcm = "0.10.3" @@ -29,7 +29,7 @@ chrono = "0.4.22" getrandom = { version = "0.3.3", features = [] } gloo-utils = { version = "0.1.5", features = ["serde"] } js-sys = "0.3.60" -namada_sdk = { git = "https://github.com/anoma/namada", tag="libs-v0.251.3", default-features = false } +namada_sdk = { path = "/home/mj/Projects/heliax/namada/crates/sdk", default-features = false } password-hash = "0.5.0" rand = {version = "0.8.5"} rayon = { version = "1.8", optional = true } diff --git a/crate/src/sdk/args.rs b/crate/src/sdk/args.rs index 0e83ec2..a332962 100644 --- a/crate/src/sdk/args.rs +++ b/crate/src/sdk/args.rs @@ -3,7 +3,7 @@ use std::{path::PathBuf, str::FromStr}; use namada_sdk::address::DecodeError; use namada_sdk::args::{ - TxShieldedSource, TxShieldedTarget, TxTransparentSource, TxTransparentTarget, + DryRun, TxShieldedSource, TxShieldedTarget, TxTransparentSource, TxTransparentTarget }; use namada_sdk::borsh::{BorshDeserialize, BorshSerialize}; use namada_sdk::collections::HashMap; @@ -1082,7 +1082,7 @@ fn tx_msg_into_args(tx_msg: &[u8]) -> Result { }; let args = args::Tx { - dry_run: None, + dry_run: Some(DryRun::Wrapper), dump_tx: None, force, ledger_address, @@ -1100,6 +1100,8 @@ fn tx_msg_into_args(tx_msg: &[u8]) -> Result { device_transport: Default::default(), }; + web_sys::console::log_1(&format!("Tx args: {:?}", args).into()); + Ok(args) } diff --git a/crate/src/sdk/mod.rs b/crate/src/sdk/mod.rs index 92c495c..c225761 100644 --- a/crate/src/sdk/mod.rs +++ b/crate/src/sdk/mod.rs @@ -36,12 +36,12 @@ use namada_sdk::masp_primitives::transaction::components::amount::I128Sum; use namada_sdk::masp_primitives::transaction::TxId; use namada_sdk::masp_primitives::zip32::{ExtendedFullViewingKey, ExtendedKey}; use namada_sdk::rpc::{self, query_denom, query_epoch, InnerTxResult, TxAppliedEvents, TxResponse}; -use namada_sdk::signing::SigningData; +use namada_sdk::signing::{mock_hw_sig, Signable, SigningData}; use namada_sdk::string_encoding::Format; use namada_sdk::tendermint_rpc::Url; use namada_sdk::token::{Amount, DenominatedAmount}; use namada_sdk::token::{MaspTxId, OptionExt}; -use namada_sdk::tx::data::{ResultCode, TxType}; +use namada_sdk::tx::data::{DryRunResult, ResultCode, TxType}; use namada_sdk::tx::Section; use namada_sdk::tx::{ build_batch, build_bond, build_claim_rewards, build_ibc_transfer, build_redelegation, @@ -408,6 +408,20 @@ impl Sdk { Ok(event) } + pub async fn dry_run_tx(&self, tx_bytes: &[u8], pk: &str) -> Result { + let mut tx = Tx::try_from_slice(tx_bytes).expect("Should be able to deserialize a Tx"); + + let pk = common::PublicKey::from_str(pk).unwrap(); + mock_hw_sig(&mut tx, pk, Signable::FeeRawHeader); + + let result = rpc::dry_run_tx(&self.namada, tx.to_bytes()).await.map_err(|e| JsValue::from_str(&e.to_string()))?; + + let DryRunResult(_, gas_cost) = &result; + + Ok(JsValue::from(u64::from(*gas_cost))) + } + + pub async fn broadcast_tx(&self, tx_bytes: &[u8], deadline: u64) -> Result { #[derive(serde::Serialize)] struct TxErrResponse { @@ -420,7 +434,6 @@ impl Sdk { let tx_hash = tx.header_hash().to_string(); let response = self.namada.client().broadcast_tx_sync(tx.to_bytes()).await; - match response { Ok(res) => { if res.clone().code != 0.into() { diff --git a/packages/lib/src/rpc/rpc.ts b/packages/lib/src/rpc/rpc.ts index 36856fa..af97cad 100644 --- a/packages/lib/src/rpc/rpc.ts +++ b/packages/lib/src/rpc/rpc.ts @@ -239,6 +239,13 @@ export class Rpc { return deserialize(Buffer.from(response), TxResponseMsgValue); } + async dryRunTx( + signedTxBytes: Uint8Array, + publicKey: string, + ): Promise { + return await this.sdk.dry_run_tx(signedTxBytes, publicKey); + } + /** * Sync the shielded context * @async