mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-17 21:32:00 +01:00
Merge 795876cfc268b3acedb23a38e6f55bec704790ad into 5f4422d68dc3530c353af1f87499de1c864b60ad
This commit is contained in:
commit
37ccf88bd5
@ -9,7 +9,7 @@ _bitcoin_rpc() {
|
|||||||
local rpcargs=()
|
local rpcargs=()
|
||||||
for i in ${COMP_LINE}; do
|
for i in ${COMP_LINE}; do
|
||||||
case "$i" in
|
case "$i" in
|
||||||
-conf=*|-datadir=*|-regtest|-rpc*|-testnet|-testnet4)
|
-conf=*|-datadir=*|-regtest|-rpc*|-testnet4)
|
||||||
rpcargs=( "${rpcargs[@]}" "$i" )
|
rpcargs=( "${rpcargs[@]}" "$i" )
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -73,9 +73,6 @@ cat >> "${EXAMPLE_CONF_FILE}" << 'EOF'
|
|||||||
# Options for mainnet
|
# Options for mainnet
|
||||||
[main]
|
[main]
|
||||||
|
|
||||||
# Options for testnet3
|
|
||||||
[test]
|
|
||||||
|
|
||||||
# Options for testnet4
|
# Options for testnet4
|
||||||
[testnet4]
|
[testnet4]
|
||||||
|
|
||||||
|
@ -7,9 +7,6 @@ host=127.0.0.1
|
|||||||
#mainnet default
|
#mainnet default
|
||||||
port=8332
|
port=8332
|
||||||
|
|
||||||
#testnet default
|
|
||||||
#port=18332
|
|
||||||
|
|
||||||
#regtest default
|
#regtest default
|
||||||
#port=18443
|
#port=18443
|
||||||
|
|
||||||
@ -26,11 +23,6 @@ netmagic=f9beb4d9
|
|||||||
genesis=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
|
genesis=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
|
||||||
input=/home/example/.bitcoin/blocks
|
input=/home/example/.bitcoin/blocks
|
||||||
|
|
||||||
# testnet
|
|
||||||
#netmagic=0b110907
|
|
||||||
#genesis=000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
|
|
||||||
#input=/home/example/.bitcoin/testnet3/blocks
|
|
||||||
|
|
||||||
# regtest
|
# regtest
|
||||||
#netmagic=fabfb5da
|
#netmagic=fabfb5da
|
||||||
#genesis=0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206
|
#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://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://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://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://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
|
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_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_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 makeseeds.py -a asmap-filled.dat -s seeds_testnet4.txt -m 72600 > nodes_testnet4.txt
|
||||||
python3 generate-seeds.py . > ../../src/chainparamsseeds.h
|
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
|
ZMQ example using python3's asyncio
|
||||||
|
|
||||||
Bitcoin should be started with the command line arguments:
|
Bitcoin should be started with the command line arguments:
|
||||||
bitcoind -testnet -daemon \
|
bitcoind -testnet4 -daemon \
|
||||||
-zmqpubrawtx=tcp://127.0.0.1:28332 \
|
-zmqpubrawtx=tcp://127.0.0.1:48332 \
|
||||||
-zmqpubrawblock=tcp://127.0.0.1:28332 \
|
-zmqpubrawblock=tcp://127.0.0.1:48332 \
|
||||||
-zmqpubhashtx=tcp://127.0.0.1:28332 \
|
-zmqpubhashtx=tcp://127.0.0.1:48332 \
|
||||||
-zmqpubhashblock=tcp://127.0.0.1:28332 \
|
-zmqpubhashblock=tcp://127.0.0.1:48332 \
|
||||||
-zmqpubsequence=tcp://127.0.0.1:28332
|
-zmqpubsequence=tcp://127.0.0.1:48332
|
||||||
|
|
||||||
We use the asyncio library here. `self.handle()` installs itself as a
|
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
|
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")
|
print("This example only works with Python 3.5 and greater")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
port = 28332
|
port = 48332
|
||||||
|
|
||||||
class ZMQHandler():
|
class ZMQHandler():
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -41,7 +41,7 @@ Comments may appear in two ways:
|
|||||||
### Network specific options
|
### Network specific options
|
||||||
|
|
||||||
Network specific options can be:
|
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`.
|
- prefixed with a chain name; e.g., `regtest.maxmempool=100`.
|
||||||
|
|
||||||
Network specific options take precedence over non-network specific options.
|
Network specific options take precedence over non-network specific options.
|
||||||
|
@ -410,7 +410,7 @@ to see it.
|
|||||||
### Signet, testnet, and regtest modes
|
### Signet, testnet, and regtest modes
|
||||||
|
|
||||||
If you are testing multi-machine code that needs to operate across the internet,
|
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.
|
with "play bitcoins" on a test network.
|
||||||
|
|
||||||
If you are testing something that can run on one machine, run with the
|
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 option | Data directory path
|
||||||
---------------------------------|------------------------------
|
---------------------------------|------------------------------
|
||||||
`-chain=main` (default) | *path_to_datadir*`/`
|
`-chain=main` (default) | *path_to_datadir*`/`
|
||||||
`-chain=test` or `-testnet` | *path_to_datadir*`/testnet3/`
|
|
||||||
`-chain=testnet4` or `-testnet4` | *path_to_datadir*`/testnet4/`
|
`-chain=testnet4` or `-testnet4` | *path_to_datadir*`/testnet4/`
|
||||||
`-chain=signet` or `-signet` | *path_to_datadir*`/signet/`
|
`-chain=signet` or `-signet` | *path_to_datadir*`/signet/`
|
||||||
`-chain=regtest` or `-regtest` | *path_to_datadir*`/regtest/`
|
`-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.
|
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:
|
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 `mainnet` -> the data directory, excluding the `/testnet4`, `/signet`, and `/regtest` directories and any overly large files, e.g. a huge `debug.log`
|
||||||
- For `testnet` -> `/testnet3`
|
|
||||||
- For `testnet4` -> `/testnet4`
|
- For `testnet4` -> `/testnet4`
|
||||||
- For `signet` -> `/signet`
|
- For `signet` -> `/signet`
|
||||||
|
|
||||||
To calculate `m_assumed_chain_state_size`, take the size in GiB of these directories:
|
To calculate `m_assumed_chain_state_size`, take the size in GiB of these directories:
|
||||||
- For `mainnet` -> `/chainstate`
|
- For `mainnet` -> `/chainstate`
|
||||||
- For `testnet` -> `/testnet3/chainstate`
|
|
||||||
- For `testnet4` -> `/testnet4/chainstate`
|
- For `testnet4` -> `/testnet4/chainstate`
|
||||||
- For `signet` -> `/signet/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:
|
For instance:
|
||||||
|
|
||||||
$ bitcoind -zmqpubhashtx=tcp://127.0.0.1:28332 \
|
$ bitcoind -zmqpubhashtx=tcp://127.0.0.1:48332 \
|
||||||
-zmqpubhashtx=tcp://192.168.1.2:28332 \
|
-zmqpubhashtx=tcp://192.168.1.2:48332 \
|
||||||
-zmqpubhashblock="tcp://[::1]:28333" \
|
-zmqpubhashblock="tcp://[::1]:28333" \
|
||||||
-zmqpubrawtx=ipc:///tmp/bitcoind.tx.raw \
|
-zmqpubrawtx=ipc:///tmp/bitcoind.tx.raw \
|
||||||
-zmqpubhashtxhwm=10000
|
-zmqpubhashtxhwm=10000
|
||||||
|
@ -95,9 +95,8 @@ Section -post SEC0001
|
|||||||
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
||||||
CreateDirectory $SMPROGRAMS\$StartMenuGroup
|
CreateDirectory $SMPROGRAMS\$StartMenuGroup
|
||||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@
|
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@" 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@" 2
|
||||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet4).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet4" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 3
|
|
||||||
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
|
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe
|
||||||
!insertmacro MUI_STARTMENU_WRITE_END
|
!insertmacro MUI_STARTMENU_WRITE_END
|
||||||
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
|
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)"
|
DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
|
||||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
|
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk"
|
||||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^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@ (testnet4).lnk"
|
||||||
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (test signet).lnk"
|
Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (test signet).lnk"
|
||||||
Delete /REBOOTOK "$SMSTARTUP\Bitcoin.lnk"
|
Delete /REBOOTOK "$SMSTARTUP\Bitcoin.lnk"
|
||||||
|
@ -75,7 +75,6 @@ static void SetupCliArgs(ArgsManager& argsman)
|
|||||||
SetupHelpOptions(argsman);
|
SetupHelpOptions(argsman);
|
||||||
|
|
||||||
const auto defaultBaseParams = CreateBaseChainParams(ChainType::MAIN);
|
const auto defaultBaseParams = CreateBaseChainParams(ChainType::MAIN);
|
||||||
const auto testnetBaseParams = CreateBaseChainParams(ChainType::TESTNET);
|
|
||||||
const auto testnet4BaseParams = CreateBaseChainParams(ChainType::TESTNET4);
|
const auto testnet4BaseParams = CreateBaseChainParams(ChainType::TESTNET4);
|
||||||
const auto signetBaseParams = CreateBaseChainParams(ChainType::SIGNET);
|
const auto signetBaseParams = CreateBaseChainParams(ChainType::SIGNET);
|
||||||
const auto regtestBaseParams = CreateBaseChainParams(ChainType::REGTEST);
|
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("-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("-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("-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("-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("-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);
|
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()) {
|
switch (gArgs.GetChainType()) {
|
||||||
case ChainType::TESTNET4:
|
case ChainType::TESTNET4:
|
||||||
return " testnet4";
|
return " testnet4";
|
||||||
case ChainType::TESTNET:
|
|
||||||
return " testnet";
|
|
||||||
case ChainType::SIGNET:
|
case ChainType::SIGNET:
|
||||||
return " signet";
|
return " signet";
|
||||||
case ChainType::REGTEST:
|
case ChainType::REGTEST:
|
||||||
|
@ -112,8 +112,6 @@ std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, c
|
|||||||
switch (chain) {
|
switch (chain) {
|
||||||
case ChainType::MAIN:
|
case ChainType::MAIN:
|
||||||
return CChainParams::Main();
|
return CChainParams::Main();
|
||||||
case ChainType::TESTNET:
|
|
||||||
return CChainParams::TestNet();
|
|
||||||
case ChainType::TESTNET4:
|
case ChainType::TESTNET4:
|
||||||
return CChainParams::TestNet4();
|
return CChainParams::TestNet4();
|
||||||
case ChainType::SIGNET: {
|
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. "
|
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);
|
"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("-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("-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("-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);
|
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) {
|
switch (chain) {
|
||||||
case ChainType::MAIN:
|
case ChainType::MAIN:
|
||||||
return std::make_unique<CBaseChainParams>("", 8332);
|
return std::make_unique<CBaseChainParams>("", 8332);
|
||||||
case ChainType::TESTNET:
|
|
||||||
return std::make_unique<CBaseChainParams>("testnet3", 18332);
|
|
||||||
case ChainType::TESTNET4:
|
case ChainType::TESTNET4:
|
||||||
return std::make_unique<CBaseChainParams>("testnet4", 48332);
|
return std::make_unique<CBaseChainParams>("testnet4", 48332);
|
||||||
case ChainType::SIGNET:
|
case ChainType::SIGNET:
|
||||||
|
@ -52,6 +52,6 @@ const CBaseChainParams& BaseParams();
|
|||||||
void SelectBaseParams(const ChainType chain);
|
void SelectBaseParams(const ChainType chain);
|
||||||
|
|
||||||
/** List of possible chain / network names */
|
/** 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
|
#endif // BITCOIN_CHAINPARAMSBASE_H
|
||||||
|
@ -159,7 +159,6 @@ std::list<SectionInfo> ArgsManager::GetUnrecognizedSections() const
|
|||||||
static const std::set<std::string> available_sections{
|
static const std::set<std::string> available_sections{
|
||||||
ChainTypeToString(ChainType::REGTEST),
|
ChainTypeToString(ChainType::REGTEST),
|
||||||
ChainTypeToString(ChainType::SIGNET),
|
ChainTypeToString(ChainType::SIGNET),
|
||||||
ChainTypeToString(ChainType::TESTNET),
|
|
||||||
ChainTypeToString(ChainType::TESTNET4),
|
ChainTypeToString(ChainType::TESTNET4),
|
||||||
ChainTypeToString(ChainType::MAIN),
|
ChainTypeToString(ChainType::MAIN),
|
||||||
};
|
};
|
||||||
@ -798,12 +797,11 @@ std::variant<ChainType, std::string> ArgsManager::GetChainArg() const
|
|||||||
|
|
||||||
const bool fRegTest = get_net("-regtest");
|
const bool fRegTest = get_net("-regtest");
|
||||||
const bool fSigNet = get_net("-signet");
|
const bool fSigNet = get_net("-signet");
|
||||||
const bool fTestNet = get_net("-testnet");
|
|
||||||
const bool fTestNet4 = get_net("-testnet4");
|
const bool fTestNet4 = get_net("-testnet4");
|
||||||
const auto chain_arg = GetArg("-chain");
|
const auto chain_arg = GetArg("-chain");
|
||||||
|
|
||||||
if ((int)chain_arg.has_value() + (int)fRegTest + (int)fSigNet + (int)fTestNet + (int)fTestNet4 > 1) {
|
if ((int)chain_arg.has_value() + (int)fRegTest + (int)fSigNet + (int)fTestNet4 > 1) {
|
||||||
throw std::runtime_error("Invalid combination of -regtest, -signet, -testnet, -testnet4 and -chain. Can use at most one.");
|
throw std::runtime_error("Invalid combination of -regtest, -signet, -testnet4 and -chain. Can use at most one.");
|
||||||
}
|
}
|
||||||
if (chain_arg) {
|
if (chain_arg) {
|
||||||
if (auto parsed = ChainTypeFromString(*chain_arg)) return *parsed;
|
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 (fRegTest) return ChainType::REGTEST;
|
||||||
if (fSigNet) return ChainType::SIGNET;
|
if (fSigNet) return ChainType::SIGNET;
|
||||||
if (fTestNet) return ChainType::TESTNET;
|
|
||||||
if (fTestNet4) return ChainType::TESTNET4;
|
if (fTestNet4) return ChainType::TESTNET4;
|
||||||
return ChainType::MAIN;
|
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);
|
init::AddLoggingArgs(argsman);
|
||||||
|
|
||||||
const auto defaultBaseParams = CreateBaseChainParams(ChainType::MAIN);
|
const auto defaultBaseParams = CreateBaseChainParams(ChainType::MAIN);
|
||||||
const auto testnetBaseParams = CreateBaseChainParams(ChainType::TESTNET);
|
|
||||||
const auto testnet4BaseParams = CreateBaseChainParams(ChainType::TESTNET4);
|
const auto testnet4BaseParams = CreateBaseChainParams(ChainType::TESTNET4);
|
||||||
const auto signetBaseParams = CreateBaseChainParams(ChainType::SIGNET);
|
const auto signetBaseParams = CreateBaseChainParams(ChainType::SIGNET);
|
||||||
const auto regtestBaseParams = CreateBaseChainParams(ChainType::REGTEST);
|
const auto regtestBaseParams = CreateBaseChainParams(ChainType::REGTEST);
|
||||||
const auto defaultChainParams = CreateChainParams(argsman, ChainType::MAIN);
|
const auto defaultChainParams = CreateChainParams(argsman, ChainType::MAIN);
|
||||||
const auto testnetChainParams = CreateChainParams(argsman, ChainType::TESTNET);
|
|
||||||
const auto testnet4ChainParams = CreateChainParams(argsman, ChainType::TESTNET4);
|
const auto testnet4ChainParams = CreateChainParams(argsman, ChainType::TESTNET4);
|
||||||
const auto signetChainParams = CreateChainParams(argsman, ChainType::SIGNET);
|
const auto signetChainParams = CreateChainParams(argsman, ChainType::SIGNET);
|
||||||
const auto regtestChainParams = CreateChainParams(argsman, ChainType::REGTEST);
|
const auto regtestChainParams = CreateChainParams(argsman, ChainType::REGTEST);
|
||||||
@ -469,7 +467,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc)
|
|||||||
#if HAVE_SYSTEM
|
#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);
|
argsman.AddArg("-alertnotify=<cmd>", "Execute command when an alert is raised (%s in cmd is replaced by message)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||||
#endif
|
#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("-blocksdir=<dir>", "Specify directory to hold blocks subdirectory for *.dat files (default: <datadir>)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
||||||
argsman.AddArg("-blocksxor",
|
argsman.AddArg("-blocksxor",
|
||||||
strprintf("Whether an XOR-key applies to blocksdir *.dat files. "
|
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("-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("-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("-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)",
|
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);
|
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);
|
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("-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("-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("-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("-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("-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);
|
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("-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("-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("-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
|
#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);
|
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
|
#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("-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("-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("-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("-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("-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);
|
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("-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("-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("-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("-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("-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);
|
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()
|
// 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.
|
// We removed checkpoints but keep the option to warn users who still have it in their config.
|
||||||
if (args.IsArgSet("-checkpoints")) {
|
if (args.IsArgSet("-checkpoints")) {
|
||||||
InitWarning(_("Option '-checkpoints' is set but checkpoints were removed. This option has no effect."));
|
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);
|
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.
|
// Warn if unrecognized section name are present in the config file.
|
||||||
bilingual_str warnings;
|
bilingual_str warnings;
|
||||||
for (const auto& section : args.GetUnrecognizedSections()) {
|
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.
|
* 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>();
|
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()
|
std::unique_ptr<const CChainParams> CChainParams::TestNet4()
|
||||||
{
|
{
|
||||||
return std::make_unique<const CTestNet4Params>();
|
return std::make_unique<const CTestNet4Params>();
|
||||||
@ -657,15 +557,12 @@ std::vector<int> CChainParams::GetAvailableSnapshotHeights() const
|
|||||||
std::optional<ChainType> GetNetworkForMagic(const MessageStartChars& message)
|
std::optional<ChainType> GetNetworkForMagic(const MessageStartChars& message)
|
||||||
{
|
{
|
||||||
const auto mainnet_msg = CChainParams::Main()->MessageStart();
|
const auto mainnet_msg = CChainParams::Main()->MessageStart();
|
||||||
const auto testnet_msg = CChainParams::TestNet()->MessageStart();
|
|
||||||
const auto testnet4_msg = CChainParams::TestNet4()->MessageStart();
|
const auto testnet4_msg = CChainParams::TestNet4()->MessageStart();
|
||||||
const auto regtest_msg = CChainParams::RegTest({})->MessageStart();
|
const auto regtest_msg = CChainParams::RegTest({})->MessageStart();
|
||||||
const auto signet_msg = CChainParams::SigNet({})->MessageStart();
|
const auto signet_msg = CChainParams::SigNet({})->MessageStart();
|
||||||
|
|
||||||
if (std::ranges::equal(message, mainnet_msg)) {
|
if (std::ranges::equal(message, mainnet_msg)) {
|
||||||
return ChainType::MAIN;
|
return ChainType::MAIN;
|
||||||
} else if (std::ranges::equal(message, testnet_msg)) {
|
|
||||||
return ChainType::TESTNET;
|
|
||||||
} else if (std::ranges::equal(message, testnet4_msg)) {
|
} else if (std::ranges::equal(message, testnet4_msg)) {
|
||||||
return ChainType::TESTNET4;
|
return ChainType::TESTNET4;
|
||||||
} else if (std::ranges::equal(message, regtest_msg)) {
|
} 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> RegTest(const RegTestOptions& options);
|
||||||
static std::unique_ptr<const CChainParams> SigNet(const SigNetOptions& options);
|
static std::unique_ptr<const CChainParams> SigNet(const SigNetOptions& options);
|
||||||
static std::unique_ptr<const CChainParams> Main();
|
static std::unique_ptr<const CChainParams> Main();
|
||||||
static std::unique_ptr<const CChainParams> TestNet();
|
|
||||||
static std::unique_ptr<const CChainParams> TestNet4();
|
static std::unique_ptr<const CChainParams> TestNet4();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -114,7 +114,6 @@ static std::string DummyAddress(const CChainParams ¶ms)
|
|||||||
addr = "bc1p35yvjel7srp783ztf8v6jdra7dhfzk5jaun8xz2qp6ws7z80n4tq2jku9f";
|
addr = "bc1p35yvjel7srp783ztf8v6jdra7dhfzk5jaun8xz2qp6ws7z80n4tq2jku9f";
|
||||||
break;
|
break;
|
||||||
case ChainType::SIGNET:
|
case ChainType::SIGNET:
|
||||||
case ChainType::TESTNET:
|
|
||||||
case ChainType::TESTNET4:
|
case ChainType::TESTNET4:
|
||||||
addr = "tb1p35yvjel7srp783ztf8v6jdra7dhfzk5jaun8xz2qp6ws7z80n4tqa6qnlg";
|
addr = "tb1p35yvjel7srp783ztf8v6jdra7dhfzk5jaun8xz2qp6ws7z80n4tqa6qnlg";
|
||||||
break;
|
break;
|
||||||
@ -519,8 +518,6 @@ fs::path static StartupShortcutPath()
|
|||||||
ChainType chain = gArgs.GetChainType();
|
ChainType chain = gArgs.GetChainType();
|
||||||
if (chain == ChainType::MAIN)
|
if (chain == ChainType::MAIN)
|
||||||
return GetSpecialFolderPath(CSIDL_STARTUP) / "Bitcoin.lnk";
|
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)));
|
return GetSpecialFolderPath(CSIDL_STARTUP) / fs::u8path(strprintf("Bitcoin (%s).lnk", ChainTypeToString(chain)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,6 @@ static const struct {
|
|||||||
const int iconColorSaturationReduction;
|
const int iconColorSaturationReduction;
|
||||||
} network_styles[] = {
|
} network_styles[] = {
|
||||||
{ChainType::MAIN, QAPP_APP_NAME_DEFAULT, 0, 0},
|
{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::TESTNET4, QAPP_APP_NAME_TESTNET4, 70, 30},
|
||||||
{ChainType::SIGNET, QAPP_APP_NAME_SIGNET, 35, 15},
|
{ChainType::SIGNET, QAPP_APP_NAME_SIGNET, 35, 15},
|
||||||
{ChainType::REGTEST, QAPP_APP_NAME_REGTEST, 160, 30},
|
{ChainType::REGTEST, QAPP_APP_NAME_REGTEST, 160, 30},
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico"
|
IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico"
|
||||||
IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_testnet.ico"
|
IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_signet.ico"
|
||||||
IDI_ICON3 ICON DISCARDABLE "icons/bitcoin_signet.ico"
|
IDI_ICON3 ICON DISCARDABLE "icons/bitcoin_testnet.ico" // testnet4
|
||||||
IDI_ICON4 ICON DISCARDABLE "icons/bitcoin_testnet.ico" // testnet4
|
|
||||||
|
|
||||||
#include <windows.h> // needed for VERSIONINFO
|
#include <windows.h> // needed for VERSIONINFO
|
||||||
#include "../../clientversion.h" // holds the needed client version information
|
#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)
|
BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
|
||||||
{
|
{
|
||||||
TestArgsManager test_args;
|
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 testnet4 = std::make_pair("-testnet4", ArgsManager::ALLOW_ANY);
|
||||||
const auto regtest = std::make_pair("-regtest", 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_testnet4[] = {"cmd", "-testnet4"};
|
||||||
const char* argv_regtest[] = {"cmd", "-regtest"};
|
const char* argv_regtest[] = {"cmd", "-regtest"};
|
||||||
const char* argv_test_no_reg[] = {"cmd", "-testnet", "-noregtest"};
|
const char* argv_test_no_reg[] = {"cmd", "-testnet4", "-noregtest"};
|
||||||
const char* argv_both[] = {"cmd", "-testnet", "-regtest"};
|
const char* argv_both[] = {"cmd", "-testnet4", "-regtest"};
|
||||||
|
|
||||||
// equivalent to "-testnet"
|
// regtest in test network section is ignored
|
||||||
// regtest in testnet section is ignored
|
const char* testnetconf = "testnet4=1\nregtest=0\n[testnet4]\nregtest=1";
|
||||||
const char* testnetconf = "testnet=1\nregtest=0\n[test]\nregtest=1";
|
|
||||||
std::string error;
|
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_EQUAL(test_args.GetChainTypeString(), "main");
|
||||||
|
|
||||||
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error));
|
BOOST_CHECK(test_args.ParseParameters(2, argv_testnet4, error));
|
||||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test");
|
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4");
|
||||||
|
|
||||||
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error));
|
BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error));
|
||||||
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "main");
|
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_EQUAL(test_args.GetChainTypeString(), "regtest");
|
||||||
|
|
||||||
BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error));
|
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(test_args.ParseParameters(3, argv_both, error));
|
||||||
BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_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);
|
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);
|
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));
|
BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
|
||||||
test_args.ReadConfigString(testnetconf);
|
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));
|
BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error));
|
||||||
test_args.ReadConfigString(testnetconf);
|
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));
|
BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
|
||||||
test_args.ReadConfigString(testnetconf);
|
test_args.ReadConfigString(testnetconf);
|
||||||
BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_error);
|
BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_error);
|
||||||
|
|
||||||
// check setting the network to test (and thus making
|
// check setting the network to testnet4 (and thus making
|
||||||
// [test] regtest=1 potentially relevant) doesn't break things
|
// [testnet4] regtest=1 potentially relevant) doesn't break things
|
||||||
test_args.SelectConfigNetwork("test");
|
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);
|
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);
|
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));
|
BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
|
||||||
test_args.ReadConfigString(testnetconf);
|
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));
|
BOOST_CHECK(test_args.ParseParameters(2, argv_test_no_reg, error));
|
||||||
test_args.ReadConfigString(testnetconf);
|
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));
|
BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
|
||||||
test_args.ReadConfigString(testnetconf);
|
test_args.ReadConfigString(testnetconf);
|
||||||
@ -739,7 +736,7 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
|
|||||||
//
|
//
|
||||||
// - Combining SoftSet and ForceSet calls.
|
// - 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
|
// sections are applied and to check for mainnet-specific behaviors like
|
||||||
// inheriting settings from the default section.
|
// inheriting settings from the default section.
|
||||||
//
|
//
|
||||||
@ -766,8 +763,8 @@ struct ArgsMergeTestingSetup : public BasicTestingSetup {
|
|||||||
ForEachNoDup(conf_actions, SET, SECTION_NEGATE, [&] {
|
ForEachNoDup(conf_actions, SET, SECTION_NEGATE, [&] {
|
||||||
for (bool soft_set : {false, true}) {
|
for (bool soft_set : {false, true}) {
|
||||||
for (bool force_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& section : {ChainTypeToString(ChainType::MAIN), 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& network : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) {
|
||||||
for (bool net_specific : {false, true}) {
|
for (bool net_specific : {false, true}) {
|
||||||
fn(arg_actions, conf_actions, soft_set, force_set, section, network, net_specific);
|
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:
|
// Results file is formatted like:
|
||||||
//
|
//
|
||||||
// <input> || <IsArgSet/IsArgNegated/GetArg output> | <GetArgs output> | <GetUnsuitable output>
|
// <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.
|
// Similar test as above, but for ArgsManager::GetChainTypeString function.
|
||||||
@ -956,11 +953,11 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
|
|||||||
TestArgsManager parser;
|
TestArgsManager parser;
|
||||||
LOCK(parser.cs_args);
|
LOCK(parser.cs_args);
|
||||||
parser.AddArg("-regtest", "regtest", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS);
|
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" :
|
auto arg = [](Action action) { return action == ENABLE_TEST ? "-testnet4=1" :
|
||||||
action == DISABLE_TEST ? "-testnet=0" :
|
action == DISABLE_TEST ? "-testnet4=0" :
|
||||||
action == NEGATE_TEST ? "-notestnet=1" :
|
action == NEGATE_TEST ? "-notestnet4=1" :
|
||||||
action == ENABLE_REG ? "-regtest=1" :
|
action == ENABLE_REG ? "-regtest=1" :
|
||||||
action == DISABLE_REG ? "-regtest=0" :
|
action == DISABLE_REG ? "-regtest=0" :
|
||||||
action == NEGATE_REG ? "-noregtest=1" : nullptr; };
|
action == NEGATE_REG ? "-noregtest=1" : nullptr; };
|
||||||
@ -1024,7 +1021,7 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
|
|||||||
// Results file is formatted like:
|
// Results file is formatted like:
|
||||||
//
|
//
|
||||||
// <input> || <output>
|
// <input> || <output>
|
||||||
BOOST_CHECK_EQUAL(out_sha_hex, "9e60306e1363528bbc19a47f22bcede88e5d6815212f18ec8e6cdc4638dddab4");
|
BOOST_CHECK_EQUAL(out_sha_hex, "04c3362420dac6338c4b807d57a6e7c520ec18eaeb3143a8448319a17d766a08");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(util_ReadWriteSettings)
|
BOOST_AUTO_TEST_CASE(util_ReadWriteSettings)
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
"mzK2FFDEhxqHcmrJw1ysqFkVyhUULo45hZ",
|
"mzK2FFDEhxqHcmrJw1ysqFkVyhUULo45hZ",
|
||||||
"76a914ce28b26c57472737f5c3561a1761185bd8589a4388ac",
|
"76a914ce28b26c57472737f5c3561a1761185bd8589a4388ac",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false
|
"isPrivkey": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -27,7 +27,7 @@
|
|||||||
"2NC2hEhe28ULKAJkW5MjZ3jtTMJdvXmByvK",
|
"2NC2hEhe28ULKAJkW5MjZ3jtTMJdvXmByvK",
|
||||||
"a914ce0bba75891ff9ec60148d4bd4a09ee2dc5c933187",
|
"a914ce0bba75891ff9ec60148d4bd4a09ee2dc5c933187",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false
|
"isPrivkey": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -85,7 +85,7 @@
|
|||||||
"92ZdE5HoLafywnTBbzPxbvRmp75pSfzvdU3XaZGh1cToipgdHVh",
|
"92ZdE5HoLafywnTBbzPxbvRmp75pSfzvdU3XaZGh1cToipgdHVh",
|
||||||
"80c32d81e91bdea04cd7a3819b32275fc3298af4c7ec87eb0099527d041ced5c",
|
"80c32d81e91bdea04cd7a3819b32275fc3298af4c7ec87eb0099527d041ced5c",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isCompressed": false,
|
"isCompressed": false,
|
||||||
"isPrivkey": true
|
"isPrivkey": true
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@
|
|||||||
"cV83kKisF3RQSvXbUCm9ox3kaz5JjEUBWcx8tNydfGJcyeUxuH47",
|
"cV83kKisF3RQSvXbUCm9ox3kaz5JjEUBWcx8tNydfGJcyeUxuH47",
|
||||||
"e0fcd4ce4e3d0e3de091f21415bb7cd011fac288c42020a879f28c2a4387df9b",
|
"e0fcd4ce4e3d0e3de091f21415bb7cd011fac288c42020a879f28c2a4387df9b",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isCompressed": true,
|
"isCompressed": true,
|
||||||
"isPrivkey": true
|
"isPrivkey": true
|
||||||
}
|
}
|
||||||
@ -175,7 +175,7 @@
|
|||||||
"tb1qcrh3yqn4nlleplcez2yndq2ry8h9ncg3qh7n54",
|
"tb1qcrh3yqn4nlleplcez2yndq2ry8h9ncg3qh7n54",
|
||||||
"0014c0ef1202759fff90ff19128936814321ee59e111",
|
"0014c0ef1202759fff90ff19128936814321ee59e111",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
@ -184,7 +184,7 @@
|
|||||||
"tb1quyl9ujpgwr2chdzdnnalen48sup245vdfnh2jxhsuq3yx80rrwlq5hqfe4",
|
"tb1quyl9ujpgwr2chdzdnnalen48sup245vdfnh2jxhsuq3yx80rrwlq5hqfe4",
|
||||||
"0020e13e5e482870d58bb44d9cfbfccea78702aad18d4ceea91af0e022431de31bbe",
|
"0020e13e5e482870d58bb44d9cfbfccea78702aad18d4ceea91af0e022431de31bbe",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
@ -193,7 +193,7 @@
|
|||||||
"tb1p35n52jy6xkm4wd905tdy8qtagrn73kqdz73xe4zxpvq9t3fp50aqk3s6gz",
|
"tb1p35n52jy6xkm4wd905tdy8qtagrn73kqdz73xe4zxpvq9t3fp50aqk3s6gz",
|
||||||
"51208d2745489a35b75734afa2da43817d40e7e8d80d17a26cd4460b0055c521a3fa",
|
"51208d2745489a35b75734afa2da43817d40e7e8d80d17a26cd4460b0055c521a3fa",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
@ -202,7 +202,7 @@
|
|||||||
"tb1rgv5m6uvdk3kc7qsuz0c79v88ycr5w4wa",
|
"tb1rgv5m6uvdk3kc7qsuz0c79v88ycr5w4wa",
|
||||||
"53104329bd718db46d8f021c13f1e2b0e726",
|
"53104329bd718db46d8f021c13f1e2b0e726",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
@ -299,7 +299,7 @@
|
|||||||
"n4YNbYuFdPwFrxSP8sjHFbAhUbLMUiY9jE",
|
"n4YNbYuFdPwFrxSP8sjHFbAhUbLMUiY9jE",
|
||||||
"76a914fc8f9851f3c1e4719cd0b8e4816dd4e88c72e52888ac",
|
"76a914fc8f9851f3c1e4719cd0b8e4816dd4e88c72e52888ac",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false
|
"isPrivkey": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -307,7 +307,7 @@
|
|||||||
"2NAeQVZayzVFAtgeC3iYJsjpjWDmsDph71A",
|
"2NAeQVZayzVFAtgeC3iYJsjpjWDmsDph71A",
|
||||||
"a914bedc797342c03fd7a346c4c7857ca03d467013b687",
|
"a914bedc797342c03fd7a346c4c7857ca03d467013b687",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false
|
"isPrivkey": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -365,7 +365,7 @@
|
|||||||
"921M1RNxghFcsVGqAJksQVbSgx36Yz4u6vebfz1wDujNvgNt93B",
|
"921M1RNxghFcsVGqAJksQVbSgx36Yz4u6vebfz1wDujNvgNt93B",
|
||||||
"3777b341c45e2a9b9bf6bfb71dc7d129f64f1b9406ed4f93ade8f56065f1b732",
|
"3777b341c45e2a9b9bf6bfb71dc7d129f64f1b9406ed4f93ade8f56065f1b732",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isCompressed": false,
|
"isCompressed": false,
|
||||||
"isPrivkey": true
|
"isPrivkey": true
|
||||||
}
|
}
|
||||||
@ -374,7 +374,7 @@
|
|||||||
"cNEnbfF2fcxmmCLWqMAaq6fxJvVkwMbyU3kCbpQznz4Z1j6TZDGb",
|
"cNEnbfF2fcxmmCLWqMAaq6fxJvVkwMbyU3kCbpQznz4Z1j6TZDGb",
|
||||||
"1397b0d4a03e1ab2c54dd9af99ce1ecbfb90c80a58886da95e1181a55703d96b",
|
"1397b0d4a03e1ab2c54dd9af99ce1ecbfb90c80a58886da95e1181a55703d96b",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isCompressed": true,
|
"isCompressed": true,
|
||||||
"isPrivkey": true
|
"isPrivkey": true
|
||||||
}
|
}
|
||||||
@ -455,7 +455,7 @@
|
|||||||
"tb1ql4k5ayv7p7w0t0ge7tpntgpkgw53g2payxkszr",
|
"tb1ql4k5ayv7p7w0t0ge7tpntgpkgw53g2payxkszr",
|
||||||
"0014fd6d4e919e0f9cf5bd19f2c335a03643a914283d",
|
"0014fd6d4e919e0f9cf5bd19f2c335a03643a914283d",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
@ -464,7 +464,7 @@
|
|||||||
"tb1q9jx3x2qqdpempxrcfgyrkjd5fzeacaqj4ua7cs7fe2sfd2wdaueq5wn26y",
|
"tb1q9jx3x2qqdpempxrcfgyrkjd5fzeacaqj4ua7cs7fe2sfd2wdaueq5wn26y",
|
||||||
"00202c8d1328006873b098784a083b49b448b3dc7412af3bec43c9caa096a9cdef32",
|
"00202c8d1328006873b098784a083b49b448b3dc7412af3bec43c9caa096a9cdef32",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
@ -473,7 +473,7 @@
|
|||||||
"tb1pdswckwd9ym5yf5eyzg8j4jjwnzla8y0tf9cp7aasfkek0u29sz9qfr00yf",
|
"tb1pdswckwd9ym5yf5eyzg8j4jjwnzla8y0tf9cp7aasfkek0u29sz9qfr00yf",
|
||||||
"51206c1d8b39a526e844d324120f2aca4e98bfd391eb49701f77b04db367f145808a",
|
"51206c1d8b39a526e844d324120f2aca4e98bfd391eb49701f77b04db367f145808a",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
@ -482,7 +482,7 @@
|
|||||||
"tb1r0ecpfxg2udhtc556gqrpwwhk4sw3f0kc",
|
"tb1r0ecpfxg2udhtc556gqrpwwhk4sw3f0kc",
|
||||||
"53107e7014990ae36ebc529a4006173af6ac",
|
"53107e7014990ae36ebc529a4006173af6ac",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false,
|
"isPrivkey": false,
|
||||||
"tryCaseFlip": true
|
"tryCaseFlip": true
|
||||||
}
|
}
|
||||||
@ -579,7 +579,7 @@
|
|||||||
"mwgS2HRbjyfYxFnR1nF9VKLvmdgMfFBmGq",
|
"mwgS2HRbjyfYxFnR1nF9VKLvmdgMfFBmGq",
|
||||||
"76a914b14ce7070b53cb0e4b5b5f6e253e876990aeca2e88ac",
|
"76a914b14ce7070b53cb0e4b5b5f6e253e876990aeca2e88ac",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false
|
"isPrivkey": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -587,7 +587,7 @@
|
|||||||
"2MwBVrJQ76BdaGD76CTmou8cZzQYLpe4NqU",
|
"2MwBVrJQ76BdaGD76CTmou8cZzQYLpe4NqU",
|
||||||
"a9142b2c149cde619eae3d7fe995243b76a3417541aa87",
|
"a9142b2c149cde619eae3d7fe995243b76a3417541aa87",
|
||||||
{
|
{
|
||||||
"chain": "test",
|
"chain": "testnet4",
|
||||||
"isPrivkey": false
|
"isPrivkey": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -137,7 +137,7 @@ BOOST_AUTO_TEST_CASE(key_io_invalid)
|
|||||||
std::string exp_base58string = test[0].get_str();
|
std::string exp_base58string = test[0].get_str();
|
||||||
|
|
||||||
// must be invalid as public and as private key
|
// 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);
|
SelectParams(chain);
|
||||||
destination = DecodeDestination(exp_base58string);
|
destination = DecodeDestination(exp_base58string);
|
||||||
BOOST_CHECK_MESSAGE(!IsValidDestination(destination), "IsValid pubkey in mainnet:" + strTest);
|
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);
|
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)
|
BOOST_AUTO_TEST_CASE(ChainParams_TESTNET4_sanity)
|
||||||
{
|
{
|
||||||
sanity_check_chainparams(*m_node.args, ChainType::TESTNET4);
|
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
|
// check that any deployment on any chain can conceivably reach both
|
||||||
// ACTIVE and FAILED states in roughly the way we expect
|
// 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);
|
const auto chainParams = CreateChainParams(*m_node.args, chain_type);
|
||||||
uint32_t chain_all_vbits{0};
|
uint32_t chain_all_vbits{0};
|
||||||
for (int i = 0; i < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; ++i) {
|
for (int i = 0; i < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; ++i) {
|
||||||
|
@ -13,8 +13,6 @@ std::string ChainTypeToString(ChainType chain)
|
|||||||
switch (chain) {
|
switch (chain) {
|
||||||
case ChainType::MAIN:
|
case ChainType::MAIN:
|
||||||
return "main";
|
return "main";
|
||||||
case ChainType::TESTNET:
|
|
||||||
return "test";
|
|
||||||
case ChainType::TESTNET4:
|
case ChainType::TESTNET4:
|
||||||
return "testnet4";
|
return "testnet4";
|
||||||
case ChainType::SIGNET:
|
case ChainType::SIGNET:
|
||||||
@ -29,8 +27,6 @@ std::optional<ChainType> ChainTypeFromString(std::string_view chain)
|
|||||||
{
|
{
|
||||||
if (chain == "main") {
|
if (chain == "main") {
|
||||||
return ChainType::MAIN;
|
return ChainType::MAIN;
|
||||||
} else if (chain == "test") {
|
|
||||||
return ChainType::TESTNET;
|
|
||||||
} else if (chain == "testnet4") {
|
} else if (chain == "testnet4") {
|
||||||
return ChainType::TESTNET4;
|
return ChainType::TESTNET4;
|
||||||
} else if (chain == "signet") {
|
} else if (chain == "signet") {
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
enum class ChainType {
|
enum class ChainType {
|
||||||
MAIN,
|
MAIN,
|
||||||
TESTNET,
|
|
||||||
SIGNET,
|
SIGNET,
|
||||||
REGTEST,
|
REGTEST,
|
||||||
TESTNET4,
|
TESTNET4,
|
||||||
|
@ -2589,10 +2589,6 @@ bool Chainstate::ConnectBlock(const CBlock& block, BlockValidationState& state,
|
|||||||
// coinbase. The two historical BIP30 violations often provide a confusing
|
// coinbase. The two historical BIP30 violations often provide a confusing
|
||||||
// edge case when manipulating the UTXO and it would be simpler not to have
|
// edge case when manipulating the UTXO and it would be simpler not to have
|
||||||
// another edge case to deal with.
|
// 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);
|
assert(pindex->pprev);
|
||||||
CBlockIndex* pindexBIP34height = pindex->pprev->GetAncestor(params.GetConsensus().BIP34Height);
|
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.
|
//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
|
} // no default case, so the compiler can warn about missing cases
|
||||||
assert(!desc_prefix.empty());
|
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()) {
|
if (Params().IsTestChain()) {
|
||||||
desc_prefix += "/1h";
|
desc_prefix += "/1h";
|
||||||
} else {
|
} else {
|
||||||
|
@ -102,7 +102,6 @@ class AssumeutxoTest(BitcoinTestFramework):
|
|||||||
invalid_magics = [
|
invalid_magics = [
|
||||||
# magic, name, real
|
# magic, name, real
|
||||||
[0xf9beb4d9, "main", True],
|
[0xf9beb4d9, "main", True],
|
||||||
[0x0b110907, "test", True],
|
|
||||||
[0x0a03cf40, "signet", True],
|
[0x0a03cf40, "signet", True],
|
||||||
[0x00000000, "", False],
|
[0x00000000, "", False],
|
||||||
[0xffffffff, "", False],
|
[0xffffffff, "", False],
|
||||||
|
@ -462,38 +462,23 @@ class ConfArgsTest(BitcoinTestFramework):
|
|||||||
def test_acceptstalefeeestimates_arg_support(self):
|
def test_acceptstalefeeestimates_arg_support(self):
|
||||||
self.log.info("Test -acceptstalefeeestimates option support")
|
self.log.info("Test -acceptstalefeeestimates option support")
|
||||||
conf_file = self.nodes[0].datadir_path / "bitcoin.conf"
|
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')
|
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.')
|
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
|
util.write_config(conf_file, n=0, chain="regtest") # Reset to regtest
|
||||||
|
|
||||||
def test_testnet3_deprecation_msg(self):
|
def test_testnet3_removed_msg(self):
|
||||||
self.log.info("Test testnet3 deprecation warning")
|
self.log.info("Test testnet3 dropped error")
|
||||||
t3_warning_log = "Warning: Support for testnet3 is deprecated and will be removed in an upcoming release. Consider switching to testnet4."
|
|
||||||
|
|
||||||
def warning_msg(node, approx_size):
|
# Starting node with -testnet3 will fail
|
||||||
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.'
|
self.nodes[0].chain = "testnet"
|
||||||
|
|
||||||
# Testnet3 node will log the warning
|
|
||||||
self.nodes[0].chain = 'testnet3'
|
|
||||||
self.nodes[0].replace_in_config([('regtest=', 'testnet='), ('[regtest]', '[test]')])
|
self.nodes[0].replace_in_config([('regtest=', 'testnet='), ('[regtest]', '[test]')])
|
||||||
with self.nodes[0].assert_debug_log([t3_warning_log]):
|
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.")
|
||||||
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)
|
|
||||||
|
|
||||||
# Testnet4 node will not log the warning
|
# Testnet4 node will not fail to start
|
||||||
self.nodes[0].chain = 'testnet4'
|
self.nodes[0].chain = 'testnet4'
|
||||||
self.nodes[0].replace_in_config([('testnet=', 'testnet4='), ('[test]', '[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)
|
self.stop_node(0)
|
||||||
|
|
||||||
# Reset to regtest
|
# Reset to regtest
|
||||||
@ -515,7 +500,7 @@ class ConfArgsTest(BitcoinTestFramework):
|
|||||||
self.test_ignored_conf()
|
self.test_ignored_conf()
|
||||||
self.test_ignored_default_conf()
|
self.test_ignored_default_conf()
|
||||||
self.test_acceptstalefeeestimates_arg_support()
|
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
|
# 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")]
|
self.nodes[0].args = [arg for arg in self.nodes[0].args if not arg.startswith("-datadir")]
|
||||||
|
@ -187,11 +187,11 @@ def address_to_scriptpubkey(address):
|
|||||||
"""Converts a given address to the corresponding output script (scriptPubKey)."""
|
"""Converts a given address to the corresponding output script (scriptPubKey)."""
|
||||||
version, payload = bech32_to_bytes(address)
|
version, payload = bech32_to_bytes(address)
|
||||||
if version is not None:
|
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)
|
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)
|
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)
|
return scripthash_to_p2sh_script(payload)
|
||||||
# TODO: also support other address formats
|
# TODO: also support other address formats
|
||||||
else:
|
else:
|
||||||
|
@ -79,7 +79,6 @@ DEFAULT_MEMPOOL_EXPIRY_HOURS = 336 # hours
|
|||||||
|
|
||||||
MAGIC_BYTES = {
|
MAGIC_BYTES = {
|
||||||
"mainnet": b"\xf9\xbe\xb4\xd9", # mainnet
|
"mainnet": b"\xf9\xbe\xb4\xd9", # mainnet
|
||||||
"testnet3": b"\x0b\x11\x09\x07", # testnet3
|
|
||||||
"regtest": b"\xfa\xbf\xb5\xda", # regtest
|
"regtest": b"\xfa\xbf\xb5\xda", # regtest
|
||||||
"signet": b"\x0a\x03\xcf\x40", # signet
|
"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):
|
def write_config(config_path, *, n, chain, extra_config="", disable_autoconnect=True):
|
||||||
# Translate chain subdirectory name to config name
|
# Translate chain subdirectory name to config name
|
||||||
if chain == 'testnet3':
|
chain_name_conf_arg = chain
|
||||||
chain_name_conf_arg = 'testnet'
|
chain_name_conf_section = chain
|
||||||
chain_name_conf_section = 'test'
|
|
||||||
else:
|
|
||||||
chain_name_conf_arg = chain
|
|
||||||
chain_name_conf_section = chain
|
|
||||||
with open(config_path, 'w', encoding='utf8') as f:
|
with open(config_path, 'w', encoding='utf8') as f:
|
||||||
if chain_name_conf_arg:
|
if chain_name_conf_arg:
|
||||||
f.write("{}=1\n".format(chain_name_conf_arg))
|
f.write("{}=1\n".format(chain_name_conf_arg))
|
||||||
|
@ -20,10 +20,7 @@ class WalletCrossChain(BitcoinTestFramework):
|
|||||||
def setup_network(self):
|
def setup_network(self):
|
||||||
self.add_nodes(self.num_nodes)
|
self.add_nodes(self.num_nodes)
|
||||||
|
|
||||||
# Switch node 1 to testnet before starting it.
|
# Node 1 is omitted, it was previously used with testnet3.
|
||||||
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]')])
|
|
||||||
|
|
||||||
# Switch node 2 to testnet4 before starting it.
|
# Switch node 2 to testnet4 before starting it.
|
||||||
self.nodes[2].chain = 'testnet4'
|
self.nodes[2].chain = 'testnet4'
|
||||||
@ -40,11 +37,7 @@ class WalletCrossChain(BitcoinTestFramework):
|
|||||||
self.nodes[0].createwallet(node0_wallet)
|
self.nodes[0].createwallet(node0_wallet)
|
||||||
self.nodes[0].backupwallet(node0_wallet_backup)
|
self.nodes[0].backupwallet(node0_wallet_backup)
|
||||||
self.nodes[0].unloadwallet(node0_wallet)
|
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 = self.nodes[2].datadir_path / 'node2_wallet'
|
||||||
node2_wallet_backup = self.nodes[0].datadir_path / 'node2_wallet.bak'
|
node2_wallet_backup = self.nodes[0].datadir_path / 'node2_wallet.bak'
|
||||||
self.nodes[2].createwallet(node2_wallet)
|
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")
|
self.log.info("Loading/restoring wallets into nodes with a different genesis block")
|
||||||
|
|
||||||
if self.options.descriptors:
|
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[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[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[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[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:
|
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[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[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[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[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:
|
if not self.options.descriptors:
|
||||||
self.log.info("Override cross-chain wallet load protection")
|
self.log.info("Override cross-chain wallet load protection")
|
||||||
self.stop_nodes()
|
self.stop_nodes()
|
||||||
self.start_nodes([['-walletcrosschain', '-prune=550']] * self.num_nodes)
|
self.start_nodes([['-walletcrosschain', '-prune=550']] * self.num_nodes)
|
||||||
self.nodes[0].loadwallet(node1_wallet)
|
self.nodes[0].loadwallet(node2_wallet)
|
||||||
self.nodes[1].loadwallet(node0_wallet)
|
self.nodes[2].loadwallet(node0_wallet)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user