以太坊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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342