Skip to content

Commit a1cb27a

Browse files
fix: disposable gas payer timeout & ibc shielding with multicore (#1593)
* fix: increase disposable gas payer timeout * feat: ibc shielding in web worker
1 parent 7ddaaaa commit a1cb27a

File tree

7 files changed

+917
-354
lines changed

7 files changed

+917
-354
lines changed

apps/extension/src/storage/LocalStorage.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ export class LocalStorage extends ExtStorage {
148148
data,
149149
O.map((data) => {
150150
const newData = Object.entries(data).reduce((acc, [key, value]) => {
151-
// We clear the disposable signers after 2 minutes
152-
if (currentTime - value.timestamp < 120000) {
151+
// We clear the disposable signers after 60 minutes
152+
if (currentTime - value.timestamp < 3600000) {
153153
acc[key] = value;
154154
}
155155

apps/namadillo/src/atoms/integrations/services.ts

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@ import {
99
StargateClient,
1010
StdFee,
1111
} from "@cosmjs/stargate";
12+
import * as Comlink from "comlink";
1213
import { TxRaw } from "cosmjs-types/cosmos/tx/v1beta1/tx";
1314

1415
import { sanitizeUrl } from "@namada/utils";
1516
import { getIndexerApi } from "atoms/api";
17+
import { chainParametersAtom } from "atoms/chain";
18+
import { rpcUrlAtom } from "atoms/settings";
1619
import { queryForAck, queryForIbcTimeout } from "atoms/transactions";
1720
import BigNumber from "bignumber.js";
1821
import { getDefaultStore } from "jotai";
@@ -27,6 +30,9 @@ import {
2730
} from "types";
2831
import { getKeplrWallet } from "utils/ibc";
2932
import { getSdkInstance } from "utils/sdk";
33+
import { GenerateIbcShieldingMemo } from "workers/MaspTxMessages";
34+
import { Worker as MaspTxWorkerApi } from "workers/MaspTxWorker";
35+
import MaspTxWorker from "workers/MaspTxWorker?worker";
3036
import { rpcByChainAtom } from "./atoms";
3137
import {
3238
getChainRegistryIbcFilePath,
@@ -61,13 +67,31 @@ export const getShieldedArgs = async (
6167
destinationChannelId: string
6268
): Promise<{ receiver: string; memo: string }> => {
6369
const sdk = await getSdkInstance();
70+
const store = getDefaultStore();
71+
const rpcUrl = store.get(rpcUrlAtom);
72+
const chain = store.get(chainParametersAtom);
6473

65-
const memo = await sdk.tx.generateIbcShieldingMemo(
66-
target,
67-
token,
68-
amount,
69-
destinationChannelId
70-
);
74+
if (!chain.isSuccess) throw "Chain not loaded";
75+
76+
const worker = new MaspTxWorker();
77+
const workerLink = Comlink.wrap<MaspTxWorkerApi>(worker);
78+
await workerLink.init({
79+
type: "init",
80+
payload: { rpcUrl, token: sdk.nativeToken, maspIndexerUrl: "" },
81+
});
82+
83+
const msg: GenerateIbcShieldingMemo = {
84+
type: "generate-ibc-shielding-memo",
85+
payload: {
86+
target,
87+
token,
88+
amount,
89+
destinationChannelId,
90+
chainId: chain.data.chainId,
91+
},
92+
};
93+
94+
const memo = (await workerLink.generateIbcShieldingMemo(msg)).payload;
7195

7296
return {
7397
receiver: sdk.masp.maspAddress(),

apps/namadillo/src/workers/MaspTxMessages.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
TxResponseMsgValue,
66
UnshieldingTransferMsgValue,
77
} from "@namada/types";
8+
import BigNumber from "bignumber.js";
89
import { EncodedTxData, TransactionPair } from "lib/query";
910
import { ChainSettings, GasConfig } from "types";
1011
import { WebWorkerMessage } from "./utils";
@@ -61,6 +62,22 @@ export type ShieldedTransferDone = WebWorkerMessage<
6162
EncodedTxData<ShieldedTransferMsgValue>
6263
>;
6364

65+
type GenerateIbcShieldingMemoPayload = {
66+
target: string;
67+
token: string;
68+
amount: BigNumber;
69+
destinationChannelId: string;
70+
chainId: string;
71+
};
72+
export type GenerateIbcShieldingMemo = WebWorkerMessage<
73+
"generate-ibc-shielding-memo",
74+
GenerateIbcShieldingMemoPayload
75+
>;
76+
export type GenerateIbcShieldingMemoDone = WebWorkerMessage<
77+
"generate-ibc-shielding-memo-done",
78+
string
79+
>;
80+
6481
type BroadcastPayload = TransactionPair<unknown>;
6582

6683
export type Broadcast = WebWorkerMessage<"broadcast", BroadcastPayload>;

apps/namadillo/src/workers/MaspTxWorker.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import { buildTx, EncodedTxData } from "lib/query";
1111
import {
1212
Broadcast,
1313
BroadcastDone,
14+
GenerateIbcShieldingMemo,
15+
GenerateIbcShieldingMemoDone,
1416
Init,
1517
InitDone,
1618
Shield,
@@ -61,6 +63,18 @@ export class Worker {
6163
};
6264
}
6365

66+
async generateIbcShieldingMemo(
67+
m: GenerateIbcShieldingMemo
68+
): Promise<GenerateIbcShieldingMemoDone> {
69+
if (!this.sdk) {
70+
throw new Error("SDK is not initialized");
71+
}
72+
return {
73+
type: "generate-ibc-shielding-memo-done",
74+
payload: await generateIbcShieldingMemo(this.sdk, m.payload),
75+
};
76+
}
77+
6478
async broadcast(m: Broadcast): Promise<BroadcastDone> {
6579
if (!this.sdk) {
6680
throw new Error("SDK is not initialized");
@@ -142,6 +156,23 @@ async function shieldedTransfer(
142156
return encodedTxData;
143157
}
144158

159+
async function generateIbcShieldingMemo(
160+
sdk: Sdk,
161+
payload: GenerateIbcShieldingMemo["payload"]
162+
): Promise<string> {
163+
const { target, token, amount, destinationChannelId, chainId } = payload;
164+
await sdk.masp.loadMaspParams("", chainId);
165+
166+
const memo = await sdk.tx.generateIbcShieldingMemo(
167+
target,
168+
token,
169+
amount,
170+
destinationChannelId
171+
);
172+
173+
return memo;
174+
}
175+
145176
// TODO: We will probably move this to the separate worker
146177
async function broadcast(
147178
sdk: Sdk,
@@ -178,6 +209,9 @@ export const registerTransferHandlers = (): void => {
178209
registerBNTransferHandler<ShieldedTransfer>("shielded-transfer");
179210
registerBNTransferHandler<UnshieldDone>("unshield-done");
180211
registerBNTransferHandler<Unshield>("unshield");
212+
registerBNTransferHandler<GenerateIbcShieldingMemo>(
213+
"generate-ibc-shielding-memo"
214+
);
181215
registerBNTransferHandler<Broadcast>("broadcast");
182216
};
183217

0 commit comments

Comments
 (0)