美文网首页
以太坊Solidity智能合约编程- 开篇

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

作者: 水瓶座男生 | 来源:发表于2018-05-07 19:42 被阅读185次

    一、以太坊核心机制

    - 目标

    掌握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智能合约编程- 开篇

          本文链接:https://www.haomeiwen.com/subject/gwsucftx.html