Sending Transactions
Deposit, transfers and withdrawals
Depositing Funds
Send tokens to the privacy pool
async deposit(
amountGwei: bigint,
signatureCallback: (request: SignatureRequest) => Promise<string>,
fromAddress: string,
relayerFee?: RelayerFee,
blockNumber?: number,
): Promise<string>
Parameters
amountGwei
- token amount to deposit into an account (in pool dimension)
signatureCallback
- a callback with SignatureRequest which invoked when needed to ask user to sign data
fromAddress
- the 0x
-address which will be used to depositing funds
relayerFee
- a raw relayer fee object which will be used to estimate total transaction fee (will requested under the hood when undefined)
blockNumber
- the client waits until the internal provider becomes synced with the specified block before the input account balance (and allowance if applicable) validation. The waiting interval is hardcoded to 60 seconds. If the provider does not become synced within that interval the transaction is sent.
Returns
Promise
returns jobId
returned by relayer which can be use to monitor transaction
Example
const jobId = await zkClient.depositPermittable(
100000000000n, // 100 BOB in pool dimension
async (signingRequest) => {
switch (signingRequest.type) {
case SignatureType.TypedDataV4:
// signingRequest.data is an object for typed signature
// which contains domain, types, primaryType and message fields
return signTypedData(signingRequest.data); // use a 3rd-party lib to sign
case SignatureType.PersonalSign:
// signingRequest.data is hex-string representation of signing data
return sign(signingRequest.data); // use a 3rd-party lib to sign
default:
throw new Error(`Signing request with unknown type`);
}
},
'0x49C92c016d2c7A245aAF5351BD932D9D61536eC0', // depositor address
undefined // the actual relayer fee will be requested under the hood
);
console.log(`Deposit sent to the relayer. A job with ID ${jobId} has been assigned`)
// output: Deposit sent to the relayer. A job with ID 42 has been assigned
Transfer Funds Inside a Pool
Transfer tokens inside a pool to the requested addresses. The function creates a set of transactions (needed to process requests), sends it to the relayer in sequence order and returns a set of job IDs assigned by relayer
async transferMulti(
transfers: TransferRequest[],
relayerFee?: RelayerFee
): Promise<string[]>
Parameters
transfers
- a set of transfer destinations. A single destination should contain the receiver shielded address and associated funds amount to transfer
relayerFee
- a raw relayer fee object which will be used to estimate total transaction fee (will requested under the hood when undefined)
Returns
Promise
returns array of job IDs (each sent transaction associated with the unique job ID assigned by relayer)
Example
transfers = [{
// Alice will receives 15 BOB
destination: zkbob_sepolia:CFSGGVWQpmwxmHEiZ123PXKVxbpv3LthegaSiwS1RKW1o5ExL3zRSRTg3TR9sHF,
amountGwei: 15000000000n
}, {
// Bob will receive 42 BOB
destination: zkbob_sepolia:ELg4LcwsynhEaZWh9SNgWBbK7Xg2tjVyTNCgaxvoy4c7jLNudcJqAdL459RHBdg
amountGwei: 42000000000n
}];
const jobIds = await zkClient.transferMulti(transfers);
console.log(`Accepted by relayer. Job(s) ${jobIds.join(', ')} created`)
// output: Accepted by relayer. Job(s) 43 created
Withdraw Funds From the Pool
Withdraw tokens to the 0x
-address. The function creates a set of transactions (needed to process withdraw), sends it to the relayer and returns a set of job IDs assigned by relayer
async withdrawMulti(
address: string,
amountGwei: bigint,
swapAmount: bigint,
relayerFee?: RelayerFee
): Promise<string[]>
Parameters
address
- a 0x
destination address to the sending withdrawn tokens
amountGwei
- tokens amount to be withdrawn (in pool dimension)
swapAmount
- part of amountGwei
which requested to swap to the native coins on withdrawal (in pool dimension)
relayerFee
- a raw relayer fee object which will be used to estimate total transaction fee (will requested under the hood when undefined)
Returns
Promise
returns array of job IDs (each sent transaction associated with the unique job ID assigned by relayer)
Example
const jobIds = await zkClient.withdrawMulti(
'0x09d967A5268b64E8334f3a65336C33B7538BFe69',
25000000000n, // withdraw 25 BOB
5000000000n, // swap 5 (of 25 BOB) to MATIC
);
console.log(`Accepted by relayer. Job(s) ${jobIds.join(', ')} created`)
// output: Accepted by relayer. Job(s) 44 created
Last updated
Was this helpful?