Ethereum 有时我会在以太坊智能合约中丢失阵列项目
我在智能合约中发现了一个奇怪的问题。我使用testrpc(v4.1.3)和最后一个元掩码作为本地开发环境。 请参阅下面的代码(这是一个简短的版本,只是有问题的地方): 通常,一切正常:Ethereum 有时我会在以太坊智能合约中丢失阵列项目,ethereum,solidity,metamask,Ethereum,Solidity,Metamask,我在智能合约中发现了一个奇怪的问题。我使用testrpc(v4.1.3)和最后一个元掩码作为本地开发环境。 请参阅下面的代码(这是一个简短的版本,只是有问题的地方): 通常,一切正常: 用户调用函数payForSomething() 用户获取放置在浏览器中的事件付款 用户调用changeSomething() 但是 有时我会遇到下一个问题: 用户调用payForSomething() 用户获取事件PaymentPlaced(例如:blockNumber=10,payIndex=5) 用户调用ch
为什么我会丢失阵列中的物品?这个问题太复杂还是太愚蠢?这个问题太复杂还是太愚蠢?
struct PayRecord {
address sender;
uint256 sum;
uint256 blockNumber;
uint256 status;
}
event PaymentPlaced(address senderAddress, uint256 blockNumber, uint256 payIndex, string guid);
PayRecord[] public payments;
function payForSomething(string guid) payable {
uint256 newLength = payments.push(PayRecord(msg.sender, msg.value, block.number, 0));
PaymentPlaced(msg.sender, block.number, newLength-1, guid);
}
function changeSomething(uint256 paymentIndex) {
if(payments[paymentIndex].status == 0){
payments[paymentIndex].status == 1;
}
}