@atomiqlabs/chain-starknet 5.0.2 → 5.1.1
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/starknet/StarknetInitializer.d.ts +9 -1
- package/dist/starknet/StarknetInitializer.js +8 -3
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +5 -5
- package/dist/starknet/chain/StarknetAction.d.ts +2 -10
- package/dist/starknet/chain/StarknetAction.js +21 -21
- package/dist/starknet/chain/modules/StarknetAccounts.js +1 -1
- package/dist/starknet/chain/modules/StarknetFees.d.ts +30 -8
- package/dist/starknet/chain/modules/StarknetFees.js +40 -26
- package/dist/starknet/chain/modules/StarknetSignatures.js +1 -1
- package/dist/starknet/chain/modules/StarknetTokens.d.ts +6 -4
- package/dist/starknet/chain/modules/StarknetTokens.js +2 -2
- package/dist/starknet/chain/modules/StarknetTransactions.js +2 -2
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +1 -2
- package/dist/starknet/events/StarknetChainEventsBrowser.js +1 -3
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +8 -8
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +1 -0
- package/dist/starknet/swaps/EscrowManagerAbi.d.ts +26 -0
- package/dist/starknet/swaps/EscrowManagerAbi.js +36 -0
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +1 -1
- package/dist/starknet/swaps/StarknetSwapContract.js +3 -3
- package/dist/starknet/swaps/StarknetSwapData.js +9 -1
- package/dist/starknet/swaps/handlers/IHandler.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +1 -1
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +1 -1
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +1 -1
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +1 -1
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +1 -1
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +1 -1
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +1 -1
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +1 -1
- package/dist/starknet/swaps/modules/StarknetLpVault.js +2 -2
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +64 -6
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +4 -4
- package/dist/utils/Utils.js +12 -8
- package/package.json +2 -2
- package/src/starknet/StarknetInitializer.ts +17 -4
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +9 -6
- package/src/starknet/chain/StarknetAction.ts +15 -20
- package/src/starknet/chain/modules/StarknetAccounts.ts +1 -1
- package/src/starknet/chain/modules/StarknetFees.ts +53 -31
- package/src/starknet/chain/modules/StarknetSignatures.ts +5 -4
- package/src/starknet/chain/modules/StarknetTokens.ts +2 -2
- package/src/starknet/chain/modules/StarknetTransactions.ts +2 -2
- package/src/starknet/events/StarknetChainEventsBrowser.ts +1 -3
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +8 -8
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +1 -0
- package/src/starknet/swaps/EscrowManagerAbi.ts +36 -0
- package/src/starknet/swaps/StarknetSwapContract.ts +4 -4
- package/src/starknet/swaps/StarknetSwapData.ts +10 -2
- package/src/starknet/swaps/handlers/IHandler.ts +1 -1
- 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 +2 -2
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +3 -3
- package/src/starknet/swaps/modules/StarknetLpVault.ts +2 -2
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +10 -10
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +64 -7
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +6 -7
- package/src/utils/Utils.ts +10 -6
|
@@ -19,8 +19,8 @@ const ESCROW_STATE_COMMITTED = 1;
|
|
|
19
19
|
const ESCROW_STATE_CLAIMED = 2;
|
|
20
20
|
const ESCROW_STATE_REFUNDED = 3;
|
|
21
21
|
const swapContractAddreses = {
|
|
22
|
-
[starknet_1.constants.StarknetChainId.SN_SEPOLIA]: "
|
|
23
|
-
[starknet_1.constants.StarknetChainId.SN_MAIN]: "
|
|
22
|
+
[starknet_1.constants.StarknetChainId.SN_SEPOLIA]: "0x017bf50dd28b6d823a231355bb25813d4396c8e19d2df03026038714a22f0413",
|
|
23
|
+
[starknet_1.constants.StarknetChainId.SN_MAIN]: "0x04f278e1f19e495c3b1dd35ef307c4f7510768ed95481958fbae588bd173f79a"
|
|
24
24
|
};
|
|
25
25
|
const defaultClaimAddresses = {
|
|
26
26
|
[starknet_1.constants.StarknetChainId.SN_SEPOLIA]: {
|
|
@@ -75,7 +75,7 @@ class StarknetSwapContract extends StarknetContractBase_1.StarknetContractBase {
|
|
|
75
75
|
handlerAddresses.claim = { ...defaultClaimAddresses[chainInterface.starknetChainId], ...handlerAddresses.claim };
|
|
76
76
|
ClaimHandlers_1.claimHandlersList.forEach(handlerCtor => {
|
|
77
77
|
const handler = new handlerCtor(handlerAddresses.claim[handlerCtor.type]);
|
|
78
|
-
this.claimHandlersByAddress[handler.address] = handler;
|
|
78
|
+
this.claimHandlersByAddress[(0, Utils_1.toHex)(handler.address)] = handler;
|
|
79
79
|
this.claimHandlersBySwapType[handlerCtor.type] = handler;
|
|
80
80
|
});
|
|
81
81
|
this.timelockRefundHandler = new TimelockRefundHandler_1.TimelockRefundHandler(handlerAddresses.refund.timelock);
|
|
@@ -258,7 +258,8 @@ class StarknetSwapData extends base_1.SwapData {
|
|
|
258
258
|
amount: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.amount)),
|
|
259
259
|
fee_token: this.feeToken,
|
|
260
260
|
security_deposit: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.securityDeposit)),
|
|
261
|
-
claimer_bounty: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.claimerBounty))
|
|
261
|
+
claimer_bounty: starknet_1.cairo.uint256((0, Utils_1.toBigInt)(this.claimerBounty)),
|
|
262
|
+
success_action: new starknet_1.CairoOption(starknet_1.CairoOptionVariant.None) //For now enforce no success action
|
|
262
263
|
};
|
|
263
264
|
}
|
|
264
265
|
static fromSerializedFeltArray(span, claimHandlerImpl) {
|
|
@@ -274,6 +275,13 @@ class StarknetSwapData extends base_1.SwapData {
|
|
|
274
275
|
const feeToken = (0, Utils_1.toHex)(span.shift());
|
|
275
276
|
const securityDeposit = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
|
|
276
277
|
const claimerBounty = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
|
|
278
|
+
const hasSuccessAction = (0, Utils_1.toBigInt)(span.shift()) === 0n;
|
|
279
|
+
if (hasSuccessAction) {
|
|
280
|
+
const executionHash = (0, Utils_1.toHex)(span.shift());
|
|
281
|
+
const executionExpiry = (0, Utils_1.toBigInt)(span.shift());
|
|
282
|
+
const executionFee = (0, Utils_1.toBigInt)({ low: span.shift(), high: span.shift() });
|
|
283
|
+
// throw new Error("Success action not allowed!");
|
|
284
|
+
}
|
|
277
285
|
return new StarknetSwapData(offerer, claimer, token, refundHandler, claimHandler, payOut, payIn, reputation, sequence, claimData, refundData, amount, feeToken, securityDeposit, claimerBounty, claimHandlerImpl.getType(), null);
|
|
278
286
|
}
|
|
279
287
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StarknetSwapData } from "../StarknetSwapData";
|
|
2
2
|
import { BigNumberish } from "starknet";
|
|
3
|
-
import { StarknetGas } from "../../chain/StarknetAction";
|
|
4
3
|
import { StarknetTx } from "../../chain/modules/StarknetTransactions";
|
|
4
|
+
import { StarknetGas } from "../../chain/modules/StarknetFees";
|
|
5
5
|
export interface IHandler<TCommitmentData, TWitnessData> {
|
|
6
6
|
readonly address: string;
|
|
7
7
|
getCommitment(data: TCommitmentData): BigNumberish;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChainSwapType } from "@atomiqlabs/base";
|
|
2
|
-
import { StarknetGas } from "../../../chain/StarknetAction";
|
|
3
2
|
import { IHandler } from "../IHandler";
|
|
4
3
|
import { BigNumberish } from "starknet";
|
|
4
|
+
import { StarknetGas } from "../../../chain/modules/StarknetFees";
|
|
5
5
|
export interface IClaimHandler<C, W> extends IHandler<C, W> {
|
|
6
6
|
getType(): ChainSwapType;
|
|
7
7
|
parseWitnessResult(result: BigNumberish[]): string;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { StarknetSwapData } from "../../StarknetSwapData";
|
|
2
2
|
import { BigNumberish } from "starknet";
|
|
3
3
|
import { ChainSwapType } from "@atomiqlabs/base";
|
|
4
|
-
import { StarknetGas } from "../../../chain/StarknetAction";
|
|
5
4
|
import { Buffer } from "buffer";
|
|
6
5
|
import { StarknetTx } from "../../../chain/modules/StarknetTransactions";
|
|
7
6
|
import { IClaimHandler } from "./ClaimHandlers";
|
|
7
|
+
import { StarknetGas } from "../../../chain/modules/StarknetFees";
|
|
8
8
|
export declare class HashlockClaimHandler implements IClaimHandler<Buffer, string> {
|
|
9
9
|
readonly address: string;
|
|
10
10
|
static readonly type: ChainSwapType;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { StarknetSwapData } from "../../../StarknetSwapData";
|
|
2
|
-
import { StarknetGas } from "../../../../chain/StarknetAction";
|
|
3
2
|
import { ChainSwapType } from "@atomiqlabs/base";
|
|
4
3
|
import { BigNumberish } from "starknet";
|
|
5
4
|
import { StarknetTx } from "../../../../chain/modules/StarknetTransactions";
|
|
6
5
|
import { BitcoinCommitmentData, IBitcoinClaimHandler } from "./IBitcoinClaimHandler";
|
|
7
6
|
import { BitcoinOutputWitnessData } from "./BitcoinOutputClaimHandler";
|
|
8
7
|
import { Buffer } from "buffer";
|
|
8
|
+
import { StarknetGas } from "../../../../chain/modules/StarknetFees";
|
|
9
9
|
export type BitcoinNoncedOutputCommitmentData = {
|
|
10
10
|
output: Buffer;
|
|
11
11
|
amount: bigint;
|
|
@@ -45,4 +45,4 @@ class BitcoinNoncedOutputClaimHandler extends IBitcoinClaimHandler_1.IBitcoinCla
|
|
|
45
45
|
}
|
|
46
46
|
exports.BitcoinNoncedOutputClaimHandler = BitcoinNoncedOutputClaimHandler;
|
|
47
47
|
BitcoinNoncedOutputClaimHandler.type = base_1.ChainSwapType.CHAIN_NONCED;
|
|
48
|
-
BitcoinNoncedOutputClaimHandler.gas = {
|
|
48
|
+
BitcoinNoncedOutputClaimHandler.gas = { l1DataGas: 0, l2Gas: 20000 * 40000, l1Gas: 0 };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { StarknetSwapData } from "../../../StarknetSwapData";
|
|
2
|
-
import { StarknetGas } from "../../../../chain/StarknetAction";
|
|
3
2
|
import { ChainSwapType } from "@atomiqlabs/base";
|
|
4
3
|
import { BigNumberish } from "starknet";
|
|
5
4
|
import { StarknetTx } from "../../../../chain/modules/StarknetTransactions";
|
|
6
5
|
import { BitcoinCommitmentData, BitcoinWitnessData, IBitcoinClaimHandler } from "./IBitcoinClaimHandler";
|
|
7
6
|
import { Buffer } from "buffer";
|
|
7
|
+
import { StarknetGas } from "../../../../chain/modules/StarknetFees";
|
|
8
8
|
export type BitcoinOutputCommitmentData = {
|
|
9
9
|
output: Buffer;
|
|
10
10
|
amount: bigint;
|
|
@@ -37,4 +37,4 @@ class BitcoinOutputClaimHandler extends IBitcoinClaimHandler_1.IBitcoinClaimHand
|
|
|
37
37
|
}
|
|
38
38
|
exports.BitcoinOutputClaimHandler = BitcoinOutputClaimHandler;
|
|
39
39
|
BitcoinOutputClaimHandler.type = base_1.ChainSwapType.CHAIN;
|
|
40
|
-
BitcoinOutputClaimHandler.gas = {
|
|
40
|
+
BitcoinOutputClaimHandler.gas = { l1DataGas: 0, l2Gas: 20000 * 40000, l1Gas: 0 };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { StarknetSwapData } from "../../../StarknetSwapData";
|
|
2
|
-
import { StarknetGas } from "../../../../chain/StarknetAction";
|
|
3
2
|
import { ChainSwapType } from "@atomiqlabs/base";
|
|
4
3
|
import { BigNumberish } from "starknet";
|
|
5
4
|
import { StarknetTx } from "../../../../chain/modules/StarknetTransactions";
|
|
6
5
|
import { BitcoinCommitmentData, BitcoinWitnessData, IBitcoinClaimHandler } from "./IBitcoinClaimHandler";
|
|
6
|
+
import { StarknetGas } from "../../../../chain/modules/StarknetFees";
|
|
7
7
|
export type BitcoinTxIdCommitmentData = {
|
|
8
8
|
txId: string;
|
|
9
9
|
};
|
|
@@ -27,4 +27,4 @@ class BitcoinTxIdClaimHandler extends IBitcoinClaimHandler_1.IBitcoinClaimHandle
|
|
|
27
27
|
}
|
|
28
28
|
exports.BitcoinTxIdClaimHandler = BitcoinTxIdClaimHandler;
|
|
29
29
|
BitcoinTxIdClaimHandler.type = base_1.ChainSwapType.CHAIN_TXID;
|
|
30
|
-
BitcoinTxIdClaimHandler.gas = {
|
|
30
|
+
BitcoinTxIdClaimHandler.gas = { l1DataGas: 0, l2Gas: 20000 * 40000, l1Gas: 0 };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { IClaimHandler } from "../ClaimHandlers";
|
|
2
2
|
import { StarknetSwapData } from "../../../StarknetSwapData";
|
|
3
|
-
import { StarknetGas } from "../../../../chain/StarknetAction";
|
|
4
3
|
import { ChainSwapType, RelaySynchronizer } from "@atomiqlabs/base";
|
|
5
4
|
import { BigNumberish } from "starknet";
|
|
6
5
|
import { StarknetBtcStoredHeader } from "../../../../btcrelay/headers/StarknetBtcStoredHeader";
|
|
7
6
|
import { StarknetTx } from "../../../../chain/modules/StarknetTransactions";
|
|
8
7
|
import { StarknetBtcRelay } from "../../../../btcrelay/StarknetBtcRelay";
|
|
8
|
+
import { StarknetGas } from "../../../../chain/modules/StarknetFees";
|
|
9
9
|
export type BitcoinCommitmentData = {
|
|
10
10
|
btcRelay: StarknetBtcRelay<any>;
|
|
11
11
|
confirmations: number;
|
|
@@ -49,4 +49,4 @@ class IBitcoinClaimHandler {
|
|
|
49
49
|
exports.IBitcoinClaimHandler = IBitcoinClaimHandler;
|
|
50
50
|
IBitcoinClaimHandler.address = "";
|
|
51
51
|
IBitcoinClaimHandler.type = base_1.ChainSwapType.CHAIN_TXID;
|
|
52
|
-
IBitcoinClaimHandler.gas = {
|
|
52
|
+
IBitcoinClaimHandler.gas = { l1DataGas: 0, l2Gas: 20000 * 40000, l1Gas: 0 };
|
|
@@ -2,7 +2,7 @@ import { StarknetTx } from "../../../chain/modules/StarknetTransactions";
|
|
|
2
2
|
import { StarknetSwapData } from "../../StarknetSwapData";
|
|
3
3
|
import { BigNumberish } from "starknet";
|
|
4
4
|
import { IHandler } from "../IHandler";
|
|
5
|
-
import { StarknetGas } from "../../../chain/
|
|
5
|
+
import { StarknetGas } from "../../../chain/modules/StarknetFees";
|
|
6
6
|
export declare class TimelockRefundHandler implements IHandler<bigint, never> {
|
|
7
7
|
readonly address: string;
|
|
8
8
|
static readonly gas: StarknetGas;
|
|
@@ -117,6 +117,6 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
117
117
|
}
|
|
118
118
|
exports.StarknetLpVault = StarknetLpVault;
|
|
119
119
|
StarknetLpVault.GasCosts = {
|
|
120
|
-
WITHDRAW: {
|
|
121
|
-
DEPOSIT: { l1:
|
|
120
|
+
WITHDRAW: { l1DataGas: 500, l2Gas: 3200000, l1Gas: 0 },
|
|
121
|
+
DEPOSIT: { l1: 500, l2Gas: 4000000, l1Gas: 0 }
|
|
122
122
|
};
|
|
@@ -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.swapContract.populateTransaction.claim(swapData.toEscrowStruct(), witness), (0,
|
|
21
|
+
return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.claim(swapData.toEscrowStruct(), witness), (0, StarknetFees_1.starknetGasAdd)(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)
|
|
@@ -36,7 +36,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
36
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.contract.claimHandlersByAddress[swapData.claimHandler
|
|
39
|
+
const claimHandler = this.contract.claimHandlersByAddress[(0, Utils_1.toHex)(swapData.claimHandler)];
|
|
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.contract.claimHandlersByAddress[swapData.claimHandler
|
|
64
|
+
const claimHandler = this.contract.claimHandlersByAddress[(0, Utils_1.toHex)(swapData.claimHandler)];
|
|
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 &&
|
|
@@ -87,14 +87,14 @@ 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.contract.claimHandlersByAddress[swapData.claimHandler
|
|
90
|
+
const claimHandler = this.contract.claimHandlersByAddress[(0, Utils_1.toHex)(swapData.claimHandler)];
|
|
91
91
|
if (claimHandler != null)
|
|
92
|
-
gasRequired = (0,
|
|
93
|
-
return StarknetFees_1.StarknetFees.getGasFee(gasRequired
|
|
92
|
+
gasRequired = (0, StarknetFees_1.starknetGasAdd)(gasRequired, claimHandler.getGas(swapData));
|
|
93
|
+
return StarknetFees_1.StarknetFees.getGasFee(gasRequired, feeRate);
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
exports.StarknetSwapClaim = StarknetSwapClaim;
|
|
97
97
|
StarknetSwapClaim.GasCosts = {
|
|
98
|
-
CLAIM: {
|
|
99
|
-
CLAIM_PAY_OUT: {
|
|
98
|
+
CLAIM: { l1DataGas: 750, l2Gas: 4000000, l1Gas: 0 },
|
|
99
|
+
CLAIM_PAY_OUT: { l1DataGas: 900, l2Gas: 6000000, l1Gas: 0 }
|
|
100
100
|
};
|
|
@@ -6,10 +6,24 @@ const Utils_1 = require("../../../utils/Utils");
|
|
|
6
6
|
const buffer_1 = require("buffer");
|
|
7
7
|
const StarknetAction_1 = require("../../chain/StarknetAction");
|
|
8
8
|
const StarknetSwapModule_1 = require("../StarknetSwapModule");
|
|
9
|
+
const starknet_1 = require("starknet");
|
|
9
10
|
const StarknetFees_1 = require("../../chain/modules/StarknetFees");
|
|
10
11
|
const Initialize = [
|
|
11
12
|
{ name: 'Swap hash', type: 'felt' },
|
|
12
|
-
{ name: '
|
|
13
|
+
{ name: 'Offerer', type: 'ContractAddress' },
|
|
14
|
+
{ name: 'Claimer', type: 'ContractAddress' },
|
|
15
|
+
{ name: 'Token amount', type: 'TokenAmount' },
|
|
16
|
+
{ name: 'Pay in', type: 'bool' },
|
|
17
|
+
{ name: 'Pay out', type: 'bool' },
|
|
18
|
+
{ name: 'Tracking reputation', type: 'bool' },
|
|
19
|
+
{ name: 'Claim handler', type: 'ContractAddress' },
|
|
20
|
+
{ name: 'Claim data', type: 'felt' },
|
|
21
|
+
{ name: 'Refund handler', type: 'ContractAddress' },
|
|
22
|
+
{ name: 'Refund data', type: 'felt' },
|
|
23
|
+
{ name: 'Security deposit', type: 'TokenAmount' },
|
|
24
|
+
{ name: 'Claimer bounty', type: 'TokenAmount' },
|
|
25
|
+
{ name: 'Claim action hash', type: 'felt' },
|
|
26
|
+
{ name: 'Deadline', type: 'timestamp' }
|
|
13
27
|
];
|
|
14
28
|
class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
15
29
|
/**
|
|
@@ -51,7 +65,29 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
51
65
|
const authTimeout = Math.floor(Date.now() / 1000) + authorizationTimeout;
|
|
52
66
|
const signature = await this.root.Signatures.signTypedMessage(signer, Initialize, "Initialize", {
|
|
53
67
|
"Swap hash": "0x" + swapData.getEscrowHash(),
|
|
54
|
-
"
|
|
68
|
+
"Offerer": swapData.offerer,
|
|
69
|
+
"Claimer": swapData.claimer,
|
|
70
|
+
"Token amount": {
|
|
71
|
+
token_address: swapData.token,
|
|
72
|
+
amount: starknet_1.cairo.uint256(swapData.amount)
|
|
73
|
+
},
|
|
74
|
+
"Pay in": swapData.isPayIn(),
|
|
75
|
+
"Pay out": swapData.isPayOut(),
|
|
76
|
+
"Tracking reputation": swapData.reputation,
|
|
77
|
+
"Refund handler": swapData.refundHandler,
|
|
78
|
+
"Claim handler": swapData.claimHandler,
|
|
79
|
+
"Claim data": "0x" + swapData.getClaimHash(),
|
|
80
|
+
"Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
|
|
81
|
+
"Security deposit": {
|
|
82
|
+
token_address: swapData.feeToken,
|
|
83
|
+
amount: starknet_1.cairo.uint256(swapData.securityDeposit)
|
|
84
|
+
},
|
|
85
|
+
"Claimer bounty": {
|
|
86
|
+
token_address: swapData.feeToken,
|
|
87
|
+
amount: starknet_1.cairo.uint256(swapData.claimerBounty)
|
|
88
|
+
},
|
|
89
|
+
"Claim action hash": 0n,
|
|
90
|
+
"Deadline": (0, Utils_1.toHex)(authTimeout)
|
|
55
91
|
});
|
|
56
92
|
return {
|
|
57
93
|
prefix: this.getAuthPrefix(swapData),
|
|
@@ -87,7 +123,29 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
87
123
|
throw new base_1.SignatureVerificationError("Authorization expired!");
|
|
88
124
|
const valid = await this.root.Signatures.isValidSignature(signature, signer, Initialize, "Initialize", {
|
|
89
125
|
"Swap hash": "0x" + swapData.getEscrowHash(),
|
|
90
|
-
"
|
|
126
|
+
"Offerer": swapData.offerer,
|
|
127
|
+
"Claimer": swapData.claimer,
|
|
128
|
+
"Token amount": {
|
|
129
|
+
token_address: swapData.token,
|
|
130
|
+
amount: starknet_1.cairo.uint256(swapData.amount)
|
|
131
|
+
},
|
|
132
|
+
"Pay in": swapData.isPayIn(),
|
|
133
|
+
"Pay out": swapData.isPayOut(),
|
|
134
|
+
"Tracking reputation": swapData.reputation,
|
|
135
|
+
"Refund handler": swapData.refundHandler,
|
|
136
|
+
"Claim handler": swapData.claimHandler,
|
|
137
|
+
"Claim data": "0x" + swapData.getClaimHash(),
|
|
138
|
+
"Refund data": swapData.refundData.startsWith("0x") ? swapData.refundData : "0x" + swapData.refundData,
|
|
139
|
+
"Security deposit": {
|
|
140
|
+
token_address: swapData.feeToken,
|
|
141
|
+
amount: starknet_1.cairo.uint256(swapData.securityDeposit)
|
|
142
|
+
},
|
|
143
|
+
"Claimer bounty": {
|
|
144
|
+
token_address: swapData.feeToken,
|
|
145
|
+
amount: starknet_1.cairo.uint256(swapData.claimerBounty)
|
|
146
|
+
},
|
|
147
|
+
"Claim action hash": 0n,
|
|
148
|
+
"Deadline": (0, Utils_1.toHex)(timeoutBN)
|
|
91
149
|
});
|
|
92
150
|
if (!valid)
|
|
93
151
|
throw new base_1.SignatureVerificationError("Invalid signature!");
|
|
@@ -155,11 +213,11 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
155
213
|
*/
|
|
156
214
|
async getInitFee(swapData, feeRate) {
|
|
157
215
|
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
158
|
-
return StarknetFees_1.StarknetFees.getGasFee(swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN
|
|
216
|
+
return StarknetFees_1.StarknetFees.getGasFee(swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT, feeRate);
|
|
159
217
|
}
|
|
160
218
|
}
|
|
161
219
|
exports.StarknetSwapInit = StarknetSwapInit;
|
|
162
220
|
StarknetSwapInit.GasCosts = {
|
|
163
|
-
INIT: {
|
|
164
|
-
INIT_PAY_IN: {
|
|
221
|
+
INIT: { l1DataGas: 750, l2Gas: 8000000, l1Gas: 0 },
|
|
222
|
+
INIT_PAY_IN: { l1DataGas: 500, l2Gas: 4800000, l1Gas: 0 },
|
|
165
223
|
};
|
|
@@ -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.swapContract.populateTransaction.refund(swapData.toEscrowStruct(), witness), (0,
|
|
25
|
+
return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.refund(swapData.toEscrowStruct(), witness), (0, StarknetFees_1.starknetGasAdd)(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, handlerGas));
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
28
|
* Action for cooperative refunding with signature
|
|
@@ -118,11 +118,11 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
|
|
|
118
118
|
*/
|
|
119
119
|
async getRefundFee(swapData, feeRate) {
|
|
120
120
|
feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
|
|
121
|
-
return StarknetFees_1.StarknetFees.getGasFee(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT
|
|
121
|
+
return StarknetFees_1.StarknetFees.getGasFee(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, feeRate);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
exports.StarknetSwapRefund = StarknetSwapRefund;
|
|
125
125
|
StarknetSwapRefund.GasCosts = {
|
|
126
|
-
REFUND: {
|
|
127
|
-
REFUND_PAY_OUT: {
|
|
126
|
+
REFUND: { l1DataGas: 750, l2Gas: 4000000, l1Gas: 0 },
|
|
127
|
+
REFUND_PAY_OUT: { l1DataGas: 900, l2Gas: 6000000, l1Gas: 0 }
|
|
128
128
|
};
|
package/dist/utils/Utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.findLastIndex = exports.parseInitFunctionCalldata = exports.poseidonHashRange = exports.bufferToByteArray = exports.bufferToBytes31Span = exports.bytes31SpanToBuffer = exports.toBigInt = exports.bigNumberishToBuffer = exports.u32ReverseEndianness = exports.bufferToU32Array = exports.u32ArrayToBuffer = exports.calculateHash = exports.toHex = exports.tryWithRetries = exports.getLogger = exports.onceAsync = exports.timeoutPromise = exports.isUint256 = void 0;
|
|
4
|
-
const
|
|
4
|
+
const starknet_types_08_1 = require("@starknet-io/starknet-types-08");
|
|
5
5
|
const starknet_1 = require("starknet");
|
|
6
6
|
const buffer_1 = require("buffer");
|
|
7
7
|
const StarknetSwapData_1 = require("../starknet/swaps/StarknetSwapData");
|
|
@@ -35,10 +35,14 @@ function onceAsync(executor) {
|
|
|
35
35
|
exports.onceAsync = onceAsync;
|
|
36
36
|
function getLogger(prefix) {
|
|
37
37
|
return {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
debug: (msg, ...args) => global.atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
info: (msg, ...args) => global.atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
warn: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
error: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
|
|
42
46
|
};
|
|
43
47
|
}
|
|
44
48
|
exports.getLogger = getLogger;
|
|
@@ -75,7 +79,7 @@ function toHex(value, length = 64) {
|
|
|
75
79
|
switch (typeof (value)) {
|
|
76
80
|
case "string":
|
|
77
81
|
if (value.startsWith("0x")) {
|
|
78
|
-
return "0x" + value.slice(2).padStart(length, "0");
|
|
82
|
+
return "0x" + value.slice(2).padStart(length, "0").toLowerCase();
|
|
79
83
|
}
|
|
80
84
|
else {
|
|
81
85
|
return "0x" + BigInt(value).toString(16).padStart(length, "0");
|
|
@@ -94,8 +98,8 @@ function calculateHash(tx) {
|
|
|
94
98
|
chainId: tx.details.chainId,
|
|
95
99
|
nonce: tx.details.nonce,
|
|
96
100
|
accountDeploymentData: tx.details.version === "0x3" ? tx.details.accountDeploymentData : null,
|
|
97
|
-
nonceDataAvailabilityMode: tx.details.version === "0x3" ?
|
|
98
|
-
feeDataAvailabilityMode: tx.details.version === "0x3" ?
|
|
101
|
+
nonceDataAvailabilityMode: tx.details.version === "0x3" ? starknet_types_08_1.EDAMode[tx.details.nonceDataAvailabilityMode] : null,
|
|
102
|
+
feeDataAvailabilityMode: tx.details.version === "0x3" ? starknet_types_08_1.EDAMode[tx.details.feeDataAvailabilityMode] : null,
|
|
99
103
|
resourceBounds: tx.details.version === "0x3" ? tx.details.resourceBounds : null,
|
|
100
104
|
tip: tx.details.version === "0x3" ? tx.details.tip : null,
|
|
101
105
|
paymasterData: tx.details.version === "0x3" ? tx.details.paymasterData : null
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atomiqlabs/chain-starknet",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.1",
|
|
4
4
|
"description": "Starknet specific base implementation",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types:": "./dist/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"buffer": "6.0.3"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"starknet": "^
|
|
32
|
+
"starknet": "^7.5.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"typescript": "4.9.5"
|
|
@@ -4,7 +4,7 @@ import {StarknetChainInterface, StarknetRetryPolicy} from "./chain/StarknetChain
|
|
|
4
4
|
import {StarknetBtcRelay} from "./btcrelay/StarknetBtcRelay";
|
|
5
5
|
import {StarknetSwapContract} from "./swaps/StarknetSwapContract";
|
|
6
6
|
import {StarknetChainEventsBrowser} from "./events/StarknetChainEventsBrowser";
|
|
7
|
-
import {BaseTokenType, BitcoinNetwork, BitcoinRpc, ChainData, ChainInitializer} from "@atomiqlabs/base";
|
|
7
|
+
import {BaseTokenType, BitcoinNetwork, BitcoinRpc, ChainData, ChainInitializer, ChainSwapType} from "@atomiqlabs/base";
|
|
8
8
|
import {StarknetChainType} from "./StarknetChainType";
|
|
9
9
|
import {StarknetSwapData} from "./swaps/StarknetSwapData";
|
|
10
10
|
import {StarknetSpvVaultContract} from "./spv_swap/StarknetSpvVaultContract";
|
|
@@ -27,7 +27,12 @@ export const StarknetAssets: StarknetAssetsType = {
|
|
|
27
27
|
WBTC: {
|
|
28
28
|
address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac",
|
|
29
29
|
decimals: 8
|
|
30
|
-
}
|
|
30
|
+
},
|
|
31
|
+
// TBTC: {
|
|
32
|
+
// address: "0x04daa17763b286d1e59b97c283C0b8C949994C361e426A28F743c67bDfE9a32f",
|
|
33
|
+
// decimals: 18,
|
|
34
|
+
// displayDecimals: 8
|
|
35
|
+
// }
|
|
31
36
|
} as const;
|
|
32
37
|
|
|
33
38
|
export type StarknetOptions = {
|
|
@@ -38,6 +43,14 @@ export type StarknetOptions = {
|
|
|
38
43
|
swapContract?: string,
|
|
39
44
|
btcRelayContract?: string,
|
|
40
45
|
spvVaultContract?: string,
|
|
46
|
+
handlerContracts?: {
|
|
47
|
+
refund?: {
|
|
48
|
+
timelock?: string
|
|
49
|
+
},
|
|
50
|
+
claim?: {
|
|
51
|
+
[type in ChainSwapType]?: string
|
|
52
|
+
}
|
|
53
|
+
}
|
|
41
54
|
|
|
42
55
|
fees?: StarknetFees
|
|
43
56
|
}
|
|
@@ -51,7 +64,7 @@ export function initializeStarknet(
|
|
|
51
64
|
new RpcProviderWithRetries({nodeUrl: options.rpcUrl}) :
|
|
52
65
|
options.rpcUrl;
|
|
53
66
|
|
|
54
|
-
const Fees = options.fees ?? new StarknetFees(provider
|
|
67
|
+
const Fees = options.fees ?? new StarknetFees(provider);
|
|
55
68
|
|
|
56
69
|
const chainId = options.chainId ??
|
|
57
70
|
(network===BitcoinNetwork.MAINNET ? constants.StarknetChainId.SN_MAIN : constants.StarknetChainId.SN_SEPOLIA);
|
|
@@ -63,7 +76,7 @@ export function initializeStarknet(
|
|
|
63
76
|
);
|
|
64
77
|
|
|
65
78
|
const swapContract = new StarknetSwapContract(
|
|
66
|
-
chainInterface, btcRelay, options.swapContract
|
|
79
|
+
chainInterface, btcRelay, options.swapContract, options.handlerContracts
|
|
67
80
|
);
|
|
68
81
|
|
|
69
82
|
const spvVaultContract = new StarknetSpvVaultContract(
|
|
@@ -13,7 +13,7 @@ import {StarknetTx} from "../chain/modules/StarknetTransactions";
|
|
|
13
13
|
import {StarknetSigner} from "../wallet/StarknetSigner";
|
|
14
14
|
import {BtcRelayAbi} from "./BtcRelayAbi";
|
|
15
15
|
import {BigNumberish, hash} from "starknet";
|
|
16
|
-
import {StarknetFees} from "../chain/modules/StarknetFees";
|
|
16
|
+
import {StarknetFees, starknetGasAdd, starknetGasMul} from "../chain/modules/StarknetFees";
|
|
17
17
|
import {StarknetChainInterface} from "../chain/StarknetChainInterface";
|
|
18
18
|
import {StarknetAction} from "../chain/StarknetAction";
|
|
19
19
|
|
|
@@ -29,8 +29,8 @@ function serializeBlockHeader(e: BtcBlock): StarknetBtcHeader {
|
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
const GAS_PER_BLOCKHEADER =
|
|
33
|
-
const GAS_PER_BLOCKHEADER_FORK = 1000;
|
|
32
|
+
const GAS_PER_BLOCKHEADER = {l1DataGas: 600, l2Gas: 40_000_000, l1Gas: 0};
|
|
33
|
+
const GAS_PER_BLOCKHEADER_FORK = {l1DataGas: 1000, l2Gas: 60_000_000, l1Gas: 0};
|
|
34
34
|
|
|
35
35
|
const btcRelayAddreses = {
|
|
36
36
|
[BitcoinNetwork.TESTNET4]: "0x0099b63f39f0cabb767361de3d8d3e97212351a51540e2687c2571f4da490dbe",
|
|
@@ -62,7 +62,7 @@ export class StarknetBtcRelay<B extends BtcBlock>
|
|
|
62
62
|
entrypoint: "submit_main_blockheaders",
|
|
63
63
|
calldata: serializeCalldata(mainHeaders, storedHeader, [])
|
|
64
64
|
},
|
|
65
|
-
|
|
65
|
+
starknetGasMul(GAS_PER_BLOCKHEADER, mainHeaders.length)
|
|
66
66
|
)
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -73,7 +73,7 @@ export class StarknetBtcRelay<B extends BtcBlock>
|
|
|
73
73
|
entrypoint: "submit_short_fork_blockheaders",
|
|
74
74
|
calldata: serializeCalldata(forkHeaders, storedHeader, [])
|
|
75
75
|
},
|
|
76
|
-
|
|
76
|
+
starknetGasMul(GAS_PER_BLOCKHEADER, forkHeaders.length)
|
|
77
77
|
)
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -84,7 +84,10 @@ export class StarknetBtcRelay<B extends BtcBlock>
|
|
|
84
84
|
entrypoint: "submit_fork_blockheaders",
|
|
85
85
|
calldata: serializeCalldata(forkHeaders, storedHeader, [toHex(forkId)])
|
|
86
86
|
},
|
|
87
|
-
|
|
87
|
+
starknetGasAdd(
|
|
88
|
+
starknetGasMul(GAS_PER_BLOCKHEADER, forkHeaders.length),
|
|
89
|
+
starknetGasMul(GAS_PER_BLOCKHEADER_FORK, totalForkHeaders)
|
|
90
|
+
)
|
|
88
91
|
)
|
|
89
92
|
}
|
|
90
93
|
|
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
import {Call} from "starknet";
|
|
2
2
|
import {StarknetChainInterface} from "./StarknetChainInterface";
|
|
3
3
|
import {StarknetTx} from "./modules/StarknetTransactions";
|
|
4
|
-
|
|
5
|
-
export type StarknetGas = {l1?: number, l2?: number};
|
|
6
|
-
|
|
7
|
-
export function sumStarknetGas(a: StarknetGas, b: StarknetGas) {
|
|
8
|
-
return {
|
|
9
|
-
l1: (a?.l1 ?? 0) + (b?.l1 ?? 0),
|
|
10
|
-
l2: (a?.l2 ?? 0) + (b?.l2 ?? 0)
|
|
11
|
-
}
|
|
12
|
-
}
|
|
4
|
+
import {StarknetGas, starknetGasAdd} from "./modules/StarknetFees";
|
|
13
5
|
|
|
14
6
|
export class StarknetAction {
|
|
15
7
|
|
|
16
|
-
|
|
17
|
-
L2GasLimit: number;
|
|
8
|
+
gas: StarknetGas;
|
|
18
9
|
readonly mainSigner: string;
|
|
19
10
|
private readonly root: StarknetChainInterface;
|
|
20
11
|
private readonly instructions: Call[];
|
|
@@ -30,8 +21,11 @@ export class StarknetAction {
|
|
|
30
21
|
this.mainSigner = mainSigner;
|
|
31
22
|
this.root = root;
|
|
32
23
|
this.instructions = Array.isArray(instructions) ? instructions : [instructions];
|
|
33
|
-
this.
|
|
34
|
-
|
|
24
|
+
this.gas = {
|
|
25
|
+
l1Gas: gasLimit?.l1Gas ?? 0,
|
|
26
|
+
l2Gas: gasLimit?.l2Gas ?? 0,
|
|
27
|
+
l1DataGas: gasLimit?.l1DataGas ?? 0,
|
|
28
|
+
};
|
|
35
29
|
this.feeRate = feeRate;
|
|
36
30
|
}
|
|
37
31
|
|
|
@@ -41,8 +35,7 @@ export class StarknetAction {
|
|
|
41
35
|
|
|
42
36
|
public addIx(instruction: Call, gasLimit?: StarknetGas) {
|
|
43
37
|
this.instructions.push(instruction);
|
|
44
|
-
this.
|
|
45
|
-
this.L2GasLimit += gasLimit?.l2 ?? 0;
|
|
38
|
+
this.gas = starknetGasAdd(this.gas, gasLimit);
|
|
46
39
|
}
|
|
47
40
|
|
|
48
41
|
public add(action: StarknetAction): this {
|
|
@@ -51,10 +44,12 @@ export class StarknetAction {
|
|
|
51
44
|
|
|
52
45
|
public addAction(action: StarknetAction, index: number = this.instructions.length): this {
|
|
53
46
|
if(action.mainSigner!==this.mainSigner) throw new Error("Actions need to have the same signer!");
|
|
54
|
-
if(this.
|
|
55
|
-
if(this.
|
|
56
|
-
if(this.
|
|
57
|
-
if(this.
|
|
47
|
+
if(this.gas.l1Gas==null && action.gas.l1Gas!=null) this.gas.l1Gas = action.gas.l1Gas;
|
|
48
|
+
if(this.gas.l2Gas==null && action.gas.l2Gas!=null) this.gas.l2Gas = action.gas.l2Gas;
|
|
49
|
+
if(this.gas.l1DataGas==null && action.gas.l1DataGas!=null) this.gas.l1DataGas = action.gas.l1DataGas;
|
|
50
|
+
if(this.gas.l1Gas!=null && action.gas.l1Gas!=null) this.gas.l1Gas += action.gas.l1Gas;
|
|
51
|
+
if(this.gas.l2Gas!=null && action.gas.l2Gas!=null) this.gas.l2Gas += action.gas.l2Gas;
|
|
52
|
+
if(this.gas.l1DataGas!=null && action.gas.l1DataGas!=null) this.gas.l1DataGas += action.gas.l1DataGas;
|
|
58
53
|
this.instructions.splice(index, 0, ...action.instructions);
|
|
59
54
|
if(this.feeRate==null) this.feeRate = action.feeRate;
|
|
60
55
|
return this;
|
|
@@ -68,7 +63,7 @@ export class StarknetAction {
|
|
|
68
63
|
type: "INVOKE",
|
|
69
64
|
tx: this.instructions,
|
|
70
65
|
details: {
|
|
71
|
-
...this.root.Fees.getFeeDetails(this.
|
|
66
|
+
...this.root.Fees.getFeeDetails(this.gas, feeRate),
|
|
72
67
|
walletAddress: this.mainSigner,
|
|
73
68
|
cairoVersion: "1",
|
|
74
69
|
chainId: this.root.starknetChainId,
|
|
@@ -6,7 +6,7 @@ import {DeployAccountContractPayload} from "starknet";
|
|
|
6
6
|
export class StarknetAccounts extends StarknetModule {
|
|
7
7
|
|
|
8
8
|
public async getAccountDeployTransaction(deploymentData: DeployAccountContractPayload): Promise<StarknetTx> {
|
|
9
|
-
const feeDetails = this.root.Fees.getFeeDetails(
|
|
9
|
+
const feeDetails = this.root.Fees.getFeeDetails({l1DataGas: 500, l2Gas: 5_000*40_000, l1Gas: 0}, await this.root.Fees.getFeeRate());
|
|
10
10
|
const details = {
|
|
11
11
|
...feeDetails,
|
|
12
12
|
walletAddress: deploymentData.contractAddress,
|