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.
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 Compliance for details
Supported Chains
See Hinkal Supported Chains for a list of chains on which Hinkal Private Payments are supported.
Installation
To use Hinkal Private Payments, install the necessary package:
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
Strongly consider using Encryption and Decryption to keep the request contents private, including the payer and payee identity addresses, when paying requests from a Hinkal private address. Revealing the payer and payee identity addresses increases the likelihood of un-shielding the payment sender's address via on-chain analysis.
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
argumentDeposit to someone else's Hinkal shielded address: set
recipientInfo
to the shielded address of the payment recipient.
Hinkal private addresses must be shared out-of-band. This SDK doesn't offer functions for sharing Hinkal private addresses.
See Quickstart - Browser for how to instantiate a Signer
Content Security Policy
The Hinkal SDK depends on snarkjs, a powerful library that enables local zero-knowledge proving in browser and Node.js environments. Snarkjs leverages WebAssembly 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 Integration for more details.
Details
For more details about Hinkal Private Payments, refer to Pull Request #1482 on GitHub.
Last updated
Was this helpful?