Solidity-获取区块属性信息

前言:

合约发布工具及版本:mist v0.11.0

一:区块属性

  1. blockhash(uint blockNumber)
    在0.4.22版本,将block.blockhash(uint blockNumber) returns (bytes32)替换

  2. block.coinbase (address): 当前块所属旷工地址

  3. block.difficulty (uint): 当前块难度
  4. block.gaslimit (uint): 当前块汽油上限
  5. block.number (uint): 当前块号
  6. block.timestamp (uint): 当前块的时间戳,UNIX时代以来的秒
  7. gasleft() returns (uint256): 剩余汽油
    在0.4.21版本,将msg.gas (uint)替换
  8. msg.data (bytes): 提交的完整数据
  9. msg.sender (address): 发送者
  10. msg.sig (bytes4): calldata的前4个字节
  11. msg.value (uint): 发送信息使用的wei数量
  12. now (uint): 当前块的时间戳 (即 block.timestamp)
  13. tx.gasprice (uint): 汽油的交易价格
  14. tx.origin (address): 交易发送者

二:实例

pragma solidity ^0.4.20;
contract BlockDemo{
    bytes32 public _blockHash;
    address public _coinbase = block.coinbase;
    uint public _difficulty = block.difficulty;
    uint public _gasLimit = block.gaslimit;
    uint public _number = block.number;
    bytes public _data = msg.data;
    uint public _gas = gasleft();
    address public _sender = msg.sender;
    bytes4 public _gis = msg.sig;
    uint public _value  = msg.value;
    uint public _gasPrice = tx.gasprice;
    address public _orign = tx.origin;
    uint public _now = now;

    constructor() public {
        _blockHash = blockhash(block.number);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Solidity中,可以通过使用智能合约来实现ERC20代币的锁仓与释放。以下是一个简单的锁仓合约示例: ``` pragma solidity ^0.8.0; import "./IERC20.sol"; import "./SafeMath.sol"; contract TokenVesting { using SafeMath for uint256; address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; uint256 public released; IERC20 public token; constructor( address _beneficiary, uint256 _cliff, uint256 _duration, address _token ) public { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; cliff = _cliff; duration = _duration; start = block.timestamp; token = IERC20(_token); } function release() public { uint256 unreleased = releasableAmount(); require(unreleased > 0); released = released.add(unreleased); token.transfer(beneficiary, unreleased); } function releasableAmount() public view returns (uint256) { return vestedAmount().sub(released); } function vestedAmount() public view returns (uint256) { uint256 currentBalance = token.balanceOf(address(this)); uint256 totalBalance = currentBalance.add(released); if (block.timestamp < start.add(cliff)) { return 0; } else if (block.timestamp >= start.add(duration)) { return totalBalance; } else { return totalBalance.mul(block.timestamp.sub(start)).div(duration); } } } ``` 在这个合约中,当创建合约时,需要传入受益人地址、锁仓期、释放期、代币地址等信息。锁仓期结束后,受益人可以通过调用 `release()` 函数来释放锁仓代币。如果释放函数被调用,但是当前时间还没有到达释放期,则会抛出异常。 为了保证代币不能被提前释放,合约还实现了 cliff 的概念,即在锁仓期结束之前,代币不能被释放。当 cliff 结束之后,代币将按照线性方式释放,直到释放期结束。 需要注意的是,以上示例只是一个简单的锁仓合约示例,实际生产环境中需要更加严格地考虑各种情况和安全性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值