首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用代币支付货物

用代币支付货物
EN

Ethereum用户
提问于 2020-02-10 11:34:32
回答 2查看 27关注 0票数 0

我用代币支付货款。但是,在第一次调用函数之后,令牌不会从钱包中移除。请告诉我为什么当我第一次调用这个函数时,令牌被删除了,但是在下一个调用中没有被删除?谢谢

代码语言:javascript
复制
function placeBid(uint amount)  public notOwner returns(bool) {
    require(auctionState == State.Running);
    require(count>=amount);
    goods[msg.sender].add(amount);
    startPrice = startPrice*100000000*amount;
    bids[msg.sender].add(startPrice);

    trc20.approve(msg.sender, address(this), startPrice);
    // Move to tokens to contract address
    trc20.transferFrom(msg.sender, address(this), startPrice);
    count = count-amount;
    startPrice=0;
    return true;
}
EN

回答 2

Ethereum用户

回答已采纳

发布于 2020-02-10 11:37:36

说起来有点难,因为这是更大的合同的一部分。但这是我的猜测。

在函数的末尾,您将startPrice设置为零。下一次执行该函数时,startPrice = startPrice*100000000*amount的乘法总是给出0,所以您总是批准0标记的移动。

票数 0
EN

Ethereum用户

发布于 2020-02-10 11:36:57

首先,更改以下内容:

代码语言:javascript
复制
goods[msg.sender].add(amount);

对此:

代码语言:javascript
复制
goods[msg.sender] = goods[msg.sender].add(amount);

这是:

代码语言:javascript
复制
bids[msg.sender].add(startPrice);

对此:

代码语言:javascript
复制
bids[msg.sender] = bids[msg.sender].add(startPrice);

您可能还想要更改以下内容:

代码语言:javascript
复制
startPrice = startPrice*100000000*amount

对此:

代码语言:javascript
复制
startPrice = startPrice.mul(100000000).mul(amount)

这是:

代码语言:javascript
复制
count = count-amount

对此:

代码语言:javascript
复制
count = count.sub(amount)
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/79765

复制
相关文章

相似问题

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