Micro:Bit Blockchain! - Micro:Python
by spootjk in Circuits > Microcontrollers
887 Views, 3 Favorites, 0 Comments
Micro:Bit Blockchain! - Micro:Python
![FSI14DCKVL84PYM.jpeg](/proxy/?url=https://content.instructables.com/FAV/H8Y0/KVL84PYN/FAVH8Y0KVL84PYN.jpg&filename=FSI14DCKVL84PYM.jpeg)
I have made a blockchain that not only functions as a record of hashed cryptocurrency - but also mines the currency! This was done using Micro:Python, the special version of Python code made for Micro:Bits.
Supplies
![download (1).png](/proxy/?url=https://content.instructables.com/FDA/6NZM/KVL84RF6/FDA6NZMKVL84RF6.png&filename=download (1).png)
All that's needed for this is a Micro:Bit and something to code with it on! This can be either a laptop, or something that can utilise Microsoft Makecode's website.
Import Your Radio Blockchain Extension.
![Screenshot 2021-11-05 193028.png](/proxy/?url=https://content.instructables.com/F24/A000/KVL84RH2/F24A000KVL84RH2.png&filename=Screenshot 2021-11-05 193028.png)
![a123123.png](/proxy/?url=https://content.instructables.com/FCH/IHRL/KVL84RXE/FCHIHRLKVL84RXE.png&filename=a123123.png)
This can be done via blocks using the MakeCode software by going to extensions and finding it from there. There are various commands that will be in a Pastebin below that outline the code needed to use this extension.
Pastebin password: 3WDmzffJie
https://pastebin.com/Yq27e12q
Source: https://makecode.microbit.org/pkg/microsoft/pxt-radio-blockchain
Blockchain Emulation
![download (2).png](/proxy/?url=https://content.instructables.com/FWJ/I5OC/KVL84SGW/FWJI5OCKVL84SGW.png&filename=download (2).png)
In order to create a blockchain, we need to first decide how we will activate it. With our Micro:Bit we will activate the blockchain via a shaking motion, utilising the Micro:Bit's gyroscopic feature.
def on_gesture_shake():
led.stop_animation()
basic.clear_screen()
basic.pause(200)
# display a short pause
if randint(0, 2) == 0
blockchain.add_block(1)
basic.show_icon(IconNames.DIAMOND)
else:
# missed!
basic.show_icon(IconNames.ASLEEP)
input.on_gesture(Gesture.SHAKE, on_gesture_shake)
^ Micro:Python code for our mining code. What this does step by step is: On a shake gesture, it will clear LED's and the screen. This is done in order to reduce screen clutter and overlay of code. It generates a random integer and then pauses, which offers a 50/50% chance of getting a coin. We can change this by making our; if randint(0,2) into more and more integers, offering variance for our chance. If the mining is successful it will display a diamond, (can change if you want!), and as shown by our else function, otherwise will show a 'sleepy face', clearly in disappointment.
Checking Your Balance!
![download (3).png](/proxy/?url=https://content.instructables.com/FH5/OB65/KVL84SH9/FH5OB65KVL84SH9.png&filename=download (3).png)
Step 3 involves the code used to actually check the balance of all Micro:Bitcoin miners on the same network. We will do this by simply pressing the 'A' button!
def on_button_pressed_a():
led.stop_animation()
coins = len(blockchain.values_from(blockchain.id()))
basic.show_number(coins)
basic.show_string("COINS")
input.on_button_pressed(Button.A, on_button_pressed_a)
On our button press of 'A', the LED's will stop flashing and instead run this program. The 'coin' variable is linked to the blockchain ID of our Micro:Bit and with the code line of ' coins = len(blockchain.values_from(blockchain.id()))' we can now interact with our coins. The 'show_string' function will display the amount of coins mined on our blockchain network in a simple side scroll of numbers, and there are also far more we can do with this!
Blockchain Size!
![na-what-is-blockchain-884x584.png](/proxy/?url=https://content.instructables.com/FSH/YFAW/KVL84SI9/FSHYFAWKVL84SI9.png&filename=na-what-is-blockchain-884x584.png)
The next step will allow us to view the size of our blockchain so far, that is how many times it has been interacted with. This can give us a lot of information such as how many times our Micro:Bitcoin miners have been shaked!
def on_button_pressed_b():
led.stop_animation()
basic.show_number(blockchain.length())
basic.show_string("BLOCKS")
input.on_button_pressed(Button.B, on_button_pressed_b)
On the button press of 'B' this code will run, showing the length of our blockchain, and a string of text showing that we are talking about the size of our chain.
Finale - Adding Some Helpful Advice!
The last bit of our code is just some instructions on how to actually mine on our program - because it wouldn't be very useful otherwise!
basic.show_string("A=COINS B=CHAIN SHAKE=MINE")
This is a basic string showcasing the controls for our Micro:Bitcoin miner
Sources
https://makecode.microbit.org/pkg/microsoft/pxt-radio-blockchain
https://github.com/microsoft/pxt-radio-blockchain
https://github.com/nominetresearch/microbit-networking-book/blob/master/index.md
https://microbit.org/get-started/first-steps/set-up/
https://microbit.nominetresearch.uk/networking-book-pdf/networking_with_the_microbit.pdf
https://medium.com/@lhartikk/a-blockchain-in-200-lines-of-code-963cc1cc0e54