我用代币支付货款。但是,在第一次调用函数之后,令牌不会从钱包中移除。请告诉我为什么当我第一次调用这个函数时,令牌被删除了,但是在下一个调用中没有被删除?谢谢
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;
}发布于 2020-02-10 11:37:36
说起来有点难,因为这是更大的合同的一部分。但这是我的猜测。
在函数的末尾,您将startPrice设置为零。下一次执行该函数时,startPrice = startPrice*100000000*amount的乘法总是给出0,所以您总是批准0标记的移动。
发布于 2020-02-10 11:36:57
首先,更改以下内容:
goods[msg.sender].add(amount);对此:
goods[msg.sender] = goods[msg.sender].add(amount);这是:
bids[msg.sender].add(startPrice);对此:
bids[msg.sender] = bids[msg.sender].add(startPrice);您可能还想要更改以下内容:
startPrice = startPrice*100000000*amount对此:
startPrice = startPrice.mul(100000000).mul(amount)这是:
count = count-amount对此:
count = count.sub(amount)https://ethereum.stackexchange.com/questions/79765
复制相似问题