Solidity
為什麼需要通過地址訪問智能合約?
我是 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:我嘗試了兩種方法,它們似乎都有效。我在文件或其他任何地方都找不到任何資訊。任何見解將不勝感激!
這是同一件事,除了鑄造部分是在您提供的第二個範例中隱式完成的。