Skip to content

日志

日志是 Solidity 合约中常用的一种调试方式,可以帮助开发人员跟踪合约的执行过程中发生的情况。

Solidity 中打印日志首先需要在合约中声明并定义一个事件。

事件是在合约执行期间触发和发出的消息。(通常用于调试)

示例

以下演示一个简单的 Solidity 合约,并在其中添加日志以打印信息。

这个合约基本上是一个银行账户,允许用户存款和取款,并为每个操作打印日志。

solidity
pragma solidity ^0.8.0;

contract Bank {
    uint private balance;

    event Deposit(address indexed accountAddress, uint amount);
    event Withdrawal(address indexed accountAddress, uint amount);

    function deposit() public payable {
        balance += msg.value;
        emit Deposit(msg.sender, msg.value);
    }

    function withdraw(uint amount) public {
        if (balance >= amount) {
            balance -= amount;
            msg.sender.transfer(amount);
            emit Withdrawal(msg.sender, amount);
        }
    }

    function getBalance() public view returns (uint) {
        return balance;
    }
}

在以上的合约中,定义了两个事件,即 DepositWithdrawal,分别用于存款和取款的操作。

这些事件可以通过 emit 操作符来触发和发送。在 deposit 函数中,发生的存款操作增加了余额,并且调用了 Deposit 事件来记录存款信息,包括存款地址和金额。

同样,在 withdraw 函数中,发生的取款操作会减少余额,并调用了 Withdrawal 事件来记录取款信息。

通过将事件与一些日志记录工具(例如 truffle console)结合使用,我们可以查看这些存取款相关的事件,从而轻松地跟踪合约的操作历史并进行调试。