繁体   English   中英

如何查看智能合约的 tr balance 是什么?

[英]How do I see what is tr balance of a smart contract?

如果我向智能合约地址发送一些以太币,我可以使用什么功能来检查智能合约的总余额?

要从智能合约向智能其他钱包地址发送以太币,solidity 是否有任何特殊功能或仅发送/转移功能有效?

接受 ETH 的合约需要实现receive()fallback() 特殊功能

它的当前余额在address(this)的属性.balance中返回,因此您可以将其包装在一个函数中以检索余额。

pragma solidity ^0.8;

contract MyContract {
    receive() external payable {}

    function getBalance() external view returns (uint256) {
        return address(this).balance;
    }
}

第一个问题答案:

  • 要从另一个智能合约检查智能合约的余额,您可以执行contractAddress.balance
  • 要直接在链下检查,您可以直接查询 RPC 节点,或者您可以在连接到提供者(节点)后使用 web3 之类的库来包装此调用: web3.eth.getBalance(accounts[0])

第二题答案:

您有多种方法可以将余额从智能合约转移到另一个(我将列出其中的 5 种):

  • 使用传递函数。 例如: contractAddress.transfer(1 ethers)
  • 使用发送功能。 例如: contractAddress.send(1 ethers)
  • 使用调用功能。 例如: contractAddress.call{value: msg.value}("");

要检查这些方法之间的差异, 请查看这篇文章

前 3 种方法要求,如果接收方是智能合约,则需要实现receive()函数或fallback()函数,两者都是明确支付的。

推荐的方法是使用呼叫(不是转移或发送)。 要知道为什么要检查为什么在以前的网络分叉中添加了访问列表功能。

  • 您还可以使用 SELFDESTRUCT 操作码将余额从一个合约发送到另一个账户。
  • 同样重要的是要知道,您可以在创建智能合约之前将余额转移到智能合约,因为智能合约地址对于地址和部署者的随机数是确定性的。

最后两个考虑因素非常重要,因为即使没有实现receive()fallback()函数,智能合约也可以接收资金。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM