@hinkal/common
v0.2.7
Published
Hinkal is middleware and a set of smart contracts on EVM chains that use ZK-proofs and stealth addresses to enable compliant and private transactions on major dApps. Users can privately store assets and transact on platforms such as Uniswap, Pendle, Lido,
Downloads
5,409
Readme
Hinkal SDK
Hinkal is middleware and a set of smart contracts on EVM chains that use ZK-proofs and stealth addresses to enable compliant and private transactions on major dApps. Users can privately store assets and transact on platforms such as Uniswap, Pendle, Lido, Curve, and others.
This SDK enables users to perform arbitrary smart contract interactions privately.
Installation
Using npm:
npm install @hinkal/common
Or, yarn:
yarn add @hinkal/common
Usage
Initialization
To get started with Hinkal, initialize it based on the Web3 connection library you’re using:
ethers.js:
import { prepareEthersHinkal } from '@hinkal/common/providers/prepareEthersHinkal';
// signer: ethers.Signer
const hinkal = await prepareEthersHinkal(signer);
wagmi:
import { prepareWagmiHinkal } from '@hinkal/common/providers/prepareWagmiHinkal';
// connector: wagmi.Connector
// config: wagmi.Config
const hinkal = await prepareWagmiHinkal(connector, config);
Shielded balance
Once the Hinkal object is initialized, shielded balances become accessible and can be calculated as needed:
const balances = await hinkal.getBalances();
Depositing funds to the shielded balance
A user can deposit funds to their shielded address using:
function deposit(erc20addresses: string[], amountChanges: bigint[]): Promise<TransactionObject>;
where erc20Addresses is an array of token addresses, and amountChanges represents the token amounts for the deposit.
Interacting with smart contracts privately
After a user’s shielded balance is updated, they can perform any smart contract interaction privately using:
function actionPrivateWallet(
erc20Addresses: string[],
amountChanges: bigint[],
onChainCreation: boolean[],
ops: string[],
): Promise<TransactionObject>;
where onChainCreation indicates the amounts of tokens that are uncertain before the transaction is executed on-chain. The ops array contains encoded user operations.
Access Tokens
Before interacting with Hinkal smart contracts, users need to mint an access token after passing compliance checks.
To check whether a user already has an access token, use the checkAccessToken function:
function checkAccessToken(): Promise<boolean>;
If the user does not have an access token, they must use one of the compliance providers to pass the check. To view the available providers:
function getSupportedPassportLinks(): string[];
After passing the compliance check, the user can mint an access token using:
const { signatureData } = await hinkal.getAPI().getAccessTokenSignature(chainId, ethereumAddress, accessKey);
await mintAccessToken(this, signatureData);
References
Application: Hinkal Docs: Hinkal Documentation