tornado-ts
v0.0.8
Published
Tornado Cash core functions written in Typescript
Downloads
115
Maintainers
Readme
tornado-ts
Tornado Cash core functions written in Typescript. Things you can do with these utilities in this package include:
- Create CLI tools interacting with the Tornado Cash smart contracts
- Create bots to automate interacting with the Tornado Cash smart contracts
- Create APIs allowing clients to interact with the Tornado Cash smart contracts
Install
$ npm install -s tornado-tsUse
See examples folder for small example scripts on using the functions in this library to perform deposits or withdrawals from tornado cash.
// simple deposit script
import Web3 from "web3";
import { initializeTC, createInvoice, parseNote } from "tornado-ts";
const web3 = new Web3(process.env.RPC);
const currency = process.env.CURRENCY || "eth";
const amount = process.env.AMOUNT || "0.1";
const { tornadoRouter, tornadoInstanceAddress, decimals } = await initializeTC(
web3,
currency,
amount
);
const [, depositNote] = await createInvoice(
currency,
amount,
await web3.eth.getChainId()
);
const { deposit } = await parseNote(depositNote);
const txn = tornadoRouter.methods.deposit(
tornadoInstanceAddress,
deposit.commitmentHex,
[]
);
const gasLimit = await txn.estimateGas({
from: userWallet.address,
value: depositAmountRaw,
});
const txReceipt = await txn.send({
from: userWallet.address,
value: depositAmountRaw,
gasLimit: new BigNumber(gasLimit).times("1.05").toFixed(0),
gasPrice: new BigNumber(await web3.eth.getGasPrice()).times("1.1").toFixed(0),
});
console.log("Deposited! tx:", txReceipt.transactionHash);Update Event Cache
Depending on the network, currency (ETH, USDC, etc.), and amount you're withdrawing, it could take a long time to build the merkle tree proof to build the parameters required to execute your withdrawal on chain. To speed up withdrawals we build a cache in the cache directory that gets stored and downloaded with this package whenever you use it (hence the large download size).
If we want to update the cache for a given tornado cash deployment you can use the src/tasks/fetchAllEvents.ts task.
Usage
# npx ts-node src/tasks/fetchAllEvents.ts <chainId> <currency> <amount>
# The following updates the mainnet (chainId == 1), ETH, 1 ETH tornado deployment cache
$ npx ts-node src/tasks/fetchAllEvents.ts 1 eth 1
# The following updates the mainnet (chainId == 1), ETH, 10 ETH tornado deployment cache
$ npx ts-node src/tasks/fetchAllEvents.ts 1 eth 10Development
$ git clone https://github.com/moontography/tornado-ts
$ cd tornado-ts
$ npm install
# run tests
$ npm testLicense
MIT
