@atomiqlabs/chain-evm 1.0.0-dev.35 → 1.0.0-dev.37
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/chains/citrea/CitreaBtcRelay.d.ts +21 -21
- package/dist/chains/citrea/CitreaBtcRelay.js +43 -43
- package/dist/chains/citrea/CitreaChainType.d.ts +13 -13
- package/dist/chains/citrea/CitreaChainType.js +2 -2
- package/dist/chains/citrea/CitreaFees.d.ts +29 -29
- package/dist/chains/citrea/CitreaFees.js +67 -67
- package/dist/chains/citrea/CitreaInitializer.d.ts +30 -30
- package/dist/chains/citrea/CitreaInitializer.js +127 -127
- package/dist/chains/citrea/CitreaSpvVaultContract.d.ts +15 -15
- package/dist/chains/citrea/CitreaSpvVaultContract.js +74 -74
- package/dist/chains/citrea/CitreaSwapContract.d.ts +22 -22
- package/dist/chains/citrea/CitreaSwapContract.js +96 -96
- package/dist/chains/citrea/CitreaTokens.d.ts +9 -9
- package/dist/chains/citrea/CitreaTokens.js +20 -20
- package/dist/evm/btcrelay/BtcRelayAbi.d.ts +198 -198
- package/dist/evm/btcrelay/BtcRelayAbi.js +261 -261
- package/dist/evm/btcrelay/BtcRelayTypechain.d.ts +172 -172
- package/dist/evm/btcrelay/BtcRelayTypechain.js +2 -2
- package/dist/evm/btcrelay/EVMBtcRelay.d.ts +195 -195
- package/dist/evm/btcrelay/EVMBtcRelay.js +423 -423
- package/dist/evm/btcrelay/headers/EVMBtcHeader.d.ts +33 -33
- package/dist/evm/btcrelay/headers/EVMBtcHeader.js +84 -84
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.d.ts +56 -56
- package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.js +123 -123
- package/dist/evm/chain/EVMChainInterface.d.ts +51 -51
- package/dist/evm/chain/EVMChainInterface.js +89 -89
- package/dist/evm/chain/EVMModule.d.ts +9 -9
- package/dist/evm/chain/EVMModule.js +13 -13
- package/dist/evm/chain/modules/ERC20Abi.d.ts +168 -168
- package/dist/evm/chain/modules/ERC20Abi.js +225 -225
- package/dist/evm/chain/modules/EVMAddresses.d.ts +10 -10
- package/dist/evm/chain/modules/EVMAddresses.js +30 -30
- package/dist/evm/chain/modules/EVMBlocks.d.ts +20 -20
- package/dist/evm/chain/modules/EVMBlocks.js +64 -64
- package/dist/evm/chain/modules/EVMEvents.d.ts +36 -36
- package/dist/evm/chain/modules/EVMEvents.js +122 -122
- package/dist/evm/chain/modules/EVMFees.d.ts +36 -36
- package/dist/evm/chain/modules/EVMFees.js +73 -73
- package/dist/evm/chain/modules/EVMSignatures.d.ts +29 -29
- package/dist/evm/chain/modules/EVMSignatures.js +68 -68
- package/dist/evm/chain/modules/EVMTokens.d.ts +70 -51
- package/dist/evm/chain/modules/EVMTokens.js +142 -113
- package/dist/evm/chain/modules/EVMTransactions.d.ts +89 -89
- package/dist/evm/chain/modules/EVMTransactions.js +230 -216
- package/dist/evm/contract/EVMContractBase.d.ts +22 -22
- package/dist/evm/contract/EVMContractBase.js +34 -34
- package/dist/evm/contract/EVMContractModule.d.ts +8 -8
- package/dist/evm/contract/EVMContractModule.js +11 -11
- package/dist/evm/contract/modules/EVMContractEvents.d.ts +42 -42
- package/dist/evm/contract/modules/EVMContractEvents.js +75 -75
- package/dist/evm/events/EVMChainEvents.d.ts +22 -22
- package/dist/evm/events/EVMChainEvents.js +67 -67
- package/dist/evm/events/EVMChainEventsBrowser.d.ts +86 -86
- package/dist/evm/events/EVMChainEventsBrowser.js +294 -294
- package/dist/evm/spv_swap/EVMSpvVaultContract.d.ts +78 -78
- package/dist/evm/spv_swap/EVMSpvVaultContract.js +478 -480
- package/dist/evm/spv_swap/EVMSpvVaultData.d.ts +39 -39
- package/dist/evm/spv_swap/EVMSpvVaultData.js +180 -180
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.d.ts +19 -19
- package/dist/evm/spv_swap/EVMSpvWithdrawalData.js +55 -55
- package/dist/evm/spv_swap/SpvVaultContractAbi.d.ts +91 -91
- package/dist/evm/spv_swap/SpvVaultContractAbi.js +849 -849
- package/dist/evm/spv_swap/SpvVaultContractTypechain.d.ts +450 -450
- package/dist/evm/spv_swap/SpvVaultContractTypechain.js +2 -2
- package/dist/evm/swaps/EVMSwapContract.d.ts +193 -193
- package/dist/evm/swaps/EVMSwapContract.js +374 -374
- package/dist/evm/swaps/EVMSwapData.d.ts +66 -66
- package/dist/evm/swaps/EVMSwapData.js +260 -260
- package/dist/evm/swaps/EVMSwapModule.d.ts +9 -9
- package/dist/evm/swaps/EVMSwapModule.js +11 -11
- package/dist/evm/swaps/EscrowManagerAbi.d.ts +120 -120
- package/dist/evm/swaps/EscrowManagerAbi.js +985 -985
- package/dist/evm/swaps/EscrowManagerTypechain.d.ts +475 -475
- package/dist/evm/swaps/EscrowManagerTypechain.js +2 -2
- package/dist/evm/swaps/handlers/IHandler.d.ts +13 -13
- package/dist/evm/swaps/handlers/IHandler.js +2 -2
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.d.ts +10 -10
- package/dist/evm/swaps/handlers/claim/ClaimHandlers.js +13 -13
- package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.d.ts +20 -20
- package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.js +39 -39
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
- package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +59 -59
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
- package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +51 -51
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +21 -21
- package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +28 -28
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +48 -48
- package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +63 -63
- package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
- package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.js +28 -28
- package/dist/evm/swaps/modules/EVMLpVault.d.ts +69 -69
- package/dist/evm/swaps/modules/EVMLpVault.js +134 -131
- package/dist/evm/swaps/modules/EVMSwapClaim.d.ts +54 -54
- package/dist/evm/swaps/modules/EVMSwapClaim.js +137 -137
- package/dist/evm/swaps/modules/EVMSwapInit.d.ts +88 -88
- package/dist/evm/swaps/modules/EVMSwapInit.js +274 -275
- package/dist/evm/swaps/modules/EVMSwapRefund.d.ts +62 -62
- package/dist/evm/swaps/modules/EVMSwapRefund.js +167 -167
- package/dist/evm/typechain/common.d.ts +50 -50
- package/dist/evm/typechain/common.js +2 -2
- package/dist/evm/wallet/EVMSigner.d.ts +10 -9
- package/dist/evm/wallet/EVMSigner.js +17 -16
- package/dist/index.d.ts +38 -38
- package/dist/index.js +54 -54
- package/dist/utils/Utils.d.ts +15 -15
- package/dist/utils/Utils.js +71 -71
- package/package.json +37 -37
- package/src/chains/citrea/CitreaBtcRelay.ts +57 -57
- package/src/chains/citrea/CitreaChainType.ts +28 -28
- package/src/chains/citrea/CitreaFees.ts +77 -77
- package/src/chains/citrea/CitreaInitializer.ts +178 -178
- package/src/chains/citrea/CitreaSpvVaultContract.ts +75 -75
- package/src/chains/citrea/CitreaSwapContract.ts +102 -102
- package/src/chains/citrea/CitreaTokens.ts +21 -21
- package/src/evm/btcrelay/BtcRelayAbi.ts +258 -258
- package/src/evm/btcrelay/BtcRelayTypechain.ts +371 -371
- package/src/evm/btcrelay/EVMBtcRelay.ts +522 -522
- package/src/evm/btcrelay/headers/EVMBtcHeader.ts +109 -109
- package/src/evm/btcrelay/headers/EVMBtcStoredHeader.ts +152 -152
- package/src/evm/chain/EVMChainInterface.ts +155 -155
- package/src/evm/chain/EVMModule.ts +21 -21
- package/src/evm/chain/modules/ERC20Abi.ts +222 -222
- package/src/evm/chain/modules/EVMAddresses.ts +28 -28
- package/src/evm/chain/modules/EVMBlocks.ts +75 -75
- package/src/evm/chain/modules/EVMEvents.ts +139 -139
- package/src/evm/chain/modules/EVMFees.ts +104 -104
- package/src/evm/chain/modules/EVMSignatures.ts +76 -76
- package/src/evm/chain/modules/EVMTokens.ts +155 -126
- package/src/evm/chain/modules/EVMTransactions.ts +257 -246
- package/src/evm/contract/EVMContractBase.ts +63 -63
- package/src/evm/contract/EVMContractModule.ts +16 -16
- package/src/evm/contract/modules/EVMContractEvents.ts +102 -102
- package/src/evm/events/EVMChainEvents.ts +81 -81
- package/src/evm/events/EVMChainEventsBrowser.ts +390 -390
- package/src/evm/spv_swap/EVMSpvVaultContract.ts +608 -603
- package/src/evm/spv_swap/EVMSpvVaultData.ts +224 -224
- package/src/evm/spv_swap/EVMSpvWithdrawalData.ts +70 -70
- package/src/evm/spv_swap/SpvVaultContractAbi.ts +846 -846
- package/src/evm/spv_swap/SpvVaultContractTypechain.ts +685 -685
- package/src/evm/swaps/EVMSwapContract.ts +592 -592
- package/src/evm/swaps/EVMSwapData.ts +378 -378
- package/src/evm/swaps/EVMSwapModule.ts +16 -16
- package/src/evm/swaps/EscrowManagerAbi.ts +982 -982
- package/src/evm/swaps/EscrowManagerTypechain.ts +723 -723
- package/src/evm/swaps/handlers/IHandler.ts +17 -17
- package/src/evm/swaps/handlers/claim/ClaimHandlers.ts +20 -20
- package/src/evm/swaps/handlers/claim/HashlockClaimHandler.ts +46 -46
- package/src/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +82 -82
- package/src/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +76 -76
- package/src/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +46 -46
- package/src/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +115 -115
- package/src/evm/swaps/handlers/refund/TimelockRefundHandler.ts +37 -37
- package/src/evm/swaps/modules/EVMLpVault.ts +154 -152
- package/src/evm/swaps/modules/EVMSwapClaim.ts +172 -172
- package/src/evm/swaps/modules/EVMSwapInit.ts +328 -325
- package/src/evm/swaps/modules/EVMSwapRefund.ts +229 -229
- package/src/evm/typechain/common.ts +131 -131
- package/src/evm/wallet/EVMSigner.ts +25 -23
- package/src/index.ts +45 -45
- package/src/utils/Utils.ts +81 -81
|
@@ -1,131 +1,134 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EVMLpVault = void 0;
|
|
4
|
-
const EVMSwapModule_1 = require("../EVMSwapModule");
|
|
5
|
-
const EVMFees_1 = require("../../chain/modules/EVMFees");
|
|
6
|
-
class EVMLpVault extends EVMSwapModule_1.EVMSwapModule {
|
|
7
|
-
/**
|
|
8
|
-
* Action for withdrawing funds from the LP vault
|
|
9
|
-
*
|
|
10
|
-
* @param signer
|
|
11
|
-
* @param token
|
|
12
|
-
* @param amount
|
|
13
|
-
* @param feeRate
|
|
14
|
-
* @private
|
|
15
|
-
*/
|
|
16
|
-
async Withdraw(signer, token, amount, feeRate) {
|
|
17
|
-
const tx = await this.swapContract.withdraw.populateTransaction(token, amount, signer);
|
|
18
|
-
tx.from = signer;
|
|
19
|
-
tx.gasLimit = BigInt(EVMLpVault.GasCosts.WITHDRAW);
|
|
20
|
-
EVMFees_1.EVMFees.applyFeeRate(tx, EVMLpVault.GasCosts.WITHDRAW, feeRate);
|
|
21
|
-
return tx;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Action for depositing funds to the LP vault
|
|
25
|
-
*
|
|
26
|
-
* @param signer
|
|
27
|
-
* @param token
|
|
28
|
-
* @param amount
|
|
29
|
-
* @param feeRate
|
|
30
|
-
* @private
|
|
31
|
-
*/
|
|
32
|
-
async Deposit(signer, token, amount, feeRate) {
|
|
33
|
-
const tx = await this.swapContract.deposit.populateTransaction(token, amount, {
|
|
34
|
-
value: token.toLowerCase() === this.root.getNativeCurrencyAddress().toLowerCase() ? amount : 0n
|
|
35
|
-
});
|
|
36
|
-
tx.from = signer;
|
|
37
|
-
EVMFees_1.EVMFees.applyFeeRate(tx, EVMLpVault.GasCosts.DEPOSIT, feeRate);
|
|
38
|
-
return tx;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Returns intermediary's reputation & vault balance for a specific token
|
|
42
|
-
*
|
|
43
|
-
* @param address
|
|
44
|
-
* @param token
|
|
45
|
-
*/
|
|
46
|
-
async getIntermediaryData(address, token) {
|
|
47
|
-
const [balance, reputation] = await Promise.all([
|
|
48
|
-
this.getIntermediaryBalance(address, token),
|
|
49
|
-
this.getIntermediaryReputation(address, token)
|
|
50
|
-
]);
|
|
51
|
-
return { balance, reputation };
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Returns intermediary's reputation for a specific token
|
|
55
|
-
*
|
|
56
|
-
* @param address
|
|
57
|
-
* @param token
|
|
58
|
-
*/
|
|
59
|
-
async getIntermediaryReputation(address, token) {
|
|
60
|
-
const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => ({ owner: address, token, claimHandler }));
|
|
61
|
-
const resp = await this.swapContract.getReputation(filter);
|
|
62
|
-
if (resp.length !== filter.length)
|
|
63
|
-
throw new Error("getIntermediaryReputation(): Invalid response length");
|
|
64
|
-
const result = {};
|
|
65
|
-
Object.keys(this.contract.claimHandlersByAddress).forEach((address, index) => {
|
|
66
|
-
const handler = this.contract.claimHandlersByAddress[address.toLowerCase()];
|
|
67
|
-
const handlerResp = resp[index];
|
|
68
|
-
result[handler.getType()] = {
|
|
69
|
-
successVolume: handlerResp[0].amount,
|
|
70
|
-
successCount: handlerResp[0].count,
|
|
71
|
-
coopCloseVolume: handlerResp[1].amount,
|
|
72
|
-
coopCloseCount: handlerResp[1].count,
|
|
73
|
-
failVolume: handlerResp[2].amount,
|
|
74
|
-
failCount: handlerResp[2].count,
|
|
75
|
-
};
|
|
76
|
-
});
|
|
77
|
-
return result;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Returns the balance of the token an intermediary has in his LP vault
|
|
81
|
-
*
|
|
82
|
-
* @param address
|
|
83
|
-
* @param token
|
|
84
|
-
*/
|
|
85
|
-
async getIntermediaryBalance(address, token) {
|
|
86
|
-
const [balance] = await this.swapContract.getBalance([{ owner: address, token }]);
|
|
87
|
-
this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: " + token.toString() +
|
|
88
|
-
" address: " + address + " amount: " + (balance == null ? "null" : balance.toString()));
|
|
89
|
-
return balance;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Creates transactions for withdrawing funds from the LP vault, creates ATA if it doesn't exist and unwraps
|
|
93
|
-
* WSOL to SOL if required
|
|
94
|
-
*
|
|
95
|
-
* @param signer
|
|
96
|
-
* @param token
|
|
97
|
-
* @param amount
|
|
98
|
-
* @param feeRate
|
|
99
|
-
*/
|
|
100
|
-
async txsWithdraw(signer, token, amount, feeRate) {
|
|
101
|
-
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
102
|
-
const withdrawTx = await this.Withdraw(signer, token, amount, feeRate);
|
|
103
|
-
this.logger.debug("txsWithdraw(): withdraw TX created, token: " + token.toString() +
|
|
104
|
-
" amount: " + amount.toString(10));
|
|
105
|
-
return [withdrawTx];
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Creates transaction for depositing funds into the LP vault, wraps SOL to WSOL if required
|
|
109
|
-
*
|
|
110
|
-
* @param signer
|
|
111
|
-
* @param token
|
|
112
|
-
* @param amount
|
|
113
|
-
* @param feeRate
|
|
114
|
-
*/
|
|
115
|
-
async txsDeposit(signer, token, amount, feeRate) {
|
|
116
|
-
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
117
|
-
const txs = [];
|
|
118
|
-
//Approve first
|
|
119
|
-
if (token.toLowerCase() !== this.root.getNativeCurrencyAddress().toLowerCase())
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMLpVault = void 0;
|
|
4
|
+
const EVMSwapModule_1 = require("../EVMSwapModule");
|
|
5
|
+
const EVMFees_1 = require("../../chain/modules/EVMFees");
|
|
6
|
+
class EVMLpVault extends EVMSwapModule_1.EVMSwapModule {
|
|
7
|
+
/**
|
|
8
|
+
* Action for withdrawing funds from the LP vault
|
|
9
|
+
*
|
|
10
|
+
* @param signer
|
|
11
|
+
* @param token
|
|
12
|
+
* @param amount
|
|
13
|
+
* @param feeRate
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
async Withdraw(signer, token, amount, feeRate) {
|
|
17
|
+
const tx = await this.swapContract.withdraw.populateTransaction(token, amount, signer);
|
|
18
|
+
tx.from = signer;
|
|
19
|
+
tx.gasLimit = BigInt(EVMLpVault.GasCosts.WITHDRAW);
|
|
20
|
+
EVMFees_1.EVMFees.applyFeeRate(tx, EVMLpVault.GasCosts.WITHDRAW, feeRate);
|
|
21
|
+
return tx;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Action for depositing funds to the LP vault
|
|
25
|
+
*
|
|
26
|
+
* @param signer
|
|
27
|
+
* @param token
|
|
28
|
+
* @param amount
|
|
29
|
+
* @param feeRate
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
32
|
+
async Deposit(signer, token, amount, feeRate) {
|
|
33
|
+
const tx = await this.swapContract.deposit.populateTransaction(token, amount, {
|
|
34
|
+
value: token.toLowerCase() === this.root.getNativeCurrencyAddress().toLowerCase() ? amount : 0n
|
|
35
|
+
});
|
|
36
|
+
tx.from = signer;
|
|
37
|
+
EVMFees_1.EVMFees.applyFeeRate(tx, EVMLpVault.GasCosts.DEPOSIT, feeRate);
|
|
38
|
+
return tx;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns intermediary's reputation & vault balance for a specific token
|
|
42
|
+
*
|
|
43
|
+
* @param address
|
|
44
|
+
* @param token
|
|
45
|
+
*/
|
|
46
|
+
async getIntermediaryData(address, token) {
|
|
47
|
+
const [balance, reputation] = await Promise.all([
|
|
48
|
+
this.getIntermediaryBalance(address, token),
|
|
49
|
+
this.getIntermediaryReputation(address, token)
|
|
50
|
+
]);
|
|
51
|
+
return { balance, reputation };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Returns intermediary's reputation for a specific token
|
|
55
|
+
*
|
|
56
|
+
* @param address
|
|
57
|
+
* @param token
|
|
58
|
+
*/
|
|
59
|
+
async getIntermediaryReputation(address, token) {
|
|
60
|
+
const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => ({ owner: address, token, claimHandler }));
|
|
61
|
+
const resp = await this.swapContract.getReputation(filter);
|
|
62
|
+
if (resp.length !== filter.length)
|
|
63
|
+
throw new Error("getIntermediaryReputation(): Invalid response length");
|
|
64
|
+
const result = {};
|
|
65
|
+
Object.keys(this.contract.claimHandlersByAddress).forEach((address, index) => {
|
|
66
|
+
const handler = this.contract.claimHandlersByAddress[address.toLowerCase()];
|
|
67
|
+
const handlerResp = resp[index];
|
|
68
|
+
result[handler.getType()] = {
|
|
69
|
+
successVolume: handlerResp[0].amount,
|
|
70
|
+
successCount: handlerResp[0].count,
|
|
71
|
+
coopCloseVolume: handlerResp[1].amount,
|
|
72
|
+
coopCloseCount: handlerResp[1].count,
|
|
73
|
+
failVolume: handlerResp[2].amount,
|
|
74
|
+
failCount: handlerResp[2].count,
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Returns the balance of the token an intermediary has in his LP vault
|
|
81
|
+
*
|
|
82
|
+
* @param address
|
|
83
|
+
* @param token
|
|
84
|
+
*/
|
|
85
|
+
async getIntermediaryBalance(address, token) {
|
|
86
|
+
const [balance] = await this.swapContract.getBalance([{ owner: address, token }]);
|
|
87
|
+
this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: " + token.toString() +
|
|
88
|
+
" address: " + address + " amount: " + (balance == null ? "null" : balance.toString()));
|
|
89
|
+
return balance;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates transactions for withdrawing funds from the LP vault, creates ATA if it doesn't exist and unwraps
|
|
93
|
+
* WSOL to SOL if required
|
|
94
|
+
*
|
|
95
|
+
* @param signer
|
|
96
|
+
* @param token
|
|
97
|
+
* @param amount
|
|
98
|
+
* @param feeRate
|
|
99
|
+
*/
|
|
100
|
+
async txsWithdraw(signer, token, amount, feeRate) {
|
|
101
|
+
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
102
|
+
const withdrawTx = await this.Withdraw(signer, token, amount, feeRate);
|
|
103
|
+
this.logger.debug("txsWithdraw(): withdraw TX created, token: " + token.toString() +
|
|
104
|
+
" amount: " + amount.toString(10));
|
|
105
|
+
return [withdrawTx];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Creates transaction for depositing funds into the LP vault, wraps SOL to WSOL if required
|
|
109
|
+
*
|
|
110
|
+
* @param signer
|
|
111
|
+
* @param token
|
|
112
|
+
* @param amount
|
|
113
|
+
* @param feeRate
|
|
114
|
+
*/
|
|
115
|
+
async txsDeposit(signer, token, amount, feeRate) {
|
|
116
|
+
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
117
|
+
const txs = [];
|
|
118
|
+
//Approve first
|
|
119
|
+
if (token.toLowerCase() !== this.root.getNativeCurrencyAddress().toLowerCase()) {
|
|
120
|
+
const approveTx = await this.root.Tokens.checkAndGetApproveTx(signer, token, amount, this.contract.contractAddress, feeRate);
|
|
121
|
+
if (approveTx != null)
|
|
122
|
+
txs.push(approveTx);
|
|
123
|
+
}
|
|
124
|
+
txs.push(await this.Deposit(signer, token, amount, feeRate));
|
|
125
|
+
this.logger.debug("txsDeposit(): deposit TX created, token: " + token.toString() +
|
|
126
|
+
" amount: " + amount.toString(10));
|
|
127
|
+
return txs;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.EVMLpVault = EVMLpVault;
|
|
131
|
+
EVMLpVault.GasCosts = {
|
|
132
|
+
WITHDRAW: 100000 + 21000,
|
|
133
|
+
DEPOSIT: 100000 + 21000
|
|
134
|
+
};
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
import { RelaySynchronizer } from "@atomiqlabs/base";
|
|
2
|
-
import { EVMSwapModule } from "../EVMSwapModule";
|
|
3
|
-
import { EVMSwapData } from "../EVMSwapData";
|
|
4
|
-
import { EVMTx } from "../../chain/modules/EVMTransactions";
|
|
5
|
-
import { EVMBtcStoredHeader } from "../../btcrelay/headers/EVMBtcStoredHeader";
|
|
6
|
-
export declare class EVMSwapClaim extends EVMSwapModule {
|
|
7
|
-
private static readonly GasCosts;
|
|
8
|
-
/**
|
|
9
|
-
* Claim action which uses the provided witness for claiming the swap
|
|
10
|
-
*
|
|
11
|
-
* @param signer
|
|
12
|
-
* @param swapData
|
|
13
|
-
* @param witness
|
|
14
|
-
* @param feeRate
|
|
15
|
-
* @param claimHandlerGas
|
|
16
|
-
* @private
|
|
17
|
-
*/
|
|
18
|
-
private Claim;
|
|
19
|
-
/**
|
|
20
|
-
* Creates transactions claiming the swap using a secret (for HTLC swaps)
|
|
21
|
-
*
|
|
22
|
-
* @param signer
|
|
23
|
-
* @param swapData swap to claim
|
|
24
|
-
* @param secret hex encoded secret pre-image to the HTLC hash
|
|
25
|
-
* @param checkExpiry whether to check if the swap is already expired (trying to claim an expired swap with a secret
|
|
26
|
-
* is dangerous because we might end up revealing the secret to the counterparty without being able to claim the swap)
|
|
27
|
-
* @param feeRate fee rate to use for the transaction
|
|
28
|
-
*/
|
|
29
|
-
txsClaimWithSecret(signer: string, swapData: EVMSwapData, secret: string, checkExpiry?: boolean, feeRate?: string): Promise<EVMTx[]>;
|
|
30
|
-
/**
|
|
31
|
-
* Creates transaction claiming the swap using a confirmed transaction data (for BTC on-chain swaps)
|
|
32
|
-
*
|
|
33
|
-
* @param signer
|
|
34
|
-
* @param swapData swap to claim
|
|
35
|
-
* @param tx bitcoin transaction that satisfies the swap condition
|
|
36
|
-
* @param requiredConfirmations
|
|
37
|
-
* @param vout vout of the bitcoin transaction that satisfies the swap condition
|
|
38
|
-
* @param commitedHeader commited header data from btc relay (fetched internally if null)
|
|
39
|
-
* @param synchronizer optional synchronizer to use in case we need to sync up the btc relay ourselves
|
|
40
|
-
* @param feeRate fee rate to be used for the transactions
|
|
41
|
-
*/
|
|
42
|
-
txsClaimWithTxData(signer: string, swapData: EVMSwapData, tx: {
|
|
43
|
-
blockhash: string;
|
|
44
|
-
confirmations: number;
|
|
45
|
-
txid: string;
|
|
46
|
-
hex: string;
|
|
47
|
-
height: number;
|
|
48
|
-
}, requiredConfirmations: number, vout: number, commitedHeader?: EVMBtcStoredHeader, synchronizer?: RelaySynchronizer<EVMBtcStoredHeader, EVMTx, any>, feeRate?: string): Promise<EVMTx[] | null>;
|
|
49
|
-
getClaimGas(swapData: EVMSwapData): number;
|
|
50
|
-
/**
|
|
51
|
-
* Get the estimated starknet transaction fee of the claim transaction
|
|
52
|
-
*/
|
|
53
|
-
getClaimFee(swapData: EVMSwapData, feeRate?: string): Promise<bigint>;
|
|
54
|
-
}
|
|
1
|
+
import { RelaySynchronizer } from "@atomiqlabs/base";
|
|
2
|
+
import { EVMSwapModule } from "../EVMSwapModule";
|
|
3
|
+
import { EVMSwapData } from "../EVMSwapData";
|
|
4
|
+
import { EVMTx } from "../../chain/modules/EVMTransactions";
|
|
5
|
+
import { EVMBtcStoredHeader } from "../../btcrelay/headers/EVMBtcStoredHeader";
|
|
6
|
+
export declare class EVMSwapClaim extends EVMSwapModule {
|
|
7
|
+
private static readonly GasCosts;
|
|
8
|
+
/**
|
|
9
|
+
* Claim action which uses the provided witness for claiming the swap
|
|
10
|
+
*
|
|
11
|
+
* @param signer
|
|
12
|
+
* @param swapData
|
|
13
|
+
* @param witness
|
|
14
|
+
* @param feeRate
|
|
15
|
+
* @param claimHandlerGas
|
|
16
|
+
* @private
|
|
17
|
+
*/
|
|
18
|
+
private Claim;
|
|
19
|
+
/**
|
|
20
|
+
* Creates transactions claiming the swap using a secret (for HTLC swaps)
|
|
21
|
+
*
|
|
22
|
+
* @param signer
|
|
23
|
+
* @param swapData swap to claim
|
|
24
|
+
* @param secret hex encoded secret pre-image to the HTLC hash
|
|
25
|
+
* @param checkExpiry whether to check if the swap is already expired (trying to claim an expired swap with a secret
|
|
26
|
+
* is dangerous because we might end up revealing the secret to the counterparty without being able to claim the swap)
|
|
27
|
+
* @param feeRate fee rate to use for the transaction
|
|
28
|
+
*/
|
|
29
|
+
txsClaimWithSecret(signer: string, swapData: EVMSwapData, secret: string, checkExpiry?: boolean, feeRate?: string): Promise<EVMTx[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Creates transaction claiming the swap using a confirmed transaction data (for BTC on-chain swaps)
|
|
32
|
+
*
|
|
33
|
+
* @param signer
|
|
34
|
+
* @param swapData swap to claim
|
|
35
|
+
* @param tx bitcoin transaction that satisfies the swap condition
|
|
36
|
+
* @param requiredConfirmations
|
|
37
|
+
* @param vout vout of the bitcoin transaction that satisfies the swap condition
|
|
38
|
+
* @param commitedHeader commited header data from btc relay (fetched internally if null)
|
|
39
|
+
* @param synchronizer optional synchronizer to use in case we need to sync up the btc relay ourselves
|
|
40
|
+
* @param feeRate fee rate to be used for the transactions
|
|
41
|
+
*/
|
|
42
|
+
txsClaimWithTxData(signer: string, swapData: EVMSwapData, tx: {
|
|
43
|
+
blockhash: string;
|
|
44
|
+
confirmations: number;
|
|
45
|
+
txid: string;
|
|
46
|
+
hex: string;
|
|
47
|
+
height: number;
|
|
48
|
+
}, requiredConfirmations: number, vout: number, commitedHeader?: EVMBtcStoredHeader, synchronizer?: RelaySynchronizer<EVMBtcStoredHeader, EVMTx, any>, feeRate?: string): Promise<EVMTx[] | null>;
|
|
49
|
+
getClaimGas(swapData: EVMSwapData): number;
|
|
50
|
+
/**
|
|
51
|
+
* Get the estimated starknet transaction fee of the claim transaction
|
|
52
|
+
*/
|
|
53
|
+
getClaimFee(swapData: EVMSwapData, feeRate?: string): Promise<bigint>;
|
|
54
|
+
}
|
|
@@ -1,137 +1,137 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EVMSwapClaim = void 0;
|
|
4
|
-
const base_1 = require("@atomiqlabs/base");
|
|
5
|
-
const EVMSwapModule_1 = require("../EVMSwapModule");
|
|
6
|
-
const EVMFees_1 = require("../../chain/modules/EVMFees");
|
|
7
|
-
class EVMSwapClaim extends EVMSwapModule_1.EVMSwapModule {
|
|
8
|
-
/**
|
|
9
|
-
* Claim action which uses the provided witness for claiming the swap
|
|
10
|
-
*
|
|
11
|
-
* @param signer
|
|
12
|
-
* @param swapData
|
|
13
|
-
* @param witness
|
|
14
|
-
* @param feeRate
|
|
15
|
-
* @param claimHandlerGas
|
|
16
|
-
* @private
|
|
17
|
-
*/
|
|
18
|
-
async Claim(signer, swapData, witness, feeRate, claimHandlerGas) {
|
|
19
|
-
//TODO: Claim with success action not supported yet!
|
|
20
|
-
const tx = await this.swapContract.claim.populateTransaction(swapData.toEscrowStruct(), witness);
|
|
21
|
-
tx.from = signer;
|
|
22
|
-
EVMFees_1.EVMFees.applyFeeRate(tx, this.getClaimGas(swapData) + (claimHandlerGas ?? 0), feeRate);
|
|
23
|
-
return tx;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Creates transactions claiming the swap using a secret (for HTLC swaps)
|
|
27
|
-
*
|
|
28
|
-
* @param signer
|
|
29
|
-
* @param swapData swap to claim
|
|
30
|
-
* @param secret hex encoded secret pre-image to the HTLC hash
|
|
31
|
-
* @param checkExpiry whether to check if the swap is already expired (trying to claim an expired swap with a secret
|
|
32
|
-
* is dangerous because we might end up revealing the secret to the counterparty without being able to claim the swap)
|
|
33
|
-
* @param feeRate fee rate to use for the transaction
|
|
34
|
-
*/
|
|
35
|
-
async txsClaimWithSecret(signer, swapData, secret, checkExpiry, feeRate) {
|
|
36
|
-
//We need to be sure that this transaction confirms in time, otherwise we reveal the secret to the counterparty
|
|
37
|
-
// and won't claim the funds
|
|
38
|
-
if (checkExpiry && await this.contract.isExpired(swapData.claimer.toString(), swapData)) {
|
|
39
|
-
throw new base_1.SwapDataVerificationError("Not enough time to reliably pay the invoice");
|
|
40
|
-
}
|
|
41
|
-
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
42
|
-
if (claimHandler == null)
|
|
43
|
-
throw new base_1.SwapDataVerificationError("Unknown claim handler!");
|
|
44
|
-
if (claimHandler.getType() !== base_1.ChainSwapType.HTLC)
|
|
45
|
-
throw new base_1.SwapDataVerificationError("Invalid claim handler!");
|
|
46
|
-
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
47
|
-
const { initialTxns, witness } = await claimHandler.getWitness(signer, swapData, secret, feeRate);
|
|
48
|
-
const tx = await this.Claim(signer, swapData, witness, feeRate, claimHandler.getGas(swapData));
|
|
49
|
-
this.logger.debug("txsClaimWithSecret(): creating claim transaction, swap: " + swapData.getClaimHash() + " witness: ", witness.toString("hex"));
|
|
50
|
-
return [...initialTxns, tx];
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Creates transaction claiming the swap using a confirmed transaction data (for BTC on-chain swaps)
|
|
54
|
-
*
|
|
55
|
-
* @param signer
|
|
56
|
-
* @param swapData swap to claim
|
|
57
|
-
* @param tx bitcoin transaction that satisfies the swap condition
|
|
58
|
-
* @param requiredConfirmations
|
|
59
|
-
* @param vout vout of the bitcoin transaction that satisfies the swap condition
|
|
60
|
-
* @param commitedHeader commited header data from btc relay (fetched internally if null)
|
|
61
|
-
* @param synchronizer optional synchronizer to use in case we need to sync up the btc relay ourselves
|
|
62
|
-
* @param feeRate fee rate to be used for the transactions
|
|
63
|
-
*/
|
|
64
|
-
async txsClaimWithTxData(signer, swapData, tx, requiredConfirmations, vout, commitedHeader, synchronizer, feeRate) {
|
|
65
|
-
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
66
|
-
if (claimHandler == null)
|
|
67
|
-
throw new base_1.SwapDataVerificationError("Unknown claim handler!");
|
|
68
|
-
if (claimHandler.getType() !== base_1.ChainSwapType.CHAIN_NONCED &&
|
|
69
|
-
claimHandler.getType() !== base_1.ChainSwapType.CHAIN_TXID &&
|
|
70
|
-
claimHandler.getType() !== base_1.ChainSwapType.CHAIN)
|
|
71
|
-
throw new base_1.SwapDataVerificationError("Invalid claim handler!");
|
|
72
|
-
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
73
|
-
const { initialTxns, witness } = await claimHandler.getWitness(signer, swapData, {
|
|
74
|
-
tx,
|
|
75
|
-
vout,
|
|
76
|
-
requiredConfirmations,
|
|
77
|
-
commitedHeader,
|
|
78
|
-
btcRelay: this.contract.btcRelay,
|
|
79
|
-
synchronizer,
|
|
80
|
-
}, feeRate);
|
|
81
|
-
const claimTx = await this.Claim(signer, swapData, witness, feeRate, claimHandler.getGas(swapData));
|
|
82
|
-
return [...initialTxns, claimTx];
|
|
83
|
-
}
|
|
84
|
-
getClaimGas(swapData) {
|
|
85
|
-
let totalGas = EVMSwapClaim.GasCosts.BASE;
|
|
86
|
-
if (swapData.reputation)
|
|
87
|
-
totalGas += EVMSwapClaim.GasCosts.REPUTATION;
|
|
88
|
-
if (swapData.isPayOut()) {
|
|
89
|
-
if (swapData.isToken(this.root.getNativeCurrencyAddress())) {
|
|
90
|
-
totalGas += EVMSwapClaim.GasCosts.NATIVE_TRANSFER;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
totalGas += EVMSwapClaim.GasCosts.ERC20_TRANSFER;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
totalGas += EVMSwapClaim.GasCosts.LP_VAULT_TRANSFER;
|
|
98
|
-
}
|
|
99
|
-
if (swapData.getClaimerBounty() > 0n) {
|
|
100
|
-
if (swapData.isDepositToken(this.root.getNativeCurrencyAddress())) {
|
|
101
|
-
totalGas += EVMSwapClaim.GasCosts.NATIVE_TRANSFER;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
totalGas += EVMSwapClaim.GasCosts.ERC20_TRANSFER;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (swapData.getSecurityDeposit() > swapData.getClaimerBounty()) {
|
|
108
|
-
if (swapData.isDepositToken(this.root.getNativeCurrencyAddress())) {
|
|
109
|
-
totalGas += EVMSwapClaim.GasCosts.NATIVE_TRANSFER;
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
totalGas += EVMSwapClaim.GasCosts.ERC20_TRANSFER;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return totalGas;
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Get the estimated starknet transaction fee of the claim transaction
|
|
119
|
-
*/
|
|
120
|
-
async getClaimFee(swapData, feeRate) {
|
|
121
|
-
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
122
|
-
//TODO: Claim with success action not supported yet!
|
|
123
|
-
let gasRequired = this.getClaimGas(swapData);
|
|
124
|
-
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
125
|
-
if (claimHandler != null)
|
|
126
|
-
gasRequired += claimHandler.getGas(swapData);
|
|
127
|
-
return EVMFees_1.EVMFees.getGasFee(gasRequired, feeRate);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
exports.EVMSwapClaim = EVMSwapClaim;
|
|
131
|
-
EVMSwapClaim.GasCosts = {
|
|
132
|
-
BASE: 30000 + 21000,
|
|
133
|
-
ERC20_TRANSFER: 40000,
|
|
134
|
-
NATIVE_TRANSFER: 7500,
|
|
135
|
-
LP_VAULT_TRANSFER: 10000,
|
|
136
|
-
REPUTATION: 25000
|
|
137
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMSwapClaim = void 0;
|
|
4
|
+
const base_1 = require("@atomiqlabs/base");
|
|
5
|
+
const EVMSwapModule_1 = require("../EVMSwapModule");
|
|
6
|
+
const EVMFees_1 = require("../../chain/modules/EVMFees");
|
|
7
|
+
class EVMSwapClaim extends EVMSwapModule_1.EVMSwapModule {
|
|
8
|
+
/**
|
|
9
|
+
* Claim action which uses the provided witness for claiming the swap
|
|
10
|
+
*
|
|
11
|
+
* @param signer
|
|
12
|
+
* @param swapData
|
|
13
|
+
* @param witness
|
|
14
|
+
* @param feeRate
|
|
15
|
+
* @param claimHandlerGas
|
|
16
|
+
* @private
|
|
17
|
+
*/
|
|
18
|
+
async Claim(signer, swapData, witness, feeRate, claimHandlerGas) {
|
|
19
|
+
//TODO: Claim with success action not supported yet!
|
|
20
|
+
const tx = await this.swapContract.claim.populateTransaction(swapData.toEscrowStruct(), witness);
|
|
21
|
+
tx.from = signer;
|
|
22
|
+
EVMFees_1.EVMFees.applyFeeRate(tx, this.getClaimGas(swapData) + (claimHandlerGas ?? 0), feeRate);
|
|
23
|
+
return tx;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates transactions claiming the swap using a secret (for HTLC swaps)
|
|
27
|
+
*
|
|
28
|
+
* @param signer
|
|
29
|
+
* @param swapData swap to claim
|
|
30
|
+
* @param secret hex encoded secret pre-image to the HTLC hash
|
|
31
|
+
* @param checkExpiry whether to check if the swap is already expired (trying to claim an expired swap with a secret
|
|
32
|
+
* is dangerous because we might end up revealing the secret to the counterparty without being able to claim the swap)
|
|
33
|
+
* @param feeRate fee rate to use for the transaction
|
|
34
|
+
*/
|
|
35
|
+
async txsClaimWithSecret(signer, swapData, secret, checkExpiry, feeRate) {
|
|
36
|
+
//We need to be sure that this transaction confirms in time, otherwise we reveal the secret to the counterparty
|
|
37
|
+
// and won't claim the funds
|
|
38
|
+
if (checkExpiry && await this.contract.isExpired(swapData.claimer.toString(), swapData)) {
|
|
39
|
+
throw new base_1.SwapDataVerificationError("Not enough time to reliably pay the invoice");
|
|
40
|
+
}
|
|
41
|
+
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
42
|
+
if (claimHandler == null)
|
|
43
|
+
throw new base_1.SwapDataVerificationError("Unknown claim handler!");
|
|
44
|
+
if (claimHandler.getType() !== base_1.ChainSwapType.HTLC)
|
|
45
|
+
throw new base_1.SwapDataVerificationError("Invalid claim handler!");
|
|
46
|
+
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
47
|
+
const { initialTxns, witness } = await claimHandler.getWitness(signer, swapData, secret, feeRate);
|
|
48
|
+
const tx = await this.Claim(signer, swapData, witness, feeRate, claimHandler.getGas(swapData));
|
|
49
|
+
this.logger.debug("txsClaimWithSecret(): creating claim transaction, swap: " + swapData.getClaimHash() + " witness: ", witness.toString("hex"));
|
|
50
|
+
return [...initialTxns, tx];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates transaction claiming the swap using a confirmed transaction data (for BTC on-chain swaps)
|
|
54
|
+
*
|
|
55
|
+
* @param signer
|
|
56
|
+
* @param swapData swap to claim
|
|
57
|
+
* @param tx bitcoin transaction that satisfies the swap condition
|
|
58
|
+
* @param requiredConfirmations
|
|
59
|
+
* @param vout vout of the bitcoin transaction that satisfies the swap condition
|
|
60
|
+
* @param commitedHeader commited header data from btc relay (fetched internally if null)
|
|
61
|
+
* @param synchronizer optional synchronizer to use in case we need to sync up the btc relay ourselves
|
|
62
|
+
* @param feeRate fee rate to be used for the transactions
|
|
63
|
+
*/
|
|
64
|
+
async txsClaimWithTxData(signer, swapData, tx, requiredConfirmations, vout, commitedHeader, synchronizer, feeRate) {
|
|
65
|
+
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
66
|
+
if (claimHandler == null)
|
|
67
|
+
throw new base_1.SwapDataVerificationError("Unknown claim handler!");
|
|
68
|
+
if (claimHandler.getType() !== base_1.ChainSwapType.CHAIN_NONCED &&
|
|
69
|
+
claimHandler.getType() !== base_1.ChainSwapType.CHAIN_TXID &&
|
|
70
|
+
claimHandler.getType() !== base_1.ChainSwapType.CHAIN)
|
|
71
|
+
throw new base_1.SwapDataVerificationError("Invalid claim handler!");
|
|
72
|
+
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
73
|
+
const { initialTxns, witness } = await claimHandler.getWitness(signer, swapData, {
|
|
74
|
+
tx,
|
|
75
|
+
vout,
|
|
76
|
+
requiredConfirmations,
|
|
77
|
+
commitedHeader,
|
|
78
|
+
btcRelay: this.contract.btcRelay,
|
|
79
|
+
synchronizer,
|
|
80
|
+
}, feeRate);
|
|
81
|
+
const claimTx = await this.Claim(signer, swapData, witness, feeRate, claimHandler.getGas(swapData));
|
|
82
|
+
return [...initialTxns, claimTx];
|
|
83
|
+
}
|
|
84
|
+
getClaimGas(swapData) {
|
|
85
|
+
let totalGas = EVMSwapClaim.GasCosts.BASE;
|
|
86
|
+
if (swapData.reputation)
|
|
87
|
+
totalGas += EVMSwapClaim.GasCosts.REPUTATION;
|
|
88
|
+
if (swapData.isPayOut()) {
|
|
89
|
+
if (swapData.isToken(this.root.getNativeCurrencyAddress())) {
|
|
90
|
+
totalGas += EVMSwapClaim.GasCosts.NATIVE_TRANSFER;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
totalGas += EVMSwapClaim.GasCosts.ERC20_TRANSFER;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
totalGas += EVMSwapClaim.GasCosts.LP_VAULT_TRANSFER;
|
|
98
|
+
}
|
|
99
|
+
if (swapData.getClaimerBounty() > 0n) {
|
|
100
|
+
if (swapData.isDepositToken(this.root.getNativeCurrencyAddress())) {
|
|
101
|
+
totalGas += EVMSwapClaim.GasCosts.NATIVE_TRANSFER;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
totalGas += EVMSwapClaim.GasCosts.ERC20_TRANSFER;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (swapData.getSecurityDeposit() > swapData.getClaimerBounty()) {
|
|
108
|
+
if (swapData.isDepositToken(this.root.getNativeCurrencyAddress())) {
|
|
109
|
+
totalGas += EVMSwapClaim.GasCosts.NATIVE_TRANSFER;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
totalGas += EVMSwapClaim.GasCosts.ERC20_TRANSFER;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return totalGas;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the estimated starknet transaction fee of the claim transaction
|
|
119
|
+
*/
|
|
120
|
+
async getClaimFee(swapData, feeRate) {
|
|
121
|
+
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
122
|
+
//TODO: Claim with success action not supported yet!
|
|
123
|
+
let gasRequired = this.getClaimGas(swapData);
|
|
124
|
+
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
125
|
+
if (claimHandler != null)
|
|
126
|
+
gasRequired += claimHandler.getGas(swapData);
|
|
127
|
+
return EVMFees_1.EVMFees.getGasFee(gasRequired, feeRate);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.EVMSwapClaim = EVMSwapClaim;
|
|
131
|
+
EVMSwapClaim.GasCosts = {
|
|
132
|
+
BASE: 30000 + 21000,
|
|
133
|
+
ERC20_TRANSFER: 40000,
|
|
134
|
+
NATIVE_TRANSFER: 7500,
|
|
135
|
+
LP_VAULT_TRANSFER: 10000,
|
|
136
|
+
REPUTATION: 25000
|
|
137
|
+
};
|