手机版
扫描查看手机站
首页 > 文章 > 加密世界 > 正文

GO创建区块链,怎么用GO实现一个简单的区块链?

时间:2023-04-15 阅读:
特战英豪官网版

特战英豪官网版

  • 类型:射击空战
  • 大小:61.82MB
  • 语言:中文版
  • 版本:v1.0.0

自互联网以来,锁链技术已被某些人称为最有影响力的发明。尽管公众将区块链与投机性加密货币同义解释,但区块链实际上在现代世界中具有不可思议的广泛应用。实际上,加密货币只是区块链领域的一小部分,生产中的许多解决方案都是由私人组织领导来实现的。

GO创建区块链,怎么用GO实现一个简单的区块链?

随着区块链技术的迅速发展,技术领域的专业人员越来越需要了解区块链的基础知识及其技术影响力。

毕竟,实现自己的区块链实际上并不像听起来那样复杂。本文中,我们将使用2021年最流行的编程语言之一GoLang实现基本的区块链。那么,让我们开始吧!

了解区块链

区块链是名称符合其含义的少数技术之一。我们可以将区块链视为通过哈希相互连接的信息块,哈希是从输入数据生成的加密的固定输出。由于每个块都通过哈希相互引用,因此如果不大幅度更改链的其余部分,就不可能更改链的任何部分。

区块链中的每个块都可以包含几乎任何内容的数据。一个基本框架将包括每个块的过去交易的所有记录。比特币以类似的方式工作,这就是为什么您可以一直跟踪比特币交易直至Satoshi首次进行加密货币交易的原因。

下面我们有三个区块来创建区块链。第一块是创世块。由于之前没有任何内容,因此前一个哈希字段为空。我们仍然使用时间戳记属性和初始事务作为哈希算法的输入。该算法将吐出一大串数字和字母,这些数字和字母代表了创世纪块的哈希值。

 

转到块2,我们将创世块的哈希值用作块2先前哈希值。这个动作将创世块与第2块联系起来!接下来,我们将时间戳,交易列表和先前的哈希值作为我们的哈希算法的输入。该算法将为我们提供一个新的哈希值来表示块2。

我们将继续重复该过程任意多次,除了区块的有效性以及存储区块链的能力(比特币的区块链约为330 GB)之外,没有任何其他限制。

在Go中创建一个简单的区块链

创建我们的区块链的第一步是定义什么是区块。Go使我们的生活更轻松地创建自定义类型,我们可以Block使用以下代码来定义类型。在这里,该Block结构具有四个字段以匹配我们上面的图。

type Block struct { timestamp time.Time transactions []string prevHash []byte Hash []byte}

下一步是创建构造函数的Go版本,以创建新的块。该函数的输入将使用一个字符串数组来表示事务,以及一个字节数组来表示先前制作的块所对应的先前的哈希值。下一个要研究的NewHash()功能是我们下一步将实现的功能。

func NewBlock(transactions []string, prevHash []byte) *Block { currentTime := time.Now() return &Block { timestamp: currentTime, transactions: transactions, prevHash: prevHash, Hash: NewHash(currentTime, transactions, prevHash), }}

该NewHash()函数将时间,事务列表和以前的哈希作为我们的输入参数,同时返回一个字节数组来表示新生成的哈希值。在此功能中,我们基本上只是将所有输入都混入一个称为的单个字节数组中input。我们这样做是使用append()功能的附加time参数,prevHash通过转换time为string用...,以追加作为后缀time片的prevHash切片。

然后,我们遍历transactions并将每个个体附加transaction到input数据blob。有趣的语法string(rune(transaction))...只是Go中将其中的每个元素转换transactions为可以附加到的切片的一种方法input。它正在输入垃圾内容,因此,如果您真的想要,请深入研究。

func NewHash(time time.Time, transactions []string, prevHash []byte) []byte { input := append(prevHash, time.String()...) for transaction := range transactions { input = append(input, string(rune(transaction))...) } hash := sha256.Sum256(input) return hash[:]}

最后,我们使用crypto包转到电话sha256.Sum256()与input作为它的参数。这将为我们的所有数据输入提供新的哈希表示。我们返回时hash[:]使用的[:]语法将hash在返回时切成适当的长度。

