首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在智能合同中手动管理平衡是否有意义?

在智能合同中手动管理平衡是否有意义?
EN

Stack Overflow用户
提问于 2021-11-30 04:41:18
回答 1查看 65关注 0票数 0

我正在使用Solidity将智能合同部署到由Ganache发起的测试Ethereum网络中。我读了一些合同的演示代码,其中一个看起来像:

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity >=0.7.4;
pragma experimental ABIEncoderV2;

contract Ledger {
    struct TransferRequest {
        string title;
        uint256 amount;
        string bsb;
        string accountName;
        string accountNumber;
    }

    mapping(address => uint256) balances;

    address payable owner;

    event Transfered(bool _success, address _from, address _to, uint256 amount);

    constructor() payable {
        owner = payable(msg.sender);
        balances[tx.origin] = 10000;
    }

    function sendCoin(address payable receiver, uint256 amount)
        payable public
    {
        require(msg.sender == owner);
        if (balances[msg.sender] < amount) return;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Transfered(true, msg.sender, receiver, amount);
    }

    function getBalance(address addr) public view returns (uint256) {
        return balances[addr];
    }

}

正如您在上面所看到的,合同本身管理余额,而不是使用来自区块链的余额。在sendCoin方法中没有真实的乙醚转移。这是否意味着区块链中没有真正的事务。那订立这样的合同有什么意义呢。区块链管理的balance和合同管理的balance之间的关系是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-30 08:33:11

合同自行管理余额,而不是使用区块链的余额。

每个状态变化(在本例中是balances存储属性值的变化)都记录在块链上。因此,合同正在解读区块链的平衡。

然而,按照Ethereum网络的设计方式,一个地址只能具有很少的属性--它的字节码(非零字节码意味着它是一个智能的契约),它的平衡性,以及其他几个属性。由于只有一个属性用于余额(而不是余额列表),所以它用于本地ETH余额。任何令牌余额都存储在各自令牌的契约中。

您可以在ERC-20的最终版本和链接文档中阅读更多有关令牌平衡存储设计的信息。这是第一个在以太上引入令牌的标准。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70164395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档