solidity高级特性

2019-01-11  本文已影响26人  Jisen

constructor

构造函数,使用constructor关键字声明的函数。创建合约时执行一次。

pragma solidity ^0.4.22;

contract OwnedToken {
    constructor(bytes32 _name) public {
        owner = msg.sender;
        creator = TokenCreator(msg.sender);
        name = _name;
    }
}    

visibility

function

log

通过函数来访问低层接口的记录机制log0log1log2log3log4。 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)
        );
    }
}

event

event允许EMV写日志功能的方便使用,进而在dapp的用户接口中用JavaScript顺序调用,从而监听这些事件。
event是合约中可继承的成员。当他们调用时,会导致一些参数在交易日志上存储--在blockchain上的一种特殊的数据结构。

event -> emit -> watch

library

库和合约类似,但是它们的目的主要是在给定地址上部署,以及用EVM的CALLCODE特性来重用代码。这些代码是在调用合约的上下文里执行的,例如调用合约的指针和调用合约的存储能够被访问。由于library是一片独立的代码,如果它们显式地提供的话,就仅仅能访问到调用合约的状态变量。

interface

interface类似于抽象合约,但它们不能实现任何功能。还有其他限制:

interface基本上限于合约ABI可以表示的内容,并且ABI和interface之间的转换应该是可能的,而不会丢失任何信息。

pragma solidity ^0.4.11;

interface Token {
    function transfer(address recipient, uint amount) external;
}

modifier

memory、storage

assembly

Inline Assembly是一种以较低级别访问以太坊虚拟机的方法。

address _addr = msg.sender;
uint256 _codeLength;

// 检索code的size        
assembly {_codeLength := extcodesize(_addr)}

delete

if() throw;

上一篇 下一篇

猜你喜欢

热点阅读