Skip to content

Commit e5c4ce1

Browse files
committed
feat: hardcoded values for shielded osmosis swap
1 parent adb4e23 commit e5c4ce1

File tree

5 files changed

+101
-34
lines changed

5 files changed

+101
-34
lines changed

apps/namadillo/src/App/Ibc/OsmosisSwap.tsx

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import { AccountType, BparamsMsgValue } from "@namada/types";
12
import { defaultAccountAtom } from "atoms/accounts";
23
import { createOsmosisSwapTxAtom } from "atoms/transfer/atoms";
34
import BigNumber from "bignumber.js";
45
import invariant from "invariant";
56
import { useAtomValue } from "jotai";
67
import { broadcastTransaction, signTx } from "lib/query";
78
import { useEffect } from "react";
9+
import { getSdkInstance } from "utils/sdk";
810

911
export const OsmosisSwap: React.FC = () => {
1012
const { mutateAsync: performOsmosisSwap } = useAtomValue(
@@ -29,7 +31,6 @@ export const OsmosisSwap: React.FC = () => {
2931
};
3032
const params = {
3133
transfer,
32-
// We want to receive TIA
3334
outputDenom: "transfer/channel-14/uatom",
3435
recipient: "tnam1qz4u7j7dkxj5wv9xuwy2qemaeeqd450ysgl7pq0r",
3536
overflow: "tnam1qz4u7j7dkxj5wv9xuwy2qemaeeqd450ysgl7pq0r",
@@ -62,6 +63,69 @@ export const OsmosisSwap: React.FC = () => {
6263

6364
// eslint-disable-next-line @typescript-eslint/no-explicit-any
6465
(window as any).osmosisSwap = handleOsmosisSwap;
66+
67+
const handleOsmosisShieldedSwap = async (): Promise<void> => {
68+
invariant(account.data, "No transparent account is found");
69+
const a = account.data;
70+
71+
let bparams: BparamsMsgValue[] | undefined;
72+
if (a.type === AccountType.Ledger) {
73+
const sdk = await getSdkInstance();
74+
const ledger = await sdk.initLedger();
75+
bparams = await ledger.getBparams();
76+
ledger.closeTransport();
77+
}
78+
79+
const transfer = {
80+
amountInBaseDenom: BigNumber(100),
81+
// osmosis channel
82+
channelId: "channel-13",
83+
portId: "transfer",
84+
token: "tnam1pkxwqwhjkulpd2jmc5hmetj6hkfpf0cdfuzfx70c",
85+
source:
86+
"03d5935721000000803fe3d7a9c42c483e5c3840c13eb7dadec2e420f850a769342a2786b58c86215d1fd1ca29f99d94bf033533a30b3461a2dacc4d0f968a080a2a335a085525d18b29f5e59e281a297c35d62299ff82a1525ae327862aca92d01faceebe375af12530bf9eff49e6f90c2eb554db591b1fc30694c716635f0bd2050682d6eeb6a2c5438dd7725495fb866d76db12de4e44ad9be424af57d12c8c19a6dc8664825d8701000000000000000000000000000000000000000000000000000000000000000001f3d7b291d734e35aefd38601bc947778d3adefc9ee2defd8d745fe124e850d0b",
87+
gasSpendingKey:
88+
"03d5935721000000803fe3d7a9c42c483e5c3840c13eb7dadec2e420f850a769342a2786b58c86215d1fd1ca29f99d94bf033533a30b3461a2dacc4d0f968a080a2a335a085525d18b29f5e59e281a297c35d62299ff82a1525ae327862aca92d01faceebe375af12530bf9eff49e6f90c2eb554db591b1fc30694c716635f0bd2050682d6eeb6a2c5438dd7725495fb866d76db12de4e44ad9be424af57d12c8c19a6dc8664825d8701000000000000000000000000000000000000000000000000000000000000000001f3d7b291d734e35aefd38601bc947778d3adefc9ee2defd8d745fe124e850d0b",
89+
receiver:
90+
"osmo1lrlqeq38ephw8mz0c3uzfdpt4fh3fr0s2atur5n33md90m4wx3mqmz7fq6",
91+
bparams,
92+
refundTarget: "tnam1qqshvryx9pngpk7mmzpzkjkm6klelgusuvmkc0uz",
93+
};
94+
const params = {
95+
transfer,
96+
outputDenom: "transfer/channel-13/uosmo",
97+
recipient:
98+
"znam17k7jw0wmvzdzmfm46m8600t9cah5mjl6se75cu9jvwxywk75k3kmxehmxk7wha62l35puzl6srd",
99+
overflow: "tnam1qqshvryx9pngpk7mmzpzkjkm6klelgusuvmkc0uz",
100+
slippage: { 0: "1799" },
101+
localRecoveryAddr: "osmo18st0wqx84av8y6xdlss9d6m2nepyqwj6n3q7js",
102+
osmosisRestRpc: "https://osmosis-rest.publicnode.com",
103+
};
104+
105+
try {
106+
const encodedTxData = await performOsmosisSwap({
107+
signer: {
108+
publicKey: account.data.publicKey!,
109+
address: account.data.address!,
110+
},
111+
account: account.data,
112+
params: [params],
113+
gasConfig: {
114+
gasLimit: BigNumber(75000),
115+
gasPriceInMinDenom: BigNumber(0.000001),
116+
gasToken: "tnam1qy440ynh9fwrx8aewjvvmu38zxqgukgc259fzp6h",
117+
},
118+
});
119+
120+
const signedTxs = await signTx(encodedTxData, account.data.address!);
121+
await broadcastTransaction(encodedTxData, signedTxs);
122+
} catch (error) {
123+
console.error("Error performing Osmosis swap:", error);
124+
}
125+
};
126+
127+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
128+
(window as any).osmosisShieldedSwap = handleOsmosisShieldedSwap;
65129
}, [account.data]);
66130

67131
return <></>;

packages/shared/lib/Cargo.lock

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

packages/shared/lib/Cargo.toml

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

2020
[build-dependencies]
21-
namada_tx = { git = "https://github.com/anoma/namada", rev="8585ffd3444d6f6e4a6cfc6a779281b75b1efe78" }
21+
namada_tx = { git = "https://github.com/anoma/namada", rev="c7c04353b285c1437c9351501b702376db437072" }
2222

2323
[dependencies]
2424
async-trait = {version = "0.1.51"}
@@ -27,7 +27,7 @@ chrono = "0.4.22"
2727
getrandom = { version = "0.3.0", features = [] }
2828
gloo-utils = { version = "0.1.5", features = ["serde"] }
2929
js-sys = "0.3.60"
30-
namada_sdk = { git = "https://github.com/anoma/namada", rev="8585ffd3444d6f6e4a6cfc6a779281b75b1efe78", default-features = false }
30+
namada_sdk = { git = "https://github.com/anoma/namada", rev="c7c04353b285c1437c9351501b702376db437072", default-features = false }
3131
rand = {version = "0.8.5"}
3232
rayon = { version = "1.8", optional = true }
3333
rexie = "0.5"

packages/shared/lib/src/sdk/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -740,14 +740,16 @@ impl Sdk {
740740
wrapper_tx_msg: &[u8],
741741
) -> Result<JsValue, JsError> {
742742
let (args, bparams) = args::osmosis_swap_tx_args(osmosis_swap_msg, wrapper_tx_msg)?;
743+
744+
let _ = &self.namada.shielded_mut().await.load().await?;
743745
let tx = args.into_ibc_transfer(&self.namada).await?;
746+
744747
let bparams = if let Some(bparams) = bparams {
745748
BuildParams::StoredBuildParams(bparams)
746749
} else {
747750
generate_rng_build_params()
748751
};
749752

750-
let _ = &self.namada.shielded_mut().await.load().await?;
751753

752754
let xfvks = match tx.source {
753755
TransferSource::Address(_) => vec![],

packages/shared/lib/src/sdk/tx.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::str::FromStr;
33

44
use gloo_utils::format::JsValueSerdeExt;
55
use namada_sdk::borsh::{self, BorshDeserialize, BorshSerialize};
6+
use namada_sdk::collections::hash_set::IndexSet;
67
use namada_sdk::masp_primitives::transaction::components::sapling::builder::StoredBuildParams;
78
use namada_sdk::masp_primitives::transaction::components::sapling::fees::{InputView, OutputView};
89
use namada_sdk::masp_primitives::zip32::ExtendedFullViewingKey;
@@ -99,10 +100,10 @@ impl SigningData {
99100
None => None,
100101
};
101102

102-
let mut public_keys: Vec<PublicKey> = vec![];
103+
let mut public_keys = IndexSet::new();
103104
for pk in self.public_keys.clone() {
104105
let pk = PublicKey::from_str(&pk)?;
105-
public_keys.push(pk);
106+
public_keys.insert(pk);
106107
}
107108

108109
let fee_payer = PublicKey::from_str(&self.fee_payer)?;

0 commit comments

Comments
 (0)