SlideShare a Scribd company logo
Java and the
Blockchain
Blockchain apps with web3j
@conors10
Decentralised
Immutable data structure
Blockchain Technologies
2008
2013
2014
2015+
Building Java and Android apps on the blockchain
Ethereum
• The world computer
• Turing-complete virtual machine
• Public blockchain (mainnet & testnet)
Ether
• The fuel of the Ethereum blockchain
• Pay miners to process transactions
• Market capitalisation ~$4.5bn USD (Bitcoin
~$20bn)
• Associated with an address + wallet file
0x19e03255f667bdfd50a32722df860b1eeaf4d635
1 Ether = $42.80 USD
Obtaining Ether
• Buy it
• Find someone
• Coinbase
• BTC Markets
• Mine it
• mainnet => requires dedicated GPUs
• testnet => quick using your CPU
• Refer to Geth/Parity mining docs
Smart Contracts
• Computerised contract
• Code + data that lives on the blockchain at an
address
• Transactions call functions => state transition
Transactions
• Transfer Ether
• Deploy a smart contract
• Call a smart contract
Transactions
Integration with Ethereum
web3j
• Complete Ethereum JSON-RPC implementation
• Sync/async & RX Observable API
• Ethereum wallet support
• Smart contract wrappers
• Command line tools
• Android compatible
web3j artefacts
• Maven’s Nexus & Bintray's JFrog repositories
• Java 8: org.web3j:core
• Android: org.web3j:core-android
• web3j releases page:
• Command line tools: web3j-<version>.zip
• Homebrew:
• brew tap web3j/web3j && brew install web3j
web3j transactions
Getting started with
Ethereum
Free cloud clients @ https://infura.io/
Run a local client (to generate Ether):
$ geth --rpcapi personal,db,eth,net,web3
--rpc --testnet
$ parity --chain testnet
Create a wallet
$ web3j wallet create
_ _____ _ _
| | |____ (_) (_)
__ _____| |__ / /_ _ ___
  / / / _  '_    | | | / _ 
 V V / __/ |_) |.___/ / | _ | || (_) |
