Skip to content

Commit 021d25f

Browse files
Merge pull request #21 from namada-net/feat/update-libs
feat: update libs to 0.251.3
2 parents edf30ef + 1d6d7e3 commit 021d25f

File tree

13 files changed

+2551
-1941
lines changed

13 files changed

+2551
-1941
lines changed

crate/Cargo.lock

Lines changed: 1347 additions & 859 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crate/Cargo.toml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,18 @@ nodejs = []
1818
web = []
1919

2020
[build-dependencies]
21-
namada_tx = { git = "https://github.com/anoma/namada", tag="libs-v0.251.1" }
21+
namada_tx = { git = "https://github.com/anoma/namada", tag="libs-v0.251.3" }
2222

2323
[dependencies]
2424
aes-gcm = "0.10.3"
2525
async-trait = {version = "0.1.51"}
2626
argon2 = "0.5.3"
27-
borsh-ext = { git = "https://github.com/heliaxdev/borsh-ext", tag = "v1.2.0" }
2827
tiny-bip39 = "2.0.0"
2928
chrono = "0.4.22"
3029
getrandom = { version = "0.3.3", features = [] }
3130
gloo-utils = { version = "0.1.5", features = ["serde"] }
3231
js-sys = "0.3.60"
33-
namada_sdk = { git = "https://github.com/anoma/namada", tag="libs-v0.251.1", default-features = false }
32+
namada_sdk = { git = "https://github.com/anoma/namada", tag="libs-v0.251.3", default-features = false }
3433
password-hash = "0.5.0"
3534
rand = {version = "0.8.5"}
3635
rayon = { version = "1.8", optional = true }
@@ -69,7 +68,7 @@ features = [
6968
]
7069

7170
[dev-dependencies]
72-
wasm-bindgen-test = "0.3.13"
71+
wasm-bindgen-test = "=0.3.13"
7372

7473
# https://doc.rust-lang.org/cargo/reference/profiles.html
7574
[profile.release]

