Directly query the network
Create your point from your input
With mishtiwasm
Install:
npm i @holonym-foundation/mishtiwasm
Here is an example for a Human Key creation with oprf secp256k1
Import:
import init, { oprf_client_step1_secp256k1, unmask_secp256k1 } from "@holonym-foundation/mishtiwasm"
// important to call init -- wasm is initialized asynchronously.
// without it, the other functions won't work
await init();
To create a masked point from your input, use:
// Salt and secret input are arrays of uint8s
const { encoded_masked_point, secret_mask } = oprf_client_step1_secp256k1(salt, secret);
encoded_masked_point
can be the value for point
in the RequestToNetwork
Unmasking the point
After querying the network and receiving the point response_from_network
, unmask the response via
// Salt and secret input are arrays of uint8s
const result = unmask_secp256k1(response_from_network, secret_mask);
This is the output of the OPRF!
Form a query to Human Network
Querying the epoch and their request number via the POST /user-state/
endpoint to find the user
pub struct StateRequest {
pub user: ethereum_types::Address,
pub method: Method,
}
Requests to the network are of the following format
pub struct RequestToNetwork {
/// The method of the request
pub method: Method,
/// Encoded point to be multiplied
pub point: Vec<u8>,
/// Which epoch this request is from
pub epoch: u32,
/// Which request number this is from this user in this epoch. Starts at 1 not 0 to ensure the first request is paid for.
pub request_per_user: u32,
/// Signature of the request, from an address with credits.
pub signature: Option<ethers_core::types::signature::Signature>,
/// Extra optional data
pub extra_data: Option<Vec<u8>>,
}
Use the point obtained above as pub point: Vec<u8>
Method is an enum with the following format
pub enum Method {
OPRFSecp256k1,
DecryptBabyJubJub,
JWTPRFSecp256k1,
}
Here is an example request:
{
"method": "OPRFSecp256k1",
"point": [2,58,211,253,26,34,132,83,157,111,80,144,179,1,88,82,243,119,99,104,156,248,158,115,87,30,114,39,90,142,78,236,28],
"epoch": 123,
"request_per_user": 69,
"signature": {
"r": "0xe3fbde1404800f5ac238b30f2118b69a1cdb604d0b4227056f18f87beb83abf2",
"s": "0x9132d353ef806f526ef5e48cbee6872a11fcf688c2d92023a384d0f02082466",
"v": 28
},
"extra_data": null
}
How to find the epoch, request_per_user, and signature fields
To make a request to the network you need to know a few things
epoch
request_per_user
signifying how many requests the signer who signed off on the request has madesignature
by the user who signed the request who you need to have credits at the address who signed the request.
Query the network
Run the following command:
curl 'http://44.217.242.218:8081' \
-H 'Content-Type: application/json'\
...
Last updated