区块链概念 That You Must Know 第四期(4)

秋纹
• 阅读 2151

第四期 简介go语言下挖矿难度的代码实现(4)

卡酷少

Wechat:13260325501


之前的都讲完了,因为代码太多导致文章比较长。所以新增了一片。在这最后的最后,我们将把挖矿的过程最终展示在大家面前。建议大家也将代码在goland里实际跑一跑,会更有感觉。

挖矿难度的代码实现
  • 话不多说,直接给代码实现。

/*
代码逻辑:
    第一步:导库
    第二步:声明并将各项值初始化,共5个数据:blockId(区块id),preHash,timeStamp(区块诞生时间),data,nounce(不明白为什么需要这些数据的同学可以找回第四期(2)篇看一下)
    第三步:声明并创建一个哈希对象,shaObj
    第四步:迭代调用函数isValidHashDifficulty来判断哈希值有效与否。迭代中将nounce值以自增1的方式变化,再每次配合其他信息去生成当前哈希。
*/

package main

import (
    "fmt"
    //第1步
    "crypto/sha256"
)

func main() {
    //第2步
    var (
        blockId    = "100"
        preHash    = "0000fedaa499741317a18f1ad626f933776ad24822cb422634978bfe8005c94b"
        timeStamp = "Thu, 26 Apr 2018 03:30:54 GMT"
        data       = "A -> B 100"
        nonce      = 0  //将nounce初始化为0   (此处注意:nounce为int类型,但是在哈希时算数运算符两边的数据类型必须一致,所以要在字符串拼接时转换类型)
        hashString = "" //将当前hash初始化为空字符串
    )
    //第3步
    shaObj := sha256.New()
    //第4步
    for !isValidHashDifficulty(hashString, 4) {
        nonce++
        input := blockId + preHash + timeStamp + data + string(nonce)
        shaObj.Write([]byte(input))
        hashString = fmt.Sprintf("%x", shaObj.Sum(nil));
        fmt.Println(hashString)//这里打印每次用于匹配的哈希值只是为了将挖矿的过程形象展示,并没有额外含义,写不写都可以
    }
    //当生成有效哈希时,挖矿成功,迭代停止。
    //现实中挖矿时不用停止,继续挖下一个节点即可。
}

func isValidHashDifficulty(h string, difficulty int) bool {
    b := len(h) // 64
    var i int
    for i = 0; i < b; i++ {
        if h[i] != '0' {
            break
        }
    }
    return i >= difficulty
}
  • 运行结果没有比较好的展示方式。这里我们只截取一部分。建议大家可以把代码考下来跑一跑。

区块链概念 That You Must Know 第四期(4)

  • 如果你已经看过之前的篇章,相信这代码的原理你已经了然于胸了。下面我们只给出一些注意事项。
  1. 我们给出的5项数据只是一个简单举例,并没有完全列举生成区块哈希时参与的所有数据。
  2. 我们为了简便将blockId设为了string类型,并不代表区块id一定是字符串类型的。
  3. 这里的哈希难度是我们认为设定的,并不是真实哈希难度的生成方法。真是的哈希难度是由很复杂的数学模型实现的,是会根据当前全网算力自动调整的。
  • OK。到此挖矿的真相已经大白了。不知道大家有没有豁然开朗的感觉呢?。。。接下里我们就相约一起探索更多区块链的内容吧!
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
Linux应急响应(三):挖矿病毒
0x00前言随着虚拟货币的疯狂炒作,利用挖矿脚本来实现流量变现,使得挖矿病毒成为不法分子利用最为频繁的攻击方式。新的挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染的成功率,通过利用永恒之蓝(EternalBlue)、web攻击多种漏洞(如Tomcat弱口令攻击、WeblogicWLS组件漏洞、Jboss
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
NEO从源码分析看UTXO交易
_0x00前言_社区大佬:“交易是操作区块链的唯一方式。”_0x01交易类型_在NEO中,几乎除了共识之外的所有的对区块链的操作都是一种“交易”,甚至在“交易”面前,合约都只是一个小弟。交易类型的定义在Core中的TransactionType中:源码位置:neo/Core/TransactionType
Wesley13 Wesley13
3年前
NEO从源码分析看网络通信
_0x00前言_NEO被称为中国版的Ethereum,支持C和java开发,并且在社区的努力下已经把SDK拓展到了js,python等编程环境,所以进行NEO开发的话是没有太大语言障碍的。比特币在解决拜占庭错误这个问题时除了引入了区块链这个重要的概念之外,还引入了工作量证明(PoW)这个机智的解决方案,通过数学意义上的难题来保证每个
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
秋纹
秋纹
Lv1
雁啼红叶天,人醉黄花地,芭蕉雨声秋梦里。
文章
3
粉丝
0
获赞
0