区块链技术已经催生了新的、完全数字化的货币

作者: 巴黎人在线官网平台  发布:2019-10-04

这是我在一个外文网站上看到的一篇博文,作者通过50行代码写出了区块链的简化版本.麻雀虽小,但是五脏俱全.我觉得通过实践,这是了解区块链的一个好的方式.于是我将代码实现了下.并且通过这篇文章,说说我读这个代码的时候的思路.

原文出处: Gerald Nash   译文出处:黑色巧克力   

在这串代码里我们主要使用了两个库.这两个库都是python里边自带的,一个是hashlib,这个库里边提供了主要的摘要算法.比如MD5和SHA等.另外一个库是datatime模块.这个模块是python里提供时间日期的模块.在区块链里边,每个区块都需要储存一个时间戳和一个索引.因此这个库为我们提供了使用的工具.

尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹。但是,区块链到底是什么呢?

巴黎人游戏官网 1

巴黎人游戏官网 2

1:初始化函数

区块链

尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹。但是,区块链到底是什么呢?

尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹。但是,区块链到底是什么呢?

首先我们定义区块链的初始参数,我们这里因为是最基本的区块链,这里只包含我们需要的几个参数,但是这些参数是大部分区块链所需要的.比如每个链的索引位置,时间数据以及哈希值.

它是比特币或其他加密货币进行交易的数字账本,账本按时间顺序记录并对外公开。

区块链

区块链

它是比特币或其他加密货币进行交易的数字账本,账本按时间顺序记录并对外公开。

在更一般的术语中,它是一个公共数据库,新数据存储在一个名为块的容器中,并被添加到一个不可变链(后来的区块链)中添加了过去的数据。在比特币和其他加密货币的情况下,这些数据是一组交易记录。当然,数据可以是任何类型的。

区块链技术已经催生了新的、完全数字化的货币,如比特币和莱特币,这些货币并不是由中央政府发行或管理的。因此为那些认为今天的银行系统是骗局或终将失败的人带来了新的自由。区块链所包含的以太坊技术对分布式计算进行了变革创新,它引入了一些有趣的概念,比如智能合约。

在本文中,我将用不到50行的Python2代码来做一个简单的区块链。我称它为SnakeCoin。

首先将定义块将是什么样子。在区块链中,每个块都存储一个时间戳和一个索引。在SnakeCoin中,需要把两者都存储起来。为了确保整个区块链的完整性,每个块都有一个自动识别散列。与比特币一样,每个块的散列将是块索引、时间戳、数据和前块哈希的加密哈希。数据可以是你想要的任何东西。

Python

import hashlib as hasher class Block: def __init__(self, index, timestamp, data, previous_hash): self.index = index self.timestamp = timestamp self.data = data self.previous_hash = previous_hash self.hash = self.hash_block() def hash_block(self): sha = hasher.sha256() sha.update(str(self.index) str(self.timestamp) str(self.data) str(self.previous_hash)) return sha.hexdigest()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import hashlib as hasher
 
class Block:
  def __init__(self, index, timestamp, data, previous_hash):
    self.index = index
    self.timestamp = timestamp
    self.data = data
    self.previous_hash = previous_hash
    self.hash = self.hash_block()
 
  def hash_block(self):
    sha = hasher.sha256()
    sha.update(str(self.index)
               str(self.timestamp)
               str(self.data)
               str(self.previous_hash))
    return sha.hexdigest()

这一步后有块结构,但现在是创建区块链,所以需要向实际的链中添加块。如前所述,每个块都需要上一个块的信息。但是按照这个说法就有一个问题,区块链的第一个区块是如何到达那里的呢?不得不说,第一个块,或者说是起源块,它是一个特殊的块。在很多情况下,它是手动添加的,或者有独特的逻辑允许添加。

下面将创建一个函数简单地返回一个起源块以便产生第一个区块。这个块是索引0,它具有任意的数据值和“前一个哈希”参数中的任意值。

Python

import datetime as date def create_genesis_block(): # Manually construct a block with # index zero and arbitrary previous hash return Block(0, date.datetime.now(), "Genesis Block", "0")

1
2
3
4
5
6
import datetime as date
 
