Solidity
一個合約可以訪問另一個合約的儲存嗎?
我與許多複雜的結構簽訂了契約。第二份合約是否可以直接迭代這些數據?
我不能真正使用公共訪問器/getter 方法,因為不可能在外部使用結構,所以我必須扁平化資料結構(可能也製作昂貴的副本)。
一個合約不能直接訪問另一個合約的儲存。
給定合約 C1 和 C2,C1 只能通過在 C2 上呼叫從 C2 的儲存中返回數據的方法來訪問 C2 的儲存。
由於您正在編寫 C2,因此您可以從 C1 訪問它的儲存並且可以取得進展。一個更具體的問題可能有助於提供關於設計契約(結構、扁平化、副本……)的更具體的答案。
相關的是**,一個合約可以從另一個合約訪問 3 個東西:餘額、程式碼、程式碼大小**。
這樣做的底層機制是來自黃皮書的以下 EVM 操作碼:
BALANCE
: 獲取給定賬戶的餘額
EXTCODECOPY
:將帳戶的程式碼複製到記憶體中。
EXTCODESIZE
:獲取帳戶程式碼的大小。根據保羅的評論,
address.balance
在 Solidity 中工作。