Skip to Content
For DevelopersMaking RequestsDirectly Query the Network

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"

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 made
  • signature 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 on