remix+metamask+ganache做一个区块链的溯源系统

在完成登录注册的页面时,出现了错误。
提示Returned error: VM Exception while processing transaction: out of gas
或者是如下图

img

智能合约的代码为:

contract Dapp {
    struct UserStruct{
        string Iden;
        address UserAddress;
        string UserName;
        string UserPassword;
        string Name;
        uint Phone;
        string Address2;
        uint index;//存地址组中的下标
    }

    address[] public Addresses;
    UserStruct[] public  UserList;
    mapping(address => UserStruct) public AddToUser;
    
    function isExitUserAddress(address a) public view returns(bool result){
        if (Addresses.length == 0) return false;
        return (Addresses[AddToUser[a].index] == a);
    }
    //判断用户地址是否存在,第一个想法是利用映射AddToUser,猜想如果不在应该是得到undefind,不是,不可以
    //那只能先判断地址数组中是否含有,没有就提示,有的话再根据映射来找
    function findWordByadd(address a) public view returns(string memory){
        require(!isExitUserAddress(a));
        return (AddToUser[a].UserPassword);
    }
    //通过用户账号找到用户的密码
    function findActByadd(address a) public view returns(string memory){
        require(!isExitUserAddress(a));
        return AddToUser[a].Iden;
    }
    //创建用户,一个地址只能创建一个用户,先把地址存入地址数组,创建用户结构体对象,加入对象数组,并加入映射
    function CreatUser(string memory a,address  b,string memory c,string memory d,string memory e,uint f,string memory g) public returns(uint) {
     require(!isExitUserAddress(b));
     Addresses.push(b);
     UserStruct memory us=UserStruct(a,b,c,d,e,f,g,Addresses.length-1);
     UserList.push(us);
     AddToUser[b]=us;
     return Addresses.length;

    }
     //获取用户个人信息

function findUser(address _userAddress) public view returns (string memory,address,string memory,string memory,string memory,uint,string memory) {
    require(isExitUserAddress(_userAddress));
    return(
        
        AddToUser[_userAddress].Iden,
        AddToUser[_userAddress].UserAddress,
        AddToUser[_userAddress].UserName,
        AddToUser[_userAddress].UserPassword,
        AddToUser[_userAddress].Name,
        AddToUser[_userAddress].Phone,
        AddToUser[_userAddress].Address2);
    
}

html中就是在点击注册按钮时完成创建用户的函数即可,但是一直报错,说因为from:这里说会消耗完Gas


contract.methods.CreatUser($("#iden").val(),$("#zhuce_add1").val(),$("#zhuce_I").val(),$("#zhuce_pass").val(),$("#zhuce_na").val(),$("#zhuce_ph").val(),$("#zhuce_add2").val()).send({from:$("#zhuce_add1").val()}).then(console.log);

只要是在创建用户结构体的方法里,将用户结构体添加到给用户结构体数组,以及赋值给用户账号地址到结构体的映射中,就会爆出错误。
VM exception while processing transaction :out of gas

gas耗尽的死循环
你想为交易设置更高的gas

您想调整 ContractForm 组件上的 sendArgs({gas:})。

https://www.trufflesuite.com/docs/drizzle/react/react-components#contractform

多看,多查,多改,铭记于心