Skip to content

Instantly share code, notes, and snippets.

@jMyles
Created March 13, 2023 06:58
Show Gist options
  • Save jMyles/1785b9ebbd3346c4240e7edb906f9711 to your computer and use it in GitHub Desktop.
Save jMyles/1785b9ebbd3346c4240e7edb906f9711 to your computer and use it in GitHub Desktop.
A Policy type to facilitate release of material to RobertPublica, rather than to individual qualified Bobs.

This is a very basic flow for CBD-as-release-to-commons (I'd suggest we call it CBDC but that's... no that's not funny today). Maybe we just go back to "Threshold Publishing" as a working name.

It lacks some fairly obvious >v1 features for the sake of simplicity.

Since the impetus for this Policy is the release of my upcoming album, I'll use the phrase "The Album" as the payload, but my intention is for this to be tuned for payloads with similar size and latency characteristics.

The procedure

  1. Alice the artist creates and encrypts The Album with a symmetric key (classic key-and-capsule method).

  2. Alice places the album on The Storage Medium.

  3. Alice frags the sym key into n frags (using naked Shamir's even?) with m-of-n scheme.

  4. Alice makes what we'll call a CommonsPublishingPolicy, and distributes the n frags to a Cohort Ursulas.

  5. Alice commits, by ECDSA, to checksums of each frag, along with the address of the Ursula who has it.

  6. The CommonsPublishingPolicy contract has provision wherein, once unlock_price eth (let's say 10eth) are paid in (adhering to a minimum contribution), a boolean value, publishFrags is set to true.

  7. Ursula checks this contract at each block, and, if publishFrags == true, she writes her frag to the chain.

  8. An indepedent validator can confirm publication of all frags via the checksum from step 5. This can also be checked on-chain.

  9. The Cohort receives a portion of the unlock_price - say, 1%.

  10. With all of the frags available on-chain, EverymanBob can obtain The Album, and can also re-publish it at his discretion.

Advanced Features

  • Alice can specify a 'reserve_duration' - the publishing is not triggered until reserve_duration has elapsed since the highest bid placed.

  • At unlock time, bidders (is that the right word?) receive serialized NFTs ordered by their bid. (In fact, it makes sense to allow them to specify their preferred number and mint accordingly).

  • Initially, the unlock period can be a "pre-release", with vanilla CBD affording access only to bidders.

  • Another possibility: the pre-release can be completely public, but allow for another round of NFT publishing, with the cohort again receiving a percentage. This might provide useful incentives.

Questions

  1. Will this procedure benefit from a DKG? How?

  2. At what level is this Threshold functionality, and above what level does it become adopter functionality? Do we want nodes to take a percentage? Do we want nodes simply to write their frags to the chain based on a booelan value (more intimately mirroring vanilla CBD)?

  3. Does it make sense to integrate other Threshold features, such as the option to mint a Bitcoin Ordinal using Threshold ECDSA? (see: keep-network/tbtc-v2#561 )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment