比原空投问答题库题解(二)

涉及到代码部分(以1.4版本为准)的回答,均可使用notepad++查找对应数字及其变量

16、 当前比原链有几个网络可供选择 ?
A:2个
B:3个
C:4个

答案:B,分别是主网mainnet、测试网testnet、单机网solonet,readme.md里面有提到

17、 在比原链上BTM的资产ID是什么?
A:ffffffffffff...ff
B:gggggggggg...gg
C:lllllllllllllllllll...ll

答案:C,只有A选项有意义,bytom-master\cmd\bytomcli\commands\template.go这里有多处搜索结果,asset_id是多个f,对应的asset_alias是BTM

18、 比原链的挖矿算法叫什么名称?
A:Bensority
B:Densority
C:Tensority

答案:C

19、 比原链官方全节点是拿什么编程语言开发的?
A:C语言
B:Java语言
C:Go语言

答案: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指令创建一定数量的资产

21、 比原链挖矿算法多长时间调整一次难度值?
A: 1024
B: 2048
C: 2016

答案:C,第4题的题解有一个变量,BlocksPerRetarget=2016,结合函数用途可知道,挖矿难度会在每2016个块调一次,其他选项搜索不出实质结果,题干有问题?

22、 比原链单次挖矿过程矩阵乘运算要运算多少次?
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,否则会因为运算速度过慢无法竞争记账权。

23、 比原链智能合约版本叫什么名称
A 智
B 正
C 晓

答案:B,比原链官博https://weibo.com/5966947038/GrJcemHXf?filter=hot&root_comment_id=0&type=comment,合约版本名为正,顺带一提上线时间是7月26日

24、 比原链的数据库使用的是 ?
A:MySQL
B: levelDB
C:sqlite

答案:B,搜整个项目,可以发现比原存储数据主要用levelDB,这点可以看Derek的教程

25、 比原链启动离线节点的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网络找其他地址

26、 比原链测试网地址开头是什么?
A: bm
B: cm
C: tm

答案:C,测试网就是testnet,用这个词在搜索,可以看到bytom-read\consensus\general.go:124里面的前缀是tm

27、 比原链浏览器允许的最短密码是几位
A: 4
B: 6
C: 8

答案:B?

28 、Coinbase中的留言信息的最大长度是 ?
A: 32 byte
B: 64 byte
C: 128 byte

答案:C,第8题中,coinbase的input被限制了留言长度,长度为128B

29、 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生成的

31、 下面 哪个算法没有在 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

34、 全节点验证区块时间合法性的上限是
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个块时间戳的中位数

35、 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值

转载于:https://www.cnblogs.com/dgutfly/p/9609256.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值