阮一峰写的挺好的: http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html
区块链技术:是一个去中心化的数据库,是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
狭义的说,区块链是按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改、不开伪造的分布式账本。
广义来说,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生产和更新数据、利用密码学方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。
技术特征:
功能特征:
基本概念:
分类:
演化:
分层架构:
另一种分层方式如下图所示:
交易流程如下图:
应用广泛,如下图所示:
以太坊就是区块链技术+智能合约。
以太坊和区块链技术一样,有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
基本概念:
外部账户和合约账户在以太坊下用同一数据结构表示,如下图所示。其包含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 签名。
以太坊核心原理:
以太坊现存问题: