update transfer to support any chains

This commit is contained in:
Alexey 2021-08-02 21:32:33 +03:00
parent 97c592da0f
commit 4d2244297b

View File

@ -66,6 +66,7 @@ contract TornadoPool {
@dev The constructor @dev The constructor
@param _verifier2 the address of SNARK verifier for 2 inputs @param _verifier2 the address of SNARK verifier for 2 inputs
@param _verifier16 the address of SNARK verifier for 16 inputs @param _verifier16 the address of SNARK verifier for 16 inputs
@param _currentRoot root of an empty Merkle tree
*/ */
constructor( constructor(
IVerifier _verifier2, IVerifier _verifier2,
@ -98,14 +99,14 @@ contract TornadoPool {
require(msg.value == 0, "Sent ETH amount should be 0 for withdrawal"); require(msg.value == 0, "Sent ETH amount should be 0 for withdrawal");
require(_extData.recipient != address(0), "Can't withdraw to zero address"); require(_extData.recipient != address(0), "Can't withdraw to zero address");
// _extData.recipient.transfer(uint256(-extAmount)); // _extData.recipient.transfer(uint256(-extAmount));
ERC20(0x4200000000000000000000000000000000000006).transfer(_extData.recipient, uint256(-extAmount)); _transfer(_extData.recipient, uint256(-extAmount));
} else { } else {
require(msg.value == 0, "Sent ETH amount should be 0 for transaction"); require(msg.value == 0, "Sent ETH amount should be 0 for transaction");
} }
if (_args.fee > 0) { if (_args.fee > 0) {
// _extData.relayer.transfer(_args.fee); // _extData.relayer.transfer(_args.fee);
ERC20(0x4200000000000000000000000000000000000006).transfer(_extData.relayer, _args.fee); _transfer(_extData.relayer, _args.fee);
} }
emit NewCommitment(_args.outputCommitments[0], currentCommitmentIndex++, _extData.encryptedOutput1); emit NewCommitment(_args.outputCommitments[0], currentCommitmentIndex++, _extData.encryptedOutput1);
@ -115,6 +116,18 @@ contract TornadoPool {
} }
} }
function _transfer(address payable _to, uint256 _amount) internal {
uint256 id;
assembly {
id := chainid()
}
if (id == 10) {
ERC20(0x4200000000000000000000000000000000000006).transfer(_to, _amount);
} else {
_to.transfer(_amount);
}
}
function calculateExternalAmount(uint256 _extAmount) public pure returns (int256) { function calculateExternalAmount(uint256 _extAmount) public pure returns (int256) {
// -MAX_EXT_AMOUNT < extAmount < MAX_EXT_AMOUNT // -MAX_EXT_AMOUNT < extAmount < MAX_EXT_AMOUNT
if (_extAmount < MAX_EXT_AMOUNT) { if (_extAmount < MAX_EXT_AMOUNT) {