Solidity

使用結構讀取文章列表

  • October 30, 2018

我嘗試使用下面的程式碼閱讀文章列表

struct posts {

 bytes32 postTag;
 string post;
 address[] acceptedBy;
 uint8[] voteCount;

}

mapping(address => posts) totaluserPosts;

我試圖以不同的方式閱讀所有文章,但找不到方法。

是否可以通過一個請求閱讀所有文章?

簡短的回答是您必須創建一個函式,因為您通過public映射收到的“免費”吸氣劑不會這樣做。

更好的答案是重新考慮批量數據轉儲的需要。如果每次將某些內容插入此結構時都發出事件,我通常就足夠了,這意味著軟體客戶端應該已經被告知此資訊。因此,為什麼要再次要求它,因為這樣做會消耗大量氣體並且不是特別快。對這種思想的更完整描述:https ://blog.b9lab.com/the-joy-of-minimalism-in-smart-contract-design-2303010c8b09

建議。命名約定:

struct PostStruct {

 bytes32 postTag;
 string post;
 address[] acceptedBy;
 uint8[] voteCount;

}

mapping(address => posts) postStructs;

自定義函式範例:

function getPostAddressCount(address post, uint row) public returns(uint count) {
 return postStructs[post].address.length;
}

function getPostAcceptedBy(address post) public returns(address[] acceptedBy) {
 return postStructs[post].acceptedBy;
}

由於上述功能的成本隨著規模的增加而增加到無法使用的程度,因此最好包含一個固定成本的替代方案:

function getPostAcceptedByByRow(address post, uint row) public returns(address acceptedBy) {
 return postStructs[post].acceptedBy[row];
}

希望能幫助到你。

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