def create_genesis_block():
  # Manually construct a block with
  # index zero and arbitrary previous hash
  return Block(0, date.datetime.now(), "Genesis Block", "0")

现在已经创建好了起源块,接下来需要一个函数,以便在区块链中生成后续的块。这个函数将把链中的前一个块作为参数,创建要生成的块的数据,并使用适当的数据返回新块。当新的块哈希信息来自前面的块时,区块链的完整性会随着每个新块而增加。如果不这样做,外部组织就更容易“改变过去”,用全新的方式取代已有的链条。这一系列的散列可以作为加密的证据,有助于确保一旦将块添加到区块链,它就不能被替换或删除。

Python

def next_区块链技术已经催生了新的、完全数字化的货币,首先我们定义区块链的初始参数。block(last_block): this_index = last_block.index 1 this_timestamp = date.datetime.now() this_data = "Hey! I'm block " str(this_index) this_hash = last_block.hash return Block(this_index, this_timestamp, this_data, this_hash)

1
2
3
4
5
6
def next_block(last_block):
  this_index = last_block.index 1
  this_timestamp = date.datetime.now()
  this_data = "Hey! I'm block " str(this_index)
  this_hash = last_block.hash
  return Block(this_index, this_timestamp, this_data, this_hash)

大部分的工作已经完成,现在可以创建区块链了。在这次的示例中,区块链本身是一个简单的Python列表。列表的第一个元素是起源块。当然,还需要添加后续的块,因为SnakeCoin是最小的区块链,这里只添加20个新的块。可以用for循环来生成新块。

Python

# Create the blockchain and add the genesis block blockchain = [create_genesis_block()] previous_block = blockchain[0] # How many blocks should we add to the chain # after the genesis block num_of_blocks_to_add = 20 # Add blocks to the chain for i in range(0, num_of_blocks_to_add): block_to_add = next_block(previous_block) blockchain.append(block_to_add) previous_block = block_to_add # Tell everyone about it! print "Block #{} has been added to the blockchain!".format(block_to_add.index) print "Hash: {}n".format(block_to_add.hash)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Create the blockchain and add the genesis block
blockchain = [create_genesis_block()]
previous_block = blockchain[0]
 
# How many blocks should we add to the chain
# after the genesis block
num_of_blocks_to_add = 20
 
# Add blocks to the chain
for i in range(0, num_of_blocks_to_add):
  block_to_add = next_block(previous_block)
  blockchain.append(block_to_add)
  previous_block = block_to_add
  # Tell everyone about it!
  print "Block #{} has been added to the blockchain!".format(block_to_add.index)
  print "Hash: {}n".format(block_to_add.hash)

下面来测试一下目前产生的区块链。

巴黎人游戏官网 3

看到了吧,这就是区块链。如果希望在控制台中查看更多信息,可以编辑完整的源文件并打印每个块的时间戳或数据。

这就是SnakeCoin要提供的所有东西。为了使SnakeCoin规模达到今天生产区块链的规模,必须添加更多的功能,比如服务器层,以跟踪多台机器上的链变化,以及在给定的时间段内限制添加的块数量的工作算法巴黎人游戏官网,。

如果想了解更多的技术信息,可以在这里查看原始的比特币白皮书。

2 赞 11 收藏 3 评论

巴黎人游戏官网 4

在更一般的术语中,它是一个公共数据库,新数据存储在一个名为块的容器中,并被添加到一个不可变链(后来的区块链)中添加了过去的数据。在比特币和其他加密货币的情况下,这些数据是一组交易记录。当然,数据可以是任何类型的。

它是比特币或其他加密货币进行交易的数字账本,账本按时间顺序记录并对外公开。

2:加密函数

巴黎人游戏官网 5

在更一般的术语中,它是一个公共数据库,新数据存储在一个名为块的容器中,并被添加到一个不可变链(后来的区块链)中添加了过去的数据。在比特币和其他加密货币的情况下,这些数据是一组交易记录。当然,数据可以是任何类型的。

本文由巴黎人游戏官网发布于巴黎人在线官网平台,转载请注明出处:区块链技术已经催生了新的、完全数字化的货币

关键词:

上一篇:没有了
下一篇:没有了