Address Contract Partially Verified
Address
0x2f979C933AEF4fCDdD27C0Fa5C54d8a780555b0a
Balance
0 ETH
Nonce
1
Code Size
3214 bytes
Creator
0xA38afc5c...4882 at tx 0x1c960106...1bd585
Indexed Transactions
0
Contract Bytecode
3214 bytes
0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063a781e7f811610066578063a781e7f814610102578063b34ed41214610128578063be9c375f14610145578063cd0a6f631461014d578063e246ac391461017357610093565b8063180d574c146100985780633d9faf87146100c757806346bf7cf8146100f2578063920f5e37146100fa575b600080fd5b6100b5600480360360208110156100ae57600080fd5b503561017b565b60408051918252519081900360200190f35b6100f0600480360360608110156100dd57600080fd5b5080359060208101359060400135610192565b005b6100b5610297565b6100b56104b5565b6100f06004803603602081101561011857600080fd5b50356001600160a01b03166104bb565b6100f06004803603602081101561013e57600080fd5b50356106df565b6100b56107a8565b6100f06004803603602081101561016357600080fd5b50356001600160a01b03166107ae565b6100b5610963565b6000600182600a811061018a57fe5b015492915050565b600e546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156101dd57600080fd5b505afa1580156101f1573d6000803e3d6000fd5b505050506040513d602081101561020757600080fd5b5051610249576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b8260005b600a8110156102905781600182600a811061026457fe5b01556102868361027a848763ffffffff6109df16565b9063ffffffff610a4116565b915060010161024d565b5050505050565b6010546000906001600160a01b031633146102e8576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b60006102f2610a83565b600f54604080516370a0823160e01b8152306004820152905192935083926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561034257600080fd5b505afa158015610356573d6000803e3d6000fd5b505050506040513d602081101561036c57600080fd5b505110156103ee57600f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156103bf57600080fd5b505afa1580156103d3573d6000803e3d6000fd5b505050506040513d60208110156103e957600080fd5b505190505b80156104b057600f546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561044857600080fd5b505af115801561045c573d6000803e3d6000fd5b505050506040513d602081101561047257600080fd5b5050604080514381526020810183905281517fe562eb487d0f4f5d86dc1c1fc74820ea3006c9d180ea22a48404eed0dac4a659929181900390910190a15b905090565b600d5490565b600e546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561050657600080fd5b505afa15801561051a573d6000803e3d6000fd5b505050506040513d602081101561053057600080fd5b5051610572576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600e80546001600160a01b0319166001600160a01b038381169190911791829055604080516347f3bf4360e11b815260206004820181905260116024830152703732b9ba173b199737b33332b926b0b4b760791b604483015291519390921692638fe77e86926064808201939291829003018186803b1580156105f457600080fd5b505afa158015610608573d6000803e3d6000fd5b505050506040513d602081101561061e57600080fd5b5051601080546001600160a01b0319166001600160a01b03928316179055600e54604080516347f3bf4360e11b8152602060048083018290526024830152631b995cdd60e21b604483015291519290931692638fe77e869260648083019392829003018186803b15801561069157600080fd5b505afa1580156106a5573d6000803e3d6000fd5b505050506040513d60208110156106bb57600080fd5b5051600f80546001600160a01b0319166001600160a01b0390921691909117905550565b600e546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561072a57600080fd5b505afa15801561073e573d6000803e3d6000fd5b505050506040513d602081101561075457600080fd5b5051610796576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600081116107a357600080fd5b600055565b60005490565b600e546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156107f957600080fd5b505afa15801561080d573d6000803e3d6000fd5b505050506040513d602081101561082357600080fd5b5051610865576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600f54604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91849184916370a08231916024808301926020929190829003018186803b1580156108b957600080fd5b505afa1580156108cd573d6000803e3d6000fd5b505050506040513d60208110156108e357600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561093457600080fd5b505af1158015610948573d6000803e3d6000fd5b505050506040513d602081101561095e57600080fd5b505050565b600f54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156109ae57600080fd5b505afa1580156109c2573d6000803e3d6000fd5b505050506040513d60208110156109d857600080fd5b5051905090565b6000826109ee57506000610a3b565b828202828482816109fb57fe5b0414610a385760405162461bcd60e51b8152600401808060200182810382526021815260200180610c386021913960400191505060405180910390fd5b90505b92915050565b6000610a3883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610afe565b600c54600d5460008054909291908390610aa79061027a438663ffffffff610ba016565b90506000806009831115610abe5750600b54610ad0565b600183600a8110610acb57fe5b015490505b610af0610ae3438663ffffffff610ba016565b829063ffffffff6109df16565b43600d559550505050505090565b60008183610b8a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b4f578181015183820152602001610b37565b50505050905090810190601f168015610b7c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610b9657fe5b0495945050505050565b6000610a3883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060008184841115610c2f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b4f578181015183820152602001610b37565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122028edb0240734441bf8d3bdef66077bf3438b43888baca7fd03161274ede913cf64736f6c63430006000033
Verified Source Code Partial Match
Compiler: v0.6.0+commit.26b70077
EVM: istanbul
Optimization: Yes (200 runs)
Nest_3_MiningContract.sol 206 lines
pragma solidity 0.6.0;
/**
* @title Mining contract
* @dev Mining pool + mining logic
*/
contract Nest_3_MiningContract {
using address_make_payable for address;
using SafeMath for uint256;
uint256 _blockAttenuation = 2400000; // Block decay time interval
uint256[10] _attenuationAmount; // Mining decay amount
uint256 _afterMiningAmount = 40 ether; // Stable period mining amount
uint256 _firstBlockNum; // Starting mining block
uint256 _latestMining; // Latest offering block
Nest_3_VoteFactory _voteFactory; // Voting contract
ERC20 _nestContract; // NEST contract address
address _offerFactoryAddress; // Offering contract address
// Current block, current block mining amount
event OreDrawingLog(uint256 nowBlock, uint256 blockAmount);
/**
* @dev Initialization method
* @param voteFactory voting contract address
*/
constructor(address voteFactory) public {
_voteFactory = Nest_3_VoteFactory(address(voteFactory));
_offerFactoryAddress = address(_voteFactory.checkAddress("nest.v3.offerMain"));
_nestContract = ERC20(address(_voteFactory.checkAddress("nest")));
// Initiate mining parameters
_firstBlockNum = 6236588;
_latestMining = block.number;
uint256 blockAmount = 400 ether;
for (uint256 i = 0; i < 10; i ++) {
_attenuationAmount[i] = blockAmount;
blockAmount = blockAmount.mul(8).div(10);
}
}
/**
* @dev Reset voting contract
* @param voteFactory Voting contract address
*/
function changeMapping(address voteFactory) public onlyOwner {
_voteFactory = Nest_3_VoteFactory(address(voteFactory));
_offerFactoryAddress = address(_voteFactory.checkAddress("nest.v3.offerMain"));
_nestContract = ERC20(address(_voteFactory.checkAddress("nest")));
}
/**
* @dev Offering mining
* @return Current block mining amount
*/
function oreDrawing() public returns (uint256) {
require(address(msg.sender) == _offerFactoryAddress, "No authority");
// Update mining amount list
uint256 miningAmount = changeBlockAmountList();
// Transfer NEST
if (_nestContract.balanceOf(address(this)) < miningAmount){
miningAmount = _nestContract.balanceOf(address(this));
}
if (miningAmount > 0) {
_nestContract.transfer(address(msg.sender), miningAmount);
emit OreDrawingLog(block.number,miningAmount);
}
return miningAmount;
}
/**
* @dev Update mining amount list
*/
function changeBlockAmountList() private returns (uint256) {
uint256 createBlock = _firstBlockNum;
uint256 recentlyUsedBlock = _latestMining;
uint256 attenuationPointNow = block.number.sub(createBlock).div(_blockAttenuation);
uint256 miningAmount = 0;
uint256 attenuation;
if (attenuationPointNow > 9) {
attenuation = _afterMiningAmount;
} else {
attenuation = _attenuationAmount[attenuationPointNow];
}
miningAmount = attenuation.mul(block.number.sub(recentlyUsedBlock));
_latestMining = block.number;
return miningAmount;
}
/**
* @dev Transfer all NEST
* @param target Transfer target address
*/
function takeOutNest(address target) public onlyOwner {
_nestContract.transfer(address(target),_nestContract.balanceOf(address(this)));
}
// Check block decay time interval
function checkBlockAttenuation() public view returns(uint256) {
return _blockAttenuation;
}
// Check latest offering block
function checkLatestMining() public view returns(uint256) {
return _latestMining;
}
// Check mining amount decay
function checkAttenuationAmount(uint256 num) public view returns(uint256) {
return _attenuationAmount[num];
}
// Check NEST balance
function checkNestBalance() public view returns(uint256) {
return _nestContract.balanceOf(address(this));
}
// Modify block decay time interval
function changeBlockAttenuation(uint256 blockNum) public onlyOwner {
require(blockNum > 0);
_blockAttenuation = blockNum;
}
// Modify mining amount decay
function changeAttenuationAmount(uint256 firstAmount, uint256 top, uint256 bottom) public onlyOwner {
uint256 blockAmount = firstAmount;
for (uint256 i = 0; i < 10; i ++) {
_attenuationAmount[i] = blockAmount;
blockAmount = blockAmount.mul(top).div(bottom);
}
}
// Administrator only
modifier onlyOwner(){
require(_voteFactory.checkOwners(msg.sender), "No authority");
_;
}
}
// Voting contract
interface Nest_3_VoteFactory {
// Check address
function checkAddress(string calldata name) external view returns (address contractAddress);
// Check whether administrator
function checkOwners(address man) external view returns (bool);
}
// EC20
interface ERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library address_make_payable {
function make_payable(address x) internal pure returns (address payable) {
return address(uint160(x));
}
}
Read Contract
checkAttenuationAmount 0x180d574c → uint256
checkBlockAttenuation 0xbe9c375f → uint256
checkLatestMining 0x920f5e37 → uint256
checkNestBalance 0xe246ac39 → uint256
Write Contract 5 functions
These functions modify contract state and require a wallet transaction to execute.
changeAttenuationAmount 0x3d9faf87
uint256 firstAmount
uint256 top
uint256 bottom
changeBlockAttenuation 0xb34ed412
uint256 blockNum
changeMapping 0xa781e7f8
address voteFactory
oreDrawing 0x46bf7cf8
No parameters
returns: uint256
takeOutNest 0xcd0a6f63
address target
Recent Transactions
No transactions found for this address