You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Solidity函数获取以太坊DApp全量注册用户完整信息

安全警示

绝对不要在智能合约中存储用户私钥,以太坊链上所有合约存储数据对所有人公开可见,你现在的合约存储用户私钥的设计存在致命安全漏洞,所有存储的私钥可以被任何人直接查询到,会直接导致用户资产100%被盗,必须立刻移除所有private_key相关的存储、写入、返回逻辑。


现有代码修复

你当前的createNewUser函数没有将新注册用户的地址存入registeredArray数组,导致Listofuser返回的是空数组,先修改这个函数,新增一行写入逻辑:

function createNewUser(address userAcc,string memory _id,string memory firstName,string memory lastName,string memory emailId,string memory _private_key) public  {
    User storage user = users[userAcc];
    users[userAcc] = User(userAcc,_id,firstName,lastName,emailId,true,_private_key); 
    walletAccount[emailId] = userAcc;
    // 新增这行,把用户地址加入注册数组
    registeredArray.push(userAcc);
}

获取所有用户完整信息的函数实现

Solidity 0.8.0及以上版本支持直接返回结构体数组,你可以新增如下view函数:

function getAllUsers() public view returns(User[] memory) {
    // 初始化和注册数组长度相同的User数组
    User[] memory allUsers = new User[](registeredArray.length);
    // 遍历注册数组,逐个取出用户信息
    for(uint i = 0; i < registeredArray.length; i++) {
        address userAddr = registeredArray[i];
        allUsers[i] = users[userAddr];
    }
    return allUsers;
}

如果你的项目使用的Solidity版本低于0.8.0,不支持返回结构体数组,可以改为返回多个独立数组分别对应用户的各个字段:

function getAllUsersInfo() public view returns(
    address[] memory walletAddresses,
    string[] memory userIds,
    string[] memory firstNames,
    string[] memory lastNames,
    string[] memory emailIds
) {
    uint len = registeredArray.length;
    walletAddresses = new address[](len);
    userIds = new string[](len);
    firstNames = new string[](len);
    lastNames = new string[](len);
    emailIds = new string[](len);
    
    for(uint i = 0; i < len; i++) {
        User storage user = users[registeredArray[i]];
        walletAddresses[i] = user.wallet_address;
        userIds[i] = user.userId;
        firstNames[i] = user.first_name;
        lastNames[i] = user.last_name;
        emailIds[i] = user.email_id;
    }
}

内容的提问来源于stack exchange,提问作者george singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:06:05