Skip to content

Instantly share code, notes, and snippets.

DavidBurkett /
Last active December 17, 2020 01:38
Offline Transactions in Mimblewimble

Offline Transactions in Mimblewimble

Mimblewimble is a blockchain protocol that improves on bitcoin's privacy and scalability by using pedersen commitments, schnorr signatures, and a novel technique called 'cut-through'. These benefits have come at a steep cost. Building transactions have thus far required interaction between the sender and receiver to create the outputs and collectively sign the transaction. We present here a method of achieving one-sided transactions while minimizing the impact on the scalability and privacy of mimblewimble.

Current Protocol

Like bitcoin, Grin uses a UTXO model. Transactions are created by including inputs to spend, creating new outputs of equal or lesser value, and signing and building rangeproofs to verify ownership of the inputs.

Unlike bitcoin, Grin uses confidential transactions, so the inputs and outputs are pedersen commitments (r*G + v*H). Instead of the signatures being added to the inputs, there is only one signature per transaction, which is part of the

Keybase proof

I hereby claim:

  • I am davidburkett on github.
  • I am dburkett ( on keybase.
  • I have a public key ASDFwghN5V8rZvmw_7XRtGH9uc4TglKr_U1WkUqDVVfy0wo

To claim this, I am signing this object:

DavidBurkett /
Last active August 4, 2023 04:52
Create valid signatures using genesis block.
import math
import ecdsa
import ecdsa.ellipticcurve as EC
# Compute the inverse mod p using the extend
# euclidian algorithm.
# See O. Forster, Algorithmische Zahlentheorie
def inv_mod_p(x, p):