社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  区块链

200行代码构建一个区块链

Unitimes • 7 年前 • 362 次点击  
点击上方Unitimes可以订阅哦!


unitimes.media

全球视角,独到见解


区块链的基本概念非常简单:一个存储不断增加的有序记录的分布式数据库。


然而,当我们谈论区块链时,我们很容易将其与区块链要解决的问题混淆,比如误解为流行的、基于区块链的、像比特币和以太坊一样的项目。术语“区块链”通常与交易、智能合约或加密货币等概念紧密相关。



这必然使得理解区块链变成一项更艰巨的任务,特别是清楚地理解源代码。接下来我将介绍一个我用200行Javascript代码完成的超级简单的区块链:NaiveChain。


区块结构


第一个步骤是确定区块的结构。为了让事情尽可能简单,区块结构只包含最必要的部分:索引、时间戳、数据、哈希值(hash)和前一个区块的哈希值(hash)。



前一个区块的哈希值(hash)必须能够在块中找到,这样才能保持链的完整性。



生成区块哈希值


区块需要哈希值以保持数据的完整性。可以使用SHA-256算法生成这个值。应该指出,这个哈希值与“ 挖矿 ” 无关,因为不需要去解决工作证明问题。



生成一个区块


要生成一个区块,我们必须知道前一个块的哈希值,并创建剩余所需内容(索引、哈希、数据和时间戳)。其中区块数据是由用户提供的。



存储区块


使用Javascript数组在内存中存储区块链。区块链的第一个区块总是一个所谓的“创世纪区块”,内容是固定的。



验证区块的完整性


我们必须能时刻验证区块或者区块链是否完整,尤其是当我们从其他节点接收到新块,需要决定是否接受它们的时候。



选择最长的区块链


区块链中应时刻有且只有一组显式的区块。如果发生冲突(例如,两个节点都生成块号72的区块),我们选择具有最长块数的链。




与其他节点通信


区块链节点的一个重要任务是与其他节点共享和同步区块链。以下规则用于保持网络同步。


  • 当一个节点产生一个新块时,要将这个区块广播到网络中

  • 当一个节点连接到一个新的对等节点时,要查询最新的区块

  • 当一个节点遇到一个索引大于当前已知块的块时,将该块添加到当前链中,或者查询完整区块链



描述的模型中的一些典型的通信场景。


不自动发现对等的节点,必须手动添加对等节点的位置(=网址)。


控制节点


用户必须能够以某种方式控制节点。可以通过设置HTTP服务器完成的。



如所看到的,用户能够通过以下方式与节点交互:


  • 列出所有区块

  • 用用户给出的内容创建一个新区块

  • 列出或添加对等节点


控制节点最直接的方法是例如使用Curl:



架构


应该注意的是,每个节点实际上公开了两个Web服务器:一个用于控制节点(HTTP服务器),一个用于节点之间的对等通信(Websocket HTTP服务器)


NaiveChain的主要组件


总结


NaiveChain是为演示和学习目的而创建的。因为它不具有“ 挖掘 ”算法(工作证明(PoW)的权益证明(PoS)),它不可以在公共网络中使用。尽管如此,它仍然实现了区块链的基本功能。


您可以从Github存储库获取更多技术细节。


如果您想了解更多区块链的知识,我建议您查看Naivecoin:构建加密货币的教程。在这个教程中,我们将详细讨论如挖矿、交易和钱包这样的概念。


作者:Mr.Crypto
来源:腾讯云


【文章版权归原作者所有,其内容与观点不代表unitimes立场。转载文章仅为传播更有价值的信息,合作或授权联系请发邮件至 contact@unitimes.media或添加微信unitimes2017】


国际金融科技新媒体和社区平台

UNITIMES

网址 : unitimes.media

新浪微博:@Unitimes



等你点赞转发都等出蜘蛛网了


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/fVcaCX5lLw
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/23618