@atomiqlabs/chain-starknet 4.0.0-dev.12 → 4.0.0-dev.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -201
- package/dist/index.d.ts +38 -38
- package/dist/index.js +54 -54
- package/dist/starknet/StarknetChainType.d.ts +13 -13
- package/dist/starknet/StarknetChainType.js +2 -2
- package/dist/starknet/StarknetInitializer.d.ts +27 -27
- package/dist/starknet/StarknetInitializer.js +69 -69
- package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
- package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +186 -186
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +379 -379
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +31 -31
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +74 -74
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +51 -51
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +113 -113
- package/dist/starknet/chain/StarknetAction.d.ts +19 -19
- package/dist/starknet/chain/StarknetAction.js +73 -73
- package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -52
- package/dist/starknet/chain/StarknetChainInterface.js +91 -91
- package/dist/starknet/chain/StarknetModule.d.ts +14 -14
- package/dist/starknet/chain/StarknetModule.js +13 -13
- package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
- package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
- package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
- package/dist/starknet/chain/modules/StarknetAccounts.js +24 -24
- package/dist/starknet/chain/modules/StarknetAddresses.d.ts +9 -9
- package/dist/starknet/chain/modules/StarknetAddresses.js +26 -26
- package/dist/starknet/chain/modules/StarknetBlocks.d.ts +20 -20
- package/dist/starknet/chain/modules/StarknetBlocks.js +64 -64
- package/dist/starknet/chain/modules/StarknetEvents.d.ts +44 -44
- package/dist/starknet/chain/modules/StarknetEvents.js +88 -88
- package/dist/starknet/chain/modules/StarknetFees.d.ts +77 -77
- package/dist/starknet/chain/modules/StarknetFees.js +114 -114
- package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
- package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
- package/dist/starknet/chain/modules/StarknetTokens.d.ts +69 -69
- package/dist/starknet/chain/modules/StarknetTokens.js +102 -98
- package/dist/starknet/chain/modules/StarknetTransactions.d.ts +93 -93
- package/dist/starknet/chain/modules/StarknetTransactions.js +261 -260
- package/dist/starknet/contract/StarknetContractBase.d.ts +13 -13
- package/dist/starknet/contract/StarknetContractBase.js +20 -16
- package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
- package/dist/starknet/contract/StarknetContractModule.js +11 -11
- package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +51 -51
- package/dist/starknet/contract/modules/StarknetContractEvents.js +97 -97
- package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
- package/dist/starknet/events/StarknetChainEvents.js +52 -52
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +89 -90
- package/dist/starknet/events/StarknetChainEventsBrowser.js +296 -294
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -21
- package/dist/starknet/provider/RpcProviderWithRetries.js +32 -32
- package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
- package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +66 -66
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +382 -382
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -49
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +145 -145
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +25 -25
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +72 -72
- package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
- package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +191 -191
- package/dist/starknet/swaps/StarknetSwapContract.js +424 -424
- package/dist/starknet/swaps/StarknetSwapData.d.ts +74 -74
- package/dist/starknet/swaps/StarknetSwapData.js +325 -325
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
- package/dist/starknet/swaps/StarknetSwapModule.js +11 -11
- package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
- package/dist/starknet/swaps/handlers/IHandler.js +2 -2
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +45 -45
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +52 -52
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
- package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +69 -69
- package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +53 -53
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +100 -100
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -87
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +235 -225
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +62 -62
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +128 -128
- package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +7 -7
- package/dist/starknet/wallet/StarknetKeypairWallet.js +35 -30
- package/dist/starknet/wallet/StarknetSigner.d.ts +12 -12
- package/dist/starknet/wallet/StarknetSigner.js +47 -46
- package/dist/utils/Utils.d.ts +37 -37
- package/dist/utils/Utils.js +260 -261
- package/package.json +43 -37
- package/src/index.ts +47 -47
- package/src/starknet/StarknetChainType.ts +28 -28
- package/src/starknet/StarknetInitializer.ts +108 -108
- package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -338
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +494 -494
- package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +100 -100
- package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +141 -141
- package/src/starknet/chain/StarknetAction.ts +85 -85
- package/src/starknet/chain/StarknetChainInterface.ts +149 -149
- package/src/starknet/chain/StarknetModule.ts +19 -19
- package/src/starknet/chain/modules/ERC20Abi.ts +1029 -1029
- package/src/starknet/chain/modules/StarknetAccounts.ts +25 -25
- package/src/starknet/chain/modules/StarknetAddresses.ts +22 -22
- package/src/starknet/chain/modules/StarknetBlocks.ts +75 -74
- package/src/starknet/chain/modules/StarknetEvents.ts +104 -104
- package/src/starknet/chain/modules/StarknetFees.ts +154 -154
- package/src/starknet/chain/modules/StarknetSignatures.ts +91 -91
- package/src/starknet/chain/modules/StarknetTokens.ts +120 -116
- package/src/starknet/chain/modules/StarknetTransactions.ts +285 -283
- package/src/starknet/contract/StarknetContractBase.ts +30 -26
- package/src/starknet/contract/StarknetContractModule.ts +16 -16
- package/src/starknet/contract/modules/StarknetContractEvents.ts +134 -134
- package/src/starknet/events/StarknetChainEvents.ts +67 -67
- package/src/starknet/events/StarknetChainEventsBrowser.ts +411 -411
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -43
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -656
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +483 -483
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +195 -195
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +79 -79
- package/src/starknet/swaps/EscrowManagerAbi.ts +582 -582
- package/src/starknet/swaps/StarknetSwapContract.ts +647 -647
- package/src/starknet/swaps/StarknetSwapData.ts +455 -455
- package/src/starknet/swaps/StarknetSwapModule.ts +17 -17
- package/src/starknet/swaps/handlers/IHandler.ts +20 -20
- package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +23 -23
- package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +53 -53
- package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +73 -73
- package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +67 -67
- package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +50 -50
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +102 -102
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +38 -38
- package/src/starknet/swaps/modules/StarknetLpVault.ts +147 -147
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +141 -141
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +300 -287
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +196 -196
- package/src/starknet/wallet/StarknetKeypairWallet.ts +44 -39
- package/src/starknet/wallet/StarknetSigner.ts +55 -55
- package/src/utils/Utils.ts +251 -252
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import {IClaimHandler} from "../ClaimHandlers";
|
|
2
|
-
import {StarknetSwapData} from "../../../StarknetSwapData";
|
|
3
|
-
import {ChainSwapType, RelaySynchronizer} from "@atomiqlabs/base";
|
|
4
|
-
import {BigNumberish, hash} from "starknet";
|
|
5
|
-
import {StarknetBtcStoredHeader} from "../../../../btcrelay/headers/StarknetBtcStoredHeader";
|
|
6
|
-
import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
|
|
7
|
-
import {StarknetBtcRelay} from "../../../../btcrelay/StarknetBtcRelay";
|
|
8
|
-
import {bufferToU32Array, getLogger, u32ArrayToBuffer} from "../../../../../utils/Utils";
|
|
9
|
-
import {StarknetGas} from "../../../../chain/modules/StarknetFees";
|
|
10
|
-
|
|
11
|
-
export type BitcoinCommitmentData = {
|
|
12
|
-
btcRelay: StarknetBtcRelay<any>,
|
|
13
|
-
confirmations: number
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export type BitcoinWitnessData = {
|
|
17
|
-
tx: { blockhash: string, confirmations: number, txid: string, hex: string, height: number },
|
|
18
|
-
requiredConfirmations: number,
|
|
19
|
-
commitedHeader?: StarknetBtcStoredHeader,
|
|
20
|
-
btcRelay?: StarknetBtcRelay<any>,
|
|
21
|
-
synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const logger = getLogger("IBitcoinClaimHandler: ");
|
|
25
|
-
|
|
26
|
-
export abstract class IBitcoinClaimHandler<C, W extends BitcoinWitnessData> implements IClaimHandler<C & BitcoinCommitmentData, W> {
|
|
27
|
-
|
|
28
|
-
public readonly address: string;
|
|
29
|
-
|
|
30
|
-
constructor(address: string) {
|
|
31
|
-
this.address = address;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
public static readonly address = "";
|
|
35
|
-
public static readonly type: ChainSwapType = ChainSwapType.CHAIN_TXID;
|
|
36
|
-
public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 20_000 * 40_000, l1Gas: 0};
|
|
37
|
-
|
|
38
|
-
protected serializeCommitment(data: BitcoinCommitmentData): BigNumberish[] {
|
|
39
|
-
return [
|
|
40
|
-
data.confirmations,
|
|
41
|
-
data.btcRelay.contract.address
|
|
42
|
-
]
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
getCommitment(data: C & BitcoinCommitmentData): BigNumberish {
|
|
46
|
-
return hash.computePoseidonHashOnElements(this.serializeCommitment(data));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
protected async _getWitness(
|
|
50
|
-
signer: string,
|
|
51
|
-
swapData: StarknetSwapData,
|
|
52
|
-
{tx, btcRelay, commitedHeader, synchronizer, requiredConfirmations}: BitcoinWitnessData,
|
|
53
|
-
commitment: C,
|
|
54
|
-
feeRate?: string
|
|
55
|
-
): Promise<{
|
|
56
|
-
initialTxns: StarknetTx[];
|
|
57
|
-
witness: BigNumberish[]
|
|
58
|
-
}> {
|
|
59
|
-
const serializedData: BigNumberish[] = this.serializeCommitment({
|
|
60
|
-
...commitment,
|
|
61
|
-
btcRelay,
|
|
62
|
-
confirmations: requiredConfirmations
|
|
63
|
-
});
|
|
64
|
-
const commitmentHash = hash.computePoseidonHashOnElements(serializedData);
|
|
65
|
-
|
|
66
|
-
if(!swapData.isClaimData(commitmentHash)) throw new Error("Invalid commit data");
|
|
67
|
-
|
|
68
|
-
const merkleProof = await btcRelay.bitcoinRpc.getMerkleProof(tx.txid, tx.blockhash);
|
|
69
|
-
logger.debug("getWitness(): merkle proof computed: ", merkleProof);
|
|
70
|
-
|
|
71
|
-
const txs: StarknetTx[] = [];
|
|
72
|
-
if(commitedHeader==null) {
|
|
73
|
-
const headers = await StarknetBtcRelay.getCommitedHeadersAndSynchronize(
|
|
74
|
-
signer, btcRelay,
|
|
75
|
-
[{blockheight: tx.height, requiredConfirmations, blockhash: tx.blockhash}],
|
|
76
|
-
txs, synchronizer, feeRate
|
|
77
|
-
);
|
|
78
|
-
if(headers==null) throw new Error("Cannot fetch committed header!");
|
|
79
|
-
commitedHeader = headers[tx.blockhash];
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
serializedData.push(...commitedHeader.serialize());
|
|
83
|
-
serializedData.push(merkleProof.merkle.length, ...merkleProof.merkle.map(bufferToU32Array).flat());
|
|
84
|
-
serializedData.push(merkleProof.pos);
|
|
85
|
-
|
|
86
|
-
return {initialTxns: txs, witness: serializedData};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
abstract getWitness(signer: string, data: StarknetSwapData, witnessData: W, feeRate?: string): Promise<{
|
|
90
|
-
initialTxns: StarknetTx[];
|
|
91
|
-
witness: BigNumberish[]
|
|
92
|
-
}>;
|
|
93
|
-
|
|
94
|
-
abstract getGas(data: StarknetSwapData): StarknetGas;
|
|
95
|
-
|
|
96
|
-
abstract getType(): ChainSwapType;
|
|
97
|
-
|
|
98
|
-
parseWitnessResult(result: BigNumberish[]): string {
|
|
99
|
-
return u32ArrayToBuffer(result).toString("hex");
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
}
|
|
1
|
+
import {IClaimHandler} from "../ClaimHandlers";
|
|
2
|
+
import {StarknetSwapData} from "../../../StarknetSwapData";
|
|
3
|
+
import {ChainSwapType, RelaySynchronizer} from "@atomiqlabs/base";
|
|
4
|
+
import {BigNumberish, hash} from "starknet";
|
|
5
|
+
import {StarknetBtcStoredHeader} from "../../../../btcrelay/headers/StarknetBtcStoredHeader";
|
|
6
|
+
import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
|
|
7
|
+
import {StarknetBtcRelay} from "../../../../btcrelay/StarknetBtcRelay";
|
|
8
|
+
import {bufferToU32Array, getLogger, u32ArrayToBuffer} from "../../../../../utils/Utils";
|
|
9
|
+
import {StarknetGas} from "../../../../chain/modules/StarknetFees";
|
|
10
|
+
|
|
11
|
+
export type BitcoinCommitmentData = {
|
|
12
|
+
btcRelay: StarknetBtcRelay<any>,
|
|
13
|
+
confirmations: number
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type BitcoinWitnessData = {
|
|
17
|
+
tx: { blockhash: string, confirmations: number, txid: string, hex: string, height: number },
|
|
18
|
+
requiredConfirmations: number,
|
|
19
|
+
commitedHeader?: StarknetBtcStoredHeader,
|
|
20
|
+
btcRelay?: StarknetBtcRelay<any>,
|
|
21
|
+
synchronizer?: RelaySynchronizer<StarknetBtcStoredHeader, StarknetTx, any>
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const logger = getLogger("IBitcoinClaimHandler: ");
|
|
25
|
+
|
|
26
|
+
export abstract class IBitcoinClaimHandler<C, W extends BitcoinWitnessData> implements IClaimHandler<C & BitcoinCommitmentData, W> {
|
|
27
|
+
|
|
28
|
+
public readonly address: string;
|
|
29
|
+
|
|
30
|
+
constructor(address: string) {
|
|
31
|
+
this.address = address;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public static readonly address = "";
|
|
35
|
+
public static readonly type: ChainSwapType = ChainSwapType.CHAIN_TXID;
|
|
36
|
+
public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 20_000 * 40_000, l1Gas: 0};
|
|
37
|
+
|
|
38
|
+
protected serializeCommitment(data: BitcoinCommitmentData): BigNumberish[] {
|
|
39
|
+
return [
|
|
40
|
+
data.confirmations,
|
|
41
|
+
data.btcRelay.contract.address
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
getCommitment(data: C & BitcoinCommitmentData): BigNumberish {
|
|
46
|
+
return hash.computePoseidonHashOnElements(this.serializeCommitment(data));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
protected async _getWitness(
|
|
50
|
+
signer: string,
|
|
51
|
+
swapData: StarknetSwapData,
|
|
52
|
+
{tx, btcRelay, commitedHeader, synchronizer, requiredConfirmations}: BitcoinWitnessData,
|
|
53
|
+
commitment: C,
|
|
54
|
+
feeRate?: string
|
|
55
|
+
): Promise<{
|
|
56
|
+
initialTxns: StarknetTx[];
|
|
57
|
+
witness: BigNumberish[]
|
|
58
|
+
}> {
|
|
59
|
+
const serializedData: BigNumberish[] = this.serializeCommitment({
|
|
60
|
+
...commitment,
|
|
61
|
+
btcRelay,
|
|
62
|
+
confirmations: requiredConfirmations
|
|
63
|
+
});
|
|
64
|
+
const commitmentHash = hash.computePoseidonHashOnElements(serializedData);
|
|
65
|
+
|
|
66
|
+
if(!swapData.isClaimData(commitmentHash)) throw new Error("Invalid commit data");
|
|
67
|
+
|
|
68
|
+
const merkleProof = await btcRelay.bitcoinRpc.getMerkleProof(tx.txid, tx.blockhash);
|
|
69
|
+
logger.debug("getWitness(): merkle proof computed: ", merkleProof);
|
|
70
|
+
|
|
71
|
+
const txs: StarknetTx[] = [];
|
|
72
|
+
if(commitedHeader==null) {
|
|
73
|
+
const headers = await StarknetBtcRelay.getCommitedHeadersAndSynchronize(
|
|
74
|
+
signer, btcRelay,
|
|
75
|
+
[{blockheight: tx.height, requiredConfirmations, blockhash: tx.blockhash}],
|
|
76
|
+
txs, synchronizer, feeRate
|
|
77
|
+
);
|
|
78
|
+
if(headers==null) throw new Error("Cannot fetch committed header!");
|
|
79
|
+
commitedHeader = headers[tx.blockhash];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
serializedData.push(...commitedHeader.serialize());
|
|
83
|
+
serializedData.push(merkleProof.merkle.length, ...merkleProof.merkle.map(bufferToU32Array).flat());
|
|
84
|
+
serializedData.push(merkleProof.pos);
|
|
85
|
+
|
|
86
|
+
return {initialTxns: txs, witness: serializedData};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
abstract getWitness(signer: string, data: StarknetSwapData, witnessData: W, feeRate?: string): Promise<{
|
|
90
|
+
initialTxns: StarknetTx[];
|
|
91
|
+
witness: BigNumberish[]
|
|
92
|
+
}>;
|
|
93
|
+
|
|
94
|
+
abstract getGas(data: StarknetSwapData): StarknetGas;
|
|
95
|
+
|
|
96
|
+
abstract getType(): ChainSwapType;
|
|
97
|
+
|
|
98
|
+
parseWitnessResult(result: BigNumberish[]): string {
|
|
99
|
+
return u32ArrayToBuffer(result).toString("hex");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
}
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import {StarknetTx} from "../../../chain/modules/StarknetTransactions";
|
|
2
|
-
import {StarknetSwapData} from "../../StarknetSwapData";
|
|
3
|
-
import {bigNumberishToBuffer} from "../../../../utils/Utils";
|
|
4
|
-
import {BigNumberish} from "starknet";
|
|
5
|
-
import {IHandler} from "../IHandler";
|
|
6
|
-
import {StarknetGas} from "../../../chain/modules/StarknetFees";
|
|
7
|
-
|
|
8
|
-
export class TimelockRefundHandler implements IHandler<bigint, never> {
|
|
9
|
-
|
|
10
|
-
public readonly address: string;
|
|
11
|
-
public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 4_000_000, l1Gas: 0};
|
|
12
|
-
|
|
13
|
-
constructor(address: string) {
|
|
14
|
-
this.address = address;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
public getCommitment(data: bigint): BigNumberish {
|
|
18
|
-
return data;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public getWitness(signer: string, data: StarknetSwapData): Promise<{
|
|
22
|
-
initialTxns: StarknetTx[],
|
|
23
|
-
witness: BigNumberish[]
|
|
24
|
-
}> {
|
|
25
|
-
const expiry = TimelockRefundHandler.getExpiry(data);
|
|
26
|
-
const currentTimestamp = BigInt(Math.floor(Date.now()/1000));
|
|
27
|
-
if(expiry > currentTimestamp) throw new Error("Not expired yet!");
|
|
28
|
-
return Promise.resolve({initialTxns: [], witness: []});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
getGas(): StarknetGas {
|
|
32
|
-
return TimelockRefundHandler.gas;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
public static getExpiry(data: StarknetSwapData): bigint {
|
|
36
|
-
return bigNumberishToBuffer(data.refundData, 32).readBigUInt64BE(24).valueOf();
|
|
37
|
-
}
|
|
38
|
-
|
|
1
|
+
import {StarknetTx} from "../../../chain/modules/StarknetTransactions";
|
|
2
|
+
import {StarknetSwapData} from "../../StarknetSwapData";
|
|
3
|
+
import {bigNumberishToBuffer} from "../../../../utils/Utils";
|
|
4
|
+
import {BigNumberish} from "starknet";
|
|
5
|
+
import {IHandler} from "../IHandler";
|
|
6
|
+
import {StarknetGas} from "../../../chain/modules/StarknetFees";
|
|
7
|
+
|
|
8
|
+
export class TimelockRefundHandler implements IHandler<bigint, never> {
|
|
9
|
+
|
|
10
|
+
public readonly address: string;
|
|
11
|
+
public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 4_000_000, l1Gas: 0};
|
|
12
|
+
|
|
13
|
+
constructor(address: string) {
|
|
14
|
+
this.address = address;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public getCommitment(data: bigint): BigNumberish {
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public getWitness(signer: string, data: StarknetSwapData): Promise<{
|
|
22
|
+
initialTxns: StarknetTx[],
|
|
23
|
+
witness: BigNumberish[]
|
|
24
|
+
}> {
|
|
25
|
+
const expiry = TimelockRefundHandler.getExpiry(data);
|
|
26
|
+
const currentTimestamp = BigInt(Math.floor(Date.now()/1000));
|
|
27
|
+
if(expiry > currentTimestamp) throw new Error("Not expired yet!");
|
|
28
|
+
return Promise.resolve({initialTxns: [], witness: []});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
getGas(): StarknetGas {
|
|
32
|
+
return TimelockRefundHandler.gas;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public static getExpiry(data: StarknetSwapData): bigint {
|
|
36
|
+
return bigNumberishToBuffer(data.refundData, 32).readBigUInt64BE(24).valueOf();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
39
|
}
|
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
import {toBigInt} from "../../../utils/Utils";
|
|
2
|
-
import { IntermediaryReputationType } from "@atomiqlabs/base";
|
|
3
|
-
import {StarknetSwapModule} from "../StarknetSwapModule";
|
|
4
|
-
import {StarknetAction} from "../../chain/StarknetAction";
|
|
5
|
-
import {cairo} from "starknet";
|
|
6
|
-
import {StarknetTx} from "../../chain/modules/StarknetTransactions";
|
|
7
|
-
|
|
8
|
-
export class StarknetLpVault extends StarknetSwapModule {
|
|
9
|
-
|
|
10
|
-
private static readonly GasCosts = {
|
|
11
|
-
WITHDRAW: {l1DataGas: 500, l2Gas: 3_200_000, l1Gas: 0},
|
|
12
|
-
DEPOSIT: {l1: 500, l2Gas: 4_000_000, l1Gas: 0}
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Action for withdrawing funds from the LP vault
|
|
17
|
-
*
|
|
18
|
-
* @param signer
|
|
19
|
-
* @param token
|
|
20
|
-
* @param amount
|
|
21
|
-
* @constructor
|
|
22
|
-
* @private
|
|
23
|
-
*/
|
|
24
|
-
private Withdraw(signer: string, token: string, amount: bigint): StarknetAction {
|
|
25
|
-
return new StarknetAction(signer, this.root,
|
|
26
|
-
this.swapContract.populateTransaction.withdraw(token, cairo.uint256(amount), signer),
|
|
27
|
-
StarknetLpVault.GasCosts.WITHDRAW
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Action for depositing funds to the LP vault
|
|
33
|
-
*
|
|
34
|
-
* @param signer
|
|
35
|
-
* @param token
|
|
36
|
-
* @param amount
|
|
37
|
-
* @constructor
|
|
38
|
-
* @private
|
|
39
|
-
*/
|
|
40
|
-
private Deposit(signer: string, token: string, amount: bigint): StarknetAction {
|
|
41
|
-
return new StarknetAction(signer, this.root,
|
|
42
|
-
this.swapContract.populateTransaction.deposit(token, cairo.uint256(amount)),
|
|
43
|
-
StarknetLpVault.GasCosts.WITHDRAW
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Returns intermediary's reputation & vault balance for a specific token
|
|
49
|
-
*
|
|
50
|
-
* @param address
|
|
51
|
-
* @param token
|
|
52
|
-
*/
|
|
53
|
-
public async getIntermediaryData(address: string, token: string): Promise<{
|
|
54
|
-
balance: bigint,
|
|
55
|
-
reputation: IntermediaryReputationType
|
|
56
|
-
}> {
|
|
57
|
-
const [balance, reputation] = await Promise.all([
|
|
58
|
-
this.getIntermediaryBalance(address, token),
|
|
59
|
-
this.getIntermediaryReputation(address, token)
|
|
60
|
-
]);
|
|
61
|
-
|
|
62
|
-
return {balance, reputation};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Returns intermediary's reputation for a specific token
|
|
67
|
-
*
|
|
68
|
-
* @param address
|
|
69
|
-
* @param token
|
|
70
|
-
*/
|
|
71
|
-
public async getIntermediaryReputation(address: string, token: string): Promise<IntermediaryReputationType> {
|
|
72
|
-
const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => cairo.tuple(address, token, claimHandler));
|
|
73
|
-
const rawReputation = await this.provider.callContract(this.swapContract.populateTransaction.get_reputation(filter));
|
|
74
|
-
const length = toBigInt(rawReputation.shift());
|
|
75
|
-
if(Number(length)!==filter.length) throw new Error("getIntermediaryReputation(): Invalid response length");
|
|
76
|
-
|
|
77
|
-
const result: any = {};
|
|
78
|
-
Object.keys(this.contract.claimHandlersByAddress).forEach((address) => {
|
|
79
|
-
const handler = this.contract.claimHandlersByAddress[address];
|
|
80
|
-
result[handler.getType()] = {
|
|
81
|
-
successVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
|
|
82
|
-
successCount: toBigInt(rawReputation.shift()),
|
|
83
|
-
coopCloseVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
|
|
84
|
-
coopCloseCount: toBigInt(rawReputation.shift()),
|
|
85
|
-
failVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
|
|
86
|
-
failCount: toBigInt(rawReputation.shift()),
|
|
87
|
-
};
|
|
88
|
-
});
|
|
89
|
-
return result as any;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Returns the balance of the token an intermediary has in his LP vault
|
|
94
|
-
*
|
|
95
|
-
* @param address
|
|
96
|
-
* @param token
|
|
97
|
-
*/
|
|
98
|
-
public async getIntermediaryBalance(address: string, token: string): Promise<bigint> {
|
|
99
|
-
const balance = toBigInt((await this.swapContract.get_balance([cairo.tuple(address, token)]))[0]);
|
|
100
|
-
|
|
101
|
-
this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: "+token.toString()+
|
|
102
|
-
" address: "+address+" amount: "+(balance==null ? "null" : balance.toString()));
|
|
103
|
-
|
|
104
|
-
return balance;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Creates transactions for withdrawing funds from the LP vault, creates ATA if it doesn't exist and unwraps
|
|
109
|
-
* WSOL to SOL if required
|
|
110
|
-
*
|
|
111
|
-
* @param signer
|
|
112
|
-
* @param token
|
|
113
|
-
* @param amount
|
|
114
|
-
* @param feeRate
|
|
115
|
-
*/
|
|
116
|
-
public async txsWithdraw(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
|
|
117
|
-
const action = await this.Withdraw(signer, token, amount);
|
|
118
|
-
|
|
119
|
-
feeRate ??= await this.root.Fees.getFeeRate();
|
|
120
|
-
|
|
121
|
-
this.logger.debug("txsWithdraw(): withdraw TX created, token: "+token.toString()+
|
|
122
|
-
" amount: "+amount.toString(10));
|
|
123
|
-
|
|
124
|
-
return [await action.tx(feeRate)];
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Creates transaction for depositing funds into the LP vault, wraps SOL to WSOL if required
|
|
129
|
-
*
|
|
130
|
-
* @param signer
|
|
131
|
-
* @param token
|
|
132
|
-
* @param amount
|
|
133
|
-
* @param feeRate
|
|
134
|
-
*/
|
|
135
|
-
public async txsDeposit(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
|
|
136
|
-
//Approve first
|
|
137
|
-
const action = await this.root.Tokens.Approve(signer, this.swapContract.address, token, amount);
|
|
138
|
-
action.add(this.Deposit(signer, token, amount));
|
|
139
|
-
|
|
140
|
-
feeRate ??= await this.root.Fees.getFeeRate();
|
|
141
|
-
|
|
142
|
-
this.logger.debug("txsDeposit(): deposit TX created, token: "+token.toString()+
|
|
143
|
-
" amount: "+amount.toString(10));
|
|
144
|
-
|
|
145
|
-
return [await action.tx(feeRate)];
|
|
146
|
-
}
|
|
147
|
-
|
|
1
|
+
import {toBigInt} from "../../../utils/Utils";
|
|
2
|
+
import { IntermediaryReputationType } from "@atomiqlabs/base";
|
|
3
|
+
import {StarknetSwapModule} from "../StarknetSwapModule";
|
|
4
|
+
import {StarknetAction} from "../../chain/StarknetAction";
|
|
5
|
+
import {cairo} from "starknet";
|
|
6
|
+
import {StarknetTx} from "../../chain/modules/StarknetTransactions";
|
|
7
|
+
|
|
8
|
+
export class StarknetLpVault extends StarknetSwapModule {
|
|
9
|
+
|
|
10
|
+
private static readonly GasCosts = {
|
|
11
|
+
WITHDRAW: {l1DataGas: 500, l2Gas: 3_200_000, l1Gas: 0},
|
|
12
|
+
DEPOSIT: {l1: 500, l2Gas: 4_000_000, l1Gas: 0}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Action for withdrawing funds from the LP vault
|
|
17
|
+
*
|
|
18
|
+
* @param signer
|
|
19
|
+
* @param token
|
|
20
|
+
* @param amount
|
|
21
|
+
* @constructor
|
|
22
|
+
* @private
|
|
23
|
+
*/
|
|
24
|
+
private Withdraw(signer: string, token: string, amount: bigint): StarknetAction {
|
|
25
|
+
return new StarknetAction(signer, this.root,
|
|
26
|
+
this.swapContract.populateTransaction.withdraw(token, cairo.uint256(amount), signer),
|
|
27
|
+
StarknetLpVault.GasCosts.WITHDRAW
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Action for depositing funds to the LP vault
|
|
33
|
+
*
|
|
34
|
+
* @param signer
|
|
35
|
+
* @param token
|
|
36
|
+
* @param amount
|
|
37
|
+
* @constructor
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
40
|
+
private Deposit(signer: string, token: string, amount: bigint): StarknetAction {
|
|
41
|
+
return new StarknetAction(signer, this.root,
|
|
42
|
+
this.swapContract.populateTransaction.deposit(token, cairo.uint256(amount)),
|
|
43
|
+
StarknetLpVault.GasCosts.WITHDRAW
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Returns intermediary's reputation & vault balance for a specific token
|
|
49
|
+
*
|
|
50
|
+
* @param address
|
|
51
|
+
* @param token
|
|
52
|
+
*/
|
|
53
|
+
public async getIntermediaryData(address: string, token: string): Promise<{
|
|
54
|
+
balance: bigint,
|
|
55
|
+
reputation: IntermediaryReputationType
|
|
56
|
+
}> {
|
|
57
|
+
const [balance, reputation] = await Promise.all([
|
|
58
|
+
this.getIntermediaryBalance(address, token),
|
|
59
|
+
this.getIntermediaryReputation(address, token)
|
|
60
|
+
]);
|
|
61
|
+
|
|
62
|
+
return {balance, reputation};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Returns intermediary's reputation for a specific token
|
|
67
|
+
*
|
|
68
|
+
* @param address
|
|
69
|
+
* @param token
|
|
70
|
+
*/
|
|
71
|
+
public async getIntermediaryReputation(address: string, token: string): Promise<IntermediaryReputationType> {
|
|
72
|
+
const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => cairo.tuple(address, token, claimHandler));
|
|
73
|
+
const rawReputation = await this.provider.callContract(this.swapContract.populateTransaction.get_reputation(filter));
|
|
74
|
+
const length = toBigInt(rawReputation.shift());
|
|
75
|
+
if(Number(length)!==filter.length) throw new Error("getIntermediaryReputation(): Invalid response length");
|
|
76
|
+
|
|
77
|
+
const result: any = {};
|
|
78
|
+
Object.keys(this.contract.claimHandlersByAddress).forEach((address) => {
|
|
79
|
+
const handler = this.contract.claimHandlersByAddress[address];
|
|
80
|
+
result[handler.getType()] = {
|
|
81
|
+
successVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
|
|
82
|
+
successCount: toBigInt(rawReputation.shift()),
|
|
83
|
+
coopCloseVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
|
|
84
|
+
coopCloseCount: toBigInt(rawReputation.shift()),
|
|
85
|
+
failVolume: toBigInt({low: rawReputation.shift(), high: rawReputation.shift()}),
|
|
86
|
+
failCount: toBigInt(rawReputation.shift()),
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
return result as any;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Returns the balance of the token an intermediary has in his LP vault
|
|
94
|
+
*
|
|
95
|
+
* @param address
|
|
96
|
+
* @param token
|
|
97
|
+
*/
|
|
98
|
+
public async getIntermediaryBalance(address: string, token: string): Promise<bigint> {
|
|
99
|
+
const balance = toBigInt((await this.swapContract.get_balance([cairo.tuple(address, token)]))[0]);
|
|
100
|
+
|
|
101
|
+
this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: "+token.toString()+
|
|
102
|
+
" address: "+address+" amount: "+(balance==null ? "null" : balance.toString()));
|
|
103
|
+
|
|
104
|
+
return balance;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Creates transactions for withdrawing funds from the LP vault, creates ATA if it doesn't exist and unwraps
|
|
109
|
+
* WSOL to SOL if required
|
|
110
|
+
*
|
|
111
|
+
* @param signer
|
|
112
|
+
* @param token
|
|
113
|
+
* @param amount
|
|
114
|
+
* @param feeRate
|
|
115
|
+
*/
|
|
116
|
+
public async txsWithdraw(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
|
|
117
|
+
const action = await this.Withdraw(signer, token, amount);
|
|
118
|
+
|
|
119
|
+
feeRate ??= await this.root.Fees.getFeeRate();
|
|
120
|
+
|
|
121
|
+
this.logger.debug("txsWithdraw(): withdraw TX created, token: "+token.toString()+
|
|
122
|
+
" amount: "+amount.toString(10));
|
|
123
|
+
|
|
124
|
+
return [await action.tx(feeRate)];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Creates transaction for depositing funds into the LP vault, wraps SOL to WSOL if required
|
|
129
|
+
*
|
|
130
|
+
* @param signer
|
|
131
|
+
* @param token
|
|
132
|
+
* @param amount
|
|
133
|
+
* @param feeRate
|
|
134
|
+
*/
|
|
135
|
+
public async txsDeposit(signer: string, token: string, amount: bigint, feeRate?: string): Promise<StarknetTx[]> {
|
|
136
|
+
//Approve first
|
|
137
|
+
const action = await this.root.Tokens.Approve(signer, this.swapContract.address, token, amount);
|
|
138
|
+
action.add(this.Deposit(signer, token, amount));
|
|
139
|
+
|
|
140
|
+
feeRate ??= await this.root.Fees.getFeeRate();
|
|
141
|
+
|
|
142
|
+
this.logger.debug("txsDeposit(): deposit TX created, token: "+token.toString()+
|
|
143
|
+
" amount: "+amount.toString(10));
|
|
144
|
+
|
|
145
|
+
return [await action.tx(feeRate)];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
148
|
}
|