1
1
import {
2
2
addSignatures ,
3
+ ChainId ,
3
4
createTransaction ,
4
5
IPactCommand ,
5
6
IPartialPactCommand ,
@@ -13,7 +14,6 @@ import {
13
14
ITransaction ,
14
15
transactionRepository ,
15
16
} from '@/modules/transaction/transaction.repository' ;
16
- import * as transactionService from '@/modules/transaction/transaction.service' ;
17
17
import { useWallet } from '@/modules/wallet/wallet.hook' ;
18
18
import { normalizeTx } from '@/utils/normalizeSigs' ;
19
19
import {
@@ -33,6 +33,7 @@ import {
33
33
Text ,
34
34
} from '@kadena/kode-ui' ;
35
35
import { SideBarBreadcrumbsItem } from '@kadena/kode-ui/patterns' ;
36
+ import { PactNumber } from '@kadena/pactjs' ;
36
37
import { execCodeParser } from '@kadena/pactjs-generator' ;
37
38
import classNames from 'classnames' ;
38
39
import yaml from 'js-yaml' ;
@@ -157,20 +158,61 @@ export function SignatureBuilder() {
157
158
unsignedTx . hash ,
158
159
) ;
159
160
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
+
160
202
if ( tx ) {
161
- if ( unsignedTx . sigs && unsignedTx . sigs . length > 0 ) {
203
+ if ( txWithMetaData . sigs && txWithMetaData . sigs . length > 0 ) {
162
204
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 < {
165
207
sig : string ;
166
208
pubKey ?: string ;
167
209
} > ) ,
168
210
) ;
169
211
await transactionRepository . updateTransaction ( {
170
- ...tx ,
212
+ ...txWithMetaData ,
171
213
sigs : updatedTx . sigs ,
172
214
status :
173
- tx . status === 'initiated' && isSignedTransaction ( updatedTx )
215
+ tx . status === 'initiated' && isSignedTransaction ( txWithMetaData )
174
216
? 'signed'
175
217
: tx . status ,
176
218
} as ITransaction ) ;
@@ -179,13 +221,18 @@ export function SignatureBuilder() {
179
221
return ;
180
222
}
181
223
182
- const newTx = await transactionService . addTransaction ( {
183
- transaction : unsignedTx ,
224
+ const dbTx : ITransaction = {
225
+ ...txWithMetaData ,
226
+ uuid : crypto . randomUUID ( ) ,
184
227
profileId : profile . uuid ,
185
228
networkUUID : networkUUID ,
229
+ status : isSignedTransaction ( txWithMetaData ) ? 'signed' : 'initiated' ,
186
230
groupId,
187
- } ) ;
188
- navigate ( `/transaction/${ newTx . uuid } ` ) ;
231
+ } ;
232
+ console . log ( 'dbTx' , dbTx ) ;
233
+ await transactionRepository . addTransaction ( dbTx ) ;
234
+
235
+ navigate ( `/transaction/${ dbTx . uuid } ` ) ;
189
236
} ;
190
237
191
238
return (
0 commit comments