作者:Happypeter / 來源:Nervos Talk
基本原理介紹
動手之前,先對各個組件和概念進行一下介紹。
挖 CKB 之前,我得先有一個自己的 CKB 節點,那么什么叫一個節點,也就是 node 呢?答案其實很簡單
節點就是一個安裝了 CKB 客戶端的計算機
稍后我會給大家演示怎么下載客戶端并進行安裝的。
另外,什么是 CKB 的測試網呢?CKB 是一個區塊鏈項目,所以基本結構是點對點的,這就意味著整個網絡上沒有服務器,所有的節點就組成了整個網絡,各個節點間通過平等通信來達成對數據的共識,這樣保證了整條區塊鏈是可以被信賴的。測試網是區別于主網來說的,主要是用于測試目的。
SDK 是一些方便我們跟 CKB 網絡進行交互的代碼。本期咱們會使用 Javascript 版本的 SDK 。所以最好你對 Nodejs 和 Javascript 要有基本的了解。如果你平常喜歡用其他語言開發的話,官方的文檔網站上 https://docs.nervos.org 有其他語言的 SDK 的介紹。
整個的過程是這樣的。首先要搭建一個節點,然后使用 SDK 來生成自己的錢包,修改節點配置使用自己的錢包,這樣挖礦獎勵才能到自己手里。然后就開始挖礦過程,也就是用我的筆記本的算力去運算一個滿足網絡要求的哈希值,運算成功之后就相當于找到了當前 block 的 Seal 也就是封印。有了封印就成功制作了這個區塊,也就可以把這個區塊廣播到全網獲得挖礦獎勵了。最后,可以到測試網的區塊瀏覽器上去查看一下最終的結果,例如看看是不是地址上真正有了幣。
最后要提醒的是,測試網每兩周就會重置一次,到時候所有的幣也就都清空了。
運行一個節點
下面來搭建一下節點。
首先,從官方的 Github 倉庫,下載二進制包
wget https://github.com/nervosnetwork/ckb/releases/download/v0.12.0/ckb_v0.12.0_darwin_amd64.zip
解壓縮
unzip ckb_v0.12.0_darwin_amd64.zipcd ckb_v0.12.0_darwin_amd64
接下來把 ckb 變成一個系統命令。我們這里做的就是一個常見的 Unix 操作,創建了一個符號鏈接,不過如果你不理解什么是符號鏈接也沒關系的,不影響后續的操作。
sudo ln -snf "$(pwd)/ckb" /usr/local/bin/ckb
到底這個命令是不是生效了呢?
ckb --version
可以看到輸出的版本號即可。
這樣 CKB 客戶端安裝就成功了。接下來可以運行命令來生成測試網的配置文件。
ckb init -C ckb-testnet --spec testnet
創建一個文件夾叫 ckb-testnet
,里面保存了配置文件。
進入這個文件夾,啟動 CKB 。
cd ckb-testnet ckb run
終端輸出中可以看到正在從其他節點下載整條區塊鏈,過程的確是需要一些時間的。區塊鏈瀏覽器的首頁 https://explorer.nervos.org/ 2 上可以看到最新的塊高度,這樣我們可以大概感覺出下載整條鏈需要多久。
下載完畢之后,我們的節點就運行起來了,可以慶祝一下了。
使用自己的錢包
現在需要來生成自己的錢包,替換掉節點配置中默認的錢包,這樣挖礦獎勵才能到我們自己手里。
首先要創建一個 Nodejs 的項目。注意,這個項目不是節點的一部分,我們只是用它來生成一下錢包。
$ node --version v10.10.0
代碼里面會用到 async/await 這樣的比較新的 Javascript 的功能,所以要確保 Nodejs 版本不能太老。我本地是10.10.0,你那邊保證不低于這個版本就好了。
mkdir gen-walletcd gen-wallet npm init -y
創建文件夾來存放這個項目,運行 node init
來創建 package.json 文件。
yarn add @nervosnetwork/ckb-sdk-core
SDK 可以作為一個 npm 包來安裝。
下面創建一下 index.js 文件,里面的代碼是從 SDK 倉庫 https://github.com/nervosnetwork/ckb-sdk-js 的 demo 里面摘出來的。
const EC = require('elliptic').ecconst Core = require('@nervosnetwork/ckb-sdk-core').defaultconst Address = require('@nervosnetwork/ckb-sdk-address').defaultconst ec = new EC('secp256k1')const privateKey = ec.genKeyPair()const address = new Address(privateKey, { prefix: 'ckt' })console.log('privateKey: ', '0x' + address.getPrivateKey())console.log('address: ', address.value)const nodeUrl = process.env.NODE_URL || 'http://localhost:8114'const core = new Core(nodeUrl)const bootstrap = async () => { const systemCellInfo = await core.loadSystemCell() const SYSTEM_ENCRYPTION_CODE_HASH = core.rpc.paramsFormatter.toHash( systemCellInfo.codeHash ) const myAddressObj = core.generateAddress(privateKey) const blake160edPublicKey = core.utils.blake160(myAddressObj.publicKey, 'hex') const script = { codeHash: SYSTEM_ENCRYPTION_CODE_HASH, args: ['0x' + blake160edPublicKey] } console.log('\nscript: ', script) } bootstrap()
要生成新的錢包,運行
$ node index.jsprivateKey: 0x25395da41ffb99c007ef1e0e2621381577faeeeec486d0943894bba0edacbaebaddress: ckt1q9gry5zgckljj20cxh4k33ufu3q2kxxx2jv0cmk4ykgkhcscript: { codeHash: '0x9e3b3557f11b2b3532ce352bfe8017e9fd11d154c4c7f9b7aaaa1e621b539a08', args: [ '0xc5bf2929f835eb68c789e440ab18c65498fc6ed5' ] }
輸出中的前兩項就是錢包了,錢包就是一個公鑰加一個私鑰。下面的 script 這一項是錢包的另外一種形式,當前其中是不包含私鑰的。可以用這些內容區替換 ckb.toml 中的對應內容。
Ctrl-C 停下 ckb 進程,然后重啟一下,就可以加載新的配置了。
要進行挖礦,還要新開一個終端窗口,運行
ckb miner
這樣就開始了挖礦。注意這里的輸出,一般幾分鐘之后,就可以看到彈出了這樣的信息
2019-05-22 22:04:56.210 +08:00 main INFO miner found seal: Seal { nonce: 12598543649063525489, proof: 0xf9030000ab350000ad3a0000ab4000007f4600001e4b00005d5200003e5b0000625d00003d6200001e6f000069780000 }
這就意味著找到 Seal 了,也就是找到了一個區塊的封印了,這就意味著成功挖出了一個區塊。
可以到區塊鏈瀏覽器 https://explorer.nervos.org 2 中,搜索一下我的錢包地址,這樣就可以看到是否收到獎勵了。
結論
好,這就是本期的主體內容。咱們一起搭建了一個 CKB 的節點,然后挖出了區塊。希望你能喜歡這個視頻,我是 Peter ,咱們下次再見。
鏈接:
-
原文鏈接:https://happycryptoschool.org/007-ckb-mine/( 內含視頻教程)