crate/src/crypto/zip32.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ Imports from masp_primitives::zip32, instead of zcash_primitives::zip32, as
44
the value for constant ZIP32_SAPLING_MASTER_PERSONALIZATION is different!
55
Otherwise, these implementations should be equivalent.
66
*/
7-
use borsh_ext::BorshSerializeExt;
8-
use namada_sdk::borsh::BorshDeserialize;
7+
use namada_sdk::borsh::{BorshDeserialize, BorshSerializeExt};
98
use namada_sdk::masp_primitives::{
109
sapling::PaymentAddress,
1110
zip32::{sapling, ChildIndex, ExtendedFullViewingKey, ExtendedSpendingKey},

crate/src/sdk/args.rs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,6 @@ pub struct ShieldedTransferMsg {
571571
data: Vec<ShieldedTransferDataMsg>,
572572
gas_spending_key: Option<String>,
573573
bparams: Option<Vec<BparamsMsg>>,
574-
skip_fee_check: Option<bool>,
575574
}
576575

577576
/// Maps serialized tx_msg into TxShieldedTransfer args.
@@ -594,7 +593,6 @@ pub fn shielded_transfer_tx_args(
594593
data,
595594
gas_spending_key,
596595
bparams: bparams_msg,
597-
skip_fee_check: _,
598596
} = shielded_transfer_msg;
599597

600598
let gas_spending_key = gas_spending_key
@@ -730,7 +728,6 @@ pub struct UnshieldingTransferMsg {
730728
data: Vec<UnshieldingTransferDataMsg>,
731729
gas_spending_key: Option<String>,
732730
bparams: Option<Vec<BparamsMsg>>,
733-
skip_fee_check: Option<bool>,
734731
}
735732

736733
/// Maps serialized tx_msg into TxUnshieldingTransfer args.
@@ -755,7 +752,6 @@ pub fn unshielding_transfer_tx_args(
755752
data,
756753
gas_spending_key,
757754
bparams: bparams_msg,
758-
skip_fee_check: _,
759755
} = unshielding_transfer_msg;
760756
let source = PseudoExtendedKey::decode(source)?.0;
761757
let gas_spending_key = gas_spending_key
@@ -1077,20 +1073,22 @@ fn tx_msg_into_args(tx_msg: &[u8]) -> Result<args::Tx, JsError> {
10771073
None => TxExpiration::Default,
10781074
};
10791075

1080-
let args = args::Tx {
1081-
dry_run: false,
1082-
dry_run_wrapper: false,
1083-
dump_tx: false,
1084-
dump_wrapper_tx: false,
1085-
force,
1076+
let wrapper = args::Wrapper {
10861077
broadcast_only: false,
1087-
ledger_address,
1088-
wallet_alias_force: false,
1089-
initialized_account_alias: None,
10901078
fee_amount: Some(fee_input_amount),
10911079
fee_token: token.clone(),
10921080
gas_limit: GasLimit::from_str(&gas_limit).expect("Gas limit to be valid"),
10931081
wrapper_fee_payer,
1082+
};
1083+
1084+
let args = args::Tx {
1085+
dry_run: None,
1086+
dump_tx: None,
1087+
force,
1088+
ledger_address,
1089+
wallet_alias_force: false,
1090+
initialized_account_alias: None,
1091+
wrap_tx: Some(wrapper),
10941092
output_folder: None,
10951093
expiration,
10961094
chain_id: Some(ChainId(chain_id)),

crate/src/sdk/mod.rs

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use namada_sdk::masp_primitives::transaction::components::amount::I128Sum;
3636
use namada_sdk::masp_primitives::transaction::TxId;
3737
use namada_sdk::masp_primitives::zip32::{ExtendedFullViewingKey, ExtendedKey};
3838
use namada_sdk::rpc::{self, query_denom, query_epoch, InnerTxResult, TxAppliedEvents, TxResponse};
39-
use namada_sdk::signing::SigningTxData;
39+
use namada_sdk::signing::SigningData;
4040
use namada_sdk::string_encoding::Format;
4141
use namada_sdk::tendermint_rpc::Url;
4242
use namada_sdk::token::{Amount, DenominatedAmount};
@@ -547,7 +547,7 @@ impl Sdk {
547547

548548
let args = first_tx.args();
549549

550-
let mut txs: Vec<(Tx, SigningTxData)> = vec![];
550+
let mut txs: Vec<(Tx, SigningData)> = vec![];
551551
let mut masp_map: BTreeMap<MaspTxId, MaspSigningData> = BTreeMap::new();
552552

553553
// Iterate through provided tx::Tx and deserialize bytes to Namada Tx
@@ -571,28 +571,33 @@ impl Sdk {
571571
}
572572

573573
let tx: Tx = Tx::try_from_slice(&tx_bytes)?;
574+
let namada_signing_data = first_signing_data.to_namada_signing_data()?;
574575

575-
txs.push((tx, signing_tx_data.to_owned()));
576+
txs.push((tx, namada_signing_data));
576577
}
577578

578579
let (tx, signing_data) = build_batch(txs.clone())?;
580+
let wrapper_signing_data = match signing_data {
581+
Either::Left(sd) => Ok(sd),
582+
Either::Right(_) => Err(JsError::new("Expected Left signing data for batch Tx")),
583+
}?;
579584

580-
let signing_data = signing_data
581-
.iter()
582-
.cloned()
583-
.map(|sd| {
584-
if let Some(sh) = sd.shielded_hash {
585-
(sd, masp_map.get(&sh).cloned())
586-
} else {
587-
(sd, None)
588-
}
589-
})
590-
.collect::<Vec<_>>();
585+
let masp_sd = wrapper_signing_data.signing_data.iter().find_map(|sd| {
586+
if let Some(sh) = sd.shielded_hash {
587+
masp_map.get(&sh).cloned()
588+
} else {
589+
None
590+
}
591+
});
591592

592593
to_js_result(borsh::to_vec(&tx::Tx::new(
593594
tx,
594595
&borsh::to_vec(&args)?,
595-
signing_data,
596+
(
597+
wrapper_signing_data.signing_data,
598+
Some(wrapper_signing_data.fee_auth),
599+
masp_sd,
600+
),
596601
)?)?)
597602
}
598603

@@ -642,7 +647,6 @@ impl Sdk {
642647
&self,
643648
shielded_transfer_msg: &[u8],
644649
wrapper_tx_msg: &[u8],
645-
skip_fee_check: bool,
646650
) -> Result<JsValue, JsError> {
647651
let (mut args, bparams) =
648652
args::shielded_transfer_tx_args(shielded_transfer_msg, wrapper_tx_msg)?;
@@ -669,9 +673,7 @@ impl Sdk {
669673

670674
let ((tx, signing_data), masp_signing_data) = match bparams {
671675
BuildParams::RngBuildParams(mut bparams) => {
672-
let tx =
673-
build_shielded_transfer(&self.namada, &mut args, &mut bparams, skip_fee_check)
674-
.await?;
676+
let tx = build_shielded_transfer(&self.namada, &mut args, &mut bparams).await?;
675677
let masp_signing_data = MaspSigningData::new(
676678
bparams
677679
.to_stored()
@@ -682,9 +684,7 @@ impl Sdk {
682684
(tx, masp_signing_data)
683685
}
684686
BuildParams::StoredBuildParams(mut bparams) => {
685-
let tx =
686-
build_shielded_transfer(&self.namada, &mut args, &mut bparams, skip_fee_check)
687-
.await?;
687+
let tx = build_shielded_transfer(&self.namada, &mut args, &mut bparams).await?;
688688
let masp_signing_data = MaspSigningData::new(bparams, xfvks);
689689

690690
(tx, masp_signing_data)
@@ -710,7 +710,6 @@ impl Sdk {
710710
&self,
711711
unshielding_transfer_msg: &[u8],
712712
wrapper_tx_msg: &[u8],
713-
skip_fee_check: bool,
714713
) -> Result<JsValue, JsError> {
715714
let (mut args, bparams) =
716715
args::unshielding_transfer_tx_args(unshielding_transfer_msg, wrapper_tx_msg)?;
@@ -737,13 +736,7 @@ impl Sdk {
737736

738737
let ((tx, signing_data), masp_signing_data) = match bparams {
739738
BuildParams::RngBuildParams(mut bparams) => {
740-
let tx = build_unshielding_transfer(
741-
&self.namada,
742-
&mut args,
743-
&mut bparams,
744-
skip_fee_check,
745-
)
746-
.await?;
739+
let tx = build_unshielding_transfer(&self.namada, &mut args, &mut bparams).await?;
747740
let masp_signing_data = MaspSigningData::new(
748741
bparams
749742
.to_stored()
@@ -754,13 +747,7 @@ impl Sdk {
754747
(tx, masp_signing_data)
755748
}
756749
BuildParams::StoredBuildParams(mut bparams) => {
757-
let tx = build_unshielding_transfer(
758-
&self.namada,
759-
&mut args,
760-
&mut bparams,
761-
skip_fee_check,
762-
)
763-
.await?;
750+
let tx = build_unshielding_transfer(&self.namada, &mut args, &mut bparams).await?;
764751
let masp_signing_data = MaspSigningData::new(bparams, xfvks);
765752

766753
(tx, masp_signing_data)
@@ -847,7 +834,7 @@ impl Sdk {
847834

848835
let ((tx, signing_data, _), masp_signing_data) = match bparams {
849836
BuildParams::RngBuildParams(mut bparams) => {
850-
let tx = build_ibc_transfer(&self.namada, &args, &mut bparams, false).await?;
837+
let tx = build_ibc_transfer(&self.namada, &args, &mut bparams).await?;
851838
let masp_signing_data = MaspSigningData::new(
852839
bparams
853840
.to_stored()
@@ -858,7 +845,7 @@ impl Sdk {
858845
(tx, masp_signing_data)
859846
}
860847
BuildParams::StoredBuildParams(mut bparams) => {
861-
let tx = build_ibc_transfer(&self.namada, &args, &mut bparams, false).await?;
848+
let tx = build_ibc_transfer(&self.namada, &args, &mut bparams).await?;
862849
let masp_signing_data = MaspSigningData::new(bparams, xfvks);
863850

864851
(tx, masp_signing_data)
@@ -1265,7 +1252,6 @@ impl Sdk {
12651252
to_js_result(final_res)
12661253
}
12671254

1268-
12691255
pub fn masp_address(&self) -> String {
12701256
MASP.to_string()
12711257
}
@@ -1274,10 +1260,22 @@ impl Sdk {
12741260
&self,
12751261
tx: Tx,
12761262
wrapper_tx_msg: &[u8],
1277-
signing_data: SigningTxData,
1263+
signing_data: SigningData,
12781264
masp_signing_data: Option<MaspSigningData>,
12791265
) -> Result<JsValue, JsError> {
1280-
let tx = tx::Tx::new(tx, wrapper_tx_msg, vec![(signing_data, masp_signing_data)])?;
1266+
let components = match signing_data {
1267+
SigningData::Inner(signing_tx_data) => (vec![signing_tx_data], None),
1268+
SigningData::Wrapper(signing_wrapper_data) => (
1269+
signing_wrapper_data.signing_data,
1270+
Some(signing_wrapper_data.fee_auth),
1271+
),
1272+
};
1273+
1274+
let tx = tx::Tx::new(
1275+
tx,
1276+
wrapper_tx_msg,
1277+
(components.0, components.1, masp_signing_data),
1278+
)?;
12811279

12821280
to_js_result(borsh::to_vec(&tx)?)
12831281
}

crate/src/sdk/tx.rs

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ use std::str::FromStr;
33

44
use gloo_utils::format::JsValueSerdeExt;
55
use namada_sdk::borsh::{self, BorshDeserialize, BorshSerialize};
6+
67
use namada_sdk::collections::HashSet;
78
use namada_sdk::masp_primitives::transaction::components::sapling::builder::StoredBuildParams;
89
use namada_sdk::masp_primitives::transaction::components::sapling::fees::{InputView, OutputView};
910
use namada_sdk::masp_primitives::zip32::ExtendedFullViewingKey;
10-
use namada_sdk::signing::SigningTxData;
11+
use namada_sdk::signing::{FeeAuthorization, SigningTxData};
12+
use namada_sdk::signing::{SigningData as NamadaSigningData, SigningWrapperData};
1113
use namada_sdk::token::{Amount, DenominatedAmount, Transfer};
1214
use namada_sdk::tx::data::compute_inner_tx_hash;
13-
use namada_sdk::tx::either::{self, Either};
15+
use namada_sdk::tx::either::Either;
1416
use namada_sdk::tx::{
1517
self, TX_BOND_WASM, TX_CLAIM_REWARDS_WASM, TX_IBC_WASM, TX_REDELEGATE_WASM, TX_REVEAL_PK,
1618
TX_TRANSFER_WASM, TX_UNBOND_WASM, TX_VOTE_PROPOSAL, TX_WITHDRAW_WASM,
@@ -58,6 +60,7 @@ impl SigningData {
5860
// Create serializable struct from Namada type
5961
pub fn from_signing_tx_data(
6062
signing_tx_data: SigningTxData,
63+
fee_auth: Option<FeeAuthorization>,
6164
masp_signing_data: Option<MaspSigningData>,
6265
) -> Result<SigningData, JsError> {
6366
let owner: Option<String> = signing_tx_data.owner.map(|addr| addr.to_string());
@@ -72,10 +75,17 @@ impl SigningData {
7275
None => None,
7376
};
7477

75-
let fee_payer = match signing_tx_data.fee_payer {
76-
Either::Left(f) => f.0.to_string(),
77-
Either::Right(_) => return Err(JsError::new("Fee payer must be a public key")),
78-
};
78+
let fee_payer = fee_auth
79+
.map(|fa| match fa {
80+
FeeAuthorization::Signer {
81+
pubkey,
82+
disposable_fee_payer: _,
83+
} => Ok(pubkey.to_string()),
84+
FeeAuthorization::Signature(_) => {
85+
Err(JsError::new("FeeAuthorization::Signature not supported"))
86+
}
87+
})
88+
.ok_or(JsError::new("FeeAuthorization is required"))??;
7989

8090
let threshold = signing_tx_data.threshold;
8191
let shielded_hash = match signing_tx_data.shielded_hash {
@@ -111,8 +121,6 @@ impl SigningData {
111121
public_keys.insert(pk);
112122
}
113123

114-
let fee_payer = PublicKey::from_str(&self.fee_payer)?;
115-
let fee_payer = either::Left((fee_payer, false));
116124
let threshold = self.threshold;
117125
let account_public_keys_map = match &self.account_public_keys_map {
118126
Some(pk_map) => Some(borsh::from_slice(pk_map)?),
@@ -126,7 +134,6 @@ impl SigningData {
126134
Ok(SigningTxData {
127135
owner,
128136
public_keys,
129-
fee_payer,
130137
threshold,
131138
// Assume no signatures at this point
132139
signatures: vec![],
@@ -135,6 +142,20 @@ impl SigningData {
135142
})
136143
}
137144

145+
pub fn to_namada_signing_data(&self) -> Result<NamadaSigningData, JsError> {
146+
let signing_data = self.to_signing_tx_data()?;
147+
148+
let siginig_data = NamadaSigningData::Wrapper(SigningWrapperData {
149+
signing_data: vec![signing_data],
150+
fee_auth: FeeAuthorization::Signer {
151+
pubkey: PublicKey::from_str(&self.fee_payer)?,
152+
disposable_fee_payer: false,
153+
},
154+
});
155+
156+
Ok(siginig_data)
157+
}
158+
138159
pub fn masp(&self) -> Option<Vec<u8>> {
139160
self.masp.clone()
140161
}
@@ -175,12 +196,16 @@ impl Tx {
175196
pub fn new(
176197
tx: tx::Tx,
177198
args: &[u8],
178-
signing_tx_data: Vec<(SigningTxData, Option<MaspSigningData>)>,
199+
(signing_tx_data, fee_auth, masp_sd): (
200+
Vec<SigningTxData>,
201+
Option<FeeAuthorization>,
202+
Option<MaspSigningData>,
203+
),
179204
) -> Result<Tx, JsError> {
180205
let args: WrapperTxMsg = borsh::from_slice(args)?;
181206
let mut signing_data: Vec<SigningData> = vec![];
182-
for (sd, msd) in signing_tx_data.into_iter() {
183-
let sd = SigningData::from_signing_tx_data(sd, msd)?;
207+
for sd in signing_tx_data.into_iter() {
208+
let sd = SigningData::from_signing_tx_data(sd, fee_auth.clone(), masp_sd.clone())?;
184209
signing_data.push(sd);
185210
}
186211
let hash = tx.wrapper_hash();

0 commit comments

Comments
 (0)