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

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

时间:2025-11-08 04:34:08来源:525游

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

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创建区块链的资料请关其它相关文章!


TOKOK怎么注册交易?TOKOK交易所注册买币交易操作步骤教程 Sunbit交易所合约交易新手操作教程 欧易新手使用教程 欧易入门级使用教程完整版 火币永续合约规则有哪些? 电脑无权限访问网络是什么问题 电脑显示无网络访问权限怎么解决 币安简版怎么买币? 币安简版和专业版的区别对比 Bitpie知识库:如何将交易所的币提到比特派钱包 无线路由器不会设置怎么办(路由器不会设置找谁) 问道手游转换门派需要多少钱(问道手游转换门派需要什么) gta5改装铺怎么解锁(gta5改装铺解锁铬合金吗) c盘的垃圾文件在哪个文件夹?如何清除电脑c盘的垃圾文件 币圈bsc是什么意思呢 BSC究竟是什么? 公认的五大0氪金游戏(有没有0氪金的手游) 王者荣耀狂铁S26怎么出装(王者狂铁最强出装视频) 王者荣耀姜子牙S26怎么出装(王者荣耀姜子牙最强出装2020) ST概念币是什么意思?ST概念币种有哪些? 我有10个比特币怎么卖掉?比特币怎么买卖交易赚钱 阴阳师萤草怎么提高加血量(阴阳师萤草值得培养吗?) 在国内怎么买比特币最安全?如何购买比特币教程 RSS3币在哪买?RSS3币上线交易所大盘点 江南百景图文藤怎么获得(江南百景图文腾) 币本位合约什么意思?币本位合约交易新手教程 cf信誉积分怎么查询(cf官网) 区块链概念股是什么?区块链概念股有什么作用? 派币2024年官方最新消息_派币2024年官方最新消息数字 一个全部提现官方红包版有哪些(一块提现手赚软件) 比特币被套是什么意思?比特币被套住怎么办? 仙剑世界3手游哪个职业厉害?仙剑世界3最强新手攻略 创造与魔法农耕管理台有什么用(创造与魔法农业) 上链查证什么意思啊 上链查证的工作流程是怎样的? 区块链ANY币在哪买?ANY币上线交易所大盘点 宝可梦传说阿尔宙斯桃发在哪里(阿尔宙斯用法) 动漫acg类养成手游有哪些(好玩的acg手游) 宝可梦阿尔宙斯传说亲密度怎么刷(阿尔宙斯怎么得) atoken钱包安卓怎么下载?AToken钱包余额怎么提现? 新出的角色类大型网游有哪些(新出角色扮演网游) Firefox浏览器显示储存的密码?浏览器显示密码的方法详解 王者荣耀干将莫邪S26怎么出装(2020王者荣耀干将莫邪怎么玩) 和平精英转区要两边都30级吗(和平精英转区是不是只能转一次) UNFI币怎么样以及UNFI币值得投资吗? 将EOS私钥导入AToken钱包的方法 BTC100交易所怎么提现?BTC100交易所提现人民币教程 梦幻新诛仙鬼王宗带什么元素法宝(梦幻新诛仙鬼王宗带什么宝石) 梦幻西游手游69到80需要多少天(梦幻西游手游69到80级需要多少经验) DBOSS交易所怎么提现?DBOSS交易所提现人民币教程 雅币(YAC)是什么币?雅币官网总量及交易平台介绍 宝可梦晶灿钻石心之鳞片在哪(宝可梦 晶灿钻石) 比特币为什么波动大?原因有哪些? imToken钱包连接DOTC使用教程 电脑哪个加速器好用而且免费?三款支持试用的加速器值得体验 太强了!内置六条搜索引擎接口(内置搜索引擎的网站) 深度诠释什么是区块链乐高"DeFi+永续合约"新玩法 电脑上u盘打不开是怎么回事?竟然提示需要格式化怎么办 LUNA币价格今日行情价格,LUNA币今日实时价格历史走势图 盘点2024最值得投资的十大加密货币,(非交易所排行) ZT交易所怎么样?ZT交易所真的正规吗? dnf105装备可以融合奥兹玛吗(dnf奥茨玛装备融合) 星露谷物语大眼鱼在哪里钓(星露谷物语鲶鱼在哪里钓) 魔兽世界银色黎明战袍如何获得(银色黎明战袍如何获得) 易欧OKY官网怎么注册?易欧交易所官网-OKX欧易全球官方网站入口 Curve交易所怎么样?Curve交易所安全吗? 哪些经典游戏有内置管理菜单(游戏内置功能菜单什么意思) 冰原守卫者哪里油脂多(冰原守卫者游戏视频) 魔兽世界赛季服怎么进(魔兽世界赛季服是什么意思) 冰原守卫者要塞多少级可以打(冰原守卫者怎么升级快) 哪个卡牌游戏好玩不氪金(好玩不氪的卡牌手游) 以太坊ETH挖矿教程 DGCX交易所官网的介绍,DGCX交易所官网地址登录入口 区块链NFT是什么意思?区块链NFT核心价值分析 洛克王国深渊罗隐怎么获得(洛克王国深渊罗隐如何获得) 精灵宝可梦可以退化吗(小智最稀有的3只精灵) 三国志幻想大陆锻造神台攻略(三国志幻想大陆 神锻) 和平精英龙息弹怎么获得(和平精英龙息炮怎么开启) 在火币网如何把ETH转换成USDT?火币网买卖手续费怎么算? UberPay Wallet是什么钱包?UberPay钱包支持币种安全性介绍 OTCBTC交易所如何使用场外交易购买USDT?详细图文教程 CoinSpot是什么钱包?CoinSpot钱包怎么样? 问道手游60级以后怎么升级(问道手游60级怎么升级快) 方舟生存进化怎么存档(方舟生存进化怎么存档 手机版存档方法) 和平精英怎么隐藏王牌印记(和平精英隐藏王牌印记出生岛) 普通人如何挖比特币?挖比特币的原理以及详细流程 王者荣耀邮箱里的东西不领取会不会没(王者邮件不领会过期吗) 有什么好玩的卡牌策略手机游戏(卡牌策略手游排行榜) 显卡评分最高的天梯图:选购秘籍大公开 炒币看几日线比较好?炒币看k线有用吗? 可玩度最高的5款单机游戏(可玩性最高的单机游戏) DX币怎么买?DX币买入和交易教程图解 CEG是什么交易所?CEG交易所怎么样? 有哪些福利多的卡牌游戏(福利游戏哪个好) 慢!慢!慢!百度网盘怎么还没被淘汰(百度云盘凭什么这么慢) steam官网打开报错/无法打开怎么办(打开不了steam官网) 比特币害我家破人亡是真的吗?在币圈怎么用几千赚几十万 2023传奇手游排行榜前十名不充钱(2020传奇手游排行榜好玩不花钱) 好玩热血的传奇手游哪里玩(热血传奇手游值得玩吗) 电脑fps低是显卡的问题吗 ?电脑fps低怎么办 正规的数字货币交易平台有哪些?全球数字货币交易所排名前十 让硬盘价格暴涨、甚至断货的Chia是什么? 有哪些魔幻系列rpg手游(魔幻类rpg游戏) HashKey国内可以开户吗?香港HashKey交易所大陆用户KYC教程 AXS是什么币种?一文读懂AXS币价值前景和交易所盘点

热门文章

推荐专题

更多>>

游戏推荐

更多>>