Solidity

一個合約可以訪問另一個合約的儲存嗎?

  • March 8, 2018

我與許多複雜的結構簽訂了契約。第二份合約是否可以直接迭代這些數據?

我不能真正使用公共訪問器/getter 方法,因為不可能在外部使用結構,所以我必須扁平化資料結構(可能也製作昂貴的副本)。

一個合約不能直接訪問另一個合約的儲存。

給定合約 C1 和 C2,C1 只能通過在 C2 上呼叫從 C2 的儲存中返回數據的方法來訪問 C2 的儲存。

由於您正在編寫 C2,因此您可以從 C1 訪問它的儲存並且可以取得進展。一個更具體的問題可能有助於提供關於設計契約(結構、扁平化、副本……)的更具體的答案。


相關的是**,一個合約可以從另一個合約訪問 3 個東西:餘額、程式碼、程式碼大小**。

這樣做的底層機制是來自黃皮書的以下 EVM 操作碼:

BALANCE: 獲取給定賬戶的餘額

EXTCODECOPY:將帳戶的程式碼複製到記憶體中。

EXTCODESIZE:獲取帳戶程式碼的大小。

根據保羅的評論,address.balance在 Solidity 中工作。

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