Right now I have a sequence if ids used for mapping in contract:
mapping (uint => Document) documents;
uint documentsCount;
which is incremented for every new document:
function createDocument() returns (uint docId) {
docId = documentsCount++;
documents[docId] = Document(...);
Created(msg.sender, docId);
}
When I make this call I receive a transaction id (tx_id
), which is uniq and finalized if I understand correctly. Also I can get docId
if I listen for Created
events.
This docId
depends on execution order, and in distributed systems such as Ethereum, we should wait until it's finalized in blockchain.
I wonder what should I do if I want to use it as a reference in further transactions? Say I have addSignature(uint docId, bytes sign)
transaction next to it. Or simple read, like getState(unit docId)
.
If I call it just after first transaction, it still possible that in blockchain it will be executed against different block and wrong document. Or what if pass this docId
to a different machine which can have slightly different order or transactions at this moment.
What is a best practice to generate a reference id at this case?