@atomiqlabs/chain-starknet 4.0.0-dev.12 → 4.0.0-dev.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/LICENSE +201 -201
  2. package/dist/index.d.ts +38 -38
  3. package/dist/index.js +54 -54
  4. package/dist/starknet/StarknetChainType.d.ts +13 -13
  5. package/dist/starknet/StarknetChainType.js +2 -2
  6. package/dist/starknet/StarknetInitializer.d.ts +27 -27
  7. package/dist/starknet/StarknetInitializer.js +69 -69
  8. package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
  9. package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
  10. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +186 -186
  11. package/dist/starknet/btcrelay/StarknetBtcRelay.js +379 -379
  12. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +31 -31
  13. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +74 -74
  14. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +51 -51
  15. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +113 -113
  16. package/dist/starknet/chain/StarknetAction.d.ts +19 -19
  17. package/dist/starknet/chain/StarknetAction.js +73 -73
  18. package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -52
  19. package/dist/starknet/chain/StarknetChainInterface.js +91 -91
  20. package/dist/starknet/chain/StarknetModule.d.ts +14 -14
  21. package/dist/starknet/chain/StarknetModule.js +13 -13
  22. package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
  23. package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
  24. package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
  25. package/dist/starknet/chain/modules/StarknetAccounts.js +24 -24
  26. package/dist/starknet/chain/modules/StarknetAddresses.d.ts +9 -9
  27. package/dist/starknet/chain/modules/StarknetAddresses.js +26 -26
  28. package/dist/starknet/chain/modules/StarknetBlocks.d.ts +20 -20
  29. package/dist/starknet/chain/modules/StarknetBlocks.js +64 -64
  30. package/dist/starknet/chain/modules/StarknetEvents.d.ts +44 -44
  31. package/dist/starknet/chain/modules/StarknetEvents.js +88 -88
  32. package/dist/starknet/chain/modules/StarknetFees.d.ts +77 -77
  33. package/dist/starknet/chain/modules/StarknetFees.js +114 -114
  34. package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
  35. package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
  36. package/dist/starknet/chain/modules/StarknetTokens.d.ts +69 -69
  37. package/dist/starknet/chain/modules/StarknetTokens.js +102 -98
  38. package/dist/starknet/chain/modules/StarknetTransactions.d.ts +93 -93
  39. package/dist/starknet/chain/modules/StarknetTransactions.js +261 -260
  40. package/dist/starknet/contract/StarknetContractBase.d.ts +13 -13
  41. package/dist/starknet/contract/StarknetContractBase.js +20 -16
  42. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
  43. package/dist/starknet/contract/StarknetContractModule.js +11 -11
  44. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +51 -51
  45. package/dist/starknet/contract/modules/StarknetContractEvents.js +97 -97
  46. package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
  47. package/dist/starknet/events/StarknetChainEvents.js +52 -52
  48. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +89 -90
  49. package/dist/starknet/events/StarknetChainEventsBrowser.js +296 -294
  50. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -21
  51. package/dist/starknet/provider/RpcProviderWithRetries.js +32 -32
  52. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
  53. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
  54. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +66 -66
  55. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +382 -382
  56. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -49
  57. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +145 -145
  58. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +25 -25
  59. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +72 -72
  60. package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
  61. package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
  62. package/dist/starknet/swaps/StarknetSwapContract.d.ts +191 -191
  63. package/dist/starknet/swaps/StarknetSwapContract.js +424 -424
  64. package/dist/starknet/swaps/StarknetSwapData.d.ts +74 -74
  65. package/dist/starknet/swaps/StarknetSwapData.js +325 -325
  66. package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
  67. package/dist/starknet/swaps/StarknetSwapModule.js +11 -11
  68. package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
  69. package/dist/starknet/swaps/handlers/IHandler.js +2 -2
  70. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
  71. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
  72. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
  73. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
  74. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
  75. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
  76. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
  77. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
  78. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
  79. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
  80. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +45 -45
  81. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +52 -52
  82. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
  83. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
  84. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +69 -69
  85. package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
  86. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +53 -53
  87. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +100 -100
  88. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -87
  89. package/dist/starknet/swaps/modules/StarknetSwapInit.js +235 -225
  90. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +62 -62
  91. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +128 -128
  92. package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +7 -7
  93. package/dist/starknet/wallet/StarknetKeypairWallet.js +35 -30
  94. package/dist/starknet/wallet/StarknetSigner.d.ts +12 -12
  95. package/dist/starknet/wallet/StarknetSigner.js +47 -46
  96. package/dist/utils/Utils.d.ts +37 -37
  97. package/dist/utils/Utils.js +260 -261
  98. package/package.json +43 -37
  99. package/src/index.ts +47 -47
  100. package/src/starknet/StarknetChainType.ts +28 -28
  101. package/src/starknet/StarknetInitializer.ts +108 -108
  102. package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -338
  103. package/src/starknet/btcrelay/StarknetBtcRelay.ts +494 -494
  104. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +100 -100
  105. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +141 -141
  106. package/src/starknet/chain/StarknetAction.ts +85 -85
  107. package/src/starknet/chain/StarknetChainInterface.ts +149 -149
  108. package/src/starknet/chain/StarknetModule.ts +19 -19
  109. package/src/starknet/chain/modules/ERC20Abi.ts +1029 -1029
  110. package/src/starknet/chain/modules/StarknetAccounts.ts +25 -25
  111. package/src/starknet/chain/modules/StarknetAddresses.ts +22 -22
  112. package/src/starknet/chain/modules/StarknetBlocks.ts +75 -74
  113. package/src/starknet/chain/modules/StarknetEvents.ts +104 -104
  114. package/src/starknet/chain/modules/StarknetFees.ts +154 -154
  115. package/src/starknet/chain/modules/StarknetSignatures.ts +91 -91
  116. package/src/starknet/chain/modules/StarknetTokens.ts +120 -116
  117. package/src/starknet/chain/modules/StarknetTransactions.ts +285 -283
  118. package/src/starknet/contract/StarknetContractBase.ts +30 -26
  119. package/src/starknet/contract/StarknetContractModule.ts +16 -16
  120. package/src/starknet/contract/modules/StarknetContractEvents.ts +134 -134
  121. package/src/starknet/events/StarknetChainEvents.ts +67 -67
  122. package/src/starknet/events/StarknetChainEventsBrowser.ts +411 -411
  123. package/src/starknet/provider/RpcProviderWithRetries.ts +43 -43
  124. package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -656
  125. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +483 -483
  126. package/src/starknet/spv_swap/StarknetSpvVaultData.ts +195 -195
  127. package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +79 -79
  128. package/src/starknet/swaps/EscrowManagerAbi.ts +582 -582
  129. package/src/starknet/swaps/StarknetSwapContract.ts +647 -647
  130. package/src/starknet/swaps/StarknetSwapData.ts +455 -455
  131. package/src/starknet/swaps/StarknetSwapModule.ts +17 -17
  132. package/src/starknet/swaps/handlers/IHandler.ts +20 -20
  133. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +23 -23
  134. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +53 -53
  135. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +73 -73
  136. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +67 -67
  137. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +50 -50
  138. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +102 -102
  139. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +38 -38
  140. package/src/starknet/swaps/modules/StarknetLpVault.ts +147 -147
  141. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +141 -141
  142. package/src/starknet/swaps/modules/StarknetSwapInit.ts +300 -287
  143. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +196 -196
  144. package/src/starknet/wallet/StarknetKeypairWallet.ts +44 -39
  145. package/src/starknet/wallet/StarknetSigner.ts +55 -55
  146. package/src/utils/Utils.ts +251 -252
