一段程序看懂比特币原理

来源: https://www.byvoid.com/zhs/blog/bitcoin-principle-program

自从比特币火起来以后,网上对比特币的解释可谓汗牛充栋,纷繁复杂。但对于程序员来说,最直接的方式莫过于直接看程序代码了。嫌比特币代码庞杂没关系,我找到一段简明扼要的代码,用来理解比特币再好不过了。

作者:byvoid来源:byvoid.com|2014-03-21 09:58 收藏 分享
年前最后一场技术盛宴 | 1.27与京东、日志易、借贷宝技术大咖畅聊智能化运维发展趋势!

自从比特币火起来以后,网上对比特币的解释可谓汗牛充栋,纷繁复杂。但对于程序员来说,最直接的方式莫过于直接看程序代码了。嫌比特币代码庞杂没关系,我找到一段简明扼要的代码,用来理解比特币再好不过了。

以下这段程序转自知乎上Wu Hao的回答。

function mine()
{
while(true)
{
longestChain = getLongestValidChain()

    -- A number that changes every time, so that you don't waste   -- time trying to calculate a valid blockHash with the same  -- input.  nonce = getNewNonce()  currentTXs = getUnconfirmedTransactionsFromNetwork()  newBlock = getNewBlock(longestChain, currentTXs, nonce)  -- http://en.wikipedia.org/wiki/SHA-2  -- and this is what all the "mining machines" are doing.  blockHash = sha256(newBlock)  if (meetReqirements(blockHash))  {  broadcast(newBlock)  -- Now the height the block chain is incremented by 1 -- (if the new block is accepted by other peers),  -- and all the TXs in the new block are "confirmed" }
}

}

function sendBTC(amount)
{
sourceTXs = pickConfirmedTransactionsToBeSpent(amount)
tx = generateTX(sourceTXs, targetAddrs, amount, fee)
signedTx = sign(tx, privateKeysOfAllInputAddress)
broadcast(signedTx)
}

下面是我的解释:

挖矿过程就是不断从比特币网络中获取所有未确认交易getUnconfirmedTransactionsFromNetwork(),把它们打包成一个区块并挂载目前最长的区块链上getNewBlock(longestChain, currentTXs, nonce),然后计算新的区块的散列值sha256(newBlock),如果散列值正好满足挖矿难度了meetReqirements(blockHash),那么就挖矿成功了。所谓挖矿难度,指的是要求的二进制散列值末尾0的个数,而散列值是碰运气生成的,除了穷举没有别的办法,要求的0个数越多挖矿的难度就越大。

付款过程就是把一些有余额的已确认交易拿出来作为发送地址pickConfirmedTransactionsToBeSpent(amount),然后根据目标地址支付一定交易费生成新的交易generateTX(sourceTXs, targetAddrs, amount, fee),并用钱包私钥对交易签名sign(tx, privateKeysOfAllInputAddress),然后广播出去。

原文链接:https://www.byvoid.com/zhs/blog/bitcoin-principle-program