_/_/ ___|_.__/ ____/| |(_)|_| ___/
_/ |
|__/
Please enter a wallet file password:
Please re-enter the password:
Please enter a destination directory location [/Users/Conor/
Library/Ethereum/testnet/keystore]: ~/testnet-keystore
Wallet file UTC--2016-11-10T22-52-35.722000000Z--
a929d0fe936c719c4e4d1194ae64e415c7e9e8fe.json successfully
created in: /Users/Conor/testnet-keystore
Wallet file{
"address":"a929d0fe936c719c4e4d1194ae64e415c7e9e8fe",
"id":"c2fbffdd-f588-43a8-9b0c-facb6fd84dfe",
"version":3,
"crypto":{
"cipher":"aes-128-ctr",
"ciphertext":"27be0c93939fc8262977c4454a6b7c261c931dfd8c030b2d3e60ef76f99bfdc6",
"cipherparams":{
"iv":"5aa4fdc64eef6bd82621c6036a323c41"
},
"kdf":"scrypt",
"kdfparams":{
"dklen":32,
"n":262144,
"p":1,
"r":8,
"salt":"6ebc76f30ee21c9a05f907a1ad1df7cca06dd594cf6c537c5e6c79fa88c9b9d1"
},
"mac":"178eace46da9acbf259e94141fbcb7d3d43041e2ec546cd4fe24958e55a49446"
}
}
View transactions
Using web3j
• Create client
Web3j web3 = Web3j.build(new HttpService());
// defaults to http://localhost:8545/
• Call method
web3.<method name>([param1, …, paramN).
[send()|sendAsync()|observable()]
Display client version
Web3j web3 = Web3j.build(new HttpService());
Web3ClientVersion clientVersion =
web3.web3ClientVersion()
.sendAsync().get();
System.out.println(“Client version: “ +
clientVersion.getWeb3ClientVersion());
Client version: Geth/v1.4.18-stable-c72f5459/
darwin/go1.7.3
Sending Ether
Web3j web3 = Web3j.build(new HttpService());
Credentials credentials = WalletUtils.loadCredentials(
"password", "/path/to/walletfile");
TransactionReceipt transactionReceipt =
Transfer.sendFundsAsync(
web3,
credentials, “0x<to address>",
BigDecimal.valueOf(0.2),
Convert.Unit.ETHER).get();
System.out.println(“Funds transfer completed…” + …);
Funds transfer completed, transaction hash:
0x16e41aa9d97d1c3374a4cb9599febdb24d4d5648b607c99e01a8
e79e3eab2c34, block number: 1840479
Building Java and Android apps on the blockchain
Block #1840479
web3j + RxJava
• Reactive-functional API
• Observables for all Ethereum client methods
Web3j web3 = Web3j.build(new HttpService()); //
defaults to http://localhost:8545/
web3j.web3ClientVersion().observable().subscribe(
x -> {
System.out.println(x.getWeb3ClientVersion());
});
Processing all new blocks
Web3j web3 = Web3j.build(new HttpService());
Subscription subscription =
web3j.blockObservable(false)
.subscribe(block -> {
System.out.println(
"Sweet, block number " +
block.getBlock().getNumber() +
" has just been created");
}, Throwable::printStackTrace);
TimeUnit.MINUTES.sleep(2);
subscription.unsubscribe();
Ethereum Smart Contracts
• Usually written in Solidity
• Statically typed high level language
• Compiled to Ethereum Virtual Machine (EVM) byte
code
• Create Java wrappers with web3j
Greeter.sol
contract mortal {
address owner;
function mortal() { owner = msg.sender; }
function kill() { if (msg.sender == owner) suicide(owner); }
}
contract greeter is mortal {
string greeting;
// constructor
function greeter(string _greeting) public {
greeting = _greeting;
}
// getter
function greet() constant returns (string) {
return greeting;
}
}
Smart Contract Wrappers
• Compile
$ solc Greeter.sol --bin --abi --
optimize -o build/
• Generate wrappers
$ web3j solidity generate build/
greeter.bin build/greeter.abi -p
org.web3j.example.generated -o src/main/
java/
Greeter.java
public final class Greeter extends Contract {

private static final String BINARY = “6060604052604....";

...



public Future<Utf8String> greet() {

Function function = new Function<Utf8String>("greet", 

Arrays.<Type>asList(), 

Arrays.<TypeReference<Utf8String>>asList(new
TypeReference<Utf8String>() {}));

return executeCallSingleValueReturnAsync(function);

}



public static Future<Greeter> deploy(Web3j web3j, Credentials
credentials, BigInteger gasPrice, BigInteger gasLimit, BigInteger
initialValue, Utf8String _greeting) {

String encodedConstructor =
FunctionEncoder.encodeConstructor(Arrays.<Type>asList(_greeting));

return deployAsync(Greeter.class, web3j, credentials,
gasPrice, gasLimit, BINARY, encodedConstructor, initialValue);

}
...
Hello Blockchain World!
Web3j web3 = Web3j.build(new HttpService());
Credentials credentials =
WalletUtils.loadCredentials(
"my password",
"/path/to/walletfile");
Greeter contract = Greeter.deploy(
web3, credentials, BigInteger.ZERO,
new Utf8String("Hello blockchain world!"))
.get();
Utf8String greeting = contract.greet().get();
System.out.println(greeting.getTypeAsString());
Hello blockchain world!
Smarter Contracts
Smarter Contracts
• Asset tokenisation
• Hold Ether
• EIP-20 smart contract token standard
• See web3j examples
Building Java and Android apps on the blockchain
Projects
• web3j-core
• web3j-android
• web3j Spring Boot Starter
• web3j-quorum
• JP Morgan’s private blockchain technology
web3j + Ethereum
• web3j simplifies working with Ethereum
• Plenty of documentation
• Smart contract integration tests
Further Information
• Project home https://web3j.io
• Mining http://docs.web3j.io/
transactions.html#obtaining-ether
• Useful resources http://docs.web3j.io/links.html
• Chat https://gitter.im/web3j/web3j
• Blog http://conorsvensson.com/
Join us
Ad

More Related Content

Similar to Building Java and Android apps on the blockchain (20)

Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)
wonyong hwang
 
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereumDappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Tomoaki Sato
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSockets
Gonzalo Ayuso
 
Java and the blockchain - introducing web3j
Java and the blockchain - introducing web3jJava and the blockchain - introducing web3j
Java and the blockchain - introducing web3j
Conor Svensson
 
Concept of BlockChain & Decentralized Application
Concept of BlockChain & Decentralized ApplicationConcept of BlockChain & Decentralized Application
Concept of BlockChain & Decentralized Application
Seiji Takahashi
 
Speed up your Web applications with HTML5 WebSockets
Speed up your Web applications with HTML5 WebSocketsSpeed up your Web applications with HTML5 WebSockets
Speed up your Web applications with HTML5 WebSockets
Yakov Fain
 
sbt-ethereum: a terminal for the world computer
sbt-ethereum: a terminal for the world computersbt-ethereum: a terminal for the world computer
sbt-ethereum: a terminal for the world computer
Steve Waldman
 
Blockchain Workshop - Software Freedom Day 2017
Blockchain Workshop - Software Freedom Day 2017Blockchain Workshop - Software Freedom Day 2017
Blockchain Workshop - Software Freedom Day 2017
Zied GUESMI
 
Programming smart contracts in solidity
Programming smart contracts in solidityProgramming smart contracts in solidity
Programming smart contracts in solidity
Emanuel Mota
 
NET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptxNET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptx
petabridge
 
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
병완 임
 
Go 1.8 'new' networking features
Go 1.8 'new' networking featuresGo 1.8 'new' networking features
Go 1.8 'new' networking features
strikr .
 
Going real time with Socket.io
Going real time with Socket.ioGoing real time with Socket.io
Going real time with Socket.io
Arnout Kazemier
 
Server Side Swift: Vapor
Server Side Swift: VaporServer Side Swift: Vapor
Server Side Swift: Vapor
Paweł Kowalczuk
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwr
deimos
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
Tom Croucher
 
How to Create AltCoin(Alternative Cryptocurrency)?
How to Create AltCoin(Alternative Cryptocurrency)?How to Create AltCoin(Alternative Cryptocurrency)?
How to Create AltCoin(Alternative Cryptocurrency)?
Abdullah Khan Zehady
 
Build your own private blockchain based on ethereum
Build your own private blockchain based on ethereumBuild your own private blockchain based on ethereum
Build your own private blockchain based on ethereum
Mehran Pourvahab
 
Geth important commands
Geth important commandsGeth important commands
Geth important commands
NexThoughts Technologies
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js Applications
Ohad Kravchick
 
Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)
wonyong hwang
 
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereumDappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Dappsmedia smartcontract _write_smartcontracts_on_console_ethereum
Tomoaki Sato
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSockets
Gonzalo Ayuso
 
