Solidity log 日志用法
通过函数来访问低层接口的记录机制log0
,log1
,log2
,log3
和log4
。 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 ...