Solidity

為什麼需要通過地址訪問智能合約?

  • January 23, 2022

我是 Solidity 新手,剛開始探索智能合約。

我有一個智能合約,用於創建一個帶有名稱和年齡的 Person 結構,以及一個使用 name 變數訪問結構的函式:

contract SimpleStorage {
   struct Person {
       string name;
       int age;
   }
   
   mapping(string => Person) private nameLookup;

   function addPerson(string memory name, int age) public {
       nameLookup[name] = Person(name, age);
   }

   function getPerson(string memory name) public view returns(Person memory ret) {
       ret = nameLookup[name];
   }   
}

在另一個契約中,我有一個 StorageFactory,它部署了許多 SimpleStorage 契約並包裝了它的功能:

contract StorageFactory {
   SimpleStorage[] public storages;

   function createSimpleStorageContract() public {
       SimpleStorage simpleStorage = new SimpleStorage();
       storages.push(simpleStorage);
   }

   function addPersonAt(uint256 index, string memory name, int age) public {
       SimpleStorage(address(storages[index])).addPerson(name, age);
   }

   function getPersonFrom(uint256 index, string memory name) public view returns(SimpleStorage.Person memory ret) {
       ret = SimpleStorage(address(storages[index])).getPerson(name);
   }
}

在本教程中,我關注他們通過將儲存在storages數組中的合約地址傳遞給SimpleStorage建構子來訪問智能合約。

像這樣訪問智能合約和僅使用儲存在數組中的值有什麼區別,例如:

SimpleStorage myStorage = storages[_index];

PS:我嘗試了兩種方法,它們似乎都有效。我在文件或其他任何地方都找不到任何資訊。任何見解將不勝感激!

這是同一件事,除了鑄造部分是在您提供的第二個範例中隱式完成的。

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