Remix 中 struct 参数传递

以下为合约示例:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

struct Param {
    uint256 stakedTokens; //准入token数量
    bytes32 topic;        //投票主题
    address tokenAddr;    //token合约地址
    address[] voters;     //所有可参与的投票人
}

contract TestStructParam {
    uint256 public stakedTokens; //准入token数量
    bytes32 public topic;        //投票主题
    address public tokenAddr;    //token合约地址
    address[] public voters;     //所有可参与的投票人

    constructor(Param memory _param) {
        stakedTokens = _param.stakedTokens;
        topic = _param.topic;
        tokenAddr = _param.tokenAddr;
        voters = _param.voters;
    }
}

在Remix中,struct作为一个参数传入时是一个tuple,需要使用中括号[]引起所有参数

部署上面合约时需要传递struct参数,正确传递参数值为

[10,"0x68656c6c6f000000000000000000000000000000000000000000000000000000","0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",["0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0"]]

注:参数中 bytes32类型与address类型需要加双引号,测试如下图所示:Remix 中 struct 参数传递_第1张图片

以下为错误写法,bytes32类型与address类型没有加双引号,会报错:

[10,0x68656c6c6f000000000000000000000000000000000000000000000000000000,0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266,[0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0]]

报错信息

creation of TestStructParam errored: Error encoding arguments: Error: types/values length mismatch (count={"types":1,"values":2}, value={"types":["tuple(uint256,bytes32,address,address[])"],"values":["[10,",",0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266,[0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0]]"]}, code=INVALID_ARGUMENT, version=abi/5.5.0)

 如下图所示:Remix 中 struct 参数传递_第2张图片

 

你可能感兴趣的:(智能合约,智能合约)