// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma abicoder v2; import "tornado-core/contracts/ERC20Tornado.sol"; contract ERC20TornadoCloneable is ERC20Tornado { constructor(address verifier, address hasher) ERC20Tornado(IVerifier(verifier), IHasher(hasher), 1, 1, IERC20(address(0))) {} function init( uint256 _denomination, uint32 _merkleTreeHeight, address _token ) external { require(denomination == 0 && levels == 0, "already initialized"); /// In Constructor: ERC20Tornado token = IERC20(_token); /// In Constructor: Tornado require(_denomination > 0, "denomination should be greater than 0"); denomination = _denomination; /// In Constructor: MerkleTreeWithHistory require(_merkleTreeHeight > 0, "_levels should be greater than zero"); require(_merkleTreeHeight < 32, "_levels should be less than 32"); levels = _merkleTreeHeight; for (uint32 i = 0; i < _merkleTreeHeight; i++) { filledSubtrees[i] = zeros(i); } roots[0] = zeros(_merkleTreeHeight - 1); } }