mirror of
https://github.com/tornadocash/tornado-cli.git
synced 2024-11-22 01:37:08 +01:00
Support sending ETH and ERC20
This commit is contained in:
parent
90a34da5b8
commit
a4c511c86f
58
cli.js
58
cli.js
@ -71,7 +71,11 @@ async function generateTransaction(to, encodedData, value = 0) {
|
|||||||
const bumped = Math.floor(fetchedGas * 1.3)
|
const bumped = Math.floor(fetchedGas * 1.3)
|
||||||
gasLimit = web3.utils.toHex(bumped)
|
gasLimit = web3.utils.toHex(bumped)
|
||||||
}
|
}
|
||||||
|
if (encodedData) {
|
||||||
await estimateGas();
|
await estimateGas();
|
||||||
|
} else {
|
||||||
|
gasLimit = web3.utils.toHex(21000);
|
||||||
|
}
|
||||||
|
|
||||||
async function txoptions() {
|
async function txoptions() {
|
||||||
// Generate EIP-1559 transaction
|
// Generate EIP-1559 transaction
|
||||||
@ -348,6 +352,53 @@ async function withdraw({ deposit, currency, amount, recipient, relayerURL, torP
|
|||||||
console.log('Done withdrawal from Tornado Cash')
|
console.log('Done withdrawal from Tornado Cash')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do an ETH / ERC20 send
|
||||||
|
* @param address Recepient address
|
||||||
|
* @param amount Amount to send
|
||||||
|
* @param tokenAddress ERC20 token address
|
||||||
|
*/
|
||||||
|
async function send({ address, amount, tokenAddress }) {
|
||||||
|
// using private key
|
||||||
|
assert(senderAccount != null, 'Error! PRIVATE_KEY not found. Please provide PRIVATE_KEY in .env file if you send')
|
||||||
|
if (tokenAddress) {
|
||||||
|
const erc20ContractJson = require('./build/contracts/ERC20Mock.json')
|
||||||
|
erc20 = new web3.eth.Contract(erc20ContractJson.abi, tokenAddress)
|
||||||
|
const balance = await erc20.methods.balanceOf(senderAccount).call()
|
||||||
|
const decimals = await erc20.methods.decimals().call()
|
||||||
|
const toSend = amount * Math.pow(10, decimals)
|
||||||
|
if (balance < toSend) {
|
||||||
|
console.error("You have",toDecimals(balance, decimals, (balance.length + decimals)).toString().replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ","),(await erc20.methods.symbol().call()),", you can't send more than you have")
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
await generateTransaction(tokenAddress, await erc20.methods.transfer(address, toBN(toSend)).encodeABI())
|
||||||
|
console.log('Sent',amount,(await erc20.methods.symbol().call()),'to',address);
|
||||||
|
} else {
|
||||||
|
const balance = await web3.eth.getBalance(senderAccount)
|
||||||
|
if (balance == 0) {
|
||||||
|
console.error("You have 0 balance, can't send")
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
if (!amount) {
|
||||||
|
console.log('Amount not defined, sending all available amounts')
|
||||||
|
const gasPrice = await fetchGasPrice()
|
||||||
|
const gasLimit = 21000;
|
||||||
|
if (netId == 1 || netId == 5) {
|
||||||
|
const priorityFee = await gasPrices(3)
|
||||||
|
amount = (balance - (gasLimit * (parseInt(gasPrice) + parseInt(priorityFee))))
|
||||||
|
} else {
|
||||||
|
amount = (balance - (gasLimit * parseInt(gasPrice)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (balance < amount) {
|
||||||
|
console.error("You have",web3.utils.fromWei(toHex(balance)),netSymbol,", you can't send more than you have.")
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
await generateTransaction(address, null, amount)
|
||||||
|
console.log('Sent',web3.utils.fromWei(toHex(amount)),netSymbol,'to',address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getStatus(id, relayerURL, options) {
|
function getStatus(id, relayerURL, options) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
async function getRelayerStatus() {
|
async function getRelayerStatus() {
|
||||||
@ -984,6 +1035,13 @@ async function main() {
|
|||||||
await printERC20Balance({ address, name: 'Account', tokenAddress })
|
await printERC20Balance({ address, name: 'Account', tokenAddress })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
program
|
||||||
|
.command('send <address> [amount] [token_address]')
|
||||||
|
.description('Send ETH or ERC to address')
|
||||||
|
.action(async (address, amount, tokenAddress) => {
|
||||||
|
await init({ rpc: program.rpc, torPort: program.tor, balanceCheck: true })
|
||||||
|
await send({ address, amount, tokenAddress })
|
||||||
|
})
|
||||||
program
|
program
|
||||||
.command('compliance <note>')
|
.command('compliance <note>')
|
||||||
.description(
|
.description(
|
||||||
|
Loading…
Reference in New Issue
Block a user