ntgbtminer代码分析
入口
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage: {:s} <coinbase message> <block reward address>".format(sys.argv[0]))
sys.exit(1)
standalone_miner(sys.argv[1].encode().hex(), sys.argv[2])
构建RPC接口参数
def rpc_getblocktemplate():
try:
return rpc("getblocktemplate", [{"rules": ["segwit"]}])
except ValueError:
return {}
发送请求
def rpc(method, params=None):
"""
Make an RPC call to the Bitcoin Daemon JSON-HTTP server.
Arguments:
method (string): RPC method
params: RPC arguments
Returns:
object: RPC response result.
"""
#随机生成矿工ID
rpc_id = random.getrandbits(32)
#设置ID,method为getblocktemplate(调用的接口),参数为: [{"rules": ["segwit"]}]
data = json.dumps({"id": rpc_id, "method": method, "params": params}).encode()
#生成认证字符串
auth = base64.encodebytes((RPC_USER + ":" + RPC_PASS).encode()).decode().strip()
#发送请求
request = urllib.request.Request(RPC_URL, data, {"Authorization": "Basic {:s}".format(auth)})
#获取返回的数据包
with urllib.request.urlopen(request) as f:
response = json.loads(f.read())
#判断是否有错误
if response['id'] != rpc_id:
raise ValueError("Invalid response id: got {}, expected {:u}".format(response['id'], rpc_id))
elif response['error'] is not None:
raise ValueError("RPC error: {:s}".format(json.dumps(response['error'])))
#返回收到的数据
return response['result']
返回数据如下
以下为简化版,中间去掉了很多相同格式的数据
{
'capabilities': ['proposal'],
'version': 536870912,
'rules': ['csv', '!segwit'],
'vbavailable': {},
'vbrequired': 0,
'previousblockhash': '00000000000000000006e183fec748e3f752670abdfccfe6ce31027aab46463e',
'transactions': [{
'data': '01000000000101054cce3839aae4faed6b70a14bb0c1f6aa6bc85d945a622e4ad1ee456c54c0530600000000ffffffff02c0cf6a00000000001976a914d1eebe1aa02d2ac0bddefe81bdf2cebcc0ac6c4f88acfe9a2c0100000000220020701a8d401c84fb13e6baf169d59684e17abd9fa216c8cc5b9fc63d622ff8c58d040047304402206231ed28d2b7d2a13a53405e32609032ad7ff5be4712acb12f9b41143e08e7270220212c2ef5a7ecceb51607ae6c52b7079db37a3fec9bbb42464003ea88db21fbed0147304402203f9f335d67e8db0db2a41aa60cb180c7ccd1c05955f0bdb8a3d6da925adc4d0b02200ceec7458f234720e5ae0a6c658248034ae00ed63d24d771d329c62a71c708c0016952210375e00eb72e29da82b89367947f29ef34afb75e8654f6ea368e0acdfd92976b7c2103a1b26313f430c4b15bb1fdce663207659d8cac749a0e53d70eff01874496feff2103c96d495bfdd5ba4145e3e046fee45e84a8a48ad05bd8dbb395c011a32cf9f88053ae00000000',
'txid': '059b3b4e7d84e9599313838896013cf1db8df433963e67aab6542d1f6203e58e',
'hash': '3f7a9edc3f8b6d3d62a40fbb5bff3ead3cc5c6aeb3f678e51577893da8b1993c',
'depends': [],
'fee': 90000,
'sigops': 7,
'weight': 766
}, {
'data': '0100000001c5075f665c204c23ea65894b7a21e472ad2580749019a62d83d050dca7089842010000006a473044022067d4cea36c9629e8b385357e7d5ab8cfa684ea89d84818bc9adcf5464d896fe7022008a4ce11aa8f8f5e458536a73e0fc040832984af9ad397453a66baf5d021e96b01210396c806d4fef4ac94dadc56b3cc73bd6bd93e0351a803fb75c23c70056f8fa075ffffffff0224020000000000001976a914b59f6323fc190022a31a16f192d6faf644796ad688ac2d550000000000001976a914b71a2f648820f1cea31d7479d16b5e6aa01270a388ac00000000',
'txid': 'f6f32e853755621cb2f5e6e7792bd80caeefeb67f40b5124232ca571291b780d',
'hash': 'f6f32e853755621cb2f5e6e7792bd80caeefeb67f40b5124232ca571291b780d',
'depends': [630],
'fee': 452,
'sigops': 8,
'weight': 900
}, {
'data': '01000000010d781b2971a52c2324510bf467ebefae0cd82b79e7e6f5b21c625537852ef3f6010000006a47304402207a7448229f31305c913c96c59367ef45cfb67507a66bd41d6fb84fe8394a83a2022076bb4b2da4157dc6d661ed46783adfaba09989f44f36a64028b30bc5e349315601210396c806d4fef4ac94dadc56b3cc73bd6bd93e0351a803fb75c23c70056f8fa075ffffffff0224020000000000001976a914b59f6323fc190022a31a16f192d6faf644796ad688ac45510000000000001976a914b71a2f648820f1cea31d7479d16b5e6aa01270a388ac00000000',
'txid': '54d20bfe1c61c854a0fa9a165af7fd8ed2063e360411811ccf4b12cb24fcfb68',
'hash': '54d20bfe1c61c854a0fa9a165af7fd8ed2063e360411811ccf4b12cb24fcfb68',
'depends': [631],
'fee': 452,
'sigops': 8,
'weight': 900
}, {
'data': '010000000200da1ccef272136c2264dc41f51d3100bc92cb88d1c796bc187ec8a2887d762d000000006b483045022100dac2776f33e2eba37897122b3930f5df058fb3248bdd5cdde4565ad6037fa1f102200406c76f2961569af28747af520377666402cc3c26c0d34f4e4e8e6a4f8bbfa60121034aa0d81caa9898be9412ec3a239ebf9072b7a95e6dbf5800ee222328e8380988ffffffffd275a576395a65d5a0745b4d836a81b97c56b86afe7a65ff5e2cba7e434777ee010000006b483045022100b19ec7589ee936474a45bae7e10b3555fa583ea2f3d5bfcd350dfb91c7e31c1f02201cb457f6c9897cf3519f92d027724789a10422c94e8fc8235bc85415a7f469d40121031c01aa1ddb755d282e67837c08721423c37b8d8935645ac79aa2321816037749ffffffff01744700000000000017a91431b0afda9bc4c3df274af3191fbdc33095e5a8a08700000000',
'txid': 'c6d5b11038a8352f30246a0149a3398029b31a94addb7e3d1191dd42c7787a23',
'hash': 'c6d5b11038a8352f30246a0149a3398029b31a94addb7e3d1191dd42c7787a23',
'depends': [],
'fee': 676,
'sigops': 0,
'weight': 1352
}, {
'data': '01000000018be550f1d940fab145a483c0e2f6bc2f63967cf4a514311489362742557a3f73010000006a473044022054c71c48f2158f57a73c1d20884564b6b281ef50937ee290d6181381fb63841f02201ae1ad49106b6afb962cf7a06a79ba15da3c092784a44b8d217ae3291e52b3a60121030be3ab5168cc916c6a6fc1bb2a9b9c758c493b9b71e13fe3d41bbc1a480e55d3ffffffff0222020000000000001976a91412d1df7bbc23835eed81e2ef68dfdfa8f7f8a01988ac1a7d0100000000001976a914d2c778c149a8d25e6c18500662ed972ade37de8088ac00000000',
'txid': 'ecc19593f44a37586a35cb21c31c876a638990d9b7f0b9347b3caccab9fb7624',
'hash': 'ecc19593f44a37586a35cb21c31c876a638990d9b7f0b9347b3caccab9fb7624',
'depends': [],
'fee': 450,
'sigops': 8,
'weight': 900
}],
'coinbaseaux': {},
'coinbasevalue': 639211908,
'longpollid': '00000000000000000006e183fec748e3f752670abdfccfe6ce31027aab46463e4921',
'target': '0000000000000000000d21b90000000000000000000000000000000000000000',
'mintime': 1612754545,
'mutable': ['time', 'transactions', 'prevblock'],
'noncerange': '00000000ffffffff',
'sigoplimit': 80000,
'sizelimit': 4000000,
'weightlimit': 4000000,
'curtime': 1612755755,
'bits': '170d21b9',
'height': 669643,
'default_witness_commitment': '6a24aa21a9ed2cf174e14a11d9a25ed94412acb39bd5807a72fb566b7b98cb0121d9cec6d350'
}
浙公网安备 33010602011771号