Solidity
嵌套結構堅固?
結構內部可以有結構嗎?我不確定數據類型的內部結構,但我基本上是在嘗試做類似(虛擬碼)的事情:
library IpfsUtils { struct IpfsHash { bytes32 hash; uint8 hashFunction; uint8 hashSize; } function insert(bytes _hash) {} function combine() {} } contract Members { struct Member { IpfsUtils.IpfsHash profile; uint id; } mapping (address => Member) public members; function addMember(uint id, bytes profileHash) { Member m = members[msg.sender]; m.id = id; m.profile.insert(profileHash); } }
我正在嘗試儲存具有固定長度數據類型的 IPFS 雜湊,並且我考慮將 ipfs 雜湊函式、大小和實際 bytes32 雜湊的儲存提取到它自己的結構中。
有人可以指點我某個地方以了解有關內部結構的更多資訊嗎?
編輯: 嵌套結構是可能的。但是映射(此處
members
)不能公開,導致以下錯誤:TypeError: Internal type is not allowed for public state variable
您可以將 a 儲存
struct
在 a 中struct
。pragma solidity ^0.4.11; contract Nest { struct IpfsHash { bytes32 hash; uint hashSize; } struct Member { IpfsHash ipfsHash; } mapping(uint => Member) members; function addMember(uint id, bytes32 hash, uint size) public returns(bool success) { members[id].ipfsHash.hash = hash; members[id].ipfsHash.hashSize = size; return true; } function getMember(uint id) public constant returns(bytes32 hash, uint hashSize) { return(members[id].ipfsHash.hash, members[id].ipfsHash.hashSize); } }
如果我假設每個成員只有一個 IPFS,那麼這種嵌套有點毫無意義。我不想修復太多而偏離原來的問題。
是的,您可以在結構中嵌套結構。映射和數組,甚至是結構或結構數組的映射。
可能有幫助:結構聲明只是聲明一個類型而不是該類型的實例。
在協調所有這些以使某些東西變得有用方面,請查看此處的模式:Solidity 是否有解決良好且簡單的儲存模式?
如果您正在尋找一對多(每個成員多個 IPFS),此模式可能會有所幫助:https ://medium.com/@robhitchens/enforcing-referential-integrity-in-ethereum-smart-contracts-a9ab1427ff42
希望能幫助到你。