A method to verify the jobs, to get the current payouts mounts and the current payouts address of the differents outputs of the current Block, from the jobs I send you via the pool.
It requires to do a little bit of retro engineering, patience and a running bitcoin core
It works on every mining pool as soon as you know what is the Extradata (method to get it via GenTX1 is longer, and reverse extraction of outputs is possible though, but I need to maximise confidence).
You can see from netcat what you are mining
I spent few minutes to give you this scheme to verify the data I broadcast :
- Step 0 : Get a random job via netcat
- Get the mining.notify to get the GenTX2, by pasting this on your terminal (don't hesitate to change your address), this is how your miner connects to the mining pool
» nc soloblocks.io 3333
{"id": 1, "method": "mining.subscribe", "params": []}
{"id": 2, "params": ["bc1qtfl2u4l3gqdzvr45v50dfvefaffzft0zfnhcan.worker", "password"], "method": "mining.authorize"}
- You get
{"id":1,"result":[[["mining.notify","bc247797"]],"72f7cdb3",8],"error":null}
{"id":2,"result":true,"error":null}
{"method":"mining.set_difficulty","params":[65535],"id":2}
{"method":"mining.notify","params":["6","2baedb2023a7ed2c1386a571fb3f3fe8068f5f69000042fe0000000000000000","01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff220353580b04a31cc26208","0f536f6c6f626c6f636b732e696f203100000000030000000000000000266a24aa21a9ed36fb8aa37b0515f8589481c4d08568cea1d1b156dd74b7aa09dc51823d7c494ade5e2725000000001600145a7eae57f1401a260eb4651ed4b329ea5224ade2c23226000000000017a914d3bc8e113a19c690c23d0436a54a9f54bd3a9bcc8700000000",["a2e03c00888ff04fc5e798a2bbbe85524b1d4cdd8f2583a65a6affa598375976","66d85a62d08f00f4d98fbaee0451d39110a990b9704f5de1a4f3c5401ea34a92","fba424b04036a455c98acaa6b99bd07a06299720c760d3992f0326c6abea7e06","017662772c7a47998336ddc859fc9dae6036b14a33b1d1e23330478b7e734f44","bdba777179d6b68fc8d1bda510212fc0f17332626d934dec61f598e988012b7e","dc58f53aeb93cb88c2c5bbb15aae73ee855be07f1dbe217b5017a86db13bb049","7de31d3ee3fc6ef976e87754d7a7041bcff161efb5e884a6e3e3b7a8b4bcabe8","24ab3fe6557e60152c24935d0edac01326b653f879d831045c162fcd63a130cd"],"20000000","170984cc","62c21ca1",true],"id":3}
- GenTX2 is the 4'th param.
0f536f6c6f626c6f636b732e696f203100000000030000000000000000266a24aa21a9ed36fb8aa37b0515f8589481c4d08568cea1d1b156dd74b7aa09dc51823d7c494ade5e2725000000001600145a7eae57f1401a260eb4651ed4b329ea5224ade2c23226000000000017a914d3bc8e113a19c690c23d0436a54a9f54bd3a9bcc8700000000
- Step 1 : Extradata
- Extradata on soloblocks is "Soloblocks.io 1" for port 3333 and "Soloblocks.io 2" for port 3334. With that you can verify that the job I broadcast is to mine to Soloblocks.io
txExtradataByteFromString [15 83 111 108 111 98 108 111 99 107 115 46 105 111 32 49]
txExtradataHex 0f536f6c6f626c6f636b732e696f2031 (verify on http://www.unit-conversion.info/texttools/hexadecimal/)
- you can see that you are mining on SoloBlocks.io on port 3333.
- Step 2 : the output transaction
- Split GenTX2 from "0f536f6c6f626c6f636b732e696f2031", you have the outputTransaction and sequences of "00000000". Last 8 chars is the txLockTime, set by default to 0. (
txExtradata+txInSequence(00000000)+outputTransactions+txLockTime(00000000))
- The output transaction of the job is "030000000000000000266a24aa21a9ed36fb8aa37b0515f8589481c4d08568cea1d1b156dd74b7a
a09dc51823d7c494ade5e2725000000001600145a7eae57f1401a260eb4651ed4b329ea5224ade2
c23226000000000017a914d3bc8e113a19c690c23d0436a54a9f54bd3a9bcc87"
-"03" is the number of outputs
- Step 3 : the Default Commitment
- First output is the Default Commitment.
- "0000000000000000266a24aa21a9ed36fb8aa37b0515f8589481c4d08568cea1d1b156dd74b7aa0
9dc51823d7c494a" is the DefaultSegwitCommitment
- "0000000000000000" is util.PackInt64LE(0)
- 26 is the varIntBuffer of the length of DefaultSegwitCommitmentBytes
- "6a24aa21a9ed36fb8aa37b0515f8589481c4d08568cea1d1b156dd74b7aa09dc51823d7c494a" is the hex of the DefaultSegwit Commitment
- Step 4 : the Miners Address and miners Payout - Second Output is the miners address (your payout)
- "de5e272500000000" is the PackInt64LE of the miners reward (99.6% of the coinbase value, value in input is in satoshi)
- "16" is the hex length of the miner's transaction script (22)
- the next 22*2 chars are 00145a7eae57f1401a260eb4651ed4b329ea5224ade2 (miners script)
You can then decode the Script on your bitcoin core like that :
curl -d '{"jsonrpc":"2.0","id":"1","method": "decodescript","params":["00145a7eae57f1401a260eb4651ed4b329ea5224ade2"]}' -s localhost:8332
it replies
{
"result": {
"asm": "0 5a7eae57f1401a260eb4651ed4b329ea5224ade2",
"address": "bc1qtfl2u4l3gqdzvr45v50dfvefaffzft0zfnhcan",
"type": "witness_v0_keyhash",
"p2sh": "3Lbwmabrxu9YDjbGwBB3RvAGD9nHEXbN3n"
},
"error": null,
"id": "1"
}
Here you have your payout address, your payout amount, and you have a solution for this trust problem
- Step 5 : the pool's Address and pool's Payout - repeat the Step4 over the rest of the outputTransaction
- you can see that i'm taking 0.4% fees.
Crosspost :
https://bitcointalk.org/index.php?topic=5405106.msg60505734#msg60505734 I am not sure that is what you were looking for, but this is a good example on how you can verify the job done by your Antminer