|
1 | | -import { cairo, Contract, hash, num, addAddressPadding, ProviderOrAccount, RpcProvider, type Call } from 'starknet' |
| 1 | +import { cairo, CallData, Contract, hash, num, addAddressPadding, ProviderOrAccount, RpcProvider, type Call, byteArray } from 'starknet' |
2 | 2 | import { |
3 | 3 | UserLockParams, |
4 | 4 | LockParams, |
@@ -44,31 +44,34 @@ export class StarknetHTLCClient extends HTLCClient { |
44 | 44 | const approveCall: Call = erc20.populate("approve", [params.atomicContract, cairo.uint256(parsedAmount)]) |
45 | 45 |
|
46 | 46 | // Build user_lock call |
47 | | - const htlcContract = this.createContract(params.atomicContract, signer.account) |
48 | | - const userLockCall: Call = htlcContract.populate('user_lock', [ |
49 | | - { |
50 | | - hashlock: cairo.uint256(BigInt(params.hashlock)), |
51 | | - amount: cairo.uint256(parsedAmount), |
52 | | - reward_amount: cairo.uint256(params.rewardAmount ? BigInt(params.rewardAmount) : 0n), |
53 | | - timelock_delta: params.timelockDelta ?? 150, |
54 | | - reward_timelock_delta: params.rewardTimelockDelta ?? 0, |
55 | | - quote_expiry: params.quoteExpiry, |
56 | | - sender: params.sourceAddress, |
57 | | - recipient: params.srcLpAddress, |
58 | | - token: tokenAddress, |
59 | | - reward_token: params.rewardToken ?? '', |
60 | | - reward_recipient: params.rewardRecipient ?? '', |
61 | | - src_chain: params.sourceChain || '', |
62 | | - }, |
63 | | - { |
64 | | - dst_chain: params.destinationChain, |
65 | | - dst_address: params.destinationAddress, |
66 | | - dst_amount: cairo.uint256(BigInt(params.destinationAmount)), |
67 | | - dst_token: params.destinationAsset, |
68 | | - }, |
69 | | - String(params.nonce), // userData — nonce timestamp for recovery |
70 | | - params.solverData || '', |
71 | | - ]) |
| 47 | + const userLockCall: Call = { |
| 48 | + contractAddress: params.atomicContract, |
| 49 | + entrypoint: 'user_lock', |
| 50 | + calldata: CallData.compile([ |
| 51 | + { |
| 52 | + hashlock: cairo.uint256(BigInt(params.hashlock)), |
| 53 | + amount: cairo.uint256(parsedAmount), |
| 54 | + reward_amount: cairo.uint256(params.rewardAmount ? BigInt(params.rewardAmount) : 0n), |
| 55 | + timelock_delta: params.timelockDelta ?? 150, |
| 56 | + reward_timelock_delta: params.rewardTimelockDelta ?? 0, |
| 57 | + quote_expiry: params.quoteExpiry, |
| 58 | + sender: params.sourceAddress, |
| 59 | + recipient: params.srcLpAddress, |
| 60 | + token: tokenAddress, |
| 61 | + reward_token: byteArray.byteArrayFromString(params.rewardToken ?? ''), |
| 62 | + reward_recipient: byteArray.byteArrayFromString(params.rewardRecipient ?? ''), |
| 63 | + src_chain: byteArray.byteArrayFromString(params.sourceChain || ''), |
| 64 | + }, |
| 65 | + { |
| 66 | + dst_chain: byteArray.byteArrayFromString(params.destinationChain), |
| 67 | + dst_address: byteArray.byteArrayFromString(params.destinationAddress), |
| 68 | + dst_amount: cairo.uint256(BigInt(params.destinationAmount)), |
| 69 | + dst_token: byteArray.byteArrayFromString(params.destinationAsset), |
| 70 | + }, |
| 71 | + byteArray.byteArrayFromString(String(params.nonce)), // userData — nonce timestamp for recovery |
| 72 | + byteArray.byteArrayFromString(params.solverData || ''), |
| 73 | + ]), |
| 74 | + } |
72 | 75 |
|
73 | 76 | try { |
74 | 77 | const { transaction_hash } = await signer.account.execute([approveCall, userLockCall]) |
|
0 commit comments