-
Notifications
You must be signed in to change notification settings - Fork 151
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
36 changed files
with
2,627 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,69 @@ | ||
# bcguide | ||
最全面的区块链理论知识学习 | ||
> 公众号:区块链技术栈 | ||
> | ||
> <img src="https://tva1.sinaimg.cn/large/007S8ZIlgy1gjmgo9nr6jj3076076aaj.jpg" alt="公众号二维码" style="zoom: 50%;" /> | ||
> | ||
> 个人微信号:mindcarver | ||
> | ||
> <img src="https://tva1.sinaimg.cn/large/007S8ZIlgy1gjmgmqzdgaj30by0byjs7.jpg" alt="我的微信二维码" style="zoom:25%;" /> | ||
> | ||
> QQ交流群:1057497867 | ||
> | ||
> <img src="https://tva1.sinaimg.cn/large/007S8ZIlgy1gjmh00j434j308w0bk0up.jpg" alt="image-20201012130921164" style="zoom:33%;" /> | ||
开启学习区块链之旅 | ||
|
||
|
||
|
||
## 福利 | ||
|
||
> 1. 关于b blockchain_guide的说明 | ||
> 2. Blockchain_guide的多个子系列的一些PDF版本 | ||
> - 获取的方式必须关注公众号(顺便加群,不定时的福利) | ||
> 3. 如何贡献:加个人微信号,然后可以备注问题,我去更改,或者添加到作者中来维护 | ||
> 4. 如何赞赏:知识星球圈,专门为区块链技术还有go和C++的一些程序员准备 | ||
> 5. 联系我(只放个人微信号),进群或者请教问题 | ||
> 6. 全套视频教程:个人微信->公众号 | ||
|
||
|
||
> https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369 全面介绍以太坊 | ||
> https://github.com/yippee-ki-yay/eth-dev-reading-list (以太坊比较全面的内容阅读列表) | ||
> https://ethereum.github.io/yellowpaper/paper.pdf 以太坊技术黄皮书 不再更新 | ||
|
||
|
||
|
||
|
||
## 入门书籍 | ||
|
||
- 区块链图书链接下载(全部收集于互联网,如有侵犯,请联系本人) | ||
|
||
## 常用社区 | ||
|
||
- 巴比特 | ||
- Ethfans | ||
|
||
## 基础理论 | ||
|
||
### 共识机制 | ||
|
||
|
||
|
||
## 密码学 | ||
|
||
## 计算机网络 | ||
|
||
|
||
|
||
## 智能合约 | ||
|
||
|
||
|
||
## 区块链架构技术 | ||
|
||
|
||
|
||
|
||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
> 文章以及资料(开源):[github地址](https://github.com/mindcarver/blockchain_guide) | ||
[TOC] | ||
|
||
## 定义 | ||
|
||
以太坊(英语:Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称“以太币”)提供去中心化的虚拟机(称为“以太虚拟机”Ethereum Virtual Machine)来处理点对点合约。 | ||
|
||
## 特点 | ||
|
||
相较于较大多数其他加密货币或区块链技术,以太坊的特点包括下列: | ||
|
||
- 智能合约(smart contract):存储在区块链上的程序,由各节点运行,需要运行程序的人支付手续费给节点的矿工或权益人。 | ||
- 分布式应用程序:以太坊上的分布式应用程序不会停机,也不能被关掉。 | ||
- 代币(tokens):智能合约可以创造代币供分布式应用程序使用。分布式应用程序的代币化让用户、投资者以及管理者的利益一致。代币也可以用来进行首次代币发行。 | ||
- 叔块(uncle block):将因为速度较慢而未及时被收入母链的较短区块链并入,以提升交易量。使用的是有向无环图的相关技术。 | ||
- 权益证明(proof-of-stake):相较于工作量证明更有效率,可节省大量在挖矿时浪费的电脑资源,并避免特殊应用集成电路造成网络中心化。(测试中) | ||
|
||
## 第二层功能 | ||
|
||
除了在主链上运行的各种功能,为了支持智能合约所需的高运算量以及资料容量,以太坊也积极开发第二层功能来减轻主链的负担,扩展其实用规模。目前的主要方案包括以下: | ||
|
||
- 支链:用较小的分支区块链运算,只将最后结果写入主链,可提升供单位时间的工作量。 | ||
- Plasma支链:2020年6月起由OMG测试中 | ||
- Rollup支链:2019年开发团队将重心由Plasma转移至Rollup,目前正在开发中 | ||
- 状态通道(state channels):原理类似比特币的闪雷网络,可提升交易速度、降低区块链的负担,并提高可扩展性。尚未实现,开发团队包括雷电网络(Raiden Network)和移动性网络(Liquidity Network) | ||
- 分片(sharding):减少每个节点所需纪录的资料量,并透过平行运算提升效率(尚未实现) | ||
|
||
## 以太币 | ||
|
||
以太坊区块链上的代币称为以太币(Ether),代码为ETH,可在许多加密货币的外汇市场上交易,它也是以太坊上用来支付交易手续费和运算服务的介质。以太币的总发行量不明,因为权益证明的具体运作方式仍在研究中,而虽然难度炸弹限制了工作量证明的挖扩的区块数量上限,但因为叔块也有奖励,而且叔块的数量并不一定,造成确切数量难以估算。 | ||
|
||
以太币对其他实体货币的汇率可能在短时间内大幅变化,例如2016年 The DAO 被骇时,对美元的汇率从 $21.50 跌至 $15,而2017年初到2018年初的的一年间从大约10美金涨到1400美元。 | ||
|
||
布特林在 2016 年 4 月售出手上持有的四分之一以太币,造成一些人质疑,而他本人则说这是理财上很合理的分散风险,并引用前比特币开发员 Gavin Andresen 说这一切都还只是一场实验,仍有失败的可能。 | ||
|
||
## 智能合约 | ||
|
||
以太坊最重要的技术贡献就是智能合约。智能合约是存储在区块链上的程序,可以协助和验证合约的谈判和运行。以太坊的智能合约可以数种用图灵完备的编程语言写成。纽约时报称以太坊平台是一台由众多用户构成的网络来运转的公用电脑,并用以太币来分配和支付这台电脑的使用权。经济学人则说明智能合约可以让众多组织的数据库得以用低廉的成本交互,并且让用户写下精密的合约,功能之一是产生去中心化自治组织,也就是一间只是由以太坊合约构成的虚拟公司。 | ||
|
||
因为合约内容公开,合约可以证明其宣称的功能是真实的,例如虚拟赌场可以证明它是公平的。另一方面,合约的公开性也表示如果合约中有漏洞,任何人都可以立刻看到,而修正程序可能会需要一些时间。The DAO 就是一个例子,无法即时阻止。 | ||
|
||
智能合约的许多细节仍在研究中,包括如何验证合约的功能。微软研究院的报告指出要写出完善的合约可能非常困难,讨论了微软开发的一些可以用来验证合约的工具,并提到如果大规模分析各个已发布的合约,可能发现找出大量的漏洞。报告也说可以证明Solidity程序和以太虚拟机编码的等同性。 | ||
|
||
## 以太坊组件 | ||
|
||
### p2p网络 | ||
|
||
以太坊运行在Ethereum Main Network上,这是一个通过TCP 30303端口寻址的网络,网络层运行的协议名为-D ΞVp2p | ||
|
||
### 共识规则 | ||
|
||
以太坊的共识规则,由以太坊黄皮书(见后文中的“扩展阅读”)中的参考标准进行精确定义 | ||
|
||
### 交易 | ||
|
||
以太坊交易是一个网络消息,主要包含交易的发送方、接收方、价值和数据载荷 | ||
|
||
### 状态机 | ||
|
||
以太坊的状态转换由以太坊虚拟机(EVM)处理,这是一个基于栈的虚拟机,执行bytecode(字节码指令)。被称为“智能合约”的EVM程序采用高级语言(例如Solidity)编写,并编译为通过EVM执行的字节码。 | ||
|
||
### 数据结构 | ||
|
||
以太坊的区块链以数据库(通常采用Google的LevelDB)的方式保存在每一个节点之上,区块链内包含了交易和系统的状态,经过哈希处理的数据保存在Merkle Patricia Tree数据结构之内。 | ||
|
||
### 经济安全性 | ||
|
||
以太坊当前使用名为Ethash的工作量证明算法,这个算法迟早将被放弃,并切换到PoS。 | ||
|
||
## 扩展阅读 | ||
|
||
> 以太坊黄皮书:https://ethereum.github.io/yellowpaper/paper.pdf | ||
> | ||
> 黄皮书的简单版本:https://github.com/chronaeon/beigepaper | ||
> | ||
> DΞVp2p网络协议:https://github.com/ethereum/wiki/wiki/%C3%90%CE%9EVp2p-Wire-Protocol | ||
> | ||
> 以太坊虚拟机相关资源:https://github.com/ethereum/wiki/wiki/Ethereum-Virtual-Machine-(EVM)-Awesome-List | ||
> | ||
> MPT规范:https://github.com/ethereum/wiki/wiki/Patricia-Tree | ||
> | ||
> casper第一版协议:https://github.com/ethereum/research/wiki/Casper-Version-1-Implementation-Guide | ||
> | ||
> 《深入理解以太坊》 | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
> 文章以及资料(开源):[github地址](https://github.com/mindcarver/blockchain_guide) | ||
[TOC] | ||
|
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
## Kademlia基本介绍 | ||
|
||
## 路由表 | ||
|
||
Kademlia路由表由节点ID每一位的*列表*组成。(例如,如果一个节点ID由128位组成,则一个节点将保留128个这样的*列表*。) | ||
|
||
这些*列表*称为*k-buckets*。*k*是系统范围的数字,例如20。每个k-bucket是一个*列表*,其中最多包含*k*个条目;例如,对于一个k = 20的网络,每个节点将具有一个*列表,*其中包含多达20个节点的特定位(与自身之间的特定距离) | ||
|
||
一个**列表**有很多**条目**,*列表中的*每个条目都包含必要的数据,以定位另一个节点。 | ||
|
||
每个条目中的数据通常是另一个节点的*IP地址*,*端口*和*节点ID*。 | ||
|
||
每个*列表*对应于到节点的特定距离。?可以进入第n个*列表的*节点必须具有不同的第n个节点位从节点的ID。 | ||
|
||
候选ID的前n-1位必须与节点ID的前n-1位匹配。这意味着填充第一个*列表*非常容易,因为网络中有1/2个节点是距离较远的候选对象。下一个*列表*只能使用网络中1/4的节点(比第一个节点近一点),等等。 | ||
|
||
ID为128位时,网络中的每个节点将按照128个不同距离之一(每位特定距离)对其他节点进行分类。 | ||
|
||
|
||
|
||
## 节点距离 | ||
|
||
Kad网络中每个节点都有一个160bit的ID值作为标志符,Key也是一个160bit的标志符,每一个加入Kad网络的节点都会被分配一个160bit的节点ID(node ID),这个ID值是随机产生的。同时对的数据就存放在ID值距离key值最近的若干个节点上。 | ||
|
||
- (A ⊕ B) == (B ⊕ A):对称性,A到B的距离和B到A的距离是相等的。 | ||
|
||
- (A ⊕ A) == 0:节点自身与自身的距离是0 | ||
|
||
- (A ⊕ B) > 0 :任意两个节点之间的距离一定大于0 | ||
|
||
- (A ⊕ B) + (B ⊕ C) >= (A ⊕ C):三角不等,A经过B到C的距离总是大于等于A直接到C的距离 | ||
|
||
距离不仅可以应用在节点之间,也可以应用在节点和键值之间。这在键值查找中很有用。 | ||
|
||
例如: | ||
|
||
> 节点A的ID(011)和节点B的ID(101)距离:011 ⊕ 101 = 110 = 4+2 = 6。 | ||
|
||
|
||
## 协议消息 | ||
|
||
分为4种消息: | ||
|
||
- PING 检查节点是否在线 | ||
- STORE 在某个节点中存储一个键值对 | ||
- FIND_NODE 返回对方节点桶中离请求键值最近的 K 个节点 | ||
- FIND_VALUE 与 FIND_NODE 一样,不过当请求的接收者存有请求者所请求的键的时候,它将返回相应键的值 | ||
|
||
## 定位节点 | ||
|
||
## 查找资源 | ||
|
||
## 加入网络 | ||
|
||
## 加速查找 | ||
|
Binary file not shown.
Binary file not shown.
Empty file.
Oops, something went wrong.