@renproject/rentx
Version:
XState Statemachines for tracking RenVM transactions reactively
79 lines (78 loc) • 2.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.burnMachine = void 0;
const xstate_1 = require("xstate");
const getFirstTx = (tx) => Object.values(tx.transactions)[0];
exports.burnMachine = xstate_1.Machine({
id: "RenVMBurnMachine",
initial: "restoring",
states: {
restoring: {
entry: xstate_1.send("RESTORE"),
on: {
RESTORE: [
{ target: "srcConfirmed", cond: "isSrcConfirmed" },
{ target: "srcSettling", cond: "isSrcSettling" },
{ target: "created" },
],
},
},
created: {
invoke: {
src: "burnCreator",
onDone: {
target: "srcSettling",
actions: xstate_1.assign({
tx: (ctx, evt) => (Object.assign(Object.assign({}, ctx.tx), evt.data)),
}),
},
onError: {
target: "createError",
actions: xstate_1.assign({
tx: (ctx, evt) => (Object.assign(Object.assign({}, ctx.tx), { error: evt.data })),
}),
},
},
},
createError: {
on: {
RETRY: "created",
},
},
srcSettling: {
invoke: {
src: "burnListener",
},
on: {
CONFIRMATION: {
// update src confs
actions: xstate_1.assign({
tx: (ctx, evt) => evt.data
? Object.assign(Object.assign({}, ctx.tx), { transactions: {
[evt.data.sourceTxHash]: evt.data,
} }) : ctx.tx,
}),
},
CONFIRMED: {
target: "srcConfirmed",
},
},
},
srcConfirmed: {
on: {
RELEASED: "destInitiated",
},
},
destInitiated: {},
},
}, {
guards: {
isSrcSettling: (ctx, _evt) => { var _a; return ((_a = getFirstTx(ctx.tx)) === null || _a === void 0 ? void 0 : _a.sourceTxHash) ? true : false; },
isSrcConfirmed: (ctx, _evt) => {
var _a, _b;
return ((_a = getFirstTx(ctx.tx)) === null || _a === void 0 ? void 0 : _a.sourceTxConfs) >=
(((_b = getFirstTx(ctx.tx)) === null || _b === void 0 ? void 0 : _b.sourceTxConfTarget) ||
Number.POSITIVE_INFINITY);
},
},
});