真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么用ruby代碼實現(xiàn)區(qū)塊鏈

本篇內容主要講解“怎么用ruby代碼實現(xiàn)區(qū)塊鏈”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用ruby代碼實現(xiàn)區(qū)塊鏈”吧!

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站建設、成都網(wǎng)站設計、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務鳳城,10年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108

區(qū)塊鏈 = 區(qū)塊組成的鏈表?

blockchain.ruby:

class Block

  attr_reader :timestamp
  attr_reader :data
  attr_reader :previous_hash
  attr_reader :hash

  def initialize(data, previous_hash)
    @timestamp     = Time.now
    @data          = data
    @previous_hash = previous_hash
    @hash          = calc_hash
  end

  def self.first( data="Genesis" )    # create genesis (big bang! first) block
    ## note: uses all zero for previous_hash ("0")
    Block.new( data, "0000000000000000000000000000000000000000000000000000000000000000" )
  end

  def self.next( previous, data="Transaction Data..." )
    Block.new( data, previous.hash )
  end

private

  def calc_hash
    sha = Digest::SHA256.new
    sha.update( @timestamp.to_s + @previous_hash + @data )
    sha.hexdigest
  end

end  # class Block


#####
## let's get started
##   build a blockchain a block at a time

b0 = Block.first( "Genesis" )
b1 = Block.next( b0, "Transaction Data..." )
b2 = Block.next( b1, "Transaction Data......" )
b3 = Block.next( b2, "More Transaction Data..." )

blockchain = [b0, b1, b2, b3]

pp blockchain

執(zhí)行上面程序:

~$ ruby blockchain.rb

將會輸出類似下面的結果:

[#,
 #,
 #,
 #]

你先等等,難道區(qū)塊鏈就是鏈表嗎?

當然不是。我們使用鏈表的目的是獲得指向前一個塊的引用:在區(qū)塊鏈中,每個塊都必須有一個標識符, 而這個標識符還必須依賴于前一個塊的標識符,這意味著如果你要替換區(qū)塊鏈中的一個塊,就必須重算 后面所有塊的標識符。在上面的實現(xiàn)中,你可以看到我們調用calc_hash方法計算塊的標識符時,需要 傳入前一個塊的簽名,就是這個意思。

那工作量證明算法呢?

現(xiàn)在讓我們添加工作量證明算法的實現(xiàn)。在經(jīng)典的區(qū)塊鏈中,你必須通過計算得到00開頭的哈希作為塊 的標識符,前綴的0越多,計算量就越大,也就越困難。出于簡單考慮,讓我們將難度設定為兩個前綴0, 也就是說,2^16 = 256種可能。

blockchain_with_proof_of_work.rb:

def compute_hash_with_proof_of_work( difficulty="00" )
  nonce = 0
  loop do
    hash = calc_hash_with_nonce( nonce )
    if hash.start_with?( difficulty )  
      return [nonce,hash]     ## bingo! proof of work if hash starts with leading zeros (00)
    else
      nonce += 1              ## keep trying (and trying and trying)
    end
  end
end

def calc_hash_with_nonce( nonce=0 )
  sha = Digest::SHA256.new
  sha.update( nonce.to_s + @timestamp.to_s + @previous_hash + @data )
  sha.hexdigest
end

現(xiàn)在我們運行這個增加了POW機制的區(qū)塊鏈程序:

~$ ruby blockchain_with_proof_of_work.rb

輸出結果如下:

[#,
 #,
 #,
 #]

到此,相信大家對“怎么用ruby代碼實現(xiàn)區(qū)塊鏈”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!


網(wǎng)站欄目:怎么用ruby代碼實現(xiàn)區(qū)塊鏈
路徑分享:http://weahome.cn/article/jssppo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部