BTC motif

The live sound installation and “blockchain intervention” BTC motif was made for the exhibition “Art coin” that at the art space a room that…. It took place in April/May 2018 at Spinnerei Leipzig.

The blockchain is the central data core of the Bitcoin currency. The chain contains all transactions including senders, recipients, amounts and meta data. Other than useful information like payment references and protocol overhead the meta data also holds nonsense. Already the first entry, the so-called “genesis block“, encodes a snarky quote about the bail-out of (brick-and-mortar) banks. In line with its mythology it is followed by programmer humor, bible quotes, wedding announcements, grafitti-like territorial tags, signatures and images.

The blockchain is decentralized and forces participating computers to download and save all this data. Depending on the country of residence, this can be problematic, when embedded text or media violates the law or copyright. Trolls rejoice, but this also posits an interesting question about value and values: Does this turn a billion-dollar endeavor suddenly illegal? How unlawful is still worth it? How big is too big to fail?

In the first part of BTC motif I present a system that translates the flow of transactions into something like music: deposits and withdrawals become chords, musical notes in meta data become melodies, a voice recites embedded text fragments.

In the second part I make a bitcoin transaction which ends up as a musical cryptogram in the blockchain. Played through my system, it decodes to the song “Happy Birthday To You” – which would be another copyright infringement, had not a court declared the copyright claim invalid in 2015 (after it had been earning the copyright holders millions for decades).

Technical Notes

  • A small Node.js script that listens to a a websocket provided by blockexplorer.com
  • Every time a new block appears, a Python script renders it into a mixed sound (between 5 and 60 minutes), using the relative timestamps of the block’s transactions. I wrote a simple, memory-conservative asynchronous audio mixer, since a naive sox script quickly ran out of memory.
  • These pre-mixed blocks are played back by a mpd music server
  • (My first, more straightforward implementation worked on transaction level, and would render transactions into sound once they appeared. Unfortunately, this approach did not perform well and forced me to go a more complicated, less synchronous route.)
  • Mpd provides an http server, like a web radio station
  • At the installation, a Raspberry Pi functioned as web radio receiver, the actual rendering was done “in the cloud” (thanks, Alex!)
  • Other sofware used: csvmidi, timidity, espeak, pydub

Should you be interested in any of the code, please do not hesitate to contact me! It is just not in shape to release it as-is.

That Algorithm

To turn transactions into something vaguely musical

  • A transaction can have multiple senders (inputs) and multiple recipients (outputs). That’s not necessarily persons or organisations, but abstract addresses. Cf. this transaction via blockhair, a transaction involving an address from a spam extortion scam e-mail I got.
  • Each input and output is assigned a note by a hash function
  • The transaction is assigned one instrument by a hash function
  • Recipients’ notes are played simultaneously, senders’ notes a moment later – that’s two (likely dissonant) chords
  • Volume/Velocity is assigned by transaction volume – the more money, the louder!
  • For the meta data, I came up with a mapping of “hex to musical notes”: Notes are sometimes written as C4, E2, B3 – which resembles hex codes. I came up with rules to interpret any hex code as musical notes, trying to keep it as straightforward as possible (e.g. zeroes become pauses).
  • I rewrote the melody of “Happy Birthday To You” in this notation. Since a perfect mapping is not possible (there is no G in hex), there are slight errors.
    CC D C F E CC D C G F CC C5A F…
    becomes
    ccd0c0f0e000ccd0c0abbf00ccc5a0f0e0d0b0ba0f0abbf0
    where

    • abb = g
    • all notes are octave 4 if not specified, hence the C5
    • since I have to assume a static rhythm, the rhythm errors introduced by the abb are a trade-off to get a G

Hear for yourself & proof

Block #517596, from 2018/04/10, with 2091 transactions and ~$41 million of throughput (16min of audio)

Block #518027, from 2018/04/13. My Happy Birthday To You comes in at 0:17.

From this block, here’s Transaction 899cfbc253d324e48ecb89708d521205ab538a533c8a9b660c7fc0513bc6eb5a (2018/04/13 13:48:18) which contains the song in its meta data. There is no output address – my money, 0.0008 BTC, or $6.53 at the time, was “burned”.

I have talked about the project on my radio show.

Links

  • BitListen, a related, but more straightforward project

FAQ

  • What’s with all the “Ommmmmnis”?
    — The string omni – which surprised me as well – is a marker for a popular protocol that builds upon the Bitcoin blockchain.
  • The post image is the Genesis Block interpreted as bitmap & colored with a gold palette.