0
点赞
收藏
分享

微信扫一扫

solidity高级特性

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

举报

相关推荐

0 条评论