@atomiqlabs/chain-evm
Version:
EVM specific base implementation
38 lines (30 loc) • 1.33 kB
text/typescript
import {IHandler} from "../IHandler";
import {BigIntBufferUtils} from "@atomiqlabs/base";
import {EVMSwapData} from "../../EVMSwapData";
import {EVMTx} from "../../../chain/modules/EVMTransactions";
export class TimelockRefundHandler implements IHandler<bigint, never> {
public readonly address: string;
public static readonly gas: number = 5_000;
constructor(address: string) {
this.address = address;
}
public getCommitment(data: bigint): string {
return "0x"+BigIntBufferUtils.toBuffer(data, "be", 32).toString("hex");
}
public getWitness(signer: string, data: EVMSwapData): Promise<{
initialTxns: EVMTx[],
witness: Buffer
}> {
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: Buffer.alloc(0)});
}
getGas(): number {
return TimelockRefundHandler.gas;
}
public static getExpiry(data: EVMSwapData): bigint {
const expiryDataBuffer = Buffer.from(data.refundData.startsWith("0x") ? data.refundData.substring(2) : data.refundData, "hex");
return BigIntBufferUtils.fromBuffer(expiryDataBuffer, "be");
}
}