微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从另一个合约获取结构数组

如何解决从另一个合约获取结构数组

我有 2 份合同。

contract Contract1{
  struct Data {
      uint data1;
      string data2;
  }
  Data [] newData;
}

假设我在 newData 中有数据

import "./Contract1.sol";
contract Contract2{
  Data storage newOne = newData[0];
}

我想访问上述 Contract1 中的结构数组。 如何从 Contract2 访问 Contract1?

解决方法

您可以使用 is 关键字延长合同。

子合同(在您的情况下为 Contract2)可以访问所有 non-private 父(在您的情况下为 Contract1)属性。

pragma solidity ^0.8;

import "./Contract1.sol";

contract Contract2 is Contract1 {
    function foo() external {
        Data storage newOne = newData[0];
        // newOne.data1 = 1;
        // newOne.data2 = 'hello';
    }
}

编辑:请注意 newData[0] 正在尝试访问数组的索引 0,但是在部署合约时,数组为空(没有索引 0)。您可以通过执行此函数来创建第一项(索引为 0 和虚拟数据):

function add() external {
    newData.push(Data(1,'a'));
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。