繁体   English   中英

在Solidity中使用索引时是否需要特定条件?

[英]Should I require a specific condition when working with indexes in Solidity?

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];
    }
}

据我所知,断言样式异常是在以下情况下产生的,而不仅是:

  • 如果访问数组的索引太大或为负数(即x [i],其中i> = x.length或i <0)。

但是我应该每次检查状况吗?

我也想将剩余的汽油退还给执行人。

您正在正确使用它。 require旨在用于检查输入参数,而assert则用于验证合同的内部(主要用于测试目的)。 如果require条件失败,剩余的气体将被退还。

Solidity文档中

便利函数assert和require可以用于检查条件,如果不满足条件则抛出异常。 assert函数仅应用于测试内部错误和检查不变性。 require函数应用于确保满足输入或合同状态变量之类的有效条件,或用于验证从调用外部合同获得的返回值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM