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,
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.
Using npm:
``sh`
npm install @hinkal/common
Or, yarn:
`sh`
yarn add @hinkal/common
#### Initialization
To get started with Hinkal, initialize it based on the Web3 connection library you’re using:
ethers.js:
`typescript`
import { prepareEthersHinkal } from '@hinkal/common/providers/prepareEthersHinkal';
// signer: ethers.Signer
const hinkal = await prepareEthersHinkal(signer);
wagmi:
`typescript`
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:
`typescript`
const balances = await hinkal.getBalances();
#### Depositing funds to the shielded balance
A user can deposit funds to their shielded address using:
`typescript`
function deposit(erc20addresses: string[], amountChanges: bigint[]): Promise
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:
`typescript`
function actionPrivateWallet(
erc20Addresses: string[],
amountChanges: bigint[],
onChainCreation: boolean[],
ops: string[],
): Promise
where onChainCreation indicates the amounts of tokens that are uncertain before the transaction is executed on-chain. The ops array contains encoded user operations.
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:
`typescript`
function checkAccessToken(): Promise
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:
`typescript`
function getSupportedPassportLinks(): string[];
After passing the compliance check, the user can mint an access token using:
`typescript``
const { signatureData } = await hinkal.getAPI().getAccessTokenSignature(chainId, ethereumAddress, accessKey);
await mintAccessToken(this, signatureData);
Application: Hinkal
Docs: Hinkal Documentation