区块链及以太坊入门介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011680118/article/details/82377965

一、区块链入门介绍

阮一峰写的挺好的:   http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html

区块链技术:是一个去中心化的数据库,是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。

狭义的说,区块链是按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改、不开伪造的分布式账本。

广义来说,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生产和更新数据、利用密码学方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。

技术特征:

  • 块链式数据结构:每个区块打包记录一段时间内发生的交易是对当前账本的一次共识,并且记录上一个区块的hash值进行关联。
  • 分布式共识算法:技术上杜绝非法篡改数据的可能性
  • 密码学方式:交易信息公开,账户信息加密

功能特征:

  • 多中心:多机构监督实时对账,提高数据安全性
  • 自动化:智能合约(可以自动化执行一些预先定义好的规则和条款的计算机程序)
  • 可信任:数据不可篡改且可溯源

基本概念:

  • Transaction交易:导致区块状态变化的操作,一次交易对应唯一的hash值
  • block区块:打包记录一段时间内的交易和状态结果,是对当前账本的一次共识
  • chain链:区块按照时间顺序串联,每个区块记录上一个区块的hash值关联,是整个状态改变的日志

分类:

  • 许可链:公有链
  • 非许可链:联盟链、私有链

演化:

  • 1.0 数字货币
  • 2.0 智能合约:以太坊,可以构建智能合约构建DAPP去中心化应用
  • 3.0 超越货币、经济和市场

分层架构:

  • 数据层:
    • 区块结构:区块头+区块体,可以用区块头hash值和区块高度(不唯一)识别区块
    • merkle树:每个叶子为交易两次SHA256后的hash值,是平衡二叉树,根为所有交易数据的标志
    • 非对称加密与数字签名
    • 时间戳
    • hash函数
  • 网络层
    • P2P网络:全节点(存储所有完整数据,实时参与校验和更新主链),轻节点(记录部分信息,利用建议支付验证SPV方式向相邻节点请求验证)
    • 传输机制:新区块生成后广播全网以验证
    • 验证机制:按照预定义的标准验证
  • 共识层
    • 在分布式系统中达成共识
    • 区块链用的工作量证明Proof of Work机制:消耗资源、达成共识周期长
    • 股权证明机制PoS:
    • 股份授权证明机制DPoS:多中心化
    • 实用拜占庭容错算法PBFT:实用
  • 激励层 经济因素
    • 发行机制
    • 分配机制
  • 合约层
    • 建立在区块链底层(虚拟机)上的商业逻辑和算法
    • 构建内置由图灵完备编程语言的公有区块链  图灵完备:一切可计算的问题可以通过计算解决
  • 应用层

另一种分层方式如下图所示:

交易流程如下图:

应用广泛,如下图所示:

二、以太坊简介

以太坊就是区块链技术+智能合约。

以太坊和区块链技术一样,有Transation,Block,账户与账户之间的关系需要用Transation来执行,任何Transation都需要有通过block来产生。

以太坊和比特币技术的不同:
A.是吸纳了基于solidity语言的智能合约,并将智能合约看做一种特殊的账户,从而使得在智能合约上也可以实现具体的方法。
B.实现了智能合约能落地执行的EVM(以太坊虚拟机),通过以太坊虚拟机,从而将solidity这样的类JS的代码变成了可以在区块链是执行的加密代码。
C.不同于比特币技术,在以太坊的transation都需要gas,一份合约或者一次交易的gas是固定的(取决于代码大小和复杂程度),而gas的价格则有以太坊中的oracle来决定。
D.以太坊同时还构建了较完整的,开源的生态系统,不仅有底层的geth,编程的solidity,合约在线浏览器browser-solidity,合约钱包Mist/wallet,以太坊的前端开发框架Truffle,各种各样的开源DApp。

    原文地址: Ethereum for web developers

    关于以太坊有很多的资源(文章、视频、官方文档),让人眼花缭乱。但是,其中许多都过时了,这是可以理解的,因为这个以太坊平台仍在迅速发展。我花了一些时间来拼凑出一个完整的画面: 什么是以太坊、它是怎么运行的。在Meetup和其他在线社区的开发者说,这感觉就像大家都想拥抱这项新技术但是遇到相同的困难。本文从Web开发者的角度来解释以太坊.

    如果你是一个web开发者, 那应该很清楚web应用其实是客户端-服务器的架构.

    你一般将你的Web应用托管在服务器上、像亚马逊云AWS、Heroku或VPS。所有客户端都与这一个中心应用程序交互。客户端可以是浏览器,或者其他与服务器交互的程序。当客户端向服务器发出请求时,服务器会执行相应处理,与数据库或缓存进行交互,读/写/更新数据库, 并为客户端服务。

    这种架构大部分时间都运行得很好。然而,对于某些应用,如果数据库能够被公开,每个人都安全地访问,将是非常有益的,不需要靠这个webapp访问数据。

    例如,让我们看看eBay。如果你是一个赢得了数百次好评的电商,或者出于某种原因,eBay暂停你的账户。那会很糟糕。如果可以让你的电商数据(接受的好评和评级)完全转移到另一个平台(比如淘宝)那是非常好的(但是目前是不可能的)。eBay提供的服务是买家和卖家之间信任的第三方。但是,他们也会在每次销售时收取佣金。如果有一种方法可以完全消除eBay在买卖双方之间的交易,这样你就可以节省佣金,而且你还可以访问自己所有的电商数据?这是去中心化应用程序进入我的画面的地方。以太坊它使Dapps(去中心化应用)很容易实现。

