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


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

  • 相关阅读:
    即时通信 选择UDP还是TCP协议
    Gradle 在Eclipse中的使用
    使用idea+gradle建立SSM项目
    Gradle安装和在IDEA使用 基本操作
    IDEA配置 gradle
    Trustin Lee
    java.security.MessageDigest (2) 生成安全令牌!
    java.security.MessageDigest (1)
    递归算法结合数据库 解析 java树形结构
    mysql 日期加减
  • 原文地址:https://www.cnblogs.com/dgutfly/p/9591736.html
Copyright © 2020-2023  润新知