ganache と testRPC に問題がありout of gas
、web3 プロバイダーを使用している場合にのみエラーが発生し続けますが、Javascript VM を使用している場合やトリュフの JavaScript テストではエラーが発生しません。
私のマッピングは次のように設定されています:
mapping (uint => address) public reservers;
mapping (uint => Reservation) public reservations;
mapping (uint => address) public bidders;
mapping (uint => Bid) public bids;
mapping (uint => uint) public lastSoldFor;
そして、スローするメソッドVM Exception while processing transaction: out of gas
は次のとおりです。
function sell(uint rId) public {
reservations[rId].publicKey = bids[rId].publicKey;
reservers[rId] = bidders[rId];
lastSoldFor[rId] = bids[rId].price;
delete bids[rId];
delete bidders[rId];
}
delete
2行をコメントアウトすると、正常に実行されます。ただし、それらを使用するdelete
か、単に再割り当てしても失敗します。
これを Truffle のテスト スイートで実行すると機能し、Javascript VM を使用して Remix を介してこれらのアクションを手動でコミットするときにも機能します。testRPC または ganache に接続されている場合のみ、失敗します。
他のすべての方法はガナッシュからもうまくいくようですが、削除に問題があるようです. 私はまた、ガスが返金され、この方法のガス価格がかなり低いため、ガナッシュに奇妙さを引き起こすためであるという言及を見てきました. 変更を行うたびにコントラクトをテスト ネットワークにアップロードする必要がない回避策はありますか?
編集:これはガス消費量が少ないことではなく、マッピングインデックスのクリアに関連していることを証明できるようです. メソッドに大量のガス消費を追加しましたが、それでも同じガス不足エラーで終了します。
新しい状態変数:
uint[] memorysink;
そして、私が追加した方法で
memorysink.push(200000000);
memorysink.push(200000000);
memorysink.push(200000000);
memorysink.push(200000000);
memorysink.push(200000000);
これにより、ガス消費量が から43279
に減少しました141513
が、それでもガス不足エラーが発生します。