@@ -1,102 +1,102 @@
1
- import {IClaimHandler} from "../ClaimHandlers";
2
- import {StarknetSwapData} from "../../../StarknetSwapData";
3
- import {ChainSwapType, RelaySynchronizer} from "@atomiqlabs/base";
4
- import {BigNumberish, hash} from "starknet";
5
- import {StarknetBtcStoredHeader} from "../../../../btcrelay/headers/StarknetBtcStoredHeader";
6
- import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
7
- import {StarknetBtcRelay} from "../../../../btcrelay/StarknetBtcRelay";
8
- import {bufferToU32Array, getLogger, u32ArrayToBuffer} from "../../../../../utils/Utils";
9
- import {StarknetGas} from "../../../../chain/modules/StarknetFees";
10
-
11
- export type BitcoinCommitmentData = {
12
- btcRelay: StarknetBtcRelay<any>,
13
- confirmations: number
14
- }
15
-
16
- export type BitcoinWitnessData = {
17
- tx: { blockhash: string, confirmations: number, txid: string, hex: string, height: number },
18
- requiredConfirmations: number,
19
- commitedHeader?: StarknetBtcStoredHeader,
20
- btcRelay?: StarknetBtcRelay<any>,
21
- synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>
22
- };
23
-
24
- const logger = getLogger("IBitcoinClaimHandler: ");
25
-
26
- export abstract class IBitcoinClaimHandler<C, W extends BitcoinWitnessData> implements IClaimHandler<C & BitcoinCommitmentData, W> {
27
-
28
- public readonly address: string;
29
-
30
- constructor(address: string) {
31
- this.address = address;
32
- }
33
-
34
- public static readonly address = "";
35
- public static readonly type: ChainSwapType = ChainSwapType.CHAIN_TXID;
36
- public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 20_000 * 40_000, l1Gas: 0};
37
-
38
- protected serializeCommitment(data: BitcoinCommitmentData): BigNumberish[] {
39
- return [
40
- data.confirmations,
41
- data.btcRelay.contract.address
42
- ]
43
- }
44
-
45
- getCommitment(data: C & BitcoinCommitmentData): BigNumberish {
46
- return hash.computePoseidonHashOnElements(this.serializeCommitment(data));
47
- }
48
-
49
- protected async _getWitness(
50
- signer: string,
51
- swapData: StarknetSwapData,
52
- {tx, btcRelay, commitedHeader, synchronizer, requiredConfirmations}: BitcoinWitnessData,
53
- commitment: C,
54
- feeRate?: string
55
- ): Promise<{
56
- initialTxns: StarknetTx[];
57
- witness: BigNumberish[]
58
- }> {
59
- const serializedData: BigNumberish[] = this.serializeCommitment({
60
- ...commitment,
61
- btcRelay,
62
- confirmations: requiredConfirmations
63
- });
64
- const commitmentHash = hash.computePoseidonHashOnElements(serializedData);
65
-
66
- if(!swapData.isClaimData(commitmentHash)) throw new Error("Invalid commit data");
67
-
68
- const merkleProof = await btcRelay.bitcoinRpc.getMerkleProof(tx.txid, tx.blockhash);
69
- logger.debug("getWitness(): merkle proof computed: ", merkleProof);
70
-
71
- const txs: StarknetTx[] = [];
72
- if(commitedHeader==null) {
73
- const headers = await StarknetBtcRelay.getCommitedHeadersAndSynchronize(
74
- signer, btcRelay,
75
- [{blockheight: tx.height, requiredConfirmations, blockhash: tx.blockhash}],
76
- txs, synchronizer, feeRate
77
- );
78
- if(headers==null) throw new Error("Cannot fetch committed header!");
79
- commitedHeader = headers[tx.blockhash];
80
- }
81
-
82
- serializedData.push(...commitedHeader.serialize());
83
- serializedData.push(merkleProof.merkle.length, ...merkleProof.merkle.map(bufferToU32Array).flat());
84
- serializedData.push(merkleProof.pos);
85
-
86
- return {initialTxns: txs, witness: serializedData};
87
- }
88
-
89
- abstract getWitness(signer: string, data: StarknetSwapData, witnessData: W, feeRate?: string): Promise<{
90
- initialTxns: StarknetTx[];
91
- witness: BigNumberish[]
92
- }>;
93
-
94
- abstract getGas(data: StarknetSwapData): StarknetGas;
95
-
96
- abstract getType(): ChainSwapType;
97
-
98
- parseWitnessResult(result: BigNumberish[]): string {
99
- return u32ArrayToBuffer(result).toString("hex");
100
- }
101
-
102
- }
1
+ import {IClaimHandler} from "../ClaimHandlers";
2
+ import {StarknetSwapData} from "../../../StarknetSwapData";
3
+ import {ChainSwapType, RelaySynchronizer} from "@atomiqlabs/base";
4
+ import {BigNumberish, hash} from "starknet";
5
+ import {StarknetBtcStoredHeader} from "../../../../btcrelay/headers/StarknetBtcStoredHeader";
6
+ import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
7
+ import {StarknetBtcRelay} from "../../../../btcrelay/StarknetBtcRelay";
8
+ import {bufferToU32Array, getLogger, u32ArrayToBuffer} from "../../../../../utils/Utils";
9
+ import {StarknetGas} from "../../../../chain/modules/StarknetFees";
10
+
11
+ export type BitcoinCommitmentData = {
12
+ btcRelay: StarknetBtcRelay<any>,
13
+ confirmations: number
14
+ }
15
+
16
+ export type BitcoinWitnessData = {
17
+ tx: { blockhash: string, confirmations: number, txid: string, hex: string, height: number },
18
+ requiredConfirmations: number,
19
+ commitedHeader?: StarknetBtcStoredHeader,
20
+ btcRelay?: StarknetBtcRelay<any>,
21
+ synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>
22
+ };
23
+
24
+ const logger = getLogger("IBitcoinClaimHandler: ");
25
+
26
+ export abstract class IBitcoinClaimHandler<C, W extends BitcoinWitnessData> implements IClaimHandler<C & BitcoinCommitmentData, W> {
27
+
28
+ public readonly address: string;
29
+
30
+ constructor(address: string) {
31
+ this.address = address;
32
+ }
33
+
34
+ public static readonly address = "";
35
+ public static readonly type: ChainSwapType = ChainSwapType.CHAIN_TXID;
36
+ public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 20_000 * 40_000, l1Gas: 0};
37
+
38
+ protected serializeCommitment(data: BitcoinCommitmentData): BigNumberish[] {
39
+ return [
40
+ data.confirmations,
41
+ data.btcRelay.contract.address
42
+ ]
43
+ }
44
+
45
+ getCommitment(data: C & BitcoinCommitmentData): BigNumberish {
46
+ return hash.computePoseidonHashOnElements(this.serializeCommitment(data));
47
+ }
48
+
49
+ protected async _getWitness(
50
+ signer: string,
51
+ swapData: StarknetSwapData,
52
+ {tx, btcRelay, commitedHeader, synchronizer, requiredConfirmations}: BitcoinWitnessData,
53
+ commitment: C,
54
+ feeRate?: string
55
+ ): Promise<{
56
+ initialTxns: StarknetTx[];
57
+ witness: BigNumberish[]
58
+ }> {
59
+ const serializedData: BigNumberish[] = this.serializeCommitment({
60
+ ...commitment,
61
+ btcRelay,
62
+ confirmations: requiredConfirmations
63
+ });
64
+ const commitmentHash = hash.computePoseidonHashOnElements(serializedData);
65
+
66
+ if(!swapData.isClaimData(commitmentHash)) throw new Error("Invalid commit data");
67
+
68
+ const merkleProof = await btcRelay.bitcoinRpc.getMerkleProof(tx.txid, tx.blockhash);
69
+ logger.debug("getWitness(): merkle proof computed: ", merkleProof);
70
+
71
+ const txs: StarknetTx[] = [];
72
+ if(commitedHeader==null) {
73
+ const headers = await StarknetBtcRelay.getCommitedHeadersAndSynchronize(
74
+ signer, btcRelay,
75
+ [{blockheight: tx.height, requiredConfirmations, blockhash: tx.blockhash}],
76
+ txs, synchronizer, feeRate
77
+ );
78
+ if(headers==null) throw new Error("Cannot fetch committed header!");
79
+ commitedHeader = headers[tx.blockhash];
80
+ }
81
+
82
+ serializedData.push(...commitedHeader.serialize());
83
+ serializedData.push(merkleProof.merkle.length, ...merkleProof.merkle.map(bufferToU32Array).flat());
84
+ serializedData.push(merkleProof.pos);
85
+
86
+ return {initialTxns: txs, witness: serializedData};
87
+ }
88
+
89
+ abstract getWitness(signer: string, data: StarknetSwapData, witnessData: W, feeRate?: string): Promise<{
90
+ initialTxns: StarknetTx[];
91
+ witness: BigNumberish[]
92
+ }>;
93
+
94
+ abstract getGas(data: StarknetSwapData): StarknetGas;
95
+
96
+ abstract getType(): ChainSwapType;
97
+
98
+ parseWitnessResult(result: BigNumberish[]): string {
99
+ return u32ArrayToBuffer(result).toString("hex");
100
+ }
101
+
102
+ }
@@ -1,39 +1,39 @@
1
- import {StarknetTx} from "../../../chain/modules/StarknetTransactions";
2
- import {StarknetSwapData} from "../../StarknetSwapData";
3
- import {bigNumberishToBuffer} from "../../../../utils/Utils";
4
- import {BigNumberish} from "starknet";
5
- import {IHandler} from "../IHandler";
6
- import {StarknetGas} from "../../../chain/modules/StarknetFees";
7
-
8
- export class TimelockRefundHandler implements IHandler<bigint, never> {
9
-
10
- public readonly address: string;
11
- public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 4_000_000, l1Gas: 0};
12
-
13
- constructor(address: string) {
14
- this.address = address;
15
- }
16
-
17
- public getCommitment(data: bigint): BigNumberish {
18
- return data;
19
- }
20
-
21
- public getWitness(signer: string, data: StarknetSwapData): Promise<{
22
- initialTxns: StarknetTx[],
23
- witness: BigNumberish[]
24
- }> {
25
- const expiry = TimelockRefundHandler.getExpiry(data);
26
- const currentTimestamp = BigInt(Math.floor(Date.now()/1000));
27
- if(expiry > currentTimestamp) throw new Error("Not expired yet!");
28
- return Promise.resolve({initialTxns: [], witness: []});
29
- }
30
-
31
- getGas(): StarknetGas {
32
- return TimelockRefundHandler.gas;
33
- }
34
-
35
- public static getExpiry(data: StarknetSwapData): bigint {
36
- return bigNumberishToBuffer(data.refundData, 32).readBigUInt64BE(24).valueOf();
37
- }
38
-
1
+ import {StarknetTx} from "../../../chain/modules/StarknetTransactions";
2
+ import {StarknetSwapData} from "../../StarknetSwapData";
3
+ import {bigNumberishToBuffer} from "../../../../utils/Utils";
4
+ import {BigNumberish} from "starknet";
5
+ import {IHandler} from "../IHandler";
6
+ import {StarknetGas} from "../../../chain/modules/StarknetFees";
7
+
8
+ export class TimelockRefundHandler implements IHandler<bigint, never> {
9
+
10
+ public readonly address: string;
11
+ public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 4_000_000, l1Gas: 0};
12
+
13
+ constructor(address: string) {
14
+ this.address = address;
15
+ }
16
+
17
+ public getCommitment(data: bigint): BigNumberish {
18
+ return data;
19
+ }
20
+
21
+ public getWitness(signer: string, data: StarknetSwapData): Promise<{
22
+ initialTxns: StarknetTx[],
23
+ witness: BigNumberish[]
24
+ }> {
25
+ const expiry = TimelockRefundHandler.getExpiry(data);
26
+ const currentTimestamp = BigInt(Math.floor(Date.now()/1000));
27
+ if(expiry > currentTimestamp) throw new Error("Not expired yet!");
28
+ return Promise.resolve({initialTxns: [], witness: []});
29
+ }
30
+
31
+ getGas(): StarknetGas {
32
+ return TimelockRefundHandler.gas;
33
+ }
34
+
35
+ public static getExpiry(data: StarknetSwapData): bigint {
36
+ return bigNumberishToBuffer(data.refundData, 32).readBigUInt64BE(24).valueOf();
37
+ }
38
+
39
39
  }
