比原空投问答题库题解(三)
涉及到代码部分(以1.4版本为准)的回答,均可使用notepad++查找对应数字及其变量
36、 以下哪个错误码代表 "Bytom API Error"?
A:BTM000
B:BTM103
c.:BTM404
答案:A。搜索结果:bytom-master\api\errors.go:116,BTM000对应bytom API error
37 、1个BTM可以转换成多少gas?
A:200000
B:300000
C:500000
答案:A.看第32题所在代码bytom-master\protocol\validation\tx.go:47的(g *GasState) setGas(BTMValue int64, txSize int64) error,可知道单次交易只能付200000GAS(BTMsatoshi)的燃费,1BTM就是100000000BTMsatoshi,所以把1BTM作为单次交易的燃费的话,只会用200000BTMsatoshi
38、 比原链挖矿的nonce值有多少位?
A: 32位
B :64位
C: 128位
答案:B,搜索nonce结果可知,nonce用int64(64位)或byte[8](8个字节=64位)储存
39、 比原链虚拟机叫什么?
A :EVM
B: BVM
C: CVM
答案:B,Bytom Virtual Machine
40、 虚拟机操作码OP_HASH160代表什么运算?
A: RIPEMD160运算
B :SHA256运算
C :SM3运算
答案:A.bytom-master\protocol\vm\ops.go:306有一行代码OP_HASH160: {OP_HASH160, "HASH160", opHash160},,与变量opHash160有所关联
这个变量其实是函数来的。。。bytom-master\protocol\vm\crypto.go:142这个函数,执行3种操作:pop(false),applyCost(cost),push(crypto.Ripemd160(data), false)
41、 虚拟机操作码OP_SHA256代表什么运算?
A :SHA3-256运算
B :SHA2-256运算
C :SM3运算
答案:B,bytom-master\protocol\vm\ops.go:304可看出OP_SHA256对应函数opSha256,这个函数执行的是doHash(vm, sha256.New),可排除SM3这种可能性,又因为下方有函数opSha3执行doHash(vm, sha3.New256),可能这个函数执行的是SHA3-256运算,可得出执行的是SHA2-256运算
42、 虚拟机操作码OP_CHECKSIG需要取出几个参数?
A :1个
B: 2个
C :3个
答案:%#%^**(,OP_CHECKSIG操作对应opCheckSig这个函数,bytom-master\protocol\vm\crypto.go:44的opCheckSig执行vm.pushBool(ed25519.Verify(ed25519.PublicKey(pubkeyBytes), msg, sig), true),题干不明,是指传入vm.pushBool几个函数,还是总共需要几个变量给这个返回
43、 比原链默认交易程序是什么?
A :P2PKHSigProgram
B :P2SHProgram
C :P2SPMultiSigProgram
答案:C.查看bytom-master\protocol\vm\vmutil\script.go关于这个3个函数的注释,P2PKHSigProgram生成脚本控制账号地址,P2SHProgram生成脚本控制联合账号地址,P2SPMultiSigProgram生成脚本控制交易输出
44、 下面哪个不是比原智能合约的语句类型?
A :verify
B: lock
C :check
答案:C,比原链 | Equity 语言入门http://8btc.com/forum.php?mod=viewthread&tid=196068 里面有提到,语句有3种,verify语句用来验证表达式的结果是否为真,unlock 语句用来解锁合约中锁定的 value,lock 语句可以将原合约中的 value 以及支付给条款函数的 value 锁定至新的合约中。check并不是语句类型
45 、比原链智能合约时什么时候上线的
A :2018.7.24
B: 2018.7.25
C :2018.7.26
答案:C
46、比原链的地址长度主要为哪两种
A :P2PKH:40 和 P2SH:60
B: P2PKH:32 和 P2SH:52
C: P2PKH:42 和 P2SH:62
答案:C
查看freewind教程第12篇:比原是如何通过/create-account-receiver
创建地址的,追踪代码到bytom-master\account\accounts.go:421,推断cp就是最终返回的地址,生成地址相关的函数createP2PKH(账号地址)和createP2SH(联合账号地址)就在下面,前者执行函数NewAddressWitnessPubKeyHash,进去的地址位数是20;后者执行函数NewAddressWitnessScriptHash,进去的地址位数是32.这俩函数执行的共同函数:EncodeAddress(),这俩类型声明了不同函数,但执行步骤都是str, err := encodeSegWitAddress(a.hrp, a.witnessVersion,a.witnessProgram[:]),进去里面(bytom-master\common\address.go:73),可以看到进去的字符串要执行bech32.ConvertBits(witnessProgram, 8, 5, true)和bech32.Bech32Encode(hrp, combined),很难追踪到底是做了什么。
blokckmeta.com里面有地址可查,把地址扔进python用len函数查,发现普通的账号地址是42位(前面的bm也算进去了)
47、比原链节点发现使用的DHT算法?
A :Chord
B: Pastry
C :Kademlia
答案:C.用kademila这个关键词搜索,会在discover包的注释里面找到这个关键词,意思是比原的p2p网络搜索用这个算法搜索
48、比原链每个区块奖励多少BTM?
A :410.5
B :412.5
C :414.5
答案:B,使用4125作为关键词搜索,可以在bytom-read\consensus\general.go:22找到baseSubsidy,同文件的66行下能找到计算区块奖励的函数:BlockSubsidy(),可得出在前839999个区块(创世区块除外),每个区块的奖励都是412.5BTM(41250000000BTMsatoshi)
49、比原链每个区块奖励是固定的吗?
A :是
B :不是
C :不一定
答案:C,区块高度每840000减半出块奖励,在此期间的块奖励都是固定的,但是区块高度到达840000的倍数之后会变化
50、比原链智能合约发布时有多少模板?
A: 8
B :9
C :10
答案:B,使用BTM的资产ID:fffff...fff搜索,会发现bytom-master\cmd\bytomcli\commands\template.go有9处这种代码,仔细查看对应的指令集,会发现都是合约发布的基本操作