涉及到代码部分(以1.4版本为准)的回答,均可使用notepad++查找对应数字及其变量
1、比原链使用什么共识算法?
A:POW
B:POS
C:POB
A,无需解释,咱们BTM有tensority工作量证明算法
2、比原链每笔BTM交易使用的UTXO上限是多少?
A:19
B:20
C:21
C,原因不明
3、比原Tensority算法中 seed 多少个区块调整一次?
A:128
B:256
C:512
答案:B
关于A:128的搜索结果:bytom-masterconsensusgeneral.go:35,变量名为CoinbaseArbitrarySizeLimit
变量名查找结果:bytom-masterprotocolvalidation x.go:293,对应函数名为checkValid(vs *validationState, e bc.Entry) (err error)
代码片段:
if e.Arbitrary != nil && len(e.Arbitrary) > consensus.CoinbaseArbitrarySizeLimit {
return ErrCoinbaseArbitraryOversize
}
推测是校验coinbase长度,使coinbase长度不超128
关于B:256的搜索结果:查找结果偏多,在bytom-masterconsensusgeneral.go:27找到SeedPerRetarget变量
变量名查找结果:bytom-masterprotocolstatelockindex.go:114,可看出如果区块高度node.Height是256的倍数时(为0返回创世区块号)返回本哈希值指向的下一个哈希值,否则返回的就是本区块的种子值
关于C:512的查找结果:多数与btcd和vandor/github.com有关,没有什么值得注意的信息
4、比原链默认出块时间是多少?
A:1.5分钟
B:2.5分钟
C:3.5分钟
答案:B
使用1.5、2.5、3.5、90、210这几个关键词搜索,没有关键搜索。
使用150(2.5*60=150)搜索,搜索到bytom-masterconsensusgeneral.go:26有TargetSecondsPerBlock这个变量
变量名查找结果:bytom-mastercmdminermain.go:30行,在doWork(bh *types.BlockHeader, seed *bc.Hash) bool 这个函数里面,函数用途是进行POW计算算出可记账的hash值,变量用途不明
bytom-masterconsensusdifficultydifficulty.go:133行,在CalcNextRequiredDifficulty(lastBH, compareBH *types.BlockHeader) uint64这个函数里面,函数用途是在区块高度达到BlocksPerRetarget的倍数之后调整难度,可确定此变量就是出块间隔秒数
5、区块奖励多久调整一次?
A:210000 个块
B:420000 个块
C:840000 个块
C,只有840000这个关键词搜索结果有意义。对应的变量是subsidyReductionInterval,bytom-masterconsensusgeneral.go:69对应函数BlockSubsidy(height uint64) uint64,功能是计算出块奖励,从返回结果可看出这个奖励是基础奖励值(baseSubsidy)/(2的(height/subsidyReductionInterval)次方),区块高度每过840000(subsidyReductionInterval)减半
6、coinbase交易得到的BTM 需要多少成熟数才能再次交易 ?
A:10
B:50
C:100
C,100这个数字对应CoinbasePendingBlockNumber这个变量,对应的搜索结果在bytom-masterprotocolstateutxo_view.go:45,对应函数名为(view *UtxoViewpoint) ApplyTransaction(block *bc.Block, tx *bc.Tx, statusFail bool) error,推断功能为验证是否可以交易,其中一段代码为entry.IsCoinBase && entry.BlockHeight+consensus.CoinbasePendingBlockNumber > block.Height ,如果此交易为coinbase并且从拿到BTMtoken到现在为止的时间段内没有验证超过100次交易,这些BTMtoken不能用
7、get-work 中解析出来的字段哪些对矿工没有意义?
A:version
B:height
C:nonce
答案:C,
version有一个值得注意的搜索结果:protocolvalidationlock.go:54,这里对应函数ValidateBlockHeader(b *bc.Block, parent *state.BlockNode) error,在里面的作用是检测新块的版本号是否小于之前块的版本号,小于就报错
height,即区块高度,第5题就是讲的区块高度调整出块奖励
nonce,没有实质性效果的搜索结果,估计只是给使用者查询的id号。
8、coinbase 信息默认记录什么?
A:不记录
B:记录'information is power.....'
C:记录空字符加高度
答案:C
A先不考虑,线索太少很难判断哪个是coinbase
B以这个关键词查找,会找到bytom-readconfiggenesis.go:22的信息,从命名和实际功能上看,此区块是创世区块,information is power这句话是coinbase的输入
推断此函数与coinbase的input有关。NewCoinbaseInput以这个函数为线索查找,发现只有2个地方有用到此函数(文件名带_test的不算),一个就是上面的创世区块,一个bytom-readminingmining.go:43是挖矿时向里面添加的区块,append([]byte{0x00}, []byte(strconv.FormatUint(blockHeight, 10))从这句话可以看出,加入的是一个数值为0的字节,还有strconv.FormatUint(blockHeight, 10),这句话的意思是把blockHeight这个数字转10进制的字符串,与C答案贴合
9、比原中使用 fast_sync 快速同步是节省了哪一部分的验算 ?
A:合约验证
B:merkle tree 验证
C:区块头 tensority 验证
答案:C?这个技术点无论是技术板块还是代码本身都找不到答案,老铁求解
10、 比原链主网上线时什么时间?
A:2018年4月24号
B:2018年5月24号
C:2018年6月24号
答案:A,在比原链官博就能找到https://weibo.com/5966947038/Gdz4rFRLm?filter=hot&root_comment_id=0&type=comment
11、 比原链合约语言的名称叫什么?
A:Equity
B:Spark
C:Solity
答案:A,巴比特的比原链置顶讨论版其中一个就是:比原链 | Equity 语言入门
12、比原链的合约语言时什么类型的语言 ?
A:动词表述性语言
B:谓词表述性语言
C:名词表述性语言
答案:B,比原AMA:http://8btc.com/forum.php?mod=viewthread&tid=197589&page=8#pid1540830,有个大神的提问下的回答,就是声明性谓词语言
13、比原链使用什么公私钥签名算法 ?
A:SM2
B:secp256k1
C:ed25519
答案:C,“剥开比原看代码”系列教程第10篇:比原是如何通过/create-key
接口创建密钥的,提到比原使用ed25519生成公私钥
14、下列哪个不是比原链合约的关键词 ?
A:contract
B:locks
C:parameters
答案:C,详情查看比原链 | Equity 语言入门:http://8btc.com/forum.php?mod=viewthread&tid=196068。查看示例合约LockWithPublicKey,可知contract是声明此函数为合约的,locks锁定对应的资产
15、比原链的API服务启用的是哪个端口?
A:9886
B:9887
C:9888
答案:C,追查9888这个端口,会发现这个数字在bytom-masterconfig oml.go:26对应api_addr,bytom-readconfigconfig.go:87对应ApiAddress,继续看,会发现bytom-master ode ode.go:226有个函数initAndstartApiServer()调用这个变量,可以看出这个地址被用于接收api请求