@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.
- package/LICENSE +201 -201
- package/dist/index.d.ts +38 -38
- package/dist/index.js +54 -54
- package/dist/starknet/StarknetChainType.d.ts +13 -13
- package/dist/starknet/StarknetChainType.js +2 -2
- package/dist/starknet/StarknetInitializer.d.ts +27 -27
- package/dist/starknet/StarknetInitializer.js +69 -69
- package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
- package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +186 -186
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +379 -379
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +31 -31
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +74 -74
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +51 -51
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +113 -113
- package/dist/starknet/chain/StarknetAction.d.ts +19 -19
- package/dist/starknet/chain/StarknetAction.js +73 -73
- package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -52
- package/dist/starknet/chain/StarknetChainInterface.js +91 -91
- package/dist/starknet/chain/StarknetModule.d.ts +14 -14
- package/dist/starknet/chain/StarknetModule.js +13 -13
- package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
- package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
- package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
- package/dist/starknet/chain/modules/StarknetAccounts.js +24 -24
- package/dist/starknet/chain/modules/StarknetAddresses.d.ts +9 -9
- package/dist/starknet/chain/modules/StarknetAddresses.js +26 -26
- package/dist/starknet/chain/modules/StarknetBlocks.d.ts +20 -20
- package/dist/starknet/chain/modules/StarknetBlocks.js +64 -64
- package/dist/starknet/chain/modules/StarknetEvents.d.ts +44 -44
- package/dist/starknet/chain/modules/StarknetEvents.js +88 -88
- package/dist/starknet/chain/modules/StarknetFees.d.ts +77 -77
- package/dist/starknet/chain/modules/StarknetFees.js +114 -114
- package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
- package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
- package/dist/starknet/chain/modules/StarknetTokens.d.ts +69 -69
- package/dist/starknet/chain/modules/StarknetTokens.js +102 -98
- package/dist/starknet/chain/modules/StarknetTransactions.d.ts +93 -93
- package/dist/starknet/chain/modules/StarknetTransactions.js +261 -260
- package/dist/starknet/contract/StarknetContractBase.d.ts +13 -13
- package/dist/starknet/contract/StarknetContractBase.js +20 -16
- package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
- package/dist/starknet/contract/StarknetContractModule.js +11 -11
- package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +51 -51
- package/dist/starknet/contract/modules/StarknetContractEvents.js +97 -97
- package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
- package/dist/starknet/events/StarknetChainEvents.js +52 -52
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +89 -90
- package/dist/starknet/events/StarknetChainEventsBrowser.js +296 -294
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -21
- package/dist/starknet/provider/RpcProviderWithRetries.js +32 -32
- package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
- package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +66 -66
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +382 -382
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -49
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +145 -145
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +25 -25
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +72 -72
- package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
- package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +191 -191
- package/dist/starknet/swaps/StarknetSwapContract.js +424 -424
- package/dist/starknet/swaps/StarknetSwapData.d.ts +74 -74
- package/dist/starknet/swaps/StarknetSwapData.js +325 -325
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
- package/dist/starknet/swaps/StarknetSwapModule.js +11 -11
- package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
- package/dist/starknet/swaps/handlers/IHandler.js +2 -2
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +45 -45
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +52 -52
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
- package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +69 -69
- package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +53 -53
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +100 -100
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -87
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +235 -225
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +62 -62
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +128 -128
- package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +7 -7
- package/dist/starknet/wallet/StarknetKeypairWallet.js +35 -30
- package/dist/starknet/wallet/StarknetSigner.d.ts +12 -12
- package/dist/starknet/wallet/StarknetSigner.js +47 -46
- package/dist/utils/Utils.d.ts +37 -37
- package/dist/utils/Utils.js +260 -261
- package/package.json +43 -37
- package/src/index.ts +47 -47
- package/src/starknet/StarknetChainType.ts +28 -28
- package/src/starknet/StarknetInitializer.ts +108 -108
- package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -338
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +494 -494
- package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +100 -100
- package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +141 -141
- package/src/starknet/chain/StarknetAction.ts +85 -85
- package/src/starknet/chain/StarknetChainInterface.ts +149 -149
- package/src/starknet/chain/StarknetModule.ts +19 -19
- package/src/starknet/chain/modules/ERC20Abi.ts +1029 -1029
- package/src/starknet/chain/modules/StarknetAccounts.ts +25 -25
- package/src/starknet/chain/modules/StarknetAddresses.ts +22 -22
- package/src/starknet/chain/modules/StarknetBlocks.ts +75 -74
- package/src/starknet/chain/modules/StarknetEvents.ts +104 -104
- package/src/starknet/chain/modules/StarknetFees.ts +154 -154
- package/src/starknet/chain/modules/StarknetSignatures.ts +91 -91
- package/src/starknet/chain/modules/StarknetTokens.ts +120 -116
- package/src/starknet/chain/modules/StarknetTransactions.ts +285 -283
- package/src/starknet/contract/StarknetContractBase.ts +30 -26
- package/src/starknet/contract/StarknetContractModule.ts +16 -16
- package/src/starknet/contract/modules/StarknetContractEvents.ts +134 -134
- package/src/starknet/events/StarknetChainEvents.ts +67 -67
- package/src/starknet/events/StarknetChainEventsBrowser.ts +411 -411
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -43
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -656
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +483 -483
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +195 -195
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +79 -79
- package/src/starknet/swaps/EscrowManagerAbi.ts +582 -582
- package/src/starknet/swaps/StarknetSwapContract.ts +647 -647
- package/src/starknet/swaps/StarknetSwapData.ts +455 -455
- package/src/starknet/swaps/StarknetSwapModule.ts +17 -17
- package/src/starknet/swaps/handlers/IHandler.ts +20 -20
- package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +23 -23
- package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +53 -53
- package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +73 -73
- package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +67 -67
- package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +50 -50
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +102 -102
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +38 -38
- package/src/starknet/swaps/modules/StarknetLpVault.ts +147 -147
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +141 -141
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +300 -287
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +196 -196
- package/src/starknet/wallet/StarknetKeypairWallet.ts +44 -39
- package/src/starknet/wallet/StarknetSigner.ts +55 -55
- package/src/utils/Utils.ts +251 -252
|
@@ -1,142 +1,142 @@
|
|
|
1
|
-
import {ChainSwapType, RelaySynchronizer, SwapDataVerificationError} from "@atomiqlabs/base";
|
|
2
|
-
import {toHex} from "../../../utils/Utils";
|
|
3
|
-
import {StarknetSwapModule} from "../StarknetSwapModule";
|
|
4
|
-
import {StarknetSwapData} from "../StarknetSwapData";
|
|
5
|
-
import {StarknetAction} from "../../chain/StarknetAction";
|
|
6
|
-
import {BigNumberish} from "starknet";
|
|
7
|
-
import {IClaimHandler} from "../handlers/claim/ClaimHandlers";
|
|
8
|
-
import {StarknetTx} from "../../chain/modules/StarknetTransactions";
|
|
9
|
-
import {StarknetFees, StarknetGas, starknetGasAdd} from "../../chain/modules/StarknetFees";
|
|
10
|
-
import {StarknetBtcStoredHeader} from "../../btcrelay/headers/StarknetBtcStoredHeader";
|
|
11
|
-
import {BitcoinOutputWitnessData} from "../handlers/claim/btc/BitcoinOutputClaimHandler";
|
|
12
|
-
import {BitcoinWitnessData} from "../handlers/claim/btc/IBitcoinClaimHandler";
|
|
13
|
-
import {Buffer} from "buffer";
|
|
14
|
-
|
|
15
|
-
export class StarknetSwapClaim extends StarknetSwapModule {
|
|
16
|
-
|
|
17
|
-
private static readonly GasCosts = {
|
|
18
|
-
CLAIM: {l1DataGas: 750, l2Gas: 4_000_000, l1Gas: 0},
|
|
19
|
-
CLAIM_PAY_OUT: {l1DataGas: 900, l2Gas: 6_000_000, l1Gas: 0}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Claim action which uses the provided witness for claiming the swap
|
|
24
|
-
*
|
|
25
|
-
* @param signer
|
|
26
|
-
* @param swapData
|
|
27
|
-
* @param witness
|
|
28
|
-
* @param claimHandlerGas
|
|
29
|
-
* @constructor
|
|
30
|
-
* @private
|
|
31
|
-
*/
|
|
32
|
-
private Claim(
|
|
33
|
-
signer: string,
|
|
34
|
-
swapData: StarknetSwapData,
|
|
35
|
-
witness: BigNumberish[],
|
|
36
|
-
claimHandlerGas?: StarknetGas
|
|
37
|
-
): StarknetAction {
|
|
38
|
-
return new StarknetAction(signer, this.root,
|
|
39
|
-
this.swapContract.populateTransaction.claim(swapData.toEscrowStruct(), witness),
|
|
40
|
-
starknetGasAdd(swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM, claimHandlerGas)
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Creates transactions claiming the swap using a secret (for HTLC swaps)
|
|
46
|
-
*
|
|
47
|
-
* @param signer
|
|
48
|
-
* @param swapData swap to claim
|
|
49
|
-
* @param secret hex encoded secret pre-image to the HTLC hash
|
|
50
|
-
* @param checkExpiry whether to check if the swap is already expired (trying to claim an expired swap with a secret
|
|
51
|
-
* is dangerous because we might end up revealing the secret to the counterparty without being able to claim the swap)
|
|
52
|
-
* @param feeRate fee rate to use for the transaction
|
|
53
|
-
*/
|
|
54
|
-
async txsClaimWithSecret(
|
|
55
|
-
signer: string,
|
|
56
|
-
swapData: StarknetSwapData,
|
|
57
|
-
secret: string,
|
|
58
|
-
checkExpiry?: boolean,
|
|
59
|
-
feeRate?: string
|
|
60
|
-
): Promise<StarknetTx[]> {
|
|
61
|
-
//We need to be sure that this transaction confirms in time, otherwise we reveal the secret to the counterparty
|
|
62
|
-
// and won't claim the funds
|
|
63
|
-
if(checkExpiry && await this.contract.isExpired(swapData.claimer.toString(), swapData)) {
|
|
64
|
-
throw new SwapDataVerificationError("Not enough time to reliably pay the invoice");
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const claimHandler: IClaimHandler<Buffer, string> = this.contract.claimHandlersByAddress[toHex(swapData.claimHandler)];
|
|
68
|
-
if(claimHandler==null) throw new SwapDataVerificationError("Unknown claim handler!");
|
|
69
|
-
if(claimHandler.getType()!==ChainSwapType.HTLC) throw new SwapDataVerificationError("Invalid claim handler!");
|
|
70
|
-
|
|
71
|
-
feeRate ??= await this.root.Fees.getFeeRate();
|
|
72
|
-
|
|
73
|
-
const {initialTxns, witness} = await claimHandler.getWitness(signer, swapData, secret, feeRate);
|
|
74
|
-
const action = this.Claim(signer, swapData, witness, claimHandler.getGas(swapData));
|
|
75
|
-
await action.addToTxs(initialTxns, feeRate);
|
|
76
|
-
|
|
77
|
-
this.logger.debug("txsClaimWithSecret(): creating claim transaction, swap: "+swapData.getClaimHash()+" witness: ", witness.map(toHex));
|
|
78
|
-
|
|
79
|
-
return initialTxns;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Creates transaction claiming the swap using a confirmed transaction data (for BTC on-chain swaps)
|
|
84
|
-
*
|
|
85
|
-
* @param signer
|
|
86
|
-
* @param swapData swap to claim
|
|
87
|
-
* @param tx bitcoin transaction that satisfies the swap condition
|
|
88
|
-
* @param requiredConfirmations
|
|
89
|
-
* @param vout vout of the bitcoin transaction that satisfies the swap condition
|
|
90
|
-
* @param commitedHeader commited header data from btc relay (fetched internally if null)
|
|
91
|
-
* @param synchronizer optional synchronizer to use in case we need to sync up the btc relay ourselves
|
|
92
|
-
* @param feeRate fee rate to be used for the transactions
|
|
93
|
-
*/
|
|
94
|
-
async txsClaimWithTxData(
|
|
95
|
-
signer: string,
|
|
96
|
-
swapData: StarknetSwapData,
|
|
97
|
-
tx: { blockhash: string, confirmations: number, txid: string, hex: string, height: number },
|
|
98
|
-
requiredConfirmations: number,
|
|
99
|
-
vout: number,
|
|
100
|
-
commitedHeader?: StarknetBtcStoredHeader,
|
|
101
|
-
synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>,
|
|
102
|
-
feeRate?: string
|
|
103
|
-
): Promise<StarknetTx[] | null> {
|
|
104
|
-
const claimHandler: IClaimHandler<any, BitcoinOutputWitnessData | BitcoinWitnessData> = this.contract.claimHandlersByAddress[toHex(swapData.claimHandler)];
|
|
105
|
-
if(claimHandler==null) throw new SwapDataVerificationError("Unknown claim handler!");
|
|
106
|
-
if(
|
|
107
|
-
claimHandler.getType()!==ChainSwapType.CHAIN_NONCED &&
|
|
108
|
-
claimHandler.getType()!==ChainSwapType.CHAIN_TXID &&
|
|
109
|
-
claimHandler.getType()!==ChainSwapType.CHAIN
|
|
110
|
-
) throw new SwapDataVerificationError("Invalid claim handler!");
|
|
111
|
-
|
|
112
|
-
feeRate ??= await this.root.Fees.getFeeRate();
|
|
113
|
-
|
|
114
|
-
const {initialTxns, witness} = await claimHandler.getWitness(signer, swapData, {
|
|
115
|
-
tx,
|
|
116
|
-
vout,
|
|
117
|
-
requiredConfirmations,
|
|
118
|
-
commitedHeader,
|
|
119
|
-
btcRelay: this.contract.btcRelay,
|
|
120
|
-
synchronizer,
|
|
121
|
-
}, feeRate);
|
|
122
|
-
const action = this.Claim(signer, swapData, witness, claimHandler.getGas(swapData));
|
|
123
|
-
await action.addToTxs(initialTxns, feeRate);
|
|
124
|
-
|
|
125
|
-
return initialTxns;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Get the estimated starknet transaction fee of the claim transaction
|
|
130
|
-
*/
|
|
131
|
-
public async getClaimFee(swapData: StarknetSwapData, feeRate?: string): Promise<bigint> {
|
|
132
|
-
feeRate ??= await this.root.Fees.getFeeRate();
|
|
133
|
-
|
|
134
|
-
let gasRequired = swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM;
|
|
135
|
-
|
|
136
|
-
const claimHandler: IClaimHandler<any, any> = this.contract.claimHandlersByAddress[toHex(swapData.claimHandler)];
|
|
137
|
-
if(claimHandler!=null) gasRequired = starknetGasAdd(gasRequired, claimHandler.getGas(swapData));
|
|
138
|
-
|
|
139
|
-
return StarknetFees.getGasFee(gasRequired, feeRate);
|
|
140
|
-
}
|
|
141
|
-
|
|
1
|
+
import {ChainSwapType, RelaySynchronizer, SwapDataVerificationError} from "@atomiqlabs/base";
|
|
2
|
+
import {toHex} from "../../../utils/Utils";
|
|
3
|
+
import {StarknetSwapModule} from "../StarknetSwapModule";
|
|
4
|
+
import {StarknetSwapData} from "../StarknetSwapData";
|
|
5
|
+
import {StarknetAction} from "../../chain/StarknetAction";
|
|
6
|
+
import {BigNumberish} from "starknet";
|
|
7
|
+
import {IClaimHandler} from "../handlers/claim/ClaimHandlers";
|
|
8
|
+
import {StarknetTx} from "../../chain/modules/StarknetTransactions";
|
|
9
|
+
import {StarknetFees, StarknetGas, starknetGasAdd} from "../../chain/modules/StarknetFees";
|
|
10
|
+
import {StarknetBtcStoredHeader} from "../../btcrelay/headers/StarknetBtcStoredHeader";
|
|
11
|
+
import {BitcoinOutputWitnessData} from "../handlers/claim/btc/BitcoinOutputClaimHandler";
|
|
12
|
+
import {BitcoinWitnessData} from "../handlers/claim/btc/IBitcoinClaimHandler";
|
|
13
|
+
import {Buffer} from "buffer";
|
|
14
|
+
|
|
15
|
+
export class StarknetSwapClaim extends StarknetSwapModule {
|
|
16
|
+
|
|
17
|
+
private static readonly GasCosts = {
|
|
18
|
+
CLAIM: {l1DataGas: 750, l2Gas: 4_000_000, l1Gas: 0},
|
|
19
|
+
CLAIM_PAY_OUT: {l1DataGas: 900, l2Gas: 6_000_000, l1Gas: 0}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Claim action which uses the provided witness for claiming the swap
|
|
24
|
+
*
|
|
25
|
+
* @param signer
|
|
26
|
+
* @param swapData
|
|
27
|
+
* @param witness
|
|
28
|
+
* @param claimHandlerGas
|
|
29
|
+
* @constructor
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
32
|
+
private Claim(
|
|
33
|
+
signer: string,
|
|
34
|
+
swapData: StarknetSwapData,
|
|
35
|
+
witness: BigNumberish[],
|
|
36
|
+
claimHandlerGas?: StarknetGas
|
|
37
|
+
): StarknetAction {
|
|
38
|
+
return new StarknetAction(signer, this.root,
|
|
39
|
+
this.swapContract.populateTransaction.claim(swapData.toEscrowStruct(), witness),
|
|
40
|
+
starknetGasAdd(swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM, claimHandlerGas)
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Creates transactions claiming the swap using a secret (for HTLC swaps)
|
|
46
|
+
*
|
|
47
|
+
* @param signer
|
|
48
|
+
* @param swapData swap to claim
|
|
49
|
+
* @param secret hex encoded secret pre-image to the HTLC hash
|
|
50
|
+
* @param checkExpiry whether to check if the swap is already expired (trying to claim an expired swap with a secret
|
|
51
|
+
* is dangerous because we might end up revealing the secret to the counterparty without being able to claim the swap)
|
|
52
|
+
* @param feeRate fee rate to use for the transaction
|
|
53
|
+
*/
|
|
54
|
+
async txsClaimWithSecret(
|
|
55
|
+
signer: string,
|
|
56
|
+
swapData: StarknetSwapData,
|
|
57
|
+
secret: string,
|
|
58
|
+
checkExpiry?: boolean,
|
|
59
|
+
feeRate?: string
|
|
60
|
+
): Promise<StarknetTx[]> {
|
|
61
|
+
//We need to be sure that this transaction confirms in time, otherwise we reveal the secret to the counterparty
|
|
62
|
+
// and won't claim the funds
|
|
63
|
+
if(checkExpiry && await this.contract.isExpired(swapData.claimer.toString(), swapData)) {
|
|
64
|
+
throw new SwapDataVerificationError("Not enough time to reliably pay the invoice");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const claimHandler: IClaimHandler<Buffer, string> = this.contract.claimHandlersByAddress[toHex(swapData.claimHandler)];
|
|
68
|
+
if(claimHandler==null) throw new SwapDataVerificationError("Unknown claim handler!");
|
|
69
|
+
if(claimHandler.getType()!==ChainSwapType.HTLC) throw new SwapDataVerificationError("Invalid claim handler!");
|
|
70
|
+
|
|
71
|
+
feeRate ??= await this.root.Fees.getFeeRate();
|
|
72
|
+
|
|
73
|
+
const {initialTxns, witness} = await claimHandler.getWitness(signer, swapData, secret, feeRate);
|
|
74
|
+
const action = this.Claim(signer, swapData, witness, claimHandler.getGas(swapData));
|
|
75
|
+
await action.addToTxs(initialTxns, feeRate);
|
|
76
|
+
|
|
77
|
+
this.logger.debug("txsClaimWithSecret(): creating claim transaction, swap: "+swapData.getClaimHash()+" witness: ", witness.map(toHex));
|
|
78
|
+
|
|
79
|
+
return initialTxns;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Creates transaction claiming the swap using a confirmed transaction data (for BTC on-chain swaps)
|
|
84
|
+
*
|
|
85
|
+
* @param signer
|
|
86
|
+
* @param swapData swap to claim
|
|
87
|
+
* @param tx bitcoin transaction that satisfies the swap condition
|
|
88
|
+
* @param requiredConfirmations
|
|
89
|
+
* @param vout vout of the bitcoin transaction that satisfies the swap condition
|
|
90
|
+
* @param commitedHeader commited header data from btc relay (fetched internally if null)
|
|
91
|
+
* @param synchronizer optional synchronizer to use in case we need to sync up the btc relay ourselves
|
|
92
|
+
* @param feeRate fee rate to be used for the transactions
|
|
93
|
+
*/
|
|
94
|
+
async txsClaimWithTxData(
|
|
95
|
+
signer: string,
|
|
96
|
+
swapData: StarknetSwapData,
|
|
97
|
+
tx: { blockhash: string, confirmations: number, txid: string, hex: string, height: number },
|
|
98
|
+
requiredConfirmations: number,
|
|
99
|
+
vout: number,
|
|
100
|
+
commitedHeader?: StarknetBtcStoredHeader,
|
|
101
|
+
synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>,
|
|
102
|
+
feeRate?: string
|
|
103
|
+
): Promise<StarknetTx[] | null> {
|
|
104
|
+
const claimHandler: IClaimHandler<any, BitcoinOutputWitnessData | BitcoinWitnessData> = this.contract.claimHandlersByAddress[toHex(swapData.claimHandler)];
|
|
105
|
+
if(claimHandler==null) throw new SwapDataVerificationError("Unknown claim handler!");
|
|
106
|
+
if(
|
|
107
|
+
claimHandler.getType()!==ChainSwapType.CHAIN_NONCED &&
|
|
108
|
+
claimHandler.getType()!==ChainSwapType.CHAIN_TXID &&
|
|
109
|
+
claimHandler.getType()!==ChainSwapType.CHAIN
|
|
110
|
+
) throw new SwapDataVerificationError("Invalid claim handler!");
|
|
111
|
+
|
|
112
|
+
feeRate ??= await this.root.Fees.getFeeRate();
|
|
113
|
+
|
|
114
|
+
const {initialTxns, witness} = await claimHandler.getWitness(signer, swapData, {
|
|
115
|
+
tx,
|
|
116
|
+
vout,
|
|
117
|
+
requiredConfirmations,
|
|
118
|
+
commitedHeader,
|
|
119
|
+
btcRelay: this.contract.btcRelay,
|
|
120
|
+
synchronizer,
|
|
121
|
+
}, feeRate);
|
|
122
|
+
const action = this.Claim(signer, swapData, witness, claimHandler.getGas(swapData));
|
|
123
|
+
await action.addToTxs(initialTxns, feeRate);
|
|
124
|
+
|
|
125
|
+
return initialTxns;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Get the estimated starknet transaction fee of the claim transaction
|
|
130
|
+
*/
|
|
131
|
+
public async getClaimFee(swapData: StarknetSwapData, feeRate?: string): Promise<bigint> {
|
|
132
|
+
feeRate ??= await this.root.Fees.getFeeRate();
|
|
133
|
+
|
|
134
|
+
let gasRequired = swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM;
|
|
135
|
+
|
|
136
|
+
const claimHandler: IClaimHandler<any, any> = this.contract.claimHandlersByAddress[toHex(swapData.claimHandler)];
|
|
137
|
+
if(claimHandler!=null) gasRequired = starknetGasAdd(gasRequired, claimHandler.getGas(swapData));
|
|
138
|
+
|
|
139
|
+
return StarknetFees.getGasFee(gasRequired, feeRate);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
142
|
}
|