Untitled
unknown
plain_text
2 years ago
3.7 kB
9
Indexable
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity 0.8.10;
import {DSTestPlus} from "./utils/DSTestPlus.sol";
import {DSInvariantTest} from "./utils/DSInvariantTest.sol";
import {MockERC20} from "./utils/mocks/MockERC20.sol";
import "../src/Exchange.sol";
contract ExchangeTest is DSTestPlus {
Exchange internal exchange;
address internal owner;
uint256 internal ownerPrivateKey;
address internal userA;
uint256 internal userAPrivateKey;
address internal userB;
uint256 internal userBPrivateKey;
address internal userC;
uint256 internal userCPrivateKey;
uint256 internal transferringTrustedPrivateKey;
uint256 internal transferringTrustedSignerPrivateKey;
uint256 internal withdrawCommissionSignerPrivateKey;
MockERC20 internal token;
uint256 internal amount;
bytes32 internal transferringMessageHash;
bytes internal transferringSignature;
bytes32 internal withdrawCommissionMessageHash;
bytes internal withdrawCommissionSignature;
function setUp() public {
amount = 1000 ether;
ownerPrivateKey = 10;
owner = hevm.addr(ownerPrivateKey);
userAPrivateKey = 15;
userA = hevm.addr(userAPrivateKey);
userBPrivateKey = 16;
userB = hevm.addr(userBPrivateKey);
userCPrivateKey = 17;
userC = hevm.addr(userCPrivateKey);
transferringTrustedPrivateKey = 20;
transferringTrustedSignerPrivateKey = 30;
withdrawCommissionSignerPrivateKey = 40;
token = new MockERC20("Token", "TKN", 18);
token.mint(userA, amount);
hevm.prank(owner);
exchange = new Exchange();
hevm.prank(userA);
token.approve(address(exchange), amount);
token.mint(address(exchange), amount);
hevm.startPrank(owner);
exchange.setTransferringTrustedSignerAddress(hevm.addr(transferringTrustedSignerPrivateKey));
exchange.setTransferringTrustedAddress(hevm.addr(transferringTrustedPrivateKey));
exchange.setTransferThresholdAmount(address(token), amount);
hevm.stopPrank();
//
transferringMessageHash = keccak256(
abi.encodePacked(
[address(token)], [userB], [amount], exchange.getNonce(hevm.addr(transferringTrustedSignerPrivateKey))
)
);
hevm.startPrank(hevm.addr(transferringTrustedSignerPrivateKey));
bytes32 digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", transferringMessageHash));
(uint8 v, bytes32 r, bytes32 s) = hevm.sign(transferringTrustedSignerPrivateKey, digest);
transferringSignature = abi.encodePacked(r, s, v);
hevm.stopPrank();
//
hevm.startPrank(hevm.addr(withdrawCommissionSignerPrivateKey));
withdrawCommissionMessageHash = keccak256(
abi.encode(
exchange._TYPEHASH,
hevm.addr(withdrawCommissionSignerPrivateKey),
address(token),
userC,
amount,
exchange.getNonce(hevm.addr(withdrawCommissionSignerPrivateKey)),
1 days
)
);
bytes32 digest1 =
keccak256(abi.encodePacked("\x19\x01", exchange.DOMAIN_SEPARATOR(), withdrawCommissionMessageHash));
(uint8 v1, bytes32 r1, bytes32 s1) = hevm.sign(withdrawCommissionSignerPrivateKey, digest1);
withdrawCommissionSignature = abi.encodePacked(r1, s1, v1);
hevm.stopPrank();
}
function testDeposit() public {
hevm.prank(userA);
exchange.deposit(address(token), amount);
assertEq(token.balanceOf(userA), 0);
}Editor is loading...