【区块链】以太坊学习基础

旧巷老猫 提交于 2019-12-28 05:41:05

以太坊基础

简介

  • 区块链是一种分布式流水账数据库;
  • 以太坊=区块链+以太坊虚拟机(EVM),其本质是一个状态机;
  • 以太坊的所有活动(状态变动)都是通过账户间发送交易来完成的;
  • 以太坊上的所有操作都是要消耗gas的,gas是要用以太币(Ether)买的;
  • 以太坊的生态系统出现端倪,DApp的雏形已经有了;
  • 阅读以太坊黄皮书是最佳的学习方法

以太坊入门学习指南

以太坊入门学习

以太坊DApp编程全流程

  • 基本测试环境
  • Truffle编程框架
  • Solidity智能合约编程语言
  • Web3js合约调用
  • js/node.js基础

以太坊学习主要内容

  • 以太坊简介
  • 以太坊编程环境构建
  • js/nodejs简介:语言与服务设计基础
  • solidity编程:智能合约实现
  • web3.js编程:智能合约调用
  • 案例一:数字通证系统设计
  • 案例二:投票系统

区块链典型系统结构

  • 应用层
  • 合约层
  • 激励层
  • 共识层
  • 网路层
  • 数据层

以太坊技术框架

以太坊技术框架

以太坊核心概念

  • 点对点网络:所有节点都地位平等,没有中心服务器
  • 区块链:去中心化存储数据库
  • EVM:虚拟机,运行程序
  • DApp:智能合约的应用
  • 以太币(Ether):以太坊世界中使用的数字货币
  • Gas:以太坊里对所有活动进行消耗资源计量的单位。读取免费,写入收费。
  • 矿工(Miner):挖矿,构建基础设施

什么是区块链?

在这里插入图片描述

共识算法有哪些?

  • POW:Proof of Work,工作证明
  • POS:Proof of Stake,股权证明
  • DPOS:Delegated Proof of Stake,委任权益证明
  • PBFT:Practical Byzantine Fault Tolerance,实用拜占庭容错算法

POW简介

  • 获得多少货币,取决于挖矿贡献的有效“工作”
  • “工作”为Block Hash计算,计算时间取决于机器的哈希运算速度
  • 当节点拥有占全网n%的算力时,该节点即有n/100的概率找到Black Hash

POS简介

  • 根据持有货币的量和时间,给你发利息的一种制度;
  • 发现了一个POS区块,币龄就会被清空为0,同时发放“利息”;
  • 一个账户的余额越多,在同等算力下,就越容易发现下一个区块;

DPOS简介

  • 在常规POW和POS中,主要影响效率之处在于任何一个新加入的Block,都需要被整个网络所有节点做确认
  • DPOS则通过不同的策略,不定时的选中一小群节点,这一小群节点做新区块的创建,验证,签名和相互监督,这样就大幅度的减少了区块创建和确认的时间和算力成本

去中心化面临的挑战

  • 如何保证所有节点状态都同步?
  • 如何保证所有交易都广播到所有节点?
  • 如何防止恶意篡改?

DApp及以太坊虚拟机(EVM)

CS应用与DApp的区别

在这里插入图片描述

去中心应用的优点

  • 容错性好
  • 防止单一机构的干扰
  • 用于更容易相信该应用

去中心应用的缺点

  • 更新困难
  • 用户身份认证较为困难
  • 程序扩充困难
  • DApp之间协作仍然比较困难

智能合约

  • 智能合约:一段写在区块链上的代码
  • 构建:区块链内的多个用户共同参与制定
  • 存储:通过P2P网络扩散到每个节点,并存入区块链
  • 执行:将满足条件的事务进行验证,达成共识后自动执行并通知用户

智能合约部署步骤

智能合约部署步骤

以太坊合约部署

以太坊合约部署

DApp开发框架

  • Truffle:代码->编译->部署->测试->打包
  • Solidity:智能合约编程语言
  • Web3.js:智能合约调用
    DApp开发框架

以太坊虚拟机(EVM)

  • 以太坊是一套可以实现分布式应用的平台协议。它的核心是可以执行任意复杂算法的以太坊虚拟机(EVM)
  • 网络上的每一个节点都运行着EVM并执行相同的指令。因这个原因,以太坊经常被描述为“世界电脑”。

EVM设计目标

  • 简单性(Simplicity)
  • 确定性(Determinism)
  • 节省空间的bytecode
  • 专为区块链设计
  • 更加简单的安全性保证
  • 容易优化

EVM的一些特点

  • EVM是一个256位的机器
  • 持久存储是相当昂贵的
  • Solidity编译器会为了减少gas的使用而做出相应的优化选择

EVM的不足

  • 标准库较少
  • 调试和测试相对困难
  • 暂时不支持浮点数
  • 代码无法升级

以太坊的问题

  • 性能较差,公链TPS<20
  • 区块链难以存储“大数据”
  • "智能合约"难以实现复杂的算法

一些可能的解决方案

  • 闪电网络,状态通道,不改变共识算法,这是一种小改进
  • Coco Blockchain Framework等,改变共识算法,基本达到商用水平,作为私链、联盟链是可以的
  • 多种区块链混合。典型如Akasha等区块链媒体,IPES存储文章数据+区块链存储关键属性、执行合约

相关网络资料

  • Solidity:https://solidity-cn.readthedocs.io/zh/develop/
  • Truffle:https://truffle.tryblockchain.org/
  • Web3.js:https://web3js.readthedocs.io/en/v1.2.4/
  • Remix:https://remix-ide.readthedocs.io/en/latest/

智能合约典型代码

  • Trufflex Box:http://truffleframework.com/boxes/
  • openzeppelin库:https://openzeppelin.org/
  • 迷恋猫合约:https://github.com/axiomzen/crytokitties-bounty

相关书籍

  • Mastering Ethereum: https://github/com/ethereumbook/ethereumbook
  • 《区块链项目开发指南》
  • 《以太坊技术详解与实战》
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!