1.区块链白皮书,开发文档。其他资料:基础《精通比特币》,行业知识《从区块链到信用社会》,技术进阶《区块链原理设计与应用》,除了《精通比特币》可以从网络获得,其他是实体书籍。 还有github本身就是一个丰富的资料库,比特币和以太坊的开发者文档可以也可以作为技术进阶
2. 区块链的核心技术组成
(1)p2p网络协议 详细查看比特币开发指南中的peer discovery
(2)分布式一致性算法
包括非拜占庭容错算法的Raft和paxos 以及具有拜占庭容错特性的PBET共识算法。
区块链把原来的分布式算法进行了经济学上的扩展
区块链共识算法
(1)pow:通常是指在给定的约束下,求解一个特定难度的数学问题,谁解的速度快,谁就能获得记账权(出块)。这个求解工程往往会换算成计算我替你,所以在比拼速度的情况下,也就变成了谁的计算方法更优,以及谁的设备性能更好。比特币本身的演化很好的诠释了这个问题,中本聪升级的思路本来是由cpu计算,随着市场发展,人们发现GPU也可以参与其中,并且效率可以达到十倍或者百倍。
(2)pos:这是一种股权证明机制,它的基本概念是产生区块的难度应该和你在网络中所占的股权成比例,目前有三个版本pos1.0, pos2.0,pos3.0它实现的核心思路是:使用你所锁定代币的币龄(CoinAge)以及一个小的工作量证明,去计算一个目标值,当满足目标值时,你将可能获取记账权。
(3)Dpos:简单来理解就是将pos共识算法中的记账者转换成指定节点数组成的小圈子,而不是所有人都可以参与记账,这个圈子可能是21个节点,也有可能是101个节点,这一点取决于设计,只有这个圈子中的节点才能获得记账权,这将极大的提高系统吞吐量,因为更少的节点也就意味着网络和节点的可控。
(3)加密签名算法
(4) 账户和交易模型
区块链的账本特性,通常分为utxo结构以及基于account-balance结构,我们也称为账本模型。UTXO是unspent transaction input/output的缩写,翻译过来就是指未花费的交易交易输入输出。这个区块链中Token转移的一种记账模型,每次转移均以输入输出的形式出现。
参考资料如下:
https://bitcoin.org/en/developer-guide#bloom-filters
https://en.bitcoin.it/wiki/Protocol_documentation
3. p2p网络
比特币和以太坊均使用UPnP协议作为网络局域网穿透工具,只要局域网中的路由器设备支持NAT网管功能,支持UPnP协议,即可将你的区块链节点自动映射到公网上。
系统发生的人为恶意篡改的过程就可以称之为系统发生了拜占庭错误。
4. pow:工作量证明,是一种简单粗暴的共识算法,他不要求高质量的p2p网络资源,可以为公链提供稳定有效的记账者筛选机制,同时它也面临了挖矿中心化严重的问题。
pos:将pow的计算能力换算成财产证明,就是所拥有的币龄越多,获得的记账的概率就越大。
pos共识机制,pos的区块链系统无需外部物理输入,所以它相比于pow更为环保不费电,并且旷工就是使用者,这会在一定程度上抵御51%攻击,所以基于pos机制的数字货币属于立项状态的数字货币。
dpos:就是将pos共识算法中的记账者转换为指定节点数组成的小圈子,而不是所有人都有权利参与记账,这个圈子可能是21个节点也可能是101个节点这一点取决于设计,只有圈子内的节点才能获得记账权。
DPOS设计的基本准则:(1)投票过程一定要保证最大权益所有者最终能控制全网,因为一旦出了问题,他们的损失最大(2)与pow pos一样,所有节点仅仅承认最长链。
dpos共识机制本身将矿池纳入系统内部,并把他们统称为见证节点,虽然不会出现中心化挖矿的风险,但是DPOS由于节点数不多,并且见证节点权利较大,可以认为dpos本身就是带中心化思路的共识机制。
区块链相关图书:
《区块链技术指南》
《精通比特币》
5. 账户模型分为普通账户模型(账户余额模型),UTXO模型:记录交易记录不记录最终状态,用户需要根据历史记录自行计算余额。\
智能合约:等价于一段事先就被规定好逻辑和条款的计算代码被激活运行的状态,同时,智能合约也提供了通用的计算机接口,用户可以通过接口和用户交互。
6、 数字货币和token:数字货币一般指一个区块链项目的平台代币。而token一般指一种资产,这些资产在已经存在的其他区块链上运行,资产可以像商品一样交易,比如消费积分,游戏虚拟资产。
7.比特股机制
比特股作为一个去中心化的交易平台:提供两种机制第一:资金出入是由承兑商来支持的,人人都可以成为承兑商,也就是人人承兑;第二铆钉机制提供了稳定货币的出入金过程,锚定机制也保证了比特股的出入资金和交易撮合是分离的,避免了中心化交易平台的弊端。
8. 区块链相关demo
(1)https://github.com/cesanta/mongoose 开源http server库
python实现的一些demo
(2)https://medium.com/crypto-currently/lets-build-the-tiniest-blockchain-e70965a248b
(3)https://hackernoon.com/learn-blockchains-by-building-one-117428612f46
(4)http://adilmoujahid.com/posts/2018/03/intro-blockchain-bitcoin-python/