Java and the blockchain - introducing web3j
Java and the blockchain - introducing web3jJava and the blockchain - introducing web3j
Java and the blockchain - introducing web3j
Conor Svensson
 
Concept of BlockChain & Decentralized Application
Concept of BlockChain & Decentralized ApplicationConcept of BlockChain & Decentralized Application
Concept of BlockChain & Decentralized Application
Seiji Takahashi
 
Speed up your Web applications with HTML5 WebSockets
Speed up your Web applications with HTML5 WebSocketsSpeed up your Web applications with HTML5 WebSockets
Speed up your Web applications with HTML5 WebSockets
Yakov Fain
 
sbt-ethereum: a terminal for the world computer
sbt-ethereum: a terminal for the world computersbt-ethereum: a terminal for the world computer
sbt-ethereum: a terminal for the world computer
Steve Waldman
 
Blockchain Workshop - Software Freedom Day 2017
Blockchain Workshop - Software Freedom Day 2017Blockchain Workshop - Software Freedom Day 2017
Blockchain Workshop - Software Freedom Day 2017
Zied GUESMI
 
Programming smart contracts in solidity
Programming smart contracts in solidityProgramming smart contracts in solidity
Programming smart contracts in solidity
Emanuel Mota
 
NET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptxNET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptx
petabridge
 
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
BlockchainDay "Ethereum Dapp - Asset Exchange YOSEMITE alpha" Session
병완 임
 
Go 1.8 'new' networking features
Go 1.8 'new' networking featuresGo 1.8 'new' networking features
Go 1.8 'new' networking features
strikr .
 
Going real time with Socket.io
Going real time with Socket.ioGoing real time with Socket.io
Going real time with Socket.io
Arnout Kazemier
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwr
deimos
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
Tom Croucher
 
How to Create AltCoin(Alternative Cryptocurrency)?
How to Create AltCoin(Alternative Cryptocurrency)?How to Create AltCoin(Alternative Cryptocurrency)?
How to Create AltCoin(Alternative Cryptocurrency)?
Abdullah Khan Zehady
 
Build your own private blockchain based on ethereum
Build your own private blockchain based on ethereumBuild your own private blockchain based on ethereum
Build your own private blockchain based on ethereum
Mehran Pourvahab
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js Applications
Ohad Kravchick
 

More from Conor Svensson (7)

