Solidity
用於映射的序列 id 的替代方案
現在我有一個序列 if ids 用於契約中的映射:
mapping (uint => Document) documents; uint documentsCount;
每個新文件都會增加:
function createDocument() returns (uint docId) { docId = documentsCount++; documents[docId] = Document(...); Created(msg.sender, docId); }
當我撥打這個電話時,我會收到一個事務 id (
tx_id
),如果我理解正確,它是唯一的並且是最終確定的。docId
如果我監聽Created
事件,我也可以得到。這
docId
取決於執行順序,在乙太坊等分佈式系統中,我們應該等到它在區塊鏈中完成。我想知道如果我想在以後的交易中使用它作為參考應該怎麼做?說我
addSignature(uint docId, bytes sign)
旁邊有交易。或簡單閱讀,例如getState(unit docId)
.如果我在第一次交易後呼叫它,在區塊鏈中它仍然可能會針對不同的塊和錯誤的文件執行。或者,如果將其傳遞
docId
給其他機器,此時該機器的訂單或交易可能略有不同。在這種情況下生成參考 ID 的最佳做法是什麼?
一種想法可能是使用
sha3
(文件的)用於docId
.映射將變為:
mapping (bytes32 => Document) documents;