UNPKG

@atomiqlabs/chain-starknet

Version:
226 lines (225 loc) 9.48 kB
import { BitcoinRpc, BtcTx, RelaySynchronizer, SpvVaultContract, SpvVaultTokenData, SpvWithdrawalClaimedState, SpvWithdrawalFrontedState, SpvWithdrawalState, SpvWithdrawalTransactionData, TransactionConfirmationOptions } from "@atomiqlabs/base"; import { Buffer } from "buffer"; import { StarknetTx } from "../chain/modules/StarknetTransactions"; import { StarknetContractBase } from "../contract/StarknetContractBase"; import { StarknetChainInterface } from "../chain/StarknetChainInterface"; import { StarknetBtcRelay } from "../btcrelay/StarknetBtcRelay"; import { StarknetAction } from "../chain/StarknetAction"; import { SpvVaultContractAbi } from "./SpvVaultContractAbi"; import { StarknetSigner } from "../wallet/StarknetSigner"; import { StarknetSpvVaultData } from "./StarknetSpvVaultData"; import { StarknetSpvWithdrawalData } from "./StarknetSpvWithdrawalData"; import { StarknetBtcStoredHeader } from "../btcrelay/headers/StarknetBtcStoredHeader"; /** * Starknet SPV vault (UTXO-controlled vault) contract representation * * @category Swaps */ export declare class StarknetSpvVaultContract extends StarknetContractBase<typeof SpvVaultContractAbi> implements SpvVaultContract<StarknetTx, StarknetSigner, "STARKNET", StarknetSpvWithdrawalData, StarknetSpvVaultData> { private static readonly GasCosts; readonly chainId = "STARKNET"; readonly claimTimeout: number; readonly maxClaimsPerTx: number; private readonly btcRelay; private readonly bitcoinRpc; private readonly logger; constructor(chainInterface: StarknetChainInterface, btcRelay: StarknetBtcRelay<any>, bitcoinRpc: BitcoinRpc<any>, contractAddress?: string, contractDeploymentHeight?: number); /** * Returns a {@link StarknetAction} that opens up the spv vault with the passed data * * @param signer A starknet signer's address * @param vault Vault data and configuration */ Open(signer: string, vault: StarknetSpvVaultData): StarknetAction; /** * Returns a {@link StarknetAction} that deposits assets to the spv vault, amounts have to be already scaled! * This also doesn't add the approval call! * * @param signer A starknet signer's address * @param vault Vault data and configuration * @param rawAmounts An array of amounts to deposit, since the vault supports 2 tokens, up to 2 amounts are allowed */ Deposit(signer: string, vault: StarknetSpvVaultData, rawAmounts: bigint[]): StarknetAction; /** * Returns a {@link StarknetAction} that fronts the vault withdrawal. This doesn't add the approval call! * * @param signer A starknet signer's address * @param vault Vault data and configuration * @param data Vault withdrawal transaction data to front * @param withdrawalSequence Which withdrawal in sequence is this, used to prevent race conditions when 2 parties * were to front at the same time */ Front(signer: string, vault: StarknetSpvVaultData, data: StarknetSpvWithdrawalData, withdrawalSequence: number): StarknetAction; /** * Returns a {@link StarknetAction} that submits the withdrawal data and executes the vault withdrawal * * @param signer A starknet signer's address * @param vault Vault data and configuration * @param data Vault withdrawal transaction data to execute and claim assets based on it * @param blockheader A stored and committed bitcoin blockheader where the bitcoin transaction got confirmed * @param merkle Merkle proof for the bitcoin transaction * @param position Position of the bitcoin transaction in the block - used for the merkle proof verification */ Claim(signer: string, vault: StarknetSpvVaultData, data: StarknetSpvWithdrawalData, blockheader: StarknetBtcStoredHeader, merkle: Buffer[], position: number): StarknetAction; /** * @inheritDoc */ checkWithdrawalTx(tx: SpvWithdrawalTransactionData): Promise<void>; /** * @inheritDoc */ createVaultData(owner: string, vaultId: bigint, utxo: string, confirmations: number, tokenData: SpvVaultTokenData[]): Promise<StarknetSpvVaultData>; /** * @inheritDoc */ getVaultData(owner: string, vaultId: bigint): Promise<StarknetSpvVaultData | null>; /** * @inheritDoc */ getMultipleVaultData(vaults: { owner: string; vaultId: bigint; }[]): Promise<{ [owner: string]: { [vaultId: string]: StarknetSpvVaultData | null; }; }>; /** * @inheritDoc */ getVaultLatestUtxo(owner: string, vaultId: bigint): Promise<string | null>; /** * @inheritDoc */ getVaultLatestUtxos(vaults: { owner: string; vaultId: bigint; }[]): Promise<{ [owner: string]: { [vaultId: string]: string | null; }; }>; /** * @inheritDoc */ getAllVaults(owner?: string): Promise<StarknetSpvVaultData[]>; /** * @inheritDoc */ getFronterAddress(owner: string, vaultId: bigint, withdrawal: StarknetSpvWithdrawalData): Promise<string | null>; /** * @inheritDoc */ getFronterAddresses(withdrawals: { owner: string; vaultId: bigint; withdrawal: StarknetSpvWithdrawalData; }[]): Promise<{ [btcTxId: string]: string | null; }>; /** * * @param event * @private */ private parseWithdrawalEvent; /** * @inheritDoc */ getWithdrawalStates(withdrawalTxs: { withdrawal: StarknetSpvWithdrawalData; scStartBlockheight?: number; }[]): Promise<{ [btcTxId: string]: SpvWithdrawalState; }>; /** * @inheritDoc */ getWithdrawalState(withdrawalTx: StarknetSpvWithdrawalData, scStartBlockheight?: number): Promise<SpvWithdrawalState>; getHistoricalWithdrawalStates(recipient: string, startBlockheight?: number): Promise<{ withdrawals: { [btcTxId: string]: SpvWithdrawalClaimedState | SpvWithdrawalFrontedState; }; latestBlockheight?: number; }>; /** * @inheritDoc */ getWithdrawalData(btcTx: BtcTx): Promise<StarknetSpvWithdrawalData>; /** * @inheritDoc */ fromOpReturnData(data: Buffer): { recipient: string; rawAmounts: bigint[]; executionHash?: string; }; /** * Parses withdrawal params from OP_RETURN data * * @param data data as specified in the OP_RETURN output of the transaction */ static fromOpReturnData(data: Buffer): { recipient: string; rawAmounts: bigint[]; executionHash?: string; }; /** * @inheritDoc */ toOpReturnData(recipient: string, rawAmounts: bigint[], executionHash?: string): Buffer; /** * Serializes the withdrawal params to the OP_RETURN data * * @param recipient Recipient of the withdrawn tokens * @param rawAmounts Raw amount of tokens to withdraw * @param executionHash Optional execution hash of the actions to execute */ static toOpReturnData(recipient: string, rawAmounts: bigint[], executionHash?: string): Buffer; /** * @inheritDoc */ claim(signer: StarknetSigner, vault: StarknetSpvVaultData, txs: { tx: StarknetSpvWithdrawalData; storedHeader?: StarknetBtcStoredHeader; }[], synchronizer?: RelaySynchronizer<any, any, any>, initAta?: boolean, txOptions?: TransactionConfirmationOptions): Promise<string>; /** * @inheritDoc */ deposit(signer: StarknetSigner, vault: StarknetSpvVaultData, rawAmounts: bigint[], txOptions?: TransactionConfirmationOptions): Promise<string>; /** * @inheritDoc */ frontLiquidity(signer: StarknetSigner, vault: StarknetSpvVaultData, realWithdrawalTx: StarknetSpvWithdrawalData, withdrawSequence: number, txOptions?: TransactionConfirmationOptions): Promise<string>; /** * @inheritDoc */ open(signer: StarknetSigner, vault: StarknetSpvVaultData, txOptions?: TransactionConfirmationOptions): Promise<string>; /** * @inheritDoc */ txsClaim(signer: string, vault: StarknetSpvVaultData, txs: { tx: StarknetSpvWithdrawalData; storedHeader?: StarknetBtcStoredHeader; }[], synchronizer?: RelaySynchronizer<any, any, any>, initAta?: boolean, feeRate?: string): Promise<StarknetTx[]>; /** * @inheritDoc */ txsDeposit(signer: string, vault: StarknetSpvVaultData, rawAmounts: bigint[], feeRate?: string): Promise<StarknetTx[]>; /** * @inheritDoc */ txsFrontLiquidity(signer: string, vault: StarknetSpvVaultData, realWithdrawalTx: StarknetSpvWithdrawalData, withdrawSequence: number, feeRate?: string): Promise<StarknetTx[]>; /** * @inheritDoc */ txsOpen(signer: string, vault: StarknetSpvVaultData, feeRate?: string): Promise<StarknetTx[]>; /** * @inheritDoc */ getClaimFee(signer: string, vault: StarknetSpvVaultData, withdrawalData: StarknetSpvWithdrawalData, feeRate?: string): Promise<bigint>; /** * @inheritDoc */ getFrontFee(signer: string, vault: StarknetSpvVaultData, withdrawalData: StarknetSpvWithdrawalData, feeRate?: string): Promise<bigint>; }