1 function
view:承诺不修改状态。
pure:纯函数,承诺不会读取或修改状态。
payable:为了接收ether,必须标记回退功能payable。最少需2300gas。
2 log
通过函数来访问低层接口的记录机制log0,log1,log2,log3和log4。 logi获取类型的参数,其中第一个参数将用于日志的数据部分,其他参数用作主题。上面的事件调用可以以与以下相同的方式执行i + 1bytes32。
pragma solidity ^0.4.10;
contract C {
function f() public payable {
uint256 _id = 0x420042;
log3(
bytes32(msg.value),
bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20),
bytes32(uint256(msg.sender)),
bytes32(_id)
);
}
}
3 event
event允许EMV写日志功能的方便使用,进而在dapp的用户接口中用JavaScript顺序调用,从而监听这些事件。
event是合约中可继承的成员。当他们调用时,会导致一些参数在交易日志上存储–在blockchain上的一种特殊的数据结构。
event -> emit -> watch
4 library
库和合约类似,但是它们的目的主要是在给定地址上部署,以及用EVM的CALLCODE特性来重用代码。这些代码是在调用合约的上下文里执行的,例如调用合约的指针和调用合约的存储能够被访问。由于library是一片独立的代码,如果它们显式地提供的话,就仅仅能访问到调用合约的状态变量。
5 interface
interface类似于抽象合约,但它们不能实现任何功能。还有其他限制:
无法继承其他合约或接口。
所有声明的函数必须是external的。
无法定义构造函数。
无法定义变量。
无法定义结构。
interface基本上限于合约ABI可以表示的内容,并且ABI和interface之间的转换应该是可能的,而不会丢失任何信息。
6 modifier
memory、storage
7 assembly
Inline Assembly是一种以较低级别访问以太坊虚拟机的方法。
address _addr = msg.sender;
uint256 _codeLength;
// 检索code的size
assembly {_codeLength := extcodesize(_addr)}
8 delete
if() throw;
assert、require、revert