mirror of
https://github.com/tornadocash/tornado-core.git
synced 2024-12-28 23:57:56 +01:00
update cPool
This commit is contained in:
parent
4069b61421
commit
78bd4175fa
14
.travis.yml
14
.travis.yml
@ -1,14 +0,0 @@
|
|||||||
dist: trusty
|
|
||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- '11'
|
|
||||||
install:
|
|
||||||
- npm ci
|
|
||||||
- cp .env.example .env
|
|
||||||
- travis_wait 30 npm run build
|
|
||||||
- npx ganache-cli > /dev/null &
|
|
||||||
- npm run migrate:dev
|
|
||||||
script:
|
|
||||||
- npm run test
|
|
||||||
- npm run eslint
|
|
||||||
- node cli.js test
|
|
@ -13,23 +13,26 @@
|
|||||||
pragma solidity ^0.6.0;
|
pragma solidity ^0.6.0;
|
||||||
|
|
||||||
import "./Tornado.sol";
|
import "./Tornado.sol";
|
||||||
|
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
||||||
|
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
|
||||||
|
|
||||||
contract ERC20Tornado is Tornado {
|
contract ERC20Tornado is Tornado {
|
||||||
address public token;
|
using SafeERC20 for IERC20;
|
||||||
|
IERC20 public immutable token;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
IVerifier _verifier,
|
IVerifier _verifier,
|
||||||
IHasher _hasher,
|
IHasher _hasher,
|
||||||
uint256 _denomination,
|
uint256 _denomination,
|
||||||
uint32 _merkleTreeHeight,
|
uint32 _merkleTreeHeight,
|
||||||
address _token
|
IERC20 _token
|
||||||
) public Tornado(_verifier, _hasher, _denomination, _merkleTreeHeight) {
|
) public Tornado(_verifier, _hasher, _denomination, _merkleTreeHeight) {
|
||||||
token = _token;
|
token = _token;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _processDeposit() internal override {
|
function _processDeposit() internal override {
|
||||||
require(msg.value == 0, "ETH value is supposed to be 0 for ERC20 instance");
|
require(msg.value == 0, "ETH value is supposed to be 0 for ERC20 instance");
|
||||||
_safeErc20TransferFrom(msg.sender, address(this), denomination);
|
token.safeTransferFrom(msg.sender, address(this), denomination);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _processWithdraw(
|
function _processWithdraw(
|
||||||
@ -40,9 +43,9 @@ contract ERC20Tornado is Tornado {
|
|||||||
) internal override {
|
) internal override {
|
||||||
require(msg.value == _refund, "Incorrect refund amount received by the contract");
|
require(msg.value == _refund, "Incorrect refund amount received by the contract");
|
||||||
|
|
||||||
_safeErc20Transfer(_recipient, denomination - _fee);
|
token.safeTransfer(_recipient, denomination - _fee);
|
||||||
if (_fee > 0) {
|
if (_fee > 0) {
|
||||||
_safeErc20Transfer(_relayer, _fee);
|
token.safeTransfer(_relayer, _fee);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_refund > 0) {
|
if (_refund > 0) {
|
||||||
@ -53,47 +56,4 @@ contract ERC20Tornado is Tornado {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function _safeErc20TransferFrom(
|
|
||||||
address _from,
|
|
||||||
address _to,
|
|
||||||
uint256 _amount
|
|
||||||
) internal {
|
|
||||||
(bool success, bytes memory data) =
|
|
||||||
token.call(
|
|
||||||
abi.encodeWithSelector(
|
|
||||||
0x23b872dd, /* transferFrom */
|
|
||||||
_from,
|
|
||||||
_to,
|
|
||||||
_amount
|
|
||||||
)
|
|
||||||
);
|
|
||||||
require(success, "not enough allowed tokens");
|
|
||||||
|
|
||||||
// if contract returns some data lets make sure that is `true` according to standard
|
|
||||||
if (data.length > 0) {
|
|
||||||
require(data.length == 32, "data length should be either 0 or 32 bytes");
|
|
||||||
success = abi.decode(data, (bool));
|
|
||||||
require(success, "not enough allowed tokens. Token returns false.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function _safeErc20Transfer(address _to, uint256 _amount) internal {
|
|
||||||
(bool success, bytes memory data) =
|
|
||||||
token.call(
|
|
||||||
abi.encodeWithSelector(
|
|
||||||
0xa9059cbb, /* transfer */
|
|
||||||
_to,
|
|
||||||
_amount
|
|
||||||
)
|
|
||||||
);
|
|
||||||
require(success, "not enough tokens");
|
|
||||||
|
|
||||||
// if contract returns some data lets make sure that is `true` according to standard
|
|
||||||
if (data.length > 0) {
|
|
||||||
require(data.length == 32, "data length should be either 0 or 32 bytes");
|
|
||||||
success = abi.decode(data, (bool));
|
|
||||||
require(success, "not enough tokens. Token returns false.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -12,28 +12,27 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.6.0;
|
pragma solidity ^0.6.0;
|
||||||
|
|
||||||
interface IComptroller {
|
import "./ERC20Tornado.sol";
|
||||||
function claimComp(address holder) external;
|
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
||||||
}
|
|
||||||
|
|
||||||
interface IComptroller {
|
contract cPool is ERC20Tornado {
|
||||||
function transfer(address dst, uint rawAmount) external returns (bool);
|
|
||||||
function balanceOf(address owner) external;
|
|
||||||
}
|
|
||||||
|
|
||||||
contract ERC20Tornado is Tornado {
|
|
||||||
IComptroller public comptroller;
|
|
||||||
address public immutable governance = 0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce;
|
address public immutable governance = 0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce;
|
||||||
ICOMP public immutable COMP = 0xc00e94Cb662C3520282E6f5717214004A7f26888;
|
IERC20 public immutable comp;
|
||||||
|
|
||||||
constructor(IComptroller _comptroller, ICOMP _comp) public {
|
constructor(
|
||||||
comptroller = _comptroller;
|
IERC20 _comp,
|
||||||
COMP = _comp;
|
IVerifier _verifier,
|
||||||
|
IHasher _hasher,
|
||||||
|
uint256 _denomination,
|
||||||
|
uint32 _merkleTreeHeight,
|
||||||
|
IERC20 _token
|
||||||
|
) ERC20Tornado(_verifier, _hasher, _denomination, _merkleTreeHeight, _token) public {
|
||||||
|
comp = _comp;
|
||||||
}
|
}
|
||||||
|
|
||||||
function moveYeild() {
|
/// @dev Moves earned yield of the COMP token to the tornado governance contract
|
||||||
comp.claimComp(address(this));
|
/// To make it work you may need to call `comptroller.claimComp(cPoolAddress)` before
|
||||||
uint balance = COMP.balanceOf(address(this));
|
function claimComp() external {
|
||||||
COMP.transfer(governance, balance);
|
comp.transfer(governance, comp.balanceOf(address(this)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user