Sharing output secrets (squirrel treasures)

I like to propose an idea for research. Its about sharing output secrets and I propose the name squirrel treasure.

Squirrels are cute little animals that like to interact playfully with each other. They tend to bury lots of more or less secret seeds (squirrel treasures). Some of them they eat later. Some of them become eaten by there friends. And some of them grow to new trees. No one knows the destiny of a squirrel treasure.

The Idea is to extend slatepack and wallet software that it is possible to encrypt the secret of an output into a slatepack. The slatepack could be optionally encrypted for a specific destination grin address. The transportation of the slatepack could happen either with TOR or with copy paste, e-mail, www, paper etc. The receiving wallet could sweep the the output by building a self-spend (possible coinjoin) transaction, or put it into an other slatepack without spending it now. But send it further to an other grin address.

Possible Use-cases and benefits:

  • donation offer (less interaction than standard transactions and reversible until it got spend)

  • transaction graph obfuscation (pay-join with a pool of shared outputs)

  • sharing access with friends to fulfill their needs. (being kind)

  • sharing access to build, test or prove trust. (scaling, transaction-less transactions if positive)

  • message spam protection (read only e-mails with sufficient squirrel treasure and self-spend if sender annoys you)

  • heritage (you can prepare the encrypted slatepack for a group of destination addresses on paper with your last will)

Possible problems?

  • sharing secrets derived from seed might leak information about the seed or breaks paradigm.

  • receiving wallets need to remember secrets not derived from their seed for some cases.

  • it might be too simple for being cypherpunk.

  • please tell me.

2 Likes

I don’t know about feasibility but this is a fun idea, I like it.

It could basically be done by just generating a new wallet and sharing the seed right? Squirrel seeds.

basically yes. But for some use cases there is no practical sense without automation. And the superposition of multiple purposes of one Output would not work if it needs to be recreated from a new seed instead of just be repurposed.

I also liked being able to sweep for some time.
Why sweeping keys or importing mnemonics is interesting?:

  • because it allows airdrops,
  • paper Grin money,
  • non-interactive transactions without any protocol change since the self spend in the end is still interactive.

On the implementation side it is a real hassle though:

  • need to automate it. E.g. call an API to generate 100 paper printable QR codes of squirrel treasures
  • Need to internally generate a new wallet since it is now save to share keys derived from your master seed (what is your wallets get deleted and you forget you shared the key…)

The way I see it, the best thing would be to build a separate tool or script for this. A tool that generates a wallet, asks an existing grin-wallet or Grin++ wallet to send transactions to a list of addresses, then generates the output in a predefined format such a list of mnemonics, list of mnemonics as QR codes, list of slate-pack messages that specify you are sharing a squirrel treasure).
The difficulty with such a tool is that since you are sending to another wallet, you need a full wallet implementation. So either you need a script that interacts with two wallets, a sender wallet, and a squirrel treasure wallet, or you need to implement it in the main wallet software :thinking: . In whichever way I think about it, it is quite complex to build :sweat_smile:.