CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 漏洞列表
  3. 正文

jordansgo.com

2018年11月29日 689点热度 0人点赞 0条评论

jordansgo.com收藏本站找回密码开启辅助访问OTP 登录 注册 找回密码
安基网

请输入搜索内容
搜索

首页资讯软件IT技术公开课人才投稿

冰盾DDoS防火墙
冰盾DDoS防火墙
专业防护DDoS和CC攻击15年,网站和游戏服务器的保护神
点击了解详情
安基网›首页›IT技术›编程开发› 查看内容
只用200行Go代码写一个自己的区块链!
2018-1-31 11:50| 投稿: xiaotiger |来自: 互联网

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要: 区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的。这篇文章就是帮助你使用 Go 语言来实现一个简单的区块链,用不到 200 行代码来揭示区块链的原理! ...
区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的。这篇文章就是帮助你使用 Go 语言来实现一个简单的区块链,用不到 200 行代码来揭示区块链的原理!高可用架构也会持续推出更多区块链方面文章,欢迎点击上方蓝色『高可用架构』关注。

“用不到200行 Go 代码就能实现一个自己的区块链!” 听起来有意思吗?有什么能比开发一个自己的区块链更好的学习实践方法呢?那我们就一起来实践下!

因为我们是一家从事医疗健康领域的科技公司,所以我们采用人类平静时的心跳数据(BPM心率)作为这篇文章中的示例数据。让我们先来统计一下你一分钟内的心跳数,然后记下来,这个数字可能会在接下来的内容中用到。

通过本文,你将可以做到:

创建自己的区块链

理解 hash 函数是如何保持区块链的完整性

如何创造并添加新的块

多个节点如何竞争生成块

通过浏览器来查看整个链

所有其他关于区块链的基础知识

但是,对于比如工作量证明算法(PoW)以及权益证明算法(PoS)这类的共识算法文章中将不会涉及。同时为了让你更清楚得查看区块链以及块的添加,我们将网络交互的过程简化了,关于 P2P 网络比如“全网广播”这个过程等内容将在下一篇文章中补上。

让我们开始吧!
设置
我们假设你已经具备一点 Go 语言的开发经验。在安装和配置 Go 开发环境后之后,我们还要获取以下一些依赖:

go get github.com/davecgh/go-spew/spew
spew 可以帮助我们在 console 中直接查看 struct 和 slice 这两种数据结构。

go get github.com/gorilla/mux
Gorilla 的 mux 包非常流行, 我们用它来写 web handler。

go get github.com/joho/godotenv
godotenv 可以帮助我们读取项目根目录中的 .env 配置文件,这样我们就不用将 http port 之类的配置硬编码进代码中了。比如像这样:

ADDR=8080
接下来,我们创建一个 main.go 文件。之后我们的大部分工作都围绕这个文件,让我开始编码吧!

导入依赖
我们将所有的依赖包以声明的方式导入进去:

package main

import (
"crypto/sha256"
"encoding/hex"
"encoding/json"
"io"
"log"
"net/http"
"os"
"time"

"github.com/davecgh/go-spew/spew"
"github.com/gorilla/mux"
"github.com/joho/godotenv"
)
数据模型
接着我们来定义一个结构体,它代表组成区块链的每一个块的数据模型:

type Block struct {
Index int
Timestamp string
BPM int
Hash string
PrevHash string
}
Index 是这个块在整个链中的位置

Timestamp 显而易见就是块生成时的时间戳

Hash 是这个块通过 SHA256 算法生成的散列值

PrevHash 代表前一个块的 SHA256 散列值

BPM 每分钟心跳数,也就是心率。还记得文章开头说到的吗?

接着,我们再定义一个结构表示整个链,最简单的表示形式就是一个 Block 的 slice:

var Blockchain Block
我们使用散列算法(SHA256)来确定和维护链中块和块正确的顺序,确保每一个块的 PrevHash 值等于前一个块中的 Hash 值,这样就以正确的块顺序构建出链:

散列和生成块
我们为什么需要散列?主要是两个原因:

在节省空间的前提下去唯一标识数据。散列是用整个块的数据计算得出,在我们的例子中,将整个块的数据通过 SHA256 计算成一个定长不可伪造的字符串。

