博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
比原空投问答题库题解(二)
阅读量:6424 次
发布时间:2019-06-23

本文共 4702 字,大约阅读时间需要 15 分钟。

涉及到代码部分(以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

你可能感兴趣的文章
C#中三种截屏方式总结
查看>>
EF架构~LinqToEntity里实现left join的一对一与一对多
查看>>
Spring.net 学习笔记之ASP.NET底层架构
查看>>
C# System.Windows.Forms.WebBrowser中判断浏览器内核和版本
查看>>
Java 动态太极图 DynamicTaiChi (整理)
查看>>
Web APi之Web Host消息处理管道(六)
查看>>
微信公众平台后台编辑器上线图片缩放和封面图裁剪功能
查看>>
git使用教程2-更新github上代码
查看>>
张掖百公里,再次折戟
查看>>
SAP QM Batch to Batch的转移过账事务中的Vendor Batch
查看>>
本期最新 9 篇论文,帮你完美解决「读什么」的问题 | PaperDaily #19
查看>>
图解SSIS监视文件夹并自动导入数据
查看>>
Lucene.Net 2.3.1开发介绍 —— 四、搜索(一)
查看>>
人工智能将如何变革视频监控行业?
查看>>
MyBatis Review——开发Dao的方法
查看>>
阿里云容器宣布开放支持Kubernetes托管服务
查看>>
只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题
查看>>
Linux_FTP服务器
查看>>
Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
查看>>
技术研发国产化进程加快 看传感器企业如何展示十八般武艺
查看>>