@atomiqlabs/chain-starknet
Version:
Starknet specific base implementation
39 lines (31 loc) • 1.39 kB
text/typescript
import {StarknetTx} from "../../../chain/modules/StarknetTransactions";
import {StarknetSwapData} from "../../StarknetSwapData";
import {bigNumberishToBuffer} from "../../../../utils/Utils";
import {BigNumberish} from "starknet";
import {IHandler} from "../IHandler";
import {StarknetGas} from "../../../chain/modules/StarknetFees";
export class TimelockRefundHandler implements IHandler<bigint, never> {
public readonly address: string;
public static readonly gas: StarknetGas = {l1DataGas: 0, l2Gas: 4_000_000, l1Gas: 0};
constructor(address: string) {
this.address = address;
}
public getCommitment(data: bigint): BigNumberish {
return data;
}
public getWitness(signer: string, data: StarknetSwapData): Promise<{
initialTxns: StarknetTx[],
witness: BigNumberish[]
}> {
const expiry = TimelockRefundHandler.getExpiry(data);
const currentTimestamp = BigInt(Math.floor(Date.now()/1000));
if(expiry > currentTimestamp) throw new Error("Not expired yet!");
return Promise.resolve({initialTxns: [], witness: []});
}
getGas(): StarknetGas {
return TimelockRefundHandler.gas;
}
public static getExpiry(data: StarknetSwapData): bigint {
return bigNumberishToBuffer(data.refundData, 32).readBigUInt64BE(24).valueOf();
}
}