这实际上是我们开始链接我们的区块链所需的全部。当然,我们希望在程序中看到某种输出,以便在打印时可以使用一些辅助方法:

func printBlockInformation(block *Block) { fmt.Printf("\ttime: %s\n", block.timestamp.String()) fmt.Printf("\tprevHash: %x\n", block.prevHash) fmt.Printf("\tHash: %x\n", block.Hash) printTransactions(block)}func printTransactions(block *Block) { fmt.Println("\tTransactions:") for i, transaction := range block.transactions { fmt.Printf("\t\t%v: %q\n", i, transaction) }}

现在剩下的就是创建新的事务,块和哈希。我们可以通过我们的主要方法来做到这一点。我们定义了一个字符串数组来记录我们的区块链中的交易。另请注意,我们如何传递一个空字节数组NewBlock()来生成名为的第一个块genesisBlock。

func main() { genesisTransactions := []string{"Izzy sent Will 50 bitcoin", "Will sent Izzy 30 bitcoin"} genesisBlock := NewBlock(genesisTransactions, []byte{}) fmt.Println("--- First Block ---") printBlockInformation(genesisBlock) block2Transactions := []string{"John sent Izzy 30 bitcoin"} block2 := NewBlock(block2Transactions, genesisBlock.Hash) fmt.Println("--- Second Block ---") printBlockInformation(block2) block3Transactions := []string{"Will sent Izzy 45 bitcoin", "Izzy sent Will 10 bitcoin"} block3 := NewBlock(block3Transactions, block2.Hash) fmt.Println("--- Third Block ---") printBlockInformation(block3)}

为了创建新的区块,我们将前一个区块的哈希值NewBlock()与对应的交易历史记录一起传递。如果您想在一个地方查看整个程序,则为:

package mainimport ( "crypto/sha256" "fmt" "time")type Block struct { timestamp time.Time transactions []string prevHash []byte Hash []byte}func main() { genesisTransactions := []string{"Izzy sent Will 50 bitcoin", "Will sent Izzy 30 bitcoin"} genesisBlock := NewBlock(genesisTransactions, []byte{}) fmt.Println("--- First Block ---") printBlockInformation(genesisBlock) block2Transactions := []string{"John sent Izzy 30 bitcoin"} block2 := NewBlock(block2Transactions, genesisBlock.Hash) fmt.Println("--- Second Block ---") printBlockInformation(block2) block3Transactions := []string{"Will sent Izzy 45 bitcoin", "Izzy sent Will 10 bitcoin"} block3 := NewBlock(block3Transactions, block2.Hash) fmt.Println("--- Third Block ---") printBlockInformation(block3)}func NewBlock(transactions []string, prevHash []byte) *Block { currentTime := time.Now() return &Block { timestamp: currentTime, transactions: transactions, prevHash: prevHash, Hash: NewHash(currentTime, transactions, prevHash), }}func NewHash(time time.Time, transactions []string, prevHash []byte) []byte { input := append(prevHash, time.String()...) for transaction := range transactions { input = append(input, string(rune(transaction))...) } hash := sha256.Sum256(input) return hash[:]}func printBlockInformation(block *Block) { fmt.Printf("\ttime: %s\n", block.timestamp.String()) fmt.Printf("\tprevHash: %x\n", block.prevHash) fmt.Printf("\tHash: %x\n", block.Hash) printTransactions(block)}func printTransactions(block *Block) { fmt.Println("\tTransactions:") for i, transaction := range block.transactions { fmt.Printf("\t\t%v: %q\n", i, transaction) }}

如果要运行此程序,将得到以下输出:

$ go run example.go --- First Block --- time: 2021-04-05 15:12:18.813294 -0600 MDT m=+0.000074939 prevHash:  Hash: 43ec51c50d2b9565f221155a29d8b72307247b08eaf6731cca Transactions: 0: "Izzy sent Will 50 bitcoin" 1: "Will sent Izzy 30 bitcoin"--- Second Block --- time: 2021-04-05 15:12:18.813477 -0600 MDT m=+0.000257244 prevHash: 43ec51c50d2b9565f221155a29d8b72307247b08eaf6731cca Hash: fcce5323a35cb67b45fe75866582db00fd32baeb92aac448c7 Transactions: 0: "John sent Izzy 30 bitcoin"--- Third Block --- time: 2021-04-05 15:12:18.813488 -0600 MDT m=+0.000269168 prevHash: fcce5323a35cb67b45fe75866582db00fd32baeb92aac448c7 Hash: fc1d3eee286970d85812b47c3a5bf016ae8c1de4f86b8ace972ffa Transactions: 0: "Will sent Izzy 45 bitcoin" 1: "Izzy sent Will 10 bitcoin"

