tornado-nova/scripts/deploy.js
2021-09-09 19:03:13 +03:00

55 lines
1.9 KiB
JavaScript

const { ethers } = require('hardhat')
const MERKLE_TREE_HEIGHT = 23
const MerkleTree = require('fixed-merkle-tree')
const { poseidon } = require('circomlib')
const poseidonHash = (items) => ethers.BigNumber.from(poseidon(items).toString())
const poseidonHash2 = (a, b) => poseidonHash([a, b])
const toFixedHex = (number, length = 32) =>
'0x' +
(number instanceof Buffer
? number.toString('hex')
: ethers.BigNumber.from(number).toHexString().slice(2)
).padStart(length * 2, '0')
async function main() {
const govAddress = '0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce'
const crossDomainMessenger = '0x4200000000000000000000000000000000000007'
const Verifier2 = await ethers.getContractFactory('Verifier2')
const verifier2 = await Verifier2.deploy()
await verifier2.deployed()
console.log(`verifier2: ${verifier2.address}`)
const Verifier16 = await ethers.getContractFactory('Verifier16')
const verifier16 = await Verifier16.deploy()
await verifier16.deployed()
console.log(`verifier16: ${verifier16.address}`)
const tree = new MerkleTree(MERKLE_TREE_HEIGHT, [], { hashFunction: poseidonHash2 })
const root = await tree.root()
console.log('root', toFixedHex(root))
const Pool = await ethers.getContractFactory('TornadoPool')
const tornado = await Pool.deploy(verifier2.address, verifier16.address)
await tornado.deployed()
console.log(`TornadoPool address: ${tornado.address}`)
const CrossChainUpgradeableProxy = await ethers.getContractFactory('CrossChainUpgradeableProxy')
const proxy = await CrossChainUpgradeableProxy.deploy(tornado.address, govAddress, [], crossDomainMessenger)
await proxy.deployed()
console.log(`proxy address: ${proxy.address}`)
const tornadoPool = Pool.attach(proxy.address)
await tornadoPool.initialize(toFixedHex(root))
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error)
process.exit(1)
})