gpt4 book ai didi

solidity - 在 Solidity 中获得平衡的两种方法

转载 作者:行者123 更新时间:2023-12-03 22:20:43 31 4
gpt4 key购买 nike

据我所知,有两种方法可以获得某个地址的余额。

  • address firstAddress;
    "firstAddress.balance"
    这将获得地址“firstAddress”的余额。
  • address firstAddress;
    mapping ( address => uint) balanceFirstAddress;
    balanceFirstAddress[firstAddress]
    这将获得地址“firstAddress”的余额。

  • 我知道第一个是去一个地址并获得余额。我不明白怎么来的 mapping(address => uint)将获得该地址的余额。是不是 mapping只是一个散列函数,将函数从十六进制散列到一些可以进行数学运算的二进制值?

    另外,如果两个函数都得到地址的平衡,它们之间有什么区别,我应该什么时候使用哪个?

    提前致谢!

    最佳答案

    我认为重要的是要注意默认情况下 mapping (address => uint256) balanceFirstAddress不返回地址的余额。您必须先初始化该映射以获得平衡,然后在适当的时候添加到它。如果您不将值映射到键,它只会返回零。

    什么是映射?

    映射用于构造值类型并由 _KeyType 组成。链接到 _ValueType .

    它是这样声明的 mapping(_KeyType => _ValueType) mappingName;
    例如:mapping (address => uint256) balanceOf;address_KeyTypeuint256_ValueType . uint256在这种情况下,代表链接到 address 的余额.

    你可以想到address作为您将通过返回 uint256 的键值(value) 。
    uint256 balance = balanceOf[address]; /// balance would be a uint256 value.
    根据 to the documentation , 默认情况下映射为空并且必须有一个新的 _keyType映射到 _ValueType .

    因此,要向地址添加余额,您可以输入:

    uint256 balanceToAdd = 200;

    balanceOf[address] += balanceToAdd;
    /// balanceOf[address] is 200 (address = 200)

    你应该使用哪一个?

    这取决于您要实现的目标,如果您只想要一个地址的整体以太余额,您可以使用 address.balance .如果您的合约想要跟踪 ERC20 代币的发送和接收,您可以将该代币余额的增加和减少映射到一个地址。

    下面是一个例子:
    contract MyToken {
    /* This creates an array with all balances */
    mapping (address => uint256) public balanceOf;

    /* Initializes contract with initial supply tokens to the creator of the contract */
    function MyToken(
    uint256 initialSupply
    ) {
    balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens
    }

    /* Send coins */
    function transfer(address _to, uint256 _value) {
    require(balanceOf[msg.sender] >= _value); // Check if the sender has enough
    require(balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows
    balanceOf[msg.sender] -= _value; // Subtract from the sender
    balanceOf[_to] += _value; // Add the same to the recipient
    }
    }

    关于solidity - 在 Solidity 中获得平衡的两种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48558766/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com