Skip to content

Commit d276158

Browse files
committed
fix(dw): add auto continuation
1 parent 51d94af commit d276158

File tree

1 file changed

+57
-10
lines changed

1 file changed

+57
-10
lines changed

packages/apps/dev-wallet/src/pages/signature-builder/signature-builder.tsx

+57-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
addSignatures,
3+
ChainId,
34
createTransaction,
45
IPactCommand,
56
IPartialPactCommand,
@@ -13,7 +14,6 @@ import {
1314
ITransaction,
1415
transactionRepository,
1516
} from '@/modules/transaction/transaction.repository';
16-
import * as transactionService from '@/modules/transaction/transaction.service';
1717
import { useWallet } from '@/modules/wallet/wallet.hook';
1818
import { normalizeTx } from '@/utils/normalizeSigs';
1919
import {
@@ -33,6 +33,7 @@ import {
3333
Text,
3434
} from '@kadena/kode-ui';
3535
import { SideBarBreadcrumbsItem } from '@kadena/kode-ui/patterns';
36+
import { PactNumber } from '@kadena/pactjs';
3637
import { execCodeParser } from '@kadena/pactjs-generator';
3738
import classNames from 'classnames';
3839
import yaml from 'js-yaml';
@@ -157,20 +158,61 @@ export function SignatureBuilder() {
157158
unsignedTx.hash,
158159
);
159160

161+
const parsedCode =
162+
'exec' in command.payload
163+
? execCodeParser(command.payload.exec.code)
164+
: undefined;
165+
166+
const continuationData = {
167+
autoContinue: false,
168+
target: '' as ChainId,
169+
source: '',
170+
amount: NaN,
171+
};
172+
173+
if (parsedCode && parsedCode[0]) {
174+
const code = parsedCode[0];
175+
if (code.function.name === 'transfer-crosschain') {
176+
const targetObject = code.args[3] as { string: string };
177+
continuationData.autoContinue = true;
178+
continuationData.target = targetObject.string as ChainId;
179+
continuationData.source = command.meta.chainId;
180+
continuationData.amount = new PactNumber(
181+
code.args[4] as unknown as { int: string } | { decimal: string },
182+
).toNumber();
183+
}
184+
}
185+
186+
const txWithMetaData = {
187+
...unsignedTx,
188+
...(continuationData.autoContinue
189+
? {
190+
continuation: {
191+
autoContinue: true,
192+
crossChainId: continuationData.target,
193+
},
194+
purpose: {
195+
type: 'cross-chain',
196+
data: continuationData,
197+
},
198+
}
199+
: {}),
200+
};
201+
160202
if (tx) {
161-
if (unsignedTx.sigs && unsignedTx.sigs.length > 0) {
203+
if (txWithMetaData.sigs && txWithMetaData.sigs.length > 0) {
162204
const updatedTx = addSignatures(
163-
tx,
164-
...(unsignedTx.sigs.filter((item) => item && item.sig) as Array<{
205+
txWithMetaData,
206+
...(txWithMetaData.sigs.filter((item) => item && item.sig) as Array<{
165207
sig: string;
166208
pubKey?: string;
167209
}>),
168210
);
169211
await transactionRepository.updateTransaction({
170-
...tx,
212+
...txWithMetaData,
171213
sigs: updatedTx.sigs,
172214
status:
173-
tx.status === 'initiated' && isSignedTransaction(updatedTx)
215+
tx.status === 'initiated' && isSignedTransaction(txWithMetaData)
174216
? 'signed'
175217
: tx.status,
176218
} as ITransaction);
@@ -179,13 +221,18 @@ export function SignatureBuilder() {
179221
return;
180222
}
181223

182-
const newTx = await transactionService.addTransaction({
183-
transaction: unsignedTx,
224+
const dbTx: ITransaction = {
225+
...txWithMetaData,
226+
uuid: crypto.randomUUID(),
184227
profileId: profile.uuid,
185228
networkUUID: networkUUID,
229+
status: isSignedTransaction(txWithMetaData) ? 'signed' : 'initiated',
186230
groupId,
187-
});
188-
navigate(`/transaction/${newTx.uuid}`);
231+
};
232+
console.log('dbTx', dbTx);
233+
await transactionRepository.addTransaction(dbTx);
234+
235+
navigate(`/transaction/${dbTx.uuid}`);
189236
};
190237

191238
return (

0 commit comments

Comments
 (0)