过程可能会很粗糙,但这是创建自己的区块链的基础!

以上就是GO创建区块链,怎么用GO实现一个简单的区块链?的详细内容,更多关于GO创建区块链的资料请关其它相关文章!


FIL挖矿,到底是购买云算力好,还是购买矿机好呢? 原神凝光该如何定位(原神凝光角色定位) 中币提现要多长时间?中币网交易所提现人民币教程 和平精英id前面性别怎么隐藏(和平精英id前面的性别怎么改) 苹果手机怎么查找对方手机位置?在对象不知情的情况下查找位置详解 Coinsuper是什么交易所?币成交易所充值提现操作教程 安币交易所是什么?安币交易所官网入口 宝可梦传说阿尔宙斯皮宝宝在哪抓(《宝可梦》阿尔宙斯) 我的世界附魔金苹果怎么做不了了(我的世界附魔金苹果有啥用) 和平精英怎么录屏(和平精英怎么录屏?) 至今为止我认为比较赚钱的app(当前比较赚钱的软件) 梦幻新诛仙挂机可以退出来吗(梦幻新诛仙挂机打怪方便的角色) 和平精英吉普车哪个地图有(和平精英吉普车在哪些地图有) 宝可梦传说阿尔宙斯未知图腾怎么抓(阿尔宙斯图鉴) 时空猎人装备秘境进阶条件(时空猎人装备秘境怎么进阶) OKExChain是什么链?OK链怎么样 门罗币怎么买?门罗币/XMR币买入和交易教程 炉石传说纳克萨玛斯的诅咒值得买吗(炉石纳克萨玛斯奖励一览) 问道手游狼和老虎哪个好(问道手游老虎好还是龙好) 艾尔登法环黄金律法怎么获得(黄金律 fate) 宝可梦传说阿尔宙斯尖牙笼进化是什么(尖牙笼进化顺序) 王者荣耀一万战力属于什么水平(王者一万多战力好打吗) 金铲铲之战s7星界龙转职删了吗(金铲铲星龙战神装备) 百度网盘限速下载速度慢怎么办(百度网盘下载慢的最佳解决办法) 和平精英创作模式怎么开无敌(和平精英创作模式怎么开无敌效果) BHT币发行价多少?BHT币发行价格和发行时间及BNBHunter项目介绍 CSPR是什么币?CSPR币购买方法? OK交易所怎么充值人民币?OK交易所人民币充值操作教程 igg游戏哪个最出名?这款放置手游登顶了日本下载榜 跨链桥是什么意思?跨链桥的原理是什么? 区块链grt币是什么币?GRT币发行价是多少? 三国志幻想大陆吕布带什么战魂(三国志幻想大陆吕布用什么战魂) 创造与魔法拔丝苹果派怎么做(创造与魔法薄苹果派) 问道手游力宝宝哪个好(问道里力宝宝哪个好) 火火钱包创建HD钱包并使用教程 YoBit交易所怎么样?YoBit交易所官网app下载方法分享 塞尔达传说武器怎么修复(塞尔达 武器怎么修复) 回合制网游哪个玩的人多(回合制网游哪个平民适合玩) 英雄联盟手游没有哪些英雄(英雄联盟手游还有什么英雄没出) 火币网币币如何转法币?usdt兑换提现人民币教程 梦幻西游手游鬼王难吗(梦幻西游手游最强鬼将) 数字货币交易平台都有哪些?比特币交易网排行榜 黑色沙漠手游石室墙壁石板怎么获得(黑色沙漠刻有纹样的石板) SHIB币有没有可能涨到1美元?shib币未来价值预测 世界公认的冷钱包有哪些?盘点十大冷钱包 消逝的光芒2怎么调亮度(消逝的光芒2怎么开灯) 问道手游风怪和雪女哪个好(问道手游风怪怎么样) COTI是什么币种?COTI币前景和未来价值分析 英雄联盟手游4级奖池有哪些皮肤(英雄联盟手游4级送英雄) 三国志幻想大陆玩什么阵容好(三国志幻想大陆 最佳阵容) 艾尔登法环可以隐藏头盔吗(艾尔登法环头像) 英雄联盟普通和wegame版有什么区别(英雄联盟wegame版和英雄联盟) 和平精英云游戏是什么(和平精英云游戏和正常有啥区别) 挖矿节点是什么意思?挖矿节点和全节点的区别 ATM是什么币种?ATM币价值分析详细介绍 艾尔登法环太刀好用吗(艾尔登法环什么类型) 全国车商都在用的四大软件(车商都在用什么软件) 简单阐述NFT交易平台是合法的吗?为什么那么多人选择NFT投资? 问道手游在哪里洗点(问道手游洗点怎么弄) GEAR是什么币种?一文了解GEAR币及价值分析 火币币币交易需要手续费吗?火币币币交易手续费多少钱 和平精英陀螺仪怎么开(和平精英陀螺仪怎么开了没反应) 新手必备:路由器WiFi详细设置对照表(路由器wifi参数设置) 精灵宝可梦可以退化吗(小智最稀有的3只精灵) CoinCorner是什么钱包?CoinCorner钱包怎么样? okex shib单笔下限是多少? 欧易shib买入和提现以及转化USDT教程 今天向大家推荐几款看智能电视节目不收费的APP(看电视不收费的软件) 和平精英亲密关系别人能否看到(和平精英亲密度关系别人能看到吗) 阴阳师判官钟情于谁(阴阳师判官钟情于谁?) 幻彩币(CHR)在哪里购买?CHR币怎么样? 波场币创始人是谁?波场币创始人详细介绍 放开那三国3魏国阵容搭配最新(放开那三国3魏国值得培养的) ProBit是什么交易所?ProBit Global全面介绍 星露谷物语哈维住在哪里(星露谷物语哈维的家在哪) 饥荒齿轮怎么获得(饥荒齿轮怎么获得的) 王者荣耀五人排位时星耀可以和铂金排位吗(五人排位时星耀可以和铂金一起吗) gate.io交易平台永续合约交易规则详解 SHFT币在哪里买?SHFT币上线交易所盘点 宝可梦传说阿尔宙斯黏丸怎么制作(精灵宝可梦 阿尔宙斯) 消逝的光芒怎么关闭麦克风(消逝的光芒 怎么开麦) 比特币以太坊哪个更适合投资?矿工为何要挖矿? PSG币在哪买?PSG币上线交易平台盘点汇总 宝可梦剑盾沙奈朵哪里抓(宝可梦剑盾沙奈朵捕捉地点) 比特币之父是谁?比特币创始人真实身份揭晓 王者荣耀道聚城买皮肤有贵族积分吗(王者荣耀道聚城消费能不能提升贵族) 帝国战纪手游装备攻略(帝国战纪 攻略) 以太坊是什么?以太坊的发展及以太币ETH历年价格走势(2016~2022) cf龙儿小淘气怎么获得(cf龙儿的专属动作视频) HEGIC是什么币种?HEGIC币前景怎么样? 公有链、私有链、联盟链的区别全面解读 USDT怎么换成BTC?USDT兑换比特币教程 LATOKEN交易所怎么样?LATOKEN安全靠谱吗? 欧易okex比特币如何提现到支付宝 和平精英如何第二次实名认证(和平精英第二次实名认证怎么弄?) 英雄联盟加载界面卡住切不出去怎么办(英雄联盟加载页面卡住) lol奶妈是哪个英雄(lol中奶妈是谁) 币安怎么交易和提现?币安交易和提现新手教程 Bitop是什么交易所?Bitop交易所全面介绍 JustSwap交易所手续费多少?JustSwap费用详细介绍 门罗币(XMR币)钱包有哪些?支持门罗币的钱包盘点

热门文章

推荐专题

更多>>

游戏推荐

更多>>