0%

solidity | API

讲一下 solidityAPI

区块和交易


  • blockhash(uint blockNumber) returns (bytes32):返回给定区块号的哈希值,只支持最近 256 个区块,且不包含当前区块。
  • block.coinbase (address): 当前块矿工的地址。
  • block.difficulty (uint):当前块的难度。
  • block.gaslimit (uint):当前块的 gaslimit
  • block.number (uint):当前区块的块号。
  • block.timestamp (uint): 当前块的 Unix时间戳(从 1970/1/1 00:00:00 UTC 开始所经过的秒数)
  • gasleft() (uint256): 获取剩余 gas
  • msg.data (bytes): 完整的调用数据(calldata)。用户发生的转账之外的内容,可以是文字备注之类的,但是如果接受信息的是智能合约那合约会对 data 进行解析,并执行 date 中指定的函数。
    • msg.data 不等于 inputs
  • msg.gas (uint): 当前还剩的 gas(弃用)。
  • msg.sender (address): 当前调用发起人的地址。
  • msg.sig (bytes4):调用数据(calldata)的前四个字节(例如为:函数标识符)。
  • msg.value (uint): 这个消息所附带的以太币,单位为wei,注意是这笔交易附带的以太币,不是该地址上有的以太币。
  • now (uint): 当前块的时间戳(block.timestamp的别名)
  • tx.gasprice (uint) : 交易的gas价格。
  • tx.origin (address): 交易的发送者(全调用链)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
pragma solidity ^0.4.18;

import "./Datetime.sol";

contract Call{
function test() public returns (address adr){
// return msg.sender; // 合约调用另一个合约的时候,该值返回主调合约的地址
return tx.origin; // 合约调用另一个合约,这个值返回调用账户地址
}
}

contract Test{

function getValue() public payable returns(address,uint){
return (msg.sender,msg.value);
}

function gas() public returns(uint){ // 这个可以测出中间那个加法消耗了多少 gas
uint gas1 = gasleft();
uint a = 1 + 2;
uint gas2 = gasleft();
return gas1 - gas2;
}

function testf() public returns(bytes4){
//return this.testf.selector;
return msg.sig; // selector 的前四个字节
}

function testCall() public returns(address){
return new Call().test();
}
}
请我喝杯咖啡吧~