Solidity
與事務不同,讀取數據是免費的嗎?
我知道將數據寫入智能合約是一項交易,並且會花費 gas。從區塊鏈讀取數據會消耗gas嗎?
例如,我有一個結構來收集關於一個人的數據——姓名、年齡、性別。現在我在契約初始化期間播種了 1000 人。我可以查詢以獲取所有人員資訊嗎?我可以編寫一個函式來遍歷映射 Persons 並返回所有記錄嗎?請讓我知道是否有任何有效的方法可以做到這一點,以及這是否會花費汽油。
struct Person { uint age; string name; string gender; } mapping(uint => Person) Persons;
只要你只是從區塊鏈讀取數據而不改變區塊鏈,你就不需要進行交易。然後,您呼叫的功能僅由您連接的節點執行且未開採,因此您無需支付任何 gas。您可以在此答案中找到更多詳細資訊。
所以是的,您可以查詢映射。是否可以遍歷映射依賴。如果您使用一個計數器作為鍵,該計數器會隨著您放置在映射中的每個人而更新,那麼您可以。如果鍵是標識 Person 的數字,則無法進行迭代。
請注意,如果
uint
您的映射中的 只是一個計數器,您還可以使用Person
. 您可以在此答案中找到有關不同儲存模式的更多資訊如果將映射定義為
Public
,則可以使用內置的 getter 函式來訪問它。