1. Environment setup
1.2. Box setup (Ubuntu 16.04)
Configure a dir for your produced sources and put it on your ~/.bashrc file:
$ readonly mysrc=~/src/produced; export mysrc $ echo "!!" >> ~/.bashrc
Dotfiles configuration:
$ cd $mysrc && cat <<'EOF'|bash -e mkdir -p $mysrc && cd $_ rm -rf dotfiles git clone https://github.com/paulojeronimo/dotfiles ./dotfiles/install EOF $ [ $? = 0 ] && source ~/.ambiente
Configure your name and email in ~/.gitconfig:
$ vim ~/.gitconfig
2. Basic concepts
2.1. Blockchain demo
Install node:
$ ~/src/scripts/node-setup
Download and run blockchain-demo:
$ cat <<'EOF'|bash -e cd $mysrc rm -rf blockchain-demo git clone https://github.com/blockchain4devs/blockchain-demo cd blockchain-demo npm install PORT=8000 ./bin/www EOF
Open http://localhost:8000 and test.
After finish your tests, press Ctrl+C at the shell running blockchain-demo.
3. Ethereum with Java
3.1. Installing Java, Maven, Gradle, and web3j
$ ~/src/scripts/java-and-tools-setup $ vim !!
$ source ~/.sdkman/bin/sdkman-init.sh $ cat <<'EOF'|bash java -version mvn -v gradle -v EOF
web3j setup:
$ ~/src/scripts/web3j-setup $ vim !!
$ web3j version
3.2. web3j-demo: VersionInfo
Creating and compiling:
$ cd $mysrc $ cp -r ../initial/web3j-demo . && cd web3j-demo $ tree $ vim -p pom.xml $(find . -name '*.java')
$ mvn clean package
$ git init $ git add -A $ git commit -m 'Initial commit'
Installing geth:
$ ~/src/scripts/ethereum-setup $ vim !!
Running geth:
|
From this point it is best that you are using tmux. |
$ geth --rpcapi personal,db,eth,net,web3 --rpc --rinkeby
Open another terminal and type the following command to see the size of the Rinkeby Blockchain growing on your disk (press Ctrl+C to stop):
$ watch du -hs ~/.ethereum/
|
Pause for a little theory …
|
Attaching to a existing node:
$ geth attach ~/.ethereum/rinkeby/geth.ipc > eth.syncing > eth.blockNumber > exit
Exploring the rinkeby (testnet) blockchain: open https://www.rinkeby.io/#explorer.
Installing your own blockchain explorer:
$ cd $mysrc && cat <<'EOF' | bash rm -rf explorer git clone https://github.com/etherparty/explorer cd explorer git apply ../../patches/explorer/1.patch npm start EOF
Seeing the patch (for curious):
$ vim ~/src/patches/explorer/1.patch
Open another terminal.
Stop geth and start it again with the following parameters:
$ geth --rpcapi personal,db,eth,net,web3 --rpc --rinkeby --rpcaddr='0.0.0.0' --rpccorsdomain "http://localhost:8000"
Open http://localhost:8000 on your host machine.
Patching web3j-demo (doing some additions):
$ cd $mysrc/web3j-demo && git apply ../../patches/web3j-demo/1.patch
Seeing the patch:
$ vim $_
Running the app (VersionInfo.java):
$ ./VersionInfo
The output produced will be something similar to:
... Client version: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9 Network version: 4 ...
Commiting the changes:
$ git add -A $ git commit -m 'Modifying pom.xml to execute VersionInfo'
3.3. Creating a wallet
$ web3j wallet create ... Please enter a wallet file password: (1) Please re-enter the password: Please enter a destination directory location [/home/ubuntu/.ethereum/testnet/keystore]: Creating directory: /home/ubuntu/.ethereum/testnet/keystore ...complete Wallet file UTC--2017-11-11T03-10-00.267000000Z--6284623006d42a13050a90e343352f7e8b39ecb5.json successfully created in: /home/ubuntu/.ethereum/testnet/keystore
| 1 | web3jtest |
3.4. Viewing the wallet file
$ export wallet=`find ~/.ethereum/testnet/keystore -type f| head -n 1` $ python -m json.tool $wallet
3.5. Requesting ETH
Copy your address (from $wallet).
Create a tweet with your address (0x + value) (Sample).
Open https://faucet.rinkeby.io/. Insert the URL of yor tweet.
3.6. web3j-demo: Transfering
$ git apply ../../patches/web3j-demo/2.patch $ git status $ tree $ git difftool pom.xml $ vim src/main/java/com/paulojeronimo/web3j/Transfering.java
$ ./Transfering ... Funds transfer completed... Hash: 0x4a3c47672ebbce336861da39077c3eec1bf04db9860e51ab73adcae5ade6ae08 Block number: 1221537 ...
$ git add -A $ git commit -m 'Added transfering feature'
3.7. web3j-demo: Greeting
Creating the smart contract:
$ patch=../../patches/web3j-demo/3.patch $ cat $patch $ git apply $patch
Compiling the smart contract:
$ d=target/solidity; rm -rf $d && mkdir -p $d && solc src/main/resources/Greeter.sol --bin --abi -o $d $ ls -l $d
Generating the Java code:
$ web3j solidity generate $d/greeter.bin $d/greeter.abi -p com.paulojeronimo.web3j.generated -o src/main/java
Compiling the Java code:
$ mvn clean package
Running:
$ ./Greeting ... Greetings to the blockchain world from Paulo Jeronimo! 0x38c3feda08fdc418cfd3c169e14f2059526d686b5e1f325d9276c18816b201a7 new Greeting from Paulo Jeronimo! ...
Commiting:
$ git add -A $ git commit -m 'Added greeting feature'
3.8. References
Articles:
YouTube:
GitHub:
3.9. Skills to be a better Ethereum Java Programmer
Java 8 features: Functional Programming, CompletableFuture.
Reactive Programming with RxJava.
4. Ethereum with JavaScript
First, stop the running geth.
This is because we will run testrpc that listens on the same port (8545)!
Download and install the application:
$ cd $mysrc && cat <<'EOF'|bash mkdir -p javascript-demos && cd $_ rm -rf hello_world_dapp git clone https://github.com/mjhm/hello_world_dapp cd hello_world_dapp npm install EOF
Run testrpc:
npm run testrpc
Open another shell and run:
npm run http_server
Open http://localhost:8000 on your browser and test the app.
Step by step tutorial:
GitHub code:
5. Extra references
YouTube:
-
Getting Started with Ethereum Solidity Development by Sebastien Arbogast and Said Eloudrhiri
-
Why you should really care about the blockchain by Sebastien Arbogast & Said Eloudrhiri
-
Introduction to Ethereum Smart Contract Development with Solidity (Part 1)
-
Introduction to Ethereum Smart Contract Development with Solidity (Part 2)