uint32 a = 0x12345678; uint16 b = uint16(a); // b will be 0x5678 now uint16 a = 0x1234; uint32 b = uint32(a); // b will be 0x00001234 now assert(a == b);
对于bytes类型就是从最低位补0或者从最高位开始保留,这样就没有改变原来的下标。
1 2
bytes2 a = 0x1234; bytes4 b = bytes4(a); // b will be 0x12340000 assert(a[0] == b[0]); assert(a[1] == b[1]);
bytes2 a = 0x1234; uint32 b = uint16(a); // b will be 0x00001234 uint32 c = uint32(bytes4(a)); // c will be 0x12340000 uint8 d = uint8(uint16(a)); // d will be 0x34 uint8 e = uint8(bytes1(a)); // e will be 0x12
contract ERC20 is IERC20{ uint public totalSupply; mapping(address=>uint) public balanceOf; mapping(address=>mapping(address=>uint)) public allowance; string public name= "Test"; string public symbol="TEST"; uint8 public decimals=18;
如果 useSuperPowers() 函数被其它非拥有者调用,此函数将抛出“返回无效操作代码错误”,回滚所有状态改变,而且消耗掉剩下的gas.处理 throws 后会消耗剩余的 gas。尽管可以视为对矿工的慷慨捐助,但是往往会消耗用户大量金钱。 contract HasAnOwner { address owner; function useSuperPowers(){ if (msg.sender != owner) { throw; } // do something only the owner should be allowed to do } }
contract Dex is Ownable { address public token1; address public token2; constructor() {}
function setTokens(address _token1, address _token2) public onlyOwner { token1 = _token1; token2 = _token2; } function addLiquidity(address token_address, uint amount) public onlyOwner { IERC20(token_address).transferFrom(msg.sender, address(this), amount); } function swap(address from, address to, uint amount) public { require((from == token1 && to == token2) || (from == token2 && to == token1), "Invalid tokens"); require(IERC20(from).balanceOf(msg.sender) >= amount, "Not enough to swap"); uint swapAmount = getSwapPrice(from, to, amount); IERC20(from).transferFrom(msg.sender, address(this), amount); IERC20(to).approve(address(this), swapAmount); IERC20(to).transferFrom(address(this), msg.sender, swapAmount); }
function getSwapPrice(address from, address to, uint amount) public view returns(uint){ return((amount * IERC20(to).balanceOf(address(this)))/IERC20(from).balanceOf(address(this))); }
function approve(address spender, uint amount) public { SwappableToken(token1).approve(msg.sender, spender, amount); SwappableToken(token2).approve(msg.sender, spender, amount); }
function balanceOf(address token, address account) public view returns(uint){ return IERC20(token).balanceOf(account); } }
// string public constant name = 'NaughtCoin'; // string public constant symbol = '0x0'; // uint public constant decimals = 18; uint public timeLock = block.timestamp + 10 * 365 days; uint256 public INITIAL_SUPPLY; address public player;
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.6.12; pragma experimental ABIEncoderV2; 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) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b;
return c; }
function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return0; }
uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow");
return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { require(b > 0, "SafeMath: division by zero"); uint256 c = a / b;
return c; } function mod(uint256 a, uint256 b) internal pure returns(uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } contract ERC20 { using SafeMath for uint256;
mapping (address => uint256) public _balances;
mapping (address => mapping (address => uint256)) public _allowances;
string public _name; string public _symbol; uint8 public _decimals;
function balanceOf(address account) public view returns(uint256) { return _balances[account]; }
function transfer(address recipient, uint256 amount) public virtual returns(bool) { _transfer(msg.sender, recipient, amount); returntrue; }
function approve(address spender, uint256 amount) public virtual returns(bool) { _approve(msg.sender, spender, amount); returntrue; }
function transferFrom(address sender, address recipient, uint256 amount) public virtual returns(bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount)); returntrue; }
function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address");
function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _balances[account] = _balances[account].add(amount); }
function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount); }
function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; }
function unstake()external{ userInfo storage user = userDetails[msg.sender]; require(block.number>=user.startTime+user.duration,"you are in a hurry "); passed[msg.sender] = true; uint amount = user.amount; user.amount = 0; token.transfer(msg.sender,amount*10**18); }
contract check is stakepool{ uint256 public score; function isCompleted()public{ score=0; if (getDetails(msg.sender).amount>5000000 ether){ score+=25; } if (token.balanceOf(msg.sender)>500000 ether){ score+=75; } } }