-
Notifications
You must be signed in to change notification settings - Fork 366
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6b28067
commit 43fdcff
Showing
5 changed files
with
613 additions
and
0 deletions.
There are no files selected for viewing
43 changes: 43 additions & 0 deletions
43
program-analysis/echidna/exercises/exerciseX/NaughtCoin.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
|
||
import {ERC20} from "./level-utils/ERC20.sol"; | ||
|
||
contract NaughtCoin is ERC20 { | ||
// string public constant name = 'NaughtCoin'; | ||
// string public constant symbol = '0x0' -> 'NTC'; | ||
// uint public constant decimals = 18; | ||
uint256 public timeLock = block.timestamp + 10 * 365 days; | ||
uint256 public INITIAL_SUPPLY; | ||
address public player; | ||
|
||
// Note that the original symbol is changed from 0x0 to NTC | ||
// This is caused by https://github.com/crytic/echidna/issues/909 | ||
constructor(address _player) ERC20("NaughtCoin", "NTC") { | ||
player = _player; | ||
INITIAL_SUPPLY = 1000000 * (10**uint256(decimals())); | ||
// _totalSupply = INITIAL_SUPPLY; | ||
// _balances[player] = INITIAL_SUPPLY; | ||
_mint(player, INITIAL_SUPPLY); | ||
emit Transfer(address(0), player, INITIAL_SUPPLY); | ||
} | ||
|
||
function transfer(address _to, uint256 _value) | ||
public | ||
override | ||
lockTokens | ||
returns (bool) | ||
{ | ||
super.transfer(_to, _value); | ||
} | ||
|
||
// Prevent the initial owner from transferring tokens until the timelock has passed | ||
modifier lockTokens() { | ||
if (msg.sender == player) { | ||
require(block.timestamp > timeLock); | ||
_; | ||
} else { | ||
_; | ||
} | ||
} | ||
} |
24 changes: 24 additions & 0 deletions
24
program-analysis/echidna/exercises/exerciseX/level-utils/Context.sol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// SPDX-License-Identifier: MIT | ||
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) | ||
|
||
pragma solidity ^0.8.0; | ||
|
||
/** | ||
* @dev Provides information about the current execution context, including the | ||
* sender of the transaction and its data. While these are generally available | ||
* via msg.sender and msg.data, they should not be accessed in such a direct | ||
* manner, since when dealing with meta-transactions the account sending and | ||
* paying for execution may not be the actual sender (as far as an application | ||
* is concerned). | ||
* | ||
* This contract is only required for intermediate, library-like contracts. | ||
*/ | ||
abstract contract Context { | ||
function _msgSender() internal view virtual returns (address) { | ||
return msg.sender; | ||
} | ||
|
||
function _msgData() internal view virtual returns (bytes calldata) { | ||
return msg.data; | ||
} | ||
} |
Oops, something went wrong.