涉及到代碼部分(以1.4版本爲準)的回答,都可使用notepad++查找對應數字及其變量html
1六、 當前比原鏈有幾個網絡可供選擇 ?
A:2個
B:3個
C:4個java
答案:B,分別是主網mainnet、測試網testnet、單機網solonet,readme.md裏面有提到node
1七、 在比原鏈上BTM的資產ID是什麼?
A:ffffffffffff...ff
B:gggggggggg...gg
C:lllllllllllllllllll...llgit
答案:C,只有A選項有意義,bytom-master\cmd\bytomcli\commands\template.go這裏有多處搜索結果,asset_id是多個f,對應的asset_alias是BTM程序員
1八、 比原鏈的挖礦算法叫什麼名稱?
A:Bensority
B:Densority
C:Tensoritygithub
答案:C算法
1九、 比原鏈官方全節點是拿什麼編程語言開發的?
A:C語言
B:Java語言
C:Go語言sql
答案:C,去全球最大同性程序員交流社區github查看代碼:https://github.com/Bytom/bytom,看文件名,不是.h格式也不是.java格式,是.go格式數據庫
20、 想要建立一個比原鏈資產須要使用下列哪一個指令?
A:Create
B:Issue
C:Begin編程
答案:B,比原板塊有貼子 如何在Bytom上發佈資產?:http://8btc.com/thread-221007-1-1.html提到能夠用Issue指令建立必定數量的資產
2一、 比原鏈挖礦算法多長時間調整一次難度值?
A: 1024
B: 2048
C: 2016
答案:C,第4題的題解有一個變量,BlocksPerRetarget=2016,結合函數用途可知道,挖礦難度會在每2016個塊調一次,其餘選項搜索不出實質結果,題幹有問題?
2二、 比原鏈單次挖礦過程矩陣乘運算要運算多少次?
A: 64
B: 128
C: 256
答案:C,以256這個關鍵詞搜索,找到了好多與tensority和ed25519有關的函數。
其中一個搜索結果在bytom-master\mining\tensority\cgo_algorithm\lib\BytomPoW.h裏面,這個C語言頭文件定義大小爲256*256的矩陣,相乘函數叫mul(),以這個函數爲線索搜索,發現本文件下有函數iter_mineBytom,k循環下執行4次,j循環下執行2次,循環下執行16次(每次i自增2),運行2次矩陣乘,總共256次。函數執行層次以下:
bytom-master\mining\tensority\ai_hash.go:54
->bytom-master\mining\tensority\cgo_algorithm\algorithm_simd.go:24
->bytom-master\mining\tensority\cgo_algorithm\lib\cSimdTs.cpp:37
->bytom-master\mining\tensority\cgo_algorithm\lib\BytomPoW.h:348
前3層均沒有循環,矩陣乘要執行256次
另外一個關於mul的搜索結果在bytom-read\mining\tensority\go_algorithm\matrix.go:20,也是對256*256的矩陣乘,循環套3層,4*32*2次mc.Mul(ma, mb.T())。函數執行層次以下:
bytom-master\mining\tensority\ai_hash.go:56->
bytom-master\mining\tensority\go_algorithm\algorithm.go:7->
bytom-master\mining\tensority\go_algorithm\matrix.go:20
前2層均沒有循環,矩陣乘要執行256次
值得注意的是,bytom-master\mining\tensority\ai_hash.go:52的algorithm函數是根據SIMD可否使用來決定調用哪一個算法,不管經過go函數(相對偏慢)仍是c函數,矩陣乘都要執行256次。因此挖礦用結點必須用SIMD,不然會由於運算速度過慢沒法競爭記帳權。
2三、 比原鏈智能合約版本叫什麼名稱
A 智
B 正
C 曉
答案:B,比原鏈官博https://weibo.com/5966947038/GrJcemHXf?filter=hot&root_comment_id=0&type=comment,合約版本名爲正,順帶一提上線時間是7月26日
2四、 比原鏈的數據庫使用的是 ?
A:MySQL
B: levelDB
C:sqlite
答案:B,搜整個項目,能夠發現比原存儲數據主要用levelDB,這點能夠看Derek的教程
2五、 比原鏈啓動離線節點的flag是 ?
A:--solo_mode
B: --isolate_mode
C: --vault_mode
答案:C,vault_mode這個關鍵詞在bytom-read\config\config.go:94能看到,命令是否含vault_mode決定VaultMode這個變量的值,bytom-read\netsync\handle.go:97能夠看到,若是設置這個變量爲否,則這個結點會在p2p網絡找其餘地址
2六、 比原鏈測試網地址開頭是什麼?
A: bm
B: cm
C: tm
答案:C,測試網就是testnet,用這個詞在搜索,能夠看到bytom-read\consensus\general.go:124裏面的前綴是tm
2七、 比原鏈瀏覽器容許的最短密碼是幾位
A: 4
B: 6
C: 8
答案:B?
28 、Coinbase中的留言信息的最大長度是 ?
A: 32 byte
B: 64 byte
C: 128 byte
答案:C,第8題中,coinbase的input被限制了留言長度,長度爲128B
2九、 UTXO最少須要幾個塊的確認才能夠被花費?
A: 0
B: 1
C :6
答案:B?估計是由於程序沒有規定必須肯定6個。。。反正代碼也找不到實質性的線索
30 、比原鏈創世區塊挖出時間?
A :2018年4月24日
B :2018年4月25日
C :2018年4月26日
答案:A,bytom-master\config\genesis.go:31是主網的創世區塊,timestamp是1524549600,在站長工具http://tool.chinaz.com/Tools/unixtime.aspx轉換下就知道,這個區塊是2018-4-24 14:00生成的
3一、 下面 哪一個算法沒有在 tensority 中被使用?
A :SHA3-256
B :FNV
C: Secp256k1
答案:C,查看tensority論文可知道,前2種算法的名稱在論文中屢次出現。此外,secp256k1做爲比特幣的公私鑰算法,在比原主代碼沒搜到
32 、一個區塊最多可承載多少GAS的交易?
A:625000
B:1250000
C:10000000
答案:C.作這道題以前,要先理清BTMtoken和BTMgas的關係。須要與37題聯動。
只有10000000這個數值有意義,對應變量MaxBlockGas,在bytom-master\mining\mining.go:70的NewBlockTemplate(c *protocol.Chain, txPool *protocol.TxPool, accountManager *account.Manager) (b *types.Block, err error)函數裏面用到2次。freewind教程第14篇:剝開比原看代碼-比原的挖礦流程是什麼樣的 就有講到,挖礦過程首先要在這個函數裏面生成模板(把未打包交易拿到),再計算哈希值爭奪記帳權,這個函數的做用是把未打包的交易記錄至鏈,可是一次只能打包gas總值不超10000000GAS的全部交易。
關於token和gas的關係,下列有MaxGasAmount這個變量,關聯到bytom-master\protocol\validation\tx.go:47的函數(g *GasState) setGas(BTMValue int64, txSize int64) error(這個函數只在測試函數裏出現過,哪位仁兄能說清楚這個函數之後要用在哪),推測BTMValue就是BTMtoken的聰數,1gas=1BTMsatoshi
33 、全節點驗證區塊時間合法性的下限是?
A:大於前6個塊的平均值
B: 大於前6個塊的中位數
C:大於前11個塊的中位數
答案:C
3四、 全節點驗證區塊時間合法性的上限是
A:大於前一個區塊時間
B: 大於服務器當前時間
C:大於服務器當前時間 + 1小時
答案:C
這2題要放一塊看
bytom-master\consensus\general.go:31和32可找到跟着2道題相關的變量(這個1小時的指代時間3600秒找不到,結果找11的時候找到了不一樣的表示法60*60.。。)3600是MaxTimeOffsetSeconds,11是MedianTimeBlocks,在bytom-master\protocol\validation\block.go:25可找到函數checkBlockTime(b *bc.Block, parent *state.BlockNode) error
第1個判斷b.Timestamp > uint64(time.Now().Unix())+consensus.MaxTimeOffsetSeconds,很明顯就是說倆區塊的間隔時間不能超過3600秒
第2個判斷b.Timestamp <= parent.CalcPastMedianTime(),追蹤函數至bytom-master\protocol\state\blockindex.go:84的(node *BlockNode) CalcPastMedianTime() uint64,能夠看出是計算前11個塊時間戳的中位數
3五、 tensority 中 將哪兩個數值進行 運算 和 bits 比較?
A:block_header & seed
B: block_header & bits
C: block_header_hash & seed
答案:C,答案比較難找。。。
一樣仍是找這篇教程:剝開比原看代碼-比原的挖礦流程是什麼樣的 裏面有講到計算哈希值爭奪記帳權。這之中,其中重要的一個函數是bytom-master\consensus\difficulty\ difficulty.go:120的CheckProofOfWork(hash, seed *bc.Hash, bits uint64) bool,裏面有一個執行的函數tensority.AIHash.Hash(hash, seed),第1個參數在使用CheckProofOfWork的地方處處找,確認是block_header計算以後的hash值