Solidity

用於映射的序列 id 的替代方案

  • May 11, 2016

現在我有一個序列 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;

sha3是最便宜的雜湊函式。

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