Solidity

繼承結構

  • November 17, 2021

繼承的契約可以訪問他父母的結構變數嗎?

我正在嘗試下面的程式碼,但我無法訪問定義的結構ContractA,所以我不知道這是否根本不可能,或者我是否遺漏了一些東西。

AppStorage.sol

struct AppStorage {
   uint num;
   uint num2;
}

ContractA.sol

import './AppStorage.sol';

contract ContractA {
   AppStorage internal s;

   function setNum() public {
       s.num = 20;
   }

   function setNum2() public {
       s.num2 = 15;
   }
}

ContractB.sol

contract ContractB is ContractA {
   function getNum2() public view returns(uint) {
       return s.num2; // -----> returns 0
   }
}

謝謝!

編輯: sample-script.js

const ContA = await ethers.getContractFactory('ContractA');
const contA = await ContA.deploy();
await contA.deployed();

await contA.setNum();
await contA.setNum2();

const ContB = await ethers.getContractFactory('ContractB');
const contB = await ContB.deploy();
await contB.deployed();

let num = await contB.getNum2();
console.log('num: ', num);

圖片

您部署了 2 個不同的合約,contAtypeContractAcontBtype ContractB

您設置了s.num2ofcontA並檢查了 num 的數量contB。這就像創建兩個對象,每個對像都有自己的地址和自己的狀態變數。

我不知道您要做什麼,但是如果ContractB應該是您的擴展,則ContractA應該只部署 ContractB 並且只有一個實例。

引用自:https://ethereum.stackexchange.com/questions/113746