Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions packages/sui-indexer/src/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export class SuiEventHandler {
} else if (e.type.includes("::nbtc::ProposeUtxoEvent")) {
await this.handleProposeUtxo(json as ProposeUtxoEventRaw);
} else if (e.type.includes("::nbtc::redeem_request::SolvedEvent")) {
await this.handleSolved(json as SolvedEventRaw);
await this.handleSolvedRedeem(json as SolvedEventRaw);
} else if (e.type.includes("::nbtc::redeem_request::SignatureRecordedEvent")) {
await this.handleIkaSignatureRecorded(json as SignatureRecordedEventRaw);
}
Expand Down Expand Up @@ -82,13 +82,13 @@ export class SuiEventHandler {
});
}

private async handleSolved(e: SolvedEventRaw) {
private async handleSolvedRedeem(e: SolvedEventRaw) {
await this.storage.upsertRedeemInputs(
Number(e.redeem_id),
e.utxo_ids.map(Number),
e.dwallet_ids,
);
await this.storage.markRedeemSolved(Number(e.redeem_id));
await this.storage.markRedeemSigning(Number(e.redeem_id));

logger.info({
msg: "Marked redeem as solved and added inputs",
Expand Down
4 changes: 2 additions & 2 deletions packages/sui-indexer/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,14 +111,14 @@ async function runRedeemSolver(storage: D1Storage, env: Env, activeNetworks: Sui
service.processPendingRedeems(), // propose a solution
service
.solveReadyRedeems() // trigger status change
.then(() => service.processSolvedRedeems()), // request signatures
.then(() => service.processSigningRedeems()), // request signatures
service.broadcastReadyRedeems(), // broadcast fully signed txs
]);

// Check for any rejected promises and log errors
reportErrors(results, "runRedeemSolver", "Processing redeems error", [
"processPendingRedeems",
"solveReadyRedeems/processSolvedRedeems",
"solveReadyRedeems/processSigningRedeems",
"broadcastReadyRedeems",
]);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/sui-indexer/src/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export interface Utxo {
export enum RedeemStatusEnum {
Pending = "pending",
Proposed = "proposed",
Solved = "solved",
Signing = "signing",
Signed = "signed",
}

Expand Down
16 changes: 8 additions & 8 deletions packages/sui-indexer/src/redeem-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,14 @@ export class RedeemService {
}
}

async processSolvedRedeems() {
async processSigningRedeems() {
// NOTE: here we are processing only 50 redeems every minute (every cron), we are not
// looping thought all the solved redeems to avoid cloudflare timeout, since we are
// already waiting for ika to sign, when calling ikaSdk.getPresignInParicularState
const solved = await this.storage.getSolvedRedeems();
if (solved.length === 0) return;
const sinnings = await this.storage.getSigningRedeems();
if (sinnings.length === 0) return;

for (const req of solved) {
for (const req of sinnings) {
await this.processSolvedRedeem(req);
}
}
Expand Down Expand Up @@ -393,13 +393,13 @@ export class RedeemService {
redeemId: req.redeem_id,
txDigest: txDigest,
});

await this.storage.markRedeemSolved(req.redeem_id);
// update status for signing
await this.storage.markRedeemSigning(req.redeem_id);
} catch (e: unknown) {
logError(
{
msg: "Failed to solve redeem request",
method: "solveRequest",
msg: "Failed to update to signing",
method: "makeSigning",
redeemId: req.redeem_id,
},
e,
Expand Down
12 changes: 6 additions & 6 deletions packages/sui-indexer/src/storage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -367,20 +367,20 @@ describe("IndexerStorage", () => {
expect(redeem!.status).toBe(RedeemRequestStatus.Proposed);
});

it("markRedeemSolved should update redeem status", async () => {
it("markRedeemSigning should update redeem status", async () => {
await insertRedeemRequest(storage, 1, "redeemer1", recipientScript, 3000, 1000, "0xSuiTx1");
await db
.prepare("UPDATE nbtc_redeem_requests SET status = ? WHERE redeem_id = ?")
.bind(RedeemRequestStatus.Proposed, 1)
.run();

await storage.markRedeemSolved(1);
await storage.markRedeemSigning(1);

const redeem = await db
.prepare("SELECT status FROM nbtc_redeem_requests WHERE redeem_id = ?")
.bind(1)
.first<{ status: string }>();
expect(redeem!.status).toBe(RedeemRequestStatus.Solved);
expect(redeem!.status).toBe(RedeemRequestStatus.Signing);
});

it("getActiveNetworks should return distinct active networks", async () => {
Expand All @@ -405,7 +405,7 @@ describe("IndexerStorage", () => {
expect(networks).not.toContain(toSuiNet("testnet"));
});

it("getSolvedRedeems should return solved redeems with inputs", async () => {
it("getSigningRedeems should return signing redeems with inputs", async () => {
await insertRedeemRequest(storage, 1, "redeemer1", recipientScript, 3000, 1000, "0xSuiTx1");
await insertUtxo(
storage,
Expand All @@ -419,7 +419,7 @@ describe("IndexerStorage", () => {
null,
);
await storage.markRedeemProposed(1, [1], UTXO_LOCK_TIME_MS);
await storage.markRedeemSolved(1);
await storage.markRedeemSigning(1);
await storage.saveRedeemInputs([
{
redeem_id: 1,
Expand All @@ -430,7 +430,7 @@ describe("IndexerStorage", () => {
},
]);

const redeems = await storage.getSolvedRedeems();
const redeems = await storage.getSigningRedeems();

expect(redeems.length).toBe(1);
expect(redeems[0]!.redeem_id).toBe(1);
Expand Down
12 changes: 6 additions & 6 deletions packages/sui-indexer/src/storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -330,17 +330,17 @@ export class D1Storage {
await this.db.batch([updateSolution, updateRequest]);
}

async markRedeemSolved(redeemId: number): Promise<void> {
async markRedeemSigning(redeemId: number): Promise<void> {
try {
await this.db
.prepare("UPDATE nbtc_redeem_requests SET status = ? WHERE redeem_id = ?")
.bind(RedeemRequestStatus.Solved, redeemId)
.bind(RedeemRequestStatus.Signing, redeemId)
.run();
} catch (error) {
logError(
{
msg: "Failed to mark redeem as solved",
method: "markRedeemSolved",
msg: "Failed to mark redeem as signing",
method: "markRedeemSigning",
redeemId,
},
error,
Expand Down Expand Up @@ -474,7 +474,7 @@ export class D1Storage {
return results;
}

async getSolvedRedeems(): Promise<RedeemRequestWithInputs[]> {
async getSigningRedeems(): Promise<RedeemRequestWithInputs[]> {
const query = `
SELECT
r.redeem_id, r.setup_id, r.redeemer, r.recipient_script, r.amount, r.status, r.created_at,
Expand All @@ -488,7 +488,7 @@ export class D1Storage {
`;
const { results: requests } = await this.db
.prepare(query)
.bind(RedeemRequestStatus.Solved)
.bind(RedeemRequestStatus.Signing)
.all<RedeemRequestRow>();

if (requests.length === 0) {
Expand Down