Diagnoses are random, and unpredictable both in outcome and time. However, the nature of the Ethereum blockchain is such that it cannot act on itself; an outside trigger is always required. Therefore, to qualify as an autonomous system, we need to ensure both of these: first, that anyone can act as this trigger, and second, that there is an economic incentive for someone to do so. The incentive needs to be a purely financial one; it must exist even in the absence of anyone being invested (emotionally or financially) in the artwork itself.
We therefore reserve a part of the treasury, generated from sales, to financially reward whoever submits the required trigger transactions (a "keeper" in common parlance).
To ensure that a diagnosis can happen at truly any time (or in Ethereum time, any block), rather than at fixed intervals, we use a linear probability function, with increasing odds since the last time the random source was triggered, and targeting the desired total probability of 12.5% over the five year period the project is active.
The cheapest method is to use in-chain randomness, based on a future block hash. This can only be manipulated by miners.
requestRoll(true)
function.applyRoll()
function.As an alternative, Chainlink VRF can be used as a source of randomness. This is more expensive, as it requires payment of LINK tokens.
requestRoll(false)
function.applyRoll()
function.