Solidity 事件、继承、全局变量

2019-01-09  本文已影响6人  黄靠谱

Event

https://www.jianshu.com/p/a99375c4e003

  1. 基本概念
    事件是以太坊提供的基本功能,用来将数据记录成日志,保存在区块链上,同时事件也可用于用于和外部交互,例如和前端的交互、异步调用等作用。solidity中,事件是指操作触发的行为,而日志则是触发事件后,将数据记录在区块链上形成日志。

事件event是以太坊提供的基本功能,用于将数据记录成日志保存到区块链上,用户可以自定义需要记录的数据,以及topic和索引;
日志是指事件保存在区块链上的数据。事件强调操作行为,日志强调存储内容,两者是完全不同的概念。

  1. 特性
pragma solidity >=0.4.21 <0.6.0;

contract SimpleAuction {
    event HighestBidIncreased(address bidder, uint amount); // Event
    function bid() public payable {
        // ...
        emit HighestBidIncreased(msg.sender, msg.value); // Triggering event
    }
}
var abi = /* abi as generated by the compiler */;
var ClientReceipt = web3.eth.contract(abi);
var clientReceipt = ClientReceipt.at("0x1234...ab67" /* address */);

var event = clientReceipt.Deposit();

// watch for changes
event.watch(function(error, result){
    // result contains non-indexed arguments and topics
    // given to the `Deposit` call.
    if (!error)
        console.log(result);
});


// Or pass a callback to start watching immediately
var event = clientReceipt.Deposit(function(error, result) {
    if (!error)
        console.log(result);
});

日志的查询

通过web.js 来进行监听查询
由于日志不可被任何合约访问,那么我们应该如何查找日志了。尽管solidity没有提供查询日志的api,但是监听日志时,提供了filter功能,通过filter我们就可以完成查询日志的需求。

var event = myContract.Transfer(object1, object2, callfunction);
  1. object1:json对象,添加indexed属性的参数值,这里需要填具体的值,例如上面的例子,我们可以过滤由指定地址发出的交易{'_from':'0x84d939AD8034c3ce2A7D4D100b939d4523b9E46E'}

  2. object2:json对象,额外的filter参数,由solidit提供,可以指定的参数有:

  1. callfunction:回调函数function(error, result){...}
     // 只监听向0x84d939AD8034c3ce2A7D4D100b939d4523b9E46E地址转账的事件
    var obj1 = {
        '_to': '0x84d939AD8034c3ce2A7D4D100b939d4523b9E46E',
    }

    // block过滤范围0-latest
    var obj2 = {
        'fromBlock': 0,
        'toBlock': 'latest'
    }

    var event = instance.Transfer(obj1, obj2)
    //监听和回调函数
    event.watch(function (error, result) {
        console.log('transfer log begin')
        console.log(JSON.stringify(result))
        console.log('transfer log end')
    })

多继承

contract named is owned, mortal {

}
pragma solidity ^0.4.0;
contract Base {
    uint x;
    function Base(uint _x) { x = _x; }
}

contract Derived is Base(7) {
    function Derived(uint _y) Base(_y * _y) {
    }
}

全局变量

区块和交易属性

上一篇 下一篇

猜你喜欢

热点阅读