@debridge-finance/desdk
Version:
Send, track and claim arbitrary cross-chain messages over the deBridge protocol programmatically
93 lines • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Submission = exports.SubmissionStatus = void 0;
const ethers_1 = require("ethers");
const claim_1 = require("./claim");
const context_1 = require("./context");
const structs_1 = require("./structs");
const typechain_1 = require("./typechain");
var SubmissionStatus;
(function (SubmissionStatus) {
SubmissionStatus[SubmissionStatus["WAITING_CONFIRMATION"] = 0] = "WAITING_CONFIRMATION";
SubmissionStatus[SubmissionStatus["WAITING_CLAIM"] = 1] = "WAITING_CLAIM";
SubmissionStatus[SubmissionStatus["CLAIMED"] = 2] = "CLAIMED";
})(SubmissionStatus || (exports.SubmissionStatus = SubmissionStatus = {}));
class Submission {
static async findAll(txHash, ctx) {
const events = await getSentEvents(txHash, ctx);
const originChainId = Number((await (0, context_1.getProvider)(ctx).getNetwork()).chainId);
return events.map((sentEvent) => new Submission({
submissionId: sentEvent.args.submissionId.toString(),
debridgeId: sentEvent.args.debridgeId.toString(),
amount: sentEvent.args.amount.toString(),
receiver: sentEvent.args.receiver.toString(),
nonce: sentEvent.args.nonce.toString(),
chainIdTo: sentEvent.args.chainIdTo.toString(),
referralCode: sentEvent.args.referralCode,
feeParams: sentEvent.args.feeParams,
autoParams: sentEvent.args.autoParams === "0x"
? undefined
: structs_1.SendAutoParams.decode(sentEvent.args.autoParams),
nativeSender: sentEvent.args.nativeSender.toString(),
originChainId,
sentEvent,
}, ctx));
}
static async find(txHash, submissionId, ctx) {
const submissions = await Submission.findAll(txHash, ctx);
return submissions.find((s) => s.submissionId === submissionId);
}
constructor(args, ctx) {
this.ctx = ctx;
Object.assign(this, args);
}
async hasRequiredBlockConfirmations(overrideBlockConfirmations) {
const requiredConfirmations = overrideBlockConfirmations === undefined
? await this._getRequiredConfirmations()
: overrideBlockConfirmations;
const currentBlockNumber = await (0, context_1.getProvider)(this.ctx).getBlockNumber();
const submissionBlockNumber = this.sentEvent.blockNumber;
if (submissionBlockNumber + requiredConfirmations <= currentBlockNumber) {
return true;
}
return false;
}
async _getRequiredConfirmations() {
const { chainId } = await (0, context_1.getProvider)(this.ctx).getNetwork();
if (chainId === 137n)
return 256;
else
return 12;
}
async toEVMClaim(destinationCtx) {
if (!destinationCtx.signatureStorage)
destinationCtx.signatureStorage = this.ctx.signatureStorage;
return new claim_1.Claim({
submissionId: this.submissionId,
debridgeId: this.debridgeId,
amount: this.amount,
chainIdFrom: this.originChainId,
receiver: this.receiver,
nonce: this.nonce,
autoParams: this.autoParams
? this.autoParams.toClaimAutoParams(this)
: undefined,
}, destinationCtx);
}
}
exports.Submission = Submission;
async function getSentEvents(txHash, opts) {
const provider = (0, context_1.getProvider)(opts);
const txReceipt = await provider.getTransactionReceipt(txHash);
if (!txReceipt)
return [];
const contract = typechain_1.DeBridgeGate__factory.connect((0, context_1.getDeBridgeGateAddress)(opts), provider);
return txReceipt.logs
.map((log) => {
const logDescription = contract.interface.parseLog(log);
if (logDescription?.name === "Sent")
return new ethers_1.EventLog(log, contract.interface, logDescription.fragment);
})
.filter((log) => log !== undefined);
}
//# sourceMappingURL=submission.js.map