频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
一段程序让你如何看懂比特币原理
2018-01-31 11:47:08         来源:Julia & Rust & Python  
收藏   我要投稿

一段程序看懂比特币原理

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

作者: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)  

    -- https://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),然后广播出去。

点击复制链接 与好友分享!回本站首页
上一篇:软件发版:版本号管理
下一篇:硬件IIC和软件IIC的区别
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站