Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added transaction type tag field. #2182

Merged
merged 10 commits into from
Nov 21, 2023
3 changes: 3 additions & 0 deletions .changelog/unreleased/improvements/2182-tx-type-tag2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- Added type tags to transactions to enable hardware wallets
to fully decode transactions even after minor Namada updates.
([\#2182](https://github.com/anoma/namada/pull/2182))
55 changes: 25 additions & 30 deletions apps/src/lib/bench_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,18 @@ use namada::{proof_of_stake, tendermint};
use namada_sdk::masp::{
self, ShieldedContext, ShieldedTransfer, ShieldedUtils,
};
pub use namada_sdk::tx::{
TX_BOND_WASM, TX_BRIDGE_POOL_WASM,
TX_CHANGE_COMMISSION_WASM as TX_CHANGE_VALIDATOR_COMMISSION_WASM,
TX_CHANGE_METADATA_WASM as TX_CHANGE_VALIDATOR_METADATA_WASM,
TX_CLAIM_REWARDS_WASM, TX_DEACTIVATE_VALIDATOR_WASM, TX_IBC_WASM,
TX_INIT_ACCOUNT_WASM, TX_INIT_PROPOSAL as TX_INIT_PROPOSAL_WASM,
TX_INIT_VALIDATOR_WASM, TX_REACTIVATE_VALIDATOR_WASM, TX_REDELEGATE_WASM,
TX_RESIGN_STEWARD, TX_REVEAL_PK as TX_REVEAL_PK_WASM, TX_TRANSFER_WASM,
TX_UNBOND_WASM, TX_UNJAIL_VALIDATOR_WASM, TX_UPDATE_ACCOUNT_WASM,
TX_UPDATE_STEWARD_COMMISSION, TX_VOTE_PROPOSAL as TX_VOTE_PROPOSAL_WASM,
TX_WITHDRAW_WASM, VP_USER_WASM, VP_VALIDATOR_WASM,
};
use namada_sdk::wallet::Wallet;
use namada_sdk::NamadaImpl;
use namada_test_utils::tx_data::TxWriteData;
Expand All @@ -97,32 +109,6 @@ use crate::node::ledger::shell::Shell;
use crate::wallet::{defaults, CliWalletUtils};

pub const WASM_DIR: &str = "../wasm";
pub const TX_BOND_WASM: &str = "tx_bond.wasm";
pub const TX_TRANSFER_WASM: &str = "tx_transfer.wasm";
pub const TX_UPDATE_ACCOUNT_WASM: &str = "tx_update_account.wasm";
pub const TX_VOTE_PROPOSAL_WASM: &str = "tx_vote_proposal.wasm";
pub const TX_UNBOND_WASM: &str = "tx_unbond.wasm";
pub const TX_REDELEGATE_WASM: &str = "tx_redelegate.wasm";
pub const TX_INIT_PROPOSAL_WASM: &str = "tx_init_proposal.wasm";
pub const TX_REVEAL_PK_WASM: &str = "tx_reveal_pk.wasm";
pub const TX_CHANGE_VALIDATOR_COMMISSION_WASM: &str =
"tx_change_validator_commission.wasm";
pub const TX_CHANGE_VALIDATOR_METADATA_WASM: &str =
"tx_change_validator_metadata.wasm";
pub const TX_IBC_WASM: &str = "tx_ibc.wasm";
pub const TX_UNJAIL_VALIDATOR_WASM: &str = "tx_unjail_validator.wasm";
pub const TX_DEACTIVATE_VALIDATOR_WASM: &str = "tx_deactivate_validator.wasm";
pub const TX_REACTIVATE_VALIDATOR_WASM: &str = "tx_reactivate_validator.wasm";
pub const TX_WITHDRAW_WASM: &str = "tx_withdraw.wasm";
pub const TX_CLAIM_REWARDS_WASM: &str = "tx_claim_rewards.wasm";
pub const TX_INIT_ACCOUNT_WASM: &str = "tx_init_account.wasm";
pub const TX_INIT_VALIDATOR_WASM: &str = "tx_init_validator.wasm";

pub const TX_RESIGN_STEWARD: &str = "tx_resign_steward.wasm";
pub const TX_UPDATE_STEWARD_COMMISSION: &str =
"tx_update_steward_commission.wasm";
pub const TX_BRIDGE_POOL_WASM: &str = "tx_bridge_pool.wasm";
pub const VP_VALIDATOR_WASM: &str = "vp_validator.wasm";

pub const ALBERT_PAYMENT_ADDRESS: &str = "albert_payment";
pub const ALBERT_SPENDING_KEY: &str = "albert_spending";
Expand Down Expand Up @@ -247,7 +233,10 @@ impl Default for BenchShell {
bench_shell.wl_storage.commit_tx();

// Initialize governance proposal
let content_section = Section::ExtraData(Code::new(vec![]));
let content_section = Section::ExtraData(Code::new(
vec![],
Some(TX_INIT_PROPOSAL_WASM.to_string()),
));
let voting_start_epoch =
Epoch(2 + params.pipeline_len + params.unbonding_len);
let signed_tx = bench_shell.generate_tx(
Expand Down Expand Up @@ -305,7 +294,10 @@ impl BenchShell {
let code_hash = self
.read_storage_key(&Key::wasm_hash(wasm_code_path))
.unwrap();
tx.set_code(Code::from_hash(code_hash));
tx.set_code(Code::from_hash(
code_hash,
Some(wasm_code_path.to_string()),
));
tx.set_data(Data::new(borsh::to_vec(&data).unwrap()));

if let Some(transaction) = shielded {
Expand Down Expand Up @@ -340,7 +332,10 @@ impl BenchShell {
let code_hash = self
.read_storage_key(&Key::wasm_hash(wasm_code_path))
.unwrap();
tx.set_code(Code::from_hash(code_hash));
tx.set_code(Code::from_hash(
code_hash,
Some(wasm_code_path.to_string()),
));

let mut data = vec![];
prost::Message::encode(&msg.to_any(), &mut data).unwrap();
Expand Down Expand Up @@ -568,7 +563,7 @@ pub fn generate_foreign_key_tx(signer: &SecretKey) -> Tx {
let mut tx = Tx::from_type(namada::types::transaction::TxType::Decrypted(
namada::types::transaction::DecryptedTx::Decrypted,
));
tx.set_code(Code::new(wasm_code));
tx.set_code(Code::new(wasm_code, None));
tx.set_data(Data::new(
TxWriteData {
key: Key::from("bench_foreign_key".to_string().to_db_key()),
Expand Down
39 changes: 10 additions & 29 deletions apps/src/lib/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2803,6 +2803,16 @@ pub mod args {
use namada::types::token::NATIVE_MAX_DECIMAL_PLACES;
use namada::types::transaction::GasLimit;
pub use namada_sdk::args::*;
pub use namada_sdk::tx::{
TX_BOND_WASM, TX_BRIDGE_POOL_WASM, TX_CHANGE_COMMISSION_WASM,
TX_CHANGE_METADATA_WASM, TX_CLAIM_REWARDS_WASM,
TX_DEACTIVATE_VALIDATOR_WASM, TX_IBC_WASM, TX_INIT_ACCOUNT_WASM,
TX_INIT_PROPOSAL, TX_INIT_VALIDATOR_WASM, TX_REACTIVATE_VALIDATOR_WASM,
TX_REDELEGATE_WASM, TX_RESIGN_STEWARD, TX_REVEAL_PK, TX_TRANSFER_WASM,
TX_UNBOND_WASM, TX_UNJAIL_VALIDATOR_WASM, TX_UPDATE_ACCOUNT_WASM,
TX_UPDATE_STEWARD_COMMISSION, TX_VOTE_PROPOSAL, TX_WITHDRAW_WASM,
VP_USER_WASM,
};

use super::context::*;
use super::utils::*;
Expand All @@ -2812,35 +2822,6 @@ pub mod args {
use crate::facade::tendermint::Timeout;
use crate::facade::tendermint_config::net::Address as TendermintAddress;

pub const TX_BOND_WASM: &str = "tx_bond.wasm";
pub const TX_BRIDGE_POOL_WASM: &str = "tx_bridge_pool.wasm";
pub const TX_CHANGE_COMMISSION_WASM: &str =
"tx_change_validator_commission.wasm";
pub const TX_CHANGE_METADATA_WASM: &str =
"tx_change_validator_metadata.wasm";
pub const TX_DEACTIVATE_VALIDATOR_WASM: &str =
"tx_deactivate_validator.wasm";
pub const TX_IBC_WASM: &str = "tx_ibc.wasm";
pub const TX_INIT_ACCOUNT_WASM: &str = "tx_init_account.wasm";
pub const TX_INIT_PROPOSAL: &str = "tx_init_proposal.wasm";
pub const TX_INIT_VALIDATOR_WASM: &str = "tx_init_validator.wasm";
pub const TX_REVEAL_PK: &str = "tx_reveal_pk.wasm";
pub const TX_UPDATE_ACCOUNT_WASM: &str = "tx_update_account.wasm";
pub const TX_TRANSFER_WASM: &str = "tx_transfer.wasm";
pub const TX_UNBOND_WASM: &str = "tx_unbond.wasm";
pub const TX_UNJAIL_VALIDATOR_WASM: &str = "tx_unjail_validator.wasm";
pub const TX_REACTIVATE_VALIDATOR_WASM: &str =
"tx_reactivate_validator.wasm";
pub const TX_REDELEGATE_WASM: &str = "tx_redelegate.wasm";
pub const TX_UPDATE_STEWARD_COMMISSION: &str =
"tx_update_steward_commission.wasm";
pub const TX_VOTE_PROPOSAL: &str = "tx_vote_proposal.wasm";
pub const TX_WITHDRAW_WASM: &str = "tx_withdraw.wasm";
pub const TX_CLAIM_REWARDS_WASM: &str = "tx_claim_rewards.wasm";
pub const TX_RESIGN_STEWARD: &str = "tx_resign_steward.wasm";

pub const VP_USER_WASM: &str = "vp_user.wasm";

pub const ADDRESS: Arg<WalletAddress> = arg("address");
pub const ALIAS_OPT: ArgOpt<String> = ALIAS.opt();
pub const ALIAS: Arg<String> = arg("alias");
Expand Down
56 changes: 53 additions & 3 deletions apps/src/lib/client/tx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ pub async fn submit_reveal_aux<'a>(

sign(context, &mut tx, &args, signing_data).await?;

signing::generate_test_vector(context, &tx).await?;

context.submit(tx, &args).await?;
}
}
Expand All @@ -250,6 +252,8 @@ pub async fn submit_bridge_pool_tx<'a, N: Namada<'a>>(

sign(namada, &mut tx, &tx_args, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &tx_args).await?;
}

Expand All @@ -274,6 +278,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -296,6 +302,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -319,6 +327,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand Down Expand Up @@ -525,8 +535,10 @@ pub async fn submit_init_validator<'a>(

let chain_id = tx_args.chain_id.clone().unwrap();
let mut tx = Tx::new(chain_id, tx_args.expiration);
let extra_section_hash =
tx.add_extra_section_from_hash(validator_vp_code_hash);
let extra_section_hash = tx.add_extra_section_from_hash(
validator_vp_code_hash,
Some(validator_vp_code_path.to_string_lossy().into_owned()),
);

let data = InitValidator {
account_keys,
Expand All @@ -546,7 +558,11 @@ pub async fn submit_init_validator<'a>(
validator_vp_code_hash: extra_section_hash,
};

tx.add_code_from_hash(tx_code_hash).add_data(data);
tx.add_code_from_hash(
tx_code_hash,
Some(args::TX_INIT_VALIDATOR_WASM.to_string()),
)
.add_data(data);

let signing_data = aux_signing_data(namada, &tx_args, None, None).await?;

Expand All @@ -566,6 +582,8 @@ pub async fn submit_init_validator<'a>(
} else {
sign(namada, &mut tx, &tx_args, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

let result = namada.submit(tx, &tx_args).await?.initialized_accounts();

if !tx_args.dry_run {
Expand Down Expand Up @@ -687,6 +705,8 @@ pub async fn submit_transfer<'a>(
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

let result = namada.submit(tx, &args.tx).await?;

let submission_epoch = rpc::query_and_print_epoch(namada).await;
Expand Down Expand Up @@ -733,6 +753,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand Down Expand Up @@ -860,6 +882,8 @@ where
} else {
sign(namada, &mut tx_builder, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx_builder).await?;

namada.submit(tx_builder, &args.tx).await?;
}

Expand Down Expand Up @@ -938,6 +962,8 @@ where
} else {
sign(namada, &mut tx_builder, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx_builder).await?;

namada.submit(tx_builder, &args.tx).await?;
}

Expand Down Expand Up @@ -1056,6 +1082,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1078,6 +1106,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;

tx::query_unbonds(namada, args.clone(), latest_withdrawal_pre).await?;
Expand All @@ -1102,6 +1132,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1124,6 +1156,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1145,6 +1179,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1167,6 +1203,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1189,6 +1227,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1211,6 +1251,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1233,6 +1275,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1255,6 +1299,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1278,6 +1324,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand All @@ -1300,6 +1348,8 @@ where
} else {
sign(namada, &mut tx, &args.tx, signing_data).await?;

signing::generate_test_vector(namada, &tx).await?;

namada.submit(tx, &args.tx).await?;
}

Expand Down
Loading