Blockchain - Navigating this Game-Changing Technology
Blockchain - Navigating this Game-Changing TechnologyBlockchain - Navigating this Game-Changing Technology
Blockchain - Navigating this Game-Changing Technology
Conor Svensson
 
web3j 1.0 update
web3j 1.0 updateweb3j 1.0 update
web3j 1.0 update
Conor Svensson
 
web3j overview
web3j overviewweb3j overview
web3j overview
Conor Svensson
 
Cloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring CloudCloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring Cloud
Conor Svensson
 
Ether Mining 101
Ether Mining 101Ether Mining 101
Ether Mining 101
Conor Svensson
 
Cloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring CloudCloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring Cloud
Conor Svensson
 
Java Microservices with Netflix OSS & Spring
Java Microservices with Netflix OSS & Spring Java Microservices with Netflix OSS & Spring
Java Microservices with Netflix OSS & Spring
Conor Svensson
 
Blockchain - Navigating this Game-Changing Technology
Blockchain - Navigating this Game-Changing TechnologyBlockchain - Navigating this Game-Changing Technology
Blockchain - Navigating this Game-Changing Technology
Conor Svensson
 
Cloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring CloudCloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring Cloud
Conor Svensson
 
Cloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring CloudCloud Native Microservices with Spring Cloud
Cloud Native Microservices with Spring Cloud
Conor Svensson
 
Java Microservices with Netflix OSS & Spring
Java Microservices with Netflix OSS & Spring Java Microservices with Netflix OSS & Spring
Java Microservices with Netflix OSS & Spring
Conor Svensson
 
Ad

Recently uploaded (20)

Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Raffi Khatchadourian
 
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Raffi Khatchadourian
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptxReimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
John Moore
 
Financial Services Technology Summit 2025
Financial Services Technology Summit 2025Financial Services Technology Summit 2025
Financial Services Technology Summit 2025
Ray Bugg
 
Play It Safe: Manage Security Risks - Google Certificate
Play It Safe: Manage Security Risks - Google CertificatePlay It Safe: Manage Security Risks - Google Certificate
Play It Safe: Manage Security Risks - Google Certificate
VICTOR MAESTRE RAMIREZ
 
UiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer OpportunitiesUiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer Opportunities
DianaGray10
 
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
BookNet Canada
 
Transcript: Canadian book publishing: Insights from the latest salary survey ...
Transcript: Canadian book publishing: Insights from the latest salary survey ...Transcript: Canadian book publishing: Insights from the latest salary survey ...
Transcript: Canadian book publishing: Insights from the latest salary survey ...
BookNet Canada
 
TrsLabs - AI Agents for All - Chatbots to Multi-Agents Systems
TrsLabs - AI Agents for All - Chatbots to Multi-Agents SystemsTrsLabs - AI Agents for All - Chatbots to Multi-Agents Systems
TrsLabs - AI Agents for All - Chatbots to Multi-Agents Systems
Trs Labs
 
The Future of Cisco Cloud Security: Innovations and AI Integration
The Future of Cisco Cloud Security: Innovations and AI IntegrationThe Future of Cisco Cloud Security: Innovations and AI Integration
The Future of Cisco Cloud Security: Innovations and AI Integration
Re-solution Data Ltd
 
Unlocking Generative AI in your Web Apps
Unlocking Generative AI in your Web AppsUnlocking Generative AI in your Web Apps
Unlocking Generative AI in your Web Apps
Maximiliano Firtman
 
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
James Anderson
 
The Changing Compliance Landscape in 2025.pdf
The Changing Compliance Landscape in 2025.pdfThe Changing Compliance Landscape in 2025.pdf
The Changing Compliance Landscape in 2025.pdf
Precisely
 
Bepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firmBepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firm
Benard76
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
UiPath Automation Suite – Cas d'usage d'une NGO internationale basée à Genève
UiPath Automation Suite – Cas d'usage d'une NGO internationale basée à GenèveUiPath Automation Suite – Cas d'usage d'une NGO internationale basée à Genève
UiPath Automation Suite – Cas d'usage d'une NGO internationale basée à Genève
UiPathCommunity
 
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
SOFTTECHHUB
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Hybridize Functions: A Tool for Automatically Refactoring Imperative Deep Lea...
Raffi Khatchadourian
 
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Raffi Khatchadourian
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptxReimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
John Moore
 
Financial Services Technology Summit 2025
Financial Services Technology Summit 2025Financial Services Technology Summit 2025
Financial Services Technology Summit 2025
Ray Bugg
 
