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


    涉及到代码部分(以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-mastercmdytomclicommands emplate.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-mastermining ensoritycgo_algorithmlibBytomPoW.h里面,这个C语言头文件定义大小为256*256的矩阵,相乘函数叫mul(),以这个函数为线索搜索,发现本文件下有函数iter_mineBytom,k循环下执行4次,j循环下执行2次,循环下执行16次(每次i自增2),运行2次矩阵乘,总共256次。函数执行层次如下:

    bytom-mastermining ensorityai_hash.go:54

    ->bytom-mastermining ensoritycgo_algorithmalgorithm_simd.go:24

    ->bytom-mastermining ensoritycgo_algorithmlibcSimdTs.cpp:37

    ->bytom-mastermining ensoritycgo_algorithmlibBytomPoW.h:348

    前3层均没有循环,矩阵乘要执行256次

    另一个关于mul的搜索结果在bytom-readmining ensoritygo_algorithmmatrix.go:20,也是对256*256的矩阵乘,循环套3层,4*32*2次mc.Mul(ma, mb.T())。函数执行层次如下:

    bytom-mastermining ensorityai_hash.go:56->

    bytom-mastermining ensoritygo_algorithmalgorithm.go:7->

    bytom-mastermining ensoritygo_algorithmmatrix.go:20

    前2层均没有循环,矩阵乘要执行256次

    值得注意的是,bytom-mastermining ensorityai_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-readconfigconfig.go:94能看到,命令是否含vault_mode决定VaultMode这个变量的值,bytom-read etsynchandle.go:97可以看到,如果设置这个变量为否,则这个结点会在p2p网络找其他地址

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

    答案:C,测试网就是testnet,用这个词在搜索,可以看到bytom-readconsensusgeneral.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-masterconfiggenesis.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-masterminingmining.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-masterprotocolvalidation x.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-masterconsensusgeneral.go:31和32可找到跟着2道题相关的变量(这个1小时的指代时间3600秒找不到,结果找11的时候找到了不同的表示法60*60.。。)3600是MaxTimeOffsetSeconds,11是MedianTimeBlocks,在bytom-masterprotocolvalidationlock.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-masterprotocolstatelockindex.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-masterconsensusdifficulty difficulty.go:120的CheckProofOfWork(hash, seed *bc.Hash, bits uint64) bool,里面有一个执行的函数tensority.AIHash.Hash(hash, seed),第1个参数在使用CheckProofOfWork的地方到处找,确认是block_header计算之后的hash值

  • 相关阅读:
    DTM DEM DSM 介绍
    VC自定义消息
    一句话设计模式基本原则
    抽空写了一个ICON图标的转换程序
    (转载)C# 中的委托和事件
    类的字段和静态字段的使用
    Command 对象总结
    使用 DataReader 检索数据的步骤
    分享一部电影
    C#处理ACCESS数据库
  • 原文地址:https://www.cnblogs.com/dgutfly/p/9609256.html
Copyright © 2020-2023  润新知