This is just a design draft that serves as a discussion starting point. All claims and designs are subject to updates/corrections
Protocol overview:
• Collectors commit to collections of transactions. • Hotstuff primary forms a block by including collections and reconstructing the threshold signature (Random Beacon signature)
• ENs receive the formed block, including the Random Beacon [RB] signature.
• ENs execute the block, using the RB signature as the source of randomness in all randomness calls in the block. The execution is split into verifiable chunk computation.
( Remark: after discussing with Dieter, the randomness might be all passed as a callback in Cadence, and will be called in the same order they appeared in transactions, at the end of the block. Some updates still need to be made to this solution to adapt to the callback, but the CSPRG idea should still apply. )
Cadence Feature and security requirements:
To provide an API in Cadence Random() uint64
that each transaction can call an arbitrary number of times (the number is not necessary known from a static analysis), satisfying the following security requirements:
Random()
outputs, at the time they submit/commit to the transaction.Random()
(in the same transactions or in a subsequent ones) given any arbitrary number of past outputs.