Skip to content

Commit 723c717

Browse files
authored
Merge of #4939
2 parents b3e1bae + ed70e61 commit 723c717

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+3032
-1147
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- Allow IBC deposits into payment addresses (without generating MASP
2+
transactions), and IBC withdraws from payment addresses (to automatically
3+
get refunded, if an IBC unshielding transfer fails on the counter-party).
4+
([\#4939](https://github.com/namada-net/namada/pull/4939))

.github/workflows/scripts/e2e.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"e2e::eth_bridge_tests::everything": 4,
3+
"e2e::ibc_tests::ibc_to_and_from_payment_addrs": 840,
34
"e2e::ibc_tests::frontend_sus_fee": 350,
45
"e2e::ibc_tests::ibc_transfers": 414,
56
"e2e::ibc_tests::ibc_nft_transfers": 224,

Cargo.lock

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/apps_lib/src/cli.rs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3623,7 +3623,6 @@ pub mod args {
36233623
arg_opt("output-folder-path");
36243624
pub const OSMOSIS_POOL_HOP: ArgMulti<OsmosisPoolHop, GlobStar> =
36253625
arg_multi("pool-hop");
3626-
pub const OVERFLOW_OPT: ArgOpt<WalletAddress> = arg_opt("overflow-addr");
36273626
pub const OWNER: Arg<WalletAddress> = arg("owner");
36283627
pub const OWNER_OPT: ArgOpt<WalletAddress> = OWNER.opt();
36293628
pub const PATH: Arg<PathBuf> = arg("path");
@@ -5311,18 +5310,15 @@ pub mod args {
53115310
Either::Left(r) => Either::Left(chain_ctx.get(&r)),
53125311
Either::Right(r) => Either::Right(chain_ctx.get(&r)),
53135312
};
5314-
let overflow = self.overflow.map(|r| chain_ctx.get(&r));
53155313
Ok(TxOsmosisSwap {
53165314
transfer: self.transfer.to_sdk(ctx)?,
53175315
output_denom: self.output_denom,
53185316
recipient,
5319-
overflow,
53205317
slippage: self.slippage,
53215318
local_recovery_addr: self.local_recovery_addr,
53225319
route: self.route,
53235320
osmosis_lcd_rpc: self.osmosis_lcd_rpc,
53245321
osmosis_sqs_rpc: self.osmosis_sqs_rpc,
5325-
frontend_sus_fee: None,
53265322
})
53275323
}
53285324
}
@@ -5336,7 +5332,6 @@ pub mod args {
53365332
let maybe_trans_recipient = TARGET_OPT.parse(matches);
53375333
let maybe_shielded_recipient =
53385334
PAYMENT_ADDRESS_TARGET_OPT.parse(matches);
5339-
let maybe_overflow = OVERFLOW_OPT.parse(matches);
53405335
let slippage_percent = SLIPPAGE.parse(matches);
53415336
if slippage_percent.is_some_and(|percent| {
53425337
let zero = Dec::zero();
@@ -5369,13 +5364,11 @@ pub mod args {
53695364
} else {
53705365
Either::Right(maybe_shielded_recipient.unwrap())
53715366
},
5372-
overflow: maybe_overflow,
53735367
slippage,
53745368
local_recovery_addr,
53755369
route,
53765370
osmosis_lcd_rpc,
53775371
osmosis_sqs_rpc,
5378-
frontend_sus_fee: None,
53795372
}
53805373
}
53815374

@@ -5409,7 +5402,6 @@ pub mod args {
54095402
.arg(
54105403
TARGET_OPT
54115404
.def()
5412-
.conflicts_with(OVERFLOW_OPT.name)
54135405
.conflicts_with(PAYMENT_ADDRESS_TARGET_OPT.name)
54145406
.help(wrap!(
54155407
"Transparent Namada address that shall receive \
@@ -5425,15 +5417,6 @@ pub mod args {
54255417
minimum amount of tokens swapped on Osmosis."
54265418
)),
54275419
)
5428-
.arg(OVERFLOW_OPT.def().help(wrap!(
5429-
"Transparent address that receives the amount of target \
5430-
asset exceeding the minimum trade amount. Only \
5431-
applicable when shielding assets that have been swapped \
5432-
on Osmosis. This address should not be linkable to any \
5433-
of the user's personal accounts, to maximize the privacy \
5434-
of the trade. If unspecified, a disposable address is \
5435-
generated."
5436-
)))
54375420
.arg(SLIPPAGE.def().help(wrap!(
54385421
"Slippage percentage, as a number between 0 and 100. \
54395422
Represents the maximum acceptable deviation from the \

crates/benches/native_vps.rs

Lines changed: 52 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ use namada_apps_lib::masp_primitives::merkle_tree::CommitmentTree;
4141
use namada_apps_lib::masp_primitives::transaction::Transaction;
4242
use namada_apps_lib::masp_proofs::sapling::SaplingVerificationContextInner;
4343
use namada_apps_lib::proof_of_stake::KeySeg;
44-
use namada_apps_lib::state::{Epoch, StorageRead, StorageWrite, TxIndex};
44+
use namada_apps_lib::state::{Epoch, StorageRead, StorageWrite};
4545
use namada_apps_lib::token::masp::{
4646
PVKs, partial_deauthorize, preload_verifying_keys,
4747
};
4848
use namada_apps_lib::token::{Amount, Transfer};
49-
use namada_apps_lib::tx::{BatchedTx, Code, Section, Tx};
49+
use namada_apps_lib::tx::{BatchedTx, Code, IndexedTx, Section, Tx};
5050
use namada_apps_lib::validation::{
5151
EthBridgeNutVp, EthBridgePoolVp, EthBridgeVp, GovernanceVp, IbcVp,
5252
IbcVpContext, MaspVp, MultitokenVp, ParametersVp, PgfVp, PosVp,
@@ -222,12 +222,13 @@ fn governance(c: &mut Criterion) {
222222
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
223223
&TxGasMeter::new(u64::MAX, 1),
224224
));
225+
let indexed_tx = IndexedTx::default();
225226
let ctx = Ctx::new(
226227
&Address::Internal(InternalAddress::Governance),
227228
&shell.state,
228229
&signed_tx.tx,
229230
&signed_tx.cmt,
230-
&TxIndex(0),
231+
&indexed_tx,
231232
&gas_meter,
232233
&keys_changed,
233234
&verifiers,
@@ -294,13 +295,14 @@ fn governance(c: &mut Criterion) {
294295
// .write_log
295296
// .verifiers_and_changed_keys(&verifiers_from_tx);
296297

298+
// let indexed_tx = IndexedTx::default();
297299
// let slash_fund = SlashFundVp {
298300
// ctx: Ctx::new(
299301
// &Address::Internal(InternalAddress::SlashFund),
300302
// &shell.state.storage,
301303
// &shell.state.write_log,
302304
// &tx,
303-
// &TxIndex(0),
305+
// &indexed_tx,
304306
//
305307
// VpGasMeter::new_from_tx_meter(&TxGasMeter::new(
306308
// u64::MAX.into(), )),
@@ -451,12 +453,13 @@ fn ibc(c: &mut Criterion) {
451453
&TxGasMeter::new(u64::MAX, 1),
452454
));
453455
let shell_read = shielded_ctx.shell.read();
456+
let indexed_tx = IndexedTx::default();
454457
let ibc = IbcVp::new(Ctx::new(
455458
&Address::Internal(InternalAddress::Ibc),
456459
&shell_read.state,
457460
&signed_tx.tx,
458461
&signed_tx.cmt,
459-
&TxIndex(0),
462+
&indexed_tx,
460463
&gas_meter,
461464
&keys_changed,
462465
&verifiers,
@@ -519,12 +522,13 @@ fn vp_multitoken(c: &mut Criterion) {
519522
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
520523
&TxGasMeter::new(u64::MAX, 1),
521524
));
525+
let indexed_tx = IndexedTx::default();
522526
let ctx = Ctx::new(
523527
&Address::Internal(InternalAddress::Multitoken),
524528
&shell.state,
525529
&signed_tx.tx,
526530
&signed_tx.cmt,
527-
&TxIndex(0),
531+
&indexed_tx,
528532
&gas_meter,
529533
&keys_changed,
530534
&verifiers,
@@ -644,12 +648,13 @@ fn masp(c: &mut Criterion) {
644648
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
645649
&TxGasMeter::new(u64::MAX, 1),
646650
));
651+
let indexed_tx = IndexedTx::default();
647652
let ctx = Ctx::new(
648653
&Address::Internal(InternalAddress::Masp),
649654
&shell_read.state,
650655
&signed_tx.tx,
651656
&signed_tx.cmt,
652-
&TxIndex(0),
657+
&indexed_tx,
653658
&gas_meter,
654659
&keys_changed,
655660
&verifiers,
@@ -1271,12 +1276,13 @@ fn pgf(c: &mut Criterion) {
12711276
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
12721277
&TxGasMeter::new(u64::MAX, 1),
12731278
));
1279+
let indexed_tx = IndexedTx::default();
12741280
let ctx = Ctx::new(
12751281
&Address::Internal(InternalAddress::Pgf),
12761282
&shell.state,
12771283
&signed_tx.tx,
12781284
&signed_tx.cmt,
1279-
&TxIndex(0),
1285+
&indexed_tx,
12801286
&gas_meter,
12811287
&keys_changed,
12821288
&verifiers,
@@ -1349,12 +1355,13 @@ fn eth_bridge_nut(c: &mut Criterion) {
13491355
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
13501356
&TxGasMeter::new(u64::MAX, 1),
13511357
));
1358+
let indexed_tx = IndexedTx::default();
13521359
let ctx = Ctx::new(
13531360
&vp_address,
13541361
&shell.state,
13551362
&signed_tx.tx,
13561363
&signed_tx.cmt,
1357-
&TxIndex(0),
1364+
&indexed_tx,
13581365
&gas_meter,
13591366
&keys_changed,
13601367
&verifiers,
@@ -1423,12 +1430,13 @@ fn eth_bridge(c: &mut Criterion) {
14231430
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
14241431
&TxGasMeter::new(u64::MAX, 1),
14251432
));
1433+
let indexed_tx = IndexedTx::default();
14261434
let ctx = Ctx::new(
14271435
&vp_address,
14281436
&shell.state,
14291437
&signed_tx.tx,
14301438
&signed_tx.cmt,
1431-
&TxIndex(0),
1439+
&indexed_tx,
14321440
&gas_meter,
14331441
&keys_changed,
14341442
&verifiers,
@@ -1522,12 +1530,13 @@ fn eth_bridge_pool(c: &mut Criterion) {
15221530
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
15231531
&TxGasMeter::new(u64::MAX, 1),
15241532
));
1533+
let indexed_tx = IndexedTx::default();
15251534
let ctx = Ctx::new(
15261535
&vp_address,
15271536
&shell.state,
15281537
&signed_tx.tx,
15291538
&signed_tx.cmt,
1530-
&TxIndex(0),
1539+
&indexed_tx,
15311540
&gas_meter,
15321541
&keys_changed,
15331542
&verifiers,
@@ -1596,12 +1605,13 @@ fn parameters(c: &mut Criterion) {
15961605
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
15971606
&TxGasMeter::new(u64::MAX, 1),
15981607
));
1608+
let indexed_tx = IndexedTx::default();
15991609
let ctx = Ctx::new(
16001610
&vp_address,
16011611
&shell.state,
16021612
&signed_tx.tx,
16031613
&signed_tx.cmt,
1604-
&TxIndex(0),
1614+
&indexed_tx,
16051615
&gas_meter,
16061616
&keys_changed,
16071617
&verifiers,
@@ -1673,12 +1683,13 @@ fn pos(c: &mut Criterion) {
16731683
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
16741684
&TxGasMeter::new(u64::MAX, 1),
16751685
));
1686+
let indexed_tx = IndexedTx::default();
16761687
let ctx = Ctx::new(
16771688
&vp_address,
16781689
&shell.state,
16791690
&signed_tx.tx,
16801691
&signed_tx.cmt,
1681-
&TxIndex(0),
1692+
&indexed_tx,
16821693
&gas_meter,
16831694
&keys_changed,
16841695
&verifiers,
@@ -1727,12 +1738,13 @@ fn ibc_vp_validate_action(c: &mut Criterion) {
17271738
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
17281739
&TxGasMeter::new(u64::MAX, 1),
17291740
));
1741+
let indexed_tx = IndexedTx::default();
17301742
let ibc = IbcVp::new(Ctx::new(
17311743
&Address::Internal(InternalAddress::Ibc),
17321744
&shell_read.state,
17331745
&signed_tx.tx,
17341746
&signed_tx.cmt,
1735-
&TxIndex(0),
1747+
&indexed_tx,
17361748
&gas_meter,
17371749
&keys_changed,
17381750
&verifiers,
@@ -1745,17 +1757,20 @@ fn ibc_vp_validate_action(c: &mut Criterion) {
17451757

17461758
let exec_ctx = IbcVpContext::new(ibc.ctx.pre());
17471759
let ctx = Rc::new(RefCell::new(exec_ctx));
1748-
let mut actions =
1749-
IbcActions::<_, parameters::Store<_>, token::Store<()>>::new(
1750-
ctx.clone(),
1751-
verifiers.clone(),
1752-
);
1760+
let mut actions = IbcActions::<
1761+
_,
1762+
parameters::Store<_>,
1763+
token::Store<_>,
1764+
token::ShieldedStore<_>,
1765+
>::new(ctx.clone(), verifiers.clone());
17531766
actions.set_validation_params(ibc.validation_params().unwrap());
17541767

1755-
let module = create_transfer_middlewares::<_, parameters::Store<_>>(
1756-
ctx.clone(),
1757-
verifiers,
1758-
);
1768+
let module = create_transfer_middlewares::<
1769+
_,
1770+
parameters::Store<_>,
1771+
token::Store<_>,
1772+
token::ShieldedStore<_>,
1773+
>(ctx.clone(), verifiers);
17591774
actions.add_transfer_module(module);
17601775
let module = NftTransferModule::<_, token::Store<()>>::new(ctx);
17611776
actions.add_transfer_module(module);
@@ -1791,12 +1806,13 @@ fn ibc_vp_execute_action(c: &mut Criterion) {
17911806
let gas_meter = RefCell::new(VpGasMeter::new_from_tx_meter(
17921807
&TxGasMeter::new(u64::MAX, 1),
17931808
));
1809+
let indexed_tx = IndexedTx::default();
17941810
let ibc = IbcVp::new(Ctx::new(
17951811
&Address::Internal(InternalAddress::Ibc),
17961812
&shell_read.state,
17971813
&signed_tx.tx,
17981814
&signed_tx.cmt,
1799-
&TxIndex(0),
1815+
&indexed_tx,
18001816
&gas_meter,
18011817
&keys_changed,
18021818
&verifiers,
@@ -1810,17 +1826,20 @@ fn ibc_vp_execute_action(c: &mut Criterion) {
18101826
let exec_ctx = IbcVpContext::new(ibc.ctx.pre());
18111827
let ctx = Rc::new(RefCell::new(exec_ctx));
18121828

1813-
let mut actions =
1814-
IbcActions::<_, parameters::Store<_>, token::Store<()>>::new(
1815-
ctx.clone(),
1816-
verifiers.clone(),
1817-
);
1829+
let mut actions = IbcActions::<
1830+
_,
1831+
parameters::Store<_>,
1832+
token::Store<_>,
1833+
token::ShieldedStore<_>,
1834+
>::new(ctx.clone(), verifiers.clone());
18181835
actions.set_validation_params(ibc.validation_params().unwrap());
18191836

1820-
let module = create_transfer_middlewares::<_, parameters::Store<_>>(
1821-
ctx.clone(),
1822-
verifiers,
1823-
);
1837+
let module = create_transfer_middlewares::<
1838+
_,
1839+
parameters::Store<_>,
1840+
token::Store<_>,
1841+
token::ShieldedStore<_>,
1842+
>(ctx.clone(), verifiers);
18241843
actions.add_transfer_module(module);
18251844
let module = NftTransferModule::<_, token::Store<()>>::new(ctx);
18261845
actions.add_transfer_module(module);

crates/benches/process_wrapper.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use criterion::{Criterion, criterion_group, criterion_main};
22
use namada_apps_lib::key::RefTo;
3-
use namada_apps_lib::state::TxIndex;
43
use namada_apps_lib::time::DateTimeUtc;
54
use namada_apps_lib::token::{Amount, DenominatedAmount, Transfer};
65
use namada_apps_lib::tx::Authorization;
@@ -90,7 +89,7 @@ fn process_tx(c: &mut Criterion) {
9089
shell
9190
.check_proposal_tx(
9291
&wrapper,
93-
&TxIndex::default(),
92+
Default::default(),
9493
validation_meta,
9594
temp_state,
9695
datetime,

0 commit comments

Comments
 (0)