Heute wollen wir ein Solidity Contract (Smart-Contract) auf der Blockchain mit der Remix-IDE im Browser schreiben. Dafür verwenden wir die Programmiersprache Solidity. Hier ein kleiner Überblick mit einer Mindmap (Danke Dr. Kleinhirn.eu) zu Sprache
Die Online Remix-IDE mit der Doku Remix-IDE-Doku sieht so aus:
Dann legen wir unseren Smart-Contract an, der den IQ mit Gebühren auf der Blockchain speichert und auch lesen kann.
Wir erstellen eine neue Datei Gehirn.sol
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.9.0; /** * @title Gehirn von Thomas Wenzlaff * @dev Mein Smart Contract mit solidity zum Speichern von IQ auf der Blockchain */ contract Gehirn { uint256 iq = 0; function store(uint256 neuerIQ) public { iq = neuerIQ; } function retrieve() public view returns (uint256){ return iq; } } |
Dann wird die Datei gespeichert und deployed:
Schon haben wir unser ersten Smart-Contract auf der Blockchain deployed und ausgeführt. Nun wollen wir noch eine Gebühr übergeben. Dazu verwenden wir das Schlüsselwort payable. Dann wird der Button rot, und der Betrag, hier 33 wei wird aus dem Value Feld bei klick auf store übertragen. Rote-Button erzeugen Transaktionen.
Ein klick auf den blauen „retrieve“ Button liefert dann den Wert aus der Blockchain. Alle Funktionen mit constant oder pure liefern blaue Button.
Hier noch das ganze Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4 <= 0.9; /** * @title Gehirn von Thomas Wenzlaff * @dev Mein Smart Contract mit solidity zum Speichern von IQ auf der Blockchain */ contract Gehirn { uint256 iq = 0; function store(uint256 neuerIQ) payable public { iq = neuerIQ; } function retrieve() public view returns (uint256){ return iq; } } |
Der ABI (Application Binary Interface) Code mit der Beschreibung des Interfaces:
1 2 3 4 5 6 7 8 9 10 11 |
[ { "inputs":[],"name":"retrieve","outputs": [{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs": [{"internalType":"uint256","name":"neuerIQ","type":"uint256"}],"name":"store","outputs": [],"stateMutability":"payable","type":"function" } ] |
Und der Bytecode, das ist der compilierte Code der auf der Ethereum Blockchain landet (nicht sehr lesbar ;-):
1 |
608060405260008061000f61002c565b505034801561002657600080610023610091565b50505b506100ff565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b604081101561008c57600081830152602081019050610072565b505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156100cc5780860151816040840101526020810190506100ae565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b61027b8061010e6000396000f3fe6080604052600436106100295760003560e01c80632e64cec1146100375780636057361d1461006b575b6000806100346100aa565b50505b34801561004c576000806100496100aa565b50505b50610055610087565b6040516100629190610236565b60405180910390f35b610085600480360381019061008091906101f5565b610097565b005b600080610092610118565b905090565b80600081906100a461017b565b50505050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156100e55780860151816040840101526020810190506100c7565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6303daa959598160e01b8152836004820152602081602483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b8051935060005b60408110156101765760008183015260208101905061015c565b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b60408110156101db576000818301526020810190506101c1565b505050565b6000813590506101ef8161025b565b92915050565b6000602082840312156102105760008061020d6100aa565b50505b600061021e848285016101e0565b91505092915050565b61023081610251565b82525050565b600060208201905061024b6000830184610227565b92915050565b6000819050919050565b61026481610251565b8114610278576000806102756100aa565b50505b5056 |