by peers at httpdot.net, 2019, gnu gplv3
embedded system running a custom copyleft free/libre software on a quest for creating a blockchain for nothing which originates from nothing and continuously building blocks, each of which consisting of nothing but the sha-256 cryptographic hash of the previous block, and displays all blocks created with no proof-of-work on a command-line interface one after another by keeping the record of nothing but the last block. the work keeps working on its own quest forever, unless there is a system failure or it is turned off but it continues from where it left off every time it is turned on.
https://httpdot.net/peers/aBlockchainForNothing/
custom software is written as a bash script by bager akbay, along with the pseudocode, and released as a copyleft free/libre software under gnu gplv3.
all programs and utilities executed by bash script are also free/libre software.
the embedded system powered by a gnu/linux operating system is also programmed by bager akbay.
commissioned by protocinema for the exhibition blockchain is... / ...for nothing with support from spot contemporary art projects, istanbul
refer to text peer on blockchain is... / ...for nothing exhibition by peers at httpdot.net by peer for more info and discussion of the work.
this work is exhibited in blockchain is... / ...for nothing exhibition by peers at httpdot.net.
nothing is possible, a publication for the exhibition, also aggregates all info and resources about the work, along with other works in the exhibition.
when run for the first time, this work prints nothing on command-line interface as the genesis block, the first block of a blockchain for nothing, and creates three files in its working directory:
genesisBlockTimeStamp.log is the file containing the timestamp when the genesis block of a blockchain for nothing is created, when the work is run for the first time.
LastCreatedBlock.log is the file containing the value of the last created block. it contains nothing when the first block of a blockchain for nothing is created and the content is updated whenever a new block is created which is the sha-256 hash of the previous block.
blockHeight.log is the file containing a number which indicates how many blocks have been created so far. this file is updated every time a new block is created.
after the first block is created, which is nothing, the work reads nothing from the file LastCreatedBlock.log, calculates its sha-256 hash and prints that hash value just after nothing on command-line interface as the second block of a blockchain for nothing. the file LastCreatedBlock.log is overwritten with the value of the second block, which is hexadecimal representation of the hash of nothing and the file blockHeight.log is overwritten with the value 2, which is the sequential number of the last created block. the third block of a blockchain for nothing is created by reading the value of the last created block, the hash of nothing, and calculating its hash, the hash of the hash of nothing, which is also printed on the command-line interface just after the second block. the files LastCreatedBlock.log and blockHeight.log are updated accordingly and this process continues until there is a system failure or the work is turned off. the next time the work is run, it keeps on working on its own quest by first displaying the following text on the command line interface:
"a blockchain for nothing" by peers at httpdot.net, 2019, gnu gplv3
a blockchain for nothing originates from nothing and all blocks in a blockchain for nothing consists of nothing but sha-256 hash of the previous block.
genesis block of a blockchain for nothing was created on [genesisBlockTimeStamp.log] with no proof-of-work
[blockHeight.log] blocks are created so far.
last created block of a blockchain for nothing is
[LastCreatedBlock.log]
a blockchain for nothing is now creating new blocks based on that block
the values in bracktes are read from the log files indicated and the work keeps on working from where it left off. if any of the log files are damaged and cannot be read, the work prints the following text on command-line interface:
a blockchain for nothing has not been created yet or broken. a blockchain for nothing will start creating blocks again, from nothing.
and starts creating a blockchain for nothing from scratch printing:
"a blockchain for nothing" by peers at httpdot.net, 2019, gnu gplv3
a blockchain for nothing originates from nothing and all blocks in a blockchain for nothing consists of nothing but sha-256 hash of the previous block.
a blockchain for nothing is now creating a blockchain originating from nothing, with no proof of work...
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b8555df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456aa6ac2d4961882f42a345c7615f4133dde8e6d6e7c1b6b40ae4ff6ee52c393d0
all blocks of a blockchain for nothing are printed on the command-line interface and written on the file LastCreatedBlock.log, which is overwritten every time a new block is created. created blocks are displayed on the command-line interface until they are rolled out of the display because of new blocks being created and printed on the command-line display. thus a blockchain for nothing keeps no record of the previous blocks it created but keeps working on its own quest as long as it is turned on.
a blockchain for nothing is designed as a plug and play embedded system running a custom free/libre software, which you can directly connect to a display through hdmi connection and run. this is a free cultural work licensed under gnu gplv3. you are free to download the custom free/libre software running on the embedded system and run it on your computer, or build your own embedded system for running it. you are also encouraged to fork / build on / appropriate the work as a peer. full text of gnu gplv3 free software license is available at gnu website.
download the work: custom free/libre software written as a bash script (39kB)
this bash script is also the source code of the work, which can be opened with any text editor. the source code is also included in this document under the corresponding section.
download pseudocode: plain text document for a brief explanation of the code in bash script (485bytes)
pseudocode is also included in this document under the corresponding section.
you can also download / fork the work from bager akbay’s github repository, who wrote the code and the pseudocode
watch online / download screencast documentation of the work
webm, vp9, lossless compressed-vbr1744kbps, 1080p25, no audio, 1’02’’, 13.6MB
running the work is as easy as running a shell script on a full screen command-line interface on a unix-like system for an experienced user. below are the detailed explanations for a less experienced user.
you need to have jacksum (Dipl.-Inf. (FH) Johann N. Loefflmann, 2006, gnu gplv2) installed on your system, which is executed by the bash script for hash calculations. check system requirements and installation instructions on jacksum website
or, install it using your distro’s package manager. for debian-based distributions:
sudo apt-get install jacksum
-open a terminal emulator window within GUI, such as gnome terminal, and make it full screen, also disabling the menubar,
or better, switch to a virtual console (press crtl+alt+f3 for tty3). you will need to use the commnad
exit
to exit virtual console and login back to graphical user interface). use your username and password to login and run a shell with command prompt.
-navigate to the directory where you want to download and run the bash script,
or, just use the current directory
-copy and paste the following command which will run three commands one after the other to download the bash script, make it executable and run it. you will need to enter your sudo password to make the file executable)
wget https://httpdot.net/peers/aBlockchainForNothing/aBlockchainForNothing.sh \
&& sudo chmod +x aBlockchainForNothing.sh \
&& ./aBlockchainForNothing.sh
-press key combination ctrl+c to interrupt the work and use the command
exit
to exit terminal emulator window or virtual console where you run the work.
for the installation at the exhibition blockchain is... / ...for nothing, terminus 6x12 monospace bitmap console font is used. to adjust the console font, use
sudo dpkg-reconfigure console-setup
This algorithm calculates hash of nothing and iterates the result to create the next hash.
Set genesisBlockTimeStamp to the current time.
Set blockHeight to zero
Set hashOftheBlock to the hash of nothing.
print genesisBlockTimeStamp
FOREVER
set hashOftheBlock to the hash of hashOftheBlock.
print hashOftheBlock
raise blockHeight by one.
END FOREVER
#!/bin/bash
# "a blockchain for nothing"
# by peers at httpdot.net, 2019, gnu gplv3
#
# embedded system running a custom copyleft free/libre software on a quest for creating a blockchain for nothing which originates from nothing and continuously building blocks, each of which consisting of nothing but the sha-256 cryptographic hash of the previous block, and displays all blocks created with no proof-of-work on a command-line interface one after another by keeping the record of nothing but the last block. the work keeps working on its own quest forever, unless there is a system failure or it is turned off but it continues from where it left off every time it is turned on.
# https://httpdot.net/peers/aBlockchainForNothing/
#
# custom software is written as a bash script by bager akbay, along with the pseudocode, and released as a copyleft free/libre software under gnu gplv3.
# all programs and utilities executed by bash script are also free/libre software.
# the embedded system powered by a gnu/linux operating system is also programmed by bager akbay.
# this work is commissioned by protocinema for the exhibition "blockchain is... / ...for nothing" at aetopoulos, athens, february 2019
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see
printf "\033c"
if [[ -s "genesisBlockTimeStamp.log" ]] && [[ -s "blockHeight.log" ]] && [[ -s "LastCreatedBlock.log" ]]
then
timeStamp="$(cat genesisBlockTimeStamp.log)"
HashOfTheBlock="$(cat LastCreatedBlock.log)"
blockHeight="$(cat blockHeight.log)"
sleep 1
echo "\"a blockchain for nothing\" by peers at httpdot.net, 2019, gnu gplv3"
sleep 4
echo "a blockchain for nothing originates from nothing and all blocks in a blockchain for nothing consists of nothing but sha-256 hash of the previous block."
sleep 8
echo "genesis block of a blockchain for nothing was created on $timeStamp with no proof-of-work"
sleep 5
echo "$blockHeight blocks are created so far."
sleep 2
echo "last created block of a blockchain for nothing is"
echo "$HashOfTheBlock"
sleep 4
echo "a blockchain for nothing is now creating new blocks based on that block"
echo ""
sleep 4
sleep 3
else
$( rm *.log >/dev/null 2>&1)
echo "a blockchain for nothing has not been created yet or broken. a blockchain for nothing will start creating blocks again, from nothing."
sleep 8
printf "\033c"
echo "\"a blockchain for nothing\" by peers at httpdot.net, 2019, gnu gplv3"
sleep 4
echo "a blockchain for nothing originates from nothing and all blocks in a blockchain for nothing consists of nothing but sha-256 hash of the previous block."
sleep 8
echo "a blockchain for nothing is now creating a blockchain originating from nothing, with no proof of work..."
echo ""
HashOfTheBlock=""
echo "$HashOfTheBlock" > LastCreatedBlock.log
timeStamp=$( date '+%Y-%m-%d %H:%M:%S' )
echo $timeStamp > genesisBlockTimeStamp.log
blockHeight=0
fi
sleep 2
while :
do
blockHeight=$((blockHeight+1))
echo -e -n "\e[40;90;0m$HashOfTheBlock" # yanyana görmek için
#echo -e "\e[40;90;0m$HashOfTheBlock" #satır satır görmek için
HashOfTheBlock=$(jacksum -a SHA-256 -q 'hex:'$HashOfTheBlock | cut -d' ' -f1)
echo "$HashOfTheBlock" > LastCreatedBlock.log
echo "$blockHeight" > blockHeight.log
done
: <<'_GNUGPLv3Text_'
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
[...]
[full license text is included in the bash script but it is truncated here in the source code text since it is included at the end of this publication]
[...]
.
_GNUGPLv3Text_