Blockchain in action
Blockchain in Action teaches you how to design and build blockchain-based decentralized apps, and is written in a clear, jargon-free style. First, you'll get an overview of how blockchain works. Next, you'll code your first smart contract using Ethereum and Solidity, adding a web interface...
Otros Autores: | |
---|---|
Formato: | Libro electrónico |
Idioma: | Inglés |
Publicado: |
Shelter Island, New York :
Manning Publications
[2020]
|
Edición: | 1st edition |
Materias: | |
Ver en Biblioteca Universitat Ramon Llull: | https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009631168306719 |
Tabla de Contenidos:
- Intro
- Blockchain in Action
- Copyright
- dedication
- brief contents
- contents
- front matter
- Preface
- Acknowledgments
- About this book
- Who should read this book
- How this book is organized: A roadmap
- About the code
- liveBook discussion forum
- Other online resources
- About the author
- About the cover illustration
- Part 1. Getting started with blockchain programming
- 1 Blockchain basics
- 1.1 From Bitcoin to blockchain
- 1.2 What is a blockchain?
- 1.3 Blockchain programming
- 1.3.1 Decentralized infrastructure
- 1.3.2 Distributed ledger technology
- 1.3.3 Disintermediation protocol
- 1.3.4 Trust enabler
- 1.4 Motivating scenarios
- 1.4.1 Automatic and consistent data collection
- 1.4.2 Timely information sharing
- 1.4.3 Verifiable compliance
- 1.4.4 Auditable actions for provenance
- 1.4.5 Guidance for governance
- 1.4.6 Attribution of actions
- 1.4.7 Pandemic management
- 1.5 Retrospective
- 1.6 Summary
- 2 Smart contracts
- 2.1 The concept of a smart contract
- 2.1.1 Bitcoin transactions versus smart contract transactions
- 2.1.2 What does a smart contract do?
- 2.2 Design of a smart contract
- 2.2.1 A use case diagram for the counter
- 2.2.2 Data assets, peer participants, roles, rules, and transactions
- 2.2.3 From class diagram to contract diagram
- 2.3 Development of a smart contract code
- 2.3.1 Solidity language
- 2.3.2 Smart contract code for Counter
- 2.4 Deploying and testing the smart contract
- 2.4.1 The Remix IDE
- 2.4.2 Deployment and testing
- 2.4.3 Key takeaways
- 2.5 What makes a blockchain contract smart?
- 2.6 Decentralized airline system use case
- 2.6.1 ASK definition
- 2.6.2 Sequence of operations
- 2.7 Airlines smart contract
- 2.7.1 Peer participants, data assets, roles, rules, and transactions
- 2.7.2 Airlines smart contract code.
- 2.7.3 ASK smart contract deployment and testing
- 2.8 Smart contract design considerations
- 2.9 Best practices
- 2.10 Summary
- 3 Techniques for trust and integrity
- 3.1 Essentials of trust and integrity
- 3.1.1 Trust
- 3.1.2 Integrity
- 3.2 Digital democracy problem
- 3.2.1 Designing a solution
- 3.2.2 Use case diagram
- 3.2.3 Incremental development of code
- 3.2.4 Users, assets, and transactions
- 3.2.5 Finite state machine diagram
- 3.2.6 Trust intermediation
- 3.2.7 Defining and using modifiers
- 3.2.8 Contract diagram including modifiers
- 3.2.9 Putting it all together
- 3.3 Testing
- 3.3.1 Positive tests
- 3.3.2 Negative tests
- 3.4 Using modifiers, require(), and revert()
- 3.5 Assert() declarations
- 3.6 Best practices
- 3.7 Retrospective
- 3.8 Summary
- 4 From smart contracts to Dapps
- 4.1 Dapp development using Truffle
- 4.1.1 The development process
- 4.1.2 Installing Truffle
- 4.1.3 Building the Dapp stack
- 4.2 Install Ganache test chain
- 4.3 Develop the smart contract
- 4.3.1 Create a project folder
- 4.3.2 Add smart contract and compile
- 4.3.3 Configure blockchain network
- 4.3.4 Deploy the smart contract
- 4.4 Develop and configure the web application
- 4.4.1 Develop ballot-app
- 4.4.2 Launch the ballot-app
- 4.4.3 Install MetaMask wallet
- 4.4.4 Interact with Ballot-Dapp
- 4.4.5 Connect web client to smart contract
- 4.5 Retrospective
- 4.6 Best practices
- 4.7 Summary
- Part 2. Techniques for end-to-end Dapp development
- 5 Security and privacy
- 5.1 Cryptography basics
- 5.1.1 Symmetric key cryptography
- 5.1.2 Asymmetric key cryptography
- 5.2 The relevance of public-key cryptography to blockchain
- 5.2.1 Generating Ethereum addresses
- 5.2.2 Transaction signing
- 5.2.3 Deploying smart contracts on Ropsten
- 5.2.4 Using the private key in mnemonic form.
- 5.2.5 Populating a blockchain wallet
- 5.2.6 Deploying and transacting on Ropsten
- 5.3 Hashing basics
- 5.3.1 Digital signing of documents
- 5.3.2 Hashed data on distributed ledger
- 5.3.3 Hashes in Ethereum block header
- 5.3.4 Solidity hashing functions
- 5.4 Application of hashing
- 5.4.1 Blind auction design
- 5.4.2 Blind auction smart contract
- 5.4.3 Privacy and security aspects
- 5.4.4 Testing the BlindAuction contract
- 5.4.5 Test plan
- 5.5 Retrospective
- 5.6 Best practices
- 5.7 Summary
- 6 On-chain and off-chain data
- 6.1 On-chain data
- 6.2 Blind auction use case
- 6.2.1 On-chain event data
- 6.2.2 Blind auction with events
- 6.2.3 Testing with the web UI
- 6.2.4 Accessing on-chain data using the web3 API
- 6.3 Off-chain data: External data sources
- 6.4 ASK airline system
- 6.4.1 ASK concept
- 6.4.2 Airlines smart contract
- 6.4.3 ASK on-chain data
- 6.4.4 ASK off-chain data
- 6.4.5 ASK Dapp development process
- 6.4.6 ASK web user interface
- 6.4.7 Putting it all together
- 6.4.8 Interacting with ASK Dapp
- 6.5 Retrospective
- 6.6 Best practices
- 6.7 Summary
- 7 Web3 and a channel Dapp
- 7.1 Web3 API
- 7.1.1 Web3 in Dapp stack
- 7.1.2 Web3 packages
- 7.2 The channel concept
- 7.3 Micropayment channel
- 7.4 Micropayment channel use case
- 7.4.1 Traditional banking solution
- 7.4.2 Users and roles
- 7.4.3 On-chain and off-chain operations
- 7.4.4 MPC smart contract (MPC-contract)
- 7.4.5 MPC application development (MPC-app)
- 7.4.6 MPC sequence diagram
- 7.4.7 Demonstration of MPC execution
- 7.4.8 Accessing the web3 provider
- 7.4.9 Extensions of MPC
- 7.4.10 The relevance of the micropayment channel
- 7.4.11 Other web3 packages of interest
- 7.5 Retrospective
- 7.6 Best practices
- 7.7 Summary
- 8 Going public with Infura
- 8.1 Nodes and networks.
- 8.2 Infura blockchain infrastructure
- 8.3 Going public with Infura
- 8.3.1 Blockchain node as a service
- 8.4 End-to-end process for public deployment
- 8.4.1 Account generation and management
- 8.4.2 Choosing a network and importing accounts
- 8.4.3 Collecting ether from faucets
- 8.4.4 Creating blockchain nodes on Infura
- 8.4.5 Installing HDWalletProvider
- 8.4.6 Configuring and deploying the smart contract
- 8.4.7 Configuring and deploying the web application
- 8.5 Deploying BlindAuction-Dapp on Infura
- 8.5.1 Setting up the blind auction environment
- 8.5.2 Decentralized participants
- 8.5.3 Configure and deploy the beneficiary account
- 8.5.4 Configure and deploy bidders
- 8.5.5 Interact with deployed blind auction Dapp
- 8.6 Deploying MPC-Dapp on Infura
- 8.6.1 Setting up the MPC environment
- 8.6.2 Configure and deploy the organizer
- 8.6.3 Configure and deploy the worker
- 8.7 Retrospective
- 8.8 Best practices
- 8.9 Summary
- Part 3. A roadmap and the road ahead
- 9 Tokenization of assets
- 9.1 Ethereum standards
- 9.1.1 Ethereum improvement proposal
- 9.1.2 ERC20 token standard
- 9.1.3 Fungible and non-fungible tokens
- 9.2 RES4: Non-fungible real estate token
- 9.2.1 Use case diagram
- 9.2.2 Contract diagram
- 9.2.3 RES4 ERC721-compliant token
- 9.2.4 RES4 Dapp
- 9.2.5 Interaction with RES4 Dapp
- 9.3 Retrospective
- 9.4 Best practices
- 9.5 Summary
- 10 Testing smart contracts
- 10.1 Importance of testing smart contracts
- 10.1.1 Types of testing
- 10.1.2 Language choice for test programs
- 10.2 Testing counter smart contract
- 10.2.1 Writing counter test script
- 10.2.2 Positive and negative tests
- 10.2.3 Running the test script
- 10.3 Testing ballot smart contract
- 10.3.1 Writing the ballot test script
- 10.3.2 Executing the ballot test script.
- 10.3.3 Describe() and it() test functions
- 10.4 Recap writing of test script
- 10.5 The blind auction test script
- 10.5.1 Analysis of describe() and it() code
- 10.5.2 Executing the blind auction test script
- 10.5.3 Full auction run
- 10.6 Retrospective
- 10.7 Best practices
- 10.8 Summary
- 11 A roadmap to Dapp development
- 11.1 Motivating scenario: Educational credentialing
- 11.2 The roadmap
- 11.3 Problem description
- 11.3.1 Context for the DCC application
- 11.3.2 Design choices
- 11.4 Analysis and design
- 11.4.1 Operation flow and finite state machine
- 11.4.2 Contract diagram
- 11.5 Developing the smart contract
- 11.5.1 Data structures
- 11.5.2 Events
- 11.5.3 Modifiers
- 11.5.4 Functions
- 11.6 Local deployment
- 11.7 Automated testing using truffle
- 11.8 Developing the web application
- 11.8.1 UI design
- 11.8.2 Coding the app.js
- 11.9 Testing the DCC-Dapp
- 11.10 Public deployment
- 11.10.1 Deployment on Ropsten-Infura
- 11.10.2 Create web-client for distribution
- 11.11 Retrospective
- 11.12 Best practices
- Summary
- 12 Blockchain: The road ahead
- 12.1 Decentralized identity
- 12.2 Self-managed identity
- 12.3 Consensus and integrity
- 12.3.1 Proof of work
- 12.3.2 Proof of stake
- 12.3.3 Byzantine fault-tolerant consensus
- 12.4 Scalability
- 12.5 Scalability solutions
- 12.5.1 Side channel
- 12.5.2 Block size
- 12.5.3 Network speed
- 12.6 Privacy
- 12.7 Public, private, and permissioned networks
- 12.8 Confidentiality
- 12.8.1 Open information
- 12.8.2 A solution
- 12.9 Security
- 12.10 Securing it with cryptocurrency
- 12.11 Accessing off-chain data (Oracles)
- 12.12 From foundations to practical systems
- 12.13 Looking ahead
- 12.14 Best practices
- 12.15 Retrospective
- 12.16 Summary
- appendix A. UML blockchain design models
- A.1 Problem analysis and design.
- A.2 Behavioral diagrams.