首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能用甜糖和加纳奇实现固体合同的空馀

不能用甜糖和加纳奇实现固体合同的空馀
EN

Stack Overflow用户
提问于 2018-02-12 18:43:14
回答 1查看 1.1K关注 0票数 2

我有问题,使用甜糖测试,我可以退出我的合同。这是一个非常简单的测试,但是在下面调用withdrawBalance函数之后。当我稍后使用web3.eth.getBalance时,余额保持不变。

我还可以看到,在Ganache中,owner没有接收到ETH。

但是,如果我从withdrawBalance方法返回余额。实际上是0。

代码语言:javascript
运行
复制
contract Room {
    address public owner = msg.sender;

    function withdrawBalance() public {
        require(msg.sender == owner);
        owner.transfer(this.balance);
    }
}

测试文件:

代码语言:javascript
运行
复制
it('should allow withdrawls to original owner', function () {
        var meta;
        return Room.deployed()
            .then(instance => {
                meta = instance;
                return web3.eth.getBalance(meta.address);
            })
            .then((balance) => {
                // Assertion passes as previous test added 6 ETH
                assert.equal(balance.toNumber(), ONE_ETH * 6, 'Contract balance is incorrect.');
                return meta.withdrawBalance.call();
            })
            .then(() => {
                return web3.eth.getBalance(meta.address);
            })
            .then((balance) => {
                // Assertion fails. There is still 6 ETH.
                assert.equal(balance.toNumber(), 0, 'Contract balance is incorrect.');
            });
    });

我的问题是:

  1. 这是我测试的某种种族状况吗?怎样才能使余额支票正确无误?
  2. 为什么合同所有者没有在加纳奇中显示ETH余额?还是说ETH真的没有被撤销。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-12 18:54:48

您使用的是return meta.withdrawBalance.call();而不是return meta.withdrawBalance.sendTransaction();

.call()在您的EVM中本地运行,并且是免费的。在自己的机器上运行所有计算,执行后的任何更改都会恢复到初始状态。

要实际更改区块链的状态,需要使用.sendTransaction()。这要花费天然气,因为矿工在执行你的交易过程中所做的计算会得到回报。

总结:

ETH没有被撤回。

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

https://stackoverflow.com/questions/48753350

复制
相关文章

相似问题

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