@atomiqlabs/chain-starknet 1.0.8 → 2.0.0-beta.0
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/dist/index.d.ts +13 -9
- package/dist/index.js +13 -9
- package/dist/starknet/StarknetChainType.d.ts +6 -2
- package/dist/starknet/StarknetInitializer.d.ts +3 -2
- package/dist/starknet/StarknetInitializer.js +17 -6
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +28 -7
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +75 -20
- package/dist/starknet/{base → chain}/StarknetAction.d.ts +2 -2
- package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -0
- package/dist/starknet/chain/StarknetChainInterface.js +91 -0
- package/dist/starknet/{base → chain}/StarknetModule.d.ts +3 -3
- package/dist/starknet/{base → chain}/modules/StarknetAddresses.d.ts +1 -1
- package/dist/starknet/{base → chain}/modules/StarknetAddresses.js +1 -1
- package/dist/starknet/{base → chain}/modules/StarknetSignatures.d.ts +2 -2
- package/dist/starknet/{base → chain}/modules/StarknetTokens.js +2 -1
- package/dist/starknet/{base → chain}/modules/StarknetTransactions.d.ts +7 -1
- package/dist/starknet/{base → chain}/modules/StarknetTransactions.js +45 -16
- package/dist/starknet/contract/StarknetContractBase.d.ts +5 -5
- package/dist/starknet/contract/StarknetContractBase.js +5 -7
- package/dist/starknet/contract/StarknetContractModule.d.ts +8 -0
- package/dist/starknet/contract/StarknetContractModule.js +11 -0
- package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +15 -4
- package/dist/starknet/contract/modules/StarknetContractEvents.js +26 -6
- package/dist/starknet/events/StarknetChainEvents.d.ts +3 -1
- package/dist/starknet/events/StarknetChainEvents.js +9 -9
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +24 -6
- package/dist/starknet/events/StarknetChainEventsBrowser.js +116 -28
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -0
- package/dist/starknet/provider/RpcProviderWithRetries.js +32 -0
- package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -0
- package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +65 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +372 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -0
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -0
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -0
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -0
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +4 -22
- package/dist/starknet/swaps/StarknetSwapContract.js +23 -80
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +6 -5
- package/dist/starknet/swaps/StarknetSwapModule.js +5 -6
- package/dist/starknet/swaps/handlers/IHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +2 -2
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +2 -21
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -41
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +2 -2
- package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetLpVault.js +9 -9
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +1 -1
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +9 -9
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +1 -3
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +8 -11
- package/dist/starknet/wallet/StarknetSigner.js +1 -1
- package/dist/utils/Utils.d.ts +2 -2
- package/dist/utils/Utils.js +3 -1
- package/package.json +2 -2
- package/src/index.ts +15 -9
- package/src/starknet/StarknetChainType.ts +10 -2
- package/src/starknet/StarknetInitializer.ts +23 -7
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +104 -30
- package/src/starknet/{base → chain}/StarknetAction.ts +3 -3
- package/src/starknet/chain/StarknetChainInterface.ts +149 -0
- package/src/starknet/{base → chain}/StarknetModule.ts +3 -3
- package/src/starknet/{base → chain}/modules/StarknetAddresses.ts +1 -1
- package/src/starknet/{base → chain}/modules/StarknetSignatures.ts +2 -2
- package/src/starknet/{base → chain}/modules/StarknetTokens.ts +2 -1
- package/src/starknet/{base → chain}/modules/StarknetTransactions.ts +43 -18
- package/src/starknet/contract/StarknetContractBase.ts +9 -12
- package/src/starknet/contract/StarknetContractModule.ts +16 -0
- package/src/starknet/contract/modules/StarknetContractEvents.ts +33 -7
- package/src/starknet/events/StarknetChainEvents.ts +15 -11
- package/src/starknet/events/StarknetChainEventsBrowser.ts +168 -41
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -0
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -0
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +475 -0
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -0
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -0
- package/src/starknet/swaps/StarknetSwapContract.ts +28 -116
- package/src/starknet/swaps/StarknetSwapModule.ts +8 -8
- package/src/starknet/swaps/handlers/IHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
- package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +12 -61
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +2 -2
- package/src/starknet/swaps/modules/StarknetLpVault.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +9 -9
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +9 -13
- package/src/starknet/wallet/StarknetSigner.ts +1 -1
- package/src/utils/Utils.ts +4 -3
- package/dist/starknet/base/StarknetBase.d.ts +0 -34
- package/dist/starknet/base/StarknetBase.js +0 -29
- package/src/starknet/base/StarknetBase.ts +0 -56
- /package/dist/starknet/{base → chain}/StarknetAction.js +0 -0
- /package/dist/starknet/{base → chain}/StarknetModule.js +0 -0
- /package/dist/starknet/{base → chain}/modules/ERC20Abi.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/ERC20Abi.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetAccounts.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetAccounts.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetBlocks.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetBlocks.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetEvents.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetEvents.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetFees.d.ts +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetFees.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetSignatures.js +0 -0
- /package/dist/starknet/{base → chain}/modules/StarknetTokens.d.ts +0 -0
- /package/src/starknet/{base → chain}/modules/ERC20Abi.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetAccounts.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetBlocks.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetEvents.ts +0 -0
- /package/src/starknet/{base → chain}/modules/StarknetFees.ts +0 -0
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.StarknetLpVault = void 0;
|
|
4
4
|
const Utils_1 = require("../../../utils/Utils");
|
|
5
5
|
const StarknetSwapModule_1 = require("../StarknetSwapModule");
|
|
6
|
-
const StarknetAction_1 = require("../../
|
|
6
|
+
const StarknetAction_1 = require("../../chain/StarknetAction");
|
|
7
7
|
const starknet_1 = require("starknet");
|
|
8
8
|
class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
|
|
9
9
|
/**
|
|
@@ -16,7 +16,7 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
16
16
|
* @private
|
|
17
17
|
*/
|
|
18
18
|
Withdraw(signer, token, amount) {
|
|
19
|
-
return new StarknetAction_1.StarknetAction(signer, this.root, this.
|
|
19
|
+
return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.withdraw(token, starknet_1.cairo.uint256(amount), signer), StarknetLpVault.GasCosts.WITHDRAW);
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
22
|
* Action for depositing funds to the LP vault
|
|
@@ -28,7 +28,7 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
28
28
|
* @private
|
|
29
29
|
*/
|
|
30
30
|
Deposit(signer, token, amount) {
|
|
31
|
-
return new StarknetAction_1.StarknetAction(signer, this.root, this.
|
|
31
|
+
return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.deposit(token, starknet_1.cairo.uint256(amount)), StarknetLpVault.GasCosts.WITHDRAW);
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Returns intermediary's reputation & vault balance for a specific token
|
|
@@ -50,14 +50,14 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
50
50
|
* @param token
|
|
51
51
|
*/
|
|
52
52
|
async getIntermediaryReputation(address, token) {
|
|
53
|
-
const filter = Object.keys(this.
|
|
54
|
-
const rawReputation = await this.provider.callContract(this.
|
|
53
|
+
const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => starknet_1.cairo.tuple(address, token, claimHandler));
|
|
54
|
+
const rawReputation = await this.provider.callContract(this.swapContract.populateTransaction.get_reputation(filter));
|
|
55
55
|
const length = (0, Utils_1.toBigInt)(rawReputation.shift());
|
|
56
56
|
if (Number(length) !== filter.length)
|
|
57
57
|
throw new Error("getIntermediaryReputation(): Invalid response length");
|
|
58
58
|
const result = {};
|
|
59
|
-
Object.keys(this.
|
|
60
|
-
const handler = this.
|
|
59
|
+
Object.keys(this.contract.claimHandlersByAddress).forEach((address) => {
|
|
60
|
+
const handler = this.contract.claimHandlersByAddress[address];
|
|
61
61
|
result[handler.getType()] = {
|
|
62
62
|
successVolume: (0, Utils_1.toBigInt)({ low: rawReputation.shift(), high: rawReputation.shift() }),
|
|
63
63
|
successCount: (0, Utils_1.toBigInt)(rawReputation.shift()),
|
|
@@ -76,7 +76,7 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
76
76
|
* @param token
|
|
77
77
|
*/
|
|
78
78
|
async getIntermediaryBalance(address, token) {
|
|
79
|
-
const balance = (0, Utils_1.toBigInt)((await this.
|
|
79
|
+
const balance = (0, Utils_1.toBigInt)((await this.swapContract.get_balance([starknet_1.cairo.tuple(address, token)]))[0]);
|
|
80
80
|
this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: " + token.toString() +
|
|
81
81
|
" address: " + address + " amount: " + (balance == null ? "null" : balance.toString()));
|
|
82
82
|
return balance;
|
|
@@ -107,7 +107,7 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
107
107
|
*/
|
|
108
108
|
async txsDeposit(signer, token, amount, feeRate) {
|
|
109
109
|
//Approve first
|
|
110
|
-
const action = await this.root.Tokens.Approve(signer, this.
|
|
110
|
+
const action = await this.root.Tokens.Approve(signer, this.swapContract.address, token, amount);
|
|
111
111
|
action.add(this.Deposit(signer, token, amount));
|
|
112
112
|
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
113
113
|
this.logger.debug("txsDeposit(): deposit TX created, token: " + token.toString() +
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { RelaySynchronizer } from "@atomiqlabs/base";
|
|
2
2
|
import { StarknetSwapModule } from "../StarknetSwapModule";
|
|
3
3
|
import { StarknetSwapData } from "../StarknetSwapData";
|
|
4
|
-
import { StarknetTx } from "../../
|
|
4
|
+
import { StarknetTx } from "../../chain/modules/StarknetTransactions";
|
|
5
5
|
import { StarknetBtcStoredHeader } from "../../btcrelay/headers/StarknetBtcStoredHeader";
|
|
6
6
|
export declare class StarknetSwapClaim extends StarknetSwapModule {
|
|
7
7
|
private static readonly GasCosts;
|
|
@@ -4,8 +4,8 @@ exports.StarknetSwapClaim = void 0;
|
|
|
4
4
|
const base_1 = require("@atomiqlabs/base");
|
|
5
5
|
const Utils_1 = require("../../../utils/Utils");
|
|
6
6
|
const StarknetSwapModule_1 = require("../StarknetSwapModule");
|
|
7
|
-
const StarknetAction_1 = require("../../
|
|
8
|
-
const StarknetFees_1 = require("../../
|
|
7
|
+
const StarknetAction_1 = require("../../chain/StarknetAction");
|
|
8
|
+
const StarknetFees_1 = require("../../chain/modules/StarknetFees");
|
|
9
9
|
class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
|
|
10
10
|
/**
|
|
11
11
|
* Claim action which uses the provided witness for claiming the swap
|
|
@@ -18,7 +18,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
18
18
|
* @private
|
|
19
19
|
*/
|
|
20
20
|
Claim(signer, swapData, witness, claimHandlerGas) {
|
|
21
|
-
return new StarknetAction_1.StarknetAction(signer, this.root, this.
|
|
21
|
+
return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.claim(swapData.toEscrowStruct(), witness), (0, StarknetAction_1.sumStarknetGas)(swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM, claimHandlerGas));
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* Creates transactions claiming the swap using a secret (for HTLC swaps)
|
|
@@ -33,10 +33,10 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
33
33
|
async txsClaimWithSecret(signer, swapData, secret, checkExpiry, feeRate) {
|
|
34
34
|
//We need to be sure that this transaction confirms in time, otherwise we reveal the secret to the counterparty
|
|
35
35
|
// and won't claim the funds
|
|
36
|
-
if (checkExpiry && await this.
|
|
36
|
+
if (checkExpiry && await this.contract.isExpired(swapData.claimer.toString(), swapData)) {
|
|
37
37
|
throw new base_1.SwapDataVerificationError("Not enough time to reliably pay the invoice");
|
|
38
38
|
}
|
|
39
|
-
const claimHandler = this.
|
|
39
|
+
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
40
40
|
if (claimHandler == null)
|
|
41
41
|
throw new base_1.SwapDataVerificationError("Unknown claim handler!");
|
|
42
42
|
if (claimHandler.getType() !== base_1.ChainSwapType.HTLC)
|
|
@@ -61,7 +61,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
61
61
|
* @param feeRate fee rate to be used for the transactions
|
|
62
62
|
*/
|
|
63
63
|
async txsClaimWithTxData(signer, swapData, tx, requiredConfirmations, vout, commitedHeader, synchronizer, feeRate) {
|
|
64
|
-
const claimHandler = this.
|
|
64
|
+
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
65
65
|
if (claimHandler == null)
|
|
66
66
|
throw new base_1.SwapDataVerificationError("Unknown claim handler!");
|
|
67
67
|
if (claimHandler.getType() !== base_1.ChainSwapType.CHAIN_NONCED &&
|
|
@@ -74,7 +74,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
74
74
|
vout,
|
|
75
75
|
requiredConfirmations,
|
|
76
76
|
commitedHeader,
|
|
77
|
-
btcRelay: this.
|
|
77
|
+
btcRelay: this.contract.btcRelay,
|
|
78
78
|
synchronizer,
|
|
79
79
|
}, feeRate);
|
|
80
80
|
const action = this.Claim(signer, swapData, witness, claimHandler.getGas(swapData));
|
|
@@ -87,7 +87,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
87
87
|
async getClaimFee(swapData, feeRate) {
|
|
88
88
|
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
89
89
|
let gasRequired = swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM;
|
|
90
|
-
const claimHandler = this.
|
|
90
|
+
const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
|
|
91
91
|
if (claimHandler != null)
|
|
92
92
|
gasRequired = (0, StarknetAction_1.sumStarknetGas)(gasRequired, claimHandler.getGas(swapData));
|
|
93
93
|
return StarknetFees_1.StarknetFees.getGasFee(gasRequired.l1, feeRate);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StarknetSwapData } from "../StarknetSwapData";
|
|
2
2
|
import { StarknetSwapModule } from "../StarknetSwapModule";
|
|
3
3
|
import { StarknetSigner } from "../../wallet/StarknetSigner";
|
|
4
|
-
import { StarknetTx } from "../../
|
|
4
|
+
import { StarknetTx } from "../../chain/modules/StarknetTransactions";
|
|
5
5
|
export type StarknetPreFetchVerification = {
|
|
6
6
|
pendingBlockTime?: number;
|
|
7
7
|
};
|
|
@@ -4,9 +4,9 @@ exports.StarknetSwapInit = void 0;
|
|
|
4
4
|
const base_1 = require("@atomiqlabs/base");
|
|
5
5
|
const Utils_1 = require("../../../utils/Utils");
|
|
6
6
|
const buffer_1 = require("buffer");
|
|
7
|
-
const StarknetAction_1 = require("../../
|
|
7
|
+
const StarknetAction_1 = require("../../chain/StarknetAction");
|
|
8
8
|
const StarknetSwapModule_1 = require("../StarknetSwapModule");
|
|
9
|
-
const StarknetFees_1 = require("../../
|
|
9
|
+
const StarknetFees_1 = require("../../chain/modules/StarknetFees");
|
|
10
10
|
const Initialize = [
|
|
11
11
|
{ name: 'Swap hash', type: 'felt' },
|
|
12
12
|
{ name: 'Timeout', type: 'timestamp' }
|
|
@@ -21,7 +21,7 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
21
21
|
* @private
|
|
22
22
|
*/
|
|
23
23
|
Init(swapData, timeout, signature) {
|
|
24
|
-
return new StarknetAction_1.StarknetAction(swapData.payIn ? swapData.offerer : swapData.claimer, this.root, this.
|
|
24
|
+
return new StarknetAction_1.StarknetAction(swapData.payIn ? swapData.offerer : swapData.claimer, this.root, this.swapContract.populateTransaction.initialize(swapData.toEscrowStruct(), signature, timeout, swapData.extraData == null || swapData.extraData === "" ? [] : (0, Utils_1.bufferToBytes31Span)(buffer_1.Buffer.from(swapData.extraData, "hex")).map(Utils_1.toHex)), swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT);
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Returns auth prefix to be used with a specific swap, payIn=true & payIn=false use different prefixes (these
|
|
@@ -72,14 +72,14 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
72
72
|
async isSignatureValid(swapData, timeout, prefix, signature, preFetchData) {
|
|
73
73
|
const sender = swapData.isPayIn() ? swapData.offerer : swapData.claimer;
|
|
74
74
|
const signer = swapData.isPayIn() ? swapData.claimer : swapData.offerer;
|
|
75
|
-
if (!swapData.isPayIn() && await this.
|
|
75
|
+
if (!swapData.isPayIn() && await this.contract.isExpired(sender.toString(), swapData)) {
|
|
76
76
|
throw new base_1.SignatureVerificationError("Swap will expire too soon!");
|
|
77
77
|
}
|
|
78
78
|
if (prefix !== this.getAuthPrefix(swapData))
|
|
79
79
|
throw new base_1.SignatureVerificationError("Invalid prefix");
|
|
80
80
|
const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
|
|
81
81
|
const timeoutBN = BigInt(timeout);
|
|
82
|
-
const isExpired = (timeoutBN - currentTimestamp) < BigInt(this.
|
|
82
|
+
const isExpired = (timeoutBN - currentTimestamp) < BigInt(this.contract.authGracePeriod);
|
|
83
83
|
if (isExpired)
|
|
84
84
|
throw new base_1.SignatureVerificationError("Authorization expired!");
|
|
85
85
|
if (await this.isSignatureExpired(timeout, preFetchData))
|
|
@@ -100,7 +100,7 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
100
100
|
*/
|
|
101
101
|
async getSignatureExpiry(timeout) {
|
|
102
102
|
const now = Date.now();
|
|
103
|
-
const timeoutExpiryTime = (parseInt(timeout) - this.
|
|
103
|
+
const timeoutExpiryTime = (parseInt(timeout) - this.contract.authGracePeriod) * 1000;
|
|
104
104
|
if (timeoutExpiryTime < now)
|
|
105
105
|
return 0;
|
|
106
106
|
return timeoutExpiryTime;
|
|
@@ -133,7 +133,7 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
133
133
|
if (!skipChecks) {
|
|
134
134
|
const [_, payStatus] = await Promise.all([
|
|
135
135
|
(0, Utils_1.tryWithRetries)(() => this.isSignatureValid(swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError),
|
|
136
|
-
(0, Utils_1.tryWithRetries)(() => this.
|
|
136
|
+
(0, Utils_1.tryWithRetries)(() => this.contract.getCommitStatus(sender, swapData), this.retryPolicy)
|
|
137
137
|
]);
|
|
138
138
|
if (payStatus !== base_1.SwapCommitStatus.NOT_COMMITED)
|
|
139
139
|
throw new base_1.SwapDataVerificationError("Invoice already being paid for or paid");
|
|
@@ -141,9 +141,9 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
141
141
|
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
142
142
|
const initAction = this.Init(swapData, BigInt(timeout), JSON.parse(signature));
|
|
143
143
|
if (swapData.payIn)
|
|
144
|
-
initAction.addAction(this.root.Tokens.Approve(sender, this.
|
|
144
|
+
initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.token, swapData.amount), 0); //Add erc20 approve
|
|
145
145
|
if (swapData.getTotalDeposit() !== 0n)
|
|
146
|
-
initAction.addAction(this.root.Tokens.Approve(sender, this.
|
|
146
|
+
initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.feeToken, swapData.getTotalDeposit()), 0); //Add deposit erc20 approve
|
|
147
147
|
this.logger.debug("txsInitPayIn(): create swap init TX, swap: " + swapData.getClaimHash() +
|
|
148
148
|
" feerate: " + feeRate);
|
|
149
149
|
return [await initAction.tx(feeRate)];
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { StarknetSwapModule } from "../StarknetSwapModule";
|
|
2
2
|
import { StarknetSwapData } from "../StarknetSwapData";
|
|
3
|
-
import {
|
|
4
|
-
import { StarknetTx } from "../../base/modules/StarknetTransactions";
|
|
3
|
+
import { StarknetTx } from "../../chain/modules/StarknetTransactions";
|
|
5
4
|
import { StarknetSigner } from "../../wallet/StarknetSigner";
|
|
6
5
|
export declare class StarknetSwapRefund extends StarknetSwapModule {
|
|
7
6
|
private static readonly GasCosts;
|
|
@@ -27,7 +26,6 @@ export declare class StarknetSwapRefund extends StarknetSwapModule {
|
|
|
27
26
|
* @private
|
|
28
27
|
*/
|
|
29
28
|
private RefundWithSignature;
|
|
30
|
-
constructor(root: StarknetSwapContract);
|
|
31
29
|
signSwapRefund(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<{
|
|
32
30
|
prefix: string;
|
|
33
31
|
timeout: string;
|
|
@@ -4,8 +4,8 @@ exports.StarknetSwapRefund = void 0;
|
|
|
4
4
|
const base_1 = require("@atomiqlabs/base");
|
|
5
5
|
const Utils_1 = require("../../../utils/Utils");
|
|
6
6
|
const StarknetSwapModule_1 = require("../StarknetSwapModule");
|
|
7
|
-
const StarknetAction_1 = require("../../
|
|
8
|
-
const StarknetFees_1 = require("../../
|
|
7
|
+
const StarknetAction_1 = require("../../chain/StarknetAction");
|
|
8
|
+
const StarknetFees_1 = require("../../chain/modules/StarknetFees");
|
|
9
9
|
const Refund = [
|
|
10
10
|
{ name: 'Swap hash', type: 'felt' },
|
|
11
11
|
{ name: 'Timeout', type: 'timestamp' }
|
|
@@ -22,7 +22,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
22
22
|
* @private
|
|
23
23
|
*/
|
|
24
24
|
Refund(signer, swapData, witness, handlerGas) {
|
|
25
|
-
return new StarknetAction_1.StarknetAction(signer, this.root, this.
|
|
25
|
+
return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.refund(swapData.toEscrowStruct(), witness), (0, StarknetAction_1.sumStarknetGas)(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, handlerGas));
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
28
|
* Action for cooperative refunding with signature
|
|
@@ -35,10 +35,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
35
35
|
* @private
|
|
36
36
|
*/
|
|
37
37
|
RefundWithSignature(sender, swapData, timeout, signature) {
|
|
38
|
-
return new StarknetAction_1.StarknetAction(sender, this.root, this.
|
|
39
|
-
}
|
|
40
|
-
constructor(root) {
|
|
41
|
-
super(root);
|
|
38
|
+
return new StarknetAction_1.StarknetAction(sender, this.root, this.swapContract.populateTransaction.cooperative_refund(swapData.toEscrowStruct(), signature, BigInt(timeout)), swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND);
|
|
42
39
|
}
|
|
43
40
|
async signSwapRefund(signer, swapData, authorizationTimeout) {
|
|
44
41
|
const authPrefix = "refund";
|
|
@@ -58,7 +55,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
58
55
|
throw new base_1.SignatureVerificationError("Invalid prefix");
|
|
59
56
|
const expiryTimestamp = BigInt(timeout);
|
|
60
57
|
const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
|
|
61
|
-
const isExpired = (expiryTimestamp - currentTimestamp) < BigInt(this.
|
|
58
|
+
const isExpired = (expiryTimestamp - currentTimestamp) < BigInt(this.contract.authGracePeriod);
|
|
62
59
|
if (isExpired)
|
|
63
60
|
throw new base_1.SignatureVerificationError("Authorization expired!");
|
|
64
61
|
const valid = await this.root.Signatures.isValidSignature(signature, swapData.claimer, Refund, "Refund", {
|
|
@@ -80,10 +77,10 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
80
77
|
* @param witnessData
|
|
81
78
|
*/
|
|
82
79
|
async txsRefund(signer, swapData, check, feeRate, witnessData) {
|
|
83
|
-
const refundHandler = this.
|
|
80
|
+
const refundHandler = this.contract.refundHandlersByAddress[swapData.refundHandler.toLowerCase()];
|
|
84
81
|
if (refundHandler == null)
|
|
85
82
|
throw new Error("Invalid refund handler");
|
|
86
|
-
if (check && !await (0, Utils_1.tryWithRetries)(() => this.
|
|
83
|
+
if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isRequestRefundable(swapData.offerer.toString(), swapData), this.retryPolicy)) {
|
|
87
84
|
throw new base_1.SwapDataVerificationError("Not refundable yet!");
|
|
88
85
|
}
|
|
89
86
|
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
@@ -105,7 +102,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
105
102
|
* @param feeRate fee rate to be used for the transactions
|
|
106
103
|
*/
|
|
107
104
|
async txsRefundWithAuthorization(signer, swapData, timeout, prefix, signature, check, feeRate) {
|
|
108
|
-
if (check && !await (0, Utils_1.tryWithRetries)(() => this.
|
|
105
|
+
if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isCommited(swapData), this.retryPolicy)) {
|
|
109
106
|
throw new base_1.SwapDataVerificationError("Not correctly committed");
|
|
110
107
|
}
|
|
111
108
|
await (0, Utils_1.tryWithRetries)(() => this.isSignatureValid(swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError);
|
|
@@ -19,7 +19,7 @@ class StarknetSigner {
|
|
|
19
19
|
//TODO: Introduce proper nonce management!
|
|
20
20
|
async getNonce() {
|
|
21
21
|
try {
|
|
22
|
-
return BigInt(await this.account.getNonceForAddress(this.getAddress()));
|
|
22
|
+
return BigInt(await this.account.getNonceForAddress(this.getAddress(), "pending"));
|
|
23
23
|
}
|
|
24
24
|
catch (e) {
|
|
25
25
|
if (e.message != null && e.message.includes("20: Contract not found")) {
|
package/dist/utils/Utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BigNumberish, Uint256 } from "starknet";
|
|
2
|
-
import { StarknetTx } from "../starknet/
|
|
2
|
+
import { StarknetTx } from "../starknet/chain/modules/StarknetTransactions";
|
|
3
3
|
import { Buffer } from "buffer";
|
|
4
4
|
import { StarknetSwapData } from "../starknet/swaps/StarknetSwapData";
|
|
5
5
|
import { IClaimHandler } from "../starknet/swaps/handlers/claim/ClaimHandlers";
|
|
@@ -22,7 +22,7 @@ export declare function calculateHash(tx: StarknetTx): string;
|
|
|
22
22
|
export declare function u32ArrayToBuffer(arr: BigNumberish[]): Buffer;
|
|
23
23
|
export declare function bufferToU32Array(buffer: Buffer): number[];
|
|
24
24
|
export declare function u32ReverseEndianness(value: number): number;
|
|
25
|
-
export declare function bigNumberishToBuffer(value: BigNumberish | Uint256, length
|
|
25
|
+
export declare function bigNumberishToBuffer(value: BigNumberish | Uint256, length?: number): Buffer;
|
|
26
26
|
export declare function toBigInt(value: BigNumberish | Uint256): bigint;
|
|
27
27
|
export declare function bytes31SpanToBuffer(span: BigNumberish[], length: number): Buffer;
|
|
28
28
|
export declare function bufferToBytes31Span(buffer: Buffer, startIndex?: number, endIndex?: number): BigNumberish[];
|
package/dist/utils/Utils.js
CHANGED
|
@@ -162,7 +162,9 @@ function bigNumberishToBuffer(value, length) {
|
|
|
162
162
|
else {
|
|
163
163
|
value = value.toString(16);
|
|
164
164
|
}
|
|
165
|
-
|
|
165
|
+
if (length != null)
|
|
166
|
+
value = value.padStart(length * 2, "0");
|
|
167
|
+
const buff = buffer_1.Buffer.from(value, "hex");
|
|
166
168
|
if (buff.length > length)
|
|
167
169
|
return buff.slice(buff.length - length);
|
|
168
170
|
return buff;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atomiqlabs/chain-starknet",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-beta.0",
|
|
4
4
|
"description": "Starknet specific base implementation",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types:": "./dist/index.d.ts",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"author": "adambor",
|
|
23
23
|
"license": "ISC",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@atomiqlabs/base": "^
|
|
25
|
+
"@atomiqlabs/base": "^9.0.0-beta.0",
|
|
26
26
|
"@noble/hashes": "^1.7.1",
|
|
27
27
|
"@scure/btc-signer": "1.6.0",
|
|
28
28
|
"abi-wan-kanabi": "2.2.4",
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export * from "./starknet/
|
|
2
|
-
export * from "./starknet/
|
|
3
|
-
export * from "./starknet/
|
|
1
|
+
export * from "./starknet/chain/StarknetAction";
|
|
2
|
+
export * from "./starknet/chain/StarknetChainInterface";
|
|
3
|
+
export * from "./starknet/chain/StarknetModule";
|
|
4
4
|
|
|
5
|
-
export * from "./starknet/
|
|
6
|
-
export * from "./starknet/
|
|
7
|
-
export * from "./starknet/
|
|
8
|
-
export * from "./starknet/
|
|
9
|
-
export * from "./starknet/
|
|
10
|
-
export * from "./starknet/
|
|
5
|
+
export * from "./starknet/chain/modules/StarknetFees";
|
|
6
|
+
export * from "./starknet/chain/modules/StarknetEvents";
|
|
7
|
+
export * from "./starknet/chain/modules/StarknetTokens";
|
|
8
|
+
export * from "./starknet/chain/modules/StarknetAddresses";
|
|
9
|
+
export * from "./starknet/chain/modules/StarknetTransactions";
|
|
10
|
+
export * from "./starknet/chain/modules/StarknetSignatures";
|
|
11
11
|
|
|
12
12
|
export * from "./starknet/btcrelay/headers/StarknetBtcStoredHeader";
|
|
13
13
|
export * from "./starknet/btcrelay/headers/StarknetBtcHeader";
|
|
@@ -39,3 +39,9 @@ export * from "./starknet/wallet/StarknetKeypairWallet";
|
|
|
39
39
|
|
|
40
40
|
export * from "./starknet/StarknetChainType";
|
|
41
41
|
export * from "./starknet/StarknetInitializer";
|
|
42
|
+
|
|
43
|
+
export * from "./starknet/spv_swap/StarknetSpvVaultContract";
|
|
44
|
+
export * from "./starknet/spv_swap/StarknetSpvVaultData";
|
|
45
|
+
export * from "./starknet/spv_swap/StarknetSpvWithdrawalData";
|
|
46
|
+
|
|
47
|
+
export * from "./starknet/provider/RpcProviderWithRetries";
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import {ChainType} from "@atomiqlabs/base";
|
|
2
|
-
import {StarknetTx} from "./
|
|
2
|
+
import {StarknetTx} from "./chain/modules/StarknetTransactions";
|
|
3
3
|
import {StarknetSigner} from "./wallet/StarknetSigner";
|
|
4
4
|
import {StarknetSwapData} from "./swaps/StarknetSwapData";
|
|
5
5
|
import {StarknetSwapContract} from "./swaps/StarknetSwapContract";
|
|
6
6
|
import {StarknetChainEventsBrowser} from "./events/StarknetChainEventsBrowser";
|
|
7
7
|
import {StarknetBtcRelay} from "./btcrelay/StarknetBtcRelay";
|
|
8
8
|
import {StarknetPreFetchVerification} from "./swaps/modules/StarknetSwapInit";
|
|
9
|
+
import {StarknetChainInterface} from "./chain/StarknetChainInterface";
|
|
10
|
+
import {StarknetSpvVaultData} from "./spv_swap/StarknetSpvVaultData";
|
|
11
|
+
import {StarknetSpvWithdrawalData} from "./spv_swap/StarknetSpvWithdrawalData";
|
|
12
|
+
import {StarknetSpvVaultContract} from "./spv_swap/StarknetSpvVaultContract";
|
|
9
13
|
|
|
10
14
|
export type StarknetChainType = ChainType<
|
|
11
15
|
"STARKNET",
|
|
@@ -15,6 +19,10 @@ export type StarknetChainType = ChainType<
|
|
|
15
19
|
StarknetSigner,
|
|
16
20
|
StarknetSwapData,
|
|
17
21
|
StarknetSwapContract,
|
|
22
|
+
StarknetChainInterface,
|
|
18
23
|
StarknetChainEventsBrowser,
|
|
19
|
-
StarknetBtcRelay<any
|
|
24
|
+
StarknetBtcRelay<any>,
|
|
25
|
+
StarknetSpvVaultData,
|
|
26
|
+
StarknetSpvWithdrawalData,
|
|
27
|
+
StarknetSpvVaultContract
|
|
20
28
|
>;
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import {constants, Provider, RpcProvider} from "starknet";
|
|
2
|
-
import {StarknetFees} from "./
|
|
3
|
-
import {StarknetRetryPolicy} from "./
|
|
2
|
+
import {StarknetFees} from "./chain/modules/StarknetFees";
|
|
3
|
+
import {StarknetChainInterface, StarknetRetryPolicy} from "./chain/StarknetChainInterface";
|
|
4
4
|
import {StarknetBtcRelay} from "./btcrelay/StarknetBtcRelay";
|
|
5
5
|
import {StarknetSwapContract} from "./swaps/StarknetSwapContract";
|
|
6
6
|
import {StarknetChainEventsBrowser} from "./events/StarknetChainEventsBrowser";
|
|
7
7
|
import {BaseTokenType, BitcoinNetwork, BitcoinRpc, ChainData, ChainInitializer} from "@atomiqlabs/base";
|
|
8
8
|
import {StarknetChainType} from "./StarknetChainType";
|
|
9
9
|
import {StarknetSwapData} from "./swaps/StarknetSwapData";
|
|
10
|
+
import {StarknetSpvVaultContract} from "./spv_swap/StarknetSpvVaultContract";
|
|
11
|
+
import {StarknetSpvVaultData} from "./spv_swap/StarknetSpvVaultData";
|
|
12
|
+
import {StarknetSpvWithdrawalData} from "./spv_swap/StarknetSpvWithdrawalData";
|
|
13
|
+
import {RpcProviderWithRetries} from "./provider/RpcProviderWithRetries";
|
|
10
14
|
|
|
11
15
|
export type StarknetAssetsType = BaseTokenType<"ETH" | "STRK" | "WBTC">;
|
|
12
16
|
export const StarknetAssets: StarknetAssetsType = {
|
|
@@ -33,6 +37,7 @@ export type StarknetOptions = {
|
|
|
33
37
|
|
|
34
38
|
swapContract?: string,
|
|
35
39
|
btcRelayContract?: string,
|
|
40
|
+
spvVaultContract?: string,
|
|
36
41
|
|
|
37
42
|
fees?: StarknetFees
|
|
38
43
|
}
|
|
@@ -43,7 +48,7 @@ export function initializeStarknet(
|
|
|
43
48
|
network: BitcoinNetwork
|
|
44
49
|
): ChainData<StarknetChainType> {
|
|
45
50
|
const provider = typeof(options.rpcUrl)==="string" ?
|
|
46
|
-
new
|
|
51
|
+
new RpcProviderWithRetries({nodeUrl: options.rpcUrl}) :
|
|
47
52
|
options.rpcUrl;
|
|
48
53
|
|
|
49
54
|
const Fees = options.fees ?? new StarknetFees(provider, "ETH");
|
|
@@ -51,21 +56,32 @@ export function initializeStarknet(
|
|
|
51
56
|
const chainId = options.chainId ??
|
|
52
57
|
(network===BitcoinNetwork.MAINNET ? constants.StarknetChainId.SN_MAIN : constants.StarknetChainId.SN_SEPOLIA);
|
|
53
58
|
|
|
59
|
+
const chainInterface = new StarknetChainInterface(chainId, provider, options.retryPolicy, Fees);
|
|
60
|
+
|
|
54
61
|
const btcRelay = new StarknetBtcRelay(
|
|
55
|
-
|
|
62
|
+
chainInterface, bitcoinRpc, options.btcRelayContract
|
|
56
63
|
);
|
|
57
64
|
|
|
58
65
|
const swapContract = new StarknetSwapContract(
|
|
59
|
-
|
|
66
|
+
chainInterface, btcRelay, options.swapContract
|
|
60
67
|
);
|
|
61
|
-
|
|
68
|
+
|
|
69
|
+
const spvVaultContract = new StarknetSpvVaultContract(
|
|
70
|
+
chainInterface, btcRelay, bitcoinRpc, options.spvVaultContract
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
const chainEvents = new StarknetChainEventsBrowser(chainInterface, swapContract, spvVaultContract);
|
|
62
74
|
|
|
63
75
|
return {
|
|
64
76
|
chainId: "STARKNET",
|
|
65
77
|
btcRelay,
|
|
78
|
+
chainInterface,
|
|
66
79
|
swapContract,
|
|
67
80
|
chainEvents,
|
|
68
|
-
swapDataConstructor: StarknetSwapData
|
|
81
|
+
swapDataConstructor: StarknetSwapData,
|
|
82
|
+
spvVaultContract,
|
|
83
|
+
spvVaultDataConstructor: StarknetSpvVaultData,
|
|
84
|
+
spvVaultWithdrawalDataConstructor: StarknetSpvWithdrawalData
|
|
69
85
|
}
|
|
70
86
|
};
|
|
71
87
|
|