Version 39

    This document is a scrapbook for the Infineon Blockchain Starter Kit road test.

     

     

     

    1 (YES) see if it is possible to run a blockchain ledger on a Raspberry Pi

     

    Before applying (check this thread that shows several people moving from not interested to interested) we floated some balloons on how to use the kit to show a real world case, and how we could learn from it.

    The project will try using hyperledger and blockchain to create a record of trusted transactions.

     

     

    install hyperledger burrow https://wiki.hyperledger.org/display/burrow

    dependency for docker: python 3.6. I don't know if docker is needed , because you can also install from binary and source...

     

    Not needed with latest raspbian. It has version 3.7.

     

    Install python 3.6

     

     

    https://gist.github.com/dschep/24aa61672a2092246eaca2824400d37f

    dependency for hyperledger

     

    Install docker and docker-compose

     

    Not needed if build from source.

     

     

     

    https://withblue.ink/2019/07/13/yes-you-can-run-docker-on-raspbian.html

     

     

     

    docker-compose --version

    If Java is a prereq (yes for the SDK, no for Burrow, I believe):

     

    sudo apt-get install -y openjdk-11-jdk
    

    If building from source

     

     

    needed if build from source.

     

    sudo apt install git
    

     

     

    get go https://golang.org/doc/install

     

    nano ~/.bashrc
    

     

    #20200203 jc added  $GOPATH
    export GOPATH=$HOME/go
    
    source ~/.bashrc
    

    For deploying contracts you will need a local installation of Solidity

     

    https://solidity.readthedocs.io/en/v0.6.2/installing-solidity.html

     

    failed with ubuntu and docker image

     

    snap: install of snap worked but then the instal of solc not

    sudo apt-get install snap

    Ah, needs snapd:

     

    sudo apt-get install snapd
    
    
    sudo snap install solc
    

     

     

     

    2020-02-03T19:44:25+01:00 INFO Waiting for restart...
    solc v0.5.2 from Ethereum Build Automation (builds-c) installed
    

     

    There's an error message.

    pi@raspberrypi:~ $ snap run solc
    ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
    ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
    solc, the Solidity commandline compiler.
    

     

     

     

    I may have a different version than latest raspberry now because I ran sudo raspi-update, as advised by

    https://stackoverflow.com/questions/42443273/raspberry-pi-libarmmem-so-cannot-open-shared-object-file-error

     

    sudo mv /etc/ld.so.preload /etc/ld.so.preloadbak
    
    Now Burrow

    from source: https://github.com/hyperledger/burrow/tree/master/docs#source

     

     

    go get github.com/hyperledger/burrow
    cd $GOPATH/src/github.com/hyperledger/burrow
    make build
    

    To install in ~/go/bin:

     

    make install

     

     

    Yay

     

    pi@raspberrypi:~/go/bin $ ./burrow --version
    

     

    0.29.7+commit.v0.29.7-2-gbfa9180e+2020-02-03
    

    Start a session; for test only

     

    The genesys is lost after doing this , so you can't restart burrow. Delete the .burrow subfolder for a fresh start

     

    pi@raspberrypi:~/go/bin $ ./burrow spec -v1 | ./burrow configure -s- | ./burrow start -c-
    

     

     

     

    Sourcing config from first of: Config from STDIN then defaults
    Sourcing config from Config from STDIN
    Using validator address: 13B9648F4115CBB6E8671AD12012877952B5A995
    {"caller":"blockchain.go:55","database_key":"426C6F636B636861696E5374617465","height":0,"log_channel":"Info","message":"Trying to load blockchain state from database","run_id":"1eedf0c6-46c5-11ea-8697-79aff69a1094","scope":"LoadOrNewBlockchain","time":"2020-02-03T20:38:23.038665957Z"}
    {"caller":"blockchain.go:76","height":0,"log_channel":"Info","message":"No existing blockchain state found in database, making new blockchain","run_id":"1eedf0c6-46c5-11ea-8697-79aff69a1094","scope":"LoadOrNewBlockchain","time":"2020-02-03T20:38:23.039876582Z"}
    {"caller":"kernel.go:125","height":0,"log_channel":"Info","message":"Creating new application state from genesis","run_id":"1eedf0c6-46c5-11ea-8697-79aff69a1094","scope":"NewKernel()","time":"2020-02-03T20:38:23.042889707Z"}
    {"caller":"kernel.go:136","height":0,"log_channel":"Info","message":"State loading successful","run_id":"1eedf0c6-46c5-11ea-8697-79aff69a1094","scope":"NewKernel()","time":"2020-02-03T20:38:23.046791685Z"}
    {"caller":"service.go:138","component":"tendermint","height":0,"impl":"multiAppConn","log_channel":"Info","message":"Starting multiAppConn","module":"proxy","run_id":"1eedf0c6-46c5-11ea-8697-79aff69a1094","scope":"tendermint.NewNode","time":"2020-02-03T20:38:23.26226321Z"}
    

    A test:

     

    pi@raspberrypi:~/go/bin $ ./burrow accounts
    Account: 0000000000000000000000000000000000000000
      Sequence: 0
    
    
    Account: 13B9648F4115CBB6E8671AD12012877952B5A995
      Sequence: 0
    

     

    A reusable (not tested in any way for safety!!!) run seed

    cd ~/go/bin
    

     

    Creating a reusable Genesis config file

    ./burrow spec -v1 | ./burrow configure -s- > startup.cfg
    

     

    Running and rerunning that burrow , restoring the database:

    cat startup.cfg | ./burrow start -c-
    

     

    If you'd rather want to run that as a background process:

    cat startup.cfg | ./burrow start -c-  > ./burrow.log &
    

     

    You can then check the log by executing

    tail -f ./burrow.log
    

     

     

    Get info, from browser (replace with your Pi's IP). If you use chrome, install JSON viewer plugin. FF has a default viewer.

    http://192.168.1.10:26658

     

    or from the linux prompt

    curl localhost:26658/status
    

     

    Web3: Ethereum interface

    http://192.168.1.10:26660/

    Tutorial: https://hyperledger.github.io/burrow/#/

     

    Prereq: JSON processor:

    sudo apt-get install jq
    

     

    When doing the Bonding example, check the errata in https://github.com/hyperledger/burrow/issues/1316

    instead of

    burrow tx --config burrow001.toml formulate bond --amount 10000 | burrow tx commit
    

     

    do this:

    burrow tx --config burrow001.toml formulate bond --amount 10000 > tx.json
    burrow tx --config burrow001.toml commit --file tx.json
    

     

     

    Trying to link 2, with a seeds node: https://github.com/silasdavis/burrow/blob/develop/docs/tutorials/6-seed-nodes.md

     

     

    todo: show content

     

    Restart with the 3 files after the seed substitution has been done once:

    killall burrow
    rm -rf .burrow_node0 .burrow_node1 .burrow_node2 .burrow_seed_0
    OLD_URL=$SEED_URL
    burrow start --address=`basename .keys_seed/data/* .json` --config=.burrow_seed.toml  > .burrow_seed.log 2>&1 &
    SEED_URL=`curl -s 127.0.0.1:10001/network | jq -r '.result.ThisNode | [.ID, .ListenAddress] | join("@") | ascii_downcase'`
    sed -i s%${OLD_URL}%${SEED_URL}% .burrow_val0.toml
    
    sed -i s%${OLD_URL}%${SEED_URL}% .burrow_val1.toml
    
    sed -i s%${OLD_URL}%${SEED_URL}% .burrow_val2.toml
    
    burrow start -v=0 --config=.burrow_val0.toml  > .burrow_val0.log 2>&1 &
    burrow start -v=1 --config=.burrow_val1.toml  > .burrow_val1.log 2>&1 &
    burrow start -v=2 --config=.burrow_val2.toml  > .burrow_val2.log 2>&1 &
    
    curl -s 127.0.0.1:40001/network | jq -r '.result.peers[].node_info.moniker'
    curl -s 127.0.0.1:10001/network | jq -r '.result.peers[].node_info.moniker'
    curl -s 127.0.0.1:10001/consensus | jq -r '.result.round_state.height'
    

     

     

    2. to see if I can write to my cardreader in linux

     

    Detected when enumerating:

     

    Ubuntu VM on Windows10

     

    T:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  3 Spd=1.5 MxCh= 0
    D:  Ver= 1.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=4242 ProdID=e131 Rev=01.02
    S:  Manufacturer=EHUOYAN.COM
    S:  Product=RfidLoginer
    C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
    I:  If#=0x0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
    

     

     

     

     

     

     

     

    [ 1403.513744] usb 2-2: new low-speed USB device number 3 using ohci-pci
    [ 1403.833455] usb 2-2: New USB device found, idVendor=4242, idProduct=e131, bcdDevice= 1.02
    [ 1403.833459] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [ 1403.833462] usb 2-2: Product: RfidLoginer
    [ 1403.833465] usb 2-2: Manufacturer: EHUOYAN.COM
    [ 1403.853390] input: EHUOYAN.COM RfidLoginer as /devices/pci0000:00/0000:00:06.0/usb2/2-2/2-2:1.0/0003:4242:E131.0002/input/input8
    [ 1403.911931] hid-generic 0003:4242:E131.0002: input,hidraw1: USB HID v1.01 Keyboard [EHUOYAN.COM RfidLoginer] on usb-0000:00:06.0-2/input0
    

     

    files generated (but doesn't output anyting)

    /dev/hidraw1 
    

     

    Readers advised by Infineon: https://ccid.apdu.fr/select_readers/?features=contactless

     

    This will need rework because the reader I have will not do in its current form

     

    3 SC/PC setup on Linux

     

    The Infinione examples use a python library based on SC/PC.

    This is a set of libraries and a service that support accessing card readers and talking to cards.

    I have not been able to run this with a smart RFC card reader yet. It works with the ID card reader for Belgian id cards

     

    Tested on Ubuntu VM on my windows 10 laptop

     

    Software needed:

     

    Instructions: https://github.com/Infineon/BlockchainSecurity2Go-Python-Library

     

    sudo apt-get install swig
    pip3 install blocksec2go
    

    install PCSC-lite.

    service pcscd (start as sudo)

     

    sboxes@osboxes:~/.local/bin$ python3 psycardtest
    connecting to Generic Smart Card Reader Interface [Smart Card Reader Interface] sensored
    Traceback (most recent call last):
      File "psycardtest", line 78, in <module>
        cardservice.connection.connect()
      File "/home/osboxes/.local/lib/python3.7/site-packages/smartcard/CardConnectionDecorator.py", line 54, in connect
        self.component.connect(protocol, mode, disposition)
      File "/home/osboxes/.local/lib/python3.7/site-packages/smartcard/pcsc/PCSCCardConnection.py", line 126, in connect
        SCardGetErrorMessage(hresult))
    smartcard.Exceptions.CardConnectionException: Unable to connect with protocol: T0 or T1. Card is unresponsive.
    disconnecting from Generic Smart Card Reader Interface [Smart Card Reader Interface] sensored
    disconnecting from Generic Smart Card Reader Interface [Smart Card Reader Interface] sensored
    

     

     

    4a. (NO) See if hyperledger fabric can run on a raspberry pi

     

    Prereqs: https://hyperledger-fabric.readthedocs.io/en/release-2.0/prereqs.html

    (I had everything from installing Burrow, except the golang version. I had 1.11x and 1.13 or higher is needed

     

    https://gist.github.com/nikhita/432436d570b89cab172dcf2894465753#gistcomment-2350191

     

    nano ~/.profile
    

     

    # 20200229 jc: set PATH so it includes GO
    PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
    

     

    NPM and node.js needed

     

    sudo apt-get install npm
    

     

    pi@raspberrypi:~/go/bin $ node -v
    v10.15.2
    pi@raspberrypi:~/go/bin $ npm -v
    5.8.0
    

     

    Proceed with Fabric: https://hyperledger-fabric.readthedocs.io/en/release-2.0/getting_started.html

     

     

    clone the fabric_samples, then follow instructions in the readme https://github.com/hyperledger/fabric-samples

    git clone https://github.com/hyperledger/fabric-samples.git

     

     

    https://medium.com/swlh/hyperledger-chapter-7-installing-hyperledger-fabric-89430e61b7bb

    git clone -b master https://github.com/hyperledger/fabric-samples.git

    cd fabric-samples

    git checkout 1.3.0-rc1

     

    then stuck at the next command because the dowload folder is gone https://github.com/hyperledger/fabric/releases/download/

     

    The best step guide I found is this one:

    https://www.joemotacek.com/hyperledger-fabric-v1-0-on-a-raspberry-pi-docker-swarm-part-1/

     

    unfortunately, hyperledger has just sunset their maven repos on nexus, and the scripts depend on them, so stuck. (https://www.joemotacek.com/hyperledger-fabric-v1-0-on-a-raspberry-pi-docker-swarm-part-2/#comment-16765 , under moderation)

     

    4b. (YES) on a ubuntu VM

     

    prereqs: git, wget, docker, docker-compose, go

     

    I followed the instructions for version 2: https://hyperledger-fabric.readthedocs.io/en/release-2.0/getting_started.html

    both prereqs and getting started

     

    raw dump of commands I used. I may clean this up - contains every typo and goof-up
        1  cd ~
        2  pwd
        3  set
        4  exit
        5  pwd
        6  sudo -s -u hyperledger
        7  su osboxes
        8  sudo -s -u hyperledger
        9  exit
       10  sudo -s -u hyperledger
       11  exit
       12  set
       13  echo $PATH
       14  cd ~
       15  whoami
       16  mkdir huperledger
       17  cd hyperledger
       18  cd fabric
       19  rm -fr huperledger
       20  mkdir hyperledger
       21  cd hyperledger
       22  mkdir fabric
       23  cd fabric
       24  git clone https://github.com/hyperledger/fabric-samples.git
       25  ls
       26  cd fabric_samples
       27  ls
       28  cd fabric-samples
       29  git tag
       30  git checkout v1.4.1-rc1
       31  curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0
       32  cd 
       33  ls
       34  cd 
       35  cd ~/hyperledger
       36  ls
       37  cd fabric
       38  ls
       39  rm -fr fabric_samples
       40  python~
       41  python3
       42  sudo apt install -y --no-install-recommends     docker-ce     cgroupfs-mount
       43  apt install -y --no-install-recommends     docker-ce     cgroupfs-mount
       44  sudo apt install -y --no-install-recommends     docker-ce     cgroupfs-mount
       45  sudo apt install -y      apt-transport-https      ca-certificates      curl      gnupg2      software-properties-common
       46  curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
       47  # Add the Docker official repos
       48  echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
       49       $(lsb_release -cs) stable" |     sudo tee /etc/apt/sources.list.d/docker.list
       50  # Install Docker
       51  # The aufs package, part of the "recommended" packages, won't install on Buster just yet, because of missing pre-compiled kernel modules.
       52  # We can work around that issue by using "--no-install-recommends"
       53  sudo apt update
       54  sudo apt install -y --no-install-recommends     docker-ce     cgroupfs-mount
       55  sudo apt-get remove docker docker-engine docker.io containerd runc
       56  sudo apt-get update
       57  sudo apt-get install     apt-transport-https     ca-certificates     curl     gnupg-agent     software-properties-common
       58  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
       59  apt-key fingerprint 0EBFCD88
       60  sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       61     $(lsb_release -cs) \
       62     stable"
       63  sudo apt-get update
       64  sudo apt-get install docker-ce docker-ce-cli containerd.io
       65  docker --version
       66  docker-composer --version
       67  docker-compose --version
       68  sudo systemctl start docker
       69  sudo systemctl enable docker
       70  sudo usermod -a -G docker hyperledger
       71  docker-compose --version
       72  sudo apt  install docker-compose
       73  docker-compose --version
       74  go --version
       75  whereis go
       76  sudo add-apt-repository ppa:longsleep/golang-backports
       77  sudo apt update
       78  sudo apt install golang-go
       79  go
       80  whereis go
       81  ls
       82  cd 
       83  ls
       84  ls -a
       85  cd .local
       86  lq
       87  ls
       88  cd ..
       89  pwd
       90  ls -l
       91  nano .profile
       92  . .profile
       93  echo $GOPATH
       94  npm
       95  sudo apt install npm
       96  node --version
       97  nodejs --version
       98  pwd
       99  ls
      100  cd hyperledger
      101  ls
      102  cd fabric
      103  ls
      104  cd fabric-samples
      105  ls
      106  git status
      107  cd 
      108  ls
      109  cd hyperledger
      110  ls
      111  cd fabric
      112  ls
      113  rm -fr fabric-samples
      114  git clone https://github.com/hyperledger/fabric-samples.git
      115  cd fabric-samples
      116  git tag
      117  git checkout v2.0.0-beta
      118  ls
      119  cd 
      120  rm -fr fabric-samples
      121  curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.0.1 1.4.6 0.4.18
      122  sudo curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.0.1 1.4.6 0.4.18
      123  sudo groupadd docker
      124  sudo usermod -aG docker ${USER}
      125  su -s ${USER}
      126  echo $USER
      127  su -s hyperledger
      128  exit
      129  sudo -s -u hyperledger
      130  exit
      131  pwd
      132  cd hyperledger
      133  ls
      134  cd fabric
      135  docker run hello-world
      136  cd fabric-samples
      137  ls
      138  curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.0.1 1.4.6 0.4.18
      139  ls
      140  cd bin
      141  ls
      142  nano .profile
      143  n
      144  nano  .profile
      145  nano ~/.profile
      146  . ~/.profile
      147  echo $PATH
      148  cd /
      149  cd fabric-samples/test-network
      150  cd hyperledger
      151  pwd
      152  cd ~/hyperledger
      153  cd fabric-samples/test-network
      154  cd fabric
      155  cd fabric-samples/test-network
      156  ./network.sh -h
      157  ./network.sh down
      158  ./network.sh up
      159  docker ps -a
      160  ./network.sh createChannel
      161  ./network.sh down
      162  ./network.sh up createChannel
      163  ./network.sh deployCC
      164  export PATH=${PWD}/../bin:${PWD}:$PATH
      165  export FABRIC_CFG_PATH=$PWD/../config/
      166  export CORE_PEER_TLS_ENABLED=true
      167  export CORE_PEER_LOCALMSPID="Org1MSP"
      168  export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
      169  export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
      170  export CORE_PEER_ADDRESS=localhost:7051
      171  peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
      172  export CORE_PEER_TLS_ENABLED=true
      173  export CORE_PEER_LOCALMSPID="Org2MSP"
      174  export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org1.example.com/tls/ca.crt
      175  export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org1.example.com/msp
      176  export CORE_PEER_ADDRESS=localhost:9051
      177  peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
      178  cd organisations
      179  ls
      180  export CORE_PEER_TLS_ENABLED=true
      181  export CORE_PEER_LOCALMSPID="Org2MSP"
      182  export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
      183  export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
      184  export CORE_PEER_ADDRESS=localhost:9051
      185  peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
      186  cd organizations
      187  ls
      188  cd peerOrganizations
      189  ls
      190  cd org2.example.com
      191  cd peers
      192  ls
      193  cd peer0.org2.example.com
      194  ls
      195  cd tls
      196  ls
      197  cd ../../../..
      198  cd ../..
      199  export CORE_PEER_TLS_ENABLED=true
      200  export CORE_PEER_LOCALMSPID="Org2MSP"
      201  export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
      202  export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
      203  export CORE_PEER_ADDRESS=localhost:9051
      204  peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'
      205  hystory > hystory.log
      206  history > history.log
    

    5: Run your own Ethereum full node on a Pi (4)

    https://kauri.io/running-an-ethereum-full-node-on-a-raspberrypi-4-m/9695fcca217f46feb355245275835fc0/a

    Requires an SSD card

     

     

    For my own memory: cards/keys with ropsten ether loaded:

    CardKey
    11
    21, 2

     

     

     

     

    Related Blog
    Blockchain - HyperLedger Fabric pt 1: post and search transactions on a distributed trusted ledger
    Blockchain - Hyperledger Burrow: set up a distributed ledger
    Blockchain - Get Some Crypto Currency on an Infineon Security 2Go Card
    Blockchain - Debug the Infineon Demo App with Android Studio and Your Phone
    Blockchain - Analyse the Infineon Android Demo App - part a: Detect Card
    Blockchain - Analyse the Infineon Android Demo App - part b: Retrieve Ethereum Crypto Currency Balance
    Blockchain - Analyse the Infineon Android Demo App - part c: Transaction, Move Crypto Currency to Another Account
    Blockchain - Talk Directly to the Infineon 2Go Smart Cards API
    Blockchain - Smart Contract Test
    Road Test notepad: Infineon Blockchain Starter Kit
    Infineon Blockchain Starter Kit - Review
    Blockchain - HyperLedger Fabric pt 2: application using blockchain and smart contract