gnosis / conditional-tokens-contracts

Smart contracts for conditional tokens.
GNU Lesser General Public License v3.0
163 stars 64 forks source link

Oracle reporting semantics #37

Open cag opened 5 years ago

cag commented 5 years ago

Right now, oracles are expected to report once and only once for a condition. Furthermore, oracles are expected to set the payout values for each outcome slot at the time of the report.

@jakub-wojciechowski asked if this may be altered so that reports may be done over time instead. This does lead to some additional complexity though, but it's worth asking whether this feature would be useful to users of this contract enough to consider taking on that complexity.


One may consider changing conditions so that they are defined with an additional piece of information: the payout denominator. The oracle's report for that condition would have to end having filled out that payout denominator. This would also allow conditions which are enforced to be categorical as opposed to being potentially something like a distribution.

Anyway, if in addition to that change, we allow oracles to keep adding to the payout numerators in reports until the payout denominator is set, and we allow users to redeem before the payouts for the outcome slots have been finalized, then collateral can easily be trapped in the system (e.g. if I had an outcome token that was worth 1/10 collateral when I redeem it, but then the oracle decides it's worth 3/10).

Anyway, that would be a consequence of (afaik) the simplest form of allowing ongoing reports for a condition.


One way of avoiding the consequence of trapped collateral would be to make it so that once a payout numerator for a slot is set, it cannot be unset. Furthermore, until a condition is completely resolved, only outcome tokens with outcome slots which have a non-zero payout may be redeemed. This way, collateral may be released over time without having any forever trapped in the system.

cag commented 5 years ago

Closing this as we won't attempt this for the current version of the conditional tokens. We can reopen this when we have had more feedback from use out in the wild and can design this feature properly for a next release.

cag commented 5 years ago

I spoke too soon. Reopening this as this is up for consideration again this version.

cag commented 5 years ago

It's not going to be in the first version.

auryn-macmillan commented 4 years ago

A practical use-case for what you describe here sounds similar to the talk we had the other day (#43); the ability to resolve outcomes that are known to be false.