The anatomy of a Nut

Cashu open source contributor

2025, Chiang Mai

What is a nut?

Can we genetically engineer nuts?

How are nuts made?

Show me your nuts

Topics

What is a nut?

Nut == Token == Proofs == Ecash

A nut (ecash token) is a proof

that a secret has been previously blindly signed with a given key

ic_fluent_signature_28_filled Created with Sketch.

+

=

How are nuts made?

Secret

Blinding factor

Fertilizer (AKA mint signature)

Nut anatomy 101

Secret

Signature

KeysetID

Amount

{
	"secret":"1ea6f7f0e907f5841285a3815a74c84e6d710b0b458b959d68c9d60aabbb40ac",
    "C":"02c6ee49eabc2bb027973ab5c79cdf379a74fff0731ccbae3b0d419b3d635075e6",
    "amount":1,
    "id":"00b4cd27d8861a44"
}

Can we genetically engineer nuts?

Nut anatomy: Recovarable

{
	"secret":"1ea6f7f0e907f5841285a3815a74c84e6d710b0b458b959d68c9d60aabbb40ac",
    "C":"02c6ee49eabc2bb027973ab5c79cdf379a74fff0731ccbae3b0d419b3d635075e6",
    "amount":1,
    "id":"00b4cd27d8861a44"
}
{
	"deterministic_secret":"1ea6f7f0e907f5841285a3815a74c84e6d710b0b458b959d68c9d60aabbb40ac",
    "deterministic_blinding_factor":"02c6ee49eabc2bb027973ab5c79cdf379a74fff0731ccbae3b0d419b3d635075e6",
}

Nut anatomy: Well known secret / script

{
  "amount": 1,
  "secret": "[\"P2PK\",{\"nonce\":\"859d4935c4907062a6297cf4e663e2835d90d97ecdd510745d32f6816323a41f\",\"data\":\"0249098aa8b9d2fbec49ff8598feb17b592b986e62319a4fa488a3dc36387157a7\",\"tags\":[[\"sigflag\",\"SIG_INPUTS\"]]}]",
  "C": "02698c4e2b5f9534cd0687d87513c759790cf829aa5739184a3e3735471fbda904",
  "id": "009a1f293253e41e",
  "witness": "{\"signatures\":[\"60f3c9b766770b46caac1d27e1ae6b77c8866ebaeba0b9489fe6a15a837eaa6fcd6eaa825499c72ac342983983fd3ba3a8a41f56677cc99ffd73da68b59e1383\"]}"
}

Ex: P2PK lock

Nut anatomy: HTLC

[
  "HTLC",
  {
    "nonce": "da62796403af76c80cd6ce9153ed3746",
    "data": "023192200a0cfd3867e48eb63b03ff599c7e46c8f4e41146b2d281173ca6c50c54",
    "tags": [
      [
        "pubkeys",
        "02698c4e2b5f9534cd0687d87513c759790cf829aa5739184a3e3735471fbda904"
      ],
      ["locktime", "1689418329"],
      [
        "refund",
        "033281c37677ea273eb7183b783067f5244933ef78d8c3f15b1a77cb246099c26e"
      ]
    ]
  }
]

Ex: P2PK lock

Nut anatomy: Offline verify

{
  "id": <str>,
  "amount": <int>,
  "secret": <str>,
  "C": <str>,
  "dleq": { <-
    "e": <str>,
    "s": <str>,
    "r": <str>
  }
}

With DLEQ proof

Proof that blind signature was from mint's key

Nut anatomy: Offline receivable

P2PK + DLEQ = Offline receivable

{
  "amount": 1,
  "secret": "[\"P2PK\",{\"nonce\":\"859d4935c4907062a6297cf4e663e2835d90d97ecdd510745d32f6816323a41f\",\"data\":\"0249098aa8b9d2fbec49ff8598feb17b592b986e62319a4fa488a3dc36387157a7\",\"tags\":[[\"sigflag\",\"SIG_INPUTS\"]]}]",
  "C": "02698c4e2b5f9534cd0687d87513c759790cf829aa5739184a3e3735471fbda904",
  "id": "009a1f293253e41e",
  "witness": "{\"signatures\":[\"60f3c9b766770b46caac1d27e1ae6b77c8866ebaeba0b9489fe6a15a837eaa6fcd6eaa825499c72ac342983983fd3ba3a8a41f56677cc99ffd73da68b59e1383\"]}"
  "dleq": {
    "e": "<str>",
    "s": "<str>",
    "r": "<str>"
  }
}

Nut anatomy: Fully offline transaction

P2PK + timelock + refund + DLEQ = Offline transaction

{
  "amount": 1,
  "secret": [
    "P2PK",
    {
      "nonce": "da62796403af76c80cd6ce9153ed3746",
      "data": "033281c37677ea273eb7183b783067f5244933ef78d8c3f15b1a77cb246099c26e",
      "tags": [
        ["locktime", "1689418329"],
        [
          "refund",
          "033281c37677ea273eb7183b783067f5244933ef78d8c3f15b1a77cb246099c26e"
        ],
        [
          "pubkeys",
          "023192200a0cfd3867e48eb63b03ff599c7e46c8f4e41146b2d281173ca6c50c54"
        ]
      ]
    }
  ],
  "C": "02698c4e2b5f9534cd0687d87513c759790cf829aa5739184a3e3735471fbda904",
  "id": "009a1f293253e41e",
  "witness": {
  	"signatures": "<Array[<hex_str>]>"
  },
  "dleq": {
  ...
  }
}

Nut anatomy: Fully offline transaction

Online

Alice

Bob

Mint

Get pubkey

Mint locked ecash

Send ecash

Offline (QR)

Verify offline

  • Pubkey lock
  • unique secret
  • Refund timelock (buffer)
  • dleq

Redeem before refund timelock expires

Thank you!

npub1cj6ndx5akfazux7f0vjl4fyx9k0ulf682p437fe03a9ndwqjm0tqj886t6

Let's keep in touch on nostr