githubEdit

Hinkal Private Payments

The Request Network SDK supports Hinkal Private Payments using ERC-20 tokens. Hinkal is a middleware and suite of smart contracts on EVM-compatible chains that leverage zero-knowledge proofs and private addresses to facilitate compliant and private transactions.

Each public address has exactly one Hinkal private address.

The @requestnetwork/payment-processor package provides functions to:

  • Pay a request from a Hinkal private address to a public address: such that the payment sender's public address never appears on-chain.

  • Deposit to a Hinkal private address from a public address: such that the payment recipient's public address never appears on-chain. Callers can choose to deposit to their own private address or someone else's private address.

circle-info

Paying a request where the payment recipient address is a Hinkal private address is not supported because the Request Network payment proxy smart contracts can only send funds to public addresses. Consider using Declarative Payment instead.

Benefits

  • Privacy: Obfuscates payer address when paying a request.

  • Compliance: Ensures transactions adhere to regulatory requirements. See Hinkal Compliancearrow-up-right for details

Supported Chains

See Hinkal Supported Chainsarrow-up-right for a list of chains on which Hinkal Private Payments are supported.

Installation

To use Hinkal Private Payments, install the necessary package:

npm install @requestnetwork/payment-processor

Usage

Pay a request from a Hinkal private address

To pay a request from a Hinkal private address to a public address, where only the payment sender's address is obfuscated, use the `payErc20FeeProxyRequestFromHinkalShieldedAddress()` function. Ensure the payment sender's Hinkal private address has a positive balance using Deposit to a Hinkal private address

circle-exclamation
circle-info

See Quickstart - Browser for how to instantiate a RequestNetwork and Signer

Deposit to a Hinkal private address

To deposit funds to a Hinkal private address from a public address, where only the payment recipient's address is obfuscated, use the sendToHinkalShieldedAddressFromPublic() function.

  • Deposit to own Hinkal shielded address: omit the recipientInfo argument

  • Deposit to someone else's Hinkal shielded address: set recipientInfo to the shielded address of the payment recipient.

circle-info

Hinkal private addresses must be shared out-of-band. This SDK doesn't offer functions for sharing Hinkal private addresses.

circle-info

See Quickstart - Browser for how to instantiate a Signer

Content Security Policy

The Hinkal SDK depends on snarkjsarrow-up-right, a powerful library that enables local zero-knowledge proving in browser and Node.js environments. Snarkjs leverages WebAssemblyarrow-up-right to perform complex cryptographic computations efficiently.

As a result, any client-side application integrating the Hinkal SDK must adjust its Content-Security-Policy to allow the wasm-unsafe-eval directive under the script-src setting. This configuration ensures that the cryptographic processes can execute properly.

See Hinkal SDK Integrationarrow-up-right for more details.

Details

For more details about Hinkal Private Payments, refer to Pull Request #1482arrow-up-right on GitHub.

Last updated

Was this helpful?