From feae15740a2a531edd57b39fafc806dc12148682 Mon Sep 17 00:00:00 2001 From: Craig Everett Date: Wed, 31 Dec 2025 01:06:20 +0900 Subject: [PATCH] WIP --- src/hz.erl | 13 +++++++++++++ src/hz_grids.erl | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/hz.erl b/src/hz.erl index 2d909e1..53c5d37 100644 --- a/src/hz.erl +++ b/src/hz.erl @@ -2461,6 +2461,19 @@ spend3(DSenderID, hz:post_tx(Encoded). +-spec sign(Scheme, Target, SecKey) -> Sig + when Scheme :: message | binary | bitcoin, + Target :: binary(), + SecKey :: binary(), + Sig :: binary(). + +sign(message, Target, SecKey) -> sign_message(Message, SecKey); +sign(binary, Target, SecKey) -> sign_binary(Target, SecKey); +sign(bitcoin, Target, SecKey) -> sign_bitcoin(Target, SecKey). + +sign(bitcoin, Target, SecKey) -> sign_message(Target, SecKey). + + -spec sign_message(Message, SecKey) -> Sig when Message :: binary(), SecKey :: binary(), diff --git a/src/hz_grids.erl b/src/hz_grids.erl index 78da96b..48ad922 100644 --- a/src/hz_grids.erl +++ b/src/hz_grids.erl @@ -190,16 +190,48 @@ l_to_i(S) -> end. +-spec req(Type, Message) -> RequestMap + when Type :: {sign, message | binary | bitcoin} + | tx + | ack + | sign, + Message :: binary(), + RequestMap :: map(). +%% @doc +%% GRIDS maps always contain the following keys: +%% ``` +%% #{"grids" => 1, +%% "chain" => "gajumaru", +%% "network_id" => "groot.mainnet.gajumaru.io", +%% "type" => "message" | "binary" | "binary" | "tx" | "ack" +%% "public_id" => term(), +%% "payload" => string()}; +%% ''' + req(Type, Message) -> req(Type, Message, false). -req(sign, Message, ID) -> +req({sign, message}, Message, ID) -> #{"grids" => 1, "chain" => "gajumaru", "network_id" => hz:network_id(), "type" => "message", "public_id" => ID, "payload" => Message}; +req({sign, binary}, Binary, ID) -> + #{"grids" => 1, + "chain" => "gajumaru", + "network_id" => hz:network_id(), + "type" => "binary", + "public_id" => ID, + "payload" => base64:encode(Binary)}; +req({sign, bitcoin}, Binary, ID) -> + #{"grids" => 1, + "chain" => "gajumaru", + "network_id" => hz:network_id(), + "type" => "bitcoin", + "public_id" => ID, + "payload" => base64:encode(Binary)}; req(tx, Data, ID) -> #{"grids" => 1, "chain" => "gajumaru", @@ -213,4 +245,6 @@ req(ack, Message, ID) -> "network_id" => hz:network_id(), "type" => "ack", "public_id" => ID, - "payload" => Message}. + "payload" => Message}; +req(sign, Message, ID) -> + req({sign, message}, Message, ID).