这是以太坊DAPP架构图:

    如果您注意到,每个客户端(浏览器)都与应用程序自身的实例进行通信。没有一个中心服务器让所有客户端去连接。这意味着,每一个想与DAPP(去中心化应用程序)交互的人,将需要在他们的电脑或者手机上运行一个完整的副本。也就是说在使用一个应用程序之前,您必须下载整个区块链然后才开始使用该应用程序。这听起来可能有点荒谬,但它的好处是不依赖于一个单一的中央服务器(说不准哪天服务器就不见了)。

在现实中,你不需要花费你很多的硬盘和内存下载整个blockchain。有几个方法优化保持应用去中心化斌并且使交互方便快捷。

讲到这里,那个就是区块链是什么呢?它包含:

        数据库:以太坊网络中每几个交易就会被记录在一个块中,块与块间有链接关系。这一些列持有交易数据的块组成了区块链。如果我们回到eBay的例子,买家和卖家之间的所有交易,无论是销售、退款或纠纷都会被记录在区块链上,每个人都可以看到。以太坊使用工作量证明算法(新版本已经不是工作量证明算法)来确保所有节点的数据一致性,确保没有无效的数据被记录.

        代码:数据库方面只存储数据。但在所有的逻辑(买、卖、退款等)在哪里呢?在以太坊平台上,你用Solidity写的应用程序代码称为合约。然后使用Solidity的编译器来编译它生成字节码然后将该字节码部署到区块链上。Solidity是迄今为止最流行的智能合约开发语言,少有替代者。

        所以基本上,区块链存储您的数据、代码,并且在以太坊虚拟机(EVM)中运行你的代码。
        构建基于Web的dapps,以太坊有一个方便的JavaScript库可以连接到区块链节点上,称为web3.js。所以只需在你数据的框架中如 reactjs,AngularJS导入这个库然后开始构建。

        另一个重要的特点是平台的金融能力。在你开始使用DAPP时,内部会给你分配一个账户,事实上,你在短时间内分配很多账户都没问题。这些银行账户被称为钱包,用来存贮数字资产和交易。

转载自:https://blog.csdn.net/yzj050322/article/details/79745996

三、以太坊基础

图灵完备的基础:以太坊虚拟机EVM,类似于JVM

基本概念:

  • 节点:进行区块链读写
  • 矿工:通过hash运算产生工作量的网络节点
  • 挖矿:发行以太币的途径
  • 账户:可以发送交易
    • 外部账户:公私钥对控制,地址由公钥决定
    • 合约账户:部署合约时确定,存储了代码,在收到合法交易后会执行合约代码
  • Gas:限制执行交易所需的工作量,为执行交易支付费用
  • EVM:智能合约的运行环境,是一个沙盒,不能进行网络、文件或者执行其他进程
  • 智能合约:代码和数据的集合,存于以太坊区块链的指定地址
  • 交易:交易是通过状态转移来标记的,状态由被称为账户的对象和两个账户之间的转移价值和信息状态转换构成

外部账户和合约账户在以太坊下用同一数据结构表示,如下图所示。其包含Balance、Nonce、CodeHash 和StorageRoot 四个属性,Balance是账户中的以太币余额;Nonce 是对账户发送过的交易的计数,用于防范重放攻击;当账户被应用于智能合约时,CodeHash 为合约代码的哈希值,StorageRoot 是合约状态数据的Merkle Patricia 树根。

以太坊的交易包含To、Value、Nonce、gasPrice、gasLimit、Data 及Signature交易签名七个属性。To 是接收者的账户地址,Value 是转账的以太币金额,Nonce是发送者对本次交易的计数,gasPrice 是交易时Gas的以太币单价,gasLimit 是执行该交易所允许消耗的最大Gas 数额,Data 是调用智能合约时的消息数据,交易签名是发送者对交易的ECDSA 签名。

以太坊核心原理:

  • 共识机制
  • EVM
    • 编译合约模块:对底层Solc编译器进行封装,提供RPC接口给外部服务,编译智能合约
    • ledger模块:对账户系统更新和修改
    • EVM执行模块:解析和执行合约代码
  • 数据存储:Merkle Patricia tree
  • 加密算法:hash算法SHA256,ECC进行数字签名

以太坊现存问题:

  • 共识效率低下
  • 隐私保护缺乏
  • 大规模存储困难
  • 信息难以监管

猜你喜欢

转载自blog.csdn.net/u011680118/article/details/82377965