Home
Cooli7wa
Cancel

PeerCoin白皮书

Sunny King 是 PoS 的发明人,也是点点币 (PeerCoin) 和质数币 (PrimeCoin) 的创始人。在介绍 PoS 源码之前,先说下自己对 PeerCoin 的白皮书 部分内容的理解。 有错误的地方,欢迎留言指正。 introduction We have since formalized a design where proof-of-stake is used...

PeerCoin_PoS源码

之前学习了 PeerCoin 的白皮书,这篇就一起看下核心的 PoS 机制,PeerCoin 是 PoS 的鼻祖,所以还是很有代表性。 从 CreateNewBlock (src/main.cpp) 开始: 创建 coinstake 的主要流程都在 CreateCoinStake (src/wallet.cpp) 内: 这里说下手续费 我们知道,在比特币里,手...

以太坊PoS设计

最近在看 PoS,会陆续更新两篇文章,一篇介绍 PoS 设计思想,一篇看下 PoS 源码。 这是第一篇,内容主要来源于以太坊 GitHub 上的《Proof of Stake FAQ》,这篇文章里面 V 神介绍了很多设计思想,很好的一篇文章,但是看起来比较吃力,涉及了很多概念,目前只看完了一部分,就先总结下这部分,这篇文章会不断更新。 有理解错误的地方,欢迎留言指正。 PoS 介绍 ...

以太坊和比特币不同的PoW实现

比特币的 PoW 算法,之前的文章中已经提到,以太坊目前使用的共识算法 (Ethash) 虽然也是 PoW,但是与比特币的不同。 bitcoin 的 PoW 算法 比特币的工作量证明算法,可以用下面这个公式表示: hash_output = sha256(prev_hash, merkle_root, nonce) hash_output 应该不大于 nBits prev_h...

闪电网络和分片

这篇记录下我对闪电网络和以太坊分片技术的理解和一些看法。 网络上介绍技术实现的文章很多(详见参考),所以这里不详细讨论实现细节,只是多说下自己的想法。 欢迎留言探讨。 Lightning Network 闪电网络基于微支付通道演化而来,主要包含两个部分 RSMC(序列到期可撤销合约) 和 HTLC(哈希时间锁定合约)。 首先闪电网络是用于比特币的,因为要用到类似合约的用法,所以这里...

比特币源码学习-隔离见证

这篇文章介绍下我所理解的 Segregated Witness(隔离见证),隔离见证比较复杂,看了源码和很多介绍的文章,也只能算是初步了解了隔离见证。所以这篇文章陆续会不断更新。 有错误的地方,欢迎留言指出。 什么是隔离见证及解决什么问题? 比特币区块容量限制为 1MB,每笔交易按照 250 字节计算,10 分钟一个区块的话,每秒钟能进行 6 笔交易,这个是非常少的,所以也就陆续出现了...

比特币源码学习-生成区块

之前学习了隔离见证,这篇主要介绍下生成区块的流程,中间会有部分前面提到的函数。 generatetoaddress(mining.cpp) 是 cli 用来给特定地址生成区块的命令,从这个函数开始。 其中的 DecodeDestination(key_io.cpp) 之前在看隔离见证的时候,讲过后面部分,下面看下前面部分: 得到地址之后,函数里生成了 scriptPubkey,...

比特币源码学习-区块验证

之前学习了区块头验证 和 默克尔树,在区块的验证里都会用到,现在就来看看区块的验证。 从 CheckBlock 函数(validation.cpp)开始: 除了之前看过的区块头和默克尔根的验证,这里还涉及到两个函数,分别看下: CheckTransaction(tx_verify.cpp): GetLegacySigOpCount(tx_verify.cpp): 这...

比特币源码学习-默克尔树

之前学习了区块头验证,今天开始看区块验证,在看到默克尔根验证的地方,代码注释的地方记录了之前的一个缺陷,挺有意思,就先学习下默克尔树,随便说下这个缺陷。 默克尔树相关代码都在 merkle.cpp 中,BlockMerkleRoot 和 BlockWitnessMerkleRoot 是两个入口函数。 在看 ComputeMerkleRoot 之前,先看下这个函数前的大篇幅注释: ...

比特币源码学习-区块头验证

最近开始看比特币的源码(版本 0.17),会逐渐更新一些文章。 这篇学习下“验证区块头”的流程。 从 ProcessNewBlockHeaders(validation.cpp)开始: 下面是 AcceptBlockHeader (validation.cpp)函数: 这里面主要有两个函数: CheckBlockHeader ,根据当前区块头提供的信息,检查这个区...