Evm
如何使用外部庫函式操作儲存結構數組?
我的問題的基本虛擬碼模型
import libraryB; contract A{ struct Person{ string Name; uint age; } Person[] public Party; Party[0] = (Alice, 30); libraryB.addAgeToPerson(Party[0], 1) } library libraryB{ struct Person{ string Name; uint age; } function addAgeToPerson(Person storage PersonToAddAgeTo, uint ageToAdd) external { PersonToAddAgeTo.age += ageToAdd; } }
契約 A 正在使用對 libraryB 的委託呼叫來使用該函式,將儲存指針傳遞給 Person
$$ $$公眾黨;該結構在兩個實例中都定義了,但我得到了錯誤: TypeError:函式呼叫中的參數類型無效。從 struct Contract A.Person storage ref 到 struct libraryB.Person 請求的儲存指針的隱式轉換無效。
關於如何將儲存結構從契約傳遞到委託呼叫到庫以使用的任何想法?我認為delegatecalls保留了呼叫者的上下文..
感謝您的任何意見!
在 Contract A 內部,
Person
實際上是A.Person
在 libraryBPerson
中libraryB.Person
時,當您執行委託呼叫時,您正在提供指向庫的指針A.Person
,該庫需要指向 的儲存指針libraryB.Person
,因此會出現錯誤。關於如何將儲存結構從契約傳遞到委託呼叫到庫以使用的任何想法?
只需按照此答案中的描述在您的庫中定義您的結構,並將
Person
契約 A 中的所有引用更改為libraryB.Person
如下所示:library libraryB { struct Person{ string Name; uint age; } function addAgeToPerson(Person storage PersonToAddAgeTo, uint ageToAdd) external { PersonToAddAgeTo.age += ageToAdd; } } contract A { libraryB.Person[] public Party; constructor() { Party.push(libraryB.Person("Alice", 30)); libraryB.addAgeToPerson(Party[0], 1); } }