一段程序看懂比特币原理相关推荐

  1. 一个动画看懂网络原理之CSMA/CD的工作原理

    一个动画看懂网络原理之CSMA/CD的工作原理 CSMA/CD协议是以太网传输中的一个重要协议,由于线路中同一时间只能允许一台电脑发送信息,否则各计算机之间就会产生干扰,为了解决这个问题,采用了CSM ...

  2. c++ socket线程池原理_一篇文章看懂 ThreadLocal 原理,内存泄露,缺点以及线程池复用的值传递问题...

    编辑:业余草来源:https://www.xttblog.com/?p=4946 一篇文章看懂 ThreadLocal 原理,内存泄露,缺点以及线程池复用的值传递问题. ThreadLocal 相信不 ...

  3. 计算机网络原理fin,一个动画看懂网络原理之TCP建立和释放过程

    一个动画看懂网络原理之TCP建立和释放过程 一.TCP的概念 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.T ...

  4. 2017春运抢票软件哪个好,教你看懂刷票原理!| 宅客周刊

    2017年第一天,当你从跨年的宿醉中逐渐清醒.你可能意识到自己搬砖的薪水还不够发几个红包,你可能意识到而十多天后回家的票还没抢到. 没问题,本期雷锋网(公众号:雷锋网)宅客周刊就给你终极解决方案.如何 ...

  5. 计算机网络中的网桥,一个动画看懂网络原理之网桥的工作原理

    一个动画看懂网络原理之网桥的工作原理 一.网桥是干什么的 网桥工作在OSI参考模型数据链路层的两端口或多端口二层网络设备,是用来连接不同网段的存储转发设备.使用网桥能扩展网络的距离或范围,还可以提高网 ...

  6. 计算机网络中 中继器的作用是,一个动画看懂网络原理之中继器工作过程

    一个动画看懂网络原理之中继器工作过程 我们在学习计算机网络技术时,涉及到网络设备时,书本上往往在介绍网卡之后,就会给大家介绍中继器,那么中继器是什么,它的作用是什么,它的工作过程又是怎样的,下面就这些 ...

  7. RocketMQ入门到入土(一)新手也能看懂的原理和实战!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 学任何技 ...

  8. mysql 大量数据 更改索引_一文看懂ICP原理--MySQL用索引去表里取数据的一种优化...

    概述 今天主要介绍一下mysql的ICP特性,可能很多人都没听过,这里用一个实验来帮助大家加深一下理解. 一.Index_Condition_Pushdown Index Condition Push ...

  9. 用python语言实现喇叭发声原理_一文看懂音频原理

    笔者博客:mwhitelab.com 笔者公众号:技术杂学铺 前言 笔者最近正好在做和声音处理有关的项目,突然对音频数字化感兴趣,想了解一下基本原理.可网上文章知识都很散.排版也不美观.因此笔者便决定 ...

  10. 一分钟看懂IoC 原理

    本人的概念总结,一分钟让你懂得Ioc原理 1.1.IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在开发中,Ioc意 ...

最新文章

  1. 2022 开工大吉 新的一年新的目标
  2. Scrapy框架的学习(3.pipeline介绍以及多个爬虫的pipeline的使用)
  3. $(function() {})
  4. 第二章 寄存器基础概念
  5. 机器学习和统计模型的差异
  6. dw显示云服务器的数据库,dw如何连接云服务器
  7. 2015年10月18日-10月24日课程作业(HA Cluster)
  8. 超声光学成像突破衍射极限
  9. 今日头条数据分析师分享有感
  10. 悼念《人月神话》作者 Fred Brooks
  11. 杨强教授漫谈《西部世界》、生成式对抗网络及迁移学习
  12. 代数表达式c语言表达式,[单选] 设floata=2,b=4,c=3;,以下C语言表达式与代数式(a+b)+c计算结果不一致的是()...
  13. zcmu-1931 wjw的剪纸
  14. 程序员如何恢复被清空的回收站——记录一下
  15. 【微信小程序】设备判断android还是ios及微信版本信息 ( 含工具类 )
  16. Mac安装photoshop错误:安装程序未能初始化
  17. 【机器人基础】机器人阻抗控制概念
  18. 项目经理如何开展工作
  19. ajax换头像,ajax切换明星头像!
  20. 统计:目前网上商店最热卖的五大类商品

热门文章

  1. Centos之故障排除
  2. 电大与152双向数据同步的方案
  3. Linux shell 正则表达式(BREs,EREs,PREs)差异比较
  4. 被误传了数千年的七句话(精简版_转载)
  5. springboot - 应用实践(1)认识springboot
  6. HTML5 新属性的讲解
  7. jmeter内存溢出解决办法
  8. mysql字段里面有16字节特殊字符替换
  9. 400. Nth Digit
  10. webpack vue-cli 常见问题总结