区块链底层与产品的制作工艺

本文我们将开始制作一个本地的区块链。

为什么要从本地开始?

很多人,受现在比特币以太坊等明星产品的影响,可能会说“区块链在本地有什么用啊要联网才有用啊”。

其实并不然,区块链不是必须要连上网,并不是经过共识了才叫区块链。根据分类,区块链可分成公共链,私有链 和联盟链,其中只有公共链是在公网上且分布式的,而私有和联盟根据其服务性质而定,其中大部分都是一个本地链即可完成功能。好比银行中需要数字账簿,只需在本地用于该链的计算机上操作各类交易即可实现账目审计。

简而言之,本地区块链就是一个可追溯、可信、方便审计的数据库。

我们这里选用Golang作为开发语言,因为它严谨而又现代,适合搭建这样可靠的服务,而且未来在分布式的应用方面Golang也有傲人之处。同样你也可以把代码根据思路翻译成其他语言,JS、Typescript、Python等现代语言对于初学者来说会议更好的体验。

当然本地区块链也有利于新手先熟悉区块链本身的样子。由于不涉及网络和其他附加元素,本地区块链最为纯净。同样也有利于将来将其他附加元素与区块链分离,实现接口衔接。

开始,类型

Golang是一个静态编译的语言,是需要对其中变量常量对象进行严格定义的。首先我们需要对区块(Block)进行定义:

type Block struct {
    Index     int64  `json:"index,string"`
    PrevHash  []byte `json:"prevhash,string"`
    Timestamp int64  `json:"timestamp,string"`
    Data      []byte `json:"data,string"`
    Hash      []byte `json:"hash,string"`
}

这是最基本的区块的定义。

首先说明下“`”和“`”之间的是tag内容,方便json序列化,各位可以当注释看待。

Index是为了区块排序用的索引,从0(即创世区块)开始。Timestamp为创建本区块时的时间。PrevHash表示上一个区块的hash值,而Hash值即表示将本区块所有信息(索引、前一区块Hash、时间戳Timestamp、数据Data)经过hash函数处理后独一无二的内容。

写到这里插个题外话,要做数字资产而且想被市场接受就要有噱头,或者说大卖点(至少现在是这样的)。但是作为个人开发者没核心技术突破的能力,不像有些币有财团背书有实验室背书,做不出什么抗量子算法,发明个抗ASIC挖矿算法都难。那就推荐这个bitcoin团队的repo:https://github.com/bitcoin/bips。这里面包含了所有Bitcoin升级的建议(BIP),而其中很多是因为BTC的势力对抗或者是重构与分叉的难度而未能完成的,并不是代码难度。因此作为一种新币,只要解决这些问题中的一两个就足够作为噱头。当然我们也能从中看到什么样的虚拟货币是人们真正想要的。其他部分就只要借鉴借鉴即可。

你可能感兴趣的:(区块链底层与产品的制作工艺)