吃饭辣 奈奈 2022-05-17 20:26 采纳率: 50%
浏览 75
已结题

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);
  • 写回答

3条回答 默认 最新

  • 吃饭辣 奈奈 2022-05-17 23:49
    关注

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

    评论

报告相同问题?

问题事件

  • 系统已结题 5月25日
  • 修改了问题 5月18日
  • 赞助了问题酬金5元 5月17日
  • 创建了问题 5月17日

悬赏问题

  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架