Play It Safe: Manage Security Risks - Google Certificate
Play It Safe: Manage Security Risks - Google CertificatePlay It Safe: Manage Security Risks - Google Certificate
Play It Safe: Manage Security Risks - Google Certificate
VICTOR MAESTRE RAMIREZ
 
UiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer OpportunitiesUiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer Opportunities
DianaGray10
 
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
BookNet Canada
 
Transcript: Canadian book publishing: Insights from the latest salary survey ...
Transcript: Canadian book publishing: Insights from the latest salary survey ...Transcript: Canadian book publishing: Insights from the latest salary survey ...
Transcript: Canadian book publishing: Insights from the latest salary survey ...
BookNet Canada
 
TrsLabs - AI Agents for All - Chatbots to Multi-Agents Systems
TrsLabs - AI Agents for All - Chatbots to Multi-Agents SystemsTrsLabs - AI Agents for All - Chatbots to Multi-Agents Systems
TrsLabs - AI Agents for All - Chatbots to Multi-Agents Systems
Trs Labs
 
The Future of Cisco Cloud Security: Innovations and AI Integration
The Future of Cisco Cloud Security: Innovations and AI IntegrationThe Future of Cisco Cloud Security: Innovations and AI Integration
The Future of Cisco Cloud Security: Innovations and AI Integration
Re-solution Data Ltd
 
Unlocking Generative AI in your Web Apps
Unlocking Generative AI in your Web AppsUnlocking Generative AI in your Web Apps
Unlocking Generative AI in your Web Apps
Maximiliano Firtman
 
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
James Anderson
 
The Changing Compliance Landscape in 2025.pdf
The Changing Compliance Landscape in 2025.pdfThe Changing Compliance Landscape in 2025.pdf
The Changing Compliance Landscape in 2025.pdf
Precisely
 
Bepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firmBepents tech services - a premier cybersecurity consulting firm
Bepents tech services - a premier cybersecurity consulting firm
Benard76
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
UiPath Automation Suite – Cas d'usage d'une NGO internationale basée à Genève
UiPath Automation Suite – Cas d'usage d'une NGO internationale basée à GenèveUiPath Automation Suite – Cas d'usage d'une NGO internationale basée à Genève
UiPath Automation Suite – Cas d'usage d'une NGO internationale basée à Genève
UiPathCommunity
 
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
SOFTTECHHUB
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Ad

