一、以太坊核心机制
- 目标
掌握Dapp编程的基本思路
能够掌握编写基本的以太坊Dapp
可以看懂复杂的合约
- 技术栈
VUE
NODE
RN组合
移动端前后端技术
- 大纲
以太坊简介
以太坊编程环境构建
js/nodejs简介:语言与服务设计基础
solidity编程:智能合约实现
web3.js编程:智能合约调用
流行例子:数字通证系统设计
经典例子:投票系统
- 以太坊:区块链2.0
内置图灵完备编程语言的区块链
人人都可以创建合约和区中心化应用
以太坊虚拟机(EVM)运行智能合约
- 区块链的未来
交易速度快 DAG?
大多无手续费,无需挖矿
支持更复杂、更高效的智能合约
- 以太坊简史
2013年底,Vitalik Buterin发布以太坊初版白皮书
2014年4月:Gavin Wood发布以太坊虚拟机技术黄皮书
2015年7月:发布正式以太坊网络
- 以太坊技术发展阶段 -2015-07 挖矿和交易,测试DAPP -2016-03 图形化钱包增强易用性 -2017-10 硬分叉 -2018- 增强性能Pow到POS
- 以太坊典型应用:迷恋猫
- 以太坊典型应用:互联网广告
- 以太坊网络 -Mainnet ,以太坊主网 -Ropsten, 以太坊主测试网络 -Kovan,parity客户端组成的测试网络,使用授权证明 -Rinkeby,geth 客户端组成的测试网络,使用集成共识
- 区块链网络典型结构
应用层
合约层
激励层
共识层
网络层
数据层
- 以太坊技术框架
- 核心概念
点对点网络:所有节点都地位平等,没有中心服务器
区块链:去中心存储数据库
EVM:虚拟机,运行程序
Dapp:智能合约的应用
- 基本概念
以太币/Eether
GAS,以太坊里对所有活动进行消耗资源计量的单位。读取免费,写入收费
矿工/miner:挖矿,构建基础设施
共识算法
POW : proof of work , 工作证明
POS:proff of stake,股权证明
DPOS : delegated proof of stake 委任权益证明
PBFT:Practical Byzantine Fault Tolerance.实用拜占庭容错算法
去中心化的挑战
如何保证所有节点状态都同步
如何保证所有交易都广播到所有节点
如何防止恶意篡改
Dapp 及以太坊虚拟机
什么是Dapp
Decentralized Application 的特征
运行在对等网络上
参与者信息被安全存储,隐私保护
通过网络节点去中性化操作
C/S应用与Dapp
浏览器->html/css/js->rest api-> java service / db/cache
Dapp浏览器->html/css/js->Web3.js->Webserver/node ->block1...blockN...
去中心化应用的优点
容错性好
防止单一机构的干扰
用户更容易相信该应用
去中心化应用的缺点
更新困难(所有节点都需更新)
用户身份认证较为困难(匿名性,密码找回是不可能的)
程序扩充困难(一旦上链后程序难改变?为什么)
Dapp之间协作仍然比较困难
智能合约
智能合约:一段写在区块链上的代码
构建:区块链内的多个用户共同参与制定
存储:通过p2p网络扩散到每个节点,并存入区块链
执行:将满足条件的事务进行验证,达成共识后自动执行并通知用户
以太坊合约部署
developed by solidity -> Smart contract ->compiled - > Ethereum byte codes ->Deployed -> Ethereum Vritual Machine
Dapp开发框架
Truffle:代码- 编译 - 部署 - 测试 - 打包
Slidity:智能合约编程语言
Web3.js:智能合约调用(调用智能合约的接口)
用户->Web UI - >Web3.js->Dapps client - >p2p网络
dapp 开发和部署均在一个节点,然后由这个节点和其他节点进行交互
以太坊EVM
以太坊是一套可以实现分布式应用的平台协议。它的核心是可以执行任意复杂算法的以太坊虚拟机(EVM)
网络上的每一个节点都运行着EVM并执行相同的指令。因这个原因,以太坊经常被描述“世界电脑”。
EVM 设计目标
简单性
确定性
节省空间的bytecode
专为区块链设计
更加简单的安全性保证
容易优化
EVM 的一些特点
EVM是一个256位的机器
持久存储是相当昂贵的
Solidity编译器会为了减少gas 的使用而做出相应的优化选择
EVM 的不足
标准库较少
调试和测试相对困难
暂时不支持浮点数
代码无法升级
以太坊的发展趋势和相关资料
以太坊的问题
性能较差,公链TPS<20
区块链难以存储“大数据”
“智能合约”难以实现负责的算法(浮点数暂不支持)
一些可能的解决方案
闪电网络,状态通道,不改变公式算法,小改进
coco blockchain framework 等改变共识算法,基本达到商用水平
多种区块链混合。典型的如Akasha等区块链媒体,IPFS存储文章数据+区块链存关键属性、执行合约
相关网络资料
http://solidity-cn.readthedocs.io/zh/develop
典型代码
truffle box
openzeppelin
迷恋猫合约
相关书籍推荐 -Mastering Ethereum
https://github.com/ethreumbook/ethereumbook
《区块链项目开发指南》
《以太坊技术详解与实战》
http://solidity-cn.readthedocs.io/zh/develop/
https://web3j.readthedocs.io/en/latest/
以太坊编程环境介绍
以太坊编程涉及语言
Solidity:类javascript,合约语言
web3.js javascript,合约调用
React等,js框架,用户交互,WebUI等
Nodejs:js 框架,后台逻辑
js/html ,基础语言
各类以太网络
Mainnet,以太坊主网
Ropsten,以太坊主测试网络
Ganache/testrp,自建测试节点
Geth客户端自建私有链或联盟连
基本变成测试环境要求
标准Mac/windows环境即可
内存4G以上
操作系统管理员权限
Npm/nodejs环境
随同NodeJs一起安装的包管理工具
安装nodejs即可,会同时安装npm
允许从NPM服务器下载别人变形的第三方包到本地使用
Truffle环境
truffle是solidity语言的开发框架
sudo npm install -g gruffle
truffle init
truffle compile
truffle deploy
truffle test
truffle console
编辑器IDE
Visual studio code
Remix
Atom solium linter
SublimeText
window shell 运行环境
GigBASH使用 npm环境
该环境操作与mac\linux下基本一直
git
gitbash
nodejs
npm -v
node -v
Ganache环境安装调试
npm install -g ganache-cli
启动调试:ganach-cli
Truffle 安装调试
安装:npm install - g truffle
调试:truffle init
WEB服务介绍
Dapp UI层:web服务基础知识
WebBrowser->html/css/javascript->Web3.js->Nginx Webserver->RPC->EVM-Ethereum Virtual Machine(block1..block2..blockn)
trffle dapp 框架基于nodejs