@atomiqlabs/chain-starknet
Version:
Starknet specific base implementation
51 lines (40 loc) • 1.79 kB
text/typescript
import {StarknetSwapData} from "../../../StarknetSwapData";
import {StarknetGas} from "../../../../chain/StarknetAction";
import {ChainSwapType} from "@atomiqlabs/base";
import {BigNumberish} from "starknet";
import {StarknetTx} from "../../../../chain/modules/StarknetTransactions";
import {bufferToU32Array, getLogger} from "../../../../../utils/Utils";
import {BitcoinCommitmentData, BitcoinWitnessData, IBitcoinClaimHandler} from "./IBitcoinClaimHandler";
import {Buffer} from "buffer";
export type BitcoinTxIdCommitmentData = {
txId: string
};
const logger = getLogger("BitcoinTxIdClaimHandler: ");
export class BitcoinTxIdClaimHandler extends IBitcoinClaimHandler<BitcoinTxIdCommitmentData, BitcoinWitnessData> {
public static readonly type: ChainSwapType = ChainSwapType.CHAIN_TXID;
public static readonly gas: StarknetGas = {l1: 20000};
protected serializeCommitment(data: BitcoinTxIdCommitmentData & BitcoinCommitmentData): BigNumberish[] {
return [
...bufferToU32Array(Buffer.from(data.txId, "hex").reverse()),
...super.serializeCommitment(data)
];
}
getWitness(
signer: string,
swapData: StarknetSwapData,
witnessData: BitcoinWitnessData,
feeRate?: string
): Promise<{
initialTxns: StarknetTx[];
witness: BigNumberish[]
}> {
if(!swapData.isClaimHandler(this.address)) throw new Error("Invalid claim handler");
return this._getWitness(signer, swapData, witnessData, {txId: witnessData.tx.txid});
}
getGas(data: StarknetSwapData): StarknetGas {
return BitcoinTxIdClaimHandler.gas;
}
getType(): ChainSwapType {
return BitcoinTxIdClaimHandler.type;
}
}