Skip to content

Commit 949e755

Browse files
committed
feat: check melt quote
1 parent 89bda97 commit 949e755

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

src/core/mint/mint.zig

+11
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const zul = @import("zul");
1111
const RWMutex = helper.RWMutex;
1212
const MintInfo = core.nuts.MintInfo;
1313
const MintQuoteBolt11Response = core.nuts.nut04.MintQuoteBolt11Response;
14+
const MeltQuoteBolt11Response = core.nuts.nut05.MeltQuoteBolt11Response;
1415
const MintQuoteState = core.nuts.nut04.QuoteState;
1516
const MintKeySet = core.nuts.MintKeySet;
1617
const CurrencyUnit = core.nuts.CurrencyUnit;
@@ -937,6 +938,16 @@ pub const Mint = struct {
937938
.signatures = promises.items,
938939
};
939940
}
941+
942+
/// Check melt quote status
943+
pub fn checkMeltQuote(self: *Mint, gpa: std.mem.Allocator, quote_id: [16]u8) !MeltQuoteBolt11Response {
944+
const quote = try self.localstore
945+
.value
946+
.getMeltQuote(gpa, quote_id) orelse return error.UnknownQuote;
947+
errdefer quote.deinit();
948+
949+
return MeltQuoteBolt11Response.fromMeltQuote(quote);
950+
}
940951
};
941952

942953
/// Generate new [`MintKeySetInfo`] from path

src/router/router.zig

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ pub fn createMintServer(
5050
router.get("/v1/keysets", router_handlers.getKeysets, .{});
5151
router.get("/v1/keys/:keyset_id", router_handlers.getKeysetPubkeys, .{});
5252
router.get("/v1/mint/quote/bolt11/:quote_id", router_handlers.getCheckMintBolt11Quote, .{});
53+
router.get("/v1/melt/quote/bolt11/:quote_id", router_handlers.getCheckMeltBolt11Quote, .{});
5354
router.post("/v1/checkstate", router_handlers.postCheck, .{});
5455
router.get("/v1/info", router_handlers.getMintInfo, .{});
5556

src/router/router_handlers.zig

+18
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,24 @@ pub fn getCheckMintBolt11Quote(
4848
return try res.json(quote, .{});
4949
}
5050

51+
pub fn getCheckMeltBolt11Quote(
52+
state: MintState,
53+
req: *httpz.Request,
54+
res: *httpz.Response,
55+
) !void {
56+
const quote_id_hex = req.param("quote_id") orelse return error.ExpectQuoteId;
57+
58+
const quote_id = try zul.UUID.parse(quote_id_hex);
59+
const quote = state
60+
.mint
61+
.checkMeltQuote(res.arena, quote_id.bin) catch |err| {
62+
std.log.debug("Could not check melt quote {any}: {any}", .{ quote_id, err });
63+
return error.CheckMintQuoteFailed;
64+
};
65+
66+
return try res.json(quote, .{});
67+
}
68+
5169
pub fn postCheck(
5270
state: MintState,
5371
req: *httpz.Request,

0 commit comments

Comments
 (0)