@atomiqlabs/chain-evm 1.0.0-dev.37 → 1.0.0-dev.39
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/botanix/BotanixChainType.d.ts +13 -0
- package/dist/chains/botanix/BotanixChainType.js +2 -0
- package/dist/chains/botanix/BotanixInitializer.d.ts +30 -0
- package/dist/chains/botanix/BotanixInitializer.js +117 -0
- 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 -70
- package/dist/evm/chain/modules/EVMTokens.js +142 -142
- package/dist/evm/chain/modules/EVMTransactions.d.ts +89 -89
- package/dist/evm/chain/modules/EVMTransactions.js +230 -230
- 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 -478
- 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 +378 -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 -134
- 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 -274
- 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 -10
- package/dist/evm/wallet/EVMSigner.js +17 -17
- package/dist/index.d.ts +40 -38
- package/dist/index.js +56 -54
- package/dist/utils/Utils.d.ts +15 -15
- package/dist/utils/Utils.js +71 -71
- package/package.json +37 -37
- package/src/chains/botanix/BotanixChainType.ts +28 -0
- package/src/chains/botanix/BotanixInitializer.ts +164 -0
- 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 -155
- package/src/evm/chain/modules/EVMTransactions.ts +257 -257
- 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 -608
- 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 +600 -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 -154
- package/src/evm/swaps/modules/EVMSwapClaim.ts +172 -172
- package/src/evm/swaps/modules/EVMSwapInit.ts +328 -328
- package/src/evm/swaps/modules/EVMSwapRefund.ts +229 -229
- package/src/evm/typechain/common.ts +131 -131
- package/src/evm/wallet/EVMSigner.ts +25 -25
- package/src/index.ts +48 -45
- package/src/utils/Utils.ts +81 -81
|
@@ -1,142 +1,142 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EVMTokens = void 0;
|
|
4
|
-
const EVMModule_1 = require("../EVMModule");
|
|
5
|
-
const ethers_1 = require("ethers");
|
|
6
|
-
const ERC20Abi_1 = require("./ERC20Abi");
|
|
7
|
-
const EVMAddresses_1 = require("./EVMAddresses");
|
|
8
|
-
const EVMFees_1 = require("./EVMFees");
|
|
9
|
-
class EVMTokens extends EVMModule_1.EVMModule {
|
|
10
|
-
getContract(address) {
|
|
11
|
-
return new ethers_1.Contract(address, ERC20Abi_1.ERC20Abi, this.root.provider);
|
|
12
|
-
}
|
|
13
|
-
///////////////////
|
|
14
|
-
//// Tokens
|
|
15
|
-
/**
|
|
16
|
-
* Checks if the provided string is a valid starknet token
|
|
17
|
-
*
|
|
18
|
-
* @param token
|
|
19
|
-
*/
|
|
20
|
-
isValidToken(token) {
|
|
21
|
-
return EVMAddresses_1.EVMAddresses.isValidAddress(token);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Returns the token balance of the address
|
|
25
|
-
*
|
|
26
|
-
* @param address
|
|
27
|
-
* @param token
|
|
28
|
-
*/
|
|
29
|
-
async getTokenBalance(address, token) {
|
|
30
|
-
let balance;
|
|
31
|
-
if (token === "0x0000000000000000000000000000000000000000") {
|
|
32
|
-
balance = await this.provider.getBalance(address);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
const erc20 = this.getContract(token);
|
|
36
|
-
balance = await erc20.balanceOf(address);
|
|
37
|
-
}
|
|
38
|
-
this.logger.debug("getTokenBalance(): token balance fetched, token: " + token +
|
|
39
|
-
" address: " + address + " amount: " + balance.toString(10));
|
|
40
|
-
return balance;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Returns the authorized allowance of specific address towards a spender contract
|
|
44
|
-
*
|
|
45
|
-
* @param spender A contract trying to spend user's erc20 balance
|
|
46
|
-
* @param address Wallet address
|
|
47
|
-
* @param token ERC-20 token
|
|
48
|
-
*/
|
|
49
|
-
async getTokenAllowance(spender, address, token) {
|
|
50
|
-
if (token === "0x0000000000000000000000000000000000000000")
|
|
51
|
-
return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn;
|
|
52
|
-
const erc20 = this.getContract(token);
|
|
53
|
-
return await erc20.allowance(address, spender);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Returns the native currency address
|
|
57
|
-
*/
|
|
58
|
-
getNativeCurrencyAddress() {
|
|
59
|
-
return "0x0000000000000000000000000000000000000000";
|
|
60
|
-
}
|
|
61
|
-
///////////////////
|
|
62
|
-
//// Transfers
|
|
63
|
-
/**
|
|
64
|
-
* Creates transactions for sending the over the tokens
|
|
65
|
-
*
|
|
66
|
-
* @param signer
|
|
67
|
-
* @param token token to send
|
|
68
|
-
* @param amount amount of the token to send
|
|
69
|
-
* @param recipient recipient's address
|
|
70
|
-
* @param feeRate fee rate to use for the transactions
|
|
71
|
-
* @private
|
|
72
|
-
*/
|
|
73
|
-
async Transfer(signer, token, amount, recipient, feeRate) {
|
|
74
|
-
let tx;
|
|
75
|
-
if (token === this.getNativeCurrencyAddress()) {
|
|
76
|
-
tx = {
|
|
77
|
-
to: recipient,
|
|
78
|
-
value: amount
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
tx = await this.getContract(token).transfer.populateTransaction(recipient, amount);
|
|
83
|
-
}
|
|
84
|
-
tx.from = signer;
|
|
85
|
-
EVMFees_1.EVMFees.applyFeeRate(tx, EVMTokens.GasCosts.TRANSFER, feeRate ?? await this.root.Fees.getFeeRate());
|
|
86
|
-
this.logger.debug("txsTransfer(): transfer TX created, recipient: " + recipient.toString() +
|
|
87
|
-
" token: " + token.toString() + " amount: " + amount.toString(10));
|
|
88
|
-
return tx;
|
|
89
|
-
}
|
|
90
|
-
///////////////////
|
|
91
|
-
//// Approval
|
|
92
|
-
/**
|
|
93
|
-
* Creates transactions for approving spending of tokens
|
|
94
|
-
*
|
|
95
|
-
* @param signer
|
|
96
|
-
* @param token token to send
|
|
97
|
-
* @param amount amount of the token to send
|
|
98
|
-
* @param spender recipient's address
|
|
99
|
-
* @param feeRate fee rate to use for the transactions
|
|
100
|
-
* @private
|
|
101
|
-
*/
|
|
102
|
-
async Approve(signer, token, amount, spender, feeRate) {
|
|
103
|
-
if (token === this.getNativeCurrencyAddress())
|
|
104
|
-
return null;
|
|
105
|
-
const tx = await this.getContract(token).approve.populateTransaction(spender, amount);
|
|
106
|
-
tx.from = signer;
|
|
107
|
-
EVMFees_1.EVMFees.applyFeeRate(tx, EVMTokens.GasCosts.APPROVE, feeRate ?? await this.root.Fees.getFeeRate());
|
|
108
|
-
this.logger.debug("txsTransfer(): approve TX created, spender: " + spender.toString() +
|
|
109
|
-
" token: " + token.toString() + " amount: " + amount.toString(10));
|
|
110
|
-
return tx;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Checks whether an approve transaction is required for a given token and either returns the tx
|
|
114
|
-
* or null in case the approve is not required
|
|
115
|
-
*
|
|
116
|
-
* @param signer
|
|
117
|
-
* @param token token to approve for
|
|
118
|
-
* @param amount amount of the token to send
|
|
119
|
-
* @param spender spending contract address
|
|
120
|
-
* @param feeRate fee rate to use for the transactions
|
|
121
|
-
*/
|
|
122
|
-
async checkAndGetApproveTx(signer, token, amount, spender, feeRate) {
|
|
123
|
-
const alreadyApproved = await this.getTokenAllowance(spender, signer, token);
|
|
124
|
-
if (alreadyApproved >= amount)
|
|
125
|
-
return null;
|
|
126
|
-
return await this.Approve(signer, token, amount, spender, feeRate);
|
|
127
|
-
}
|
|
128
|
-
async getApproveFee(feeRate) {
|
|
129
|
-
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
130
|
-
return EVMFees_1.EVMFees.getGasFee(EVMTokens.GasCosts.APPROVE, feeRate);
|
|
131
|
-
}
|
|
132
|
-
async getTransferFee(feeRate) {
|
|
133
|
-
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
134
|
-
return EVMFees_1.EVMFees.getGasFee(EVMTokens.GasCosts.APPROVE, feeRate);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
exports.EVMTokens = EVMTokens;
|
|
138
|
-
EVMTokens.ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
139
|
-
EVMTokens.GasCosts = {
|
|
140
|
-
TRANSFER: 80000 + 21000,
|
|
141
|
-
APPROVE: 80000 + 21000
|
|
142
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMTokens = void 0;
|
|
4
|
+
const EVMModule_1 = require("../EVMModule");
|
|
5
|
+
const ethers_1 = require("ethers");
|
|
6
|
+
const ERC20Abi_1 = require("./ERC20Abi");
|
|
7
|
+
const EVMAddresses_1 = require("./EVMAddresses");
|
|
8
|
+
const EVMFees_1 = require("./EVMFees");
|
|
9
|
+
class EVMTokens extends EVMModule_1.EVMModule {
|
|
10
|
+
getContract(address) {
|
|
11
|
+
return new ethers_1.Contract(address, ERC20Abi_1.ERC20Abi, this.root.provider);
|
|
12
|
+
}
|
|
13
|
+
///////////////////
|
|
14
|
+
//// Tokens
|
|
15
|
+
/**
|
|
16
|
+
* Checks if the provided string is a valid starknet token
|
|
17
|
+
*
|
|
18
|
+
* @param token
|
|
19
|
+
*/
|
|
20
|
+
isValidToken(token) {
|
|
21
|
+
return EVMAddresses_1.EVMAddresses.isValidAddress(token);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Returns the token balance of the address
|
|
25
|
+
*
|
|
26
|
+
* @param address
|
|
27
|
+
* @param token
|
|
28
|
+
*/
|
|
29
|
+
async getTokenBalance(address, token) {
|
|
30
|
+
let balance;
|
|
31
|
+
if (token === "0x0000000000000000000000000000000000000000") {
|
|
32
|
+
balance = await this.provider.getBalance(address);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const erc20 = this.getContract(token);
|
|
36
|
+
balance = await erc20.balanceOf(address);
|
|
37
|
+
}
|
|
38
|
+
this.logger.debug("getTokenBalance(): token balance fetched, token: " + token +
|
|
39
|
+
" address: " + address + " amount: " + balance.toString(10));
|
|
40
|
+
return balance;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns the authorized allowance of specific address towards a spender contract
|
|
44
|
+
*
|
|
45
|
+
* @param spender A contract trying to spend user's erc20 balance
|
|
46
|
+
* @param address Wallet address
|
|
47
|
+
* @param token ERC-20 token
|
|
48
|
+
*/
|
|
49
|
+
async getTokenAllowance(spender, address, token) {
|
|
50
|
+
if (token === "0x0000000000000000000000000000000000000000")
|
|
51
|
+
return 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn;
|
|
52
|
+
const erc20 = this.getContract(token);
|
|
53
|
+
return await erc20.allowance(address, spender);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Returns the native currency address
|
|
57
|
+
*/
|
|
58
|
+
getNativeCurrencyAddress() {
|
|
59
|
+
return "0x0000000000000000000000000000000000000000";
|
|
60
|
+
}
|
|
61
|
+
///////////////////
|
|
62
|
+
//// Transfers
|
|
63
|
+
/**
|
|
64
|
+
* Creates transactions for sending the over the tokens
|
|
65
|
+
*
|
|
66
|
+
* @param signer
|
|
67
|
+
* @param token token to send
|
|
68
|
+
* @param amount amount of the token to send
|
|
69
|
+
* @param recipient recipient's address
|
|
70
|
+
* @param feeRate fee rate to use for the transactions
|
|
71
|
+
* @private
|
|
72
|
+
*/
|
|
73
|
+
async Transfer(signer, token, amount, recipient, feeRate) {
|
|
74
|
+
let tx;
|
|
75
|
+
if (token === this.getNativeCurrencyAddress()) {
|
|
76
|
+
tx = {
|
|
77
|
+
to: recipient,
|
|
78
|
+
value: amount
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
tx = await this.getContract(token).transfer.populateTransaction(recipient, amount);
|
|
83
|
+
}
|
|
84
|
+
tx.from = signer;
|
|
85
|
+
EVMFees_1.EVMFees.applyFeeRate(tx, EVMTokens.GasCosts.TRANSFER, feeRate ?? await this.root.Fees.getFeeRate());
|
|
86
|
+
this.logger.debug("txsTransfer(): transfer TX created, recipient: " + recipient.toString() +
|
|
87
|
+
" token: " + token.toString() + " amount: " + amount.toString(10));
|
|
88
|
+
return tx;
|
|
89
|
+
}
|
|
90
|
+
///////////////////
|
|
91
|
+
//// Approval
|
|
92
|
+
/**
|
|
93
|
+
* Creates transactions for approving spending of tokens
|
|
94
|
+
*
|
|
95
|
+
* @param signer
|
|
96
|
+
* @param token token to send
|
|
97
|
+
* @param amount amount of the token to send
|
|
98
|
+
* @param spender recipient's address
|
|
99
|
+
* @param feeRate fee rate to use for the transactions
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
async Approve(signer, token, amount, spender, feeRate) {
|
|
103
|
+
if (token === this.getNativeCurrencyAddress())
|
|
104
|
+
return null;
|
|
105
|
+
const tx = await this.getContract(token).approve.populateTransaction(spender, amount);
|
|
106
|
+
tx.from = signer;
|
|
107
|
+
EVMFees_1.EVMFees.applyFeeRate(tx, EVMTokens.GasCosts.APPROVE, feeRate ?? await this.root.Fees.getFeeRate());
|
|
108
|
+
this.logger.debug("txsTransfer(): approve TX created, spender: " + spender.toString() +
|
|
109
|
+
" token: " + token.toString() + " amount: " + amount.toString(10));
|
|
110
|
+
return tx;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Checks whether an approve transaction is required for a given token and either returns the tx
|
|
114
|
+
* or null in case the approve is not required
|
|
115
|
+
*
|
|
116
|
+
* @param signer
|
|
117
|
+
* @param token token to approve for
|
|
118
|
+
* @param amount amount of the token to send
|
|
119
|
+
* @param spender spending contract address
|
|
120
|
+
* @param feeRate fee rate to use for the transactions
|
|
121
|
+
*/
|
|
122
|
+
async checkAndGetApproveTx(signer, token, amount, spender, feeRate) {
|
|
123
|
+
const alreadyApproved = await this.getTokenAllowance(spender, signer, token);
|
|
124
|
+
if (alreadyApproved >= amount)
|
|
125
|
+
return null;
|
|
126
|
+
return await this.Approve(signer, token, amount, spender, feeRate);
|
|
127
|
+
}
|
|
128
|
+
async getApproveFee(feeRate) {
|
|
129
|
+
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
130
|
+
return EVMFees_1.EVMFees.getGasFee(EVMTokens.GasCosts.APPROVE, feeRate);
|
|
131
|
+
}
|
|
132
|
+
async getTransferFee(feeRate) {
|
|
133
|
+
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
134
|
+
return EVMFees_1.EVMFees.getGasFee(EVMTokens.GasCosts.APPROVE, feeRate);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.EVMTokens = EVMTokens;
|
|
138
|
+
EVMTokens.ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
139
|
+
EVMTokens.GasCosts = {
|
|
140
|
+
TRANSFER: 80000 + 21000,
|
|
141
|
+
APPROVE: 80000 + 21000
|
|
142
|
+
};
|
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
import { EVMModule } from "../EVMModule";
|
|
2
|
-
import { Transaction, TransactionRequest } from "ethers";
|
|
3
|
-
import { EVMSigner } from "../../wallet/EVMSigner";
|
|
4
|
-
export type EVMTx = TransactionRequest;
|
|
5
|
-
export type EVMTxTrace = {
|
|
6
|
-
from: string;
|
|
7
|
-
gas: string;
|
|
8
|
-
gasused: string;
|
|
9
|
-
to: string;
|
|
10
|
-
input: string;
|
|
11
|
-
output: string;
|
|
12
|
-
error: string;
|
|
13
|
-
revertReason: string;
|
|
14
|
-
calls: EVMTxTrace[];
|
|
15
|
-
type: "CREATE" | "CALL" | "STATICCALL";
|
|
16
|
-
};
|
|
17
|
-
export declare class EVMTransactions extends EVMModule<any> {
|
|
18
|
-
private readonly latestConfirmedNonces;
|
|
19
|
-
private cbkBeforeTxSigned;
|
|
20
|
-
private cbkSendTransaction;
|
|
21
|
-
/**
|
|
22
|
-
* Waits for transaction confirmation using WS subscription and occasional HTTP polling, also re-sends
|
|
23
|
-
* the transaction at regular interval
|
|
24
|
-
*
|
|
25
|
-
* @param tx EVM transaction to wait for confirmation for
|
|
26
|
-
* @param abortSignal signal to abort waiting for tx confirmation
|
|
27
|
-
* @private
|
|
28
|
-
*/
|
|
29
|
-
private confirmTransaction;
|
|
30
|
-
/**
|
|
31
|
-
* Prepares starknet transactions, checks if the account is deployed, assigns nonces if needed & calls beforeTxSigned callback
|
|
32
|
-
*
|
|
33
|
-
* @param signer
|
|
34
|
-
* @param txs
|
|
35
|
-
* @private
|
|
36
|
-
*/
|
|
37
|
-
private prepareTransactions;
|
|
38
|
-
/**
|
|
39
|
-
* Sends out a signed transaction to the RPC
|
|
40
|
-
*
|
|
41
|
-
* @param tx EVM tx to send
|
|
42
|
-
* @param onBeforePublish a callback called before every transaction is published
|
|
43
|
-
* @private
|
|
44
|
-
*/
|
|
45
|
-
private sendSignedTransaction;
|
|
46
|
-
/**
|
|
47
|
-
* Prepares, signs, sends (in parallel or sequentially) & optionally waits for confirmation
|
|
48
|
-
* of a batch of EVM transactions
|
|
49
|
-
*
|
|
50
|
-
* @param signer
|
|
51
|
-
* @param txs transactions to send
|
|
52
|
-
* @param waitForConfirmation whether to wait for transaction confirmations (this also makes sure the transactions
|
|
53
|
-
* are re-sent at regular intervals)
|
|
54
|
-
* @param abortSignal abort signal to abort waiting for transaction confirmations
|
|
55
|
-
* @param parallel whether the send all the transaction at once in parallel or sequentially (such that transactions
|
|
56
|
-
* are executed in order)
|
|
57
|
-
* @param onBeforePublish a callback called before every transaction is published, NOTE: callback is not called when using browser-based wallet!
|
|
58
|
-
*/
|
|
59
|
-
sendAndConfirm(signer: EVMSigner, txs: TransactionRequest[], waitForConfirmation?: boolean, abortSignal?: AbortSignal, parallel?: boolean, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<string[]>;
|
|
60
|
-
/**
|
|
61
|
-
* Serializes the signed EVM transaction
|
|
62
|
-
*
|
|
63
|
-
* @param tx
|
|
64
|
-
*/
|
|
65
|
-
serializeTx(tx: Transaction): Promise<string>;
|
|
66
|
-
/**
|
|
67
|
-
* Deserializes signed EVM transaction
|
|
68
|
-
*
|
|
69
|
-
* @param txData
|
|
70
|
-
*/
|
|
71
|
-
deserializeTx(txData: string): Promise<Transaction>;
|
|
72
|
-
/**
|
|
73
|
-
* Gets the status of the raw starknet transaction
|
|
74
|
-
*
|
|
75
|
-
* @param tx
|
|
76
|
-
*/
|
|
77
|
-
getTxStatus(tx: string): Promise<"pending" | "success" | "not_found" | "reverted">;
|
|
78
|
-
/**
|
|
79
|
-
* Gets the status of the starknet transaction with a specific txId
|
|
80
|
-
*
|
|
81
|
-
* @param txId
|
|
82
|
-
*/
|
|
83
|
-
getTxIdStatus(txId: string): Promise<"pending" | "success" | "not_found" | "reverted">;
|
|
84
|
-
onBeforeTxSigned(callback: (tx: TransactionRequest) => Promise<void>): void;
|
|
85
|
-
offBeforeTxSigned(callback: (tx: TransactionRequest) => Promise<void>): boolean;
|
|
86
|
-
onSendTransaction(callback: (tx: string) => Promise<string>): void;
|
|
87
|
-
offSendTransaction(callback: (tx: string) => Promise<string>): boolean;
|
|
88
|
-
traceTransaction(txId: string): Promise<EVMTxTrace>;
|
|
89
|
-
}
|
|
1
|
+
import { EVMModule } from "../EVMModule";
|
|
2
|
+
import { Transaction, TransactionRequest } from "ethers";
|
|
3
|
+
import { EVMSigner } from "../../wallet/EVMSigner";
|
|
4
|
+
export type EVMTx = TransactionRequest;
|
|
5
|
+
export type EVMTxTrace = {
|
|
6
|
+
from: string;
|
|
7
|
+
gas: string;
|
|
8
|
+
gasused: string;
|
|
9
|
+
to: string;
|
|
10
|
+
input: string;
|
|
11
|
+
output: string;
|
|
12
|
+
error: string;
|
|
13
|
+
revertReason: string;
|
|
14
|
+
calls: EVMTxTrace[];
|
|
15
|
+
type: "CREATE" | "CALL" | "STATICCALL";
|
|
16
|
+
};
|
|
17
|
+
export declare class EVMTransactions extends EVMModule<any> {
|
|
18
|
+
private readonly latestConfirmedNonces;
|
|
19
|
+
private cbkBeforeTxSigned;
|
|
20
|
+
private cbkSendTransaction;
|
|
21
|
+
/**
|
|
22
|
+
* Waits for transaction confirmation using WS subscription and occasional HTTP polling, also re-sends
|
|
23
|
+
* the transaction at regular interval
|
|
24
|
+
*
|
|
25
|
+
* @param tx EVM transaction to wait for confirmation for
|
|
26
|
+
* @param abortSignal signal to abort waiting for tx confirmation
|
|
27
|
+
* @private
|
|
28
|
+
*/
|
|
29
|
+
private confirmTransaction;
|
|
30
|
+
/**
|
|
31
|
+
* Prepares starknet transactions, checks if the account is deployed, assigns nonces if needed & calls beforeTxSigned callback
|
|
32
|
+
*
|
|
33
|
+
* @param signer
|
|
34
|
+
* @param txs
|
|
35
|
+
* @private
|
|
36
|
+
*/
|
|
37
|
+
private prepareTransactions;
|
|
38
|
+
/**
|
|
39
|
+
* Sends out a signed transaction to the RPC
|
|
40
|
+
*
|
|
41
|
+
* @param tx EVM tx to send
|
|
42
|
+
* @param onBeforePublish a callback called before every transaction is published
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
private sendSignedTransaction;
|
|
46
|
+
/**
|
|
47
|
+
* Prepares, signs, sends (in parallel or sequentially) & optionally waits for confirmation
|
|
48
|
+
* of a batch of EVM transactions
|
|
49
|
+
*
|
|
50
|
+
* @param signer
|
|
51
|
+
* @param txs transactions to send
|
|
52
|
+
* @param waitForConfirmation whether to wait for transaction confirmations (this also makes sure the transactions
|
|
53
|
+
* are re-sent at regular intervals)
|
|
54
|
+
* @param abortSignal abort signal to abort waiting for transaction confirmations
|
|
55
|
+
* @param parallel whether the send all the transaction at once in parallel or sequentially (such that transactions
|
|
56
|
+
* are executed in order)
|
|
57
|
+
* @param onBeforePublish a callback called before every transaction is published, NOTE: callback is not called when using browser-based wallet!
|
|
58
|
+
*/
|
|
59
|
+
sendAndConfirm(signer: EVMSigner, txs: TransactionRequest[], waitForConfirmation?: boolean, abortSignal?: AbortSignal, parallel?: boolean, onBeforePublish?: (txId: string, rawTx: string) => Promise<void>): Promise<string[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Serializes the signed EVM transaction
|
|
62
|
+
*
|
|
63
|
+
* @param tx
|
|
64
|
+
*/
|
|
65
|
+
serializeTx(tx: Transaction): Promise<string>;
|
|
66
|
+
/**
|
|
67
|
+
* Deserializes signed EVM transaction
|
|
68
|
+
*
|
|
69
|
+
* @param txData
|
|
70
|
+
*/
|
|
71
|
+
deserializeTx(txData: string): Promise<Transaction>;
|
|
72
|
+
/**
|
|
73
|
+
* Gets the status of the raw starknet transaction
|
|
74
|
+
*
|
|
75
|
+
* @param tx
|
|
76
|
+
*/
|
|
77
|
+
getTxStatus(tx: string): Promise<"pending" | "success" | "not_found" | "reverted">;
|
|
78
|
+
/**
|
|
79
|
+
* Gets the status of the starknet transaction with a specific txId
|
|
80
|
+
*
|
|
81
|
+
* @param txId
|
|
82
|
+
*/
|
|
83
|
+
getTxIdStatus(txId: string): Promise<"pending" | "success" | "not_found" | "reverted">;
|
|
84
|
+
onBeforeTxSigned(callback: (tx: TransactionRequest) => Promise<void>): void;
|
|
85
|
+
offBeforeTxSigned(callback: (tx: TransactionRequest) => Promise<void>): boolean;
|
|
86
|
+
onSendTransaction(callback: (tx: string) => Promise<string>): void;
|
|
87
|
+
offSendTransaction(callback: (tx: string) => Promise<string>): boolean;
|
|
88
|
+
traceTransaction(txId: string): Promise<EVMTxTrace>;
|
|
89
|
+
}
|