@@ -1,148 +1,148 @@
1
- import {toBigInt} from "../../../utils/Utils";
2
- import { IntermediaryReputationType } from "@atomiqlabs/base";
3
- import {StarknetSwapModule} from "../StarknetSwapModule";
4
- import {StarknetAction} from "../../chain/StarknetAction";
5
- import {cairo} from "starknet";
6
- import {StarknetTx} from "../../chain/modules/StarknetTransactions";
7
-
8
- export class StarknetLpVault extends StarknetSwapModule {
9
-
10
- private static readonly GasCosts = {
11
- WITHDRAW: {l1DataGas: 500, l2Gas: 3_200_000, l1Gas: 0},
12
- DEPOSIT: {l1: 500, l2Gas: 4_000_000, l1Gas: 0}
13
- };
14
-
15
- /**
16
- * Action for withdrawing funds from the LP vault
17
- *
18
- * @param signer
19
- * @param token
20
- * @param amount
21
- * @constructor
22
- * @private
23
- */
24
- private Withdraw(signer: string, token: string, amount: bigint): StarknetAction {
25
- return new StarknetAction(signer, this.root,
26
- this.swapContract.populateTransaction.withdraw(token, cairo.uint256(amount), signer),
27
- StarknetLpVault.GasCosts.WITHDRAW
28
- );
29
- }
30
-
31
- /**
32
- * Action for depositing funds to the LP vault
33
- *
34
- * @param signer
35
- * @param token
36
- * @param amount
37
- * @constructor
38
- * @private
39
- */
40
- private Deposit(signer: string, token: string, amount: bigint): StarknetAction {
41
- return new StarknetAction(signer, this.root,
42
- this.swapContract.populateTransaction.deposit(token, cairo.uint256(amount)),
43
- StarknetLpVault.GasCosts.WITHDRAW
44
- );
45
- }
46
-
47
- /**
48
- * Returns intermediary's reputation & vault balance for a specific token
49
- *
50
- * @param address
51
- * @param token
52
- */
53
- public async getIntermediaryData(address: string, token: string): Promise<{
54
- balance: bigint,
55
- reputation: IntermediaryReputationType
56
- }> {
57
- const [balance, reputation] = await Promise.all([
58
- this.getIntermediaryBalance(address, token),
59
- this.getIntermediaryReputation(address, token)
60
- ]);
61
-
62
- return {balance, reputation};
63
- }
64
-
65
- /**
66
- * Returns intermediary's reputation for a specific token
67
- *
68
- * @param address
69
- * @param token
70
- */
71
- public async getIntermediaryReputation(address: string, token: string): Promise<IntermediaryReputationType> {
72
- const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => cairo.tuple(address, token, claimHandler));
73
- const rawReputation = await this.provider.callContract(this.swapContract.populateTransaction.get_reputation(filter));
74
- const length = toBigInt(rawReputation.shift());
75
- if(Number(length)!==filter.length) throw new Error("getIntermediaryReputation(): Invalid response length");
76
-
77
- const result: any = {};
78
- Object.keys(this.contract.claimHandlersByAddress).forEach((address) => {
79
- const handler = this.contract.claimHandlersByAddress[address];
80
- result[handler.getType()] = {
81
- successVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
82
- successCount: toBigInt(rawReputation.shift()),
83
- coopCloseVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
84
- coopCloseCount: toBigInt(rawReputation.shift()),
85
- failVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
86
- failCount: toBigInt(rawReputation.shift()),
87
- };
88
- });
89
- return result as any;
90
- }
91
-
92
- /**
93
- * Returns the balance of the token an intermediary has in his LP vault
94
- *
95
- * @param address
96
- * @param token
97
- */
98
- public async getIntermediaryBalance(address: string, token: string): Promise<bigint> {
99
- const balance = toBigInt((await this.swapContract.get_balance([cairo.tuple(address, token)]))[0]);
100
-
101
- this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: "+token.toString()+
102
- " address: "+address+" amount: "+(balance==null ? "null" : balance.toString()));
103
-
104
- return balance;
105
- }
106
-
107
- /**
108
- * Creates transactions for withdrawing funds from the LP vault, creates ATA if it doesn't exist and unwraps
109
- * WSOL to SOL if required
110
- *
111
- * @param signer
112
- * @param token
113
- * @param amount
114
- * @param feeRate
115
- */
116
- public async txsWithdraw(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
117
- const action = await this.Withdraw(signer, token, amount);
118
-
119
- feeRate ??= await this.root.Fees.getFeeRate();
120
-
121
- this.logger.debug("txsWithdraw(): withdraw TX created, token: "+token.toString()+
122
- " amount: "+amount.toString(10));
123
-
124
- return [await action.tx(feeRate)];
125
- }
126
-
127
- /**
128
- * Creates transaction for depositing funds into the LP vault, wraps SOL to WSOL if required
129
- *
130
- * @param signer
131
- * @param token
132
- * @param amount
133
- * @param feeRate
134
- */
135
- public async txsDeposit(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
136
- //Approve first
137
- const action = await this.root.Tokens.Approve(signer, this.swapContract.address, token, amount);
138
- action.add(this.Deposit(signer, token, amount));
139
-
140
- feeRate ??= await this.root.Fees.getFeeRate();
141
-
142
- this.logger.debug("txsDeposit(): deposit TX created, token: "+token.toString()+
143
- " amount: "+amount.toString(10));
144
-
145
- return [await action.tx(feeRate)];
146
- }
147
-
1
+ import {toBigInt} from "../../../utils/Utils";
2
+ import { IntermediaryReputationType } from "@atomiqlabs/base";
3
+ import {StarknetSwapModule} from "../StarknetSwapModule";
4
+ import {StarknetAction} from "../../chain/StarknetAction";
5
+ import {cairo} from "starknet";
6
+ import {StarknetTx} from "../../chain/modules/StarknetTransactions";
7
+
8
+ export class StarknetLpVault extends StarknetSwapModule {
9
+
10
+ private static readonly GasCosts = {
11
+ WITHDRAW: {l1DataGas: 500, l2Gas: 3_200_000, l1Gas: 0},
12
+ DEPOSIT: {l1: 500, l2Gas: 4_000_000, l1Gas: 0}
13
+ };
14
+
15
+ /**
16
+ * Action for withdrawing funds from the LP vault
17
+ *
18
+ * @param signer
19
+ * @param token
20
+ * @param amount
21
+ * @constructor
22
+ * @private
23
+ */
24
+ private Withdraw(signer: string, token: string, amount: bigint): StarknetAction {
25
+ return new StarknetAction(signer, this.root,
26
+ this.swapContract.populateTransaction.withdraw(token, cairo.uint256(amount), signer),
27
+ StarknetLpVault.GasCosts.WITHDRAW
28
+ );
29
+ }
30
+
31
+ /**
32
+ * Action for depositing funds to the LP vault
33
+ *
34
+ * @param signer
35
+ * @param token
36
+ * @param amount
37
+ * @constructor
38
+ * @private
39
+ */
40
+ private Deposit(signer: string, token: string, amount: bigint): StarknetAction {
41
+ return new StarknetAction(signer, this.root,
42
+ this.swapContract.populateTransaction.deposit(token, cairo.uint256(amount)),
43
+ StarknetLpVault.GasCosts.WITHDRAW
44
+ );
45
+ }
46
+
47
+ /**
48
+ * Returns intermediary's reputation & vault balance for a specific token
49
+ *
50
+ * @param address
51
+ * @param token
52
+ */
53
+ public async getIntermediaryData(address: string, token: string): Promise<{
54
+ balance: bigint,
55
+ reputation: IntermediaryReputationType
56
+ }> {
57
+ const [balance, reputation] = await Promise.all([
58
+ this.getIntermediaryBalance(address, token),
59
+ this.getIntermediaryReputation(address, token)
60
+ ]);
61
+
62
+ return {balance, reputation};
63
+ }
64
+
65
+ /**
66
+ * Returns intermediary's reputation for a specific token
67
+ *
68
+ * @param address
69
+ * @param token
70
+ */
71
+ public async getIntermediaryReputation(address: string, token: string): Promise<IntermediaryReputationType> {
72
+ const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => cairo.tuple(address, token, claimHandler));
73
+ const rawReputation = await this.provider.callContract(this.swapContract.populateTransaction.get_reputation(filter));
74
+ const length = toBigInt(rawReputation.shift());
75
+ if(Number(length)!==filter.length) throw new Error("getIntermediaryReputation(): Invalid response length");
76
+
77
+ const result: any = {};
78
+ Object.keys(this.contract.claimHandlersByAddress).forEach((address) => {
79
+ const handler = this.contract.claimHandlersByAddress[address];
80
+ result[handler.getType()] = {
81
+ successVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
82
+ successCount: toBigInt(rawReputation.shift()),
83
+ coopCloseVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
84
+ coopCloseCount: toBigInt(rawReputation.shift()),
85
+ failVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
86
+ failCount: toBigInt(rawReputation.shift()),
87
+ };
88
+ });
89
+ return result as any;
90
+ }
91
+
92
+ /**
93
+ * Returns the balance of the token an intermediary has in his LP vault
94
+ *
95
+ * @param address
96
+ * @param token
97
+ */
98
+ public async getIntermediaryBalance(address: string, token: string): Promise<bigint> {
99
+ const balance = toBigInt((await this.swapContract.get_balance([cairo.tuple(address, token)]))[0]);
100
+
101
+ this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: "+token.toString()+
102
+ " address: "+address+" amount: "+(balance==null ? "null" : balance.toString()));
103
+
104
+ return balance;
105
+ }
106
+
107
+ /**
108
+ * Creates transactions for withdrawing funds from the LP vault, creates ATA if it doesn't exist and unwraps
109
+ * WSOL to SOL if required
110
+ *
111
+ * @param signer
112
+ * @param token
113
+ * @param amount
114
+ * @param feeRate
115
+ */
116
+ public async txsWithdraw(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
117
+ const action = await this.Withdraw(signer, token, amount);
118
+
119
+ feeRate ??= await this.root.Fees.getFeeRate();
120
+
121
+ this.logger.debug("txsWithdraw(): withdraw TX created, token: "+token.toString()+
122
+ " amount: "+amount.toString(10));
123
+
124
+ return [await action.tx(feeRate)];
125
+ }
126
+
127
+ /**
128
+ * Creates transaction for depositing funds into the LP vault, wraps SOL to WSOL if required
129
+ *
130
+ * @param signer
131
+ * @param token
132
+ * @param amount
133
+ * @param feeRate
134
+ */
135
+ public async txsDeposit(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
136
+ //Approve first
137
+ const action = await this.root.Tokens.Approve(signer, this.swapContract.address, token, amount);
138
+ action.add(this.Deposit(signer, token, amount));
139
+
140
+ feeRate ??= await this.root.Fees.getFeeRate();
141
+
142
+ this.logger.debug("txsDeposit(): deposit TX created, token: "+token.toString()+
143
+ " amount: "+amount.toString(10));
144
+
145
+ return [await action.tx(feeRate)];
146
+ }
147
+
148
148
  }