Python代写:CS345Blockchain


搭建开源 BitCoin 节点,完成实验内容。
![BitCoin](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c5/Bitcoin_logo.svg/252px-
Bitcoin_logo.svg.png)

Requirements

In this lab we are going to get an old block from the BitCoin block chain and
demonstrate how any changes would be caught by the BitCoin network.

  • Connect to a peer in the P2P BitCoin network and get the block number that corresponds to your SU
  • ID number (your number modulo 650000).
  • Display the transactions in the block.
  • Have your program manipulate one of the transactions in the block to change its output account, then fix up the block to correctly represent this modified data (fix the merkle-tree hashes, etc.).
  • Then show with a program-generated report how the hash of the block has changed and the ways in which this block would be rejected by peers in the network.
    Program written in Python 3 with no use of publicly available BitCoin
    libraries (except as shown below).
  • Use TCP/IP to communicate with a full node in the network.
  • Submit the program in the usual way on cs1 , all in one file,
    Start by reading about blockchains in general, the original paper the
    developer documentation ( https://bitcoin.org/bitcoin.pdf ) , and ( [
    https://bitcoin.org/en/developer-reference ](https://bitcoin.org/en/developer-
    reference) ) .

Getting Connected

To get a list of bitcoin nodes, use makeseeds (
https://github.com/bitcoin/bitcoin/tree/master/contrib/seeds
) . You may
need to install dnspython for this to work (
pip3 curl -s HTTP://BITCOIN.SIPA.BE/SEEDS.TXT.GZ | gzip -dc > SEEDS_MAIN.TXT
python3 -W IGNORE::DEPRECATIONWARNING MAKESEEDS.PY < SEEDS_MAIN.TXT > NODES_MAIN.TXT
[NOTE: On Windows, the command is usually python and on a Mac python3 . The -W
directive is to get around their use of a deprecated method in the DNS
resolver library. The process can take 5 minutes or more.]
Pick nodes from that are not onion nodes (
https://en.wikipedia.org/wiki/Onion_routing
) and just choose one at random
that is currently working. You may have to try several before you get a
working node. You can leave the host you are using hard-coded in your
submitted program.

Guidance

Here is the beginning dialog I recorded with one of the BitCoin peers:
sending MESSAGE
(110) f9beb4d976657273696f6e0000000000560000003b9840b27f11010000000000000000007833d25d0000000001000000000000000000000000000000…
HEADER
——————————————————
f9beb4d9 MAGIC
76657273696f6e0000000000 COMMAND: version
56000000 PAYLOAD size: 86
3b9840b2 checksum (verified)
VERSION
——————————————————
7f110100 version 70015
0000000000000000 my services
7833d25d00000000 epoch time Mon, 18 Nov 2019 06:00:24 GMT
0100000000000000 your services
00000000000000000000ffff5c3fc0d1 your host 92.63.192.209
8d20 your port 8333
0000000000000000 my services (AGAIN)
00000000000000000000FFFF0A000048 my host 10.0.0.72
9ee8 my port 59550
0000000000000000 nonce
00 user AGENT size 0
user AGENT ‘’
00000000 START height 0
00 RELAY FALSE
received MESSAGE
(126) f9beb4d976657273696f6e000000000066000000c6d922107f1101000d040000000000007833d25d0000000000000000000000000000000000000000…
HEADER
——————————————————
f9beb4d9 MAGIC
76657273696f6e0000000000 COMMAND: version
66000000 PAYLOAD size: 102
c6d92210 checksum (verified)
VERSION
——————————————————
7f110100 version 70015
0d04000000000000 my services
7833d25d00000000 epoch time Mon, 18 Nov 2019 06:00:24 GMT
0000000000000000 your services
00000000000000000000ffff4961e4ed your host 73.97.228.237
e89e your port 40680
0d04000000000000 my services (AGAIN)
00000000000000000000000000000000 my host 0.0.0.0
0000 my port 0
C1F685008A419236 nonce
10 user AGENT size 16
2F5361746F7368693A302E31382E302F user AGENT ‘/SATOSHI:0.18.0/‘
A4380900 START height 604324
01 RELAY True


文章作者: SafePoker
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 SafePoker !
  目录