Solidity log 日志用法

通过函数来访问低层接口的记录机制log0log1log2log3log4。 logi获取类型的参数,其中第一个参数将用于日志的数据部分,其他参数用作主题。

log0 只有一个参数,不提供 topic。log1 有两个参数,其中第二个参数是 topic。log2 有三个参数,其中第二、三个参数是两级 topic。log3 有四个参数,第二、三、四个参数是三级 topic。log3、log4 以此类推。

 

1. 范例

// SPDX-License-Identifier: SimPL-3.0
pragma solidity ^0.7.0;

contract Hello {
    constructor()  {
    }
 
    function hello()  public returns (string memory) {
       log0(bytes32(uint256(msg.sender)));
       log1(bytes32(uint256(msg.sender)),bytes32("topic"));
       return "name";
    }
}

部署后调用 hello 方法。

 

2. 输出结果

logs:
[ 
{ 
"from": "0x7763DAC4aDD4021aB0AD1D5D74FE84749Ca65282", 
"data": "0x00000000000000000000000078731d3ca6b7e34ac0f824c42a7cc18a495cabab", 
"topics": [ "0x" ]
 }, 
{ 
"from": "0x7763DAC4aDD4021aB0AD1D5D74FE84749Ca65282", "data": "0x00000000000000000000000078731d3ca6b7e34ac0f824c42a7cc18a495cabab",
 "topics": [ "0x746f706963000000000000000000000000000000000000000000000000000000" ] 
}
 ] 

其中:

log0(bytes32(uint256(msg.sender))) 输出调用者地址。

log1(bytes32(uint256(msg.sender)),bytes32("topic")); 输出调用者地址 和 topics = "topic"。

另外 log2、log3、log4 支持多级 topic。

Solidity 中 this 代表合约对象本身,可以通过 address(this) 获取合约地址。合约地址与合约创建者地址、合约调用者地址并不相同。Solidity 中 ms ...