我在智能合约中发现了一个奇怪的问题。我使用testrpc(v4.1.3)和最后一个MetaMask作为本地开发环境。 请看下面的代码(它是短版本,只是有问题的地方):
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;
}
}
通常一切正常:
但是...
有时我有下一个问题:
相同的数组长度,不同的块编号,两个插入事件......
所以...有时它会发生,有时候一切正常。我总是只有一个用户,只有我使用这个智能合约(我还在开发它)。
为什么我会丢失数组中的项目?