Expired Ticket Redemption Mechanism
If the elapsed_duration
on a Ticket is greater than 1, then the Ticket is expired. Expired tickets have some residual value, and are redeemed using a seperate process to unexpired tickets.
To determine if an expired relay is winning, a random number is generated by hashing both the ticket's details, and the hash of a particular future block, together. This block is chosen so that it's hash will only be knowable once the ticket has expired. This random number is then used in place of the senders random number from the original relay protocol.
This achieves two things:
It preventing nodes from knowing whether or not an expired ticket will win until the ticket has reached expiry. As a result, the Node has an incentive to keep all relay packets until they expire, whether they end up winning to not.
It ensures that the node cannot choose their random number in such a way that they can control whether or not a ticket redeemed by them will win.
If the random number is less than the on-chain parameter, "expired_ticket_payout_probability"
, the expired Ticket may be redeemed on chain. This is very similar to how it is determined that an unexpired Ticket wins - just with a different probability of winning. We intend that the majority of ticket value will be for redeeming live tickets, with a small percentage of ticket value allocated to expired tickets to ensure reliability and prevent spam.
All tickets have a chance of winning through this mechanism - whether they are delivered or not. This is because there is no way for a smart contract on the blockchain to know whether a particular relay packet has been delivered - the only time the blockchain is made aware of a relay's delivery is when that relays' ticket wins, a small fraction of the time.
Last updated