The first thing to note is that nothing happens until a
transaction fails or is committed into a block.
If you are listening to a peer for transaction notifications, you will get a success or failure event for the transaction when the following occur:
If you are listening to a peer for transaction notifications, you will get a success or failure event for the transaction when the following occur:
∑
If the transaction fails during endorsement (i.e. returns an
error code), then there will be no read / write set and no transaction ID and
the error will be propagated directly to applications listening to the
endorser.
∑
If the transaction fails during commit (a.k.a. late failure,
MVCC error) because of key version issues, then the block will contain the
transaction but without the failure information, so you must be listening for
transaction errors to catch these. The world state changes will not have
been applied, and you will get the error when the block is written (I believe)
to the channel on the peer to which you are listening.
∑
If the transaction is successful and committed to a block,
then you will receive a success event when the block has been written into the
channel on the peer to which you are listening.
If
you are listening for block events, then you will get the event when a block
has been written to the channel on the peer to which you are listening.Chaincode events (a.k.a. contract emitted events) are sent when the block has been written to the channel on the peer to which you are listening. I.e. only when the block is cast in stone do the events come flying out.
If you examine the block format, you will find arrays in there for the transactions, and in each transaction all emitted events are shown (you can emit more than one).
No comments:
Post a Comment