2017-11-30 4 views
0
pragma solidity ^0.4.0; 

contract A{ 
    byte[10] arr; 

    function setElement(uint index, byte value) public { 
     require(index >= 0 && index < arr.length); //Should I leave it as is? 
     arr[index] = value; 
    } 

    function getElement(uint index) view public returns (byte) { 
     require(index >= 0 && index < arr.length); //Or not? 
     return arr[index]; 
    } 
} 

私がアサートスタイルの例外は、次の状況で発生し、知っているようではないだけ:Solidityでインデックスを操作する際に特定の条件を必要としますか?

  • あなたは(大きすぎるか、または負のインデックスで配列にアクセスする場合、すなわちX [i]はここで、i> = x.lengthまたはi < 0)。

ただし、毎回条件を確認する必要がありますか?

また、残りのガスをエグゼクティブに払い戻したいと思います。

答えて

1

正しく使用しています。 requireは入力パラメータの確認に使用され、assertは契約の内部を検証するためのものです(主にテスト目的)。 requireの条件が満たされない場合、残りのガスは払い戻されます。 Solidity documentationから

便利な機能が主張し、必要 条件をチェックし、条件が満たされない場合に例外をスローするために使用することができます。 assert関数は、内部エラーのテストにのみ使用し、 は不変条件をチェックする必要があります。要求関数は、 の入力や契約状態変数などの有効条件が になるようにするか、外部契約への呼び出しから戻り値を検証するために使用する必要があります。

関連する問題