solidity智能合约之将函数调用记录为事件

文章介绍了一个名为note的修饰符,用于在Solidity智能合约中方便地记录函数调用日志,将其转化为LogNote事件。当函数被调用时,事件会捕获包括签名、发送者、参数和价值等信息,便于在区块链客户端查询和分析。这简化了在dapp中添加事件日志记录的过程。
摘要由CSDN通过智能技术生成

将函数调用记录为事件

通过note修饰符提供通用函数调用日志记录,该修饰符触发数据捕获作为LogNote事件包含:

  • msg.sig(索引)
  • msg.sender(索引)
  • 第一个函数参数(索引)
  • 第二个函数参数(索引)
  • msg.value
  • msg.data

使用修饰符修饰的函数note将在使用区块链客户端可查询的索引字段调用时记录此信息。这涵盖了事件的大多数用例,使它成为一种快速将事件日志记录添加到 dapp 的简单方法。

/// note.sol -- the `note' modifier, for logging calls as events

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

pragma solidity >=0.4.23;

contract DSNote {
    event LogNote(
        bytes4   indexed  sig,
        address  indexed  guy,
        bytes32  indexed  foo,
        bytes32  indexed  bar,
        uint256           wad,
        bytes             fax
    ) anonymous;

    modifier note {
        bytes32 foo;
        bytes32 bar;
        uint256 wad;

        assembly {
            foo := calldataload(4)
            bar := calldataload(36)
            wad := callvalue()
        }

        _;

        emit LogNote(msg.sig, msg.sender, foo, bar, wad, msg.data);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北纬32.6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值