dagger-contracts/contracts/Collateral.sol

33 lines
752 B
Solidity
Raw Normal View History

2022-02-14 14:47:01 +00:00
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract Collateral {
IERC20 private immutable token;
mapping(address => uint256) private balances;
2022-02-14 15:19:47 +00:00
uint256 private totalDeposited;
uint256 private totalBalance;
constructor(IERC20 _token) invariant {
2022-02-14 14:47:01 +00:00
token = _token;
}
function balanceOf(address account) public view returns (uint256) {
return balances[account];
}
2022-02-14 15:19:47 +00:00
function deposit(uint256 amount) public invariant {
2022-02-14 14:47:01 +00:00
token.transferFrom(msg.sender, address(this), amount);
2022-02-14 15:19:47 +00:00
totalDeposited += amount;
2022-02-14 14:47:01 +00:00
balances[msg.sender] += amount;
2022-02-14 15:19:47 +00:00
totalBalance += amount;
}
modifier invariant() {
_;
assert(totalDeposited == totalBalance);
2022-02-14 14:47:01 +00:00
}
}