维持链的完整性。通过存储前一个块的散列值,我们就能够确保每个块在链中的正确顺序。任何对数据的篡改都将改变散列值,同时也就破坏了链。以我们从事的医疗健康领域为例,比如有一个恶意的第三方为了调整“人寿险”的价格,而修改了一个或若干个块中的代表不健康的 BPM 值,那么整个链都变得不可信了。

我们接着写一个函数,用来计算给定的数据的 SHA256 散列值:

func calculateHash(block Block) string {
record := string(block.Index) + block.Timestamp + string(block.BPM) + block.PrevHash
h := sha256.New
h.Write(byte(record))
hashed := h.Sum(nil)
return hex.EncodeToString(hashed)
}
这个 calculateHash 函数接受一个块,通过块中的 Index,Timestamp,BPM,以及 PrevHash 值来计算出 SHA256 散列值。接下来我们就能便携一个生成块的函数:

func generateBlock(oldBlock Block, BPM int) (Block, error) {
var newBlock Block

t := time.Now
newBlock.Index = oldBlock.Index + 1
newBlock.Timestamp = t.String
newBlock.BPM = BPM
newBlock.PrevHash = oldBlock.Hash
newBlock.Hash = calculateHash(newBlock)

return newBlock, nil
}
其中,Index 是从给定的前一块的 Index 递增得出,时间戳是直接通过 time.Now 函数来获得的,Hash 值通过前面的 calculateHash 函数计算得出,PrevHash 则是给定的前一个块的 Hash 值。

校验块
搞定了块的生成,接下来我们需要有函数帮我们判断一个块是否有被篡改。检查 Index 来看这个块是否正确得递增,检查 PrevHash 与前一个块的 Hash 是否一致,再来通过 calculateHash 检查当前块的 Hash 值是否正确。通过这几步我们就能写出一个校验函数:

func isBlockValid(newBlock, oldBlock Block) bool {
if oldBlock.Index+1 != newBlock.Index {
return false
}
if oldBlock.Hash != newBlock.PrevHash {
return false
}
if calculateHash(newBlock) != newBlock.Hash {
return false
}
return true
}
除了校验块以外,我们还会遇到一个问题:两个节点都生成块并添加到各自的链上,那我们应该以谁为准?这里的细节我们留到下一篇文章,这里先让我们记住一个原则:始终选择最长的链。

通常来说,更长的链表示它的数据(状态)是更新的,所以我们需要一个函数

能帮我们将本地的过期的链切换成最新的链:

func
Tag标签:

小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

鲜花

握手

雷人

路过

鸡蛋
收藏邀请
上一篇:MicroPython pyboard,小而强大的电子开发板,发烧友必备之选!
下一篇:Python无损音乐搜索引擎
相关阅读
• Flash Action Script从头说起六-影片剪辑的拖动和碰撞检测• AS控制声音教程---倒退和快速播放• Juniper防火墙命令行查错工具snoop的使用• Cisco网际操作系统(IOS)• 显示/隐藏任务栏• CorelDraw中改变位图指定颜色• 如何查看手机已经记住的WIFI密码?• 手机设密码保护 数据安全也有两难时• AutoCAD 2007 入门教程-三维实体的布尔运算• 方形按钮• Illustrator制作按钮一例• Burp Suite抓包、截包和改包 • iOS开发中权限再度梳理• 视频直播技术详解之推流和传输• 4 个用于构建优秀的命令行用户界面的 Python 库• 显示Tag交换的转发表信息• as+js打造页面flash播放控制器• 时间序列数据库的秘密(1)—— 介绍• iOS App开发那些事• “敢聊”用户照片及语音泄漏等隐私泄露• 畅游以太坊,DAPP上手指南• show modem log• 巧为网页添加背景音乐• React 入门教程
发表评论
最新评论
查看全部评论(53)

评论

手机数码
电脑技术
网络管理
安全攻防
编程开发
智能硬件
办公设计
网赚电商
最新

