diff --git a/.changelog/unreleased/bug-fixes/1019-testnet-fee-fix.md b/.changelog/unreleased/bug-fixes/1019-testnet-fee-fix.md new file mode 100644 index 0000000000..c629aa59b4 --- /dev/null +++ b/.changelog/unreleased/bug-fixes/1019-testnet-fee-fix.md @@ -0,0 +1,2 @@ +- Fixes testnet wrapper fee checks + ([#1019](https://github.com/anoma/namada/pull/1019)) \ No newline at end of file diff --git a/apps/src/lib/client/signing.rs b/apps/src/lib/client/signing.rs index 0f893a0190..e4f8faa5b8 100644 --- a/apps/src/lib/client/signing.rs +++ b/apps/src/lib/client/signing.rs @@ -189,7 +189,7 @@ pub async fn sign_wrapper( let client = HttpClient::new(args.ledger_address.clone()).unwrap(); let fee_amount = if cfg!(feature = "mainnet") { - Amount::from(MIN_FEE) + Amount::whole(MIN_FEE) } else { let wrapper_tx_fees_key = parameter_storage::get_wrapper_tx_fees_key(); rpc::query_storage_value::(&client, &wrapper_tx_fees_key) diff --git a/apps/src/lib/node/ledger/shell/finalize_block.rs b/apps/src/lib/node/ledger/shell/finalize_block.rs index 469483d307..f7fb2f5a39 100644 --- a/apps/src/lib/node/ledger/shell/finalize_block.rs +++ b/apps/src/lib/node/ledger/shell/finalize_block.rs @@ -474,7 +474,7 @@ mod test_finalize_block { ); shell .storage - .write(&balance_key, Amount::from(1000).try_to_vec().unwrap()) + .write(&balance_key, Amount::whole(1000).try_to_vec().unwrap()) .unwrap(); // create some wrapper txs @@ -675,7 +675,7 @@ mod test_finalize_block { ); shell .storage - .write(&balance_key, Amount::from(1000).try_to_vec().unwrap()) + .write(&balance_key, Amount::whole(1000).try_to_vec().unwrap()) .unwrap(); // create two decrypted txs diff --git a/apps/src/lib/node/ledger/shell/mod.rs b/apps/src/lib/node/ledger/shell/mod.rs index 1e25325834..40a3f5d115 100644 --- a/apps/src/lib/node/ledger/shell/mod.rs +++ b/apps/src/lib/node/ledger/shell/mod.rs @@ -41,7 +41,7 @@ use namada::types::internal::WrapperTxInQueue; use namada::types::key::*; use namada::types::storage::{BlockHeight, Key, TxIndex}; use namada::types::time::{DateTimeUtc, TimeZone, Utc}; -use namada::types::token::{self, Amount}; +use namada::types::token::{self}; use namada::types::transaction::{ hash_tx, process_tx, verify_decrypted_correctly, AffineCurve, DecryptedTx, EllipticCurve, PairingEngine, TxType, MIN_FEE, @@ -597,7 +597,7 @@ where #[cfg(feature = "mainnet")] let has_valid_pow = false; - if !has_valid_pow && Amount::from(MIN_FEE) > balance { + if !has_valid_pow && self.get_wrapper_tx_fees() > balance { response.code = 1; response.log = String::from( "The address given does not have sufficient \ @@ -728,7 +728,7 @@ where &self.storage, ) .expect("Must be able to read wrapper tx fees parameter"); - fees.unwrap_or_default() + fees.unwrap_or(token::Amount::whole(MIN_FEE)) } #[cfg(not(feature = "mainnet"))] diff --git a/apps/src/lib/node/ledger/shell/process_proposal.rs b/apps/src/lib/node/ledger/shell/process_proposal.rs index 4ba10d2bcb..e75254499a 100644 --- a/apps/src/lib/node/ledger/shell/process_proposal.rs +++ b/apps/src/lib/node/ledger/shell/process_proposal.rs @@ -175,7 +175,9 @@ where #[cfg(feature = "mainnet")] let has_valid_pow = false; - if has_valid_pow || Amount::from(MIN_FEE) <= balance { + if has_valid_pow + || self.get_wrapper_tx_fees() <= balance + { TxResult { code: ErrorCodes::Ok.into(), info: "Process proposal accepted this \ @@ -408,14 +410,6 @@ mod test_process_proposal { #[test] fn test_wrapper_insufficient_balance_address() { let (mut shell, _) = TestShell::new(); - shell.init_chain(RequestInitChain { - time: Some(Timestamp { - seconds: 0, - nanos: 0, - }), - chain_id: ChainId::default().to_string(), - ..Default::default() - }); let keypair = crate::wallet::defaults::daewon_keypair(); // reduce address balance to match the 100 token fee let balance_key = token::balance_key( @@ -424,7 +418,7 @@ mod test_process_proposal { ); shell .storage - .write(&balance_key, Amount::from(99).try_to_vec().unwrap()) + .write(&balance_key, Amount::whole(99).try_to_vec().unwrap()) .unwrap(); let tx = Tx::new( @@ -433,7 +427,7 @@ mod test_process_proposal { ); let wrapper = WrapperTx::new( Fee { - amount: Amount::whole(1_000_100), + amount: Amount::whole(100), token: shell.storage.native_token.clone(), }, &keypair, diff --git a/core/src/ledger/parameters/mod.rs b/core/src/ledger/parameters/mod.rs index 0a34506490..7cb8174f0b 100644 --- a/core/src/ledger/parameters/mod.rs +++ b/core/src/ledger/parameters/mod.rs @@ -478,10 +478,10 @@ where let (value, gas_wrapper_tx_fees) = storage .read(&wrapper_tx_fees_key) .map_err(ReadError::StorageError)?; - let address: Option = value + let fee: Option = value .map(|value| decode(value).map_err(ReadError::StorageTypeError)) .transpose()?; - Ok((address, gas_wrapper_tx_fees)) + Ok((fee, gas_wrapper_tx_fees)) } // Read the all the parameters from storage. Returns the parameters and gas