Solidity

與事務不同,讀取數據是免費的嗎?

  • November 25, 2017

我知道將數據寫入智能合約是一項交易,並且會花費 gas。從區塊鏈讀取數據會消耗gas嗎?

例如,我有一個結構來收集關於一個人的數據——姓名、年齡、性別。現在我在契約初始化期間播種了 1000 人。我可以查詢以獲取所有人員資訊嗎?我可以編寫一個函式來遍歷映射 Persons 並返回所有記錄嗎?請讓我知道是否有任何有效的方法可以做到這一點,以及這是否會花費汽油。

struct Person {
   uint age;
   string name;
   string gender;
}
mapping(uint => Person) Persons;

只要你只是從區塊鏈讀取數據而不改變區塊鏈,你就不需要進行交易。然後,您呼叫的功能僅由您連接的節點執行且未開採,因此您無需支付任何 gas。您可以在此答案中找到更多詳細資訊。

所以是的,您可以查詢映射。是否可以遍歷映射依賴。如果您使用一個計數器作為鍵,該計數器會隨著您放置在映射中的每個人而更新,那麼您可以。如果鍵是標識 Person 的數字,則無法進行迭代。

請注意,如果uint您的映射中的 只是一個計數器,您還可以使用Person. 您可以在此答案中找到有關不同儲存模式的更多資訊

如果將映射定義為Public,則可以使用內置的 getter 函式來訪問它。

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