能够删除杀毒软件的新型Linux挖矿木马来袭
FIT 2019不见不散!大会详细议程公布
用户设备易被黑的十大机场
数字货币价格普遍回暖 比特币重返4200美元
红魔MARS游戏手机发布 液冷+风冷+炫彩灯+边
00后没见过 这些老产品依旧堪称神器
因MacBook和iMac屏幕进灰事件 苹果遭遇集体
美司法部指控两名伊朗黑客勒索攻击 造成300
网络黑灰产已近千亿 个人信息泄露是源头
真相令人崩溃 你在网上设的密码大多数形同
00后“白帽黑客”7天挖11企业漏洞!今年17
高达800万次下载量的npm包被黑客篡改代码,
黑客“自学成才”进行DDOS攻击,杭州一集团
工信部:监测处置网络安全威胁约3397万个
最近,互联网一个47年的协议就要停止支持了
5毛1GB太便宜!固态价格持续下降可以入手了
“多才多艺”的安卓木马Rotexy已在3个月里
专家发现一个Spotify的网络钓鱼活动
Uber被曝270万用户信息被黑客盗取 遭监管机
移动支付排名:微信第一、支付宝第二、Appl
专为AR/VR场景打造 高通正在开发全新SoC
苹果macOS曝三个零日漏洞,可导致Mac电脑被
越南黑客组织“海莲花”被指针对东南亚发起
13款恶意安卓APP被曝光,总下载量超过56万
攻击者可通过侧通道攻击暴露Facebook、XBox
聊一款专为图形工作者准备的笔记本电脑
恐怖!一天之内比特币跌破3500美元,官媒发
共享充电宝退潮后:那些海量旧电芯去了哪里
人工智能如何与现代黑客和网络犯罪作斗争
非常琐碎的Spotify钓鱼活动被专家发现
Web应用服务器性能压力测试
任天堂Switch 6.2系统被破解 黑客将于本周
虚拟机加密:超融合世界的加密策略
python编程实现局域网arp抓取室友网上浏览
9款电脑黑科技小软,开启你成就网络管理员
斯诺登:比特币终将消失 加密货币则会永生
警惕eval()的安全漏洞
自学Python入行数据挖掘,听听数据挖掘美女
马斯克考虑移居火星 建立基地不返回地球
新型 Linux 病毒,脚本超 1000 行,功能复
渗透测试——黑客如何通过QQ号获取到你的手
黑客怎么利用手机进行网络渗透测试!
黑客入侵电脑常用的5种手段,如果你电脑里
黑客的“攻”与“受”之防火墙
安卓已过时?华为、荣耀参与测试全新操作系
亏损超1亿!比特币价格大跌,两万多部矿机
乳胶枕被检出含致癌物,还是花6800买的!乳
英语不好?那你就试试TensorFlow官方中文版
Hadoop学习-块、网络拓扑、副本策略、机架
超详细的Linux时间同步配置方法
比特币跌破3500美元至2017年9月以来的最低
北京一培训公司员工为赚提成收集千万个人信
腾讯QQ发布公告:因安全功能升级 不再提供
苹果macOS曝三个零日漏洞,可导致Mac电脑被
Facebook提高发现账户劫持漏洞的赏金金额
Linux内核发现两个尚未修复的DoS漏洞
淘宝双12大促玩法曝光:必须设店铺红包
PS4出现一位黑客 把不尊重他的玩家永久断开
你的ofo押金退了吗?
2019互联网校招薪酬曝光 看你能拿到多少钱
感恩节黑客也搞起了黑五大促 但甩卖的是你
网上谍影:境外间谍情报机关通过互联网窃取
亚马逊用户电子邮箱地址在黑色星期五前夕外
vivo NEX2首次曝光:极致双面屏+22.5W超级
百度网盘六周年庆活动上线:新用户1元买一
国产手机逆势崛起 苹果三星被挤压
QQ v9.0.8.24194 体验版发布
小米蓝牙耳机Air现身FCC:10小时续航
比特币再次暴跌 感恩节当周市值损失四分之
iOS登录,退出流程整理
© 2003-2018 安基网(SAFEBASE.CN) 京公网安备11010802027589号 京ICP备10030376号-6 【手机版】Powered by Discuz 存档 联系信箱: 0daybank

标签: 暂无
最后更新:2018年11月29日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me