Building Java and Android apps on the blockchain

  • 1. Java and the Blockchain Blockchain apps with web3j @conors10
  • 6. Ethereum • The world computer • Turing-complete virtual machine • Public blockchain (mainnet & testnet)
  • 7. Ether • The fuel of the Ethereum blockchain • Pay miners to process transactions • Market capitalisation ~$4.5bn USD (Bitcoin ~$20bn) • Associated with an address + wallet file 0x19e03255f667bdfd50a32722df860b1eeaf4d635
  • 8. 1 Ether = $42.80 USD
  • 9. Obtaining Ether • Buy it • Find someone • Coinbase • BTC Markets • Mine it • mainnet => requires dedicated GPUs • testnet => quick using your CPU • Refer to Geth/Parity mining docs
  • 10. Smart Contracts • Computerised contract • Code + data that lives on the blockchain at an address • Transactions call functions => state transition
  • 11. Transactions • Transfer Ether • Deploy a smart contract • Call a smart contract
  • 14. web3j • Complete Ethereum JSON-RPC implementation • Sync/async & RX Observable API • Ethereum wallet support • Smart contract wrappers • Command line tools • Android compatible
  • 15. web3j artefacts • Maven’s Nexus & Bintray's JFrog repositories • Java 8: org.web3j:core • Android: org.web3j:core-android • web3j releases page: • Command line tools: web3j-<version>.zip • Homebrew: • brew tap web3j/web3j && brew install web3j
  • 17. Getting started with Ethereum Free cloud clients @ https://infura.io/ Run a local client (to generate Ether): $ geth --rpcapi personal,db,eth,net,web3 --rpc --testnet $ parity --chain testnet
  • 18. Create a wallet $ web3j wallet create _ _____ _ _ | | |____ (_) (_) __ _____| |__ / /_ _ ___ / / / _ '_ | | | / _ V V / __/ |_) |.___/ / | _ | || (_) | _/_/ ___|_.__/ ____/| |(_)|_| ___/ _/ | |__/ Please enter a wallet file password: Please re-enter the password: Please enter a destination directory location [/Users/Conor/ Library/Ethereum/testnet/keystore]: ~/testnet-keystore Wallet file UTC--2016-11-10T22-52-35.722000000Z-- a929d0fe936c719c4e4d1194ae64e415c7e9e8fe.json successfully created in: /Users/Conor/testnet-keystore
  • 21. Using web3j • Create client Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ • Call method web3.<method name>([param1, …, paramN). [send()|sendAsync()|observable()]
  • 22. Display client version Web3j web3 = Web3j.build(new HttpService()); Web3ClientVersion clientVersion = web3.web3ClientVersion() .sendAsync().get(); System.out.println(“Client version: “ + clientVersion.getWeb3ClientVersion()); Client version: Geth/v1.4.18-stable-c72f5459/ darwin/go1.7.3
  • 23. Sending Ether Web3j web3 = Web3j.build(new HttpService()); Credentials credentials = WalletUtils.loadCredentials( "password", "/path/to/walletfile"); TransactionReceipt transactionReceipt = Transfer.sendFundsAsync( web3, credentials, “0x<to address>", BigDecimal.valueOf(0.2), Convert.Unit.ETHER).get(); System.out.println(“Funds transfer completed…” + …); Funds transfer completed, transaction hash: 0x16e41aa9d97d1c3374a4cb9599febdb24d4d5648b607c99e01a8 e79e3eab2c34, block number: 1840479
  • 26. web3j + RxJava • Reactive-functional API • Observables for all Ethereum client methods Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ web3j.web3ClientVersion().observable().subscribe( x -> { System.out.println(x.getWeb3ClientVersion()); });
  • 27. Processing all new blocks Web3j web3 = Web3j.build(new HttpService()); Subscription subscription = web3j.blockObservable(false) .subscribe(block -> { System.out.println( "Sweet, block number " + block.getBlock().getNumber() + " has just been created"); }, Throwable::printStackTrace); TimeUnit.MINUTES.sleep(2); subscription.unsubscribe();
  • 28. Ethereum Smart Contracts • Usually written in Solidity • Statically typed high level language • Compiled to Ethereum Virtual Machine (EVM) byte code • Create Java wrappers with web3j
  • 29. Greeter.sol contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) suicide(owner); } } contract greeter is mortal { string greeting; // constructor function greeter(string _greeting) public { greeting = _greeting; } // getter function greet() constant returns (string) { return greeting; } }
  • 30. Smart Contract Wrappers • Compile $ solc Greeter.sol --bin --abi -- optimize -o build/ • Generate wrappers $ web3j solidity generate build/ greeter.bin build/greeter.abi -p org.web3j.example.generated -o src/main/ java/
  • 31. Greeter.java public final class Greeter extends Contract {
 private static final String BINARY = “6060604052604....";
 ...
 
 public Future<Utf8String> greet() {
 Function function = new Function<Utf8String>("greet", 
 Arrays.<Type>asList(), 
 Arrays.<TypeReference<Utf8String>>asList(new TypeReference<Utf8String>() {}));
 return executeCallSingleValueReturnAsync(function);
 }
 
 public static Future<Greeter> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, BigInteger initialValue, Utf8String _greeting) {
 String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(_greeting));
 return deployAsync(Greeter.class, web3j, credentials, gasPrice, gasLimit, BINARY, encodedConstructor, initialValue);
 } ...
  • 32. Hello Blockchain World! Web3j web3 = Web3j.build(new HttpService()); Credentials credentials = WalletUtils.loadCredentials( "my password", "/path/to/walletfile"); Greeter contract = Greeter.deploy( web3, credentials, BigInteger.ZERO, new Utf8String("Hello blockchain world!")) .get(); Utf8String greeting = contract.greet().get(); System.out.println(greeting.getTypeAsString()); Hello blockchain world!
  • 34. Smarter Contracts • Asset tokenisation • Hold Ether • EIP-20 smart contract token standard • See web3j examples
  • 36. Projects • web3j-core • web3j-android • web3j Spring Boot Starter • web3j-quorum • JP Morgan’s private blockchain technology
  • 37. web3j + Ethereum • web3j simplifies working with Ethereum • Plenty of documentation • Smart contract integration tests
  • 38. Further Information • Project home https://web3j.io • Mining http://docs.web3j.io/ transactions.html#obtaining-ether • Useful resources http://docs.web3j.io/links.html • Chat https://gitter.im/web3j/web3j • Blog http://conorsvensson.com/