我想将结构数组从固定更改为动态,当我从数组编译器中删除参数时抛出错误

问题描述

pragma solidity ^ 0.4.17;

合同签名{

struct signature {
    string value;
    uint rate;
    address sender_acc;
    
}

signature[5] public unverified_sig; // struct array is fixed but I want dynamic,if i del 5 then it 
                                    //gives error  mentioned in the end


function add_signature(string rec_signature) public {
    unverified_sig[0].sender_acc=msg.sender;
    unverified_sig[0].value=rec_signature;
    unverified_sig[0].rate=0;
}

}

输出错误: 交易到Signature.add_signature错误:VM错误:无效的操作码。无效的操作码可能引发了执行。调试事务以获取更多信息。

解决方法

您使用哪个版本的Solidity?我在Remix中使用0.5.0进行了编译。动态结构数组没有任何问题。但是,有一个警告是该功能的气体成本太高,将超过气体极限。

函数Storage.add_signature的气体需求是无限的:如果 功能的气体需求高于块气体极限,它 无法执行。请避免功能或动作出现循环 修改大面积存储空间(包括清除或复制) 存储阵列)