@atomiqlabs/base 10.0.0-dev.2 → 10.0.0-dev.21

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.
Files changed (131) hide show
  1. package/LICENSE +201 -201
  2. package/dist/btc/BitcoinNetwork.d.ts +6 -6
  3. package/dist/btc/BitcoinNetwork.js +10 -10
  4. package/dist/btc/rpc/BitcoinRpc.d.ts +68 -68
  5. package/dist/btc/rpc/BitcoinRpc.js +2 -2
  6. package/dist/btcrelay/BtcRelay.d.ts +61 -61
  7. package/dist/btcrelay/BtcRelay.js +2 -2
  8. package/dist/btcrelay/synchronizer/RelaySynchronizer.d.ts +18 -18
  9. package/dist/btcrelay/synchronizer/RelaySynchronizer.js +2 -2
  10. package/dist/btcrelay/types/BtcBlock.d.ts +13 -13
  11. package/dist/btcrelay/types/BtcBlock.js +2 -2
  12. package/dist/btcrelay/types/BtcHeader.d.ts +10 -10
  13. package/dist/btcrelay/types/BtcHeader.js +2 -2
  14. package/dist/btcrelay/types/BtcStoredHeader.d.ts +11 -11
  15. package/dist/btcrelay/types/BtcStoredHeader.js +2 -2
  16. package/dist/btcrelay/utils/StatePredictorUtils.d.ts +11 -11
  17. package/dist/btcrelay/utils/StatePredictorUtils.js +80 -80
  18. package/dist/chains/ChainData.d.ts +31 -31
  19. package/dist/chains/ChainData.js +2 -2
  20. package/dist/chains/ChainInterface.d.ts +133 -110
  21. package/dist/chains/ChainInterface.js +7 -2
  22. package/dist/chains/ChainType.d.ts +24 -23
  23. package/dist/chains/ChainType.js +2 -2
  24. package/dist/errors/CannotInitializeATAError.d.ts +3 -3
  25. package/dist/errors/CannotInitializeATAError.js +11 -11
  26. package/dist/errors/SignatureVerificationError.d.ts +3 -3
  27. package/dist/errors/SignatureVerificationError.js +11 -11
  28. package/dist/errors/SwapDataVerificationError.d.ts +3 -3
  29. package/dist/errors/SwapDataVerificationError.js +11 -11
  30. package/dist/errors/TransactionRevertedError.d.ts +3 -0
  31. package/dist/errors/TransactionRevertedError.js +11 -0
  32. package/dist/events/ChainEvents.d.ts +9 -9
  33. package/dist/events/ChainEvents.js +2 -2
  34. package/dist/events/types/ChainEvent.d.ts +7 -7
  35. package/dist/events/types/ChainEvent.js +6 -6
  36. package/dist/events/types/spv_vault/SpvVaultClaimEvent.d.ts +12 -12
  37. package/dist/events/types/spv_vault/SpvVaultClaimEvent.js +18 -18
  38. package/dist/events/types/spv_vault/SpvVaultCloseEvent.d.ts +7 -7
  39. package/dist/events/types/spv_vault/SpvVaultCloseEvent.js +13 -13
  40. package/dist/events/types/spv_vault/SpvVaultDepositEvent.d.ts +7 -7
  41. package/dist/events/types/spv_vault/SpvVaultDepositEvent.js +13 -13
  42. package/dist/events/types/spv_vault/SpvVaultEvent.d.ts +15 -15
  43. package/dist/events/types/spv_vault/SpvVaultEvent.js +20 -20
  44. package/dist/events/types/spv_vault/SpvVaultFrontEvent.d.ts +10 -10
  45. package/dist/events/types/spv_vault/SpvVaultFrontEvent.js +16 -16
  46. package/dist/events/types/spv_vault/SpvVaultOpenEvent.d.ts +7 -7
  47. package/dist/events/types/spv_vault/SpvVaultOpenEvent.js +13 -13
  48. package/dist/events/types/swap/ClaimEvent.d.ts +7 -7
  49. package/dist/events/types/swap/ClaimEvent.js +11 -11
  50. package/dist/events/types/swap/InitializeEvent.d.ts +9 -9
  51. package/dist/events/types/swap/InitializeEvent.js +12 -12
  52. package/dist/events/types/swap/RefundEvent.d.ts +5 -5
  53. package/dist/events/types/swap/RefundEvent.js +7 -7
  54. package/dist/events/types/swap/SwapEvent.d.ts +12 -12
  55. package/dist/events/types/swap/SwapEvent.js +17 -17
  56. package/dist/index.d.ts +42 -38
  57. package/dist/index.js +58 -54
  58. package/dist/lockable/Lockable.d.ts +6 -6
  59. package/dist/lockable/Lockable.js +28 -28
  60. package/dist/messaging/Messenger.d.ts +8 -0
  61. package/dist/messaging/Messenger.js +2 -0
  62. package/dist/messaging/messages/Message.d.ts +11 -0
  63. package/dist/messaging/messages/Message.js +22 -0
  64. package/dist/messaging/messages/SwapClaimWitnessMessage.d.ts +10 -0
  65. package/dist/messaging/messages/SwapClaimWitnessMessage.js +28 -0
  66. package/dist/spv_swap/SpvVaultContract.d.ts +258 -199
  67. package/dist/spv_swap/SpvVaultContract.js +2 -2
  68. package/dist/spv_swap/SpvVaultData.d.ts +35 -35
  69. package/dist/spv_swap/SpvVaultData.js +37 -37
  70. package/dist/spv_swap/SpvWithdrawalState.d.ts +31 -31
  71. package/dist/spv_swap/SpvWithdrawalState.js +10 -10
  72. package/dist/spv_swap/SpvWithdrawalTransactionData.d.ts +43 -43
  73. package/dist/spv_swap/SpvWithdrawalTransactionData.js +143 -143
  74. package/dist/storage/IStorageManager.d.ts +15 -15
  75. package/dist/storage/IStorageManager.js +2 -2
  76. package/dist/storage/StorageObject.d.ts +3 -3
  77. package/dist/storage/StorageObject.js +2 -2
  78. package/dist/swaps/ChainSwapType.d.ts +6 -6
  79. package/dist/swaps/ChainSwapType.js +10 -10
  80. package/dist/swaps/SwapCommitState.d.ts +39 -38
  81. package/dist/swaps/SwapCommitState.js +11 -11
  82. package/dist/swaps/SwapContract.d.ts +479 -467
  83. package/dist/swaps/SwapContract.js +2 -2
  84. package/dist/swaps/SwapData.d.ts +37 -36
  85. package/dist/swaps/SwapData.js +17 -14
  86. package/dist/utils/BigIntBufferUtils.d.ts +6 -6
  87. package/dist/utils/BigIntBufferUtils.js +31 -31
  88. package/package.json +31 -31
  89. package/src/btc/BitcoinNetwork.ts +6 -6
  90. package/src/btc/rpc/BitcoinRpc.ts +77 -77
  91. package/src/btcrelay/BtcRelay.ts +70 -70
  92. package/src/btcrelay/synchronizer/RelaySynchronizer.ts +17 -17
  93. package/src/btcrelay/types/BtcBlock.ts +15 -15
  94. package/src/btcrelay/types/BtcHeader.ts +11 -11
  95. package/src/btcrelay/types/BtcStoredHeader.ts +12 -12
  96. package/src/btcrelay/utils/StatePredictorUtils.ts +108 -108
  97. package/src/chains/ChainData.ts +40 -40
  98. package/src/chains/ChainInterface.ts +159 -132
  99. package/src/chains/ChainType.ts +40 -38
  100. package/src/errors/CannotInitializeATAError.ts +11 -11
  101. package/src/errors/SignatureVerificationError.ts +11 -11
  102. package/src/errors/SwapDataVerificationError.ts +11 -11
  103. package/src/errors/TransactionRevertedError.ts +11 -0
  104. package/src/events/ChainEvents.ts +13 -13
  105. package/src/events/types/ChainEvent.ts +10 -10
  106. package/src/events/types/spv_vault/SpvVaultClaimEvent.ts +31 -31
  107. package/src/events/types/spv_vault/SpvVaultCloseEvent.ts +17 -17
  108. package/src/events/types/spv_vault/SpvVaultDepositEvent.ts +17 -17
  109. package/src/events/types/spv_vault/SpvVaultEvent.ts +25 -25
  110. package/src/events/types/spv_vault/SpvVaultFrontEvent.ts +27 -27
  111. package/src/events/types/spv_vault/SpvVaultOpenEvent.ts +16 -16
  112. package/src/events/types/swap/ClaimEvent.ts +15 -15
  113. package/src/events/types/swap/InitializeEvent.ts +18 -18
  114. package/src/events/types/swap/RefundEvent.ts +6 -6
  115. package/src/events/types/swap/SwapEvent.ts +21 -21
  116. package/src/index.ts +51 -46
  117. package/src/lockable/Lockable.ts +30 -30
  118. package/src/messaging/Messenger.ts +11 -0
  119. package/src/messaging/messages/Message.ts +25 -0
  120. package/src/messaging/messages/SwapClaimWitnessMessage.ts +34 -0
  121. package/src/spv_swap/SpvVaultContract.ts +269 -230
  122. package/src/spv_swap/SpvVaultData.ts +70 -70
  123. package/src/spv_swap/SpvWithdrawalState.ts +40 -40
  124. package/src/spv_swap/SpvWithdrawalTransactionData.ts +169 -169
  125. package/src/storage/IStorageManager.ts +16 -16
  126. package/src/storage/StorageObject.ts +6 -6
  127. package/src/swaps/ChainSwapType.ts +6 -6
  128. package/src/swaps/SwapCommitState.ts +40 -39
  129. package/src/swaps/SwapContract.ts +564 -556
  130. package/src/swaps/SwapData.ts +69 -65
  131. package/src/utils/BigIntBufferUtils.ts +31 -31
@@ -1,231 +1,270 @@
1
- import {AbstractSigner, TransactionConfirmationOptions} from "../chains/ChainInterface";
2
- import {SpvVaultData, SpvVaultTokenData} from "./SpvVaultData";
3
- import {SpvWithdrawalTransactionData} from "./SpvWithdrawalTransactionData";
4
- import {BtcStoredHeader} from "../btcrelay/types/BtcStoredHeader";
5
- import {RelaySynchronizer} from "../btcrelay/synchronizer/RelaySynchronizer";
6
- import {SpvWithdrawalState} from "./SpvWithdrawalState";
7
- import {Buffer} from "buffer";
8
- import {BtcTx} from "../btc/rpc/BitcoinRpc";
9
-
10
-
11
- export interface SpvVaultContract<
12
- TX = any,
13
- Signer extends AbstractSigner = AbstractSigner,
14
- ChainId extends string = string,
15
- Data extends SpvVaultData = SpvVaultData,
16
- WithdrawalTX extends SpvWithdrawalTransactionData = SpvWithdrawalTransactionData
17
- > {
18
-
19
- readonly chainId: ChainId;
20
-
21
- /**
22
- * Signs & sends transactions for opening a specific spv vault
23
- *
24
- * @param signer Signer to use for the transaction (must match owner in vault)
25
- * @param vault Vault to init
26
- * @param txOptions Transaction options
27
- */
28
- open(signer: Signer, vault: Data, txOptions?: TransactionConfirmationOptions): Promise<string>;
29
-
30
- /**
31
- * Returns the unsigned transactions for opening a specific spv vault
32
- *
33
- * @param signer Signer to use for the transaction (must match owner in vault)
34
- * @param vault Vault to init
35
- * @param feeRate Fee rate to use for the transaction
36
- */
37
- txsOpen(signer: string, vault: Data, feeRate?: string): Promise<TX[]>;
38
-
39
- /**
40
- * Signs & sends transactions for depositing funds to a specific spv vault
41
- *
42
- * @param signer Signer to use for the transaction (can be any)
43
- * @param vault Vault to deposit to
44
- * @param rawAmounts Raw amounts to deposit (these are unscaled)
45
- * @param txOptions Transaction options
46
- */
47
- deposit(signer: Signer, vault: Data, rawAmounts: bigint[], txOptions?: TransactionConfirmationOptions): Promise<string>;
48
-
49
- /**
50
- * Returns the unsigned transactions for depositing funds to a specific spv vault
51
- *
52
- * @param signer Signer to use for the transaction (can be any)
53
- * @param vault Vault to deposit to
54
- * @param rawAmounts Raw amounts to deposit (these are unscaled)
55
- * @param feeRate Fee rate to use for the transaction
56
- */
57
- txsDeposit(signer: string, vault: Data, rawAmounts: bigint[], feeRate?: string): Promise<TX[]>;
58
-
59
- /**
60
- * Signs & sends transactions for fronting liquidity for a specific withdrawal btc transaction
61
- *
62
- * @param signer Signer to use for the transaction (payer of the fronted liquidity)
63
- * @param vault Vault to deposit to
64
- * @param realWithdrawalTx Real withdrawal transaction data
65
- * @param withdrawSequence Sequence number of the withdrawal that is being fronted, this used as race condition
66
- * prevention, such that fronting will not happen if the withdrawal tx is already used in claim()
67
- * @param txOptions Transaction options
68
- */
69
- frontLiquidity(signer: Signer, vault: Data, realWithdrawalTx: WithdrawalTX, withdrawSequence: number, txOptions?: TransactionConfirmationOptions): Promise<string>;
70
-
71
- /**
72
- * Returns the unsigned transactions for fronting liquidity for a specific withdrawal btc transaction
73
- *
74
- * @param signer Signer to use for the transaction (payer of the fronted liquidity)
75
- * @param vault Vault to deposit to
76
- * @param realWithdrawalTx Real withdrawal transaction data
77
- * @param withdrawSequence Sequence number of the withdrawal that is being fronted, this used as race condition
78
- * prevention, such that fronting will not happen if the withdrawal tx is already used in claim()
79
- * @param feeRate Fee rate to use for the transaction
80
- */
81
- txsFrontLiquidity(signer: string, vault: Data, realWithdrawalTx: WithdrawalTX, withdrawSequence: number, feeRate?: string): Promise<TX[]>;
82
-
83
- /**
84
- * Signs & sends transactions for claiming the funds from a specific vault
85
- *
86
- * @param signer Signer to use for the transaction
87
- * @param vault Vault to claim from
88
- * @param txs
89
- * @param synchronizer Optiona synchronizer to be used if BTC relay contract is not synced up to the required blockheight
90
- * @param initAta Whether to initialize a token account if it doesn't exist (applies to e.g. Solana, with token specific ATAs)
91
- * @param txOptions Transaction options
92
- */
93
- claim(
94
- signer: Signer, vault: Data, txs: {
95
- tx: WithdrawalTX,
96
- storedHeader?: BtcStoredHeader<any>
97
- }[], synchronizer?: RelaySynchronizer<any, TX, any>,
98
- initAta?: boolean, txOptions?: TransactionConfirmationOptions
99
- ): Promise<string>;
100
-
101
- /**
102
- * Returns the unsigned transactions for claiming the funds from a specific vault
103
- *
104
- * @param signer Signer to use for the transaction
105
- * @param vault Vault to claim from
106
- * @param txs
107
- * @param synchronizer Optiona synchronizer to be used if BTC relay contract is not synced up to the required blockheight
108
- * @param initAta Whether to initialize a token account if it doesn't exist (applies to e.g. Solana, with token specific ATAs)
109
- * @param feeRate Fee rate to use for the transaction
110
- */
111
- txsClaim(
112
- signer: string, vault: Data, txs: {
113
- tx: WithdrawalTX,
114
- storedHeader?: BtcStoredHeader<any>
115
- }[], synchronizer?: RelaySynchronizer<any, TX, any>,
116
- initAta?: boolean, feeRate?: string
117
- ): Promise<TX[]>;
118
-
119
- /**
120
- * Creates vault data for a new vault
121
- *
122
- * @param owner Vault owner
123
- * @param vaultId Vault ID
124
- * @param utxo Utxo on which to assign the vault initially
125
- * @param confirmations Required number of bitcoin confirmations to be able to withdraw funds from the vault
126
- * @param tokenData Data about the tokens in the vault
127
- */
128
- createVaultData(owner: string, vaultId: bigint, utxo: string, confirmations: number, tokenData: SpvVaultTokenData[]): Promise<Data>;
129
-
130
- /**
131
- * Returns the party which currently fronted the withdrawal transaction
132
- *
133
- * @param owner Owner of the vault
134
- * @param vaultId Vault ID
135
- * @param withdrawal Withdrawal transaction to check the fronting for
136
- */
137
- getFronterAddress(owner: string, vaultId: bigint, withdrawal: WithdrawalTX): Promise<string | null>;
138
-
139
- /**
140
- * Returns current vault data
141
- *
142
- * @param owner Owner of the vault
143
- * @param vaultId Vault ID
144
- */
145
- getVaultData(owner: string, vaultId: bigint): Promise<Data>;
146
-
147
- /**
148
- * Returns all currently opened vaults
149
- * NOTE: This will take a long time, since the implementation will have to go through all the prior events
150
- */
151
- getAllVaults(owner?: string): Promise<Data[]>;
152
-
153
- /**
154
- * Returns current state of the withdrawal as specified by the bitcoin transaction ID
155
- *
156
- * @param btcTxId
157
- */
158
- getWithdrawalState(btcTxId: string): Promise<SpvWithdrawalState>;
159
-
160
- /**
161
- * Parses withdrawal data from the parsed bitcoin transaction
162
- *
163
- * @param btcTx
164
- */
165
- getWithdrawalData(btcTx: BtcTx): Promise<WithdrawalTX>;
166
-
167
- /**
168
- * Checks if given withdrawal tx is valid and correctly parses on-chain, throws error when there is any issue with
169
- * the validation
170
- *
171
- * @param tx
172
- */
173
- checkWithdrawalTx(tx: WithdrawalTX): Promise<void>;
174
-
175
- /**
176
- * Serializes the withdrawal params to the OP_RETURN data
177
- *
178
- * @param recipient Recipient of the withdrawn tokens
179
- * @param rawAmounts Raw amount of tokens to withdraw
180
- * @param executionHash Optional execution hash of the actions to execute
181
- */
182
- toOpReturnData(recipient: string, rawAmounts: bigint[], executionHash?: string): Buffer;
183
-
184
- /**
185
- * Parses withdrawal params from OP_RETURN data
186
- *
187
- * @param data data as specified in the OP_RETURN output of the transaction
188
- */
189
- fromOpReturnData(data: Buffer): {recipient: string, rawAmounts: bigint[], executionHash: string};
190
-
191
- /**
192
- * Returns the fee in native token base units to claim the swap
193
- *
194
- * @param signer Signer claiming the swap
195
- * @param vault
196
- * @param withdrawalData Withdrawal to claim
197
- * @param feeRate Optional fee rate (fetched on-demand if not provided)
198
- */
199
- getClaimFee(signer: string, vault: Data, withdrawalData: WithdrawalTX, feeRate?: string): Promise<bigint>;
200
-
201
- /**
202
- * Returns raw fee (not including any refunds we might get that would make the getClaimFee negative) for claiming the swap
203
- *
204
- * @param signer Signer claiming the swap
205
- * @param vault
206
- * @param withdrawalData Withdrawal to claim
207
- * @param feeRate Optional fee rate (fetched on-demand if not provided)
208
- */
209
- getRawClaimFee?(signer: string, vault: Data, withdrawalData: WithdrawalTX, feeRate?: string): Promise<bigint>;
210
-
211
- /**
212
- * Returns the fee in native token base units to claim the swap
213
- *
214
- * @param signer Signer claiming the swap
215
- * @param vault
216
- * @param withdrawalData Withdrawal to claim
217
- * @param feeRate Optional fee rate (fetched on-demand if not provided)
218
- */
219
- getFrontFee(signer: string, vault: Data, withdrawalData: WithdrawalTX, feeRate?: string): Promise<bigint>;
220
-
221
- /**
222
- * Returns raw fee (not including any refunds we might get that would make the getClaimFee negative) for claiming the swap
223
- *
224
- * @param signer Signer claiming the swap
225
- * @param vault
226
- * @param withdrawalData Withdrawal to claim
227
- * @param feeRate Optional fee rate (fetched on-demand if not provided)
228
- */
229
- getRawFrontFee?(signer: string, vault: Data, withdrawalData: WithdrawalTX, feeRate?: string): Promise<bigint>;
230
-
1
+ import {AbstractSigner, TransactionConfirmationOptions} from "../chains/ChainInterface";
2
+ import {SpvVaultData, SpvVaultTokenData} from "./SpvVaultData";
3
+ import {SpvWithdrawalTransactionData} from "./SpvWithdrawalTransactionData";
4
+ import {BtcStoredHeader} from "../btcrelay/types/BtcStoredHeader";
5
+ import {RelaySynchronizer} from "../btcrelay/synchronizer/RelaySynchronizer";
6
+ import {SpvWithdrawalState} from "./SpvWithdrawalState";
7
+ import {Buffer} from "buffer";
8
+ import {BtcTx} from "../btc/rpc/BitcoinRpc";
9
+
10
+
11
+ export interface SpvVaultContract<
12
+ TX = any,
13
+ Signer extends AbstractSigner = AbstractSigner,
14
+ ChainId extends string = string,
15
+ Data extends SpvVaultData = SpvVaultData,
16
+ WithdrawalTX extends SpvWithdrawalTransactionData = SpvWithdrawalTransactionData
17
+ > {
18
+
19
+ readonly chainId: ChainId;
20
+
21
+ /**
22
+ * Signs & sends transactions for opening a specific spv vault
23
+ *
24
+ * @param signer Signer to use for the transaction (must match owner in vault)
25
+ * @param vault Vault to init
26
+ * @param txOptions Transaction options
27
+ */
28
+ open(signer: Signer, vault: Data, txOptions?: TransactionConfirmationOptions): Promise<string>;
29
+
30
+ /**
31
+ * Returns the unsigned transactions for opening a specific spv vault
32
+ *
33
+ * @param signer Signer to use for the transaction (must match owner in vault)
34
+ * @param vault Vault to init
35
+ * @param feeRate Fee rate to use for the transaction
36
+ */
37
+ txsOpen(signer: string, vault: Data, feeRate?: string): Promise<TX[]>;
38
+
39
+ /**
40
+ * Signs & sends transactions for depositing funds to a specific spv vault
41
+ *
42
+ * @param signer Signer to use for the transaction (can be any)
43
+ * @param vault Vault to deposit to
44
+ * @param rawAmounts Raw amounts to deposit (these are unscaled)
45
+ * @param txOptions Transaction options
46
+ */
47
+ deposit(signer: Signer, vault: Data, rawAmounts: bigint[], txOptions?: TransactionConfirmationOptions): Promise<string>;
48
+
49
+ /**
50
+ * Returns the unsigned transactions for depositing funds to a specific spv vault
51
+ *
52
+ * @param signer Signer to use for the transaction (can be any)
53
+ * @param vault Vault to deposit to
54
+ * @param rawAmounts Raw amounts to deposit (these are unscaled)
55
+ * @param feeRate Fee rate to use for the transaction
56
+ */
57
+ txsDeposit(signer: string, vault: Data, rawAmounts: bigint[], feeRate?: string): Promise<TX[]>;
58
+
59
+ /**
60
+ * Signs & sends transactions for fronting liquidity for a specific withdrawal btc transaction
61
+ *
62
+ * @param signer Signer to use for the transaction (payer of the fronted liquidity)
63
+ * @param vault Vault to deposit to
64
+ * @param realWithdrawalTx Real withdrawal transaction data
65
+ * @param withdrawSequence Sequence number of the withdrawal that is being fronted, this used as race condition
66
+ * prevention, such that fronting will not happen if the withdrawal tx is already used in claim()
67
+ * @param txOptions Transaction options
68
+ */
69
+ frontLiquidity(signer: Signer, vault: Data, realWithdrawalTx: WithdrawalTX, withdrawSequence: number, txOptions?: TransactionConfirmationOptions): Promise<string>;
70
+
71
+ /**
72
+ * Returns the unsigned transactions for fronting liquidity for a specific withdrawal btc transaction
73
+ *
74
+ * @param signer Signer to use for the transaction (payer of the fronted liquidity)
75
+ * @param vault Vault to deposit to
76
+ * @param realWithdrawalTx Real withdrawal transaction data
77
+ * @param withdrawSequence Sequence number of the withdrawal that is being fronted, this used as race condition
78
+ * prevention, such that fronting will not happen if the withdrawal tx is already used in claim()
79
+ * @param feeRate Fee rate to use for the transaction
80
+ */
81
+ txsFrontLiquidity(signer: string, vault: Data, realWithdrawalTx: WithdrawalTX, withdrawSequence: number, feeRate?: string): Promise<TX[]>;
82
+
83
+ /**
84
+ * Signs & sends transactions for claiming the funds from a specific vault
85
+ *
86
+ * @param signer Signer to use for the transaction
87
+ * @param vault Vault to claim from
88
+ * @param txs
89
+ * @param synchronizer Optiona synchronizer to be used if BTC relay contract is not synced up to the required blockheight
90
+ * @param initAta Whether to initialize a token account if it doesn't exist (applies to e.g. Solana, with token specific ATAs)
91
+ * @param txOptions Transaction options
92
+ */
93
+ claim(
94
+ signer: Signer, vault: Data, txs: {
95
+ tx: WithdrawalTX,
96
+ storedHeader?: BtcStoredHeader<any>
97
+ }[], synchronizer?: RelaySynchronizer<any, TX, any>,
98
+ initAta?: boolean, txOptions?: TransactionConfirmationOptions
99
+ ): Promise<string>;
100
+
101
+ /**
102
+ * Returns the unsigned transactions for claiming the funds from a specific vault
103
+ *
104
+ * @param signer Signer to use for the transaction
105
+ * @param vault Vault to claim from
106
+ * @param txs
107
+ * @param synchronizer Optiona synchronizer to be used if BTC relay contract is not synced up to the required blockheight
108
+ * @param initAta Whether to initialize a token account if it doesn't exist (applies to e.g. Solana, with token specific ATAs)
109
+ * @param feeRate Fee rate to use for the transaction
110
+ */
111
+ txsClaim(
112
+ signer: string, vault: Data, txs: {
113
+ tx: WithdrawalTX,
114
+ storedHeader?: BtcStoredHeader<any>
115
+ }[], synchronizer?: RelaySynchronizer<any, TX, any>,
116
+ initAta?: boolean, feeRate?: string
117
+ ): Promise<TX[]>;
118
+
119
+ /**
120
+ * Creates vault data for a new vault
121
+ *
122
+ * @param owner Vault owner
123
+ * @param vaultId Vault ID
124
+ * @param utxo Utxo on which to assign the vault initially
125
+ * @param confirmations Required number of bitcoin confirmations to be able to withdraw funds from the vault
126
+ * @param tokenData Data about the tokens in the vault
127
+ */
128
+ createVaultData(owner: string, vaultId: bigint, utxo: string, confirmations: number, tokenData: SpvVaultTokenData[]): Promise<Data>;
129
+
130
+ /**
131
+ * Returns the party which currently fronted the withdrawal transaction
132
+ *
133
+ * @param owner Owner of the vault
134
+ * @param vaultId Vault ID
135
+ * @param withdrawal Withdrawal transaction to check the fronting for
136
+ */
137
+ getFronterAddress(owner: string, vaultId: bigint, withdrawal: WithdrawalTX): Promise<string | null>;
138
+
139
+ /**
140
+ * Returns the parties which currently fronted the withdrawal transactions
141
+ *
142
+ * @param withdrawals withdrawals to query
143
+ */
144
+ getFronterAddresses(withdrawals: {owner: string, vaultId: bigint, withdrawal: WithdrawalTX}[]): Promise<{[btcTxId: string]: string | null}>;
145
+
146
+ /**
147
+ * Returns current vault data
148
+ *
149
+ * @param owner Owner of the vault
150
+ * @param vaultId Vault ID
151
+ */
152
+ getVaultData(owner: string, vaultId: bigint): Promise<Data>;
153
+
154
+ /**
155
+ * Returns current vault data for multiple vaults
156
+ *
157
+ * @param vaults Vault data to query
158
+ */
159
+ getMultipleVaultData(vaults: {owner: string, vaultId: bigint}[]): Promise<{[owner: string]: {[vaultId: string]: Data}}>;
160
+
161
+ /**
162
+ * Returns the latest utxo of a vault (or null if vault closed or not found)
163
+ *
164
+ * @param owner Owner of the vault
165
+ * @param vaultId Vault ID
166
+ */
167
+ getVaultLatestUtxo(owner: string, vaultId: bigint): Promise<string | null>;
168
+
169
+ /**
170
+ * Returns the latest utxos of for multiple vaults (or null if vault closed or not found)
171
+ *
172
+ * @param vaults Vault data to query
173
+ */
174
+ getVaultLatestUtxos(vaults: {owner: string, vaultId: bigint}[]): Promise<{[owner: string]: {[vaultId: string]: string | null}}>;
175
+
176
+ /**
177
+ * Returns all currently opened vaults
178
+ * NOTE: This will take a long time, since the implementation will have to go through all the prior events
179
+ */
180
+ getAllVaults(owner?: string): Promise<Data[]>;
181
+
182
+ /**
183
+ * Returns current state of the withdrawal, optionally
184
+ * only check withdrawals from the provided block height
185
+ *
186
+ * @param withdrawalTx
187
+ * @param scStartBlockheight
188
+ */
189
+ getWithdrawalState(withdrawalTx: WithdrawalTX, scStartBlockheight?: number): Promise<SpvWithdrawalState>;
190
+
191
+ /**
192
+ * Returns current state of the withdrawals, optionally
193
+ * only check withdrawals from the provided block height
194
+ *
195
+ * @param withdrawalTxs Object with the withdrawal tx to check + an optional start blockheight
196
+ */
197
+ getWithdrawalStates(withdrawalTxs: {withdrawal: WithdrawalTX, scStartBlockheight?: number}[]): Promise<{[btcTxId: string]: SpvWithdrawalState}>;
198
+
199
+ /**
200
+ * Parses withdrawal data from the parsed bitcoin transaction
201
+ *
202
+ * @param btcTx
203
+ */
204
+ getWithdrawalData(btcTx: BtcTx): Promise<WithdrawalTX>;
205
+
206
+ /**
207
+ * Checks if given withdrawal tx is valid and correctly parses on-chain, throws error when there is any issue with
208
+ * the validation
209
+ *
210
+ * @param tx
211
+ */
212
+ checkWithdrawalTx(tx: WithdrawalTX): Promise<void>;
213
+
214
+ /**
215
+ * Serializes the withdrawal params to the OP_RETURN data
216
+ *
217
+ * @param recipient Recipient of the withdrawn tokens
218
+ * @param rawAmounts Raw amount of tokens to withdraw
219
+ * @param executionHash Optional execution hash of the actions to execute
220
+ */
221
+ toOpReturnData(recipient: string, rawAmounts: bigint[], executionHash?: string): Buffer;
222
+
223
+ /**
224
+ * Parses withdrawal params from OP_RETURN data
225
+ *
226
+ * @param data data as specified in the OP_RETURN output of the transaction
227
+ */
228
+ fromOpReturnData(data: Buffer): {recipient: string, rawAmounts: bigint[], executionHash: string};
229
+
230
+ /**
231
+ * Returns the fee in native token base units to claim the swap
232
+ *
233
+ * @param signer Signer claiming the swap
234
+ * @param vault
235
+ * @param withdrawalData Withdrawal to claim
236
+ * @param feeRate Optional fee rate (fetched on-demand if not provided)
237
+ */
238
+ getClaimFee(signer: string, vault: Data, withdrawalData: WithdrawalTX, feeRate?: string): Promise<bigint>;
239
+
240
+ /**
241
+ * Returns raw fee (not including any refunds we might get that would make the getClaimFee negative) for claiming the swap
242
+ *
243
+ * @param signer Signer claiming the swap
244
+ * @param vault
245
+ * @param withdrawalData Withdrawal to claim
246
+ * @param feeRate Optional fee rate (fetched on-demand if not provided)
247
+ */
248
+ getRawClaimFee?(signer: string, vault: Data, withdrawalData: WithdrawalTX, feeRate?: string): Promise<bigint>;
249
+
250
+ /**
251
+ * Returns the fee in native token base units to claim the swap
252
+ *
253
+ * @param signer Signer claiming the swap
254
+ * @param vault
255
+ * @param withdrawalData Withdrawal to claim
256
+ * @param feeRate Optional fee rate (fetched on-demand if not provided)
257
+ */
258
+ getFrontFee(signer: string, vault: Data, withdrawalData: WithdrawalTX, feeRate?: string): Promise<bigint>;
259
+
260
+ /**
261
+ * Returns raw fee (not including any refunds we might get that would make the getClaimFee negative) for claiming the swap
262
+ *
263
+ * @param signer Signer claiming the swap
264
+ * @param vault
265
+ * @param withdrawalData Withdrawal to claim
266
+ * @param feeRate Optional fee rate (fetched on-demand if not provided)
267
+ */
268
+ getRawFrontFee?(signer: string, vault: Data, withdrawalData: WithdrawalTX, feeRate?: string): Promise<bigint>;
269
+
231
270
  }
@@ -1,70 +1,70 @@
1
- import {StorageObject} from "../storage/StorageObject";
2
- import {SpvWithdrawalTransactionData} from "./SpvWithdrawalTransactionData";
3
- import {SpvVaultClaimEvent} from "../events/types/spv_vault/SpvVaultClaimEvent";
4
- import {SpvVaultCloseEvent} from "../events/types/spv_vault/SpvVaultCloseEvent";
5
- import {SpvVaultOpenEvent} from "../events/types/spv_vault/SpvVaultOpenEvent";
6
- import {SpvVaultDepositEvent} from "../events/types/spv_vault/SpvVaultDepositEvent";
7
-
8
- export type SpvVaultTokenBalance = SpvVaultTokenData & {
9
- rawAmount: bigint,
10
- scaledAmount: bigint
11
- };
12
-
13
- export type SpvVaultTokenData = {
14
- token: string,
15
- multiplier: bigint
16
- }
17
-
18
- export abstract class SpvVaultData<T extends SpvWithdrawalTransactionData = SpvWithdrawalTransactionData> implements StorageObject {
19
-
20
- static deserializers: {
21
- [type: string]: new (serialized: any) => any,
22
- } = {};
23
-
24
- static deserialize<T extends SpvVaultData>(data: any): T {
25
- if (SpvVaultData.deserializers[data.type] != null) {
26
- return new SpvVaultData.deserializers[data.type](data) as unknown as T;
27
- }
28
- }
29
-
30
- abstract serialize(): any;
31
-
32
- abstract getOwner(): string;
33
- abstract getVaultId(): bigint;
34
- abstract getTokenData(): SpvVaultTokenData[];
35
-
36
- abstract getBalances(): SpvVaultTokenBalance[];
37
- abstract getUtxo(): string;
38
- abstract getConfirmations(): number;
39
- abstract getWithdrawalCount(): number;
40
- abstract getDepositCount(): number;
41
- abstract isOpened(): boolean;
42
-
43
- abstract updateState(withdrawalTxOrEvent: T | SpvVaultClaimEvent | SpvVaultCloseEvent | SpvVaultOpenEvent | SpvVaultDepositEvent): void;
44
-
45
- calculateStateAfter(priorWithdrawalTxs: T[]): {withdrawalCount: number, balances: SpvVaultTokenBalance[]} {
46
- const balances = [...this.getBalances()];
47
- let withdrawalCount = this.getWithdrawalCount();
48
- let utxo = this.getUtxo();
49
- for(let withdrawalTx of priorWithdrawalTxs) {
50
- if(withdrawalTx.getSpentVaultUtxo()!==utxo) throw new Error("Invalid transaction, doesn't spend prior vault UTXO!");
51
- withdrawalTx.getTotalOutput().forEach((value, i) => {
52
- if(balances[i]==null) throw new Error("Tried to withdraw non-existing token!");
53
- balances[i].rawAmount -= value;
54
- if(balances[i].rawAmount < 0n) throw new Error("Prior transaction withdrew more than available in vault");
55
- });
56
- utxo = withdrawalTx.getCreatedVaultUtxo();
57
- withdrawalCount++;
58
- }
59
-
60
- balances.forEach(balance => {
61
- balance.scaledAmount = balance.rawAmount * balance.multiplier;
62
- });
63
-
64
- return {
65
- withdrawalCount,
66
- balances
67
- }
68
- }
69
-
70
- }
1
+ import {StorageObject} from "../storage/StorageObject";
2
+ import {SpvWithdrawalTransactionData} from "./SpvWithdrawalTransactionData";
3
+ import {SpvVaultClaimEvent} from "../events/types/spv_vault/SpvVaultClaimEvent";
4
+ import {SpvVaultCloseEvent} from "../events/types/spv_vault/SpvVaultCloseEvent";
5
+ import {SpvVaultOpenEvent} from "../events/types/spv_vault/SpvVaultOpenEvent";
6
+ import {SpvVaultDepositEvent} from "../events/types/spv_vault/SpvVaultDepositEvent";
7
+
8
+ export type SpvVaultTokenBalance = SpvVaultTokenData & {
9
+ rawAmount: bigint,
10
+ scaledAmount: bigint
11
+ };
12
+
13
+ export type SpvVaultTokenData = {
14
+ token: string,
15
+ multiplier: bigint
16
+ }
17
+
18
+ export abstract class SpvVaultData<T extends SpvWithdrawalTransactionData = SpvWithdrawalTransactionData> implements StorageObject {
19
+
20
+ static deserializers: {
21
+ [type: string]: new (serialized: any) => any,
22
+ } = {};
23
+
24
+ static deserialize<T extends SpvVaultData>(data: any): T {
25
+ if (SpvVaultData.deserializers[data.type] != null) {
26
+ return new SpvVaultData.deserializers[data.type](data) as unknown as T;
27
+ }
28
+ }
29
+
30
+ abstract serialize(): any;
31
+
32
+ abstract getOwner(): string;
33
+ abstract getVaultId(): bigint;
34
+ abstract getTokenData(): SpvVaultTokenData[];
35
+
36
+ abstract getBalances(): SpvVaultTokenBalance[];
37
+ abstract getUtxo(): string;
38
+ abstract getConfirmations(): number;
39
+ abstract getWithdrawalCount(): number;
40
+ abstract getDepositCount(): number;
41
+ abstract isOpened(): boolean;
42
+
43
+ abstract updateState(withdrawalTxOrEvent: T | SpvVaultClaimEvent | SpvVaultCloseEvent | SpvVaultOpenEvent | SpvVaultDepositEvent): void;
44
+
45
+ calculateStateAfter(priorWithdrawalTxs: T[]): {withdrawalCount: number, balances: SpvVaultTokenBalance[]} {
46
+ const balances = [...this.getBalances()];
47
+ let withdrawalCount = this.getWithdrawalCount();
48
+ let utxo = this.getUtxo();
49
+ for(let withdrawalTx of priorWithdrawalTxs) {
50
+ if(withdrawalTx.getSpentVaultUtxo()!==utxo) throw new Error("Invalid transaction, doesn't spend prior vault UTXO!");
51
+ withdrawalTx.getTotalOutput().forEach((value, i) => {
52
+ if(balances[i]==null) throw new Error("Tried to withdraw non-existing token!");
53
+ balances[i].rawAmount -= value;
54
+ if(balances[i].rawAmount < 0n) throw new Error("Prior transaction withdrew more than available in vault");
55
+ });
56
+ utxo = withdrawalTx.getCreatedVaultUtxo();
57
+ withdrawalCount++;
58
+ }
59
+
60
+ balances.forEach(balance => {
61
+ balance.scaledAmount = balance.rawAmount * balance.multiplier;
62
+ });
63
+
64
+ return {
65
+ withdrawalCount,
66
+ balances
67
+ }
68
+ }
69
+
70
+ }