以太坊Solidity智能合约编程- 开篇

一、以太坊核心机制

- 目标

掌握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/

http://truffleframework.com/

二、以太坊编程环境构建

以太坊编程环境介绍

以太坊编程涉及语言

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

你可能感兴趣的:(以太坊Solidity智能合约编程- 开篇)