mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-17 13:22:03 +01:00
Compare commits
18 Commits
154c4318a8
...
37ccf88bd5
Author | SHA1 | Date | |
---|---|---|---|
|
37ccf88bd5 | ||
|
5f4422d68d | ||
|
795876cfc2 | ||
|
aae6208eb1 | ||
|
5462b35f90 | ||
|
a6fbf76116 | ||
|
c9a3c2c717 | ||
|
009d9f1e1c | ||
|
c44b31ed61 | ||
|
6539ae7af4 | ||
|
24da12d84a | ||
|
3ff1fb19d7 | ||
|
f89fd572f3 | ||
|
47ef570f89 | ||
|
ead81f1e92 | ||
|
3301d2cbe8 | ||
|
9bfb0d75ba | ||
|
7ac281c19c |
@ -9,7 +9,7 @@ _bitcoin_rpc() {
|
||||
local rpcargs=()
|
||||
for i in ${COMP_LINE}; do
|
||||
case "$i" in
|
||||
-conf=*|-datadir=*|-regtest|-rpc*|-testnet|-testnet4)
|
||||
-conf=*|-datadir=*|-regtest|-rpc*|-testnet4)
|
||||
rpcargs=( "${rpcargs[@]}" "$i" )
|
||||
;;
|
||||
esac
|
||||
|
@ -73,9 +73,6 @@ cat >> "${EXAMPLE_CONF_FILE}" << 'EOF'
|
||||
# Options for mainnet
|
||||
[main]
|
||||
|
||||
# Options for testnet3
|
||||
[test]
|
||||
|
||||
# Options for testnet4
|
||||
[testnet4]
|
||||
|
||||
|
@ -7,9 +7,6 @@ host=127.0.0.1
|
||||
#mainnet default
|
||||
port=8332
|
||||
|
||||
#testnet default
|
||||
#port=18332
|
||||
|
||||
#regtest default
|
||||
#port=18443
|
||||
|
||||
@ -26,11 +23,6 @@ netmagic=f9beb4d9
|
||||
genesis=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
|
||||
input=/home/example/.bitcoin/blocks
|
||||
|
||||
# testnet
|
||||
#netmagic=0b110907
|
||||
#genesis=000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
|
||||
#input=/home/example/.bitcoin/testnet3/blocks
|
||||
|
||||
# regtest
|
||||
#netmagic=fabfb5da
|
||||
#genesis=0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206
|
||||
|
@ -20,12 +20,10 @@ curl https://21.ninja/seeds.txt.gz | gzip -dc >> seeds_main.txt
|
||||
curl https://luke.dashjr.org/programs/bitcoin/files/charts/seeds.txt >> seeds_main.txt
|
||||
curl https://mainnet.achownodes.xyz/seeds.txt.gz | gzip -dc >> seeds_main.txt
|
||||
curl https://signet.achownodes.xyz/seeds.txt.gz | gzip -dc > seeds_signet.txt
|
||||
curl https://testnet.achownodes.xyz/seeds.txt.gz | gzip -dc > seeds_test.txt
|
||||
curl https://testnet4.achownodes.xyz/seeds.txt.gz | gzip -dc > seeds_testnet4.txt
|
||||
curl https://raw.githubusercontent.com/asmap/asmap-data/main/latest_asmap.dat > asmap-filled.dat
|
||||
python3 makeseeds.py -a asmap-filled.dat -s seeds_main.txt > nodes_main.txt
|
||||
python3 makeseeds.py -a asmap-filled.dat -s seeds_signet.txt -m 237800 > nodes_signet.txt
|
||||
python3 makeseeds.py -a asmap-filled.dat -s seeds_test.txt > nodes_test.txt
|
||||
python3 makeseeds.py -a asmap-filled.dat -s seeds_testnet4.txt -m 72600 > nodes_testnet4.txt
|
||||
python3 generate-seeds.py . > ../../src/chainparamsseeds.h
|
||||
```
|
||||
|
@ -1,219 +0,0 @@
|
||||
[fc10:efa7:ca6:1548:f8c:6bb9:1cc4:63ae]:18333
|
||||
[fc1f:22c3:95dc:a3af:4a93:8251:beb9:1858]:18333
|
||||
[fc2b:f62e:6a76:cdb5:dceb:2fdd:a0f8:3d88]:18333
|
||||
[fc32:2c16:d0d0:f1fb:3b27:c187:8cb5:9201]:18333
|
||||
[fccb:248:11a6:1042:bca:1218:f7ce:7d3d]:18333
|
||||
66lkz2cfzyrz3tde6gflrty63jqr4knyy6uv4dvldrsecpnfx4dq.b32.i2p:0
|
||||
hedmbfis4h4inqrwo2uzmku5xu6xaq74tg7sofnetqikdvndtvja.b32.i2p:0
|
||||
i7vrfdmgolc6dqfmsak5fvwgmn46y4ghtan44uhn2aw66cbk5nfa.b32.i2p:0
|
||||
nhla3xzibmhvav7meemluh2d2jxdrlwicq636a2sohwqhrfgqi4a.b32.i2p:0
|
||||
o6j3b33bv26vthoqzjy3h7a3qsuqbtbe3ulajmjzsl43vaqyieyq.b32.i2p:0
|
||||
ocqipbbxx4paopgkkbnj234ie7opzrtca5gtiwr6oda3h32rzgsa.b32.i2p:0
|
||||
xgctj4seo3ofstiymoyeuzq74bvddrbr6jtia6erodlf5va3cz5a.b32.i2p:0
|
||||
xy6ytjxel5ku4naqumj4f6hn4agrzh3w44gqcs6xkkzwm5s3jdgq.b32.i2p:0
|
||||
zklt7hncdrl2hupfwnlbt3qaayhjayjhvwvj2m3fok3z36tlnxhq.b32.i2p:0
|
||||
2.59.133.20:18333 # AS58212
|
||||
2.86.50.136:18333 # AS6799
|
||||
4.246.195.240:18333 # AS8075
|
||||
5.39.218.162:18333 # AS57043
|
||||
5.255.97.91:18333 # AS60404
|
||||
5.255.97.92:18333 # AS60404
|
||||
8.217.160.32:18333 # AS45102
|
||||
18.168.119.254:18333 # AS8987
|
||||
18.209.9.240:18333 # AS8987
|
||||
23.227.223.209:18333 # AS44486
|
||||
27.148.206.140:18333 # AS133774
|
||||
34.65.45.157:18333 # AS396982
|
||||
34.69.221.24:18333 # AS396982
|
||||
34.254.97.244:18333 # AS16509
|
||||
43.133.47.138:18333 # AS132203
|
||||
43.247.184.50:18333 # AS23724
|
||||
44.208.161.158:18333 # AS14618
|
||||
45.77.25.14:18333 # AS20473
|
||||
51.79.82.75:18333 # AS16276
|
||||
52.193.79.181:18333 # AS16509
|
||||
54.236.59.55:18333 # AS14618
|
||||
59.186.7.131:18333 # AS3786
|
||||
62.210.207.63:18333 # AS12876
|
||||
66.94.114.229:18333 # AS40021
|
||||
67.4.82.9:18333 # AS209
|
||||
69.61.32.242:18333 # AS141518
|
||||
69.197.185.106:18333 # AS32097
|
||||
70.114.196.140:18333 # AS11427
|
||||
72.211.1.222:18333 # AS22773
|
||||
73.22.9.231:18333 # AS33491
|
||||
74.118.136.46:18333 # AS20326
|
||||
85.203.53.149:18333 # AS39351
|
||||
85.208.69.12:18333 # AS42275
|
||||
85.208.69.13:18333 # AS42275
|
||||
89.58.9.219:18333 # AS197540
|
||||
89.155.238.72:18333 # AS2860
|
||||
90.79.184.226:18333 # AS3215
|
||||
91.109.204.214:18333 # AS199669
|
||||
91.123.182.164:18333 # AS51648
|
||||
92.115.99.159:18333 # AS8926
|
||||
122.208.117.197:18333 # AS17506
|
||||
124.236.16.91:18333 # AS134760
|
||||
129.153.149.46:18333 # AS31898
|
||||
129.213.114.91:18333 # AS31898
|
||||
129.226.198.211:18333 # AS132203
|
||||
134.195.89.130:18333 # AS63473
|
||||
135.180.99.74:18333 # AS1299
|
||||
137.184.2.124:18333 # AS14061
|
||||
141.98.219.199:18333 # AS20326
|
||||
147.182.251.92:18333 # AS14061
|
||||
148.51.196.40:18333 # AS12025
|
||||
148.251.4.19:18333 # AS24940
|
||||
149.202.79.199:18333 # AS16276
|
||||
161.97.119.128:18333 # AS51167
|
||||
162.55.243.11:18333 # AS24940
|
||||
169.155.171.252:18333 # AS44486
|
||||
176.108.193.97:18333 # AS47914
|
||||
185.28.96.16:18333 # AS59845
|
||||
185.44.206.111:18333 # AS44051
|
||||
185.107.68.135:18333 # AS43350
|
||||
185.130.224.146:18333 # AS57043
|
||||
185.186.208.124:18333 # AS206428
|
||||
185.210.125.33:18333 # AS205671
|
||||
186.154.207.228:18333 # AS19429
|
||||
188.117.132.82:18333 # AS31242
|
||||
188.213.90.149:18333 # AS206238
|
||||
193.30.123.70:18333 # AS197540
|
||||
194.9.6.11:18333 # AS58212
|
||||
194.95.66.129:18333 # AS680
|
||||
194.110.169.133:18333 # AS203576
|
||||
195.154.241.13:18333 # AS12876
|
||||
200.143.224.99:18333 # AS1916
|
||||
203.132.94.196:18333 # AS38195
|
||||
205.209.120.167:18333 # AS19318
|
||||
206.204.104.7:18333 # AS212947
|
||||
208.68.4.71:18333 # AS397444
|
||||
213.199.42.73:18333 # AS51167
|
||||
216.219.91.82:18333 # AS19318
|
||||
219.117.221.162:18333 # AS2514
|
||||
[2001:41d0:303:146e::]:18333 # AS16276
|
||||
[2001:41d0:306:4505::]:18333 # AS16276
|
||||
[2001:41d0:306:a3a::]:18333 # AS16276
|
||||
[2001:41d0:700:544c::]:18333 # AS16276
|
||||
[2001:41d0:800:1d55::]:18333 # AS16276
|
||||
[2001:41d0:800:3e7f::]:18333 # AS16276
|
||||
[2001:470:1f05:4e5::2020]:18333 # AS6939
|
||||
[2001:5a8:4164:7a00::506]:18333 # AS7065
|
||||
[2401:c080:1000:4cb2:3eec:efff:feb9:8604]:18333 # AS20473
|
||||
[2401:d002:3902:700:8708:37c4:e231:d3d8]:18333 # AS38195
|
||||
[2402:1f00:8101:713::]:18333 # AS16276
|
||||
[2604:1380:4531:1700::5]:18333 # AS54825
|
||||
[2604:a00:50:58:216:3eff:fe2c:8371]:18333 # AS19318
|
||||
[2605:3380:422e:1::50]:18333 # AS397444
|
||||
[2605:4840:3:2c23::1]:18333 # AS63473
|
||||
[2605:a141:2239:7674::1]:18333 # AS51167
|
||||
[2607:5300:205:300::1b0]:18333 # AS16276
|
||||
[2607:5300:60:85a9::]:18333 # AS16276
|
||||
[2607:5300:60:8702::]:18333 # AS16276
|
||||
[2620:6e:a000:1:43:43:43:43]:18333 # AS397444
|
||||
[2620:6e:a0a0:1::71]:18333 # AS397444
|
||||
[2804:431:e038:cd01:aaa1:59ff:fe0d:44b8]:18333 # AS27699
|
||||
[2a01:4f8:121:4072::2]:18333 # AS24940
|
||||
[2a01:4f8:160:1083::2]:18333 # AS24940
|
||||
[2a01:4f8:173:1ed8::2]:18333 # AS24940
|
||||
[2a01:4f8:173:230a::2]:18333 # AS24940
|
||||
[2a01:4f8:190:4026::2]:18333 # AS24940
|
||||
[2a01:4f9:2a:309d::2]:18333 # AS24940
|
||||
[2a01:4f9:3070:26e2::2]:18333 # AS24940
|
||||
[2a01:4f9:3071:2154::2]:18333 # AS24940
|
||||
[2a01:4f9:3071:219d::2]:18333 # AS24940
|
||||
[2a01:4f9:6b:2768::2]:18333 # AS24940
|
||||
[2a02:c202:2238:2255::1]:18333 # AS51167
|
||||
[2a02:c206:2239:7671::1]:18333 # AS51167
|
||||
[2a02:c206:2240:1506::1]:18333 # AS51167
|
||||
[2a03:4000:2a:514::]:18333 # AS197540
|
||||
[2a04:52c0:102:2219::1]:18333 # AS60404
|
||||
[2a04:52c0:102:49af::1]:18333 # AS60404
|
||||
[2a04:52c0:104:160c::1]:18333 # AS60404
|
||||
2lsncqdflwk272dhydrxf7ikfy23ppnmm54dnynyxiym6lqf3wowrmqd.onion:18333
|
||||
2mvycpm7ni6ix2pr4lkkfkqlivgo77mt4jx3s3dmhdlg3ogq46s6qbyd.onion:18333
|
||||
36fwktckggarkclbpu2pumsdpck46ahe6cwpozd2gm6q7kgdqljclmad.onion:18333
|
||||
3dt6kgfrilc3nwliwy5wbmc6oa2b5y3t33nkxlrxrkunr2hoaj56kgyd.onion:18333
|
||||
3vnbi5o3hyzk4cm3hhnyo3h7tclr6pybmhmqwkbyclslfhqtg72pq2id.onion:18333
|
||||
44sgcv5dvpplt32enlneddyl4gd4z3tbezl2scedwccndyzrrp6lcgyd.onion:18333
|
||||
4w3f2mxe4ftodocermsazs3qlpo37igkdgne6ka2p6wnnrgwpzqw65yd.onion:18333
|
||||
5axx4qyub7qtgssrvbbqudu6uqjbuknbvbld2wdscv5p6kh2hsfzjxqd.onion:18333
|
||||
5qdgulsryjejkjinocpvknazwtnbqtuf4f4pui2at4jpedwwpg427qyd.onion:18333
|
||||
67l6l2k7mqbl2btyvo5h5lki3kxcrgbunlk7brcloyaoaftbs5mnsuad.onion:18333
|
||||
6bhop3n32rreiynu35epznhc2exxkhuleromdhnida2hgmu2bhczgmqd.onion:18333
|
||||
6fdbuqf2kgeweeoeikmwfezauys657lzezzus4nxmekkumouptg5ezad.onion:18333
|
||||
6rnqpqqcpllqhjoa4gwrtq5yi6fdch6uqzapdee2gq67gxgsl73v4uqd.onion:18333
|
||||
7ph7mrc24te57mvppajfkfj4mk7zuz4teukymt3wgpdpw6vpndeivtyd.onion:18333
|
||||
7poqajl6svz4vr3aqi7vdtar2t56crbrtj6yi75ydrt3ighyx7q6qvyd.onion:18333
|
||||
7zlqrihb5do5ebbmjwgspxigqfdmkfslkqtg2ngdc6ypsunzb4iootqd.onion:18333
|
||||
aesy6tfufadkut6flu2bsqgnw2422ur2ynjalguxlzuzuktg3zehttqd.onion:18333
|
||||
axaaplqtf4z22xfj2j2xn6fhtj6ksv74bs7vae6rfw67qofdnqoacbid.onion:18333
|
||||
ayx35r2mhwydczzoqu7b6dl3sup4oht74sgnlrjkxybzh2hmfnaix3qd.onion:18333
|
||||
bizdwmm7naqq5pehkbfggznqtena5eodz3kprvsbj4nkkax4fvxx53id.onion:18333
|
||||
bjqttlyt5kxcn7sitpiavf2cuhdf6rlwigericlh7um7gzkqyyefqnqd.onion:18333
|
||||
bkzo7mpxuar7rhsbiwdaxqcymixarcbdmb3sdaqtv6yb2svqttz2s6ad.onion:18333
|
||||
bzn63lsmsuvzlg4uqadyylxaggdcrzkb56muw2b43ft5qkynvzfopbyd.onion:18333
|
||||
c7zrq2yqt6rtn5dxkczp5bv62k2jncv3mscoo24c24rljbplr2dvhsid.onion:18333
|
||||
dskf46hfkefyr6nio5gtqp7em7rh6aqwrugdegfooaoxcux5ym6bkuqd.onion:18333
|
||||
euvmh5f637qwqgktjs5zwauvayybfdkiopnflnh5yjt7ouqat3427pqd.onion:18333
|
||||
f472j4pynbgltb63mr2lhyvhecfqdjdcfmr2s2id4rreemyn32xtjuid.onion:18333
|
||||
fbimesnyhzubbzqc3uaufzkbyfmnkxvypoxaveaub7rzpzh2foxrn2yd.onion:18333
|
||||
gggan3nuzxpd655lafnsunqfxgy56bvsxuuzucgmaowyvq3d7a7o7jad.onion:18333
|
||||
gsw6sn27quwf6u3swgra6o7lrp5qau6kt3ymuyoxgkth6wntzm2bjwyd.onion:18333
|
||||
guudgx24aokistytvm3hj7u5cbvdkr2b643r5t33pa536ekfn2lfykid.onion:18333
|
||||
gwtx5qluopwaxjhedlifnr6pptw2eihojzhq3stnv2gfbvqbgqdhi5qd.onion:18333
|
||||
gy6nih4pmp5esyvvnhlj6qvk7zkbjuoswkxffyiip3dbkvsfxwz5zcqd.onion:18333
|
||||
hj2txlxajdlh7jsfwqxtp3cltlptsr33ctjkbxhbzbyirkmcpfhsnyad.onion:18333
|
||||
hjwzovgwou3py6ncemgmzpvcihay5cuzuxvqdn74axndmll25p4mwjqd.onion:18333
|
||||
hqkdgpzzsv2qvafhdkdocszquj7o2ittxfmm5fc2arxqw7ikottozoid.onion:18333
|
||||
htkiqaqoql7pjstenmw6v4blm6l57d6hl6mewxkmfi3qumozflx3gzyd.onion:18333
|
||||
hvbmmzvqrpgps2x5u4ip4ksf3e5m2fneac754gtnhjn2rsevni6cz3ad.onion:18333
|
||||
hvtxymvdb55u7lhdw6775akqy46inunl3uup27gnsxm2bqmv55wbacqd.onion:18333
|
||||
i5fjp7ggx62zlfkibzn7s6glpjp3h2ypfom3lmqixig7qbdgej35wfyd.onion:18333
|
||||
i5gphw2d224tniqkjebxdwz5ygbbo5gcushoyevv7x7o454b6qlrzeid.onion:18333
|
||||
iysx2dl4tpojiclh32iyhel6z7h227c7o7buzk5wuqw6qhuytvsu66yd.onion:18333
|
||||
j53y5paeb7xcrptntut7epccjglduquldjlzjlho4lj2msabnygrljqd.onion:18333
|
||||
jsc4frvvnl2d3bhzyofsc72xpztgm23nl4fnb4dwkzsxr6fhij2q5iyd.onion:18333
|
||||
jtvqgaccxbtzshtulk5xlsb4wkoil3psmpn5avqyp2i5vm4hqh5cicyd.onion:18333
|
||||
jun6gdmbgasr57bhr4zs3dfhc6pzpaw27nqb4dadbai7yrbq55zskeid.onion:18333
|
||||
kamanho5clcpn5l3sc6ih3vb4skmfhgxw3h2mgs7e5idfezu5dw5oxyd.onion:18333
|
||||
kwjxlauwjtecjfsiwopbl5pvn5n6z5rz76uk6osmlurd3uyuymcw7aid.onion:18333
|
||||
lka74booetkbmat2q64haawcytbwx7mnctvo63ww4jgi4yuqnl6p3kad.onion:18333
|
||||
lwfecq35ocqjfbdq4h2qmcwl3cfcyiyycxtvrz36ihdbuczehi3bmrad.onion:18333
|
||||
n23anw4zb7f3paroac626oc2sqy3yn5kjfpcqvb3lvdyx7dzzpovd3id.onion:18333
|
||||
n4e6fp6xoyo2glsafjwbaq3wirhldpjw4mskn5lzkm4o5lhh5n5k7uqd.onion:18333
|
||||
nmazvezejolohnbza4rmqrwvjcprhi7w22fqvlbxp5sw3c25xy3dunqd.onion:18333
|
||||
nyrekcbm2ici6wv2umogtmwg7o2ivu4vm7bpcge5fayos5l377zldlqd.onion:18333
|
||||
o4zdqfdoe4jfvn35twqtjkzmptmk3bsg45sp46wuxanceg3euqtwdjqd.onion:18333
|
||||
ohqcfz5kk6ufouxmhtq7nxyo2lyui4vjlhr2kftvra2ewgzxu3hsrxad.onion:18333
|
||||
oobwtn5csi4auevb2ns2b5rrjnxmhlzdmay4zxtzvkj7tayrgwfddiqd.onion:18333
|
||||
ppe2pepzphox3swftj5lbyi7ckigspbih5qnyuhrb3r6bn3g7k7bp4qd.onion:18333
|
||||
pqkhkpkvqmjcql5jccyxg5nahow6vixnjrvtsc6clnk7dab4weknvpqd.onion:18333
|
||||
q5qox756id5nfdu6ht4dghc35jezls4bgjcdnrds3pwndvdx32zmwlad.onion:18333
|
||||
qiep4hvuovedbbc36hl7nwslwi6ah6uw4nnseyjdtc73cc5rfdauvnad.onion:18333
|
||||
qzx5f2ig2rk2ssrbopz2zlljq5mkeh3izhhx3t3cepse5qnhvpo2tzid.onion:18333
|
||||
rfi2hdpjhhknalltbwdvyuhskh5yjs66rqzpy6ley7xtu4kvbeob6fqd.onion:18333
|
||||
rw6reu6rdetz6rnpzoyn2hfy7sxpbja4v5ktmaicqqgszi2eata5lhqd.onion:18333
|
||||
s3bxrurro4bmvsmntw74qf4vw3xl25xtnvqegayvlwj3b6t7d76kkwid.onion:18333
|
||||
slpigm5ep4zan3a65bybne67phjiyesbuk5s3bodefuhnx2cfdtit6qd.onion:18333
|
||||
sxm6kwrdp6f2ggaozhrl47xuy3es3sgm3ivppmh4xm3hfmetvwbyrcad.onion:18333
|
||||
t6hfkkujktjyzpepmphskoaivflu6fieyuxrshxfzwriwvoa2uccvvqd.onion:18333
|
||||
ueyykmnyqk2bnmbgvmqrb4jfbjvpgeew6cuq4gaqe7v2oiyxaubkx4qd.onion:18333
|
||||
urhagmjceyqbzhjitpa7j7mygivxw3wlwqzkibw6zezrxeantkikgcyd.onion:18333
|
||||
vctlwaqgmu53eutz2hewuakcipfgtyljsd7czut4dd62xr3rp6fqezad.onion:18333
|
||||
vi3z4khdvopuiljdjdhpetnxztuzsct2aacuzcm5ba27h4j3cfwsvjad.onion:18333
|
||||
vqnkdmpmecc5kondj32jwbemmruhmd5gkmfngkscetibzozryp4elkad.onion:18333
|
||||
wgc4wp25gtnb54vd7x5h2xtetzrdoiizeyyh6fv3vxzp3bbalejbd3ad.onion:18333
|
||||
wpsahjbejxehpz772kzxonj777pejol2akcicduqov2r7ktm2b6l5pid.onion:18333
|
||||
wui5m2y5b7cms36ai6shzyqsg6qteejwmxsf26nyms6vcykxbvmh4uad.onion:18333
|
||||
xafcyh6mxwebvcsgw4wcbuw7n4v7vbqhcznhwqcpqcu6dww2mjuw4nad.onion:18333
|
||||
y5h652jz6sgmb4bkcfnfxnj24gnczqf7lhd5lqbvdhf5mpll4gye5kid.onion:18333
|
||||
ya6s7ov7myixz3ql23u45hty7moxo3r4d26qainw55z656vtau676xid.onion:18333
|
||||
yda7kwpii33j2qpq32ftf6lp22znknswipjwaccvsqj7l337jvfesnid.onion:18333
|
||||
zcsn3j6aswnrf56xj2n5jn4tlwmyoq4benjn5ujcgz46co2y5tm642id.onion:18333
|
||||
zefnna2a3ga4ez2nutvypma7my35prw3ycinbqwva7v4pf3aurqhjcyd.onion:18333
|
||||
zhiju2obxifqpjbcm6xtlgjdbof7jhoctvw3x57vhiftstb5hi3gmsqd.onion:18333
|
||||
zkqddzui5pkrqvjj2zwsf5kln7stlbmw5pmn6ut46fobvzyv2sn2ryid.onion:18333
|
||||
zmvizz7fd5hdue6wt3lwqumd6qwt4ijymmmotfzh75curq3mzjm53hyd.onion:18333
|
||||
zmxlrzoxg4fmso6l2xuq5tdxmlyakdqellzujh3a23iuzg4zlatnogqd.onion:18333
|
||||
zsmxmusdzrcqusk5h6syfq6a3ph6lwx3wpiltun4dmkrt3pa2fp7qaid.onion:18333
|
@ -7,12 +7,12 @@
|
||||
ZMQ example using python3's asyncio
|
||||
|
||||
Bitcoin should be started with the command line arguments:
|
||||
bitcoind -testnet -daemon \
|
||||
-zmqpubrawtx=tcp://127.0.0.1:28332 \
|
||||
-zmqpubrawblock=tcp://127.0.0.1:28332 \
|
||||
-zmqpubhashtx=tcp://127.0.0.1:28332 \
|
||||
-zmqpubhashblock=tcp://127.0.0.1:28332 \
|
||||
-zmqpubsequence=tcp://127.0.0.1:28332
|
||||
bitcoind -testnet4 -daemon \
|
||||
-zmqpubrawtx=tcp://127.0.0.1:48332 \
|
||||
-zmqpubrawblock=tcp://127.0.0.1:48332 \
|
||||
-zmqpubhashtx=tcp://127.0.0.1:48332 \
|
||||
-zmqpubhashblock=tcp://127.0.0.1:48332 \
|
||||
-zmqpubsequence=tcp://127.0.0.1:48332
|
||||
|
||||
We use the asyncio library here. `self.handle()` installs itself as a
|
||||
future at the end of the function. Since it never returns with the event
|
||||
@ -34,7 +34,7 @@ if (sys.version_info.major, sys.version_info.minor) < (3, 5):
|
||||
print("This example only works with Python 3.5 and greater")
|
||||
sys.exit(1)
|
||||
|
||||
port = 28332
|
||||
port = 48332
|
||||
|
||||
class ZMQHandler():
|
||||
def __init__(self):
|
||||
|
@ -41,7 +41,7 @@ Comments may appear in two ways:
|
||||
### Network specific options
|
||||
|
||||
Network specific options can be:
|
||||
- placed into sections with headers `[main]` (not `[mainnet]`), `[test]` (not `[testnet]`, for testnet3), `[testnet4]`, `[signet]` or `[regtest]`;
|
||||
- placed into sections with headers `[main]` (not `[mainnet]`), `[testnet4]`, `[signet]` or `[regtest]`;
|
||||
- prefixed with a chain name; e.g., `regtest.maxmempool=100`.
|
||||
|
||||
Network specific options take precedence over non-network specific options.
|
||||
|
@ -410,7 +410,7 @@ to see it.
|
||||
### Signet, testnet, and regtest modes
|
||||
|
||||
If you are testing multi-machine code that needs to operate across the internet,
|
||||
you can run with either the `-signet` or the `-testnet` config option to test
|
||||
you can run with either the `-signet` or the `-testnet4` config option to test
|
||||
with "play bitcoins" on a test network.
|
||||
|
||||
If you are testing something that can run on one machine, run with the
|
||||
|
@ -37,7 +37,6 @@ Windows | `%LOCALAPPDATA%\Bitcoin\` <sup>[\[1\]](#note1)</sup>
|
||||
Chain option | Data directory path
|
||||
---------------------------------|------------------------------
|
||||
`-chain=main` (default) | *path_to_datadir*`/`
|
||||
`-chain=test` or `-testnet` | *path_to_datadir*`/testnet3/`
|
||||
`-chain=testnet4` or `-testnet4` | *path_to_datadir*`/testnet4/`
|
||||
`-chain=signet` or `-signet` | *path_to_datadir*`/signet/`
|
||||
`-chain=regtest` or `-regtest` | *path_to_datadir*`/regtest/`
|
||||
|
13
doc/release-notes-31974.md
Normal file
13
doc/release-notes-31974.md
Normal file
@ -0,0 +1,13 @@
|
||||
Notable changes
|
||||
===============
|
||||
|
||||
Testnet3 removed
|
||||
-----
|
||||
Support for Testnet4 as specified in [BIP94](https://github.com/bitcoin/bips/blob/master/bip-0094.mediawiki)
|
||||
was added in v28.0, which also deprecated Testnet3. This release removes
|
||||
Testnet3 support entirely.
|
||||
|
||||
Testnet3 may continue to exist indefinitely. It is still supported by v29.x
|
||||
releases. It may become more difficult over time to bootstrap a new node,
|
||||
as the DNS seeds and hardcoded seed nodes may go offline. If that happens
|
||||
it may help to manually connect to a known peer using the `addnode` RPC.
|
@ -313,14 +313,12 @@ Both variables are used as a guideline for how much space the user needs on thei
|
||||
Note that all values should be taken from a **fully synced** node and have an overhead of 5-10% added on top of its base value.
|
||||
|
||||
To calculate `m_assumed_blockchain_size`, take the size in GiB of these directories:
|
||||
- For `mainnet` -> the data directory, excluding the `/testnet3`, `/testnet4`, `/signet`, and `/regtest` directories and any overly large files, e.g. a huge `debug.log`
|
||||
- For `testnet` -> `/testnet3`
|
||||
- For `mainnet` -> the data directory, excluding the `/testnet4`, `/signet`, and `/regtest` directories and any overly large files, e.g. a huge `debug.log`
|
||||
- For `testnet4` -> `/testnet4`
|
||||
- For `signet` -> `/signet`
|
||||
|
||||
To calculate `m_assumed_chain_state_size`, take the size in GiB of these directories:
|
||||
- For `mainnet` -> `/chainstate`
|
||||
- For `testnet` -> `/testnet3/chainstate`
|
||||
- For `testnet4` -> `/testnet4/chainstate`
|
||||
- For `signet` -> `/signet/chainstate`
|
||||
|
||||
|
@ -81,8 +81,8 @@ The high water mark value must be an integer greater than or equal to 0.
|
||||
|
||||
For instance:
|
||||
|
||||
$ bitcoind -zmqpubhashtx=tcp://127.0.0.1:28332 \
|
||||
-zmqpubhashtx=tcp://192.168.1.2:28332 \
|
||||
$ bitcoind -zmqpubhashtx=tcp://127.0.0.1:48332 \
|
||||
-zmqpubhashtx=tcp://192.168.1.2:48332 \
|
||||
-zmqpubhashblock="tcp://[::1]:28333" \
|
||||
-zmqpubrawtx=ipc:///tmp/bitcoind.tx.raw \
|
||||
-zmqpubhashtxhwm=10000
|
||||
|
@ -95,9 +95,8 @@ Section -post SEC0001
|
||||
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
||||
CreateDirectory $SMPROGRAMS\$StartMenuGroup
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (test signet).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-signet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 2
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet4).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet4" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 3
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (test signet).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-signet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet4).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet4" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 2
|
||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
|
||||
!insertmacro MUI_STARTMENU_WRITE_END
|
||||
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
|
||||
@ -142,7 +141,6 @@ Section -un.post UNSEC0001
|
||||
DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
|
||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
|
||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk"
|
||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet).lnk"
|
||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet4).lnk"
|
||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (test signet).lnk"
|
||||
Delete /REBOOTOK "$SMSTARTUP\Bitcoin.lnk"
|
||||
|
@ -75,7 +75,6 @@ static void SetupCliArgs(ArgsManager& argsman)
|
||||
SetupHelpOptions(argsman);
|
||||
|
||||
const auto defaultBaseParams = CreateBaseChainParams(ChainType::MAIN);
|
||||
const auto testnetBaseParams = CreateBaseChainParams(ChainType::TESTNET);
|
||||
const auto testnet4BaseParams = CreateBaseChainParams(ChainType::TESTNET4);
|
||||
const auto signetBaseParams = CreateBaseChainParams(ChainType::SIGNET);
|
||||
const auto regtestBaseParams = CreateBaseChainParams(ChainType::REGTEST);
|
||||
@ -100,7 +99,7 @@ static void SetupCliArgs(ArgsManager& argsman)
|
||||
argsman.AddArg("-rpcconnect=<ip>", strprintf("Send commands to node running on <ip> (default: %s)", DEFAULT_RPCCONNECT), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-rpccookiefile=<loc>", "Location of the auth cookie. Relative paths will be prefixed by a net-specific datadir location. (default: data dir)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-rpcpassword=<pw>", "Password for JSON-RPC connections", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-rpcport=<port>", strprintf("Connect to JSON-RPC on <port> (default: %u, testnet: %u, testnet4: %u, signet: %u, regtest: %u)", defaultBaseParams->RPCPort(), testnetBaseParams->RPCPort(), testnet4BaseParams->RPCPort(), signetBaseParams->RPCPort(), regtestBaseParams->RPCPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-rpcport=<port>", strprintf("Connect to JSON-RPC on <port> (default: %u, testnet4: %u, signet: %u, regtest: %u)", defaultBaseParams->RPCPort(), testnet4BaseParams->RPCPort(), signetBaseParams->RPCPort(), regtestBaseParams->RPCPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-rpcuser=<user>", "Username for JSON-RPC connections", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-rpcwait", "Wait for RPC server to start", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-rpcwaittimeout=<n>", strprintf("Timeout in seconds to wait for the RPC server to start, or 0 for no timeout. (default: %d)", DEFAULT_WAIT_CLIENT_TIMEOUT), ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_NEGATION, OptionsCategory::OPTIONS);
|
||||
@ -447,8 +446,6 @@ private:
|
||||
switch (gArgs.GetChainType()) {
|
||||
case ChainType::TESTNET4:
|
||||
return " testnet4";
|
||||
case ChainType::TESTNET:
|
||||
return " testnet";
|
||||
case ChainType::SIGNET:
|
||||
return " signet";
|
||||
case ChainType::REGTEST:
|
||||
|
@ -112,8 +112,6 @@ std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, c
|
||||
switch (chain) {
|
||||
case ChainType::MAIN:
|
||||
return CChainParams::Main();
|
||||
case ChainType::TESTNET:
|
||||
return CChainParams::TestNet();
|
||||
case ChainType::TESTNET4:
|
||||
return CChainParams::TestNet4();
|
||||
case ChainType::SIGNET: {
|
||||
|
@ -17,7 +17,6 @@ void SetupChainParamsBaseOptions(ArgsManager& argsman)
|
||||
argsman.AddArg("-regtest", "Enter regression test mode, which uses a special chain in which blocks can be solved instantly. "
|
||||
"This is intended for regression testing tools and app development. Equivalent to -chain=regtest.", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
||||
argsman.AddArg("-testactivationheight=name@height.", "Set the activation height of 'name' (segwit, bip34, dersig, cltv, csv). (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||
argsman.AddArg("-testnet", "Use the testnet3 chain. Equivalent to -chain=test. Support for testnet3 is deprecated and will be removed in an upcoming release. Consider moving to testnet4 now by using -testnet4.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||
argsman.AddArg("-testnet4", "Use the testnet4 chain. Equivalent to -chain=testnet4.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||
argsman.AddArg("-vbparams=deployment:start:end[:min_activation_height]", "Use given start/end times and min_activation_height for specified version bits deployment (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
||||
argsman.AddArg("-signet", "Use the signet chain. Equivalent to -chain=signet. Note that the network is defined by the -signetchallenge parameter", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||
@ -42,8 +41,6 @@ std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const ChainType chain)
|
||||
switch (chain) {
|
||||
case ChainType::MAIN:
|
||||
return std::make_unique<CBaseChainParams>("", 8332);
|
||||
case ChainType::TESTNET:
|
||||
return std::make_unique<CBaseChainParams>("testnet3", 18332);
|
||||
case ChainType::TESTNET4:
|
||||
return std::make_unique<CBaseChainParams>("testnet4", 48332);
|
||||
case ChainType::SIGNET:
|
||||
|
@ -52,6 +52,6 @@ const CBaseChainParams& BaseParams();
|
||||
void SelectBaseParams(const ChainType chain);
|
||||
|
||||
/** List of possible chain / network names */
|
||||
#define LIST_CHAIN_NAMES "main, test, testnet4, signet, regtest"
|
||||
#define LIST_CHAIN_NAMES "main, testnet4, signet, regtest"
|
||||
|
||||
#endif // BITCOIN_CHAINPARAMSBASE_H
|
||||
|
@ -159,7 +159,6 @@ std::list<SectionInfo> ArgsManager::GetUnrecognizedSections() const
|
||||
static const std::set<std::string> available_sections{
|
||||
ChainTypeToString(ChainType::REGTEST),
|
||||
ChainTypeToString(ChainType::SIGNET),
|
||||
ChainTypeToString(ChainType::TESTNET),
|
||||
ChainTypeToString(ChainType::TESTNET4),
|
||||
ChainTypeToString(ChainType::MAIN),
|
||||
};
|
||||
@ -798,12 +797,11 @@ std::variant<ChainType, std::string> ArgsManager::GetChainArg() const
|
||||
|
||||
const bool fRegTest = get_net("-regtest");
|
||||
const bool fSigNet = get_net("-signet");
|
||||
const bool fTestNet = get_net("-testnet");
|
||||
const bool fTestNet4 = get_net("-testnet4");
|
||||
const auto chain_arg = GetArg("-chain");
|
||||
|
||||
if ((int)chain_arg.has_value() + (int)fRegTest + (int)fSigNet + (int)fTestNet + (int)fTestNet4 > 1) {
|
||||
throw std::runtime_error("Invalid combination of -regtest, -signet, -testnet, -testnet4 and -chain. Can use at most one.");
|
||||
if ((int)chain_arg.has_value() + (int)fRegTest + (int)fSigNet + (int)fTestNet4 > 1) {
|
||||
throw std::runtime_error("Invalid combination of -regtest, -signet, -testnet4 and -chain. Can use at most one.");
|
||||
}
|
||||
if (chain_arg) {
|
||||
if (auto parsed = ChainTypeFromString(*chain_arg)) return *parsed;
|
||||
@ -812,7 +810,6 @@ std::variant<ChainType, std::string> ArgsManager::GetChainArg() const
|
||||
}
|
||||
if (fRegTest) return ChainType::REGTEST;
|
||||
if (fSigNet) return ChainType::SIGNET;
|
||||
if (fTestNet) return ChainType::TESTNET;
|
||||
if (fTestNet4) return ChainType::TESTNET4;
|
||||
return ChainType::MAIN;
|
||||
}
|
||||
|
23
src/init.cpp
23
src/init.cpp
@ -449,12 +449,10 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
||||
init::AddLoggingArgs(argsman);
|
||||
|
||||
const auto defaultBaseParams = CreateBaseChainParams(ChainType::MAIN);
|
||||
const auto testnetBaseParams = CreateBaseChainParams(ChainType::TESTNET);
|
||||
const auto testnet4BaseParams = CreateBaseChainParams(ChainType::TESTNET4);
|
||||
const auto signetBaseParams = CreateBaseChainParams(ChainType::SIGNET);
|
||||
const auto regtestBaseParams = CreateBaseChainParams(ChainType::REGTEST);
|
||||
const auto defaultChainParams = CreateChainParams(argsman, ChainType::MAIN);
|
||||
const auto testnetChainParams = CreateChainParams(argsman, ChainType::TESTNET);
|
||||
const auto testnet4ChainParams = CreateChainParams(argsman, ChainType::TESTNET4);
|
||||
const auto signetChainParams = CreateChainParams(argsman, ChainType::SIGNET);
|
||||
const auto regtestChainParams = CreateChainParams(argsman, ChainType::REGTEST);
|
||||
@ -469,7 +467,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
||||
#if HAVE_SYSTEM
|
||||
argsman.AddArg("-alertnotify=<cmd>", "Execute command when an alert is raised (%s in cmd is replaced by message)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
#endif
|
||||
argsman.AddArg("-assumevalid=<hex>", strprintf("If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet3: %s, testnet4: %s, signet: %s)", defaultChainParams->GetConsensus().defaultAssumeValid.GetHex(), testnetChainParams->GetConsensus().defaultAssumeValid.GetHex(), testnet4ChainParams->GetConsensus().defaultAssumeValid.GetHex(), signetChainParams->GetConsensus().defaultAssumeValid.GetHex()), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-assumevalid=<hex>", strprintf("If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet4: %s, signet: %s)", defaultChainParams->GetConsensus().defaultAssumeValid.GetHex(), testnet4ChainParams->GetConsensus().defaultAssumeValid.GetHex(), signetChainParams->GetConsensus().defaultAssumeValid.GetHex()), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-blocksdir=<dir>", "Specify directory to hold blocks subdirectory for *.dat files (default: <datadir>)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-blocksxor",
|
||||
strprintf("Whether an XOR-key applies to blocksdir *.dat files. "
|
||||
@ -495,7 +493,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
||||
argsman.AddArg("-maxmempool=<n>", strprintf("Keep the transaction memory pool below <n> megabytes (default: %u)", DEFAULT_MAX_MEMPOOL_SIZE_MB), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-maxorphantx=<n>", strprintf("Keep at most <n> unconnectable transactions in memory (default: %u)", DEFAULT_MAX_ORPHAN_TRANSACTIONS), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-mempoolexpiry=<n>", strprintf("Do not keep transactions in the mempool longer than <n> hours (default: %u)", DEFAULT_MEMPOOL_EXPIRY_HOURS), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-minimumchainwork=<hex>", strprintf("Minimum work assumed to exist on a valid chain in hex (default: %s, testnet3: %s, testnet4: %s, signet: %s)", defaultChainParams->GetConsensus().nMinimumChainWork.GetHex(), testnetChainParams->GetConsensus().nMinimumChainWork.GetHex(), testnet4ChainParams->GetConsensus().nMinimumChainWork.GetHex(), signetChainParams->GetConsensus().nMinimumChainWork.GetHex()), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-minimumchainwork=<hex>", strprintf("Minimum work assumed to exist on a valid chain in hex (default: %s, testnet4: %s, signet: %s)", defaultChainParams->GetConsensus().nMinimumChainWork.GetHex(), testnet4ChainParams->GetConsensus().nMinimumChainWork.GetHex(), signetChainParams->GetConsensus().nMinimumChainWork.GetHex()), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-par=<n>", strprintf("Set the number of script verification threads (0 = auto, up to %d, <0 = leave that many cores free, default: %d)",
|
||||
MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
argsman.AddArg("-persistmempool", strprintf("Whether to save the mempool on shutdown and load on restart (default: %u)", DEFAULT_PERSIST_MEMPOOL), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
@ -524,7 +522,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
||||
argsman.AddArg("-addnode=<ip>", strprintf("Add a node to connect to and attempt to keep the connection open (see the addnode RPC help for more info). This option can be specified multiple times to add multiple nodes; connections are limited to %u at a time and are counted separately from the -maxconnections limit.", MAX_ADDNODE_CONNECTIONS), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-asmap=<file>", strprintf("Specify asn mapping used for bucketing of the peers (default: %s). Relative paths will be prefixed by the net-specific datadir location.", DEFAULT_ASMAP_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-bantime=<n>", strprintf("Default duration (in seconds) of manually configured bans (default: %u)", DEFAULT_MISBEHAVING_BANTIME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-bind=<addr>[:<port>][=onion]", strprintf("Bind to given address and always listen on it (default: 0.0.0.0). Use [host]:port notation for IPv6. Append =onion to tag any incoming connections to that address and port as incoming Tor connections (default: 127.0.0.1:%u=onion, testnet3: 127.0.0.1:%u=onion, testnet4: 127.0.0.1:%u=onion, signet: 127.0.0.1:%u=onion, regtest: 127.0.0.1:%u=onion)", defaultChainParams->GetDefaultPort() + 1, testnetChainParams->GetDefaultPort() + 1, testnet4ChainParams->GetDefaultPort() + 1, signetChainParams->GetDefaultPort() + 1, regtestChainParams->GetDefaultPort() + 1), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-bind=<addr>[:<port>][=onion]", strprintf("Bind to given address and always listen on it (default: 0.0.0.0). Use [host]:port notation for IPv6. Append =onion to tag any incoming connections to that address and port as incoming Tor connections (default: 127.0.0.1:%u=onion, testnet4: 127.0.0.1:%u=onion, signet: 127.0.0.1:%u=onion, regtest: 127.0.0.1:%u=onion)", defaultChainParams->GetDefaultPort() + 1, testnet4ChainParams->GetDefaultPort() + 1, signetChainParams->GetDefaultPort() + 1, regtestChainParams->GetDefaultPort() + 1), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-cjdnsreachable", "If set, then this host is configured for CJDNS (connecting to fc00::/8 addresses would lead us to the CJDNS network, see doc/cjdns.md) (default: 0)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-connect=<ip>", "Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-discover", "Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||
@ -551,7 +549,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
||||
argsman.AddArg("-peerbloomfilters", strprintf("Support filtering of blocks and transaction with bloom filters (default: %u)", DEFAULT_PEERBLOOMFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-peerblockfilters", strprintf("Serve compact block filters to peers per BIP 157 (default: %u)", DEFAULT_PEERBLOCKFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-txreconciliation", strprintf("Enable transaction reconciliations per BIP 330 (default: %d)", DEFAULT_TXRECONCILIATION_ENABLE), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-port=<port>", strprintf("Listen for connections on <port> (default: %u, testnet3: %u, testnet4: %u, signet: %u, regtest: %u). Not relevant for I2P (see doc/i2p.md). If set to a value x, the default onion listening port will be set to x+1.", defaultChainParams->GetDefaultPort(), testnetChainParams->GetDefaultPort(), testnet4ChainParams->GetDefaultPort(), signetChainParams->GetDefaultPort(), regtestChainParams->GetDefaultPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||
argsman.AddArg("-port=<port>", strprintf("Listen for connections on <port> (default: %u, testnet4: %u, signet: %u, regtest: %u). Not relevant for I2P (see doc/i2p.md). If set to a value x, the default onion listening port will be set to x+1.", defaultChainParams->GetDefaultPort(), testnet4ChainParams->GetDefaultPort(), signetChainParams->GetDefaultPort(), regtestChainParams->GetDefaultPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION);
|
||||
#ifdef HAVE_SOCKADDR_UN
|
||||
argsman.AddArg("-proxy=<ip:port|path>", "Connect through SOCKS5 proxy, set -noproxy to disable (default: disabled). May be a local file path prefixed with 'unix:' if the proxy supports it.", ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_ELISION, OptionsCategory::CONNECTION);
|
||||
#else
|
||||
@ -618,6 +616,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
||||
argsman.AddArg("-limitdescendantcount=<n>", strprintf("Do not accept transactions if any ancestor would have <n> or more in-mempool descendants (default: %u)", DEFAULT_DESCENDANT_LIMIT), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||
argsman.AddArg("-limitdescendantsize=<n>", strprintf("Do not accept transactions if any ancestor would have more than <n> kilobytes of in-mempool descendants (default: %u).", DEFAULT_DESCENDANT_SIZE_LIMIT_KVB), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||
argsman.AddArg("-test=<option>", "Pass a test-only option. Options include : " + Join(TEST_OPTIONS_DOC, ", ") + ".", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||
argsman.AddArg("-testnet3", "", ArgsManager::ALLOW_ANY, OptionsCategory::HIDDEN);
|
||||
argsman.AddArg("-capturemessages", "Capture all P2P messages to disk", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||
argsman.AddArg("-mocktime=<n>", "Replace actual time with " + UNIX_EPOCH_TIME + " (default: 0)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||
argsman.AddArg("-maxsigcachesize=<n>", strprintf("Limit sum of signature cache and script execution cache sizes to <n> MiB (default: %u)", DEFAULT_VALIDATION_CACHE_BYTES >> 20), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||
@ -662,7 +661,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
||||
argsman.AddArg("-rpccookiefile=<loc>", "Location of the auth cookie. Relative paths will be prefixed by a net-specific datadir location. (default: data dir)", ArgsManager::ALLOW_ANY, OptionsCategory::RPC);
|
||||
argsman.AddArg("-rpccookieperms=<readable-by>", strprintf("Set permissions on the RPC auth cookie file so that it is readable by [owner|group|all] (default: owner [via umask 0077])"), ArgsManager::ALLOW_ANY, OptionsCategory::RPC);
|
||||
argsman.AddArg("-rpcpassword=<pw>", "Password for JSON-RPC connections", ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, OptionsCategory::RPC);
|
||||
argsman.AddArg("-rpcport=<port>", strprintf("Listen for JSON-RPC connections on <port> (default: %u, testnet3: %u, testnet4: %u, signet: %u, regtest: %u)", defaultBaseParams->RPCPort(), testnetBaseParams->RPCPort(), testnet4BaseParams->RPCPort(), signetBaseParams->RPCPort(), regtestBaseParams->RPCPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::RPC);
|
||||
argsman.AddArg("-rpcport=<port>", strprintf("Listen for JSON-RPC connections on <port> (default: %u, testnet4: %u, signet: %u, regtest: %u)", defaultBaseParams->RPCPort(), testnet4BaseParams->RPCPort(), signetBaseParams->RPCPort(), regtestBaseParams->RPCPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::RPC);
|
||||
argsman.AddArg("-rpcservertimeout=<n>", strprintf("Timeout during HTTP requests (default: %d)", DEFAULT_HTTP_SERVER_TIMEOUT), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::RPC);
|
||||
argsman.AddArg("-rpcthreads=<n>", strprintf("Set the number of threads to service RPC calls (default: %d)", DEFAULT_HTTP_THREADS), ArgsManager::ALLOW_ANY, OptionsCategory::RPC);
|
||||
argsman.AddArg("-rpcuser=<user>", "Username for JSON-RPC connections", ArgsManager::ALLOW_ANY | ArgsManager::SENSITIVE, OptionsCategory::RPC);
|
||||
@ -901,6 +900,11 @@ bool AppInitParameterInteraction(const ArgsManager& args)
|
||||
|
||||
// also see: InitParameterInteraction()
|
||||
|
||||
// Prevent unintentional use of mainnet, and provide a useful instruction:
|
||||
if (args.IsArgSet("-testnet3")) {
|
||||
return InitError(_("Testnet3 was dropped in version 30.0. Consider using '-testnet4' instead."));
|
||||
}
|
||||
|
||||
// We removed checkpoints but keep the option to warn users who still have it in their config.
|
||||
if (args.IsArgSet("-checkpoints")) {
|
||||
InitWarning(_("Option '-checkpoints' is set but checkpoints were removed. This option has no effect."));
|
||||
@ -922,11 +926,6 @@ bool AppInitParameterInteraction(const ArgsManager& args)
|
||||
return InitError(errors);
|
||||
}
|
||||
|
||||
// Testnet3 deprecation warning
|
||||
if (chain == ChainType::TESTNET) {
|
||||
LogInfo("Warning: Support for testnet3 is deprecated and will be removed in an upcoming release. Consider switching to testnet4.\n");
|
||||
}
|
||||
|
||||
// Warn if unrecognized section name are present in the config file.
|
||||
bilingual_str warnings;
|
||||
for (const auto& section : args.GetUnrecognizedSections()) {
|
||||
|
@ -191,101 +191,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Testnet (v3): public test network which is reset from time to time.
|
||||
*/
|
||||
class CTestNetParams : public CChainParams {
|
||||
public:
|
||||
CTestNetParams() {
|
||||
m_chain_type = ChainType::TESTNET;
|
||||
consensus.signet_blocks = false;
|
||||
consensus.signet_challenge.clear();
|
||||
consensus.nSubsidyHalvingInterval = 210000;
|
||||
consensus.script_flag_exceptions.emplace( // BIP16 exception
|
||||
uint256{"00000000dd30457c001f4095d208cc1296b0eed002427aa599874af7a432b105"}, SCRIPT_VERIFY_NONE);
|
||||
consensus.BIP34Height = 21111;
|
||||
consensus.BIP34Hash = uint256{"0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8"};
|
||||
consensus.BIP65Height = 581885; // 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6
|
||||
consensus.BIP66Height = 330776; // 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182
|
||||
consensus.CSVHeight = 770112; // 00000000025e930139bac5c6c31a403776da130831ab85be56578f3fa75369bb
|
||||
consensus.SegwitHeight = 834624; // 00000000002b980fcd729daaa248fd9316a5200e9b367f4ff2c42453e84201ca
|
||||
consensus.MinBIP9WarningHeight = 836640; // segwit activation height + miner confirmation window
|
||||
consensus.powLimit = uint256{"00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"};
|
||||
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks
|
||||
consensus.nPowTargetSpacing = 10 * 60;
|
||||
consensus.fPowAllowMinDifficultyBlocks = true;
|
||||
consensus.enforce_BIP94 = false;
|
||||
consensus.fPowNoRetargeting = false;
|
||||
consensus.nRuleChangeActivationThreshold = 1512; // 75% for testchains
|
||||
consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing
|
||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28;
|
||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;
|
||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].min_activation_height = 0; // No activation delay
|
||||
|
||||
// Deployment of Taproot (BIPs 340-342)
|
||||
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2;
|
||||
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = 1619222400; // April 24th, 2021
|
||||
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1628640000; // August 11th, 2021
|
||||
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay
|
||||
|
||||
consensus.nMinimumChainWork = uint256{"0000000000000000000000000000000000000000000015f5e0c9f13455b0eb17"};
|
||||
consensus.defaultAssumeValid = uint256{"00000000000003fc7967410ba2d0a8a8d50daedc318d43e8baf1a9782c236a57"}; // 3974606
|
||||
|
||||
pchMessageStart[0] = 0x0b;
|
||||
pchMessageStart[1] = 0x11;
|
||||
pchMessageStart[2] = 0x09;
|
||||
pchMessageStart[3] = 0x07;
|
||||
nDefaultPort = 18333;
|
||||
nPruneAfterHeight = 1000;
|
||||
m_assumed_blockchain_size = 200;
|
||||
m_assumed_chain_state_size = 19;
|
||||
|
||||
genesis = CreateGenesisBlock(1296688602, 414098458, 0x1d00ffff, 1, 50 * COIN);
|
||||
consensus.hashGenesisBlock = genesis.GetHash();
|
||||
assert(consensus.hashGenesisBlock == uint256{"000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"});
|
||||
assert(genesis.hashMerkleRoot == uint256{"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"});
|
||||
|
||||
vFixedSeeds.clear();
|
||||
vSeeds.clear();
|
||||
// nodes with support for servicebits filtering should be at the top
|
||||
vSeeds.emplace_back("testnet-seed.bitcoin.jonasschnelli.ch.");
|
||||
vSeeds.emplace_back("seed.tbtc.petertodd.net.");
|
||||
vSeeds.emplace_back("seed.testnet.bitcoin.sprovoost.nl.");
|
||||
vSeeds.emplace_back("testnet-seed.bluematt.me."); // Just a static list of stable node(s), only supports x9
|
||||
vSeeds.emplace_back("seed.testnet.achownodes.xyz."); // Ava Chow, only supports x1, x5, x9, x49, x809, x849, xd, x400, x404, x408, x448, xc08, xc48, x40c
|
||||
|
||||
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111);
|
||||
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196);
|
||||
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239);
|
||||
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
|
||||
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
|
||||
|
||||
bech32_hrp = "tb";
|
||||
|
||||
vFixedSeeds = std::vector<uint8_t>(std::begin(chainparams_seed_test), std::end(chainparams_seed_test));
|
||||
|
||||
fDefaultConsistencyChecks = false;
|
||||
m_is_mockable_chain = false;
|
||||
|
||||
m_assumeutxo_data = {
|
||||
{
|
||||
.height = 2'500'000,
|
||||
.hash_serialized = AssumeutxoHash{uint256{"f841584909f68e47897952345234e37fcd9128cd818f41ee6c3ca68db8071be7"}},
|
||||
.m_chain_tx_count = 66484552,
|
||||
.blockhash = consteval_ctor(uint256{"0000000000000093bcb68c03a9a168ae252572d348a2eaeba2cdf9231d73206f"}),
|
||||
}
|
||||
};
|
||||
|
||||
chainTxData = ChainTxData{
|
||||
// Data from RPC: getchaintxstats 4096 00000000000003fc7967410ba2d0a8a8d50daedc318d43e8baf1a9782c236a57
|
||||
.nTime = 1741042082,
|
||||
.tx_count = 475477615,
|
||||
.dTxRate = 17.15933950357594,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Testnet (v4): public test network which is reset from time to time.
|
||||
*/
|
||||
@ -633,11 +538,6 @@ std::unique_ptr<const CChainParams> CChainParams::Main()
|
||||
return std::make_unique<const CMainParams>();
|
||||
}
|
||||
|
||||
std::unique_ptr<const CChainParams> CChainParams::TestNet()
|
||||
{
|
||||
return std::make_unique<const CTestNetParams>();
|
||||
}
|
||||
|
||||
std::unique_ptr<const CChainParams> CChainParams::TestNet4()
|
||||
{
|
||||
return std::make_unique<const CTestNet4Params>();
|
||||
@ -657,15 +557,12 @@ std::vector<int> CChainParams::GetAvailableSnapshotHeights() const
|
||||
std::optional<ChainType> GetNetworkForMagic(const MessageStartChars& message)
|
||||
{
|
||||
const auto mainnet_msg = CChainParams::Main()->MessageStart();
|
||||
const auto testnet_msg = CChainParams::TestNet()->MessageStart();
|
||||
const auto testnet4_msg = CChainParams::TestNet4()->MessageStart();
|
||||
const auto regtest_msg = CChainParams::RegTest({})->MessageStart();
|
||||
const auto signet_msg = CChainParams::SigNet({})->MessageStart();
|
||||
|
||||
if (std::ranges::equal(message, mainnet_msg)) {
|
||||
return ChainType::MAIN;
|
||||
} else if (std::ranges::equal(message, testnet_msg)) {
|
||||
return ChainType::TESTNET;
|
||||
} else if (std::ranges::equal(message, testnet4_msg)) {
|
||||
return ChainType::TESTNET4;
|
||||
} else if (std::ranges::equal(message, regtest_msg)) {
|
||||
|
@ -148,7 +148,6 @@ public:
|
||||
static std::unique_ptr<const CChainParams> RegTest(const RegTestOptions& options);
|
||||
static std::unique_ptr<const CChainParams> SigNet(const SigNetOptions& options);
|
||||
static std::unique_ptr<const CChainParams> Main();
|
||||
static std::unique_ptr<const CChainParams> TestNet();
|
||||
static std::unique_ptr<const CChainParams> TestNet4();
|
||||
|
||||
protected:
|
||||
|
@ -114,7 +114,6 @@ static std::string DummyAddress(const CChainParams ¶ms)
|
||||
addr = "bc1p35yvjel7srp783ztf8v6jdra7dhfzk5jaun8xz2qp6ws7z80n4tq2jku9f";
|
||||
break;
|
||||
case ChainType::SIGNET:
|
||||
case ChainType::TESTNET:
|
||||
case ChainType::TESTNET4:
|
||||
addr = "tb1p35yvjel7srp783ztf8v6jdra7dhfzk5jaun8xz2qp6ws7z80n4tqa6qnlg";
|
||||
break;
|
||||
@ -519,8 +518,6 @@ fs::path static StartupShortcutPath()
|
||||
ChainType chain = gArgs.GetChainType();
|
||||
if (chain == ChainType::MAIN)
|
||||
return GetSpecialFolderPath(CSIDL_STARTUP) / "Bitcoin.lnk";
|
||||
if (chain == ChainType::TESTNET) // Remove this special case when testnet CBaseChainParams::DataDir() is incremented to "testnet4"
|
||||
return GetSpecialFolderPath(CSIDL_STARTUP) / "Bitcoin (testnet).lnk";
|
||||
return GetSpecialFolderPath(CSIDL_STARTUP) / fs::u8path(strprintf("Bitcoin (%s).lnk", ChainTypeToString(chain)));
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,6 @@ static const struct {
|
||||
const int iconColorSaturationReduction;
|
||||
} network_styles[] = {
|
||||
{ChainType::MAIN, QAPP_APP_NAME_DEFAULT, 0, 0},
|
||||
{ChainType::TESTNET, QAPP_APP_NAME_TESTNET, 70, 30},
|
||||
{ChainType::TESTNET4, QAPP_APP_NAME_TESTNET4, 70, 30},
|
||||
{ChainType::SIGNET, QAPP_APP_NAME_SIGNET, 35, 15},
|
||||
{ChainType::REGTEST, QAPP_APP_NAME_REGTEST, 160, 30},
|
||||
|
@ -1,7 +1,6 @@
|
||||
IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico"
|
||||
IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_testnet.ico"
|
||||
IDI_ICON3 ICON DISCARDABLE "icons/bitcoin_signet.ico"
|
||||
IDI_ICON4 ICON DISCARDABLE "icons/bitcoin_testnet.ico" // testnet4
|
||||
IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_signet.ico"
|
||||
IDI_ICON3 ICON DISCARDABLE "icons/bitcoin_testnet.ico" // testnet4
|
||||
|
||||
#include <windows.h> // needed for VERSIONINFO
|
||||
#include "../../clientversion.h" // holds the needed client version information
|
||||
|
@ -643,27 +643,24 @@ BOOST_AUTO_TEST_CASE(util_GetArg)
|
||||
BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
|
||||
{
|
||||
TestArgsManager test_args;
|
||||
const auto testnet = std::make_pair("-testnet", ArgsManager::ALLOW_ANY);
|
||||
const auto testnet4 = std::make_pair("-testnet4", ArgsManager::ALLOW_ANY);
|
||||
const auto regtest = std::make_pair("-regtest", ArgsManager::ALLOW_ANY);
|
||||
test_args.SetupArgs({testnet, testnet4, regtest});
|
||||
test_args.SetupArgs({testnet4, regtest});
|
||||
|
||||
const char* argv_testnet[] = {"cmd", "-testnet"};
|
||||
const char* argv_testnet4[] = {"cmd", "-testnet4"};
|
||||
const char* argv_regtest[] = {"cmd", "-regtest"};
|
||||
const char* argv_test_no_reg[] = {"cmd", "-testnet", "-noregtest"};
|
||||
const char* argv_both[] = {"cmd", "-testnet", "-regtest"};
|
||||
const char* argv_test_no_reg[] = {"cmd", "-testnet4", "-noregtest"};
|
||||
const char* argv_both[] = {"cmd", "-testnet4", "-regtest"};
|
||||
|
||||
// equivalent to "-testnet"
|
||||
// regtest in testnet section is ignored
|
||||
const char* testnetconf = "testnet=1\nregtest=0\n[test]\nregtest=1";
|
||||
// regtest in test network section is ignored
|
||||
const char* testnetconf = "testnet4=1\nregtest=0\n[testnet4]\nregtest=1";
|
||||
std::string error;
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "main");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet4, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "main");
|
||||
@ -675,18 +672,18 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "regtest");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error));
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
|
||||
BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_error);
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet4, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
@ -694,23 +691,23 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_error);
|
||||
|
||||
// check setting the network to test (and thus making
|
||||
// [test] regtest=1 potentially relevant) doesn't break things
|
||||
test_args.SelectConfigNetwork("test");
|
||||
// check setting the network to testnet4 (and thus making
|
||||
// [testnet4] regtest=1 potentially relevant) doesn't break things
|
||||
test_args.SelectConfigNetwork("testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error));
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet4, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
@ -718,7 +715,7 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(2, argv_test_no_reg, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||
|
||||
BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
|
||||
test_args.ReadConfigString(testnetconf);
|
||||
@ -739,7 +736,7 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
|
||||
//
|
||||
// - Combining SoftSet and ForceSet calls.
|
||||
//
|
||||
// - Testing "main" and "test" network values to make sure settings from network
|
||||
// - Testing "main" and "testnet4" network values to make sure settings from network
|
||||
// sections are applied and to check for mainnet-specific behaviors like
|
||||
// inheriting settings from the default section.
|
||||
//
|
||||
@ -766,8 +763,8 @@ struct ArgsMergeTestingSetup : public BasicTestingSetup {
|
||||
ForEachNoDup(conf_actions, SET, SECTION_NEGATE, [&] {
|
||||
for (bool soft_set : {false, true}) {
|
||||
for (bool force_set : {false, true}) {
|
||||
for (const std::string& section : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) {
|
||||
for (const std::string& network : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) {
|
||||
for (const std::string& section : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) {
|
||||
for (const std::string& network : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) {
|
||||
for (bool net_specific : {false, true}) {
|
||||
fn(arg_actions, conf_actions, soft_set, force_set, section, network, net_specific);
|
||||
}
|
||||
@ -921,7 +918,7 @@ BOOST_FIXTURE_TEST_CASE(util_ArgsMerge, ArgsMergeTestingSetup)
|
||||
// Results file is formatted like:
|
||||
//
|
||||
// <input> || <IsArgSet/IsArgNegated/GetArg output> | <GetArgs output> | <GetUnsuitable output>
|
||||
BOOST_CHECK_EQUAL(out_sha_hex, "f1ee5ab094cc43d16a6086fa7f2c10389e0f99902616b31bbf29189972ad1473");
|
||||
BOOST_CHECK_EQUAL(out_sha_hex, "4255a9ad78d2a68341750bf2de61131ef5610808b6e37b6f546222ca7342f36a");
|
||||
}
|
||||
|
||||
// Similar test as above, but for ArgsManager::GetChainTypeString function.
|
||||
@ -956,11 +953,11 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
|
||||
TestArgsManager parser;
|
||||
LOCK(parser.cs_args);
|
||||
parser.AddArg("-regtest", "regtest", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
parser.AddArg("-testnet", "testnet", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
parser.AddArg("-testnet4", "testnet4", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||
|
||||
auto arg = [](Action action) { return action == ENABLE_TEST ? "-testnet=1" :
|
||||
action == DISABLE_TEST ? "-testnet=0" :
|
||||
action == NEGATE_TEST ? "-notestnet=1" :
|
||||
auto arg = [](Action action) { return action == ENABLE_TEST ? "-testnet4=1" :
|
||||
action == DISABLE_TEST ? "-testnet4=0" :
|
||||
action == NEGATE_TEST ? "-notestnet4=1" :
|
||||
action == ENABLE_REG ? "-regtest=1" :
|
||||
action == DISABLE_REG ? "-regtest=0" :
|
||||
action == NEGATE_REG ? "-noregtest=1" : nullptr; };
|
||||
@ -1024,7 +1021,7 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
|
||||
// Results file is formatted like:
|
||||
//
|
||||
// <input> || <output>
|
||||
BOOST_CHECK_EQUAL(out_sha_hex, "9e60306e1363528bbc19a47f22bcede88e5d6815212f18ec8e6cdc4638dddab4");
|
||||
BOOST_CHECK_EQUAL(out_sha_hex, "04c3362420dac6338c4b807d57a6e7c520ec18eaeb3143a8448319a17d766a08");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(util_ReadWriteSettings)
|
||||
|
@ -19,7 +19,7 @@
|
||||
"mzK2FFDEhxqHcmrJw1ysqFkVyhUULo45hZ",
|
||||
"76a914ce28b26c57472737f5c3561a1761185bd8589a4388ac",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false
|
||||
}
|
||||
],
|
||||
@ -27,7 +27,7 @@
|
||||
"2NC2hEhe28ULKAJkW5MjZ3jtTMJdvXmByvK",
|
||||
"a914ce0bba75891ff9ec60148d4bd4a09ee2dc5c933187",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false
|
||||
}
|
||||
],
|
||||
@ -85,7 +85,7 @@
|
||||
"92ZdE5HoLafywnTBbzPxbvRmp75pSfzvdU3XaZGh1cToipgdHVh",
|
||||
"80c32d81e91bdea04cd7a3819b32275fc3298af4c7ec87eb0099527d041ced5c",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isCompressed": false,
|
||||
"isPrivkey": true
|
||||
}
|
||||
@ -94,7 +94,7 @@
|
||||
"cV83kKisF3RQSvXbUCm9ox3kaz5JjEUBWcx8tNydfGJcyeUxuH47",
|
||||
"e0fcd4ce4e3d0e3de091f21415bb7cd011fac288c42020a879f28c2a4387df9b",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isCompressed": true,
|
||||
"isPrivkey": true
|
||||
}
|
||||
@ -175,7 +175,7 @@
|
||||
"tb1qcrh3yqn4nlleplcez2yndq2ry8h9ncg3qh7n54",
|
||||
"0014c0ef1202759fff90ff19128936814321ee59e111",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false,
|
||||
"tryCaseFlip": true
|
||||
}
|
||||
@ -184,7 +184,7 @@
|
||||
"tb1quyl9ujpgwr2chdzdnnalen48sup245vdfnh2jxhsuq3yx80rrwlq5hqfe4",
|
||||
"0020e13e5e482870d58bb44d9cfbfccea78702aad18d4ceea91af0e022431de31bbe",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false,
|
||||
"tryCaseFlip": true
|
||||
}
|
||||
@ -193,7 +193,7 @@
|
||||
"tb1p35n52jy6xkm4wd905tdy8qtagrn73kqdz73xe4zxpvq9t3fp50aqk3s6gz",
|
||||
"51208d2745489a35b75734afa2da43817d40e7e8d80d17a26cd4460b0055c521a3fa",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false,
|
||||
"tryCaseFlip": true
|
||||
}
|
||||
@ -202,7 +202,7 @@
|
||||
"tb1rgv5m6uvdk3kc7qsuz0c79v88ycr5w4wa",
|
||||
"53104329bd718db46d8f021c13f1e2b0e726",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false,
|
||||
"tryCaseFlip": true
|
||||
}
|
||||
@ -299,7 +299,7 @@
|
||||
"n4YNbYuFdPwFrxSP8sjHFbAhUbLMUiY9jE",
|
||||
"76a914fc8f9851f3c1e4719cd0b8e4816dd4e88c72e52888ac",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false
|
||||
}
|
||||
],
|
||||
@ -307,7 +307,7 @@
|
||||
"2NAeQVZayzVFAtgeC3iYJsjpjWDmsDph71A",
|
||||
"a914bedc797342c03fd7a346c4c7857ca03d467013b687",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false
|
||||
}
|
||||
],
|
||||
@ -365,7 +365,7 @@
|
||||
"921M1RNxghFcsVGqAJksQVbSgx36Yz4u6vebfz1wDujNvgNt93B",
|
||||
"3777b341c45e2a9b9bf6bfb71dc7d129f64f1b9406ed4f93ade8f56065f1b732",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isCompressed": false,
|
||||
"isPrivkey": true
|
||||
}
|
||||
@ -374,7 +374,7 @@
|
||||
"cNEnbfF2fcxmmCLWqMAaq6fxJvVkwMbyU3kCbpQznz4Z1j6TZDGb",
|
||||
"1397b0d4a03e1ab2c54dd9af99ce1ecbfb90c80a58886da95e1181a55703d96b",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isCompressed": true,
|
||||
"isPrivkey": true
|
||||
}
|
||||
@ -455,7 +455,7 @@
|
||||
"tb1ql4k5ayv7p7w0t0ge7tpntgpkgw53g2payxkszr",
|
||||
"0014fd6d4e919e0f9cf5bd19f2c335a03643a914283d",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false,
|
||||
"tryCaseFlip": true
|
||||
}
|
||||
@ -464,7 +464,7 @@
|
||||
"tb1q9jx3x2qqdpempxrcfgyrkjd5fzeacaqj4ua7cs7fe2sfd2wdaueq5wn26y",
|
||||
"00202c8d1328006873b098784a083b49b448b3dc7412af3bec43c9caa096a9cdef32",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false,
|
||||
"tryCaseFlip": true
|
||||
}
|
||||
@ -473,7 +473,7 @@
|
||||
"tb1pdswckwd9ym5yf5eyzg8j4jjwnzla8y0tf9cp7aasfkek0u29sz9qfr00yf",
|
||||
"51206c1d8b39a526e844d324120f2aca4e98bfd391eb49701f77b04db367f145808a",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false,
|
||||
"tryCaseFlip": true
|
||||
}
|
||||
@ -482,7 +482,7 @@
|
||||
"tb1r0ecpfxg2udhtc556gqrpwwhk4sw3f0kc",
|
||||
"53107e7014990ae36ebc529a4006173af6ac",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false,
|
||||
"tryCaseFlip": true
|
||||
}
|
||||
@ -579,7 +579,7 @@
|
||||
"mwgS2HRbjyfYxFnR1nF9VKLvmdgMfFBmGq",
|
||||
"76a914b14ce7070b53cb0e4b5b5f6e253e876990aeca2e88ac",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false
|
||||
}
|
||||
],
|
||||
@ -587,7 +587,7 @@
|
||||
"2MwBVrJQ76BdaGD76CTmou8cZzQYLpe4NqU",
|
||||
"a9142b2c149cde619eae3d7fe995243b76a3417541aa87",
|
||||
{
|
||||
"chain": "test",
|
||||
"chain": "testnet4",
|
||||
"isPrivkey": false
|
||||
}
|
||||
],
|
||||
|
@ -137,7 +137,7 @@ BOOST_AUTO_TEST_CASE(key_io_invalid)
|
||||
std::string exp_base58string = test[0].get_str();
|
||||
|
||||
// must be invalid as public and as private key
|
||||
for (const auto& chain : {ChainType::MAIN, ChainType::TESTNET, ChainType::SIGNET, ChainType::REGTEST}) {
|
||||
for (const auto& chain : {ChainType::MAIN, ChainType::SIGNET, ChainType::REGTEST}) {
|
||||
SelectParams(chain);
|
||||
destination = DecodeDestination(exp_base58string);
|
||||
BOOST_CHECK_MESSAGE(!IsValidDestination(destination), "IsValid pubkey in mainnet:" + strTest);
|
||||
|
@ -193,11 +193,6 @@ BOOST_AUTO_TEST_CASE(ChainParams_REGTEST_sanity)
|
||||
sanity_check_chainparams(*m_node.args, ChainType::REGTEST);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ChainParams_TESTNET_sanity)
|
||||
{
|
||||
sanity_check_chainparams(*m_node.args, ChainType::TESTNET);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ChainParams_TESTNET4_sanity)
|
||||
{
|
||||
sanity_check_chainparams(*m_node.args, ChainType::TESTNET4);
|
||||
|
@ -424,7 +424,7 @@ BOOST_FIXTURE_TEST_CASE(versionbits_computeblockversion, BlockVersionTest)
|
||||
|
||||
// check that any deployment on any chain can conceivably reach both
|
||||
// ACTIVE and FAILED states in roughly the way we expect
|
||||
for (const auto& chain_type: {ChainType::MAIN, ChainType::TESTNET, ChainType::TESTNET4, ChainType::SIGNET, ChainType::REGTEST}) {
|
||||
for (const auto& chain_type: {ChainType::MAIN, ChainType::TESTNET4, ChainType::SIGNET, ChainType::REGTEST}) {
|
||||
const auto chainParams = CreateChainParams(*m_node.args, chain_type);
|
||||
uint32_t chain_all_vbits{0};
|
||||
for (int i = 0; i < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; ++i) {
|
||||
|
@ -13,8 +13,6 @@ std::string ChainTypeToString(ChainType chain)
|
||||
switch (chain) {
|
||||
case ChainType::MAIN:
|
||||
return "main";
|
||||
case ChainType::TESTNET:
|
||||
return "test";
|
||||
case ChainType::TESTNET4:
|
||||
return "testnet4";
|
||||
case ChainType::SIGNET:
|
||||
@ -29,8 +27,6 @@ std::optional<ChainType> ChainTypeFromString(std::string_view chain)
|
||||
{
|
||||
if (chain == "main") {
|
||||
return ChainType::MAIN;
|
||||
} else if (chain == "test") {
|
||||
return ChainType::TESTNET;
|
||||
} else if (chain == "testnet4") {
|
||||
return ChainType::TESTNET4;
|
||||
} else if (chain == "signet") {
|
||||
|
@ -10,7 +10,6 @@
|
||||
|
||||
enum class ChainType {
|
||||
MAIN,
|
||||
TESTNET,
|
||||
SIGNET,
|
||||
REGTEST,
|
||||
TESTNET4,
|
||||
|
@ -2589,10 +2589,6 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
|
||||
// coinbase. The two historical BIP30 violations often provide a confusing
|
||||
// edge case when manipulating the UTXO and it would be simpler not to have
|
||||
// another edge case to deal with.
|
||||
|
||||
// testnet3 has no blocks before the BIP34 height with indicated heights
|
||||
// post BIP34 before approximately height 486,000,000. After block
|
||||
// 1,983,702 testnet3 starts doing unnecessary BIP30 checking again.
|
||||
assert(pindex->pprev);
|
||||
CBlockIndex* pindexBIP34height = pindex->pprev->GetAncestor(params.GetConsensus().BIP34Height);
|
||||
//Only continue to enforce if we're below BIP34 activation height or the block hash at that height doesn't correspond.
|
||||
|
@ -81,7 +81,7 @@ WalletDescriptor GenerateWalletDescriptor(const CExtPubKey& master_key, const Ou
|
||||
} // no default case, so the compiler can warn about missing cases
|
||||
assert(!desc_prefix.empty());
|
||||
|
||||
// Mainnet derives at 0', testnet and regtest derive at 1'
|
||||
// Mainnet derives at 0', test networks derive at 1'
|
||||
if (Params().IsTestChain()) {
|
||||
desc_prefix += "/1h";
|
||||
} else {
|
||||
|
@ -102,7 +102,6 @@ class AssumeutxoTest(BitcoinTestFramework):
|
||||
invalid_magics = [
|
||||
# magic, name, real
|
||||
[0xf9beb4d9, "main", True],
|
||||
[0x0b110907, "test", True],
|
||||
[0x0a03cf40, "signet", True],
|
||||
[0x00000000, "", False],
|
||||
[0xffffffff, "", False],
|
||||
|
@ -462,38 +462,23 @@ class ConfArgsTest(BitcoinTestFramework):
|
||||
def test_acceptstalefeeestimates_arg_support(self):
|
||||
self.log.info("Test -acceptstalefeeestimates option support")
|
||||
conf_file = self.nodes[0].datadir_path / "bitcoin.conf"
|
||||
for chain, chain_name in {("main", ""), ("test", "testnet3"), ("signet", "signet"), ("testnet4", "testnet4")}:
|
||||
for chain, chain_name in {("main", ""), ("signet", "signet"), ("testnet4", "testnet4")}:
|
||||
util.write_config(conf_file, n=0, chain=chain_name, extra_config='acceptstalefeeestimates=1\n')
|
||||
self.nodes[0].assert_start_raises_init_error(expected_msg=f'Error: acceptstalefeeestimates is not supported on {chain} chain.')
|
||||
util.write_config(conf_file, n=0, chain="regtest") # Reset to regtest
|
||||
|
||||
def test_testnet3_deprecation_msg(self):
|
||||
self.log.info("Test testnet3 deprecation warning")
|
||||
t3_warning_log = "Warning: Support for testnet3 is deprecated and will be removed in an upcoming release. Consider switching to testnet4."
|
||||
def test_testnet3_removed_msg(self):
|
||||
self.log.info("Test testnet3 dropped error")
|
||||
|
||||
def warning_msg(node, approx_size):
|
||||
return f'Warning: Disk space for "{node.datadir_path / node.chain / "blocks" }" may not accommodate the block files. Approximately {approx_size} GB of data will be stored in this directory.'
|
||||
|
||||
# Testnet3 node will log the warning
|
||||
self.nodes[0].chain = 'testnet3'
|
||||
# Starting node with -testnet3 will fail
|
||||
self.nodes[0].chain = "testnet"
|
||||
self.nodes[0].replace_in_config([('regtest=', 'testnet='), ('[regtest]', '[test]')])
|
||||
with self.nodes[0].assert_debug_log([t3_warning_log]):
|
||||
self.start_node(0)
|
||||
# Some CI environments will have limited space and some others won't
|
||||
# so we need to handle both cases as a valid result.
|
||||
self.nodes[0].stderr.seek(0)
|
||||
err = self.nodes[0].stdout.read()
|
||||
self.nodes[0].stderr.seek(0)
|
||||
self.nodes[0].stderr.truncate()
|
||||
if err != b'' and err != warning_msg(self.nodes[0], 42):
|
||||
raise AssertionError("Unexpected stderr after shutdown of Testnet3 node")
|
||||
self.stop_node(0)
|
||||
self.nodes[0].assert_start_raises_init_error(extra_args=['-testnet3'], expected_msg="Error: Testnet3 was dropped in version 30.0. Consider using '-testnet4' instead.")
|
||||
|
||||
# Testnet4 node will not log the warning
|
||||
# Testnet4 node will not fail to start
|
||||
self.nodes[0].chain = 'testnet4'
|
||||
self.nodes[0].replace_in_config([('testnet=', 'testnet4='), ('[test]', '[testnet4]')])
|
||||
with self.nodes[0].assert_debug_log([], unexpected_msgs=[t3_warning_log]):
|
||||
self.start_node(0)
|
||||
self.start_node(0)
|
||||
self.stop_node(0)
|
||||
|
||||
# Reset to regtest
|
||||
@ -515,7 +500,7 @@ class ConfArgsTest(BitcoinTestFramework):
|
||||
self.test_ignored_conf()
|
||||
self.test_ignored_default_conf()
|
||||
self.test_acceptstalefeeestimates_arg_support()
|
||||
self.test_testnet3_deprecation_msg()
|
||||
self.test_testnet3_removed_msg()
|
||||
|
||||
# Remove the -datadir argument so it doesn't override the config file
|
||||
self.nodes[0].args = [arg for arg in self.nodes[0].args if not arg.startswith("-datadir")]
|
||||
|
@ -88,7 +88,7 @@ class InitTest(BitcoinTestFramework):
|
||||
|
||||
args = ['-txindex=1', '-blockfilterindex=1', '-coinstatsindex=1']
|
||||
for terminate_line in lines_to_terminate_after:
|
||||
self.log.info(f"Starting node and will exit after line {terminate_line}")
|
||||
self.log.info(f"Starting node and will terminate after line {terminate_line}")
|
||||
with node.busy_wait_for_debug_log([terminate_line]):
|
||||
if platform.system() == 'Windows':
|
||||
# CREATE_NEW_PROCESS_GROUP is required in order to be able
|
||||
@ -108,12 +108,22 @@ class InitTest(BitcoinTestFramework):
|
||||
'blocks/index/*.ldb': 'Error opening block database.',
|
||||
'chainstate/*.ldb': 'Error opening coins database.',
|
||||
'blocks/blk*.dat': 'Error loading block database.',
|
||||
'indexes/txindex/MANIFEST*': 'LevelDB error: Corruption: CURRENT points to a non-existent file',
|
||||
# Removing these files does not result in a startup error:
|
||||
# 'indexes/blockfilter/basic/*.dat', 'indexes/blockfilter/basic/db/*.*', 'indexes/coinstats/db/*.*',
|
||||
# 'indexes/txindex/*.log', 'indexes/txindex/CURRENT', 'indexes/txindex/LOCK'
|
||||
}
|
||||
|
||||
files_to_perturb = {
|
||||
'blocks/index/*.ldb': 'Error loading block database.',
|
||||
'chainstate/*.ldb': 'Error opening coins database.',
|
||||
'blocks/blk*.dat': 'Corrupted block database detected.',
|
||||
'indexes/blockfilter/basic/db/*.*': 'LevelDB error: Corruption',
|
||||
'indexes/coinstats/db/*.*': 'LevelDB error: Corruption',
|
||||
'indexes/txindex/*.log': 'LevelDB error: Corruption',
|
||||
'indexes/txindex/CURRENT': 'LevelDB error: Corruption',
|
||||
# Perturbing these files does not result in a startup error:
|
||||
# 'indexes/blockfilter/basic/*.dat', 'indexes/txindex/MANIFEST*', 'indexes/txindex/LOCK'
|
||||
}
|
||||
|
||||
for file_patt, err_fragment in files_to_delete.items():
|
||||
@ -135,9 +145,10 @@ class InitTest(BitcoinTestFramework):
|
||||
self.stop_node(0)
|
||||
|
||||
self.log.info("Test startup errors after perturbing certain essential files")
|
||||
dirs = ["blocks", "chainstate", "indexes"]
|
||||
for file_patt, err_fragment in files_to_perturb.items():
|
||||
shutil.copytree(node.chain_path / "blocks", node.chain_path / "blocks_bak")
|
||||
shutil.copytree(node.chain_path / "chainstate", node.chain_path / "chainstate_bak")
|
||||
for dir in dirs:
|
||||
shutil.copytree(node.chain_path / dir, node.chain_path / f"{dir}_bak")
|
||||
target_files = list(node.chain_path.glob(file_patt))
|
||||
|
||||
for target_file in target_files:
|
||||
@ -151,10 +162,9 @@ class InitTest(BitcoinTestFramework):
|
||||
|
||||
start_expecting_error(err_fragment)
|
||||
|
||||
shutil.rmtree(node.chain_path / "blocks")
|
||||
shutil.rmtree(node.chain_path / "chainstate")
|
||||
shutil.move(node.chain_path / "blocks_bak", node.chain_path / "blocks")
|
||||
shutil.move(node.chain_path / "chainstate_bak", node.chain_path / "chainstate")
|
||||
for dir in dirs:
|
||||
shutil.rmtree(node.chain_path / dir)
|
||||
shutil.move(node.chain_path / f"{dir}_bak", node.chain_path / dir)
|
||||
|
||||
def init_pid_test(self):
|
||||
BITCOIN_PID_FILENAME_CUSTOM = "my_fancy_bitcoin_pid_file.foobar"
|
||||
|
@ -45,6 +45,7 @@ from test_framework.util import (
|
||||
assert_equal,
|
||||
assert_greater_than,
|
||||
assert_raises_rpc_error,
|
||||
sync_txindex,
|
||||
)
|
||||
from test_framework.wallet import MiniWallet
|
||||
from test_framework.wallet_util import generate_keypair
|
||||
@ -270,6 +271,7 @@ class MempoolAcceptanceTest(BitcoinTestFramework):
|
||||
|
||||
self.log.info('A coinbase transaction')
|
||||
# Pick the input of the first tx we created, so it has to be a coinbase tx
|
||||
sync_txindex(self, node)
|
||||
raw_tx_coinbase_spent = node.getrawtransaction(txid=node.decoderawtransaction(hexstring=raw_tx_in_block)['vin'][0]['txid'])
|
||||
tx = tx_from_hex(raw_tx_coinbase_spent)
|
||||
self.check_mempool_result(
|
||||
|
@ -34,6 +34,7 @@ from test_framework.util import (
|
||||
assert_equal,
|
||||
assert_greater_than,
|
||||
assert_raises_rpc_error,
|
||||
sync_txindex,
|
||||
)
|
||||
from test_framework.wallet import (
|
||||
getnewdestination,
|
||||
@ -70,7 +71,7 @@ class RawTransactionsTest(BitcoinTestFramework):
|
||||
self.num_nodes = 3
|
||||
self.extra_args = [
|
||||
["-txindex"],
|
||||
["-txindex"],
|
||||
[],
|
||||
["-fastprune", "-prune=1"],
|
||||
]
|
||||
# whitelist peers to speed up tx relay / mempool sync
|
||||
@ -109,6 +110,7 @@ class RawTransactionsTest(BitcoinTestFramework):
|
||||
self.log.info(f"Test getrawtransaction {'with' if n == 0 else 'without'} -txindex")
|
||||
|
||||
if n == 0:
|
||||
sync_txindex(self, self.nodes[n])
|
||||
# With -txindex.
|
||||
# 1. valid parameters - only supply txid
|
||||
assert_equal(self.nodes[n].getrawtransaction(txId), tx['hex'])
|
||||
|
@ -12,6 +12,7 @@ from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import (
|
||||
assert_equal,
|
||||
assert_raises_rpc_error,
|
||||
sync_txindex,
|
||||
)
|
||||
from test_framework.wallet import MiniWallet
|
||||
|
||||
@ -77,6 +78,7 @@ class MerkleBlockTest(BitcoinTestFramework):
|
||||
assert_equal(sorted(self.nodes[0].verifytxoutproof(self.nodes[0].gettxoutproof([txid1, txid2]))), sorted(txlist))
|
||||
assert_equal(sorted(self.nodes[0].verifytxoutproof(self.nodes[0].gettxoutproof([txid2, txid1]))), sorted(txlist))
|
||||
# We can always get a proof if we have a -txindex
|
||||
sync_txindex(self, self.nodes[1])
|
||||
assert_equal(self.nodes[0].verifytxoutproof(self.nodes[1].gettxoutproof([txid_spent])), [txid_spent])
|
||||
# We can't get a proof if we specify transactions from different blocks
|
||||
assert_raises_rpc_error(-5, "Not all transactions found in specified or retrieved block", self.nodes[0].gettxoutproof, [txid1, txid3])
|
||||
|
@ -187,11 +187,11 @@ def address_to_scriptpubkey(address):
|
||||
"""Converts a given address to the corresponding output script (scriptPubKey)."""
|
||||
version, payload = bech32_to_bytes(address)
|
||||
if version is not None:
|
||||
return program_to_witness_script(version, payload) # testnet segwit scriptpubkey
|
||||
return program_to_witness_script(version, payload) # test network segwit scriptpubkey
|
||||
payload, version = base58_to_byte(address)
|
||||
if version == 111: # testnet pubkey hash
|
||||
if version == 111: # test network pubkey hash
|
||||
return keyhash_to_p2pkh_script(payload)
|
||||
elif version == 196: # testnet script hash
|
||||
elif version == 196: # test network script hash
|
||||
return scripthash_to_p2sh_script(payload)
|
||||
# TODO: also support other address formats
|
||||
else:
|
||||
|
@ -79,7 +79,6 @@ DEFAULT_MEMPOOL_EXPIRY_HOURS = 336 # hours
|
||||
|
||||
MAGIC_BYTES = {
|
||||
"mainnet": b"\xf9\xbe\xb4\xd9", # mainnet
|
||||
"testnet3": b"\x0b\x11\x09\x07", # testnet3
|
||||
"regtest": b"\xfa\xbf\xb5\xda", # regtest
|
||||
"signet": b"\x0a\x03\xcf\x40", # signet
|
||||
}
|
||||
|
@ -417,12 +417,8 @@ def initialize_datadir(dirname, n, chain, disable_autoconnect=True):
|
||||
|
||||
def write_config(config_path, *, n, chain, extra_config="", disable_autoconnect=True):
|
||||
# Translate chain subdirectory name to config name
|
||||
if chain == 'testnet3':
|
||||
chain_name_conf_arg = 'testnet'
|
||||
chain_name_conf_section = 'test'
|
||||
else:
|
||||
chain_name_conf_arg = chain
|
||||
chain_name_conf_section = chain
|
||||
chain_name_conf_arg = chain
|
||||
chain_name_conf_section = chain
|
||||
with open(config_path, 'w', encoding='utf8') as f:
|
||||
if chain_name_conf_arg:
|
||||
f.write("{}=1\n".format(chain_name_conf_arg))
|
||||
@ -592,3 +588,10 @@ def find_vout_for_address(node, txid, addr):
|
||||
if addr == tx["vout"][i]["scriptPubKey"]["address"]:
|
||||
return i
|
||||
raise RuntimeError("Vout not found for address: txid=%s, addr=%s" % (txid, addr))
|
||||
|
||||
|
||||
def sync_txindex(test_framework, node):
|
||||
test_framework.log.debug("Waiting for node txindex to sync")
|
||||
sync_start = int(time.time())
|
||||
test_framework.wait_until(lambda: node.getindexinfo("txindex")["txindex"]["synced"])
|
||||
test_framework.log.debug(f"Synced in {time.time() - sync_start} seconds")
|
||||
|
@ -117,7 +117,6 @@ class AddressInputTypeGrouping(BitcoinTestFramework):
|
||||
self.extra_args = [
|
||||
[
|
||||
"-addresstype=bech32",
|
||||
"-txindex",
|
||||
],
|
||||
[
|
||||
"-addresstype=p2sh-segwit",
|
||||
|
@ -20,10 +20,7 @@ class WalletCrossChain(BitcoinTestFramework):
|
||||
def setup_network(self):
|
||||
self.add_nodes(self.num_nodes)
|
||||
|
||||
# Switch node 1 to testnet before starting it.
|
||||
self.nodes[1].chain = 'testnet3'
|
||||
self.nodes[1].extra_args = ['-maxconnections=0', '-prune=550'] # disable testnet sync
|
||||
self.nodes[1].replace_in_config([('regtest=', 'testnet='), ('[regtest]', '[test]')])
|
||||
# Node 1 is omitted, it was previously used with testnet3.
|
||||
|
||||
# Switch node 2 to testnet4 before starting it.
|
||||
self.nodes[2].chain = 'testnet4'
|
||||
@ -40,11 +37,7 @@ class WalletCrossChain(BitcoinTestFramework):
|
||||
self.nodes[0].createwallet(node0_wallet)
|
||||
self.nodes[0].backupwallet(node0_wallet_backup)
|
||||
self.nodes[0].unloadwallet(node0_wallet)
|
||||
node1_wallet = self.nodes[1].datadir_path / 'node1_wallet'
|
||||
node1_wallet_backup = self.nodes[0].datadir_path / 'node1_wallet.bak'
|
||||
self.nodes[1].createwallet(node1_wallet)
|
||||
self.nodes[1].backupwallet(node1_wallet_backup)
|
||||
self.nodes[1].unloadwallet(node1_wallet)
|
||||
|
||||
node2_wallet = self.nodes[2].datadir_path / 'node2_wallet'
|
||||
node2_wallet_backup = self.nodes[0].datadir_path / 'node2_wallet.bak'
|
||||
self.nodes[2].createwallet(node2_wallet)
|
||||
@ -54,38 +47,22 @@ class WalletCrossChain(BitcoinTestFramework):
|
||||
self.log.info("Loading/restoring wallets into nodes with a different genesis block")
|
||||
|
||||
if self.options.descriptors:
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].loadwallet, node1_wallet)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].loadwallet, node2_wallet)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].loadwallet, node0_wallet)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].loadwallet, node0_wallet)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].loadwallet, node2_wallet)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].loadwallet, node1_wallet)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].restorewallet, 'w', node1_wallet_backup)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].restorewallet, 'w', node2_wallet_backup)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].restorewallet, 'w', node0_wallet_backup)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].restorewallet, 'w', node0_wallet_backup)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].restorewallet, 'w', node2_wallet_backup)
|
||||
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].restorewallet, 'w', node1_wallet_backup)
|
||||
else:
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].loadwallet, node1_wallet)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].loadwallet, node2_wallet)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].loadwallet, node0_wallet)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].loadwallet, node0_wallet)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].loadwallet, node2_wallet)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].loadwallet, node1_wallet)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].restorewallet, 'w', node1_wallet_backup)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].restorewallet, 'w', node2_wallet_backup)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].restorewallet, 'w', node0_wallet_backup)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].restorewallet, 'w', node0_wallet_backup)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].restorewallet, 'w', node2_wallet_backup)
|
||||
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].restorewallet, 'w', node1_wallet_backup)
|
||||
|
||||
if not self.options.descriptors:
|
||||
self.log.info("Override cross-chain wallet load protection")
|
||||
self.stop_nodes()
|
||||
self.start_nodes([['-walletcrosschain', '-prune=550']] * self.num_nodes)
|
||||
self.nodes[0].loadwallet(node1_wallet)
|
||||
self.nodes[1].loadwallet(node0_wallet)
|
||||
self.nodes[0].loadwallet(node2_wallet)
|
||||
self.nodes[2].loadwallet(node0_wallet)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
Loading…
x
Reference in New Issue
Block a user