Compare commits
2602
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aef2ab6315 | ||
|
|
8c8e287be0 | ||
|
|
f99fbc1e87 | ||
|
|
6b4a46d273 | ||
|
|
17d2c71c0f | ||
|
|
6ec413b7ad | ||
|
|
2922959f0b | ||
|
|
c233b4317d | ||
|
|
fff151f07e | ||
|
|
d9a65223ab | ||
|
|
42d2f4d7e4 | ||
|
|
bb92984dca | ||
|
|
cad743ec54 | ||
|
|
dfa7fc7723 | ||
|
|
9321e0fd14 | ||
|
|
40e51baadc | ||
|
|
3207c69528 | ||
|
|
bd85a6a72f | ||
|
|
e65de697f0 | ||
|
|
b08dbde2da | ||
|
|
6ced5e2944 | ||
|
|
de0726fcb0 | ||
|
|
0a0f540189 | ||
|
|
f35fa5757a | ||
|
|
fa8792a65e | ||
|
|
d400d33b1e | ||
|
|
c2e2725855 | ||
|
|
aaa376c5e4 | ||
|
|
b0d1385273 | ||
|
|
0e7f9cf99b | ||
|
|
34ebb257e8 | ||
|
|
7519f9fdf1 | ||
|
|
a29e8226c7 | ||
|
|
af0303ff7d | ||
|
|
bc6017194d | ||
|
|
4f3b6175c0 | ||
|
|
9486aa98db | ||
|
|
befc82d3cd | ||
|
|
9b0cbbb0a8 | ||
|
|
1dd24fe18f | ||
|
|
b3d0b1803f | ||
|
|
760a27dd4b | ||
|
|
2bbc098bff | ||
|
|
f671654bdd | ||
|
|
a0ebd8bb16 | ||
|
|
f39478140a | ||
|
|
f4a3207ede | ||
|
|
96c1ab413f | ||
|
|
0ec3d44276 | ||
|
|
08e6e04145 | ||
|
|
dbb892d89f | ||
|
|
4ca30abeef | ||
|
|
b4ea0db04f | ||
|
|
a1a012039a | ||
|
|
2bc205ed62 | ||
|
|
da2e155b72 | ||
|
|
6fd93ed170 | ||
|
|
298b2b4785 | ||
|
|
52e7546e98 | ||
|
|
fb228ebbff | ||
|
|
92dcfe530b | ||
|
|
86723a3223 | ||
|
|
4a155a9e1f | ||
|
|
ea9a8bf83f | ||
|
|
0a064c1b3d | ||
|
|
85e76f925e | ||
|
|
ca9c873858 | ||
|
|
b414124e5e | ||
|
|
4302bc02d6 | ||
|
|
dc805eb749 | ||
|
|
9617fb6899 | ||
|
|
ceb3f1e41e | ||
|
|
5c26a3da1f | ||
|
|
7c98160b81 | ||
|
|
a4235e2b3d | ||
|
|
ff8d81d0bc | ||
|
|
488b7966e7 | ||
|
|
07e5abbd3e | ||
|
|
2f469c2f58 | ||
|
|
ea7bbbc4ae | ||
|
|
02163fbc92 | ||
|
|
bdd339d4ed | ||
|
|
ad73b312e1 | ||
|
|
bd29359d12 | ||
|
|
73315c45fb | ||
|
|
3b4fa779ac | ||
|
|
f24d669cff | ||
|
|
313c701be6 | ||
|
|
106d354689 | ||
|
|
c6fb2b416a | ||
|
|
30fae764ae | ||
|
|
6a66a11e54 | ||
|
|
ed7d1ef493 | ||
|
|
5697645748 | ||
|
|
0476632282 | ||
|
|
55a8cbd22c | ||
|
|
426bfb795a | ||
|
|
fc71ba507f | ||
|
|
596b01fba2 | ||
|
|
9ae42929d7 | ||
|
|
49e1910050 | ||
|
|
059cbedb40 | ||
|
|
075d068ccd | ||
|
|
93618c0687 | ||
|
|
c6bda331b8 | ||
|
|
9c05a1f734 | ||
|
|
d7deb9a3eb | ||
|
|
5343b0f508 | ||
|
|
e6c8072f50 | ||
|
|
d566620de8 | ||
|
|
171f1f716a | ||
|
|
45f3e694a0 | ||
|
|
9da534c75c | ||
|
|
4e8ee737fc | ||
|
|
c940f597a4 | ||
|
|
6574213914 | ||
|
|
b45409262f | ||
|
|
dec3af7d7f | ||
|
|
b6b3998864 | ||
|
|
1c1a28e1c3 | ||
|
|
efdc32f60e | ||
|
|
c1d22d8b32 | ||
|
|
a4685b7bac | ||
|
|
6a1b523ba1 | ||
|
|
c7bdf61fb1 | ||
|
|
742062f84c | ||
|
|
093d350df3 | ||
|
|
7b72968968 | ||
|
|
034888c58e | ||
|
|
ab0e261e1b | ||
|
|
78800a4e77 | ||
|
|
a3a429edad | ||
|
|
f094e61b4a | ||
|
|
bca0023756 | ||
|
|
17c43caacf | ||
|
|
3ff8a09183 | ||
|
|
76776e5cc1 | ||
|
|
49f5825296 | ||
|
|
f189256a62 | ||
|
|
3390e3536d | ||
|
|
ff0fa3471f | ||
|
|
a884bb15bd | ||
|
|
76f231618a | ||
|
|
8c31ea1814 | ||
|
|
c05204f1d8 | ||
|
|
b4c2c249db | ||
|
|
e291da9adc | ||
|
|
0d8a3cbaf8 | ||
|
|
bb5ba64cca | ||
|
|
727a71186b | ||
|
|
e91bb642e7 | ||
|
|
9d2d53b58e | ||
|
|
e351d77ff8 | ||
|
|
d2c3e84d54 | ||
|
|
cf8587522a | ||
|
|
7903224ae5 | ||
|
|
eb0b1c986b | ||
|
|
88ff21a211 | ||
|
|
2af8b6e30e | ||
|
|
33ca0f1f79 | ||
|
|
a97dae8f46 | ||
|
|
7162c656cc | ||
|
|
aeee542fb9 | ||
|
|
7e34b49b5d | ||
|
|
1e04ccb342 | ||
|
|
24945a906a | ||
|
|
a7d29c9564 | ||
|
|
71f184f5cb | ||
|
|
28d0274f46 | ||
|
|
9ae48022ff | ||
|
|
fd7a0e1922 | ||
|
|
3a6c385b50 | ||
|
|
c5f2e99e79 | ||
|
|
c8e78f7911 | ||
|
|
5a061e4677 | ||
|
|
d1d4b35adf | ||
|
|
5e6e011fe2 | ||
|
|
f3969cdc25 | ||
|
|
4ff1d1dc8d | ||
|
|
df80c4cde2 | ||
|
|
06946a8fce | ||
|
|
23fccc6cb6 | ||
|
|
4a4ae9db66 | ||
|
|
7a4624bbd9 | ||
|
|
821836d939 | ||
|
|
d4239d66ce | ||
|
|
dc0ce8f11a | ||
|
|
4430a138b6 | ||
|
|
784214ae05 | ||
|
|
875c09840b | ||
|
|
5794b22eb6 | ||
|
|
8dec6a1672 | ||
|
|
4d2765e5ba | ||
|
|
d39fbb277f | ||
|
|
b06cba18f4 | ||
|
|
9d5d6a5f3d | ||
|
|
4028c05fea | ||
|
|
b7484121fc | ||
|
|
19d8f79a3d | ||
|
|
abbb74ca35 | ||
|
|
73566254bd | ||
|
|
2f48759457 | ||
|
|
0d8659e76f | ||
|
|
ac78c39c30 | ||
|
|
5d4c237e01 | ||
|
|
12d5d3465b | ||
|
|
711ef3b208 | ||
|
|
8be0b10d9d | ||
|
|
9dbc42fc54 | ||
|
|
e409ac8421 | ||
|
|
c2e37859b5 | ||
|
|
776f98d9f5 | ||
|
|
d45ee8dc54 | ||
|
|
885153fcfa | ||
|
|
b44ae9a7d8 | ||
|
|
d8ca0bff38 | ||
|
|
01dabf09db | ||
|
|
afc64ebc5e | ||
|
|
a48a1e31e9 | ||
|
|
bb381c201c | ||
|
|
553da395e4 | ||
|
|
953d56e216 | ||
|
|
a503a0edaa | ||
|
|
07416e8c0c | ||
|
|
c84c07eb74 | ||
|
|
54d8ddf3c1 | ||
|
|
7b6f6843a7 | ||
|
|
e16fc110d9 | ||
|
|
f269c0fb5d | ||
|
|
00a025449b | ||
|
|
d1f3380850 | ||
|
|
46f1f913c8 | ||
|
|
0a46fc7e73 | ||
|
|
cb22349506 | ||
|
|
28395af03a | ||
|
|
d2906e2dc7 | ||
|
|
0c83781a7f | ||
|
|
327760acff | ||
|
|
752b961483 | ||
|
|
ff2258ff7a | ||
|
|
4bdb6b34b3 | ||
|
|
141c020b4e | ||
|
|
fe42d974a2 | ||
|
|
e945c0d6f2 | ||
|
|
0cff56a16d | ||
|
|
0befed7200 | ||
|
|
4de06dcd32 | ||
|
|
fc313a1e7d | ||
|
|
6e231e720a | ||
|
|
3f74840b67 | ||
|
|
ff9e706c65 | ||
|
|
79826447f5 | ||
|
|
7a4f69721c | ||
|
|
766bdedd29 | ||
|
|
981a3485eb | ||
|
|
4443ac662f | ||
|
|
a7379e2cce | ||
|
|
4eb4af639a | ||
|
|
24da8bdb34 | ||
|
|
44979541be | ||
|
|
65b23b867c | ||
|
|
58ccfca831 | ||
|
|
30dd65b338 | ||
|
|
d91540ae1f | ||
|
|
8f4824d2b7 | ||
|
|
b4e2e871dc | ||
|
|
e75c2e4208 | ||
|
|
bb5f69328d | ||
|
|
db374db306 | ||
|
|
c00e0c9f48 | ||
|
|
63560c820b | ||
|
|
1b8d627af8 | ||
|
|
9d0f586ae7 | ||
|
|
86c5453254 | ||
|
|
4d7e6732fa | ||
|
|
7e99c62f6e | ||
|
|
65fa75fd01 | ||
|
|
6f91dc7c5b | ||
|
|
8893c62a42 | ||
|
|
1e25d7b453 | ||
|
|
258a3c8270 | ||
|
|
597ca9b073 | ||
|
|
c6968f8d61 | ||
|
|
76705b5762 | ||
|
|
8096f7135b | ||
|
|
5e890165e2 | ||
|
|
34f46d736f | ||
|
|
d77ac5ddcb | ||
|
|
0ce9ae4809 | ||
|
|
fd66db680f | ||
|
|
b5da33c013 | ||
|
|
22045b8f2d | ||
|
|
da6b565dc1 | ||
|
|
9fd69377df | ||
|
|
d1364caa84 | ||
|
|
82a3578849 | ||
|
|
74567a16d1 | ||
|
|
0356163a2e | ||
|
|
6d45c37dc5 | ||
|
|
2dd67dc895 | ||
|
|
95e1c4909c | ||
|
|
e426d05bc8 | ||
|
|
f6add2f723 | ||
|
|
b6b3802bb7 | ||
|
|
9d44c88cbb | ||
|
|
f1f0d90897 | ||
|
|
b240031605 | ||
|
|
33039d2cec | ||
|
|
c281d053d2 | ||
|
|
0314db7894 | ||
|
|
522388820a | ||
|
|
d2b7d0071d | ||
|
|
07dcc08ecb | ||
|
|
43941876f4 | ||
|
|
0afd51510b | ||
|
|
d211b5eb69 | ||
|
|
740a7ca142 | ||
|
|
8a2a18f43f | ||
|
|
2278a209e2 | ||
|
|
3b0d4f2e45 | ||
|
|
b82726f57f | ||
|
|
28fdc3abb8 | ||
|
|
4a1eccd447 | ||
|
|
77883aa72b | ||
|
|
07c9367467 | ||
|
|
1a5e8603c7 | ||
|
|
3b0d8fdd29 | ||
|
|
ec90ccf72e | ||
|
|
661d8608bc | ||
|
|
ef5c6c4c48 | ||
|
|
5f51d652b1 | ||
|
|
8dc90267d7 | ||
|
|
8a7ae61dae | ||
|
|
c7a6bc2fce | ||
|
|
bf666a3f7e | ||
|
|
3af5ef1167 | ||
|
|
139bde3771 | ||
|
|
d71b528253 | ||
|
|
7b4e68249a | ||
|
|
54a80a8a97 | ||
|
|
13f73623a8 | ||
|
|
8b2208fd9a | ||
|
|
682ddf6ffa | ||
|
|
edae783cf4 | ||
|
|
7dcef330e7 | ||
|
|
3636af4cd9 | ||
|
|
caa6dd9c41 | ||
|
|
2db6b12b78 | ||
|
|
66fc6dc3e5 | ||
|
|
a724a713da | ||
|
|
d5a3ddbf7e | ||
|
|
b40ab4bd44 | ||
|
|
7a95ed063d | ||
|
|
199a1d9e75 | ||
|
|
3120852eb9 | ||
|
|
24381411f2 | ||
|
|
06294351fa | ||
|
|
d3d5f92985 | ||
|
|
ca1247e0d9 | ||
|
|
a647390bef | ||
|
|
bc7dafc3ba | ||
|
|
36913db0cd | ||
|
|
5250ef85a2 | ||
|
|
41ea5a6f63 | ||
|
|
103d786c72 | ||
|
|
db869853c4 | ||
|
|
2c98a187dd | ||
|
|
9d5e789d88 | ||
|
|
49cff8a519 | ||
|
|
52d70d563a | ||
|
|
4184ce9c75 | ||
|
|
a99946937c | ||
|
|
f44fa5d96f | ||
|
|
8aa4917741 | ||
|
|
17505a0022 | ||
|
|
3477f7ce57 | ||
|
|
89b217ee21 | ||
|
|
841b7b8730 | ||
|
|
2fa95a09be | ||
|
|
4b2e74a6df | ||
|
|
4b4e7f81a4 | ||
|
|
f24fc836b3 | ||
|
|
687f0c070f | ||
|
|
ecd13079e7 | ||
|
|
71650cd8a4 | ||
|
|
b27121612e | ||
|
|
b4d644e768 | ||
|
|
b2b78e9dfa | ||
|
|
b7c297c537 | ||
|
|
1a771e4310 | ||
|
|
83e2408f81 | ||
|
|
dcd9869842 | ||
|
|
0b018e56cd | ||
|
|
39b27e709e | ||
|
|
2e45f6f778 | ||
|
|
f84f8a831a | ||
|
|
1ea7e05cde | ||
|
|
831f8a499d | ||
|
|
df82a8240e | ||
|
|
e9d2223025 | ||
|
|
ad81cd18c2 | ||
|
|
92f6d3e468 | ||
|
|
5aa6dd100c | ||
|
|
7eae362c1e | ||
|
|
6ecaf826af | ||
|
|
a0f908da57 | ||
|
|
ddebdfb37c | ||
|
|
af428b6298 | ||
|
|
8bb7272bb1 | ||
|
|
6012e65319 | ||
|
|
aebe3d4cf7 | ||
|
|
2120fae2b6 | ||
|
|
0711fdc3dd | ||
|
|
90171c8bab | ||
|
|
0e73c69035 | ||
|
|
6f440a6420 | ||
|
|
b8137f6b4d | ||
|
|
48c57d394b | ||
|
|
08134552a4 | ||
|
|
4b590e2102 | ||
|
|
59640a8b22 | ||
|
|
41fce94db4 | ||
|
|
4efc29aa64 | ||
|
|
2cd3a052e3 | ||
|
|
7b55de21bd | ||
|
|
a467e1ab31 | ||
|
|
3070227b00 | ||
|
|
2d9412d97f | ||
|
|
bc87017ea5 | ||
|
|
dcdd1bc214 | ||
|
|
f11a7f8940 | ||
|
|
317a87d669 | ||
|
|
b1669235f7 | ||
|
|
2a0660447a | ||
|
|
2bb89d9c30 | ||
|
|
ee6c0f8570 | ||
|
|
7362556c02 | ||
|
|
8bb5d985d4 | ||
|
|
6550abdfcc | ||
|
|
ce17546a76 | ||
|
|
57d4c98d00 | ||
|
|
1022ac5e2b | ||
|
|
b484d72c80 | ||
|
|
e2ff9027f9 | ||
|
|
dbd7ac5315 | ||
|
|
4ebc408a5a | ||
|
|
1152bb2e7b | ||
|
|
3f8a41cfe8 | ||
|
|
8abe0ea608 | ||
|
|
a8580e234d | ||
|
|
0f8a4b7789 | ||
|
|
f48c6268f8 | ||
|
|
6942020253 | ||
|
|
938d2d9f5b | ||
|
|
c8af33f163 | ||
|
|
57133a8f66 | ||
|
|
fa7e1ef78e | ||
|
|
43da108466 | ||
|
|
2b3a86eefb | ||
|
|
02db37bf37 | ||
|
|
5f91072d4d | ||
|
|
5f24a814d2 | ||
|
|
3c4aa92413 | ||
|
|
d374b1ceea | ||
|
|
33648ac546 | ||
|
|
177212f06b | ||
|
|
7bcfb6d1f4 | ||
|
|
b06341031d | ||
|
|
7b41cdb656 | ||
|
|
2a3dcf6cbd | ||
|
|
f4a2e1cb77 | ||
|
|
252387768d | ||
|
|
eed1a098c6 | ||
|
|
90c2f9dbe2 | ||
|
|
8d260d7478 | ||
|
|
2207ab3c93 | ||
|
|
883bbf8701 | ||
|
|
3710768910 | ||
|
|
ef2f2b0f89 | ||
|
|
9c087cc52c | ||
|
|
1e7f5c6a1e | ||
|
|
ff22a46253 | ||
|
|
90c4763e00 | ||
|
|
8bceaadda8 | ||
|
|
91fccc421a | ||
|
|
1676d51484 | ||
|
|
f59c246c7a | ||
|
|
4b8442d8b9 | ||
|
|
97a3b6e06d | ||
|
|
a3900caeb0 | ||
|
|
093ff95580 | ||
|
|
c0aed3c4a2 | ||
|
|
d56980823b | ||
|
|
17274e72da | ||
|
|
3776ee3b62 | ||
|
|
fee480193e | ||
|
|
4c80e179ae | ||
|
|
720e95991c | ||
|
|
470dd8da3d | ||
|
|
a44f598cc2 | ||
|
|
7036e76e17 | ||
|
|
8121f379a3 | ||
|
|
7e21486103 | ||
|
|
b8589e8c51 | ||
|
|
311645b559 | ||
|
|
7e414ac390 | ||
|
|
486904bc92 | ||
|
|
a7c9a83091 | ||
|
|
81238b19ab | ||
|
|
58306a87f1 | ||
|
|
21b74deab4 | ||
|
|
6ef415744c | ||
|
|
92dd629f42 | ||
|
|
adfa766e1b | ||
|
|
991895c0f2 | ||
|
|
162e07fc95 | ||
|
|
e8325f9a98 | ||
|
|
27e3c0b89f | ||
|
|
51c6b64c91 | ||
|
|
6afa99d0a1 | ||
|
|
3556a4b07b | ||
|
|
dcb49dc8ee | ||
|
|
97a9921cdd | ||
|
|
748e535cc6 | ||
|
|
73a2b4152b | ||
|
|
afa36d3f62 | ||
|
|
b852f5e2fd | ||
|
|
5ade40cbac | ||
|
|
6deec4c5f4 | ||
|
|
06f93861bc | ||
|
|
cafa1eaba4 | ||
|
|
27dc4951eb | ||
|
|
47646cbd69 | ||
|
|
5113c72b3a | ||
|
|
1970792445 | ||
|
|
4b1a405002 | ||
|
|
75c279ab97 | ||
|
|
05cb2428c1 | ||
|
|
0bf6a333b9 | ||
|
|
5e011d536b | ||
|
|
0a5618d406 | ||
|
|
db8b593c9b | ||
|
|
3c945e9e3c | ||
|
|
a11032b10a | ||
|
|
bda7ef52da | ||
|
|
b90cfff0aa | ||
|
|
5461548b7e | ||
|
|
4a20c9b60f | ||
|
|
e7448b1bb5 | ||
|
|
df6dfdf8a9 | ||
|
|
34d7135717 | ||
|
|
2e56237898 | ||
|
|
e65a5988e1 | ||
|
|
aea195aeb4 | ||
|
|
88d7a4e610 | ||
|
|
3b765a30d3 | ||
|
|
1415391988 | ||
|
|
0077fa2a98 | ||
|
|
171734ea31 | ||
|
|
0d274df977 | ||
|
|
d9ca214309 | ||
|
|
571a84b390 | ||
|
|
5a4b5ff97e | ||
|
|
4763104b99 | ||
|
|
7ce92f1422 | ||
|
|
9412753ba3 | ||
|
|
bf9ae23c98 | ||
|
|
b5dd4e31ac | ||
|
|
f7a979d825 | ||
|
|
d97c6b2f69 | ||
|
|
7fcf228bc4 | ||
|
|
d1c6ab7dc6 | ||
|
|
3649ae373b | ||
|
|
d7a2fdb5ba | ||
|
|
9144f9cea7 | ||
|
|
eab728c4e7 | ||
|
|
cc83a7cd35 | ||
|
|
a0e95ebe97 | ||
|
|
82e2c3538c | ||
|
|
6e9a1f44ed | ||
|
|
59bebf8a35 | ||
|
|
eba270d1e2 | ||
|
|
1cf57ffe2d | ||
|
|
92bca485b6 | ||
|
|
d2c1962e34 | ||
|
|
9d994dac9e | ||
|
|
816ca59d6d | ||
|
|
f7603f6c13 | ||
|
|
7a2eb86dd5 | ||
|
|
c11ffa58a8 | ||
|
|
8a3f91e655 | ||
|
|
b332db0a38 | ||
|
|
e3b3b0ca6c | ||
|
|
c8b4f5f0a3 | ||
|
|
8c6ffcf4d4 | ||
|
|
80cba5f176 | ||
|
|
99749e9b9b | ||
|
|
a1f912c71d | ||
|
|
4def0a53e0 | ||
|
|
51d0d5e549 | ||
|
|
b7db4cb280 | ||
|
|
36ffa09b05 | ||
|
|
0e58b3fbbc | ||
|
|
1da2d59066 | ||
|
|
a72879b2b2 | ||
|
|
2909a31e8f | ||
|
|
558eaf8b61 | ||
|
|
6a7895bf49 | ||
|
|
e73ec088d5 | ||
|
|
a0821506bc | ||
|
|
5df2af5189 | ||
|
|
649b0769ba | ||
|
|
fb569d4c2c | ||
|
|
3aac4b45ab | ||
|
|
857b0205a8 | ||
|
|
b5c88d5714 | ||
|
|
58900a7033 | ||
|
|
b75ebcac81 | ||
|
|
90c89288b6 | ||
|
|
f641139bf2 | ||
|
|
1096ead73e | ||
|
|
3d21d71231 | ||
|
|
b4e589a0f7 | ||
|
|
fce0813821 | ||
|
|
9fa81673da | ||
|
|
13d6211ed0 | ||
|
|
faedc12531 | ||
|
|
366ebe3155 | ||
|
|
87d5a3723f | ||
|
|
bd0c010be6 | ||
|
|
d38bdcebfd | ||
|
|
aac30cd840 | ||
|
|
c80783dbea | ||
|
|
fb7eb08624 | ||
|
|
941ef84b71 | ||
|
|
fd3ddc860e | ||
|
|
ab91ab100f | ||
|
|
c099317bb3 | ||
|
|
3e85591c6c | ||
|
|
140f2099bd | ||
|
|
4f060b87bb | ||
|
|
14af4b27cd | ||
|
|
0b0913f2f3 | ||
|
|
7931414735 | ||
|
|
efbb63582e | ||
|
|
ee9ff563d2 | ||
|
|
e5553554d1 | ||
|
|
80ccd14447 | ||
|
|
0a0df61d77 | ||
|
|
f9c8cb044e | ||
|
|
4427986ac1 | ||
|
|
0f5f91c094 | ||
|
|
1aac945bf6 | ||
|
|
b6dc0d2002 | ||
|
|
28d8b4cd65 | ||
|
|
cef416e2b0 | ||
|
|
52ae215104 | ||
|
|
dcfbf7d0a6 | ||
|
|
a450e74954 | ||
|
|
0ccef4e5c0 | ||
|
|
efbc0ff12e | ||
|
|
d114d8fe7e | ||
|
|
e17ec37d10 | ||
|
|
fb5c24b2b5 | ||
|
|
17ca3a1ac9 | ||
|
|
b8aaec6c37 | ||
|
|
b67e6db527 | ||
|
|
2c6d025ab3 | ||
|
|
9038e83639 | ||
|
|
a0a1d371a2 | ||
|
|
925a385200 | ||
|
|
2a857275dd | ||
|
|
e5055c25b0 | ||
|
|
a896d88b51 | ||
|
|
04a0fddb95 | ||
|
|
113d49ae5b | ||
|
|
decfb32b2b | ||
|
|
52197cc912 | ||
|
|
5b5ea083ce | ||
|
|
db6efe6512 | ||
|
|
b77f2f09ab | ||
|
|
7bc6185077 | ||
|
|
c3198d7446 | ||
|
|
16dad6342c | ||
|
|
f1b1eb8b36 | ||
|
|
8b5bc45fcf | ||
|
|
ec5fde466a | ||
|
|
f2a652f29f | ||
|
|
bf29d41993 | ||
|
|
a994153e27 | ||
|
|
0fe91846cd | ||
|
|
5d9739a863 | ||
|
|
dd998d6b24 | ||
|
|
64b9b532c0 | ||
|
|
8a510e68e0 | ||
|
|
144906ff51 | ||
|
|
202cd41eee | ||
|
|
54e7fa8f70 | ||
|
|
b88ecb7896 | ||
|
|
6ecf9aaf49 | ||
|
|
74d94af034 | ||
|
|
c3e1d26ddf | ||
|
|
a59e1d5220 | ||
|
|
1631c6ac8d | ||
|
|
a2d331536b | ||
|
|
5534755f2d | ||
|
|
53fb6adfd6 | ||
|
|
394a7dbb34 | ||
|
|
fea7dfd212 | ||
|
|
12496e5631 | ||
|
|
9c2f8ee995 | ||
|
|
b0ebdb6882 | ||
|
|
9a295e58b0 | ||
|
|
4b99472b35 | ||
|
|
e170487faf | ||
|
|
f0ba0ebb64 | ||
|
|
c81a51af5b | ||
|
|
6c0a2feade | ||
|
|
668b24fb23 | ||
|
|
d3dfb5ca62 | ||
|
|
920fdfdf85 | ||
|
|
649bcad1bb | ||
|
|
71b21db0d9 | ||
|
|
51b645f8d0 | ||
|
|
4588523de7 | ||
|
|
4e57626e42 | ||
|
|
cfb5eac015 | ||
|
|
dbbcf4b2ee | ||
|
|
570773259a | ||
|
|
19f1ad2762 | ||
|
|
814c146626 | ||
|
|
9a2b83064b | ||
|
|
33bec58be4 | ||
|
|
852e864c83 | ||
|
|
6bd39ba137 | ||
|
|
fb2f78b6dd | ||
|
|
ad4bf73f7b | ||
|
|
2e53ef6348 | ||
|
|
544af751cb | ||
|
|
807610131a | ||
|
|
8142aaa9c8 | ||
|
|
4c7d9ad30e | ||
|
|
c484c38735 | ||
|
|
dd0c4a0a34 | ||
|
|
9aba7dc17a | ||
|
|
04fe9062a6 | ||
|
|
2316363f7a | ||
|
|
bd6e327864 | ||
|
|
4accfacbdd | ||
|
|
38f4a819f2 | ||
|
|
7422deaa0d | ||
|
|
42bf65ccb4 | ||
|
|
17e680ea3c | ||
|
|
745476c9ab | ||
|
|
9fba14b6b1 | ||
|
|
68b401a895 | ||
|
|
8975f0b753 | ||
|
|
0c9f697bf6 | ||
|
|
35c90d34d6 | ||
|
|
aa7b5c40b8 | ||
|
|
5d3314f121 | ||
|
|
abaa53c6a3 | ||
|
|
ea57a1aec3 | ||
|
|
ab6aaf5013 | ||
|
|
bf2ac13609 | ||
|
|
7f33db90d8 | ||
|
|
03f2efd0f9 | ||
|
|
392d3d4b8a | ||
|
|
51aecb6b17 | ||
|
|
d2c0603717 | ||
|
|
3841e5444f | ||
|
|
80aa6d1d64 | ||
|
|
2dcaddf61d | ||
|
|
e51f3e9b15 | ||
|
|
2ef5a742e9 | ||
|
|
510f980348 | ||
|
|
73102e9432 | ||
|
|
1ec02c5c95 | ||
|
|
984b4c78cb | ||
|
|
e3e78f1dc9 | ||
|
|
bad41c247a | ||
|
|
e17d4f1a6e | ||
|
|
10500611ff | ||
|
|
efcdec6517 | ||
|
|
258df7691f | ||
|
|
7a35a735fa | ||
|
|
6c0f4cbd74 | ||
|
|
49cd428c43 | ||
|
|
f41435d285 | ||
|
|
4dedced175 | ||
|
|
a3bc65ba05 | ||
|
|
30615a4ed6 | ||
|
|
dbcf30470f | ||
|
|
198217d6bc | ||
|
|
7a4205ac36 | ||
|
|
2d3065ae8e | ||
|
|
d589443a5e | ||
|
|
fab7ea6ca1 | ||
|
|
7f6fbe22c6 | ||
|
|
59db4eeacd | ||
|
|
f2648adee8 | ||
|
|
ccdb447085 | ||
|
|
00b6d06041 | ||
|
|
b2610bed52 | ||
|
|
5854d72784 | ||
|
|
0f6cbf1be2 | ||
|
|
ea03e1b6e7 | ||
|
|
a2b996e054 | ||
|
|
16b7d4525f | ||
|
|
3e678f2abc | ||
|
|
1d0a524b88 | ||
|
|
8f1c23296e | ||
|
|
12656b05fe | ||
|
|
27d4d02fe5 | ||
|
|
d3e715594b | ||
|
|
285dfed338 | ||
|
|
6028d7ba18 | ||
|
|
2dd2edc1d3 | ||
|
|
4f259d8644 | ||
|
|
29a82cdf0f | ||
|
|
6a90d32885 | ||
|
|
75c744a438 | ||
|
|
6b56b7710d | ||
|
|
39c709f7b3 | ||
|
|
3f063f7cd7 | ||
|
|
45cbbe6c7a | ||
|
|
30fe2c7c69 | ||
|
|
7ecc00090e | ||
|
|
a2475bca94 | ||
|
|
be1614a042 | ||
|
|
ec01036871 | ||
|
|
1bb698619c | ||
|
|
fa93c23813 | ||
|
|
35730637dc | ||
|
|
7150243cda | ||
|
|
86b4aeef1a | ||
|
|
21efd481d8 | ||
|
|
11ac325d1a | ||
|
|
3879c80e6f | ||
|
|
b1e1d2d205 | ||
|
|
abeb4fadc4 | ||
|
|
2ed92c222d | ||
|
|
3c4a83916b | ||
|
|
9f2f9154d2 | ||
|
|
0d92c746bd | ||
|
|
a16c54051c | ||
|
|
2bbd1fbbb6 | ||
|
|
f427c2b566 | ||
|
|
77fbc60cb8 | ||
|
|
61f29a84b5 | ||
|
|
03fd703db5 | ||
|
|
3177f63a17 | ||
|
|
d108565ea2 | ||
|
|
7486227c27 | ||
|
|
7b959ab39c | ||
|
|
a652ffcb62 | ||
|
|
4d20011b78 | ||
|
|
98482a2795 | ||
|
|
e6b0ee7e4a | ||
|
|
8ff55c027e | ||
|
|
948a963f15 | ||
|
|
e73a038fe8 | ||
|
|
b765112896 | ||
|
|
94063ea4d1 | ||
|
|
a085eb1593 | ||
|
|
37e1ac5d93 | ||
|
|
1ee9516887 | ||
|
|
63b03a48d0 | ||
|
|
5e12916aec | ||
|
|
753a0e5408 | ||
|
|
83bce7c94f | ||
|
|
2ec34e2c46 | ||
|
|
6a76bbb6e3 | ||
|
|
c61267cadc | ||
|
|
e167891207 | ||
|
|
8cded9f8d2 | ||
|
|
778768dbf7 | ||
|
|
db749b8fc7 | ||
|
|
01e616f29e | ||
|
|
1996694a2a | ||
|
|
5e56af33df | ||
|
|
3c580403c1 | ||
|
|
b0d917d542 | ||
|
|
cc302dd68b | ||
|
|
37044ed3c3 | ||
|
|
ece8f25511 | ||
|
|
f1381ad535 | ||
|
|
1588dd3dbe | ||
|
|
e06e3a0654 | ||
|
|
80fccba93f | ||
|
|
7aa6663127 | ||
|
|
54ed1f12ff | ||
|
|
37e9fe90ae | ||
|
|
ec1b2b959a | ||
|
|
bc4ae8d383 | ||
|
|
088d231cda | ||
|
|
d30ace0518 | ||
|
|
6302771ff5 | ||
|
|
15f45d5d9e | ||
|
|
038686bea2 | ||
|
|
a83f120f32 | ||
|
|
0f05232199 | ||
|
|
1c13a591e9 | ||
|
|
75f9b7d040 | ||
|
|
ada32395ca | ||
|
|
b0fa75f13e | ||
|
|
9848e0467e | ||
|
|
4f5fea848c | ||
|
|
c98093be03 | ||
|
|
83a7d6e297 | ||
|
|
d84479bb05 | ||
|
|
a32db5ff69 | ||
|
|
030b40b2a0 | ||
|
|
4d5f60cd38 | ||
|
|
17adcb77c3 | ||
|
|
81e056be1a | ||
|
|
25babace8f | ||
|
|
0e7cf61888 | ||
|
|
cb8e2836bb | ||
|
|
e321761a72 | ||
|
|
554dd2f1ee | ||
|
|
8d6aa2477c | ||
|
|
8345877e27 | ||
|
|
9339267e6e | ||
|
|
da2bb41aa3 | ||
|
|
2ee8c4692a | ||
|
|
42d667e585 | ||
|
|
df2824ccac | ||
|
|
c2e3832643 | ||
|
|
3516c7674b | ||
|
|
b78cbcbb99 | ||
|
|
bd4dc217af | ||
|
|
662fc37976 | ||
|
|
89499bfd40 | ||
|
|
4c6fb2198b | ||
|
|
66d763ebc5 | ||
|
|
4823322154 | ||
|
|
b217eec84d | ||
|
|
d75f77b4c5 | ||
|
|
693f230fbb | ||
|
|
21d6020179 | ||
|
|
3fc1346d5b | ||
|
|
58c7c514c6 | ||
|
|
cf0997b434 | ||
|
|
8066833b3a | ||
|
|
ea82f554be | ||
|
|
e0d92a13a7 | ||
|
|
6a268cfb63 | ||
|
|
23eaee49d4 | ||
|
|
fc2a6a82cb | ||
|
|
2673ec3c82 | ||
|
|
f671a3c81c | ||
|
|
1ab53051f7 | ||
|
|
91d0e41444 | ||
|
|
e0931f8f90 | ||
|
|
d16b2902d4 | ||
|
|
a5043f45d3 | ||
|
|
6bf3a21158 | ||
|
|
0cf3a5e704 | ||
|
|
5dc56841ea | ||
|
|
725f22a344 | ||
|
|
ad457202dd | ||
|
|
424824019b | ||
|
|
3e30e7a9ec | ||
|
|
bca48dd1eb | ||
|
|
6851b6a523 | ||
|
|
3d9c5e7bae | ||
|
|
03b419e3d4 | ||
|
|
f291572b4a | ||
|
|
9b071bc96b | ||
|
|
e1c00bdbba | ||
|
|
b46258d0bf | ||
|
|
ffc1c33be0 | ||
|
|
f05437d253 | ||
|
|
0c33eab20a | ||
|
|
3e009013df | ||
|
|
8ce0b984b7 | ||
|
|
fe1e0974cb | ||
|
|
75f4810af1 | ||
|
|
3d207de6aa | ||
|
|
a6a2f0dbae | ||
|
|
b8c4fbaff0 | ||
|
|
abf2140ecf | ||
|
|
12ca08d9a6 | ||
|
|
e200df4def | ||
|
|
f88fc0719f | ||
|
|
818b3b8daf | ||
|
|
7060150bdc | ||
|
|
0a35e9659b | ||
|
|
87397eaffa | ||
|
|
245be406d9 | ||
|
|
90fced7cb2 | ||
|
|
d29a244064 | ||
|
|
ccb20d56ab | ||
|
|
8d62cb22f9 | ||
|
|
c6bd9bc9e0 | ||
|
|
3adafea574 | ||
|
|
9060c474da | ||
|
|
a38e63998e | ||
|
|
28101be1b7 | ||
|
|
7d5c7f5fec | ||
|
|
ed63798082 | ||
|
|
05c5e18899 | ||
|
|
0c17d78356 | ||
|
|
fa97016573 | ||
|
|
37d41f3f83 | ||
|
|
5d87fc8278 | ||
|
|
27465e5faf | ||
|
|
99b879d014 | ||
|
|
dcbfca53d9 | ||
|
|
5f2ef98de6 | ||
|
|
070aca2b65 | ||
|
|
dc5f865d54 | ||
|
|
45ceb5d297 | ||
|
|
a8dace0f23 | ||
|
|
b8e7262b14 | ||
|
|
b334b2055f | ||
|
|
ad14d71978 | ||
|
|
9701b11641 | ||
|
|
965b1cf03c | ||
|
|
1286d76988 | ||
|
|
6491becbe1 | ||
|
|
13fc5b688f | ||
|
|
beb70a3db1 | ||
|
|
482e13706f | ||
|
|
e0326d9d39 | ||
|
|
af72e6f6ac | ||
|
|
6518122a2d | ||
|
|
395cdd721e | ||
|
|
d060df2fb9 | ||
|
|
60193a2ddd | ||
|
|
7edfe9d759 | ||
|
|
a9c1caa188 | ||
|
|
eacf3f1830 | ||
|
|
67805fd25a | ||
|
|
62326b243f | ||
|
|
a0771b12eb | ||
|
|
d6da796bf2 | ||
|
|
a64744f213 | ||
|
|
6efe08dd61 | ||
|
|
98d6d4eb17 | ||
|
|
c93717bf77 | ||
|
|
8f625e847b | ||
|
|
17ef4888e4 | ||
|
|
916b8001b4 | ||
|
|
daf90ff402 | ||
|
|
10acef2845 | ||
|
|
a0994ac4b4 | ||
|
|
e55d6c8d65 | ||
|
|
8c58ecc897 | ||
|
|
19e188da9f | ||
|
|
3e6e02dc7d | ||
|
|
c08fc2bdf7 | ||
|
|
f572852d06 | ||
|
|
db9c516429 | ||
|
|
4fb9e2fd6a | ||
|
|
0f6003fd68 | ||
|
|
17d220524c | ||
|
|
98a9c8310b | ||
|
|
7cfb2529ac | ||
|
|
e8f326681a | ||
|
|
df0cf91548 | ||
|
|
35ddf9e8f0 | ||
|
|
e73dc3eb74 | ||
|
|
8f6c569391 | ||
|
|
178e146599 | ||
|
|
5740f17037 | ||
|
|
c45df789ea | ||
|
|
4500c02e49 | ||
|
|
36b4c8a9e9 | ||
|
|
038404ef31 | ||
|
|
c3be4f2f15 | ||
|
|
aa0d47078f | ||
|
|
c82dccc76c | ||
|
|
7586710395 | ||
|
|
a9cd76907e | ||
|
|
fc6721cff7 | ||
|
|
a0b25b9136 | ||
|
|
0cc63f6896 | ||
|
|
291deaa017 | ||
|
|
2ad9301a6e | ||
|
|
c6829a9d0e | ||
|
|
8842b21ec9 | ||
|
|
e84dad0967 | ||
|
|
7aed7d3fd0 | ||
|
|
38dc034499 | ||
|
|
1c2446da16 | ||
|
|
128bdc63db | ||
|
|
34f376eb23 | ||
|
|
b38d203e83 | ||
|
|
358964d2c8 | ||
|
|
ee6af9de61 | ||
|
|
8864782750 | ||
|
|
58cd226d6b | ||
|
|
7acdb49074 | ||
|
|
2a73e1c2e1 | ||
|
|
8daf22c3ff | ||
|
|
c0c8ad5510 | ||
|
|
4682e8f326 | ||
|
|
f03c7a8880 | ||
|
|
926e2b04b7 | ||
|
|
46746f3495 | ||
|
|
74b33bd4a2 | ||
|
|
4fd81e0c58 | ||
|
|
65ac5669a9 | ||
|
|
e9f665214a | ||
|
|
7eca3e4853 | ||
|
|
a21bba8ac2 | ||
|
|
9fed750f9d | ||
|
|
7d1bd1d5ab | ||
|
|
579b15330a | ||
|
|
807a60b4e4 | ||
|
|
dd12cad1ef | ||
|
|
c6d279c853 | ||
|
|
d9261b6e2f | ||
|
|
ddd5ff9c42 | ||
|
|
238243cc1d | ||
|
|
53015dc3ee | ||
|
|
804bef72c9 | ||
|
|
c8a692046f | ||
|
|
68e20cebd7 | ||
|
|
640f0dc8b6 | ||
|
|
c8156d0f46 | ||
|
|
9d967b084a | ||
|
|
4f199ada40 | ||
|
|
e695be1cba | ||
|
|
fff58e1368 | ||
|
|
550eef131c | ||
|
|
439b4c6e22 | ||
|
|
da574bd842 | ||
|
|
20e32f2de7 | ||
|
|
bfe3f72c45 | ||
|
|
fdb330eb58 | ||
|
|
6d53d0d533 | ||
|
|
d1fa22244f | ||
|
|
93b9f1a24f | ||
|
|
50f26e9721 | ||
|
|
57bf1c7a89 | ||
|
|
972e68a8c1 | ||
|
|
7632f9bbba | ||
|
|
c5ed5dd254 | ||
|
|
a1efd20e81 | ||
|
|
1ea57740aa | ||
|
|
8802de59d4 | ||
|
|
21c93f1dc1 | ||
|
|
2a9069200d | ||
|
|
b08b63d4ab | ||
|
|
1ce3ef0416 | ||
|
|
63d4c10b9e | ||
|
|
2c56687527 | ||
|
|
6601d9031d | ||
|
|
522e96f016 | ||
|
|
2335bed58a | ||
|
|
eaccb571a5 | ||
|
|
196b41d5f6 | ||
|
|
b4294ff531 | ||
|
|
e194cbc715 | ||
|
|
1e845c61a2 | ||
|
|
60dbd59aa0 | ||
|
|
66f5ee4ae9 | ||
|
|
178aaf6ac4 | ||
|
|
91a6eabab5 | ||
|
|
5518e64574 | ||
|
|
9463dc4a99 | ||
|
|
1dfd08a0dd | ||
|
|
901bb153d0 | ||
|
|
1724d1666e | ||
|
|
85592ad39e | ||
|
|
5541694922 | ||
|
|
f2ab452eb8 | ||
|
|
4dee0ba7fb | ||
|
|
2f03bf9372 | ||
|
|
58587a7956 | ||
|
|
a08b557938 | ||
|
|
ca5cab4c43 | ||
|
|
5569c3971b | ||
|
|
6f66ef595e | ||
|
|
a7374a9019 | ||
|
|
a0c58b5582 | ||
|
|
7dcaa97f8b | ||
|
|
70db738bff | ||
|
|
5133b9da94 | ||
|
|
a522aa3baa | ||
|
|
9298023f33 | ||
|
|
061e8cca1f | ||
|
|
ee54a7f3f5 | ||
|
|
0934cf034d | ||
|
|
fcefc87840 | ||
|
|
72baa3d916 | ||
|
|
14d921f64f | ||
|
|
2a95648625 | ||
|
|
2d3f1e0365 | ||
|
|
51d2a883f0 | ||
|
|
d35818293a | ||
|
|
7383a761f6 | ||
|
|
39ae4b04be | ||
|
|
b49c455df0 | ||
|
|
34576d0c64 | ||
|
|
b60aeccfdc | ||
|
|
e715384173 | ||
|
|
67023886c8 | ||
|
|
00a73fd88f | ||
|
|
72f42505b9 | ||
|
|
3b283681a9 | ||
|
|
6b0f1116ce | ||
|
|
f8121c8f1c | ||
|
|
f8dee0983a | ||
|
|
a8436074a6 | ||
|
|
fc82aab74b | ||
|
|
b6eb7fcd96 | ||
|
|
2a3989e4bd | ||
|
|
5372ab907f | ||
|
|
e0c09c0396 | ||
|
|
86031b117f | ||
|
|
f6fbd719d0 | ||
|
|
3a11f22138 | ||
|
|
b4714c6f3e | ||
|
|
51d77d408b | ||
|
|
859cdca4f7 | ||
|
|
cb10108c8e | ||
|
|
a6c7696274 | ||
|
|
cc86117289 | ||
|
|
125dcca829 | ||
|
|
1045dce1ea | ||
|
|
32615ecbd3 | ||
|
|
2e23e40240 | ||
|
|
77cdf26223 | ||
|
|
eadf8b680c | ||
|
|
427fbdb8a9 | ||
|
|
84bad8a79a | ||
|
|
75443681ba | ||
|
|
0731fe2637 | ||
|
|
3421e6a127 | ||
|
|
2de9c4365b | ||
|
|
35a37bacdf | ||
|
|
e25728cb68 | ||
|
+6 |
cdf3812e40 | ||
|
|
574b684396 | ||
|
|
bb800fd78d | ||
|
|
9b7c506de0 | ||
|
|
12c23d7d60 | ||
|
|
22231dc34f | ||
|
|
708618d11c | ||
|
|
46a50960d3 | ||
|
|
6de2aca8ae | ||
|
|
2c839924c6 | ||
|
|
287d410fe8 | ||
|
|
014d95454b | ||
|
|
923d4128bb | ||
|
|
787470c2b4 | ||
|
|
3ef32395f3 | ||
|
|
7a509cf0d8 | ||
|
|
105a1259bc | ||
|
|
c61edd1d6d | ||
|
|
008d04fd57 | ||
|
|
1c7db7c782 | ||
|
|
08ae1391ad | ||
|
|
06b40bcedb | ||
|
|
892819aeec | ||
|
|
e78dbd2535 | ||
|
|
3320754a62 | ||
|
|
1bfbe447db | ||
|
|
8512bbc45b | ||
|
|
593255570b | ||
|
|
93b3da98e8 | ||
|
|
d520dbbc4b | ||
|
|
1e0c78098c | ||
|
|
6c0ddd4ec9 | ||
|
|
73d6c7b28a | ||
|
|
4aafd42462 | ||
|
|
e60199a823 | ||
|
|
8ef17332ba | ||
|
|
a71816279d | ||
|
|
8f4c4268ba | ||
|
|
6b8d4b4de2 | ||
|
|
a8c33de80b | ||
|
|
ac38c9776c | ||
|
|
c73a0b5265 | ||
|
|
12a06defd1 | ||
|
|
0ebdbed30b | ||
|
|
9a46682d9d | ||
|
|
3456d90e0d | ||
|
|
95501b77dd | ||
|
|
1046b3014f | ||
|
|
06584bbb78 | ||
|
|
38c3ab20e8 | ||
|
|
fd1e0ad7a3 | ||
|
|
3bae3a3bea | ||
|
|
f9404aa55e | ||
|
|
7c448afda8 | ||
|
|
8519bc21f9 | ||
|
|
a02c783f0e | ||
|
|
fea879088c | ||
|
|
45667b7391 | ||
|
|
cb49edf29d | ||
|
|
72c04caae9 | ||
|
|
370c8adec9 | ||
|
|
f05d3d8836 | ||
|
|
402173ea16 | ||
|
|
a4a4e04c5e | ||
|
|
77b235df90 | ||
|
|
06393da4ff | ||
|
|
ccd08c2d55 | ||
|
|
c7ec974ff0 | ||
|
|
f8195deb54 | ||
|
|
048ccc71bb | ||
|
|
37752d1d48 | ||
|
|
3de006364e | ||
|
|
0881a01433 | ||
|
|
920d0c9e0a | ||
|
|
472eaaa1cc | ||
|
|
273184b084 | ||
|
|
f4b4a63217 | ||
|
|
6b14b0536e | ||
|
|
f3b5c76709 | ||
|
|
4f9119f211 | ||
|
|
d8570576af | ||
|
|
e8aa95c1d3 | ||
|
|
bc6afa9d59 | ||
|
|
19a88e2735 | ||
|
|
460c91b93f | ||
|
|
7029364f4d | ||
|
|
83554afebc | ||
|
|
c6f69946be | ||
|
|
f8e215c817 | ||
|
|
a4d93d7088 | ||
|
|
0f9d198dbd | ||
|
|
a5851a1763 | ||
|
|
cf6593ff50 | ||
|
|
7c916c10cf | ||
|
|
f532825fe0 | ||
|
|
5c8a02f92a | ||
|
|
a22518d96d | ||
|
|
a469840290 | ||
|
|
f60f02c1ac | ||
|
|
f44bd27f7b | ||
|
|
a18b3583be | ||
|
|
f4ffff7334 | ||
|
|
c7efaaad7e | ||
|
|
9505ac88ba | ||
|
|
8a92e8ea70 | ||
|
|
b8b3b5d48b | ||
|
|
08382c6f48 | ||
|
|
60c9832429 | ||
|
|
4411fd7f81 | ||
|
|
7ed79fece6 | ||
|
|
336a0e5b85 | ||
|
|
9d3e50f140 | ||
|
|
6faa901914 | ||
|
|
bb5cb19607 | ||
|
|
e7aa7cb04f | ||
|
|
7073b33d9b | ||
|
|
2bdae2f444 | ||
|
|
5ff6654c2b | ||
|
|
2b396b5c0a | ||
|
|
d9c13f19b0 | ||
|
|
448b9424e9 | ||
|
|
28e61691d8 | ||
|
|
de62a7d1e1 | ||
|
|
d55100b6a8 | ||
|
|
1f3c23dc87 | ||
|
|
cfb4e62503 | ||
|
|
3d3bce6702 | ||
|
|
62f126daff | ||
|
|
d916253cb5 | ||
|
|
c96608cd33 | ||
|
|
8baa48256a | ||
|
|
a452ab7157 | ||
|
|
f14eda4468 | ||
|
|
c2629b0a96 | ||
|
|
20f27af97e | ||
|
|
6388eca129 | ||
|
|
669c76ef6e | ||
|
|
156ba420c3 | ||
|
|
5f4ccfd790 | ||
|
|
4ae498a72e | ||
|
|
28b4ebd52b | ||
|
|
92f3a7b050 | ||
|
|
c9f1b18264 | ||
|
|
bc7c190db0 | ||
|
|
cbc61a274f | ||
|
|
4b2ff01a55 | ||
|
|
d71f5a7d12 | ||
|
|
7ea690d4be | ||
|
|
503bdb5c34 | ||
|
|
1dee884358 | ||
|
|
6ae7cdab64 | ||
|
|
22ca06f6a1 | ||
|
|
425d8a7fcf | ||
|
|
dbb52ec5b4 | ||
|
|
d2a2fbb858 | ||
|
|
54cb97af3f | ||
|
|
160bcd64a6 | ||
|
|
830c3e49d9 | ||
|
|
4aa24c2190 | ||
|
|
d574eda147 | ||
|
|
f8f07dbc70 | ||
|
|
1dcae9aafd | ||
|
|
0b1cc40fb4 | ||
|
|
806b9a5521 | ||
|
|
1d5ccab004 | ||
|
|
88d59f6a5f | ||
|
|
36b9fe6386 | ||
|
|
bd28a4bca4 | ||
|
|
87e384e7fd | ||
|
|
a8b406e7b7 | ||
|
|
6ca975e83a | ||
|
|
754f294992 | ||
|
|
886a28640f | ||
|
|
69ac84088a | ||
|
|
518e666015 | ||
|
|
596307b32a | ||
|
|
bc22bb1b89 | ||
|
|
720451c89e | ||
|
|
d615b1c806 | ||
|
|
0c305ed957 | ||
|
|
3497b53b88 | ||
|
|
442132be70 | ||
|
|
96bb03e1e0 | ||
|
|
a264893543 | ||
|
|
8c566c3bda | ||
|
|
855c35cb88 | ||
|
|
ab611199fd | ||
|
|
1ddbb417f1 | ||
|
|
1a9e8ac35d | ||
|
|
8960c11f86 | ||
|
|
93d12e1642 | ||
|
|
9720ce68f2 | ||
|
|
ae4010ffb6 | ||
|
|
f3830b60ae | ||
|
|
e1926a06e8 | ||
|
|
ccf1ba2b8a | ||
|
|
3b33f65408 | ||
|
|
3988cc9b2c | ||
|
|
d574d04075 | ||
|
|
939e515d23 | ||
|
|
f2cc452d4c | ||
|
|
91bd679d1e | ||
|
|
894da941af | ||
|
|
64059ca87e | ||
|
|
8574fa1350 | ||
|
|
2e769f1f0a | ||
|
|
59431631aa | ||
|
|
a56c7aca17 | ||
|
|
d674c02c43 | ||
|
|
4892e25800 | ||
|
|
a5d773da9f | ||
|
|
466f0c583f | ||
|
|
f95e6602a0 | ||
|
|
33a176eae4 | ||
|
|
e89af899a3 | ||
|
|
da3892f902 | ||
|
|
9416ceb7de | ||
|
|
2cbc29ea09 | ||
|
|
0b30261e5c | ||
|
|
ea4b57854b | ||
|
|
5c656133e2 | ||
|
|
1a5e38ecf9 | ||
|
|
887f00856e | ||
|
|
b08130a6af | ||
|
|
2871377cee | ||
|
|
ab2580963c | ||
|
|
903242a2a7 | ||
|
|
2f8cdb4c4b | ||
|
|
29623a1959 | ||
|
|
b135f7dbce | ||
|
|
4936b7e1ae | ||
|
|
401c655d8c | ||
|
|
958fc69906 | ||
|
|
7722155db1 | ||
|
|
5ad27f56b1 | ||
|
|
0635c1c3b5 | ||
|
|
3b9b688c97 | ||
|
|
36183c72d1 | ||
|
|
1234647b9d | ||
|
|
c46bf475f7 | ||
|
|
4854bef927 | ||
|
|
f0bf3408bc | ||
|
|
2fd0cb4aff | ||
|
|
6da93cf921 | ||
|
|
bf17d61686 | ||
|
|
f4cc5541e4 | ||
|
|
616790bfa0 | ||
|
|
485d161a5e | ||
|
|
372f8274ae | ||
|
|
a10c014ba6 | ||
|
|
7661c1526b | ||
|
|
cdb4e7bc95 | ||
|
|
0026ad8c09 | ||
|
|
3bb12f4417 | ||
|
|
3a6d37c6a2 | ||
|
|
129531b03e | ||
|
|
5a3b6becf4 | ||
|
|
266492fa1c | ||
|
|
8504401d69 | ||
|
|
1ba2f23efc | ||
|
|
cfceafb576 | ||
|
|
05f983dc10 | ||
|
|
1afc32f650 | ||
|
|
067f08f092 | ||
|
|
9d26ba5636 | ||
|
|
56259c40fc | ||
|
|
2b82a46b02 | ||
|
|
84a1bda771 | ||
|
|
4e9322c1e5 | ||
|
|
e14f0c361f | ||
|
|
43315670fa | ||
|
|
f864c499a3 | ||
|
|
83acf590f8 | ||
|
|
dbe5278afa | ||
|
|
b624704ecd | ||
|
|
6b77b949d7 | ||
|
|
c726e4e86a | ||
|
|
35bcbdc9d0 | ||
|
|
d506d6755d | ||
|
|
b491734ec4 | ||
|
|
8577272164 | ||
|
|
cf56f246b9 | ||
|
|
d9cd19632e | ||
|
|
b747806842 | ||
|
|
ec19e2949e | ||
|
|
70d10ab003 | ||
|
|
be6e586661 | ||
|
|
e1a4cf02f4 | ||
|
|
25edb23c3f | ||
|
|
075216d9da | ||
|
|
f8754d91f7 | ||
|
|
3155b345c1 | ||
|
|
94e4f1baa5 | ||
|
|
a4c999a098 | ||
|
|
9a9e00085e | ||
|
|
cdf169ed83 | ||
|
|
1791db57f6 | ||
|
|
0236952955 | ||
|
|
11633ff1f7 | ||
|
|
65a91f38e0 | ||
|
|
adc62bd732 | ||
|
|
f681a350fc | ||
|
|
d886b46139 | ||
|
|
a58f1284b4 | ||
|
|
159528e7ae | ||
|
|
6443e72ad7 | ||
|
|
eccea8c7e2 | ||
|
|
12ad791917 | ||
|
|
38fe5b7eff | ||
|
|
c2e469095c | ||
|
|
76baeb3214 | ||
|
|
6abf7384e2 | ||
|
|
c3223f446e | ||
|
|
7b5e8d1e96 | ||
|
|
e8d769a574 | ||
|
|
275d9c1553 | ||
|
|
30acef6c75 | ||
|
|
15afe384ff | ||
|
|
32efd0fbc2 | ||
|
|
b1045c39ed | ||
|
|
61ac270876 | ||
|
|
c182e6d3f1 | ||
|
|
1053310511 | ||
|
|
6c38e0e9cc | ||
|
|
17a130d13d | ||
|
|
dfbf4d0f43 | ||
|
|
0a4efd4820 | ||
|
|
ac8ab3ef9e | ||
|
|
57c31a79e7 | ||
|
|
33bf148fcf | ||
|
|
a0422f6467 | ||
|
|
1597e85906 | ||
|
|
5a458a60c2 | ||
|
|
5881edb75e | ||
|
|
e68b8e96c7 | ||
|
|
c32b8af65f | ||
|
|
d82b2a5804 | ||
|
|
285cc66773 | ||
|
|
8d090ba6b8 | ||
|
|
6455e759e3 | ||
|
|
8ba4355cab | ||
|
|
baa107278d | ||
|
|
c0fce07889 | ||
|
|
8e79238284 | ||
|
|
bc879c5bd8 | ||
|
|
949aa26f52 | ||
|
|
03aabc3fc6 | ||
|
|
68c9db0c82 | ||
|
|
f1493fbee7 | ||
|
|
1f70ced8e5 | ||
|
|
e6e50ee9f7 | ||
|
|
f04aca767f | ||
|
|
d2b7c3889b | ||
|
|
b55e121642 | ||
|
|
e737c1e960 | ||
|
|
e4fe47d598 | ||
|
|
6770cc69d5 | ||
|
|
9f85d3dca7 | ||
|
|
8fd3875069 | ||
|
|
40278cd3c1 | ||
|
|
a435aeb991 | ||
|
|
1f9c04b3f4 | ||
|
|
2bc070a7d8 | ||
|
|
4a91d9dcba | ||
|
|
db6532c9d7 | ||
|
|
fa596eee5b | ||
|
|
355a08cd04 | ||
|
|
ca3b7c3bcf | ||
|
|
9fb818babf | ||
|
|
2e04575654 | ||
|
|
ea9a8303c8 | ||
|
|
d6f73c1a81 | ||
|
|
dc6c2b68fe | ||
|
|
87e5549af5 | ||
|
|
0bba2bd1ba | ||
|
|
7512f82a8d | ||
|
|
211712bf6d | ||
|
|
4ae2d400d1 | ||
|
|
985a4bd730 | ||
|
|
2520b16445 | ||
|
|
4c49a4bf67 | ||
|
|
724a7e1ebb | ||
|
|
6b4661be92 | ||
|
|
0a555eda90 | ||
|
|
1b437c8b90 | ||
|
|
0b85c1573e | ||
|
|
729952eb88 | ||
|
|
34d78093e8 | ||
|
|
8864d71e7a | ||
|
|
7b443f5b75 | ||
|
|
04d3d79ecc | ||
|
|
1968498794 | ||
|
|
d9df433e98 | ||
|
|
176275267b | ||
|
|
2651a38f89 | ||
|
|
70dc920f8c | ||
|
|
2fabffe481 | ||
|
|
e78d1306ee | ||
|
|
610a3eee5d | ||
|
|
b472de1bcd | ||
|
|
64de59ab44 | ||
|
|
0bf439ff94 | ||
|
|
87c25e211c | ||
|
|
c117611267 | ||
|
|
af29d2d5be | ||
|
|
0d2d0be8e4 | ||
|
|
6067968c07 | ||
|
|
0bb7996a4c | ||
|
|
0b9b89bf2b | ||
|
|
f5b027eda3 | ||
|
|
0f92bced9d | ||
|
|
56d60fbbd4 | ||
|
|
e56d4b06df | ||
|
|
cc1e00b1c4 | ||
|
|
e4ce056ac6 | ||
|
|
a344142581 | ||
|
|
03a7caf1e6 | ||
|
|
b8901ff5fd | ||
|
|
c474aeee5e | ||
|
|
ec667d49f4 | ||
|
|
93c2e02235 | ||
|
|
fb90ba1fd1 | ||
|
|
93698b6a83 | ||
|
|
96f5697848 | ||
|
|
ff5c576a4d | ||
|
|
8586ea5d78 | ||
|
|
2ae22e11ae | ||
|
|
0fd73272ea | ||
|
|
d48b6a0535 | ||
|
|
81d4342d97 | ||
|
|
a0320d0101 | ||
|
|
5df2d9a4f6 | ||
|
|
ccf2fe66c0 | ||
|
|
96035005b8 | ||
|
|
60c79c7d4e | ||
|
|
716b981dc5 | ||
|
|
c82b4a13a1 | ||
|
|
71a84bb092 | ||
|
|
46cd0809e1 | ||
|
|
348494d7c8 | ||
|
|
9c500e119c | ||
|
|
5386bc2625 | ||
|
|
ea629e1b2a | ||
|
|
0ae02be001 | ||
|
|
4f513692f9 | ||
|
|
e61b9b2a65 | ||
|
|
a38d32562e | ||
|
|
85960256ca | ||
|
|
e71d05ba66 | ||
|
|
a780756eac | ||
|
|
ce91e4261d | ||
|
|
e63d5e184c | ||
|
|
f809dbdd6a | ||
|
|
ba2e665fc2 | ||
|
|
2ff679c679 | ||
|
|
7a71ce48f4 | ||
|
|
303297ae85 | ||
|
|
23007b0b3b | ||
|
|
b90451792d | ||
|
|
d441425618 | ||
|
|
61ffbbc42d | ||
|
|
19964df99a | ||
|
|
7de8d32ab8 | ||
|
|
a536f533d8 | ||
|
|
12153055b4 | ||
|
|
5b4ec7dbea | ||
|
|
1f93d8594e | ||
|
|
ec9d2d1102 | ||
|
|
0ff0f4d0e4 | ||
|
|
21afb3f5ea | ||
|
|
04b52cc25d | ||
|
|
33805a14b9 | ||
|
|
d98b100595 | ||
|
|
c7ac44d3bb | ||
|
|
22fbb3704c | ||
|
|
233f28696d | ||
|
|
0af570ac46 | ||
|
|
49552c2c0a | ||
|
|
084e3414f0 | ||
|
|
cd180f1325 | ||
|
|
1ab39a40da | ||
|
|
32385a97cd | ||
|
|
7c2dcc8db6 | ||
|
|
5a1f8d8f28 | ||
|
|
314fb31886 | ||
|
|
8134d2f05b | ||
|
|
41bf2a0297 | ||
|
|
d5177a394a | ||
|
|
b5f95b7837 | ||
|
|
0376b7b3e6 | ||
|
|
28035525f4 | ||
|
|
2e577e3338 | ||
|
|
28b80a291f | ||
|
|
2735e81aaa | ||
|
|
62fedfbce3 | ||
|
|
cde4b804e3 | ||
|
+3 |
bd10bdf99a | ||
|
|
04f0af5865 | ||
|
|
22f3fbb9a3 | ||
|
|
c0925ffb92 | ||
|
|
945122190e | ||
|
|
bcdfc17e2a | ||
|
|
98210ec6e0 | ||
|
|
7ef997330f | ||
|
|
10357112e5 | ||
|
|
ade75af765 | ||
|
|
c31662d92a | ||
|
|
48ea46990e | ||
|
|
4b11b453be | ||
|
|
73655eda3c | ||
|
|
e2ddc9745c | ||
|
|
bf1fcf88b1 | ||
|
|
32839f6919 | ||
|
|
0d9c474a59 | ||
|
|
0e8dd9efc5 | ||
|
|
907c201912 | ||
|
|
4313917e4c | ||
|
|
7e759547bc | ||
|
|
f22762d94d | ||
|
|
43e2a2b451 | ||
|
|
28ec43cdea | ||
|
|
273ac513fc | ||
|
|
30050a6cb2 | ||
|
|
40b8e9562e | ||
|
|
846aea57c5 | ||
|
|
f4341330b9 | ||
|
|
7cc2c5ce71 | ||
|
|
476a9331f8 | ||
|
|
5249a35212 | ||
|
|
6f51ec24ae | ||
|
|
c75d0c4bd1 | ||
|
|
0e07fa94d0 | ||
|
|
b95d1a6323 | ||
|
|
f14a25a59b | ||
|
|
fd593186fa | ||
|
|
ab1eeeba24 | ||
|
|
a66619f919 | ||
|
|
800d9de4d5 | ||
|
|
95af40543a | ||
|
|
e476c1ab17 | ||
|
|
51e92c97c3 | ||
|
|
af39ec27b8 | ||
|
|
c79085e5b7 | ||
|
|
efe2d8da8a | ||
|
|
d8c1b67a22 | ||
|
|
950e6116e5 | ||
|
|
b541cf919d | ||
|
|
087da50ecc | ||
|
|
d86a68f713 | ||
|
|
62ee9b55e1 | ||
|
|
fc1b57da6e | ||
|
|
3b9624c1c3 | ||
|
|
ae7847d097 | ||
|
|
4eccf30de3 | ||
|
|
efdbea5b53 | ||
|
|
a915c703a5 | ||
|
|
91952f84bd | ||
|
|
75a026827c | ||
|
|
73aabdfeff | ||
|
|
1d4790aa42 | ||
|
|
8a7367f1c9 | ||
|
|
3e96a0630c | ||
|
|
8740fb4bbe | ||
|
|
fa1cbe66e7 | ||
|
|
4e7b8d555e | ||
|
|
9c5d888ec9 | ||
|
|
2681c2a51a | ||
|
|
17ea9f520a | ||
|
|
2fa21ff091 | ||
|
|
9e6b343620 | ||
|
|
6104567fb1 | ||
|
|
7664e0691c | ||
|
|
1d8ebe96bc | ||
|
|
5a5936c3c7 | ||
|
|
245e5705da | ||
|
|
4c76f654b9 | ||
|
|
f38b630da1 | ||
|
|
0bde9e5f50 | ||
|
|
f438b1c7a6 | ||
|
|
9123628254 | ||
|
|
30f4ad57ab | ||
|
|
54f311d94a | ||
|
|
18f2a14a00 | ||
|
|
a9cfaa93cc | ||
|
|
a425a38e29 | ||
|
|
7383ecb0ba | ||
|
|
69210d0917 | ||
|
|
4eb94b5cea | ||
|
|
f660b8c7ff | ||
|
|
85df74ff43 | ||
|
|
c9c53c9745 | ||
|
|
0ee9f9d956 | ||
|
|
5949307342 | ||
|
|
6e149d5406 | ||
|
|
6e72910d31 | ||
|
|
2588b45826 | ||
|
|
a2d6c8f2f7 | ||
|
|
30083949a0 | ||
|
|
6d7a33ff70 | ||
|
|
448eca56c8 | ||
|
|
deea6797c5 | ||
|
|
2b23372ad3 | ||
|
|
64798d081d | ||
|
|
2e5de478a6 | ||
|
|
53c7d9c18f | ||
|
|
672744ad1d | ||
|
|
0bd5f1d4a4 | ||
|
|
49da019bd0 | ||
|
|
b3b9da5bbc | ||
|
|
ea54499f24 | ||
|
|
6337d594fa | ||
|
|
dc5fc9ded4 | ||
|
|
78dd7a246a | ||
|
|
ab5f0216f6 | ||
|
|
32617a61df | ||
|
|
323ff1b55e | ||
|
|
6d5ec6aff8 | ||
|
|
9017e5de52 | ||
|
|
64afdfc642 | ||
|
|
c0cbcda1c2 | ||
|
|
a58e87b173 | ||
|
|
0cff785068 | ||
|
|
98e7623480 | ||
|
|
7f81780ffb | ||
|
|
e17e92775c | ||
|
|
56b238980b | ||
|
|
aa0e6c17b9 | ||
|
|
57a515f7a8 | ||
|
|
7e7fff1dc5 | ||
|
|
98e534cc77 | ||
|
|
17e9e97064 | ||
|
|
420bd34888 | ||
|
|
e109be4c6a | ||
|
|
16ee7d07a8 | ||
|
|
2741c961b7 | ||
|
|
ccbf57165f | ||
|
|
b9ed239cf4 | ||
|
|
61de2f4a4a | ||
|
|
2cda4547d6 | ||
|
|
a2a9147790 | ||
|
|
ee83dceef0 | ||
|
|
6c7fd94aa7 | ||
|
|
b53d5924a1 | ||
|
|
e5bb5b7430 | ||
|
|
4652d8559f | ||
|
|
ef90ba7cef | ||
|
|
2500d98def | ||
|
|
fc273bb79e | ||
|
|
2317111c85 | ||
|
|
9ecc71ca4a | ||
|
|
653e93c62a | ||
|
|
3a23ae6ea4 | ||
|
|
de0c592a95 | ||
|
|
b94fd23da2 | ||
|
|
69c55d807a | ||
|
|
cf6d7ef3ac | ||
|
|
cbcd0d49ae | ||
|
|
42d02dd448 | ||
|
|
6f176f7cf1 | ||
|
|
378c9d37d0 | ||
|
|
cc79d7f79c | ||
|
|
0b6d1ad20b | ||
|
|
335d0bec3e | ||
|
|
6bf7b0312e | ||
|
|
674d127701 | ||
|
|
046ca3fbb8 | ||
|
|
59d7024250 | ||
|
|
1aadbf16ba | ||
|
|
5cb1e8a5d6 | ||
|
|
3af22d3074 | ||
|
|
6aee53fc8b | ||
|
|
8a7fdb04b4 | ||
|
|
5e4f24ec60 | ||
|
|
6373e9752c | ||
|
|
7ffd1635f5 | ||
|
|
50b971091f | ||
|
|
d7b680ecb8 | ||
|
|
66dbe45f9e | ||
|
|
599f16a7cf | ||
|
|
7a99325528 | ||
|
|
bd4900ab6d | ||
|
|
c6f2710e1c | ||
|
|
f6d9a12cba | ||
|
|
3a6aae3e10 | ||
|
|
9c5f3854ab | ||
|
|
10b7961a99 | ||
|
|
a678b7f0ea | ||
|
|
888f97a35f | ||
|
|
7f650ad7dc | ||
|
|
53e43a402a | ||
|
|
401359646a | ||
|
|
fcad93dc10 | ||
|
|
1513aab4c8 | ||
|
|
ec89424c42 | ||
|
|
5f5cc794f0 | ||
|
|
b540d10b48 | ||
|
|
e66d5a0537 | ||
|
|
73a515b93f | ||
|
|
8c1bc10aa4 | ||
|
|
2c89b3240f | ||
|
|
1577740bc4 | ||
|
|
14ef069ea1 | ||
|
|
ed83595e33 | ||
|
|
4ffded6fef | ||
|
|
8df5b81f24 | ||
|
|
65ee059591 | ||
|
|
be5adc7622 | ||
|
|
f77c849a2b | ||
|
|
0fe4fad72c | ||
|
|
2e78158099 | ||
|
|
385f787ffc | ||
|
|
33f7746296 | ||
|
|
bc06775e04 | ||
|
|
2895dcfa98 | ||
|
|
75f9f72147 | ||
|
|
ecef0b6361 | ||
|
|
7afa5c9255 | ||
|
|
568cd38b0f | ||
|
|
c902218baf | ||
|
|
abfabd267d | ||
|
|
6dee0d8ca8 | ||
|
|
c0b7343e60 | ||
|
|
2d664c49b1 | ||
|
|
54d3e412f1 | ||
|
|
9a474c759b | ||
|
|
a0e3111b64 | ||
|
|
c1e1d00d0e | ||
|
|
fa9d34feff | ||
|
|
065e87c071 | ||
|
|
694db60972 | ||
|
|
d186168a92 | ||
|
|
fe8b80120b | ||
|
|
546b65633a | ||
|
|
1e09eff530 | ||
|
|
1608c7c644 | ||
|
|
ea5b60d911 | ||
|
|
8b65834907 | ||
|
|
b0a28635b4 | ||
|
|
abb64508da | ||
|
|
1b52309121 | ||
|
|
97bdbb7df6 | ||
|
|
98c2d25aee | ||
|
|
884b9004db | ||
|
|
4463abd009 | ||
|
|
01bc76b424 | ||
|
|
5a814ab911 | ||
|
|
ec5358773e | ||
|
|
2395de4bb3 | ||
|
|
db86c7d121 | ||
|
|
9fb3958c6d | ||
|
|
8b2b7cb4a4 | ||
|
|
3b9c226507 | ||
|
|
af62690bbc | ||
|
|
f2564ab8b1 | ||
|
|
0d056b5edf | ||
|
|
5d465056ce | ||
|
|
10b9d3fa96 | ||
|
|
f5ec47a2b3 | ||
|
|
0ad2fba4d2 | ||
|
|
56d68e71db | ||
|
|
b301c79462 | ||
|
|
21e85e3150 | ||
|
|
154fb3a727 | ||
|
|
23f8bac05b | ||
|
|
65f89ff128 | ||
|
|
394c3b6deb | ||
|
|
04f32ba119 | ||
|
|
5071a59f1a | ||
|
|
7cb4dbd402 | ||
|
|
010d16946c | ||
|
|
7218b278a2 | ||
|
|
f5895d6e35 | ||
|
|
dae7c538e2 | ||
|
|
5284f60e83 | ||
|
|
30f147770c | ||
|
|
1bd77c7fab | ||
|
|
a7a2ac0948 | ||
|
|
3524b45e33 | ||
|
|
ebfd5c2db0 | ||
|
|
c4875d475d | ||
|
|
02879aa7d1 | ||
|
|
c85a540986 | ||
|
|
38c83be39e | ||
|
|
26ba489746 | ||
|
|
7609655986 | ||
|
|
dc8206e581 | ||
|
|
3401ef6f02 | ||
|
|
84050170b9 | ||
|
|
13b59c9c23 | ||
|
|
6c08797980 | ||
|
|
66f8af9b0c | ||
|
|
66bb149a65 | ||
|
|
09e9562cac | ||
|
|
94bd4d8f3e | ||
|
|
ad8b959880 | ||
|
|
8190658fe9 | ||
|
|
560814d8ff | ||
|
|
185c5f288d | ||
|
|
a955a6308a | ||
|
|
cdd7f26fb3 | ||
|
|
a406df64cf | ||
|
|
e88a7f7088 | ||
|
|
15ed1ee33c | ||
|
|
674427a8b2 | ||
|
|
900525f8c2 | ||
|
|
4df3cc7d57 | ||
|
|
b4c0a18df0 | ||
|
|
b77ca54719 | ||
|
|
e8aacf325c | ||
|
|
139f8773de | ||
|
|
a02564eaf2 | ||
|
|
8a2f8c34cc | ||
|
|
296eaff73c | ||
|
|
32de871243 | ||
|
|
cf60d862f8 | ||
|
|
a294a9592e | ||
|
|
c65ab1b277 | ||
|
|
5c2949b59d | ||
|
|
9fde074ff3 | ||
|
|
049ce70979 | ||
|
|
b1478a49da | ||
|
|
39557de7f4 | ||
|
|
8755c98894 | ||
|
|
2d6d396c78 | ||
|
|
8460536068 | ||
|
|
adc32ee3bf | ||
|
|
de87b02085 | ||
|
|
027ea9ffd0 | ||
|
|
86913ad50e | ||
|
|
8618f216f8 | ||
|
|
84663cc338 | ||
|
|
d9a43d4b8e | ||
|
|
0ab9e4359a | ||
|
|
4d28bdeab7 | ||
|
|
3c1b723c7f | ||
|
|
9b88a7258b | ||
|
|
f891714db2 | ||
|
|
e1aa81e3ba | ||
|
|
ee47a8923d | ||
|
|
c4fdeb19a9 | ||
|
|
6d5139e3b2 | ||
|
|
830ff564a3 | ||
|
|
b3cffa9ca2 | ||
|
|
53d8e364e8 | ||
|
|
6980430b98 | ||
|
|
ebf1254fd3 | ||
|
|
8fd18b7ede | ||
|
|
e549a3fb4a | ||
|
|
24687f209c | ||
|
|
8d162267e8 | ||
|
|
796ddc07b0 | ||
|
|
48bf70f3ee | ||
|
|
f84ad432e7 | ||
|
|
ef2200c28e | ||
|
|
fe675b6fa1 | ||
|
|
26b5fa5aca | ||
|
|
fa71ed607b | ||
|
|
330e54018f | ||
|
|
3105596c9e | ||
|
|
9bfb73211e | ||
|
|
88d3de7afc | ||
|
|
95c0afb99b | ||
|
|
653af01235 | ||
|
|
9d1208c9ff | ||
|
|
c3ee957cc6 | ||
|
|
536600c95c | ||
|
|
627d6e70a6 | ||
|
|
43d557e0f4 | ||
|
|
5626c69ce5 | ||
|
|
b96a2343ac | ||
|
|
1ff4d1ae6c | ||
|
|
6daf3c097f | ||
|
|
80eae53c59 | ||
|
|
65e37c29e4 | ||
|
|
ce17decf3b | ||
|
|
dc102f076a | ||
|
|
0af9888b12 | ||
|
|
e5f48ad9bf | ||
|
|
752d58906c | ||
|
|
2bdd2bf5cd | ||
|
|
983fd2010f | ||
|
|
e838a86df9 | ||
|
|
2f046ec8db | ||
|
|
516ad171d2 | ||
|
|
b1d2e27ae8 | ||
|
|
e40fc14f85 | ||
|
|
9b96ad5b58 | ||
|
|
59e80ae951 | ||
|
|
2c11f9d265 | ||
|
|
1720f51d69 | ||
|
|
1fe9c9c4c7 | ||
|
|
d845e65443 | ||
|
|
91d5efe5ee | ||
|
|
11b15dbcd1 | ||
|
|
e69fdaf48b | ||
|
|
0645225801 | ||
|
|
249dfae727 | ||
|
|
e2d5d12e7f | ||
|
|
6e99a6b9f7 | ||
|
|
c465274a9c | ||
|
|
a629bcab8d | ||
|
|
c6eb7b69e6 | ||
|
|
e57a27e12a | ||
|
|
b4c5a3a779 | ||
|
|
f49cde8bd5 | ||
|
|
b376735cee | ||
|
|
098d4037c9 | ||
|
|
1a1eff321d | ||
|
|
b5e9f270e2 | ||
|
|
d3eba74c04 | ||
|
|
b5c5e6627e | ||
|
|
97b04b7f77 | ||
|
|
5f0ad230aa | ||
|
|
6510e5f129 | ||
|
|
d121e2070b | ||
|
|
f55dc46a32 | ||
|
|
de95667a6a | ||
|
|
2a60cbe66d | ||
|
|
652c3707e9 | ||
|
|
a054f5724b | ||
|
|
4fdcc3dfc9 | ||
|
|
d4db1bfacb | ||
|
|
a604a60b22 | ||
|
|
c246366e7f | ||
|
|
64b1a5298a | ||
|
|
b4c04ad927 | ||
|
|
558a8bc3bb | ||
|
|
1973e44f49 | ||
|
|
7c62f9e6ab | ||
|
|
530e6a02fc | ||
|
|
bc4f9bb805 | ||
|
|
4218612ccd | ||
|
|
ff02579c3d | ||
|
|
fc59d2b48b | ||
|
|
17a77220c2 | ||
|
|
fa64b2dc80 | ||
|
|
80e99be62a | ||
|
|
ce65cdd1e5 | ||
|
|
7859d62a90 | ||
|
|
fb0fb7144b | ||
|
|
c4901e998a | ||
|
|
d468c36216 | ||
|
|
fd2b827e31 | ||
|
|
98481821d8 | ||
|
|
f4ed8476ef | ||
|
|
4d7eddc52c | ||
|
|
396f5d610e | ||
|
|
4904411ded | ||
|
|
eb82d5532e | ||
|
|
6696de6bab | ||
|
|
284bfc9a57 | ||
|
|
d1981ef34e | ||
|
|
80dc0ce879 | ||
|
|
1d1f55125a | ||
|
|
e74838f024 | ||
|
|
d8b6904492 | ||
|
|
9653584d73 | ||
|
|
e6c8de6cc6 | ||
|
|
96ddd756f8 | ||
|
|
dc247cc57d | ||
|
|
dde204fb6a | ||
|
|
99919a8b08 | ||
|
|
44b7584c58 | ||
|
|
986c5e3c68 | ||
|
|
fb3d5e47d5 | ||
|
|
6246cf5499 | ||
|
|
70bb865f81 | ||
|
|
66b77be2d0 | ||
|
|
2b08ed9536 | ||
|
|
3d23a54fe4 | ||
|
|
258001c6aa | ||
|
|
310f20e81b | ||
|
|
88a17013dd | ||
|
|
b8060cd8f7 | ||
|
|
d240b12196 | ||
|
|
f89a682d98 | ||
|
|
f7aecbf75d | ||
|
|
9928c1ac18 | ||
|
|
e5e8308f5c | ||
|
|
570f61438a | ||
|
|
c42f88e4d3 | ||
|
|
bb8c3bad86 | ||
|
|
7bf24ccaa2 | ||
|
|
87597cbc33 | ||
|
|
9535009e46 | ||
|
|
9dfd604724 | ||
|
|
3d5ecf25b2 | ||
|
|
5f5491a9e5 | ||
|
|
0addc7207e | ||
|
|
e88c2061f1 | ||
|
|
1a3cf0c7fe | ||
|
|
559c2c6d34 | ||
|
|
311c8b25fe | ||
|
|
99e7c322eb | ||
|
|
d11248b998 | ||
|
|
9c242a8012 | ||
|
|
8244297b89 | ||
|
|
13f3e0aca4 | ||
|
|
34bbd2ad26 | ||
|
|
5d28eea968 | ||
|
|
27880ece2b | ||
|
|
f228bf484e | ||
|
|
b4ec045bc0 | ||
|
|
27030aa1e8 | ||
|
|
d8441b134a | ||
|
|
a0f2ddb920 | ||
|
|
583ce6d1dc | ||
|
|
bf6541857e | ||
|
|
857c091576 | ||
|
|
ba89d2ccac | ||
|
|
d89b196f15 | ||
|
|
72b676843b | ||
|
|
1ae896e73f | ||
|
|
54a4f14d09 | ||
|
|
3e81c56349 | ||
|
|
3c195e4d71 | ||
|
|
971cdf51a3 | ||
|
|
35f8abc72a | ||
|
|
c5a79bfc76 | ||
|
|
7470549199 | ||
|
|
4aa532390c | ||
|
|
06262868f5 | ||
|
|
ebafb6584e | ||
|
|
d0dff7ee4e | ||
|
|
63a02a6c74 | ||
|
|
aea9c535e0 | ||
|
|
ecc9af60eb | ||
|
|
2ec4ac3c0f | ||
|
|
5b96496a8d | ||
|
|
6189932bef | ||
|
|
93f94d4ee9 | ||
|
|
906d8bffdf | ||
|
|
7a2bc47486 | ||
|
|
37be57610c | ||
|
|
24c536fed0 | ||
|
|
ff994155df | ||
|
|
32670e810c | ||
|
|
347d92b29c | ||
|
|
1fe4aa3467 | ||
|
|
9e94dc5550 | ||
|
|
a1e08e5664 | ||
|
|
f5048ec61c | ||
|
|
94add978b0 | ||
|
|
c7d4c9d26d | ||
|
|
788b864362 | ||
|
|
84fdc0ea9e | ||
|
|
99db94f476 | ||
|
|
39604faa09 | ||
|
|
fd0fec07d8 | ||
|
|
3ffedead7a | ||
|
|
2bdab5a900 | ||
|
|
8ca1f89ba6 | ||
|
|
ee3a9d2e09 | ||
|
|
1f80471479 | ||
|
|
2d82527ee9 | ||
|
|
9be712de99 | ||
|
|
b6d36436c3 | ||
|
|
39af6e0365 | ||
|
|
dacbdee85b | ||
|
|
862e885125 | ||
|
|
66ad2b8102 | ||
|
|
291a889595 | ||
|
|
4cdeb6cdb1 | ||
|
|
015139d451 | ||
|
|
859c2606f0 | ||
|
|
a05593da5b | ||
|
|
fec9c0f981 | ||
|
|
061a990eb8 | ||
|
|
ef834b988c | ||
|
|
474c60203b | ||
|
|
c17ab761c5 | ||
|
|
142894895d | ||
|
|
b2dfaae68c | ||
|
|
9f03569cd0 | ||
|
|
830c2ffdf5 | ||
|
|
3086e8aa01 | ||
|
|
9c6d531ae7 | ||
|
|
12a8ab5ac7 | ||
|
|
fef7232c6b | ||
|
|
3caa010779 | ||
|
|
cdadf5e5a9 | ||
|
|
cde23be559 | ||
|
|
ea99bd9763 | ||
|
|
fbb487ae2b | ||
|
|
39e4845f42 | ||
|
|
2b644525f8 | ||
|
|
2318419291 | ||
|
|
ca790b4c69 | ||
|
|
332d83bd18 | ||
|
|
5c485c3375 | ||
|
|
29135aa77c | ||
|
|
d68bb937d8 | ||
|
|
8f48631fc4 | ||
|
|
749d13359f | ||
|
|
4abc38dacc | ||
|
|
10087ffaeb | ||
|
|
4382bbcc96 | ||
|
|
7663ec2bde | ||
|
|
f1e4ecaaa3 | ||
|
|
501d21aa28 | ||
|
|
e3d59288fe | ||
|
|
0209052821 | ||
|
|
7cfba5e1b2 | ||
|
|
72c80a3461 | ||
|
|
32ce8f0d9b | ||
|
|
b87ade6402 | ||
|
|
7d3b7fe728 | ||
|
|
609dad02a2 | ||
|
|
7dd12f88e1 | ||
|
|
7a2a069a5a | ||
|
|
bf3daea124 | ||
|
|
305cfa1f69 | ||
|
|
d2c726cd28 | ||
|
|
236a21a9d7 | ||
|
|
4e830a8c31 | ||
|
|
9d63e1412e | ||
|
|
305589e347 | ||
|
|
3c19328764 | ||
|
|
84fd51ff50 | ||
|
|
4f46ad3665 | ||
|
|
4f75e2041c | ||
|
|
3ca9b1e331 | ||
|
|
fb0633453a | ||
|
|
308cef950b | ||
|
|
d1a4f1dc50 | ||
|
|
f567db64b6 | ||
|
|
d94cdaaade | ||
|
|
3e8eaa8112 | ||
|
|
e3e6ff67db | ||
|
|
21906b5a63 | ||
|
|
bdb62e6a40 | ||
|
|
7b23814fc1 | ||
|
|
36fec765e7 | ||
|
|
ea53f12a98 | ||
|
|
81c729e09c | ||
|
|
4be8861f41 | ||
|
|
3441224b2f | ||
|
|
a50a21b076 | ||
|
|
4c4b10c617 | ||
|
|
d249117182 | ||
|
|
b13cf82541 | ||
|
|
a0ec3a7bbe | ||
|
|
1dadff303c | ||
|
|
c791fe34b9 | ||
|
|
76031d72ad | ||
|
|
04a8239df4 | ||
|
|
4171be0b98 | ||
|
|
a1f2fdb706 | ||
|
|
8f1b1bb1ff | ||
|
|
108d41fd78 | ||
|
|
c03ad9dcfd | ||
|
|
001c5500bd | ||
|
|
8d99d27932 | ||
|
|
19c3232d2f | ||
|
|
76090193ea | ||
|
|
c0bbaebaf4 | ||
|
|
92cc24fca2 | ||
|
|
30f66578e1 | ||
|
|
e9a3235291 | ||
|
|
642555d0fb | ||
|
|
0efca4d266 | ||
|
|
bc2bf7d6d0 | ||
|
|
29fff4fb06 | ||
|
|
abef90423d | ||
|
|
ca965d1c6c | ||
|
|
0594e33ed7 | ||
|
|
f9e19500be | ||
|
|
67d4f905e6 | ||
|
|
9c48922a75 | ||
|
|
783fc6a20d | ||
|
|
ab0699875a | ||
|
|
a31b8a1b58 | ||
|
|
3e74819519 | ||
|
|
98ff8c477e | ||
|
|
c147e315db | ||
|
|
a5ea5ba9c1 | ||
|
|
405bfeddac | ||
|
|
7c00c1e5d5 | ||
|
|
15ea3953f0 | ||
|
|
818153a1e7 | ||
|
|
870c2f9554 | ||
|
|
8a45e8c8af | ||
|
|
683900b5a2 | ||
|
|
ab61f4bb2c | ||
|
|
088bf56f2a | ||
|
|
2532300156 | ||
|
|
36ae2086ab | ||
|
|
08b22edd89 | ||
|
|
78cde92999 | ||
|
|
9d916029d9 | ||
|
|
d00e1e78bb | ||
|
|
c51283223d | ||
|
|
e4ed3f8cf8 | ||
|
|
964bbca792 | ||
|
|
efc8c75e7d | ||
|
|
28722de72d | ||
|
|
99c2ad4ad5 | ||
|
|
1b5a1f692a | ||
|
|
343d092044 | ||
|
|
d8578190ff | ||
|
|
6291799cfa | ||
|
|
b3175f0b5c | ||
|
|
0ebe1a6631 | ||
|
|
217cc846c3 | ||
|
|
45d1bd61ce | ||
|
|
0770bced09 | ||
|
|
5d9315938f | ||
|
|
dd144eaab9 | ||
|
|
2086b219d2 | ||
|
|
ebd8c0c50a | ||
|
|
153cdf24a5 | ||
|
|
aa27fb496f | ||
|
|
70f0edd041 | ||
|
|
2f7062d642 | ||
|
|
ebeb16eda5 | ||
|
|
b8a8648f4a | ||
|
|
335f5df3ec | ||
|
|
f1f31d1067 | ||
|
|
5e80276631 | ||
|
|
9812792d46 | ||
|
|
4a6ea4c492 | ||
|
|
b290dac3cb | ||
|
|
76f6eb3edf | ||
|
|
b33e3eac60 | ||
|
|
c18874c122 | ||
|
|
64290b69c9 | ||
|
|
b972e079b8 | ||
|
|
7d07ddd837 | ||
|
|
129eba2b5d | ||
|
|
00bef607ca | ||
|
|
ef2080a800 | ||
|
|
ca72590e49 | ||
|
|
5274ddce83 | ||
|
|
f86ce88d3d | ||
|
|
ea504dc93b | ||
|
|
8a19cd19d8 | ||
|
|
c9d65606f5 | ||
|
|
5a12e58c0c | ||
|
|
9112470785 | ||
|
|
87edaa3f06 | ||
|
|
ba67431731 | ||
|
|
656f4d5101 | ||
|
|
afb4b1b68f | ||
|
|
12abc74640 | ||
|
|
7c404d8b5e | ||
|
|
00975237b1 | ||
|
|
e165731b82 | ||
|
|
9fb1a0d4b3 | ||
|
|
87b82b95c8 | ||
|
|
52bae8d37d | ||
|
|
736b492fb0 | ||
|
|
66891b6c53 | ||
|
|
942c3a879c | ||
|
|
b5ac141936 | ||
|
|
f5ba7b958e | ||
|
|
a59f977db1 | ||
|
|
cd5dd2727c | ||
|
|
087a838db5 | ||
|
|
99040a89c6 | ||
|
|
60751f809b | ||
|
|
32a2ae12cb | ||
|
|
72230d3249 | ||
|
|
b7227d3a6b | ||
|
|
fa4a479b97 | ||
|
|
f27ef344bc | ||
|
|
84a2ebcbfd | ||
|
|
2e29b460d2 | ||
|
|
77208728ad | ||
|
|
e0428ca8c2 | ||
|
|
1af9e3c313 | ||
|
|
1f65d51a69 | ||
|
|
a81cbb5a7b | ||
|
|
0ad96858ff | ||
|
|
bb05aeb860 | ||
|
|
5a133ff2d4 | ||
|
|
8bc79a65c7 | ||
|
|
3c2c827bc3 | ||
|
|
05f5e02c03 | ||
|
|
c326eadd8b | ||
|
|
df777b3166 | ||
|
|
6d4b962391 | ||
|
|
525ee3b77d | ||
|
|
61abd91eb9 | ||
|
|
6ae75aa1a2 | ||
|
|
d03992f878 | ||
|
|
15e00a125d | ||
|
|
57772135ad | ||
|
|
abd418af41 | ||
|
|
6a17cad206 | ||
|
|
766d809f0c | ||
|
|
1c98e37db8 | ||
|
|
4d10487463 | ||
|
|
0b5e27d3de | ||
|
|
5119769de0 | ||
|
|
509c44d446 | ||
|
|
10dba44638 | ||
|
|
f390c186e6 | ||
|
|
f5086c98e8 | ||
|
|
670c53e863 | ||
|
|
a59d83518d | ||
|
|
3244969b93 | ||
|
|
f536257d3c | ||
|
|
71dacb5af8 | ||
|
|
fe2a589890 | ||
|
|
4b6a9e0387 | ||
|
|
d85d4f6094 | ||
|
|
62e98c1964 | ||
|
|
df17ea06f5 | ||
|
|
59040d4419 | ||
|
|
530df4298e | ||
|
|
ea7673618d | ||
|
|
53c8e68fba | ||
|
|
c34e15bbb7 | ||
|
|
181b35dc5e | ||
|
|
7b19beaf5d | ||
|
|
3433fa4a6e | ||
|
|
45bb8c3ebf | ||
|
|
58afade1bb | ||
|
|
1e9a0894f1 | ||
|
|
581a54663c | ||
|
|
36913f4efc | ||
|
|
6c680e306d | ||
|
|
30fc2387be | ||
|
|
22f8d321d7 | ||
|
|
72d8e62075 | ||
|
|
9332b9f399 | ||
|
|
70e3a9aff8 | ||
|
|
4438c4bd87 | ||
|
|
22bbb113e7 | ||
|
|
94a1601ab2 | ||
|
|
e46da5a181 | ||
|
|
0c390d12f7 | ||
|
|
d65d9aa6e0 | ||
|
|
082f70757c | ||
|
|
a685ccc955 | ||
|
|
0962e73e3e | ||
|
|
7d0aefacbb | ||
|
|
a91ffa60d6 | ||
|
|
dc79ea363d | ||
|
|
f09f5c2d11 | ||
|
|
8e2b474fc7 | ||
|
|
9efa495b0e | ||
|
|
941a0f7153 | ||
|
|
9cdc5261c4 | ||
|
|
d067bc9f01 | ||
|
|
e2206147cc | ||
|
|
515925a178 | ||
|
|
c25a5e06cf | ||
|
|
5cbd2519da | ||
|
|
67c1d633c6 | ||
|
|
add13c2646 | ||
|
|
71a2ca9e7c | ||
|
|
707faf57b5 | ||
|
|
e20cd0ef27 | ||
|
|
cf06096565 | ||
|
|
bb85ca031d | ||
|
|
d2702209a4 | ||
|
|
c064ce4852 | ||
|
|
8a657b90a7 | ||
|
|
ab86c5419d | ||
|
|
8e6a01de6d | ||
|
|
d5a4b0637a | ||
|
|
c367533a3c | ||
|
|
b1dafd81b8 | ||
|
|
99fbd7039e | ||
|
|
522858c871 |
+854
-714
File diff suppressed because it is too large
Load Diff
@@ -106,10 +106,12 @@ func main() {
|
|||||||
|
|
||||||
// form the input data.
|
// form the input data.
|
||||||
type data struct {
|
type data struct {
|
||||||
|
Networks []string
|
||||||
ItestFiles []string
|
ItestFiles []string
|
||||||
UnitSuites map[string]string
|
UnitSuites map[string]string
|
||||||
}
|
}
|
||||||
in := data{
|
in := data{
|
||||||
|
Networks: []string{"mainnet", "butterflynet", "calibnet", "debug"},
|
||||||
ItestFiles: itests,
|
ItestFiles: itests,
|
||||||
UnitSuites: func() map[string]string {
|
UnitSuites: func() map[string]string {
|
||||||
ret := make(map[string]string)
|
ret := make(map[string]string)
|
||||||
|
|||||||
+432
-683
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
chain/actors/builtin/*/v* linguist-generated=true
|
||||||
|
chain/actors/builtin/*/message* linguist-generated=true
|
||||||
@@ -9,15 +9,9 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: This is **not** a security-related bug/issue. If it is, please follow please follow the [security policy](https://github.com/filecoin-project/lotus/security/policy).
|
- label: This is **not** a security-related bug/issue. If it is, please follow please follow the [security policy](https://github.com/filecoin-project/lotus/security/policy).
|
||||||
required: true
|
required: true
|
||||||
- label: This is **not** a question or a support request. If you have any lotus related questions, please ask in the [lotus forum](https://github.com/filecoin-project/lotus/discussions).
|
|
||||||
required: true
|
|
||||||
- label: This is **not** a new feature request. If it is, please file a [feature request](https://github.com/filecoin-project/lotus/issues/new?assignees=&labels=need%2Ftriage%2Ckind%2Ffeature&template=feature_request.yml) instead.
|
|
||||||
required: true
|
|
||||||
- label: This is **not** an enhancement request. If it is, please file a [improvement suggestion](https://github.com/filecoin-project/lotus/issues/new?assignees=&labels=need%2Ftriage%2Ckind%2Fenhancement&template=enhancement.yml) instead.
|
|
||||||
required: true
|
|
||||||
- label: I **have** searched on the [issue tracker](https://github.com/filecoin-project/lotus/issues) and the [lotus forum](https://github.com/filecoin-project/lotus/discussions), and there is no existing related issue or discussion.
|
- label: I **have** searched on the [issue tracker](https://github.com/filecoin-project/lotus/issues) and the [lotus forum](https://github.com/filecoin-project/lotus/discussions), and there is no existing related issue or discussion.
|
||||||
required: true
|
required: true
|
||||||
- label: I am running the [`Latest release`](https://github.com/filecoin-project/lotus/releases), or the most recent RC(release canadiate) for the upcoming release or the dev branch(master), or have an issue updating to any of these.
|
- label: I am running the [`Latest release`](https://github.com/filecoin-project/lotus/releases), the most recent RC(release canadiate) for the upcoming release or the dev branch(master), or have an issue updating to any of these.
|
||||||
required: true
|
required: true
|
||||||
- label: I did not make any code changes to lotus.
|
- label: I did not make any code changes to lotus.
|
||||||
required: false
|
required: false
|
||||||
@@ -28,19 +22,11 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: lotus daemon - chain sync
|
- label: lotus daemon - chain sync
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner - mining and block production
|
- label: lotus fvm/fevm - Lotus FVM and FEVM interactions
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner/worker - sealing
|
- label: lotus miner/worker - sealing
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner - proving(WindowPoSt)
|
- label: lotus miner - proving(WindowPoSt/WinningPoSt)
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - storage deal
|
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - retrieval deal
|
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - data transfer
|
|
||||||
required: false
|
|
||||||
- label: lotus client
|
|
||||||
required: false
|
required: false
|
||||||
- label: lotus JSON-RPC API
|
- label: lotus JSON-RPC API
|
||||||
required: false
|
required: false
|
||||||
@@ -56,22 +42,33 @@ body:
|
|||||||
description: Enter the output of `lotus version` and `lotus-miner version` if applicable.
|
description: Enter the output of `lotus version` and `lotus-miner version` if applicable.
|
||||||
placeholder: |
|
placeholder: |
|
||||||
e.g.
|
e.g.
|
||||||
Daemon:1.11.0-rc2+debug+git.0519cd371.dirty+api1.3.0
|
Daemon: 1.19.0+mainnet+git.64059ca87+api1.5.0
|
||||||
Local: lotus version 1.11.0-rc2+debug+git.0519cd371.dirty
|
Local: lotus-miner version 1.19.0+mainnet+git.64059ca87
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: ReproSteps
|
||||||
|
attributes:
|
||||||
|
label: Repro Steps
|
||||||
|
description: "Steps to reproduce the behavior"
|
||||||
|
value: |
|
||||||
|
1. Run '...'
|
||||||
|
2. Do '...'
|
||||||
|
3. See error '...'
|
||||||
|
...
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: Description
|
id: Description
|
||||||
attributes:
|
attributes:
|
||||||
label: Describe the Bug
|
label: Describe the Bug
|
||||||
description: |
|
description: |
|
||||||
This is where you get to tell us what went wrong, when doing so, please try to provide a clear and concise description of the bug with all related information:
|
This is where you get to tell us what went wrong, when doing so, please try to provide a clear and concise description of the bug with all related information:
|
||||||
* What you were doding when you experienced the bug?
|
* What you were doing when you experienced the bug?
|
||||||
* Any *error* messages you saw, *where* you saw them, and what you believe may have caused them (if you have any ideas).
|
* Any *error* messages you saw, *where* you saw them, and what you believe may have caused them (if you have any ideas).
|
||||||
* What is the expected behaviour?
|
* What is the expected behaviour?
|
||||||
* For sealing issues, include the output of `lotus-miner sectors status --log <sectorId>` for the failed sector(s).
|
* For sealing issues, include the output of `lotus-miner sectors status --log <sectorId>` for the failed sector(s).
|
||||||
* For proving issues, include the output of `lotus-miner proving` info.
|
* For proving issues, include the output of `lotus-miner proving` info.
|
||||||
* For deal making issues, include the output of `lotus client list-deals -v` and/or `lotus-miner storage-deals|retrieval-deals|data-transfers list [-v]` commands for the deal(s) in question.
|
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
@@ -81,20 +78,8 @@ body:
|
|||||||
render: text
|
render: text
|
||||||
description: |
|
description: |
|
||||||
Please provide debug logs of the problem, remember you can get set log level control for:
|
Please provide debug logs of the problem, remember you can get set log level control for:
|
||||||
* lotus: use `lotus log list` to get all log systems available and set level by `lotus log set-level`. An example can be found [here](https://docs.filecoin.io/get-started/lotus/configuration-and-advanced-usage/#log-level-control).
|
* lotus: use `lotus log list` to get all log systems available and set level by `lotus log set-level`. An example can be found [here](https://lotus.filecoin.io/lotus/configure/defaults/#log-level-control).
|
||||||
* lotus-miner:`lotus-miner log list` to get all log systems available and set level by `lotus-miner log set-level
|
* lotus-miner:`lotus-miner log list` to get all log systems available and set level by `lotus-miner log set-level
|
||||||
If you don't provide detailed logs when you raise the issue it will almost certainly be the first request I make before furthur diagnosing the problem.
|
If you don't provide detailed logs when you raise the issue it will almost certainly be the first request we make before furthur diagnosing the problem.
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
|
||||||
id: RepoSteps
|
|
||||||
attributes:
|
|
||||||
label: Repo Steps
|
|
||||||
description: "Steps to reproduce the behavior"
|
|
||||||
value: |
|
|
||||||
1. Run '...'
|
|
||||||
2. Do '...'
|
|
||||||
3. See error '...'
|
|
||||||
...
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
blank_issues_enabled: true
|
||||||
|
contact_links:
|
||||||
|
- name: Ask a question about Lotus or get support
|
||||||
|
url: https://github.com/filecoin-project/lotus/discussions/new/choose
|
||||||
|
about: Ask a question or request support for using Lotus
|
||||||
|
- name: Filecoin protocol feature or enhancement
|
||||||
|
url: https://github.com/filecoin-project/FIPs/discussions/new/choose
|
||||||
|
about: Write a discussion in the Filecoin Improvement Proposal repo
|
||||||
@@ -7,13 +7,7 @@ body:
|
|||||||
label: Checklist
|
label: Checklist
|
||||||
description: Please check off the following boxes before continuing to create an improvement suggestion!
|
description: Please check off the following boxes before continuing to create an improvement suggestion!
|
||||||
options:
|
options:
|
||||||
- label: This is **not** a new feature or an enhancement to the Filecoin protocol. If it is, please open an [FIP issue](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0001.md).
|
- label: I **have** a specific, actionable, and well motivated improvement to an existing lotus feature.
|
||||||
required: true
|
|
||||||
- label: This is **not** a new feature request. If it is, please file a [feature request](https://github.com/filecoin-project/lotus/issues/new?assignees=&labels=need%2Ftriage%2Ckind%2Ffeature&template=feature_request.yml) instead.
|
|
||||||
required: true
|
|
||||||
- label: This is **not** brainstorming ideas. If you have an idea you'd like to discuss, please open a new discussion on [the lotus forum](https://github.com/filecoin-project/lotus/discussions/categories/ideas) and select the category as `Ideas`.
|
|
||||||
required: true
|
|
||||||
- label: I **have** a specific, actionable, and well motivated improvement to propose.
|
|
||||||
required: true
|
required: true
|
||||||
- type: checkboxes
|
- type: checkboxes
|
||||||
attributes:
|
attributes:
|
||||||
@@ -22,19 +16,11 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: lotus daemon - chain sync
|
- label: lotus daemon - chain sync
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner - mining and block production
|
- label: lotus fvm/fevm - Lotus FVM and FEVM interactions
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner/worker - sealing
|
- label: lotus miner/worker - sealing
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner - proving(WindowPoSt)
|
- label: lotus miner - proving(WindowPoSt/WinningPoSt)
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - storage deal
|
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - retrieval deal
|
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - data transfer
|
|
||||||
required: false
|
|
||||||
- label: lotus client
|
|
||||||
required: false
|
required: false
|
||||||
- label: lotus JSON-RPC API
|
- label: lotus JSON-RPC API
|
||||||
required: false
|
required: false
|
||||||
@@ -45,9 +31,17 @@ body:
|
|||||||
- type: textarea
|
- type: textarea
|
||||||
id: request
|
id: request
|
||||||
attributes:
|
attributes:
|
||||||
label: Improvement Suggestion
|
label: Enhancement Suggestion
|
||||||
description: A clear and concise description of what the motivation or the current problem is and what is the suggested improvement?
|
description: A clear and concise description of the suggested enhancement?
|
||||||
placeholder: Ex. Currently lotus... However, as a storage provider, I'd like...
|
placeholder: Ex. Currently lotus... However it would be great if [enhancement] was implemented... With the ability to...
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: request
|
||||||
|
attributes:
|
||||||
|
label: Use-Case
|
||||||
|
description: How would this enhancement help you?
|
||||||
|
placeholder: Ex. With the [enhancement] node operators would be able to... For Storage Providers it would enable...
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ body:
|
|||||||
label: Checklist
|
label: Checklist
|
||||||
description: Please check off the following boxes before continuing to create a new feature request!
|
description: Please check off the following boxes before continuing to create a new feature request!
|
||||||
options:
|
options:
|
||||||
- label: This is **not** a new feature or an enhancement to the Filecoin protocol. If it is, please open an [FIP issue](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0001.md).
|
|
||||||
required: true
|
|
||||||
- label: This is **not** brainstorming ideas. If you have an idea you'd like to discuss, please open a new discussion on [the lotus forum](https://github.com/filecoin-project/lotus/discussions/categories/ideas) and select the category as `Ideas`.
|
- label: This is **not** brainstorming ideas. If you have an idea you'd like to discuss, please open a new discussion on [the lotus forum](https://github.com/filecoin-project/lotus/discussions/categories/ideas) and select the category as `Ideas`.
|
||||||
required: true
|
required: true
|
||||||
- label: I **have** a specific, actionable, and well motivated feature request to propose.
|
- label: I **have** a specific, actionable, and well motivated feature request to propose.
|
||||||
@@ -20,19 +18,11 @@ body:
|
|||||||
options:
|
options:
|
||||||
- label: lotus daemon - chain sync
|
- label: lotus daemon - chain sync
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner - mining and block production
|
- label: lotus fvm/fevm - Lotus FVM and FEVM interactions
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner/worker - sealing
|
- label: lotus miner/worker - sealing
|
||||||
required: false
|
required: false
|
||||||
- label: lotus miner - proving(WindowPoSt)
|
- label: lotus miner - proving(WindowPoSt/WinningPoSt)
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - storage deal
|
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - retrieval deal
|
|
||||||
required: false
|
|
||||||
- label: lotus miner/market - data transfer
|
|
||||||
required: false
|
|
||||||
- label: lotus client
|
|
||||||
required: false
|
required: false
|
||||||
- label: lotus JSON-RPC API
|
- label: lotus JSON-RPC API
|
||||||
required: false
|
required: false
|
||||||
@@ -56,7 +46,7 @@ body:
|
|||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: alternates
|
id: alternatives
|
||||||
attributes:
|
attributes:
|
||||||
label: Describe alternatives you've considered
|
label: Describe alternatives you've considered
|
||||||
description: A clear and concise description of any alternative solutions or features you've considered.
|
description: A clear and concise description of any alternative solutions or features you've considered.
|
||||||
@@ -69,4 +59,3 @@ body:
|
|||||||
description: Add any other context, design docs or screenshots about the feature request here.
|
description: Add any other context, design docs or screenshots about the feature request here.
|
||||||
validations:
|
validations:
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
name: "Bug Report - developer/service provider"
|
||||||
|
description: "Bug report template about FEVM/FVM for developers/service providers"
|
||||||
|
labels: [need/triage, kind/bug, area/fevm]
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Checklist
|
||||||
|
description: Please check off the following boxes before continuing to file a bug report!
|
||||||
|
options:
|
||||||
|
- label: This is **not** a security-related bug/issue. If it is, please follow please follow the [security policy](https://github.com/filecoin-project/lotus/security/policy).
|
||||||
|
required: true
|
||||||
|
- label: I **have** searched on the [issue tracker](https://github.com/filecoin-project/lotus/issues) and the [lotus forum](https://github.com/filecoin-project/lotus/discussions), and there is no existing related issue or discussion.
|
||||||
|
required: true
|
||||||
|
- label: I did not make any code changes to lotus.
|
||||||
|
required: false
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Lotus component
|
||||||
|
description: Please select the lotus component you are filing a bug for
|
||||||
|
options:
|
||||||
|
- label: lotus Ethereum RPC
|
||||||
|
required: false
|
||||||
|
- label: lotus FVM - Lotus FVM interactions
|
||||||
|
required: false
|
||||||
|
- label: FEVM tooling
|
||||||
|
required: false
|
||||||
|
- label: Other
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Lotus Version
|
||||||
|
render: text
|
||||||
|
description: Enter the output of `lotus version` if applicable.
|
||||||
|
placeholder: |
|
||||||
|
e.g.
|
||||||
|
Daemon: 1.19.0+mainnet+git.64059ca87+api1.5.0
|
||||||
|
Local: lotus-miner version 1.19.0+mainnet+git.64059ca87
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: repro
|
||||||
|
attributes:
|
||||||
|
label: Repro Steps
|
||||||
|
description: "Steps to reproduce the behavior"
|
||||||
|
value: |
|
||||||
|
1. Run '...'
|
||||||
|
2. Do '...'
|
||||||
|
3. See error '...'
|
||||||
|
...
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: textarea
|
||||||
|
id: Description
|
||||||
|
attributes:
|
||||||
|
label: Describe the Bug
|
||||||
|
description: |
|
||||||
|
This is where you get to tell us what went wrong, when doing so, please try to provide a clear and concise description of the bug with all related information:
|
||||||
|
* What you were doing when you experienced the bug? What are you trying to build?
|
||||||
|
* Any *error* messages and logs you saw, *where* you saw them, and what you believe may have caused them (if you have any ideas).
|
||||||
|
* What is the expected behaviour? Links to the actual code?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: toolingInfo
|
||||||
|
attributes:
|
||||||
|
label: Tooling
|
||||||
|
render: text
|
||||||
|
description: |
|
||||||
|
What kind of tooling are you using:
|
||||||
|
* Are you using ether.js, Alchemy, Hardhat, etc.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: extraInfo
|
||||||
|
attributes:
|
||||||
|
label: Configuration Options
|
||||||
|
render: text
|
||||||
|
description: |
|
||||||
|
Please provide your updated FEVM related configuration options, or custome enviroment variables related to Lotus FEVM
|
||||||
|
* lotus: use `lotus config updated` to get your configuration options, and copy the [FEVM] section
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
@@ -1,21 +1,23 @@
|
|||||||
## Related Issues
|
## Related Issues
|
||||||
<!-- link all issues that this PR might resolve/fix. If an issue doesn't exist, include a brief motivation for the change being made.-->
|
<!-- Link issues that this PR might resolve/fix. If an issue doesn't exist, include a brief motivation for the change being made -->
|
||||||
|
|
||||||
## Proposed Changes
|
## Proposed Changes
|
||||||
<!-- provide a clear list of the changes being made-->
|
<!-- A clear list of the changes being made -->
|
||||||
|
|
||||||
|
|
||||||
## Additional Info
|
## Additional Info
|
||||||
<!-- callouts, links to documentation, and etc-->
|
<!-- Callouts, links to documentation, and etc -->
|
||||||
|
|
||||||
## Checklist
|
## Checklist
|
||||||
|
|
||||||
Before you mark the PR ready for review, please make sure that:
|
Before you mark the PR ready for review, please make sure that:
|
||||||
- [ ] All commits have a clear commit message.
|
|
||||||
- [ ] The PR title is in the form of of `<PR type>: <area>: <change being made>`
|
- [ ] Commits have a clear commit message.
|
||||||
- example: ` fix: mempool: Introduce a cache for valid signatures`
|
- [ ] PR title is in the form of of `<PR type>: <area>: <change being made>`
|
||||||
- `PR type`: _fix_, _feat_, _INTERFACE BREAKING CHANGE_, _CONSENSUS BREAKING_, _build_, _chore_, _ci_, _docs_,_perf_, _refactor_, _revert_, _style_, _test_
|
- example: ` fix: mempool: Introduce a cache for valid signatures`
|
||||||
- `area`: _api_, _chain_, _state_, _vm_, _data transfer_, _market_, _mempool_, _message_, _block production_, _multisig_, _networking_, _paychan_, _proving_, _sealing_, _wallet_, _deps_
|
- `PR type`: fix, feat, build, chore, ci, docs, perf, refactor, revert, style, test
|
||||||
- [ ] This PR has tests for new functionality or change in behaviour
|
- `area`, e.g. api, chain, state, market, mempool, multisig, networking, paych, proving, sealing, wallet, deps
|
||||||
- [ ] If new user-facing features are introduced, clear usage guidelines and / or documentation updates should be included in https://lotus.filecoin.io or [Discussion Tutorials.](https://github.com/filecoin-project/lotus/discussions/categories/tutorials)
|
- [ ] New features have usage guidelines and / or documentation updates in
|
||||||
|
- [ ] [Lotus Documentation](https://lotus.filecoin.io)
|
||||||
|
- [ ] [Discussion Tutorials](https://github.com/filecoin-project/lotus/discussions/categories/tutorials)
|
||||||
|
- [ ] Tests exist for new functionality or change in behavior
|
||||||
- [ ] CI is green
|
- [ ] CI is green
|
||||||
|
|||||||
@@ -13,10 +13,14 @@ name: "CodeQL"
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ master ]
|
branches:
|
||||||
|
- master
|
||||||
|
- 'release/*'
|
||||||
pull_request:
|
pull_request:
|
||||||
# The branches below must be a subset of the branches above
|
# The branches below must be a subset of the branches above
|
||||||
branches: [ master ]
|
branches:
|
||||||
|
- master
|
||||||
|
- 'release/*'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
@@ -33,17 +37,17 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: actions/setup-go@v1
|
- uses: actions/setup-go@v3
|
||||||
with:
|
with:
|
||||||
go-version: '1.17.9'
|
go-version: '1.18.8'
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v1
|
uses: github/codeql-action/init@v2
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: go
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
# By default, queries listed here will override any specified in a config file.
|
# By default, queries listed here will override any specified in a config file.
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
@@ -52,7 +56,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v1
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
@@ -66,4 +70,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v1
|
uses: github/codeql-action/analyze@v2
|
||||||
|
|||||||
+6
-6
@@ -1,6 +1,3 @@
|
|||||||
/AppDir
|
|
||||||
/appimage-builder-cache
|
|
||||||
*.AppImage
|
|
||||||
/lotus
|
/lotus
|
||||||
/lotus-miner
|
/lotus-miner
|
||||||
/lotus-worker
|
/lotus-worker
|
||||||
@@ -9,7 +6,6 @@
|
|||||||
/lotus-chainwatch
|
/lotus-chainwatch
|
||||||
/lotus-shed
|
/lotus-shed
|
||||||
/lotus-sim
|
/lotus-sim
|
||||||
/lotus-pond
|
|
||||||
/lotus-townhall
|
/lotus-townhall
|
||||||
/lotus-fountain
|
/lotus-fountain
|
||||||
/lotus-stats
|
/lotus-stats
|
||||||
@@ -21,8 +17,6 @@
|
|||||||
/docgen-md
|
/docgen-md
|
||||||
/docgen-openrpc
|
/docgen-openrpc
|
||||||
/bench.json
|
/bench.json
|
||||||
/lotuspond/front/node_modules
|
|
||||||
/lotuspond/front/build
|
|
||||||
/cmd/lotus-townhall/townhall/node_modules
|
/cmd/lotus-townhall/townhall/node_modules
|
||||||
/cmd/lotus-townhall/townhall/build
|
/cmd/lotus-townhall/townhall/build
|
||||||
/cmd/lotus-townhall/townhall/package-lock.json
|
/cmd/lotus-townhall/townhall/package-lock.json
|
||||||
@@ -53,3 +47,9 @@ build/builtin-actors/v*
|
|||||||
build/builtin-actors/*.car
|
build/builtin-actors/*.car
|
||||||
|
|
||||||
dist/
|
dist/
|
||||||
|
|
||||||
|
|
||||||
|
# The following files are checked into git and result
|
||||||
|
# in dirty git state if removed from the docker context
|
||||||
|
!extern/filecoin-ffi/rust/filecoin.pc
|
||||||
|
!extern/test-vectors
|
||||||
|
|||||||
@@ -43,9 +43,6 @@ issues:
|
|||||||
|
|
||||||
exclude-use-default: false
|
exclude-use-default: false
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
- path: lotuspond
|
|
||||||
linters:
|
|
||||||
- errcheck
|
|
||||||
|
|
||||||
- path: node/modules/lp2p
|
- path: node/modules/lp2p
|
||||||
linters:
|
linters:
|
||||||
|
|||||||
+36
-92
@@ -1,124 +1,71 @@
|
|||||||
project_name: lotus
|
project_name: lotus
|
||||||
before:
|
|
||||||
hooks:
|
|
||||||
- go mod tidy
|
|
||||||
- make deps
|
|
||||||
|
|
||||||
universal_binaries:
|
universal_binaries:
|
||||||
- id: lotus
|
- id: lotus
|
||||||
replace: true
|
replace: true
|
||||||
name_template: lotus
|
name_template: lotus
|
||||||
ids:
|
|
||||||
- lotus_darwin_amd64
|
|
||||||
- lotus_darwin_arm64
|
|
||||||
- id: lotus-miner
|
- id: lotus-miner
|
||||||
replace: true
|
replace: true
|
||||||
name_template: lotus-miner
|
name_template: lotus-miner
|
||||||
ids:
|
|
||||||
- lotus-miner_darwin_amd64
|
|
||||||
- lotus-miner_darwin_arm64
|
|
||||||
- id: lotus-worker
|
- id: lotus-worker
|
||||||
replace: true
|
replace: true
|
||||||
name_template: lotus-worker
|
name_template: lotus-worker
|
||||||
ids:
|
|
||||||
- lotus-worker_darwin_amd64
|
|
||||||
- lotus-worker_darwin_arm64
|
|
||||||
|
|
||||||
builds:
|
builds:
|
||||||
- id: lotus_darwin_amd64
|
- id: lotus
|
||||||
main: ./cmd/lotus
|
|
||||||
binary: lotus
|
binary: lotus
|
||||||
|
builder: prebuilt
|
||||||
goos:
|
goos:
|
||||||
- darwin
|
- darwin
|
||||||
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
- amd64
|
- amd64
|
||||||
env:
|
- arm64
|
||||||
- CGO_ENABLED=1
|
goamd64:
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
- v1
|
||||||
ldflags:
|
ignore:
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
- goos: linux
|
||||||
- id: lotus-miner_darwin_amd64
|
goarch: arm64
|
||||||
main: ./cmd/lotus-miner
|
prebuilt:
|
||||||
|
path: /tmp/workspace/{{ .Os }}_{{ .Arch }}{{ with .Amd64 }}_{{ . }}{{ end }}/lotus
|
||||||
|
- id: lotus-miner
|
||||||
binary: lotus-miner
|
binary: lotus-miner
|
||||||
|
builder: prebuilt
|
||||||
goos:
|
goos:
|
||||||
- darwin
|
- darwin
|
||||||
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
- amd64
|
- amd64
|
||||||
env:
|
- arm64
|
||||||
- CGO_ENABLED=1
|
goamd64:
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
- v1
|
||||||
ldflags:
|
ignore:
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
- goos: linux
|
||||||
- id: lotus-worker_darwin_amd64
|
goarch: arm64
|
||||||
main: ./cmd/lotus-worker
|
prebuilt:
|
||||||
|
path: /tmp/workspace/{{ .Os }}_{{ .Arch }}{{ with .Amd64 }}_{{ . }}{{ end }}/lotus-miner
|
||||||
|
- id: lotus-worker
|
||||||
binary: lotus-worker
|
binary: lotus-worker
|
||||||
|
builder: prebuilt
|
||||||
goos:
|
goos:
|
||||||
- darwin
|
- darwin
|
||||||
|
- linux
|
||||||
goarch:
|
goarch:
|
||||||
- amd64
|
- amd64
|
||||||
env:
|
|
||||||
- CGO_ENABLED=1
|
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
|
||||||
ldflags:
|
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
|
||||||
- id: lotus_darwin_arm64
|
|
||||||
main: ./cmd/lotus
|
|
||||||
binary: lotus
|
|
||||||
goos:
|
|
||||||
- darwin
|
|
||||||
goarch:
|
|
||||||
- arm64
|
- arm64
|
||||||
env:
|
goamd64:
|
||||||
- CGO_ENABLED=1
|
- v1
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
ignore:
|
||||||
- CPATH=/opt/homebrew/include
|
- goos: linux
|
||||||
- LIBRARY_PATH=/opt/homebrew/lib
|
goarch: arm64
|
||||||
ldflags:
|
prebuilt:
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
path: /tmp/workspace/{{ .Os }}_{{ .Arch }}{{ with .Amd64 }}_{{ . }}{{ end }}/lotus-worker
|
||||||
- id: lotus-miner_darwin_arm64
|
|
||||||
main: ./cmd/lotus-miner
|
|
||||||
binary: lotus-miner
|
|
||||||
goos:
|
|
||||||
- darwin
|
|
||||||
goarch:
|
|
||||||
- arm64
|
|
||||||
env:
|
|
||||||
- CGO_ENABLED=1
|
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
|
||||||
- CPATH=/opt/homebrew/include
|
|
||||||
- LIBRARY_PATH=/opt/homebrew/lib
|
|
||||||
ldflags:
|
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
|
||||||
- id: lotus-worker_darwin_arm64
|
|
||||||
main: ./cmd/lotus-worker
|
|
||||||
binary: lotus-worker
|
|
||||||
goos:
|
|
||||||
- darwin
|
|
||||||
goarch:
|
|
||||||
- arm64
|
|
||||||
env:
|
|
||||||
- CGO_ENABLED=1
|
|
||||||
- FFI_BUILD_FROM_SOURCE=1
|
|
||||||
- CPATH=/opt/homebrew/include
|
|
||||||
- LIBRARY_PATH=/opt/homebrew/lib
|
|
||||||
ldflags:
|
|
||||||
- -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
|
||||||
# - id: linux
|
|
||||||
# main: ./cmd/lotus
|
|
||||||
# binary: lotus
|
|
||||||
# goos:
|
|
||||||
# - linux
|
|
||||||
# goarch:
|
|
||||||
# - amd64
|
|
||||||
# env:
|
|
||||||
# - CGO_ENABLED=1
|
|
||||||
# ldflags:
|
|
||||||
# - -X=github.com/filecoin-project/lotus/build.CurrentCommit=+git.{{.ShortCommit}}
|
|
||||||
|
|
||||||
archives:
|
archives:
|
||||||
- id: primary
|
- id: primary
|
||||||
format: tar.gz
|
format: tar.gz
|
||||||
wrap_in_directory: true
|
wrap_in_directory: true
|
||||||
|
name_template: "{{ .ProjectName }}_v{{ .Version }}_{{ .Os }}_{{ .Arch }}"
|
||||||
files:
|
files:
|
||||||
# this is a dumb but required hack so it doesn't include the default files
|
# this is a dumb but required hack so it doesn't include the default files
|
||||||
# https://github.com/goreleaser/goreleaser/issues/602
|
# https://github.com/goreleaser/goreleaser/issues/602
|
||||||
@@ -129,8 +76,7 @@ release:
|
|||||||
owner: filecoin-project
|
owner: filecoin-project
|
||||||
name: lotus
|
name: lotus
|
||||||
prerelease: auto
|
prerelease: auto
|
||||||
name_template: "Release v{{.Version}}"
|
name_template: "v{{.Version}}"
|
||||||
|
|
||||||
|
|
||||||
brews:
|
brews:
|
||||||
- tap:
|
- tap:
|
||||||
@@ -151,10 +97,8 @@ brews:
|
|||||||
homepage: "https://filecoin.io"
|
homepage: "https://filecoin.io"
|
||||||
description: "A homebrew cask for installing filecoin-project/lotus on MacOS"
|
description: "A homebrew cask for installing filecoin-project/lotus on MacOS"
|
||||||
license: MIT
|
license: MIT
|
||||||
|
skip_upload: auto
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: pkg-config
|
|
||||||
- name: jq
|
|
||||||
- name: bzr
|
|
||||||
- name: hwloc
|
- name: hwloc
|
||||||
|
|
||||||
# produced manually so we can include cid checksums
|
# produced manually so we can include cid checksums
|
||||||
@@ -162,4 +106,4 @@ checksum:
|
|||||||
disable: true
|
disable: true
|
||||||
|
|
||||||
snapshot:
|
snapshot:
|
||||||
name_template: "{{ .Tag }}"
|
name_template: "{{ .Version }}"
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" viewBox="0 0 127 127" xml:space="preserve" enable-background="new 0 0 127 127"><style type="text/css">.st0{fill:#00d2d6}.st1{fill:#fff}</style><g><path class="st0" d="M63.5,127C28.5,127.1-0.2,98.4,0,63.2C0.2,28.3,28.6-0.2,63.9,0c34.8,0.2,63.3,28.7,63.1,64 C126.7,98.7,98.5,127.1,63.5,127z M71.4,57.6c5.5,0.8,11,1.5,16.5,2.3c0.5-1.7,0.9-3.1,1.3-4.7c-5.7-0.8-11.2-1.7-17.1-2.5 c2-7,3.7-13.7,5.8-20.2c0.7-2.2,2.3-4.2,3.9-5.9c2.1-2.2,5-1.7,6.8,0.7c0.7,1,1.4,2.1,2.3,2.9c1.1,1.1,2.8,1.6,4,0.6 c0.8-0.7,0.7-2.4,0.8-3.6c0-0.5-0.6-1.1-1-1.6c-2-2.3-4.7-3.1-7.5-3.2c-6.3-0.3-10.9,3-14.5,7.8c-3.5,4.8-5.1,10.5-6.8,16.2 c-0.5,1.6-0.9,3.3-1.4,5.1c-6.2-0.9-12.1-1.7-18.2-2.6c-0.2,1.6-0.4,3.2-0.6,4.8c6,0.9,11.8,1.8,17.8,2.7c-0.8,3.4-1.5,6.5-2.3,9.7 c-5.8-0.8-11.4-1.6-17-2.4c-0.2,1.8-0.4,3.2-0.6,4.8c5.6,0.9,11,1.7,16.5,2.5c0,0.6,0.1,1,0,1.3c-1.7,7.4-3.4,14.8-5.3,22.2 c-0.9,3.5-2.4,6.9-5.3,9.3c-2.4,2-5,1.7-6.8-0.8c-0.8-1.1-1.5-2.5-2.6-3.3c-0.8-0.6-2.5-0.9-3.1-0.5c-0.9,0.7-1.5,2.2-1.4,3.3 c0.1,1,1,2.2,1.9,2.8c3,2.3,6.5,2.6,10,1.9c5.9-1.2,10.1-4.9,12.7-10.1c2-4.1,3.6-8.5,5-12.9c1.3-4,2.2-8,3.3-12.2 c5.8,0.8,11.5,1.7,17.3,2.5c0.5-1.7,0.9-3.2,1.4-4.8c-6.1-0.9-11.9-1.7-17.7-2.6C70.1,64,70.7,60.9,71.4,57.6z"/><path class="st1" d="M71.4,57.6c-0.7,3.3-1.3,6.4-2,9.8c5.9,0.9,11.7,1.7,17.7,2.6c-0.5,1.6-0.9,3.1-1.4,4.8 c-5.8-0.8-11.5-1.7-17.3-2.5c-1.1,4.2-2,8.3-3.3,12.2c-1.4,4.4-3,8.7-5,12.9c-2.6,5.2-6.8,8.9-12.7,10.1c-3.5,0.7-7,0.4-10-1.9 c-0.9-0.7-1.8-1.8-1.9-2.8c-0.1-1.1,0.5-2.7,1.4-3.3c0.6-0.5,2.3-0.1,3.1,0.5c1.1,0.8,1.8,2.1,2.6,3.3c1.8,2.5,4.4,2.9,6.8,0.8 c2.9-2.5,4.4-5.8,5.3-9.3c1.9-7.3,3.6-14.8,5.3-22.2c0.1-0.3,0-0.7,0-1.3c-5.4-0.8-10.8-1.7-16.5-2.5c0.2-1.6,0.4-3,0.6-4.8 c5.6,0.8,11.1,1.6,17,2.4c0.8-3.2,1.5-6.4,2.3-9.7c-6-0.9-11.7-1.8-17.8-2.7c0.2-1.6,0.4-3.2,0.6-4.8c6.1,0.9,12,1.7,18.2,2.6 c0.5-1.8,0.9-3.5,1.4-5.1c1.7-5.6,3.2-11.3,6.8-16.2c3.6-4.9,8.1-8.1,14.5-7.8c2.8,0.1,5.5,0.9,7.5,3.2c0.4,0.5,1,1.1,1,1.6 c-0.1,1.2,0,2.9-0.8,3.6c-1.1,1.1-2.8,0.5-4-0.6c-0.9-0.9-1.6-1.9-2.3-2.9c-1.8-2.4-4.7-2.9-6.8-0.7c-1.6,1.7-3.2,3.7-3.9,5.9 C75.7,39.4,74,46,72,53c5.9,0.9,11.4,1.7,17.1,2.5c-0.5,1.6-0.9,3.1-1.3,4.7C82.3,59.1,76.9,58.3,71.4,57.6z"/></g></svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.2 KiB |
@@ -1,71 +0,0 @@
|
|||||||
version: 1
|
|
||||||
AppDir:
|
|
||||||
path: ./AppDir
|
|
||||||
app_info:
|
|
||||||
id: io.filecoin.lotus
|
|
||||||
name: Lotus
|
|
||||||
icon: icon
|
|
||||||
version: latest
|
|
||||||
exec: usr/bin/lotus
|
|
||||||
exec_args: $@
|
|
||||||
apt:
|
|
||||||
arch: amd64
|
|
||||||
allow_unauthenticated: true
|
|
||||||
sources:
|
|
||||||
- sourceline: deb http://archive.ubuntu.com/ubuntu/ focal main restricted
|
|
||||||
- sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted
|
|
||||||
- sourceline: deb http://archive.ubuntu.com/ubuntu/ focal universe
|
|
||||||
- sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-updates universe
|
|
||||||
- sourceline: deb http://archive.ubuntu.com/ubuntu/ focal multiverse
|
|
||||||
- sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-updates multiverse
|
|
||||||
- sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted
|
|
||||||
universe multiverse
|
|
||||||
- sourceline: deb http://security.ubuntu.com/ubuntu focal-security main restricted
|
|
||||||
- sourceline: deb http://security.ubuntu.com/ubuntu focal-security universe
|
|
||||||
- sourceline: deb http://security.ubuntu.com/ubuntu focal-security multiverse
|
|
||||||
- sourceline: deb https://cli-assets.heroku.com/apt ./
|
|
||||||
- sourceline: deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu focal main
|
|
||||||
- sourceline: deb http://ppa.launchpad.net/git-core/ppa/ubuntu focal main
|
|
||||||
- sourceline: deb http://archive.canonical.com/ubuntu focal partner
|
|
||||||
include:
|
|
||||||
- ocl-icd-libopencl1
|
|
||||||
- libhwloc15
|
|
||||||
exclude: []
|
|
||||||
files:
|
|
||||||
include:
|
|
||||||
- /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
|
|
||||||
- /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
|
|
||||||
- /usr/lib/x86_64-linux-gnu/libm-2.31.so
|
|
||||||
- /usr/lib/x86_64-linux-gnu/libdl-2.31.so
|
|
||||||
- /usr/lib/x86_64-linux-gnu/libc-2.31.so
|
|
||||||
- /usr/lib/x86_64-linux-gnu/libudev.so.1.6.17
|
|
||||||
exclude:
|
|
||||||
- usr/share/man
|
|
||||||
- usr/share/doc/*/README.*
|
|
||||||
- usr/share/doc/*/changelog.*
|
|
||||||
- usr/share/doc/*/NEWS.*
|
|
||||||
- usr/share/doc/*/TODO.*
|
|
||||||
test:
|
|
||||||
fedora:
|
|
||||||
image: appimagecrafters/tests-env:fedora-30
|
|
||||||
command: ./AppRun
|
|
||||||
use_host_x: false
|
|
||||||
debian:
|
|
||||||
image: appimagecrafters/tests-env:debian-stable
|
|
||||||
command: ./AppRun
|
|
||||||
use_host_x: false
|
|
||||||
arch:
|
|
||||||
image: appimagecrafters/tests-env:archlinux-latest
|
|
||||||
command: ./AppRun
|
|
||||||
use_host_x: false
|
|
||||||
centos:
|
|
||||||
image: appimagecrafters/tests-env:centos-7
|
|
||||||
command: ./AppRun
|
|
||||||
use_host_x: false
|
|
||||||
ubuntu:
|
|
||||||
image: appimagecrafters/tests-env:ubuntu-xenial
|
|
||||||
command: ./AppRun
|
|
||||||
use_host_x: false
|
|
||||||
AppImage:
|
|
||||||
arch: x86_64
|
|
||||||
|
|
||||||
+1215
-13
File diff suppressed because it is too large
Load Diff
+136
@@ -0,0 +1,136 @@
|
|||||||
|
#####################################
|
||||||
|
FROM golang:1.19.7-buster AS lotus-builder
|
||||||
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
||||||
|
|
||||||
|
ENV XDG_CACHE_HOME="/tmp"
|
||||||
|
|
||||||
|
### taken from https://github.com/rust-lang/docker-rust/blob/master/1.63.0/buster/Dockerfile
|
||||||
|
ENV RUSTUP_HOME=/usr/local/rustup \
|
||||||
|
CARGO_HOME=/usr/local/cargo \
|
||||||
|
PATH=/usr/local/cargo/bin:$PATH \
|
||||||
|
RUST_VERSION=1.63.0
|
||||||
|
|
||||||
|
RUN set -eux; \
|
||||||
|
dpkgArch="$(dpkg --print-architecture)"; \
|
||||||
|
case "${dpkgArch##*-}" in \
|
||||||
|
amd64) rustArch='x86_64-unknown-linux-gnu'; rustupSha256='5cc9ffd1026e82e7fb2eec2121ad71f4b0f044e88bca39207b3f6b769aaa799c' ;; \
|
||||||
|
arm64) rustArch='aarch64-unknown-linux-gnu'; rustupSha256='e189948e396d47254103a49c987e7fb0e5dd8e34b200aa4481ecc4b8e41fb929' ;; \
|
||||||
|
*) echo >&2 "unsupported architecture: ${dpkgArch}"; exit 1 ;; \
|
||||||
|
esac; \
|
||||||
|
url="https://static.rust-lang.org/rustup/archive/1.25.1/${rustArch}/rustup-init"; \
|
||||||
|
wget "$url"; \
|
||||||
|
echo "${rustupSha256} *rustup-init" | sha256sum -c -; \
|
||||||
|
chmod +x rustup-init; \
|
||||||
|
./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION --default-host ${rustArch}; \
|
||||||
|
rm rustup-init; \
|
||||||
|
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
|
||||||
|
rustup --version; \
|
||||||
|
cargo --version; \
|
||||||
|
rustc --version;
|
||||||
|
|
||||||
|
COPY ./ /opt/filecoin
|
||||||
|
WORKDIR /opt/filecoin
|
||||||
|
|
||||||
|
RUN scripts/docker-git-state-check.sh
|
||||||
|
|
||||||
|
### make configurable filecoin-ffi build
|
||||||
|
ARG FFI_BUILD_FROM_SOURCE=0
|
||||||
|
ENV FFI_BUILD_FROM_SOURCE=${FFI_BUILD_FROM_SOURCE}
|
||||||
|
|
||||||
|
RUN make clean deps
|
||||||
|
|
||||||
|
ARG RUSTFLAGS=""
|
||||||
|
ARG GOFLAGS=""
|
||||||
|
|
||||||
|
RUN make buildall
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
FROM ubuntu:20.04 AS lotus-base
|
||||||
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
|
# Base resources
|
||||||
|
COPY --from=lotus-builder /etc/ssl/certs /etc/ssl/certs
|
||||||
|
COPY --from=lotus-builder /lib/*/libdl.so.2 /lib/
|
||||||
|
COPY --from=lotus-builder /lib/*/librt.so.1 /lib/
|
||||||
|
COPY --from=lotus-builder /lib/*/libgcc_s.so.1 /lib/
|
||||||
|
COPY --from=lotus-builder /lib/*/libutil.so.1 /lib/
|
||||||
|
COPY --from=lotus-builder /usr/lib/*/libltdl.so.7 /lib/
|
||||||
|
COPY --from=lotus-builder /usr/lib/*/libnuma.so.1 /lib/
|
||||||
|
COPY --from=lotus-builder /usr/lib/*/libhwloc.so.5 /lib/
|
||||||
|
COPY --from=lotus-builder /usr/lib/*/libOpenCL.so.1 /lib/
|
||||||
|
|
||||||
|
RUN useradd -r -u 532 -U fc \
|
||||||
|
&& mkdir -p /etc/OpenCL/vendors \
|
||||||
|
&& echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
FROM lotus-base AS lotus
|
||||||
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-shed /usr/local/bin/
|
||||||
|
COPY scripts/docker-lotus-entrypoint.sh /
|
||||||
|
|
||||||
|
ARG DOCKER_LOTUS_IMPORT_SNAPSHOT https://snapshots.mainnet.filops.net/minimal/latest
|
||||||
|
ENV DOCKER_LOTUS_IMPORT_SNAPSHOT ${DOCKER_LOTUS_IMPORT_SNAPSHOT}
|
||||||
|
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
||||||
|
ENV LOTUS_PATH /var/lib/lotus
|
||||||
|
ENV DOCKER_LOTUS_IMPORT_WALLET ""
|
||||||
|
|
||||||
|
RUN mkdir /var/lib/lotus /var/tmp/filecoin-proof-parameters
|
||||||
|
RUN chown fc: /var/lib/lotus /var/tmp/filecoin-proof-parameters
|
||||||
|
|
||||||
|
VOLUME /var/lib/lotus
|
||||||
|
VOLUME /var/tmp/filecoin-proof-parameters
|
||||||
|
|
||||||
|
USER fc
|
||||||
|
|
||||||
|
EXPOSE 1234
|
||||||
|
|
||||||
|
ENTRYPOINT ["/docker-lotus-entrypoint.sh"]
|
||||||
|
|
||||||
|
CMD ["-help"]
|
||||||
|
|
||||||
|
#####################################
|
||||||
|
FROM lotus-base AS lotus-all-in-one
|
||||||
|
|
||||||
|
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
||||||
|
ENV LOTUS_MINER_PATH /var/lib/lotus-miner
|
||||||
|
ENV LOTUS_PATH /var/lib/lotus
|
||||||
|
ENV LOTUS_WORKER_PATH /var/lib/lotus-worker
|
||||||
|
ENV WALLET_PATH /var/lib/lotus-wallet
|
||||||
|
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-seed /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-shed /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-wallet /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-gateway /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-miner /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-worker /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-stats /usr/local/bin/
|
||||||
|
COPY --from=lotus-builder /opt/filecoin/lotus-fountain /usr/local/bin/
|
||||||
|
|
||||||
|
RUN mkdir /var/tmp/filecoin-proof-parameters
|
||||||
|
RUN mkdir /var/lib/lotus
|
||||||
|
RUN mkdir /var/lib/lotus-miner
|
||||||
|
RUN mkdir /var/lib/lotus-worker
|
||||||
|
RUN mkdir /var/lib/lotus-wallet
|
||||||
|
RUN chown fc: /var/tmp/filecoin-proof-parameters
|
||||||
|
RUN chown fc: /var/lib/lotus
|
||||||
|
RUN chown fc: /var/lib/lotus-miner
|
||||||
|
RUN chown fc: /var/lib/lotus-worker
|
||||||
|
RUN chown fc: /var/lib/lotus-wallet
|
||||||
|
|
||||||
|
|
||||||
|
VOLUME /var/tmp/filecoin-proof-parameters
|
||||||
|
VOLUME /var/lib/lotus
|
||||||
|
VOLUME /var/lib/lotus-miner
|
||||||
|
VOLUME /var/lib/lotus-worker
|
||||||
|
VOLUME /var/lib/lotus-wallet
|
||||||
|
|
||||||
|
EXPOSE 1234
|
||||||
|
EXPOSE 2345
|
||||||
|
EXPOSE 3456
|
||||||
|
EXPOSE 1777
|
||||||
@@ -1,256 +0,0 @@
|
|||||||
FROM golang:1.17.9-buster AS builder-deps
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
|
||||||
|
|
||||||
ARG RUST_VERSION=nightly
|
|
||||||
ENV XDG_CACHE_HOME="/tmp"
|
|
||||||
|
|
||||||
ENV RUSTUP_HOME=/usr/local/rustup \
|
|
||||||
CARGO_HOME=/usr/local/cargo \
|
|
||||||
PATH=/usr/local/cargo/bin:$PATH
|
|
||||||
|
|
||||||
RUN wget "https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init"; \
|
|
||||||
chmod +x rustup-init; \
|
|
||||||
./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION; \
|
|
||||||
rm rustup-init; \
|
|
||||||
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
|
|
||||||
rustup --version; \
|
|
||||||
cargo --version; \
|
|
||||||
rustc --version;
|
|
||||||
|
|
||||||
|
|
||||||
FROM builder-deps AS builder-local
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
COPY ./ /opt/filecoin
|
|
||||||
WORKDIR /opt/filecoin
|
|
||||||
RUN make clean deps
|
|
||||||
|
|
||||||
|
|
||||||
FROM builder-local AS builder-test
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
WORKDIR /opt/filecoin
|
|
||||||
|
|
||||||
RUN make debug
|
|
||||||
|
|
||||||
|
|
||||||
FROM builder-local AS builder
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
WORKDIR /opt/filecoin
|
|
||||||
|
|
||||||
ARG RUSTFLAGS=""
|
|
||||||
ARG GOFLAGS=""
|
|
||||||
|
|
||||||
RUN make lotus lotus-miner lotus-worker lotus-shed lotus-wallet lotus-gateway lotus-stats
|
|
||||||
|
|
||||||
|
|
||||||
FROM ubuntu:20.04 AS base
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
# Base resources
|
|
||||||
COPY --from=builder /etc/ssl/certs /etc/ssl/certs
|
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/libdl.so.2 /lib/
|
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/librt.so.1 /lib/
|
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/libgcc_s.so.1 /lib/
|
|
||||||
COPY --from=builder /lib/x86_64-linux-gnu/libutil.so.1 /lib/
|
|
||||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/libltdl.so.7 /lib/
|
|
||||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/libnuma.so.1 /lib/
|
|
||||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/libhwloc.so.5 /lib/
|
|
||||||
COPY --from=builder /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /lib/
|
|
||||||
|
|
||||||
RUN useradd -r -u 532 -U fc \
|
|
||||||
&& mkdir -p /etc/OpenCL/vendors \
|
|
||||||
&& echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
|
|
||||||
|
|
||||||
###
|
|
||||||
FROM base AS lotus
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
COPY --from=builder /opt/filecoin/lotus /usr/local/bin/
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-shed /usr/local/bin/
|
|
||||||
COPY scripts/docker-lotus-entrypoint.sh /
|
|
||||||
|
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
|
||||||
ENV LOTUS_PATH /var/lib/lotus
|
|
||||||
ENV DOCKER_LOTUS_IMPORT_SNAPSHOT https://fil-chain-snapshots-fallback.s3.amazonaws.com/mainnet/minimal_finality_stateroots_latest.car
|
|
||||||
ENV DOCKER_LOTUS_IMPORT_WALLET ""
|
|
||||||
|
|
||||||
RUN mkdir /var/lib/lotus /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN chown fc: /var/lib/lotus /var/tmp/filecoin-proof-parameters
|
|
||||||
|
|
||||||
VOLUME /var/lib/lotus
|
|
||||||
VOLUME /var/tmp/filecoin-proof-parameters
|
|
||||||
|
|
||||||
USER fc
|
|
||||||
|
|
||||||
EXPOSE 1234
|
|
||||||
|
|
||||||
ENTRYPOINT ["/docker-lotus-entrypoint.sh"]
|
|
||||||
|
|
||||||
CMD ["-help"]
|
|
||||||
|
|
||||||
###
|
|
||||||
FROM base AS lotus-wallet
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-wallet /usr/local/bin/
|
|
||||||
|
|
||||||
ENV WALLET_PATH /var/lib/lotus-wallet
|
|
||||||
|
|
||||||
RUN mkdir /var/lib/lotus-wallet
|
|
||||||
RUN chown fc: /var/lib/lotus-wallet
|
|
||||||
|
|
||||||
VOLUME /var/lib/lotus-wallet
|
|
||||||
|
|
||||||
USER fc
|
|
||||||
|
|
||||||
EXPOSE 1777
|
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/bin/lotus-wallet"]
|
|
||||||
|
|
||||||
CMD ["-help"]
|
|
||||||
|
|
||||||
###
|
|
||||||
FROM base AS lotus-gateway
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-gateway /usr/local/bin/
|
|
||||||
|
|
||||||
USER fc
|
|
||||||
|
|
||||||
EXPOSE 1234
|
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/bin/lotus-gateway"]
|
|
||||||
|
|
||||||
CMD ["-help"]
|
|
||||||
|
|
||||||
|
|
||||||
###
|
|
||||||
FROM base AS lotus-miner
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-miner /usr/local/bin/
|
|
||||||
COPY scripts/docker-lotus-miner-entrypoint.sh /
|
|
||||||
|
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
|
||||||
ENV LOTUS_MINER_PATH /var/lib/lotus-miner
|
|
||||||
|
|
||||||
RUN mkdir /var/lib/lotus-miner /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN chown fc: /var/lib/lotus-miner /var/tmp/filecoin-proof-parameters
|
|
||||||
|
|
||||||
VOLUME /var/lib/lotus-miner
|
|
||||||
VOLUME /var/tmp/filecoin-proof-parameters
|
|
||||||
|
|
||||||
USER fc
|
|
||||||
|
|
||||||
EXPOSE 2345
|
|
||||||
|
|
||||||
ENTRYPOINT ["/docker-lotus-miner-entrypoint.sh"]
|
|
||||||
|
|
||||||
CMD ["-help"]
|
|
||||||
|
|
||||||
|
|
||||||
###
|
|
||||||
FROM base AS lotus-worker
|
|
||||||
MAINTAINER Lotus Development Team
|
|
||||||
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-worker /usr/local/bin/
|
|
||||||
|
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
|
||||||
ENV LOTUS_WORKER_PATH /var/lib/lotus-worker
|
|
||||||
|
|
||||||
RUN mkdir /var/lib/lotus-worker
|
|
||||||
RUN chown fc: /var/lib/lotus-worker
|
|
||||||
|
|
||||||
VOLUME /var/lib/lotus-worker
|
|
||||||
|
|
||||||
USER fc
|
|
||||||
|
|
||||||
EXPOSE 3456
|
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/bin/lotus-worker"]
|
|
||||||
|
|
||||||
CMD ["-help"]
|
|
||||||
|
|
||||||
|
|
||||||
###
|
|
||||||
from base as lotus-all-in-one
|
|
||||||
|
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
|
||||||
ENV LOTUS_MINER_PATH /var/lib/lotus-miner
|
|
||||||
ENV LOTUS_PATH /var/lib/lotus
|
|
||||||
ENV LOTUS_WORKER_PATH /var/lib/lotus-worker
|
|
||||||
ENV WALLET_PATH /var/lib/lotus-wallet
|
|
||||||
ENV DOCKER_LOTUS_IMPORT_SNAPSHOT https://fil-chain-snapshots-fallback.s3.amazonaws.com/mainnet/minimal_finality_stateroots_latest.car
|
|
||||||
|
|
||||||
COPY --from=builder /opt/filecoin/lotus /usr/local/bin/
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-shed /usr/local/bin/
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-wallet /usr/local/bin/
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-gateway /usr/local/bin/
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-miner /usr/local/bin/
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-worker /usr/local/bin/
|
|
||||||
COPY --from=builder /opt/filecoin/lotus-stats /usr/local/bin/
|
|
||||||
|
|
||||||
RUN mkdir /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN mkdir /var/lib/lotus
|
|
||||||
RUN mkdir /var/lib/lotus-miner
|
|
||||||
RUN mkdir /var/lib/lotus-worker
|
|
||||||
RUN mkdir /var/lib/lotus-wallet
|
|
||||||
RUN chown fc: /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN chown fc: /var/lib/lotus
|
|
||||||
RUN chown fc: /var/lib/lotus-miner
|
|
||||||
RUN chown fc: /var/lib/lotus-worker
|
|
||||||
RUN chown fc: /var/lib/lotus-wallet
|
|
||||||
|
|
||||||
|
|
||||||
VOLUME /var/tmp/filecoin-proof-parameters
|
|
||||||
VOLUME /var/lib/lotus
|
|
||||||
VOLUME /var/lib/lotus-miner
|
|
||||||
VOLUME /var/lib/lotus-worker
|
|
||||||
VOLUME /var/lib/lotus-wallet
|
|
||||||
|
|
||||||
EXPOSE 1234
|
|
||||||
EXPOSE 2345
|
|
||||||
EXPOSE 3456
|
|
||||||
EXPOSE 1777
|
|
||||||
|
|
||||||
###
|
|
||||||
from base as lotus-test
|
|
||||||
|
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
|
||||||
ENV LOTUS_MINER_PATH /var/lib/lotus-miner
|
|
||||||
ENV LOTUS_PATH /var/lib/lotus
|
|
||||||
ENV LOTUS_WORKER_PATH /var/lib/lotus-worker
|
|
||||||
ENV WALLET_PATH /var/lib/lotus-wallet
|
|
||||||
|
|
||||||
COPY --from=builder-test /opt/filecoin/lotus /usr/local/bin/
|
|
||||||
COPY --from=builder-test /opt/filecoin/lotus-miner /usr/local/bin/
|
|
||||||
COPY --from=builder-test /opt/filecoin/lotus-worker /usr/local/bin/
|
|
||||||
COPY --from=builder-test /opt/filecoin/lotus-seed /usr/local/bin/
|
|
||||||
|
|
||||||
RUN mkdir /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN mkdir /var/lib/lotus
|
|
||||||
RUN mkdir /var/lib/lotus-miner
|
|
||||||
RUN mkdir /var/lib/lotus-worker
|
|
||||||
RUN mkdir /var/lib/lotus-wallet
|
|
||||||
RUN chown fc: /var/tmp/filecoin-proof-parameters
|
|
||||||
RUN chown fc: /var/lib/lotus
|
|
||||||
RUN chown fc: /var/lib/lotus-miner
|
|
||||||
RUN chown fc: /var/lib/lotus-worker
|
|
||||||
RUN chown fc: /var/lib/lotus-wallet
|
|
||||||
|
|
||||||
|
|
||||||
VOLUME /var/tmp/filecoin-proof-parameters
|
|
||||||
VOLUME /var/lib/lotus
|
|
||||||
VOLUME /var/lib/lotus-miner
|
|
||||||
VOLUME /var/lib/lotus-worker
|
|
||||||
VOLUME /var/lib/lotus-wallet
|
|
||||||
|
|
||||||
EXPOSE 1234
|
|
||||||
EXPOSE 2345
|
|
||||||
EXPOSE 3456
|
|
||||||
EXPOSE 1777
|
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
1.19.7
|
||||||
@@ -8,9 +8,11 @@ unexport GOFLAGS
|
|||||||
GOCC?=go
|
GOCC?=go
|
||||||
|
|
||||||
GOVERSION:=$(shell $(GOCC) version | tr ' ' '\n' | grep go1 | sed 's/^go//' | awk -F. '{printf "%d%03d%03d", $$1, $$2, $$3}')
|
GOVERSION:=$(shell $(GOCC) version | tr ' ' '\n' | grep go1 | sed 's/^go//' | awk -F. '{printf "%d%03d%03d", $$1, $$2, $$3}')
|
||||||
ifeq ($(shell expr $(GOVERSION) \< 1016000), 1)
|
GOVERSIONMIN:=$(shell cat GO_VERSION_MIN | awk -F. '{printf "%d%03d%03d", $$1, $$2, $$3}')
|
||||||
|
|
||||||
|
ifeq ($(shell expr $(GOVERSION) \< $(GOVERSIONMIN)), 1)
|
||||||
$(warning Your Golang version is go$(shell expr $(GOVERSION) / 1000000).$(shell expr $(GOVERSION) % 1000000 / 1000).$(shell expr $(GOVERSION) % 1000))
|
$(warning Your Golang version is go$(shell expr $(GOVERSION) / 1000000).$(shell expr $(GOVERSION) % 1000000 / 1000).$(shell expr $(GOVERSION) % 1000))
|
||||||
$(error Update Golang to version to at least 1.17.9)
|
$(error Update Golang to version to at least $(shell cat GO_VERSION_MIN))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# git modules that need to be loaded
|
# git modules that need to be loaded
|
||||||
@@ -64,7 +66,7 @@ CLEAN+=build/.update-modules
|
|||||||
deps: $(BUILD_DEPS)
|
deps: $(BUILD_DEPS)
|
||||||
.PHONY: deps
|
.PHONY: deps
|
||||||
|
|
||||||
build-devnets: build lotus-seed lotus-shed lotus-wallet lotus-gateway lotus-fountain lotus-stats
|
build-devnets: build lotus-seed lotus-shed
|
||||||
.PHONY: build-devnets
|
.PHONY: build-devnets
|
||||||
|
|
||||||
debug: GOFLAGS+=-tags=debug
|
debug: GOFLAGS+=-tags=debug
|
||||||
@@ -160,18 +162,6 @@ benchmarks:
|
|||||||
@curl -X POST 'http://benchmark.kittyhawk.wtf/benchmark' -d '@bench.json' -u "${benchmark_http_cred}"
|
@curl -X POST 'http://benchmark.kittyhawk.wtf/benchmark' -d '@bench.json' -u "${benchmark_http_cred}"
|
||||||
.PHONY: benchmarks
|
.PHONY: benchmarks
|
||||||
|
|
||||||
lotus-pond: 2k
|
|
||||||
$(GOCC) build -o lotus-pond ./lotuspond
|
|
||||||
.PHONY: lotus-pond
|
|
||||||
BINS+=lotus-pond
|
|
||||||
|
|
||||||
lotus-pond-front:
|
|
||||||
(cd lotuspond/front && npm i && CI=false npm run build)
|
|
||||||
.PHONY: lotus-pond-front
|
|
||||||
|
|
||||||
lotus-pond-app: lotus-pond-front lotus-pond
|
|
||||||
.PHONY: lotus-pond-app
|
|
||||||
|
|
||||||
lotus-fountain:
|
lotus-fountain:
|
||||||
rm -f lotus-fountain
|
rm -f lotus-fountain
|
||||||
$(GOCC) build $(GOFLAGS) -o lotus-fountain ./cmd/lotus-fountain
|
$(GOCC) build $(GOFLAGS) -o lotus-fountain ./cmd/lotus-fountain
|
||||||
@@ -299,9 +289,6 @@ type-gen: api-gen
|
|||||||
$(GOCC) generate -x ./...
|
$(GOCC) generate -x ./...
|
||||||
goimports -w api/
|
goimports -w api/
|
||||||
|
|
||||||
method-gen: api-gen
|
|
||||||
(cd ./lotuspond/front/src/chain && $(GOCC) run ./methodgen.go)
|
|
||||||
|
|
||||||
actors-code-gen:
|
actors-code-gen:
|
||||||
$(GOCC) run ./gen/inline-gen . gen/inlinegen-data.json
|
$(GOCC) run ./gen/inline-gen . gen/inlinegen-data.json
|
||||||
$(GOCC) run ./chain/actors/agen
|
$(GOCC) run ./chain/actors/agen
|
||||||
@@ -311,7 +298,7 @@ actors-gen: actors-code-gen fiximports
|
|||||||
.PHONY: actors-gen
|
.PHONY: actors-gen
|
||||||
|
|
||||||
bundle-gen:
|
bundle-gen:
|
||||||
$(GOCC) run ./gen/bundle
|
$(GOCC) run ./gen/bundle $(VERSION) $(RELEASE) $(RELEASE_OVERRIDES)
|
||||||
$(GOCC) fmt ./build/...
|
$(GOCC) fmt ./build/...
|
||||||
.PHONY: bundle-gen
|
.PHONY: bundle-gen
|
||||||
|
|
||||||
@@ -367,7 +354,7 @@ docsgen-openrpc-gateway: docsgen-openrpc-bin
|
|||||||
fiximports:
|
fiximports:
|
||||||
./scripts/fiximports
|
./scripts/fiximports
|
||||||
|
|
||||||
gen: actors-code-gen type-gen method-gen cfgdoc-gen docsgen api-gen circleci bundle-gen fiximports
|
gen: actors-code-gen type-gen cfgdoc-gen docsgen api-gen circleci fiximports
|
||||||
@echo ">>> IF YOU'VE MODIFIED THE CLI OR CONFIG, REMEMBER TO ALSO MAKE docsgen-cli"
|
@echo ">>> IF YOU'VE MODIFIED THE CLI OR CONFIG, REMEMBER TO ALSO MAKE docsgen-cli"
|
||||||
.PHONY: gen
|
.PHONY: gen
|
||||||
|
|
||||||
@@ -379,7 +366,7 @@ snap: lotus lotus-miner lotus-worker
|
|||||||
|
|
||||||
# separate from gen because it needs binaries
|
# separate from gen because it needs binaries
|
||||||
docsgen-cli: lotus lotus-miner lotus-worker
|
docsgen-cli: lotus lotus-miner lotus-worker
|
||||||
python ./scripts/generate-lotus-cli.py
|
python3 ./scripts/generate-lotus-cli.py
|
||||||
./lotus config default > documentation/en/default-lotus-config.toml
|
./lotus config default > documentation/en/default-lotus-config.toml
|
||||||
./lotus-miner config default > documentation/en/default-lotus-miner-config.toml
|
./lotus-miner config default > documentation/en/default-lotus-miner-config.toml
|
||||||
.PHONY: docsgen-cli
|
.PHONY: docsgen-cli
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://docs.filecoin.io/" title="Filecoin Docs">
|
<a href="https://lotus.filecoin.io/" title="Filecoin Docs">
|
||||||
<img src="documentation/images/lotus_logo_h.png" alt="Project Lotus Logo" width="244" />
|
<img src="documentation/images/lotus_logo_h.png" alt="Project Lotus Logo" width="244" />
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
<a href="https://circleci.com/gh/filecoin-project/lotus"><img src="https://circleci.com/gh/filecoin-project/lotus.svg?style=svg"></a>
|
<a href="https://circleci.com/gh/filecoin-project/lotus"><img src="https://circleci.com/gh/filecoin-project/lotus.svg?style=svg"></a>
|
||||||
<a href="https://codecov.io/gh/filecoin-project/lotus"><img src="https://codecov.io/gh/filecoin-project/lotus/branch/master/graph/badge.svg"></a>
|
<a href="https://codecov.io/gh/filecoin-project/lotus"><img src="https://codecov.io/gh/filecoin-project/lotus/branch/master/graph/badge.svg"></a>
|
||||||
<a href="https://goreportcard.com/report/github.com/filecoin-project/lotus"><img src="https://goreportcard.com/badge/github.com/filecoin-project/lotus" /></a>
|
<a href="https://goreportcard.com/report/github.com/filecoin-project/lotus"><img src="https://goreportcard.com/badge/github.com/filecoin-project/lotus" /></a>
|
||||||
<a href=""><img src="https://img.shields.io/badge/golang-%3E%3D1.17-blue.svg" /></a>
|
<a href=""><img src="https://img.shields.io/badge/golang-%3E%3D1.18.8-blue.svg" /></a>
|
||||||
<br>
|
<br>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -67,14 +67,14 @@ Fedora:
|
|||||||
sudo dnf -y install gcc make git bzr jq pkgconfig mesa-libOpenCL mesa-libOpenCL-devel opencl-headers ocl-icd ocl-icd-devel clang llvm wget hwloc hwloc-devel
|
sudo dnf -y install gcc make git bzr jq pkgconfig mesa-libOpenCL mesa-libOpenCL-devel opencl-headers ocl-icd ocl-icd-devel clang llvm wget hwloc hwloc-devel
|
||||||
```
|
```
|
||||||
|
|
||||||
For other distributions you can find the required dependencies [here.](https://docs.filecoin.io/get-started/lotus/installation/#system-specific) For instructions specific to macOS, you can find them [here.](https://docs.filecoin.io/get-started/lotus/installation/#macos)
|
For other distributions you can find the required dependencies [here.](https://lotus.filecoin.io/lotus/install/prerequisites/#supported-platforms) For instructions specific to macOS, you can find them [here.](https://lotus.filecoin.io/lotus/install/macos/)
|
||||||
|
|
||||||
#### Go
|
#### Go
|
||||||
|
|
||||||
To build Lotus, you need a working installation of [Go 1.17.9 or higher](https://golang.org/dl/):
|
To build Lotus, you need a working installation of [Go 1.19.7 or higher](https://golang.org/dl/):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget -c https://golang.org/dl/go1.17.9.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
|
wget -c https://golang.org/dl/go1.19.7.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
|
||||||
```
|
```
|
||||||
|
|
||||||
**TIP:**
|
**TIP:**
|
||||||
@@ -101,7 +101,7 @@ Note: The default branch `master` is the dev branch where the latest new feature
|
|||||||
|
|
||||||
2. To join mainnet, checkout the [latest release](https://github.com/filecoin-project/lotus/releases).
|
2. To join mainnet, checkout the [latest release](https://github.com/filecoin-project/lotus/releases).
|
||||||
|
|
||||||
If you are changing networks from a previous Lotus installation or there has been a network reset, read the [Switch networks guide](https://docs.filecoin.io/get-started/lotus/switch-networks/) before proceeding.
|
If you are changing networks from a previous Lotus installation or there has been a network reset, read the [Switch networks guide](https://lotus.filecoin.io/lotus/manage/switch-networks/) before proceeding.
|
||||||
|
|
||||||
For networks other than mainnet, look up the current branch or tag/commit for the network you want to join in the [Filecoin networks dashboard](https://network.filecoin.io), then build Lotus for your specific network below.
|
For networks other than mainnet, look up the current branch or tag/commit for the network you want to join in the [Filecoin networks dashboard](https://network.filecoin.io), then build Lotus for your specific network below.
|
||||||
|
|
||||||
@@ -113,8 +113,8 @@ Note: The default branch `master` is the dev branch where the latest new feature
|
|||||||
|
|
||||||
Currently, the latest code on the _master_ branch corresponds to mainnet.
|
Currently, the latest code on the _master_ branch corresponds to mainnet.
|
||||||
|
|
||||||
3. If you are in China, see "[Lotus: tips when running in China](https://docs.filecoin.io/get-started/lotus/tips-running-in-china/)".
|
3. If you are in China, see "[Lotus: tips when running in China](https://lotus.filecoin.io/lotus/configure/nodes-in-china/)".
|
||||||
4. This build instruction uses the prebuilt proofs binaries. If you want to build the proof binaries from source check the [complete instructions](https://docs.filecoin.io/get-started/lotus/installation/#build-and-install-lotus). Note, if you are building the proof binaries from source, [installing rustup](https://docs.filecoin.io/get-started/lotus/installation/#rustup) is also needed.
|
4. This build instruction uses the prebuilt proofs binaries. If you want to build the proof binaries from source check the [complete instructions](https://lotus.filecoin.io/lotus/install/prerequisites/). Note, if you are building the proof binaries from source, [installing rustup](https://lotus.filecoin.io/lotus/install/linux/#rustup) is also needed.
|
||||||
|
|
||||||
5. Build and install Lotus:
|
5. Build and install Lotus:
|
||||||
|
|
||||||
@@ -129,9 +129,9 @@ Note: The default branch `master` is the dev branch where the latest new feature
|
|||||||
|
|
||||||
This will put `lotus`, `lotus-miner` and `lotus-worker` in `/usr/local/bin`.
|
This will put `lotus`, `lotus-miner` and `lotus-worker` in `/usr/local/bin`.
|
||||||
|
|
||||||
`lotus` will use the `$HOME/.lotus` folder by default for storage (configuration, chain data, wallets, etc). See [advanced options](https://docs.filecoin.io/get-started/lotus/configuration-and-advanced-usage/) for information on how to customize the Lotus folder.
|
`lotus` will use the `$HOME/.lotus` folder by default for storage (configuration, chain data, wallets, etc). See [advanced options](https://lotus.filecoin.io/lotus/configure/defaults/#environment-variables) for information on how to customize the Lotus folder.
|
||||||
|
|
||||||
6. You should now have Lotus installed. You can now [start the Lotus daemon and sync the chain](https://docs.filecoin.io/get-started/lotus/installation/#start-the-lotus-daemon-and-sync-the-chain).
|
6. You should now have Lotus installed. You can now [start the Lotus daemon and sync the chain](https://lotus.filecoin.io/lotus/install/linux/#start-the-lotus-daemon-and-sync-the-chain).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package api
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
|
||||||
@@ -49,6 +50,9 @@ type Common interface {
|
|||||||
// trigger graceful shutdown
|
// trigger graceful shutdown
|
||||||
Shutdown(context.Context) error //perm:admin
|
Shutdown(context.Context) error //perm:admin
|
||||||
|
|
||||||
|
// StartTime returns node start time
|
||||||
|
StartTime(context.Context) (time.Time, error) //perm:read
|
||||||
|
|
||||||
// Session returns a random UUID of api provider session
|
// Session returns a random UUID of api provider session
|
||||||
Session(context.Context) (uuid.UUID, error) //perm:read
|
Session(context.Context) (uuid.UUID, error) //perm:read
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-jsonrpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
EOutOfGas = iota + jsonrpc.FirstUserCode
|
||||||
|
EActorNotFound
|
||||||
|
)
|
||||||
|
|
||||||
|
type ErrOutOfGas struct{}
|
||||||
|
|
||||||
|
func (e *ErrOutOfGas) Error() string {
|
||||||
|
return "call ran out of gas"
|
||||||
|
}
|
||||||
|
|
||||||
|
type ErrActorNotFound struct{}
|
||||||
|
|
||||||
|
func (e *ErrActorNotFound) Error() string {
|
||||||
|
return "actor not found"
|
||||||
|
}
|
||||||
|
|
||||||
|
var RPCErrors = jsonrpc.NewErrors()
|
||||||
|
|
||||||
|
func ErrorIsIn(err error, errorTypes []error) bool {
|
||||||
|
for _, etype := range errorTypes {
|
||||||
|
tmp := reflect.New(reflect.PointerTo(reflect.ValueOf(etype).Elem().Type())).Interface()
|
||||||
|
if errors.As(err, tmp) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
RPCErrors.Register(EOutOfGas, new(*ErrOutOfGas))
|
||||||
|
RPCErrors.Register(EActorNotFound, new(*ErrActorNotFound))
|
||||||
|
}
|
||||||
+174
-16
@@ -6,20 +6,23 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
blocks "github.com/ipfs/go-block-format"
|
blocks "github.com/ipfs/go-block-format"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-bitfield"
|
"github.com/filecoin-project/go-bitfield"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
|
||||||
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
||||||
|
"github.com/filecoin-project/go-jsonrpc"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/market"
|
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
@@ -29,6 +32,7 @@ import (
|
|||||||
lminer "github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
lminer "github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/builtin/power"
|
"github.com/filecoin-project/lotus/chain/actors/builtin/power"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
"github.com/filecoin-project/lotus/chain/types/ethtypes"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
"github.com/filecoin-project/lotus/node/repo/imports"
|
"github.com/filecoin-project/lotus/node/repo/imports"
|
||||||
)
|
)
|
||||||
@@ -149,7 +153,7 @@ type FullNode interface {
|
|||||||
|
|
||||||
// ChainGetPath returns a set of revert/apply operations needed to get from
|
// ChainGetPath returns a set of revert/apply operations needed to get from
|
||||||
// one tipset to another, for example:
|
// one tipset to another, for example:
|
||||||
//```
|
// ```
|
||||||
// to
|
// to
|
||||||
// ^
|
// ^
|
||||||
// from tAA
|
// from tAA
|
||||||
@@ -158,7 +162,7 @@ type FullNode interface {
|
|||||||
// ^---*--^
|
// ^---*--^
|
||||||
// ^
|
// ^
|
||||||
// tRR
|
// tRR
|
||||||
//```
|
// ```
|
||||||
// Would return `[revert(tBA), apply(tAB), apply(tAA)]`
|
// Would return `[revert(tBA), apply(tAB), apply(tAA)]`
|
||||||
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*HeadChange, error) //perm:read
|
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*HeadChange, error) //perm:read
|
||||||
|
|
||||||
@@ -169,10 +173,24 @@ type FullNode interface {
|
|||||||
// If oldmsgskip is set, messages from before the requested roots are also not included.
|
// If oldmsgskip is set, messages from before the requested roots are also not included.
|
||||||
ChainExport(ctx context.Context, nroots abi.ChainEpoch, oldmsgskip bool, tsk types.TipSetKey) (<-chan []byte, error) //perm:read
|
ChainExport(ctx context.Context, nroots abi.ChainEpoch, oldmsgskip bool, tsk types.TipSetKey) (<-chan []byte, error) //perm:read
|
||||||
|
|
||||||
// ChainPrune prunes the stored chain state and garbage collects; only supported if you
|
// ChainExportRangeInternal triggers the export of a chain
|
||||||
|
// CAR-snapshot directly to disk. It is similar to ChainExport,
|
||||||
|
// except, depending on options, the snapshot can include receipts,
|
||||||
|
// messages and stateroots for the length between the specified head
|
||||||
|
// and tail, thus producing "archival-grade" snapshots that include
|
||||||
|
// all the on-chain data. The header chain is included back to
|
||||||
|
// genesis and these snapshots can be used to initialize Filecoin
|
||||||
|
// nodes.
|
||||||
|
ChainExportRangeInternal(ctx context.Context, head, tail types.TipSetKey, cfg ChainExportConfig) error //perm:admin
|
||||||
|
|
||||||
|
// ChainPrune forces compaction on cold store and garbage collects; only supported if you
|
||||||
// are using the splitstore
|
// are using the splitstore
|
||||||
ChainPrune(ctx context.Context, opts PruneOpts) error //perm:admin
|
ChainPrune(ctx context.Context, opts PruneOpts) error //perm:admin
|
||||||
|
|
||||||
|
// ChainHotGC does online (badger) GC on the hot store; only supported if you are using
|
||||||
|
// the splitstore
|
||||||
|
ChainHotGC(ctx context.Context, opts HotGCOpts) error //perm:admin
|
||||||
|
|
||||||
// ChainCheckBlockstore performs an (asynchronous) health check on the chain/state blockstore
|
// ChainCheckBlockstore performs an (asynchronous) health check on the chain/state blockstore
|
||||||
// if supported by the underlying implementation.
|
// if supported by the underlying implementation.
|
||||||
ChainCheckBlockstore(context.Context) error //perm:admin
|
ChainCheckBlockstore(context.Context) error //perm:admin
|
||||||
@@ -180,6 +198,9 @@ type FullNode interface {
|
|||||||
// ChainBlockstoreInfo returns some basic information about the blockstore
|
// ChainBlockstoreInfo returns some basic information about the blockstore
|
||||||
ChainBlockstoreInfo(context.Context) (map[string]interface{}, error) //perm:read
|
ChainBlockstoreInfo(context.Context) (map[string]interface{}, error) //perm:read
|
||||||
|
|
||||||
|
// ChainGetEvents returns the events under an event AMT root CID.
|
||||||
|
ChainGetEvents(context.Context, cid.Cid) ([]types.Event, error) //perm:read
|
||||||
|
|
||||||
// GasEstimateFeeCap estimates gas fee cap
|
// GasEstimateFeeCap estimates gas fee cap
|
||||||
GasEstimateFeeCap(context.Context, *types.Message, int64, types.TipSetKey) (types.BigInt, error) //perm:read
|
GasEstimateFeeCap(context.Context, *types.Message, int64, types.TipSetKey) (types.BigInt, error) //perm:read
|
||||||
|
|
||||||
@@ -276,8 +297,10 @@ type FullNode interface {
|
|||||||
MpoolGetNonce(context.Context, address.Address) (uint64, error) //perm:read
|
MpoolGetNonce(context.Context, address.Address) (uint64, error) //perm:read
|
||||||
MpoolSub(context.Context) (<-chan MpoolUpdate, error) //perm:read
|
MpoolSub(context.Context) (<-chan MpoolUpdate, error) //perm:read
|
||||||
|
|
||||||
// MpoolClear clears pending messages from the mpool
|
// MpoolClear clears pending messages from the mpool.
|
||||||
MpoolClear(context.Context, bool) error //perm:write
|
// If clearLocal is true, ALL messages will be cleared.
|
||||||
|
// If clearLocal is false, local messages will be protected, all others will be cleared.
|
||||||
|
MpoolClear(ctx context.Context, clearLocal bool) error //perm:write
|
||||||
|
|
||||||
// MpoolGetConfig returns (a copy of) the current mpool config
|
// MpoolGetConfig returns (a copy of) the current mpool config
|
||||||
MpoolGetConfig(context.Context) (*types.MpoolConfig, error) //perm:read
|
MpoolGetConfig(context.Context) (*types.MpoolConfig, error) //perm:read
|
||||||
@@ -386,12 +409,12 @@ type FullNode interface {
|
|||||||
ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmarket.DealID) error //perm:write
|
ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmarket.DealID) error //perm:write
|
||||||
|
|
||||||
// ClientUnimport removes references to the specified file from filestore
|
// ClientUnimport removes references to the specified file from filestore
|
||||||
//ClientUnimport(path string)
|
// ClientUnimport(path string)
|
||||||
|
|
||||||
// ClientListImports lists imported files and their root CIDs
|
// ClientListImports lists imported files and their root CIDs
|
||||||
ClientListImports(ctx context.Context) ([]Import, error) //perm:write
|
ClientListImports(ctx context.Context) ([]Import, error) //perm:write
|
||||||
|
|
||||||
//ClientListAsks() []Ask
|
// ClientListAsks() []Ask
|
||||||
|
|
||||||
// MethodGroup: State
|
// MethodGroup: State
|
||||||
// The State methods are used to query, inspect, and interact with chain state.
|
// The State methods are used to query, inspect, and interact with chain state.
|
||||||
@@ -527,6 +550,17 @@ type FullNode interface {
|
|||||||
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*MarketDeal, error) //perm:read
|
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*MarketDeal, error) //perm:read
|
||||||
// StateMarketStorageDeal returns information about the indicated deal
|
// StateMarketStorageDeal returns information about the indicated deal
|
||||||
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, error) //perm:read
|
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, error) //perm:read
|
||||||
|
// StateGetAllocationForPendingDeal returns the allocation for a given deal ID of a pending deal. Returns nil if
|
||||||
|
// pending allocation is not found.
|
||||||
|
StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetAllocation returns the allocation for a given address and allocation ID.
|
||||||
|
StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetAllocations returns the all the allocations for a given client.
|
||||||
|
StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetClaim returns the claim for a given address and claim ID.
|
||||||
|
StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) //perm:read
|
||||||
|
// StateGetClaims returns the all the claims for a given provider.
|
||||||
|
StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read
|
||||||
// StateComputeDataCID computes DataCID from a set of on-chain deals
|
// StateComputeDataCID computes DataCID from a set of on-chain deals
|
||||||
StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) //perm:read
|
StateComputeDataCID(ctx context.Context, maddr address.Address, sectorType abi.RegisteredSealProof, deals []abi.DealID, tsk types.TipSetKey) (cid.Cid, error) //perm:read
|
||||||
// StateLookupID retrieves the ID address of the given address
|
// StateLookupID retrieves the ID address of the given address
|
||||||
@@ -540,6 +574,8 @@ type FullNode interface {
|
|||||||
StateChangedActors(context.Context, cid.Cid, cid.Cid) (map[string]types.Actor, error) //perm:read
|
StateChangedActors(context.Context, cid.Cid, cid.Cid) (map[string]types.Actor, error) //perm:read
|
||||||
// StateMinerSectorCount returns the number of sectors in a miner's sector set and proving set
|
// StateMinerSectorCount returns the number of sectors in a miner's sector set and proving set
|
||||||
StateMinerSectorCount(context.Context, address.Address, types.TipSetKey) (MinerSectors, error) //perm:read
|
StateMinerSectorCount(context.Context, address.Address, types.TipSetKey) (MinerSectors, error) //perm:read
|
||||||
|
// StateMinerAllocated returns a bitfield containing all sector numbers marked as allocated in miner state
|
||||||
|
StateMinerAllocated(context.Context, address.Address, types.TipSetKey) (*bitfield.BitField, error) //perm:read
|
||||||
// StateCompute is a flexible command that applies the given messages on the given tipset.
|
// StateCompute is a flexible command that applies the given messages on the given tipset.
|
||||||
// The messages are run as though the VM were at the provided height.
|
// The messages are run as though the VM were at the provided height.
|
||||||
//
|
//
|
||||||
@@ -581,7 +617,7 @@ type FullNode interface {
|
|||||||
// Returns nil if there is no entry in the data cap table for the
|
// Returns nil if there is no entry in the data cap table for the
|
||||||
// address.
|
// address.
|
||||||
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) //perm:read
|
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) //perm:read
|
||||||
// StateVerifiedClientStatus returns the address of the Verified Registry's root key
|
// StateVerifiedRegistryRootKey returns the address of the Verified Registry's root key
|
||||||
StateVerifiedRegistryRootKey(ctx context.Context, tsk types.TipSetKey) (address.Address, error) //perm:read
|
StateVerifiedRegistryRootKey(ctx context.Context, tsk types.TipSetKey) (address.Address, error) //perm:read
|
||||||
// StateDealProviderCollateralBounds returns the min and max collateral a storage provider
|
// StateDealProviderCollateralBounds returns the min and max collateral a storage provider
|
||||||
// can issue. It takes the deal size and verified status as parameters.
|
// can issue. It takes the deal size and verified status as parameters.
|
||||||
@@ -597,6 +633,8 @@ type FullNode interface {
|
|||||||
StateNetworkVersion(context.Context, types.TipSetKey) (apitypes.NetworkVersion, error) //perm:read
|
StateNetworkVersion(context.Context, types.TipSetKey) (apitypes.NetworkVersion, error) //perm:read
|
||||||
// StateActorCodeCIDs returns the CIDs of all the builtin actors for the given network version
|
// StateActorCodeCIDs returns the CIDs of all the builtin actors for the given network version
|
||||||
StateActorCodeCIDs(context.Context, abinetwork.Version) (map[string]cid.Cid, error) //perm:read
|
StateActorCodeCIDs(context.Context, abinetwork.Version) (map[string]cid.Cid, error) //perm:read
|
||||||
|
// StateActorManifestCID returns the CID of the builtin actors manifest for the given network version
|
||||||
|
StateActorManifestCID(context.Context, abinetwork.Version) (cid.Cid, error) //perm:read
|
||||||
|
|
||||||
// StateGetRandomnessFromTickets is used to sample the chain for randomness.
|
// StateGetRandomnessFromTickets is used to sample the chain for randomness.
|
||||||
StateGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read
|
StateGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read
|
||||||
@@ -623,14 +661,14 @@ type FullNode interface {
|
|||||||
// It takes the following params: <multisig address>, <start epoch>, <end epoch>
|
// It takes the following params: <multisig address>, <start epoch>, <end epoch>
|
||||||
MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) //perm:read
|
MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) //perm:read
|
||||||
|
|
||||||
//MsigGetPending returns pending transactions for the given multisig
|
// MsigGetPending returns pending transactions for the given multisig
|
||||||
//wallet. Once pending transactions are fully approved, they will no longer
|
// wallet. Once pending transactions are fully approved, they will no longer
|
||||||
//appear here.
|
// appear here.
|
||||||
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*MsigTransaction, error) //perm:read
|
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*MsigTransaction, error) //perm:read
|
||||||
|
|
||||||
// MsigCreate creates a multisig wallet
|
// MsigCreate creates a multisig wallet
|
||||||
// It takes the following params: <required number of senders>, <approving addresses>, <unlock duration>
|
// It takes the following params: <required number of senders>, <approving addresses>, <unlock duration>
|
||||||
//<initial balance>, <sender address of the create msg>, <gas price>
|
// <initial balance>, <sender address of the create msg>, <gas price>
|
||||||
MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (*MessagePrototype, error) //perm:sign
|
MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (*MessagePrototype, error) //perm:sign
|
||||||
|
|
||||||
// MsigPropose proposes a multisig message
|
// MsigPropose proposes a multisig message
|
||||||
@@ -742,11 +780,103 @@ type FullNode interface {
|
|||||||
|
|
||||||
NodeStatus(ctx context.Context, inclChainStatus bool) (NodeStatus, error) //perm:read
|
NodeStatus(ctx context.Context, inclChainStatus bool) (NodeStatus, error) //perm:read
|
||||||
|
|
||||||
|
// MethodGroup: Eth
|
||||||
|
// These methods are used for Ethereum-compatible JSON-RPC calls
|
||||||
|
//
|
||||||
|
// EthAccounts will always return [] since we don't expect Lotus to manage private keys
|
||||||
|
EthAccounts(ctx context.Context) ([]ethtypes.EthAddress, error) //perm:read
|
||||||
|
// EthAddressToFilecoinAddress converts an EthAddress into an f410 Filecoin Address
|
||||||
|
EthAddressToFilecoinAddress(ctx context.Context, ethAddress ethtypes.EthAddress) (address.Address, error) //perm:read
|
||||||
|
// FilecoinAddressToEthAddress converts an f410 or f0 Filecoin Address to an EthAddress
|
||||||
|
FilecoinAddressToEthAddress(ctx context.Context, filecoinAddress address.Address) (ethtypes.EthAddress, error) //perm:read
|
||||||
|
// EthBlockNumber returns the height of the latest (heaviest) TipSet
|
||||||
|
EthBlockNumber(ctx context.Context) (ethtypes.EthUint64, error) //perm:read
|
||||||
|
// EthGetBlockTransactionCountByNumber returns the number of messages in the TipSet
|
||||||
|
EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum ethtypes.EthUint64) (ethtypes.EthUint64, error) //perm:read
|
||||||
|
// EthGetBlockTransactionCountByHash returns the number of messages in the TipSet
|
||||||
|
EthGetBlockTransactionCountByHash(ctx context.Context, blkHash ethtypes.EthHash) (ethtypes.EthUint64, error) //perm:read
|
||||||
|
|
||||||
|
EthGetBlockByHash(ctx context.Context, blkHash ethtypes.EthHash, fullTxInfo bool) (ethtypes.EthBlock, error) //perm:read
|
||||||
|
EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (ethtypes.EthBlock, error) //perm:read
|
||||||
|
EthGetTransactionByHash(ctx context.Context, txHash *ethtypes.EthHash) (*ethtypes.EthTx, error) //perm:read
|
||||||
|
EthGetTransactionByHashLimited(ctx context.Context, txHash *ethtypes.EthHash, limit abi.ChainEpoch) (*ethtypes.EthTx, error) //perm:read
|
||||||
|
EthGetTransactionHashByCid(ctx context.Context, cid cid.Cid) (*ethtypes.EthHash, error) //perm:read
|
||||||
|
EthGetMessageCidByTransactionHash(ctx context.Context, txHash *ethtypes.EthHash) (*cid.Cid, error) //perm:read
|
||||||
|
EthGetTransactionCount(ctx context.Context, sender ethtypes.EthAddress, blkOpt string) (ethtypes.EthUint64, error) //perm:read
|
||||||
|
EthGetTransactionReceipt(ctx context.Context, txHash ethtypes.EthHash) (*EthTxReceipt, error) //perm:read
|
||||||
|
EthGetTransactionReceiptLimited(ctx context.Context, txHash ethtypes.EthHash, limit abi.ChainEpoch) (*EthTxReceipt, error) //perm:read
|
||||||
|
EthGetTransactionByBlockHashAndIndex(ctx context.Context, blkHash ethtypes.EthHash, txIndex ethtypes.EthUint64) (ethtypes.EthTx, error) //perm:read
|
||||||
|
EthGetTransactionByBlockNumberAndIndex(ctx context.Context, blkNum ethtypes.EthUint64, txIndex ethtypes.EthUint64) (ethtypes.EthTx, error) //perm:read
|
||||||
|
|
||||||
|
EthGetCode(ctx context.Context, address ethtypes.EthAddress, blkOpt string) (ethtypes.EthBytes, error) //perm:read
|
||||||
|
EthGetStorageAt(ctx context.Context, address ethtypes.EthAddress, position ethtypes.EthBytes, blkParam string) (ethtypes.EthBytes, error) //perm:read
|
||||||
|
EthGetBalance(ctx context.Context, address ethtypes.EthAddress, blkParam string) (ethtypes.EthBigInt, error) //perm:read
|
||||||
|
EthChainId(ctx context.Context) (ethtypes.EthUint64, error) //perm:read
|
||||||
|
EthSyncing(ctx context.Context) (ethtypes.EthSyncingResult, error) //perm:read
|
||||||
|
NetVersion(ctx context.Context) (string, error) //perm:read
|
||||||
|
NetListening(ctx context.Context) (bool, error) //perm:read
|
||||||
|
EthProtocolVersion(ctx context.Context) (ethtypes.EthUint64, error) //perm:read
|
||||||
|
EthGasPrice(ctx context.Context) (ethtypes.EthBigInt, error) //perm:read
|
||||||
|
EthFeeHistory(ctx context.Context, p jsonrpc.RawParams) (ethtypes.EthFeeHistory, error) //perm:read
|
||||||
|
|
||||||
|
EthMaxPriorityFeePerGas(ctx context.Context) (ethtypes.EthBigInt, error) //perm:read
|
||||||
|
EthEstimateGas(ctx context.Context, tx ethtypes.EthCall) (ethtypes.EthUint64, error) //perm:read
|
||||||
|
EthCall(ctx context.Context, tx ethtypes.EthCall, blkParam string) (ethtypes.EthBytes, error) //perm:read
|
||||||
|
|
||||||
|
EthSendRawTransaction(ctx context.Context, rawTx ethtypes.EthBytes) (ethtypes.EthHash, error) //perm:read
|
||||||
|
|
||||||
|
// Returns event logs matching given filter spec.
|
||||||
|
EthGetLogs(ctx context.Context, filter *ethtypes.EthFilterSpec) (*ethtypes.EthFilterResult, error) //perm:read
|
||||||
|
|
||||||
|
// Polling method for a filter, returns event logs which occurred since last poll.
|
||||||
|
// (requires write perm since timestamp of last filter execution will be written)
|
||||||
|
EthGetFilterChanges(ctx context.Context, id ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error) //perm:read
|
||||||
|
|
||||||
|
// Returns event logs matching filter with given id.
|
||||||
|
// (requires write perm since timestamp of last filter execution will be written)
|
||||||
|
EthGetFilterLogs(ctx context.Context, id ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error) //perm:read
|
||||||
|
|
||||||
|
// Installs a persistent filter based on given filter spec.
|
||||||
|
EthNewFilter(ctx context.Context, filter *ethtypes.EthFilterSpec) (ethtypes.EthFilterID, error) //perm:read
|
||||||
|
|
||||||
|
// Installs a persistent filter to notify when a new block arrives.
|
||||||
|
EthNewBlockFilter(ctx context.Context) (ethtypes.EthFilterID, error) //perm:read
|
||||||
|
|
||||||
|
// Installs a persistent filter to notify when new messages arrive in the message pool.
|
||||||
|
EthNewPendingTransactionFilter(ctx context.Context) (ethtypes.EthFilterID, error) //perm:read
|
||||||
|
|
||||||
|
// Uninstalls a filter with given id.
|
||||||
|
EthUninstallFilter(ctx context.Context, id ethtypes.EthFilterID) (bool, error) //perm:read
|
||||||
|
|
||||||
|
// Subscribe to different event types using websockets
|
||||||
|
// eventTypes is one or more of:
|
||||||
|
// - newHeads: notify when new blocks arrive.
|
||||||
|
// - pendingTransactions: notify when new messages arrive in the message pool.
|
||||||
|
// - logs: notify new event logs that match a criteria
|
||||||
|
// params contains additional parameters used with the log event type
|
||||||
|
// The client will receive a stream of EthSubscriptionResponse values until EthUnsubscribe is called.
|
||||||
|
EthSubscribe(ctx context.Context, params jsonrpc.RawParams) (ethtypes.EthSubscriptionID, error) //perm:read
|
||||||
|
|
||||||
|
// Unsubscribe from a websocket subscription
|
||||||
|
EthUnsubscribe(ctx context.Context, id ethtypes.EthSubscriptionID) (bool, error) //perm:read
|
||||||
|
|
||||||
|
// Returns the client version
|
||||||
|
Web3ClientVersion(ctx context.Context) (string, error) //perm:read
|
||||||
|
|
||||||
// CreateBackup creates node backup onder the specified file name. The
|
// CreateBackup creates node backup onder the specified file name. The
|
||||||
// method requires that the lotus daemon is running with the
|
// method requires that the lotus daemon is running with the
|
||||||
// LOTUS_BACKUP_BASE_PATH environment variable set to some path, and that
|
// LOTUS_BACKUP_BASE_PATH environment variable set to some path, and that
|
||||||
// the path specified when calling CreateBackup is within the base path
|
// the path specified when calling CreateBackup is within the base path
|
||||||
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
||||||
|
|
||||||
|
RaftState(ctx context.Context) (*RaftStateData, error) //perm:read
|
||||||
|
RaftLeader(ctx context.Context) (peer.ID, error) //perm:read
|
||||||
|
}
|
||||||
|
|
||||||
|
// reverse interface to the client, called after EthSubscribe
|
||||||
|
type EthSubscriber interface {
|
||||||
|
// note: the parameter is ethtypes.EthSubscriptionResponse serialized as json object
|
||||||
|
EthSubscription(ctx context.Context, r jsonrpc.RawParams) error // rpc_method:eth_subscription notify:true
|
||||||
}
|
}
|
||||||
|
|
||||||
type StorageAsk struct {
|
type StorageAsk struct {
|
||||||
@@ -996,8 +1126,12 @@ type RetrievalOrder struct {
|
|||||||
Client address.Address
|
Client address.Address
|
||||||
Miner address.Address
|
Miner address.Address
|
||||||
MinerPeer *retrievalmarket.RetrievalPeer
|
MinerPeer *retrievalmarket.RetrievalPeer
|
||||||
|
|
||||||
|
RemoteStore *RemoteStoreID `json:"RemoteStore,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RemoteStoreID = uuid.UUID
|
||||||
|
|
||||||
type InvocResult struct {
|
type InvocResult struct {
|
||||||
MsgCid cid.Cid
|
MsgCid cid.Cid
|
||||||
Msg *types.Message
|
Msg *types.Message
|
||||||
@@ -1228,3 +1362,27 @@ type PruneOpts struct {
|
|||||||
MovingGC bool
|
MovingGC bool
|
||||||
RetainState int64
|
RetainState int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HotGCOpts struct {
|
||||||
|
Threshold float64
|
||||||
|
Periodic bool
|
||||||
|
Moving bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type EthTxReceipt struct {
|
||||||
|
TransactionHash ethtypes.EthHash `json:"transactionHash"`
|
||||||
|
TransactionIndex ethtypes.EthUint64 `json:"transactionIndex"`
|
||||||
|
BlockHash ethtypes.EthHash `json:"blockHash"`
|
||||||
|
BlockNumber ethtypes.EthUint64 `json:"blockNumber"`
|
||||||
|
From ethtypes.EthAddress `json:"from"`
|
||||||
|
To *ethtypes.EthAddress `json:"to"`
|
||||||
|
StateRoot ethtypes.EthHash `json:"root"`
|
||||||
|
Status ethtypes.EthUint64 `json:"status"`
|
||||||
|
ContractAddress *ethtypes.EthAddress `json:"contractAddress"`
|
||||||
|
CumulativeGasUsed ethtypes.EthUint64 `json:"cumulativeGasUsed"`
|
||||||
|
GasUsed ethtypes.EthUint64 `json:"gasUsed"`
|
||||||
|
EffectiveGasPrice ethtypes.EthBigInt `json:"effectiveGasPrice"`
|
||||||
|
LogsBloom ethtypes.EthBytes `json:"logsBloom"`
|
||||||
|
Logs []ethtypes.EthLog `json:"logs"`
|
||||||
|
Type ethtypes.EthUint64 `json:"type"`
|
||||||
|
}
|
||||||
|
|||||||
+52
-3
@@ -7,12 +7,15 @@ import (
|
|||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
|
"github.com/filecoin-project/go-jsonrpc"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
|
|
||||||
apitypes "github.com/filecoin-project/lotus/api/types"
|
apitypes "github.com/filecoin-project/lotus/api/types"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
"github.com/filecoin-project/lotus/chain/types/ethtypes"
|
||||||
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MODIFYING THE API INTERFACE
|
// MODIFYING THE API INTERFACE
|
||||||
@@ -23,13 +26,16 @@ import (
|
|||||||
// When adding / changing methods in this file:
|
// When adding / changing methods in this file:
|
||||||
// * Do the change here
|
// * Do the change here
|
||||||
// * Adjust implementation in `node/impl/`
|
// * Adjust implementation in `node/impl/`
|
||||||
// * Run `make gen` - this will:
|
// * Run `make clean && make deps && make gen` - this will:
|
||||||
// * Generate proxy structs
|
// * Generate proxy structs
|
||||||
// * Generate mocks
|
// * Generate mocks
|
||||||
// * Generate markdown docs
|
// * Generate markdown docs
|
||||||
// * Generate openrpc blobs
|
// * Generate openrpc blobs
|
||||||
|
|
||||||
type Gateway interface {
|
type Gateway interface {
|
||||||
|
StateMinerSectorCount(context.Context, address.Address, types.TipSetKey) (MinerSectors, error)
|
||||||
|
GasEstimateGasPremium(context.Context, uint64, address.Address, int64, types.TipSetKey) (types.BigInt, error)
|
||||||
|
StateReplay(context.Context, types.TipSetKey, cid.Cid) (*InvocResult, error)
|
||||||
ChainHasObj(context.Context, cid.Cid) (bool, error)
|
ChainHasObj(context.Context, cid.Cid) (bool, error)
|
||||||
ChainPutObj(context.Context, blocks.Block) error
|
ChainPutObj(context.Context, blocks.Block) error
|
||||||
ChainHead(ctx context.Context) (*types.TipSet, error)
|
ChainHead(ctx context.Context) (*types.TipSet, error)
|
||||||
@@ -45,15 +51,18 @@ type Gateway interface {
|
|||||||
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
|
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
|
||||||
ChainGetGenesis(context.Context) (*types.TipSet, error)
|
ChainGetGenesis(context.Context) (*types.TipSet, error)
|
||||||
GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *MessageSendSpec, tsk types.TipSetKey) (*types.Message, error)
|
GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *MessageSendSpec, tsk types.TipSetKey) (*types.Message, error)
|
||||||
|
MpoolGetNonce(ctx context.Context, addr address.Address) (uint64, error)
|
||||||
MpoolPush(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error)
|
MpoolPush(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error)
|
||||||
MsigGetAvailableBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error)
|
MsigGetAvailableBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error)
|
||||||
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*MsigTransaction, error)
|
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*MsigTransaction, error)
|
||||||
MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error)
|
MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error)
|
||||||
MsigGetVestingSchedule(ctx context.Context, addr address.Address, tsk types.TipSetKey) (MsigVesting, error)
|
MsigGetVestingSchedule(ctx context.Context, addr address.Address, tsk types.TipSetKey) (MsigVesting, error)
|
||||||
StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
|
StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
|
||||||
|
StateCall(ctx context.Context, msg *types.Message, tsk types.TipSetKey) (*InvocResult, error)
|
||||||
StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (DealCollateralBounds, error)
|
StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (DealCollateralBounds, error)
|
||||||
|
StateDecodeParams(ctx context.Context, toAddr address.Address, method abi.MethodNum, params []byte, tsk types.TipSetKey) (interface{}, error)
|
||||||
StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error)
|
StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error)
|
||||||
StateReadState(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*ActorState, error) //perm:read
|
StateReadState(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*ActorState, error)
|
||||||
StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error)
|
StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error)
|
||||||
StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
|
StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
|
||||||
StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (MarketBalance, error)
|
StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (MarketBalance, error)
|
||||||
@@ -61,12 +70,52 @@ type Gateway interface {
|
|||||||
StateMinerInfo(ctx context.Context, actor address.Address, tsk types.TipSetKey) (MinerInfo, error)
|
StateMinerInfo(ctx context.Context, actor address.Address, tsk types.TipSetKey) (MinerInfo, error)
|
||||||
StateMinerProvingDeadline(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*dline.Info, error)
|
StateMinerProvingDeadline(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*dline.Info, error)
|
||||||
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*MinerPower, error)
|
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*MinerPower, error)
|
||||||
|
StateNetworkName(context.Context) (dtypes.NetworkName, error)
|
||||||
StateNetworkVersion(context.Context, types.TipSetKey) (apitypes.NetworkVersion, error)
|
StateNetworkVersion(context.Context, types.TipSetKey) (apitypes.NetworkVersion, error)
|
||||||
StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error)
|
StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error)
|
||||||
|
StateVerifierStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error)
|
||||||
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error)
|
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error)
|
||||||
StateSearchMsg(ctx context.Context, from types.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*MsgLookup, error)
|
StateSearchMsg(ctx context.Context, from types.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*MsgLookup, error)
|
||||||
StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*MsgLookup, error)
|
StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*MsgLookup, error)
|
||||||
WalletBalance(context.Context, address.Address) (types.BigInt, error)
|
WalletBalance(context.Context, address.Address) (types.BigInt, error)
|
||||||
Version(context.Context) (APIVersion, error)
|
Version(context.Context) (APIVersion, error)
|
||||||
Discover(context.Context) (apitypes.OpenRPCDocument, error)
|
Discover(context.Context) (apitypes.OpenRPCDocument, error)
|
||||||
|
|
||||||
|
EthAccounts(ctx context.Context) ([]ethtypes.EthAddress, error)
|
||||||
|
EthBlockNumber(ctx context.Context) (ethtypes.EthUint64, error)
|
||||||
|
EthGetBlockTransactionCountByNumber(ctx context.Context, blkNum ethtypes.EthUint64) (ethtypes.EthUint64, error)
|
||||||
|
EthGetBlockTransactionCountByHash(ctx context.Context, blkHash ethtypes.EthHash) (ethtypes.EthUint64, error)
|
||||||
|
EthGetBlockByHash(ctx context.Context, blkHash ethtypes.EthHash, fullTxInfo bool) (ethtypes.EthBlock, error)
|
||||||
|
EthGetBlockByNumber(ctx context.Context, blkNum string, fullTxInfo bool) (ethtypes.EthBlock, error)
|
||||||
|
EthGetTransactionByHash(ctx context.Context, txHash *ethtypes.EthHash) (*ethtypes.EthTx, error)
|
||||||
|
EthGetTransactionByHashLimited(ctx context.Context, txHash *ethtypes.EthHash, limit abi.ChainEpoch) (*ethtypes.EthTx, error)
|
||||||
|
EthGetTransactionHashByCid(ctx context.Context, cid cid.Cid) (*ethtypes.EthHash, error)
|
||||||
|
EthGetMessageCidByTransactionHash(ctx context.Context, txHash *ethtypes.EthHash) (*cid.Cid, error)
|
||||||
|
EthGetTransactionCount(ctx context.Context, sender ethtypes.EthAddress, blkOpt string) (ethtypes.EthUint64, error)
|
||||||
|
EthGetTransactionReceipt(ctx context.Context, txHash ethtypes.EthHash) (*EthTxReceipt, error)
|
||||||
|
EthGetTransactionReceiptLimited(ctx context.Context, txHash ethtypes.EthHash, limit abi.ChainEpoch) (*EthTxReceipt, error)
|
||||||
|
EthGetCode(ctx context.Context, address ethtypes.EthAddress, blkOpt string) (ethtypes.EthBytes, error)
|
||||||
|
EthGetStorageAt(ctx context.Context, address ethtypes.EthAddress, position ethtypes.EthBytes, blkParam string) (ethtypes.EthBytes, error)
|
||||||
|
EthGetBalance(ctx context.Context, address ethtypes.EthAddress, blkParam string) (ethtypes.EthBigInt, error)
|
||||||
|
EthChainId(ctx context.Context) (ethtypes.EthUint64, error)
|
||||||
|
EthSyncing(ctx context.Context) (ethtypes.EthSyncingResult, error)
|
||||||
|
NetVersion(ctx context.Context) (string, error)
|
||||||
|
NetListening(ctx context.Context) (bool, error)
|
||||||
|
EthProtocolVersion(ctx context.Context) (ethtypes.EthUint64, error)
|
||||||
|
EthGasPrice(ctx context.Context) (ethtypes.EthBigInt, error)
|
||||||
|
EthFeeHistory(ctx context.Context, p jsonrpc.RawParams) (ethtypes.EthFeeHistory, error)
|
||||||
|
EthMaxPriorityFeePerGas(ctx context.Context) (ethtypes.EthBigInt, error)
|
||||||
|
EthEstimateGas(ctx context.Context, tx ethtypes.EthCall) (ethtypes.EthUint64, error)
|
||||||
|
EthCall(ctx context.Context, tx ethtypes.EthCall, blkParam string) (ethtypes.EthBytes, error)
|
||||||
|
EthSendRawTransaction(ctx context.Context, rawTx ethtypes.EthBytes) (ethtypes.EthHash, error)
|
||||||
|
EthGetLogs(ctx context.Context, filter *ethtypes.EthFilterSpec) (*ethtypes.EthFilterResult, error)
|
||||||
|
EthGetFilterChanges(ctx context.Context, id ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error)
|
||||||
|
EthGetFilterLogs(ctx context.Context, id ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error)
|
||||||
|
EthNewFilter(ctx context.Context, filter *ethtypes.EthFilterSpec) (ethtypes.EthFilterID, error)
|
||||||
|
EthNewBlockFilter(ctx context.Context) (ethtypes.EthFilterID, error)
|
||||||
|
EthNewPendingTransactionFilter(ctx context.Context) (ethtypes.EthFilterID, error)
|
||||||
|
EthUninstallFilter(ctx context.Context, id ethtypes.EthFilterID) (bool, error)
|
||||||
|
EthSubscribe(ctx context.Context, params jsonrpc.RawParams) (ethtypes.EthSubscriptionID, error)
|
||||||
|
EthUnsubscribe(ctx context.Context, id ethtypes.EthSubscriptionID) (bool, error)
|
||||||
|
Web3ClientVersion(ctx context.Context) (string, error)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -4,10 +4,10 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/libp2p/go-libp2p-core/metrics"
|
"github.com/libp2p/go-libp2p/core/metrics"
|
||||||
"github.com/libp2p/go-libp2p-core/network"
|
"github.com/libp2p/go-libp2p/core/network"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
"github.com/libp2p/go-libp2p-core/protocol"
|
"github.com/libp2p/go-libp2p/core/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MODIFYING THE API INTERFACE
|
// MODIFYING THE API INTERFACE
|
||||||
@@ -73,5 +73,5 @@ type CommonNet interface {
|
|||||||
|
|
||||||
type NatInfo struct {
|
type NatInfo struct {
|
||||||
Reachability network.Reachability
|
Reachability network.Reachability
|
||||||
PublicAddr string
|
PublicAddrs []string
|
||||||
}
|
}
|
||||||
|
|||||||
+166
-12
@@ -7,20 +7,22 @@ import (
|
|||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
"github.com/filecoin-project/go-bitfield"
|
||||||
|
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
|
||||||
"github.com/filecoin-project/go-fil-markets/piecestore"
|
"github.com/filecoin-project/go-fil-markets/piecestore"
|
||||||
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
||||||
"github.com/filecoin-project/go-jsonrpc/auth"
|
"github.com/filecoin-project/go-jsonrpc/auth"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/market"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
builtinactors "github.com/filecoin-project/lotus/chain/actors/builtin"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
"github.com/filecoin-project/lotus/storage/pipeline/sealiface"
|
"github.com/filecoin-project/lotus/storage/pipeline/sealiface"
|
||||||
"github.com/filecoin-project/lotus/storage/sealer/fsutil"
|
"github.com/filecoin-project/lotus/storage/sealer/fsutil"
|
||||||
@@ -53,6 +55,11 @@ type StorageMiner interface {
|
|||||||
// and does not wait for message execution
|
// and does not wait for message execution
|
||||||
ActorWithdrawBalance(ctx context.Context, amount abi.TokenAmount) (cid.Cid, error) //perm:admin
|
ActorWithdrawBalance(ctx context.Context, amount abi.TokenAmount) (cid.Cid, error) //perm:admin
|
||||||
|
|
||||||
|
// BeneficiaryWithdrawBalance allows the beneficiary of a miner to withdraw balance from miner actor
|
||||||
|
// Specify amount as "0" to withdraw full balance. This method returns a message CID
|
||||||
|
// and does not wait for message execution
|
||||||
|
BeneficiaryWithdrawBalance(context.Context, abi.TokenAmount) (cid.Cid, error) //perm:admin
|
||||||
|
|
||||||
MiningBase(context.Context) (*types.TipSet, error) //perm:read
|
MiningBase(context.Context) (*types.TipSet, error) //perm:read
|
||||||
|
|
||||||
ComputeWindowPoSt(ctx context.Context, dlIdx uint64, tsk types.TipSetKey) ([]miner.SubmitWindowedPoStParams, error) //perm:admin
|
ComputeWindowPoSt(ctx context.Context, dlIdx uint64, tsk types.TipSetKey) ([]miner.SubmitWindowedPoStParams, error) //perm:admin
|
||||||
@@ -122,13 +129,32 @@ type StorageMiner interface {
|
|||||||
SectorMatchPendingPiecesToOpenSectors(ctx context.Context) error //perm:admin
|
SectorMatchPendingPiecesToOpenSectors(ctx context.Context) error //perm:admin
|
||||||
// SectorAbortUpgrade can be called on sectors that are in the process of being upgraded to abort it
|
// SectorAbortUpgrade can be called on sectors that are in the process of being upgraded to abort it
|
||||||
SectorAbortUpgrade(context.Context, abi.SectorNumber) error //perm:admin
|
SectorAbortUpgrade(context.Context, abi.SectorNumber) error //perm:admin
|
||||||
|
// SectorUnseal unseals the provided sector
|
||||||
|
SectorUnseal(ctx context.Context, number abi.SectorNumber) error //perm:admin
|
||||||
|
|
||||||
|
// SectorNumAssignerMeta returns sector number assigner metadata - reserved/allocated
|
||||||
|
SectorNumAssignerMeta(ctx context.Context) (NumAssignerMeta, error) //perm:read
|
||||||
|
// SectorNumReservations returns a list of sector number reservations
|
||||||
|
SectorNumReservations(ctx context.Context) (map[string]bitfield.BitField, error) //perm:read
|
||||||
|
// SectorNumReserve creates a new sector number reservation. Will fail if any other reservation has colliding
|
||||||
|
// numbers or name. Set force to true to override safety checks.
|
||||||
|
// Valid characters for name: a-z, A-Z, 0-9, _, -
|
||||||
|
SectorNumReserve(ctx context.Context, name string, sectors bitfield.BitField, force bool) error //perm:admin
|
||||||
|
// SectorNumReserveCount creates a new sector number reservation for `count` sector numbers.
|
||||||
|
// by default lotus will allocate lowest-available sector numbers to the reservation.
|
||||||
|
// For restrictions on `name` see SectorNumReserve
|
||||||
|
SectorNumReserveCount(ctx context.Context, name string, count uint64) (bitfield.BitField, error) //perm:admin
|
||||||
|
// SectorNumFree drops a sector reservation
|
||||||
|
SectorNumFree(ctx context.Context, name string) error //perm:admin
|
||||||
|
|
||||||
|
SectorReceive(ctx context.Context, meta RemoteSectorMeta) error //perm:admin
|
||||||
|
|
||||||
// WorkerConnect tells the node to connect to workers RPC
|
// WorkerConnect tells the node to connect to workers RPC
|
||||||
WorkerConnect(context.Context, string) error //perm:admin retry:true
|
WorkerConnect(context.Context, string) error //perm:admin retry:true
|
||||||
WorkerStats(context.Context) (map[uuid.UUID]storiface.WorkerStats, error) //perm:admin
|
WorkerStats(context.Context) (map[uuid.UUID]storiface.WorkerStats, error) //perm:admin
|
||||||
WorkerJobs(context.Context) (map[uuid.UUID][]storiface.WorkerJob, error) //perm:admin
|
WorkerJobs(context.Context) (map[uuid.UUID][]storiface.WorkerJob, error) //perm:admin
|
||||||
|
|
||||||
//storiface.WorkerReturn
|
// storiface.WorkerReturn
|
||||||
ReturnDataCid(ctx context.Context, callID storiface.CallID, pi abi.PieceInfo, err *storiface.CallError) error //perm:admin retry:true
|
ReturnDataCid(ctx context.Context, callID storiface.CallID, pi abi.PieceInfo, err *storiface.CallError) error //perm:admin retry:true
|
||||||
ReturnAddPiece(ctx context.Context, callID storiface.CallID, pi abi.PieceInfo, err *storiface.CallError) error //perm:admin retry:true
|
ReturnAddPiece(ctx context.Context, callID storiface.CallID, pi abi.PieceInfo, err *storiface.CallError) error //perm:admin retry:true
|
||||||
ReturnSealPreCommit1(ctx context.Context, callID storiface.CallID, p1o storiface.PreCommit1Out, err *storiface.CallError) error //perm:admin retry:true
|
ReturnSealPreCommit1(ctx context.Context, callID storiface.CallID, p1o storiface.PreCommit1Out, err *storiface.CallError) error //perm:admin retry:true
|
||||||
@@ -145,12 +171,13 @@ type StorageMiner interface {
|
|||||||
ReturnMoveStorage(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error //perm:admin retry:true
|
ReturnMoveStorage(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error //perm:admin retry:true
|
||||||
ReturnUnsealPiece(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error //perm:admin retry:true
|
ReturnUnsealPiece(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error //perm:admin retry:true
|
||||||
ReturnReadPiece(ctx context.Context, callID storiface.CallID, ok bool, err *storiface.CallError) error //perm:admin retry:true
|
ReturnReadPiece(ctx context.Context, callID storiface.CallID, ok bool, err *storiface.CallError) error //perm:admin retry:true
|
||||||
|
ReturnDownloadSector(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error //perm:admin retry:true
|
||||||
ReturnFetch(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error //perm:admin retry:true
|
ReturnFetch(ctx context.Context, callID storiface.CallID, err *storiface.CallError) error //perm:admin retry:true
|
||||||
|
|
||||||
// SealingSchedDiag dumps internal sealing scheduler state
|
// SealingSchedDiag dumps internal sealing scheduler state
|
||||||
SealingSchedDiag(ctx context.Context, doSched bool) (interface{}, error) //perm:admin
|
SealingSchedDiag(ctx context.Context, doSched bool) (interface{}, error) //perm:admin
|
||||||
SealingAbort(ctx context.Context, call storiface.CallID) error //perm:admin
|
SealingAbort(ctx context.Context, call storiface.CallID) error //perm:admin
|
||||||
//SealingSchedRemove removes a request from sealing pipeline
|
// SealingSchedRemove removes a request from sealing pipeline
|
||||||
SealingRemoveRequest(ctx context.Context, schedId uuid.UUID) error //perm:admin
|
SealingRemoveRequest(ctx context.Context, schedId uuid.UUID) error //perm:admin
|
||||||
|
|
||||||
// paths.SectorIndex
|
// paths.SectorIndex
|
||||||
@@ -187,9 +214,11 @@ type StorageMiner interface {
|
|||||||
StorageDetachLocal(ctx context.Context, path string) error //perm:admin
|
StorageDetachLocal(ctx context.Context, path string) error //perm:admin
|
||||||
StorageRedeclareLocal(ctx context.Context, id *storiface.ID, dropMissing bool) error //perm:admin
|
StorageRedeclareLocal(ctx context.Context, id *storiface.ID, dropMissing bool) error //perm:admin
|
||||||
|
|
||||||
MarketImportDealData(ctx context.Context, propcid cid.Cid, path string) error //perm:write
|
MarketImportDealData(ctx context.Context, propcid cid.Cid, path string) error //perm:write
|
||||||
MarketListDeals(ctx context.Context) ([]*MarketDeal, error) //perm:read
|
MarketListDeals(ctx context.Context) ([]*MarketDeal, error) //perm:read
|
||||||
MarketListRetrievalDeals(ctx context.Context) ([]retrievalmarket.ProviderDealState, error) //perm:read
|
|
||||||
|
// MarketListRetrievalDeals is deprecated, returns empty list
|
||||||
|
MarketListRetrievalDeals(ctx context.Context) ([]struct{}, error) //perm:read
|
||||||
MarketGetDealUpdates(ctx context.Context) (<-chan storagemarket.MinerDeal, error) //perm:read
|
MarketGetDealUpdates(ctx context.Context) (<-chan storagemarket.MinerDeal, error) //perm:read
|
||||||
MarketListIncompleteDeals(ctx context.Context) ([]storagemarket.MinerDeal, error) //perm:read
|
MarketListIncompleteDeals(ctx context.Context) ([]storagemarket.MinerDeal, error) //perm:read
|
||||||
MarketSetAsk(ctx context.Context, price types.BigInt, verifiedPrice types.BigInt, duration abi.ChainEpoch, minPieceSize abi.PaddedPieceSize, maxPieceSize abi.PaddedPieceSize) error //perm:admin
|
MarketSetAsk(ctx context.Context, price types.BigInt, verifiedPrice types.BigInt, duration abi.ChainEpoch, minPieceSize abi.PaddedPieceSize, maxPieceSize abi.PaddedPieceSize) error //perm:admin
|
||||||
@@ -295,9 +324,14 @@ type StorageMiner interface {
|
|||||||
// the path specified when calling CreateBackup is within the base path
|
// the path specified when calling CreateBackup is within the base path
|
||||||
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
||||||
|
|
||||||
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storiface.SectorRef, expensive bool) (map[abi.SectorNumber]string, error) //perm:admin
|
CheckProvable(ctx context.Context, pp abi.RegisteredPoStProof, sectors []storiface.SectorRef) (map[abi.SectorNumber]string, error) //perm:admin
|
||||||
|
|
||||||
ComputeProof(ctx context.Context, ssi []builtin.ExtendedSectorInfo, rand abi.PoStRandomness, poStEpoch abi.ChainEpoch, nv abinetwork.Version) ([]builtin.PoStProof, error) //perm:read
|
ComputeProof(ctx context.Context, ssi []builtinactors.ExtendedSectorInfo, rand abi.PoStRandomness, poStEpoch abi.ChainEpoch, nv abinetwork.Version) ([]builtinactors.PoStProof, error) //perm:read
|
||||||
|
|
||||||
|
// RecoverFault can be used to declare recoveries manually. It sends messages
|
||||||
|
// to the miner actor with details of recovered sectors and returns the CID of messages. It honors the
|
||||||
|
// maxPartitionsPerRecoveryMessage from the config
|
||||||
|
RecoverFault(ctx context.Context, sectors []abi.SectorNumber) ([]cid.Cid, error) //perm:admin
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ storiface.WorkerReturn = *new(StorageMiner)
|
var _ storiface.WorkerReturn = *new(StorageMiner)
|
||||||
@@ -387,6 +421,10 @@ func (st *SealSeed) Equals(ost *SealSeed) bool {
|
|||||||
|
|
||||||
type SectorState string
|
type SectorState string
|
||||||
|
|
||||||
|
func (s *SectorState) String() string {
|
||||||
|
return string(*s)
|
||||||
|
}
|
||||||
|
|
||||||
type AddrUse int
|
type AddrUse int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -468,3 +506,119 @@ type DagstoreInitializeAllEvent struct {
|
|||||||
Total int
|
Total int
|
||||||
Current int
|
Current int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type NumAssignerMeta struct {
|
||||||
|
Reserved bitfield.BitField
|
||||||
|
Allocated bitfield.BitField
|
||||||
|
|
||||||
|
// ChainAllocated+Reserved+Allocated
|
||||||
|
InUse bitfield.BitField
|
||||||
|
|
||||||
|
Next abi.SectorNumber
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoteSectorMeta struct {
|
||||||
|
////////
|
||||||
|
// BASIC SECTOR INFORMATION
|
||||||
|
|
||||||
|
// State specifies the first state the sector will enter after being imported
|
||||||
|
// Must be one of the following states:
|
||||||
|
// * Packing
|
||||||
|
// * GetTicket
|
||||||
|
// * PreCommitting
|
||||||
|
// * SubmitCommit
|
||||||
|
// * Proving/Available
|
||||||
|
State SectorState
|
||||||
|
|
||||||
|
Sector abi.SectorID
|
||||||
|
Type abi.RegisteredSealProof
|
||||||
|
|
||||||
|
////////
|
||||||
|
// SEALING METADATA
|
||||||
|
// (allows lotus to continue the sealing process)
|
||||||
|
|
||||||
|
// Required in Packing and later
|
||||||
|
Pieces []SectorPiece // todo better type?
|
||||||
|
|
||||||
|
// Required in PreCommitting and later
|
||||||
|
TicketValue abi.SealRandomness
|
||||||
|
TicketEpoch abi.ChainEpoch
|
||||||
|
PreCommit1Out storiface.PreCommit1Out // todo specify better
|
||||||
|
|
||||||
|
CommD *cid.Cid
|
||||||
|
CommR *cid.Cid // SectorKey
|
||||||
|
|
||||||
|
// Required in SubmitCommit and later
|
||||||
|
PreCommitInfo *miner.SectorPreCommitInfo
|
||||||
|
PreCommitDeposit *big.Int
|
||||||
|
PreCommitMessage *cid.Cid
|
||||||
|
PreCommitTipSet types.TipSetKey
|
||||||
|
|
||||||
|
SeedValue abi.InteractiveSealRandomness
|
||||||
|
SeedEpoch abi.ChainEpoch
|
||||||
|
|
||||||
|
CommitProof []byte
|
||||||
|
|
||||||
|
// Required in Proving/Available
|
||||||
|
CommitMessage *cid.Cid
|
||||||
|
|
||||||
|
// Optional sector metadata to import
|
||||||
|
Log []SectorLog
|
||||||
|
|
||||||
|
////////
|
||||||
|
// SECTOR DATA SOURCE
|
||||||
|
|
||||||
|
// Sector urls - lotus will use those for fetching files into local storage
|
||||||
|
|
||||||
|
// Required in all states
|
||||||
|
DataUnsealed *storiface.SectorLocation
|
||||||
|
|
||||||
|
// Required in PreCommitting and later
|
||||||
|
DataSealed *storiface.SectorLocation
|
||||||
|
DataCache *storiface.SectorLocation
|
||||||
|
|
||||||
|
////////
|
||||||
|
// SEALING SERVICE HOOKS
|
||||||
|
|
||||||
|
// URL
|
||||||
|
// RemoteCommit1Endpoint is an URL of POST endpoint which lotus will call requesting Commit1 (seal_commit_phase1)
|
||||||
|
// request body will be json-serialized RemoteCommit1Params struct
|
||||||
|
RemoteCommit1Endpoint string
|
||||||
|
|
||||||
|
// RemoteCommit2Endpoint is an URL of POST endpoint which lotus will call requesting Commit2 (seal_commit_phase2)
|
||||||
|
// request body will be json-serialized RemoteCommit2Params struct
|
||||||
|
RemoteCommit2Endpoint string
|
||||||
|
|
||||||
|
// RemoteSealingDoneEndpoint is called after the sector exists the sealing pipeline
|
||||||
|
// request body will be json-serialized RemoteSealingDoneParams struct
|
||||||
|
RemoteSealingDoneEndpoint string
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoteCommit1Params struct {
|
||||||
|
Ticket, Seed []byte
|
||||||
|
|
||||||
|
Unsealed cid.Cid
|
||||||
|
Sealed cid.Cid
|
||||||
|
|
||||||
|
ProofType abi.RegisteredSealProof
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoteCommit2Params struct {
|
||||||
|
Sector abi.SectorID
|
||||||
|
ProofType abi.RegisteredSealProof
|
||||||
|
|
||||||
|
// todo spec better
|
||||||
|
Commit1Out storiface.Commit1Out
|
||||||
|
}
|
||||||
|
|
||||||
|
type RemoteSealingDoneParams struct {
|
||||||
|
// Successful is true if the sector has entered state considered as "successfully sealed"
|
||||||
|
Successful bool
|
||||||
|
|
||||||
|
// State is the state the sector has entered
|
||||||
|
// For example "Proving" / "Removing"
|
||||||
|
State string
|
||||||
|
|
||||||
|
// Optional commit message CID
|
||||||
|
CommitMessage *cid.Cid
|
||||||
|
}
|
||||||
|
|||||||
+19
-1
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -12,6 +12,9 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/go-jsonrpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func goCmd() string {
|
func goCmd() string {
|
||||||
@@ -124,3 +127,18 @@ func TestPermTags(t *testing.T) {
|
|||||||
_ = PermissionedStorMinerAPI(&StorageMinerStruct{})
|
_ = PermissionedStorMinerAPI(&StorageMinerStruct{})
|
||||||
_ = PermissionedWorkerAPI(&WorkerStruct{})
|
_ = PermissionedWorkerAPI(&WorkerStruct{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRetryErrorIsInTrue(t *testing.T) {
|
||||||
|
errorsToRetry := []error{&jsonrpc.RPCConnectionError{}}
|
||||||
|
require.True(t, ErrorIsIn(&jsonrpc.RPCConnectionError{}, errorsToRetry))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRetryErrorIsInFalse(t *testing.T) {
|
||||||
|
errorsToRetry := []error{&jsonrpc.RPCConnectionError{}}
|
||||||
|
require.False(t, ErrorIsIn(xerrors.Errorf("random error"), errorsToRetry))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRetryWrappedErrorIsInTrue(t *testing.T) {
|
||||||
|
errorsToRetry := []error{&jsonrpc.RPCConnectionError{}}
|
||||||
|
require.True(t, ErrorIsIn(xerrors.Errorf("wrapped: %w", &jsonrpc.RPCConnectionError{}), errorsToRetry))
|
||||||
|
}
|
||||||
|
|||||||
+4
-3
@@ -39,16 +39,17 @@ type Worker interface {
|
|||||||
SealPreCommit2(ctx context.Context, sector storiface.SectorRef, pc1o storiface.PreCommit1Out) (storiface.CallID, error) //perm:admin
|
SealPreCommit2(ctx context.Context, sector storiface.SectorRef, pc1o storiface.PreCommit1Out) (storiface.CallID, error) //perm:admin
|
||||||
SealCommit1(ctx context.Context, sector storiface.SectorRef, ticket abi.SealRandomness, seed abi.InteractiveSealRandomness, pieces []abi.PieceInfo, cids storiface.SectorCids) (storiface.CallID, error) //perm:admin
|
SealCommit1(ctx context.Context, sector storiface.SectorRef, ticket abi.SealRandomness, seed abi.InteractiveSealRandomness, pieces []abi.PieceInfo, cids storiface.SectorCids) (storiface.CallID, error) //perm:admin
|
||||||
SealCommit2(ctx context.Context, sector storiface.SectorRef, c1o storiface.Commit1Out) (storiface.CallID, error) //perm:admin
|
SealCommit2(ctx context.Context, sector storiface.SectorRef, c1o storiface.Commit1Out) (storiface.CallID, error) //perm:admin
|
||||||
FinalizeSector(ctx context.Context, sector storiface.SectorRef, keepUnsealed []storiface.Range) (storiface.CallID, error) //perm:admin
|
FinalizeSector(ctx context.Context, sector storiface.SectorRef) (storiface.CallID, error) //perm:admin
|
||||||
FinalizeReplicaUpdate(ctx context.Context, sector storiface.SectorRef, keepUnsealed []storiface.Range) (storiface.CallID, error) //perm:admin
|
FinalizeReplicaUpdate(ctx context.Context, sector storiface.SectorRef) (storiface.CallID, error) //perm:admin
|
||||||
ReplicaUpdate(ctx context.Context, sector storiface.SectorRef, pieces []abi.PieceInfo) (storiface.CallID, error) //perm:admin
|
ReplicaUpdate(ctx context.Context, sector storiface.SectorRef, pieces []abi.PieceInfo) (storiface.CallID, error) //perm:admin
|
||||||
ProveReplicaUpdate1(ctx context.Context, sector storiface.SectorRef, sectorKey, newSealed, newUnsealed cid.Cid) (storiface.CallID, error) //perm:admin
|
ProveReplicaUpdate1(ctx context.Context, sector storiface.SectorRef, sectorKey, newSealed, newUnsealed cid.Cid) (storiface.CallID, error) //perm:admin
|
||||||
ProveReplicaUpdate2(ctx context.Context, sector storiface.SectorRef, sectorKey, newSealed, newUnsealed cid.Cid, vanillaProofs storiface.ReplicaVanillaProofs) (storiface.CallID, error) //perm:admin
|
ProveReplicaUpdate2(ctx context.Context, sector storiface.SectorRef, sectorKey, newSealed, newUnsealed cid.Cid, vanillaProofs storiface.ReplicaVanillaProofs) (storiface.CallID, error) //perm:admin
|
||||||
GenerateSectorKeyFromData(ctx context.Context, sector storiface.SectorRef, commD cid.Cid) (storiface.CallID, error) //perm:admin
|
GenerateSectorKeyFromData(ctx context.Context, sector storiface.SectorRef, commD cid.Cid) (storiface.CallID, error) //perm:admin
|
||||||
ReleaseUnsealed(ctx context.Context, sector storiface.SectorRef, safeToFree []storiface.Range) (storiface.CallID, error) //perm:admin
|
ReleaseUnsealed(ctx context.Context, sector storiface.SectorRef, keepUnsealed []storiface.Range) (storiface.CallID, error) //perm:admin
|
||||||
MoveStorage(ctx context.Context, sector storiface.SectorRef, types storiface.SectorFileType) (storiface.CallID, error) //perm:admin
|
MoveStorage(ctx context.Context, sector storiface.SectorRef, types storiface.SectorFileType) (storiface.CallID, error) //perm:admin
|
||||||
UnsealPiece(context.Context, storiface.SectorRef, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize, abi.SealRandomness, cid.Cid) (storiface.CallID, error) //perm:admin
|
UnsealPiece(context.Context, storiface.SectorRef, storiface.UnpaddedByteIndex, abi.UnpaddedPieceSize, abi.SealRandomness, cid.Cid) (storiface.CallID, error) //perm:admin
|
||||||
Fetch(context.Context, storiface.SectorRef, storiface.SectorFileType, storiface.PathType, storiface.AcquireMode) (storiface.CallID, error) //perm:admin
|
Fetch(context.Context, storiface.SectorRef, storiface.SectorFileType, storiface.PathType, storiface.AcquireMode) (storiface.CallID, error) //perm:admin
|
||||||
|
DownloadSectorData(ctx context.Context, sector storiface.SectorRef, finalized bool, src map[storiface.SectorFileType]storiface.SectorLocation) (storiface.CallID, error) //perm:admin
|
||||||
|
|
||||||
GenerateWinningPoSt(ctx context.Context, ppt abi.RegisteredPoStProof, mid abi.ActorID, sectors []storiface.PostSectorChallenge, randomness abi.PoStRandomness) ([]proof.PoStProof, error) //perm:admin
|
GenerateWinningPoSt(ctx context.Context, ppt abi.RegisteredPoStProof, mid abi.ActorID, sectors []storiface.PostSectorChallenge, randomness abi.PoStRandomness) ([]proof.PoStProof, error) //perm:admin
|
||||||
GenerateWindowPoSt(ctx context.Context, ppt abi.RegisteredPoStProof, mid abi.ActorID, sectors []storiface.PostSectorChallenge, partitionIdx int, randomness abi.PoStRandomness) (storiface.WindowPoStResult, error) //perm:admin
|
GenerateWindowPoSt(ctx context.Context, ppt abi.RegisteredPoStProof, mid abi.ActorID, sectors []storiface.PostSectorChallenge, partitionIdx int, randomness abi.PoStRandomness) (storiface.WindowPoStResult, error) //perm:admin
|
||||||
|
|||||||
+343
-218
@@ -13,8 +13,8 @@ import (
|
|||||||
xerrors "golang.org/x/xerrors"
|
xerrors "golang.org/x/xerrors"
|
||||||
|
|
||||||
abi "github.com/filecoin-project/go-state-types/abi"
|
abi "github.com/filecoin-project/go-state-types/abi"
|
||||||
market "github.com/filecoin-project/go-state-types/builtin/v8/market"
|
|
||||||
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
|
market "github.com/filecoin-project/go-state-types/builtin/v9/market"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = xerrors.Errorf
|
var _ = xerrors.Errorf
|
||||||
@@ -50,22 +50,6 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.WaitSentinel (cid.Cid) (struct)
|
|
||||||
if len("WaitSentinel") > cbg.MaxLength {
|
|
||||||
return xerrors.Errorf("Value in field \"WaitSentinel\" was too long")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("WaitSentinel"))); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := io.WriteString(w, string("WaitSentinel")); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cbg.WriteCid(cw, t.WaitSentinel); err != nil {
|
|
||||||
return xerrors.Errorf("failed to write cid field t.WaitSentinel: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// t.Vouchers ([]*paych.SignedVoucher) (slice)
|
// t.Vouchers ([]*paych.SignedVoucher) (slice)
|
||||||
if len("Vouchers") > cbg.MaxLength {
|
if len("Vouchers") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"Vouchers\" was too long")
|
return xerrors.Errorf("Value in field \"Vouchers\" was too long")
|
||||||
@@ -90,6 +74,23 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// t.WaitSentinel (cid.Cid) (struct)
|
||||||
|
if len("WaitSentinel") > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Value in field \"WaitSentinel\" was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("WaitSentinel"))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.WriteString(w, string("WaitSentinel")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cbg.WriteCid(cw, t.WaitSentinel); err != nil {
|
||||||
|
return xerrors.Errorf("failed to write cid field t.WaitSentinel: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,19 +141,6 @@ func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
return xerrors.Errorf("unmarshaling t.Channel: %w", err)
|
return xerrors.Errorf("unmarshaling t.Channel: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
// t.WaitSentinel (cid.Cid) (struct)
|
|
||||||
case "WaitSentinel":
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
c, err := cbg.ReadCid(cr)
|
|
||||||
if err != nil {
|
|
||||||
return xerrors.Errorf("failed to read cid field t.WaitSentinel: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
t.WaitSentinel = c
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// t.Vouchers ([]*paych.SignedVoucher) (slice)
|
// t.Vouchers ([]*paych.SignedVoucher) (slice)
|
||||||
case "Vouchers":
|
case "Vouchers":
|
||||||
@@ -184,6 +172,20 @@ func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
t.Vouchers[i] = &v
|
t.Vouchers[i] = &v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// t.WaitSentinel (cid.Cid) (struct)
|
||||||
|
case "WaitSentinel":
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
c, err := cbg.ReadCid(cr)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("failed to read cid field t.WaitSentinel: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.WaitSentinel = c
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Field doesn't exist on this type, so ignore it
|
// Field doesn't exist on this type, so ignore it
|
||||||
cbg.ScanForLinks(r, func(cid.Cid) {})
|
cbg.ScanForLinks(r, func(cid.Cid) {})
|
||||||
@@ -204,19 +206,19 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.SectorID (abi.SectorNumber) (uint64)
|
// t.Size (abi.UnpaddedPieceSize) (uint64)
|
||||||
if len("SectorID") > cbg.MaxLength {
|
if len("Size") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"SectorID\" was too long")
|
return xerrors.Errorf("Value in field \"Size\" was too long")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("SectorID"))); err != nil {
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("Size"))); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := io.WriteString(w, string("SectorID")); err != nil {
|
if _, err := io.WriteString(w, string("Size")); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.SectorID)); err != nil {
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Size)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,19 +238,19 @@ func (t *SealedRef) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.Size (abi.UnpaddedPieceSize) (uint64)
|
// t.SectorID (abi.SectorNumber) (uint64)
|
||||||
if len("Size") > cbg.MaxLength {
|
if len("SectorID") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"Size\" was too long")
|
return xerrors.Errorf("Value in field \"SectorID\" was too long")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("Size"))); err != nil {
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("SectorID"))); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := io.WriteString(w, string("Size")); err != nil {
|
if _, err := io.WriteString(w, string("SectorID")); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Size)); err != nil {
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.SectorID)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,8 +295,8 @@ func (t *SealedRef) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch name {
|
switch name {
|
||||||
// t.SectorID (abi.SectorNumber) (uint64)
|
// t.Size (abi.UnpaddedPieceSize) (uint64)
|
||||||
case "SectorID":
|
case "Size":
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -305,7 +307,7 @@ func (t *SealedRef) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
if maj != cbg.MajUnsignedInt {
|
if maj != cbg.MajUnsignedInt {
|
||||||
return fmt.Errorf("wrong type for uint64 field")
|
return fmt.Errorf("wrong type for uint64 field")
|
||||||
}
|
}
|
||||||
t.SectorID = abi.SectorNumber(extra)
|
t.Size = abi.UnpaddedPieceSize(extra)
|
||||||
|
|
||||||
}
|
}
|
||||||
// t.Offset (abi.PaddedPieceSize) (uint64)
|
// t.Offset (abi.PaddedPieceSize) (uint64)
|
||||||
@@ -323,8 +325,8 @@ func (t *SealedRef) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
t.Offset = abi.PaddedPieceSize(extra)
|
t.Offset = abi.PaddedPieceSize(extra)
|
||||||
|
|
||||||
}
|
}
|
||||||
// t.Size (abi.UnpaddedPieceSize) (uint64)
|
// t.SectorID (abi.SectorNumber) (uint64)
|
||||||
case "Size":
|
case "SectorID":
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -335,7 +337,7 @@ func (t *SealedRef) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
if maj != cbg.MajUnsignedInt {
|
if maj != cbg.MajUnsignedInt {
|
||||||
return fmt.Errorf("wrong type for uint64 field")
|
return fmt.Errorf("wrong type for uint64 field")
|
||||||
}
|
}
|
||||||
t.Size = abi.UnpaddedPieceSize(extra)
|
t.SectorID = abi.SectorNumber(extra)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,6 +476,28 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// t.Epoch (abi.ChainEpoch) (int64)
|
||||||
|
if len("Epoch") > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Value in field \"Epoch\" was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("Epoch"))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.WriteString(w, string("Epoch")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if t.Epoch >= 0 {
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Epoch)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Epoch-1)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// t.Value (abi.SealRandomness) (slice)
|
// t.Value (abi.SealRandomness) (slice)
|
||||||
if len("Value") > cbg.MaxLength {
|
if len("Value") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"Value\" was too long")
|
return xerrors.Errorf("Value in field \"Value\" was too long")
|
||||||
@@ -497,28 +521,6 @@ func (t *SealTicket) MarshalCBOR(w io.Writer) error {
|
|||||||
if _, err := cw.Write(t.Value[:]); err != nil {
|
if _, err := cw.Write(t.Value[:]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.Epoch (abi.ChainEpoch) (int64)
|
|
||||||
if len("Epoch") > cbg.MaxLength {
|
|
||||||
return xerrors.Errorf("Value in field \"Epoch\" was too long")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("Epoch"))); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := io.WriteString(w, string("Epoch")); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if t.Epoch >= 0 {
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Epoch)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Epoch-1)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,7 +562,33 @@ func (t *SealTicket) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch name {
|
switch name {
|
||||||
// t.Value (abi.SealRandomness) (slice)
|
// t.Epoch (abi.ChainEpoch) (int64)
|
||||||
|
case "Epoch":
|
||||||
|
{
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
var extraI int64
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
switch maj {
|
||||||
|
case cbg.MajUnsignedInt:
|
||||||
|
extraI = int64(extra)
|
||||||
|
if extraI < 0 {
|
||||||
|
return fmt.Errorf("int64 positive overflow")
|
||||||
|
}
|
||||||
|
case cbg.MajNegativeInt:
|
||||||
|
extraI = int64(extra)
|
||||||
|
if extraI < 0 {
|
||||||
|
return fmt.Errorf("int64 negative overflow")
|
||||||
|
}
|
||||||
|
extraI = -1 - extraI
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("wrong type for int64 field: %d", maj)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Epoch = abi.ChainEpoch(extraI)
|
||||||
|
}
|
||||||
|
// t.Value (abi.SealRandomness) (slice)
|
||||||
case "Value":
|
case "Value":
|
||||||
|
|
||||||
maj, extra, err = cr.ReadHeader()
|
maj, extra, err = cr.ReadHeader()
|
||||||
@@ -582,32 +610,6 @@ func (t *SealTicket) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
if _, err := io.ReadFull(cr, t.Value[:]); err != nil {
|
if _, err := io.ReadFull(cr, t.Value[:]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// t.Epoch (abi.ChainEpoch) (int64)
|
|
||||||
case "Epoch":
|
|
||||||
{
|
|
||||||
maj, extra, err := cr.ReadHeader()
|
|
||||||
var extraI int64
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
switch maj {
|
|
||||||
case cbg.MajUnsignedInt:
|
|
||||||
extraI = int64(extra)
|
|
||||||
if extraI < 0 {
|
|
||||||
return fmt.Errorf("int64 positive overflow")
|
|
||||||
}
|
|
||||||
case cbg.MajNegativeInt:
|
|
||||||
extraI = int64(extra)
|
|
||||||
if extraI < 0 {
|
|
||||||
return fmt.Errorf("int64 negative oveflow")
|
|
||||||
}
|
|
||||||
extraI = -1 - extraI
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("wrong type for int64 field: %d", maj)
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Epoch = abi.ChainEpoch(extraI)
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Field doesn't exist on this type, so ignore it
|
// Field doesn't exist on this type, so ignore it
|
||||||
@@ -629,6 +631,28 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// t.Epoch (abi.ChainEpoch) (int64)
|
||||||
|
if len("Epoch") > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Value in field \"Epoch\" was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("Epoch"))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.WriteString(w, string("Epoch")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if t.Epoch >= 0 {
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Epoch)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Epoch-1)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// t.Value (abi.InteractiveSealRandomness) (slice)
|
// t.Value (abi.InteractiveSealRandomness) (slice)
|
||||||
if len("Value") > cbg.MaxLength {
|
if len("Value") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"Value\" was too long")
|
return xerrors.Errorf("Value in field \"Value\" was too long")
|
||||||
@@ -652,28 +676,6 @@ func (t *SealSeed) MarshalCBOR(w io.Writer) error {
|
|||||||
if _, err := cw.Write(t.Value[:]); err != nil {
|
if _, err := cw.Write(t.Value[:]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.Epoch (abi.ChainEpoch) (int64)
|
|
||||||
if len("Epoch") > cbg.MaxLength {
|
|
||||||
return xerrors.Errorf("Value in field \"Epoch\" was too long")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("Epoch"))); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := io.WriteString(w, string("Epoch")); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if t.Epoch >= 0 {
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Epoch)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.Epoch-1)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -715,7 +717,33 @@ func (t *SealSeed) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch name {
|
switch name {
|
||||||
// t.Value (abi.InteractiveSealRandomness) (slice)
|
// t.Epoch (abi.ChainEpoch) (int64)
|
||||||
|
case "Epoch":
|
||||||
|
{
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
var extraI int64
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
switch maj {
|
||||||
|
case cbg.MajUnsignedInt:
|
||||||
|
extraI = int64(extra)
|
||||||
|
if extraI < 0 {
|
||||||
|
return fmt.Errorf("int64 positive overflow")
|
||||||
|
}
|
||||||
|
case cbg.MajNegativeInt:
|
||||||
|
extraI = int64(extra)
|
||||||
|
if extraI < 0 {
|
||||||
|
return fmt.Errorf("int64 negative overflow")
|
||||||
|
}
|
||||||
|
extraI = -1 - extraI
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("wrong type for int64 field: %d", maj)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Epoch = abi.ChainEpoch(extraI)
|
||||||
|
}
|
||||||
|
// t.Value (abi.InteractiveSealRandomness) (slice)
|
||||||
case "Value":
|
case "Value":
|
||||||
|
|
||||||
maj, extra, err = cr.ReadHeader()
|
maj, extra, err = cr.ReadHeader()
|
||||||
@@ -737,32 +765,6 @@ func (t *SealSeed) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
if _, err := io.ReadFull(cr, t.Value[:]); err != nil {
|
if _, err := io.ReadFull(cr, t.Value[:]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// t.Epoch (abi.ChainEpoch) (int64)
|
|
||||||
case "Epoch":
|
|
||||||
{
|
|
||||||
maj, extra, err := cr.ReadHeader()
|
|
||||||
var extraI int64
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
switch maj {
|
|
||||||
case cbg.MajUnsignedInt:
|
|
||||||
extraI = int64(extra)
|
|
||||||
if extraI < 0 {
|
|
||||||
return fmt.Errorf("int64 positive overflow")
|
|
||||||
}
|
|
||||||
case cbg.MajNegativeInt:
|
|
||||||
extraI = int64(extra)
|
|
||||||
if extraI < 0 {
|
|
||||||
return fmt.Errorf("int64 negative oveflow")
|
|
||||||
}
|
|
||||||
extraI = -1 - extraI
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("wrong type for int64 field: %d", maj)
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Epoch = abi.ChainEpoch(extraI)
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Field doesn't exist on this type, so ignore it
|
// Field doesn't exist on this type, so ignore it
|
||||||
@@ -784,6 +786,22 @@ func (t *PieceDealInfo) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// t.DealID (abi.DealID) (uint64)
|
||||||
|
if len("DealID") > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Value in field \"DealID\" was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealID"))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.WriteString(w, string("DealID")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.DealID)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// t.PublishCid (cid.Cid) (struct)
|
// t.PublishCid (cid.Cid) (struct)
|
||||||
if len("PublishCid") > cbg.MaxLength {
|
if len("PublishCid") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"PublishCid\" was too long")
|
return xerrors.Errorf("Value in field \"PublishCid\" was too long")
|
||||||
@@ -806,22 +824,6 @@ func (t *PieceDealInfo) MarshalCBOR(w io.Writer) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.DealID (abi.DealID) (uint64)
|
|
||||||
if len("DealID") > cbg.MaxLength {
|
|
||||||
return xerrors.Errorf("Value in field \"DealID\" was too long")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealID"))); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := io.WriteString(w, string("DealID")); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.DealID)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// t.DealProposal (market.DealProposal) (struct)
|
// t.DealProposal (market.DealProposal) (struct)
|
||||||
if len("DealProposal") > cbg.MaxLength {
|
if len("DealProposal") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"DealProposal\" was too long")
|
return xerrors.Errorf("Value in field \"DealProposal\" was too long")
|
||||||
@@ -910,7 +912,22 @@ func (t *PieceDealInfo) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch name {
|
switch name {
|
||||||
// t.PublishCid (cid.Cid) (struct)
|
// t.DealID (abi.DealID) (uint64)
|
||||||
|
case "DealID":
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint64 field")
|
||||||
|
}
|
||||||
|
t.DealID = abi.DealID(extra)
|
||||||
|
|
||||||
|
}
|
||||||
|
// t.PublishCid (cid.Cid) (struct)
|
||||||
case "PublishCid":
|
case "PublishCid":
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -932,21 +949,6 @@ func (t *PieceDealInfo) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
t.PublishCid = &c
|
t.PublishCid = &c
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
// t.DealID (abi.DealID) (uint64)
|
|
||||||
case "DealID":
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
maj, extra, err = cr.ReadHeader()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if maj != cbg.MajUnsignedInt {
|
|
||||||
return fmt.Errorf("wrong type for uint64 field")
|
|
||||||
}
|
|
||||||
t.DealID = abi.DealID(extra)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// t.DealProposal (market.DealProposal) (struct)
|
// t.DealProposal (market.DealProposal) (struct)
|
||||||
case "DealProposal":
|
case "DealProposal":
|
||||||
@@ -1005,7 +1007,7 @@ func (t *PieceDealInfo) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (t *DealSchedule) MarshalCBOR(w io.Writer) error {
|
func (t *SectorPiece) MarshalCBOR(w io.Writer) error {
|
||||||
if t == nil {
|
if t == nil {
|
||||||
_, err := w.Write(cbg.CborNull)
|
_, err := w.Write(cbg.CborNull)
|
||||||
return err
|
return err
|
||||||
@@ -1017,26 +1019,127 @@ func (t *DealSchedule) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.StartEpoch (abi.ChainEpoch) (int64)
|
// t.Piece (abi.PieceInfo) (struct)
|
||||||
if len("StartEpoch") > cbg.MaxLength {
|
if len("Piece") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"StartEpoch\" was too long")
|
return xerrors.Errorf("Value in field \"Piece\" was too long")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("StartEpoch"))); err != nil {
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("Piece"))); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := io.WriteString(w, string("StartEpoch")); err != nil {
|
if _, err := io.WriteString(w, string("Piece")); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.StartEpoch >= 0 {
|
if err := t.Piece.MarshalCBOR(cw); err != nil {
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.StartEpoch)); err != nil {
|
return err
|
||||||
return err
|
}
|
||||||
|
|
||||||
|
// t.DealInfo (api.PieceDealInfo) (struct)
|
||||||
|
if len("DealInfo") > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Value in field \"DealInfo\" was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("DealInfo"))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.WriteString(w, string("DealInfo")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := t.DealInfo.MarshalCBOR(cw); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *SectorPiece) UnmarshalCBOR(r io.Reader) (err error) {
|
||||||
|
*t = SectorPiece{}
|
||||||
|
|
||||||
|
cr := cbg.NewCborReader(r)
|
||||||
|
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err == io.EOF {
|
||||||
|
err = io.ErrUnexpectedEOF
|
||||||
}
|
}
|
||||||
} else {
|
}()
|
||||||
if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.StartEpoch-1)); err != nil {
|
|
||||||
return err
|
if maj != cbg.MajMap {
|
||||||
|
return fmt.Errorf("cbor input should be of type map")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.MaxLength {
|
||||||
|
return fmt.Errorf("SectorPiece: map struct too large (%d)", extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
var name string
|
||||||
|
n := extra
|
||||||
|
|
||||||
|
for i := uint64(0); i < n; i++ {
|
||||||
|
|
||||||
|
{
|
||||||
|
sval, err := cbg.ReadString(cr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
name = string(sval)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch name {
|
||||||
|
// t.Piece (abi.PieceInfo) (struct)
|
||||||
|
case "Piece":
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
if err := t.Piece.UnmarshalCBOR(cr); err != nil {
|
||||||
|
return xerrors.Errorf("unmarshaling t.Piece: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// t.DealInfo (api.PieceDealInfo) (struct)
|
||||||
|
case "DealInfo":
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
b, err := cr.ReadByte()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if b != cbg.CborNull[0] {
|
||||||
|
if err := cr.UnreadByte(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
t.DealInfo = new(PieceDealInfo)
|
||||||
|
if err := t.DealInfo.UnmarshalCBOR(cr); err != nil {
|
||||||
|
return xerrors.Errorf("unmarshaling t.DealInfo pointer: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Field doesn't exist on this type, so ignore it
|
||||||
|
cbg.ScanForLinks(r, func(cid.Cid) {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (t *DealSchedule) MarshalCBOR(w io.Writer) error {
|
||||||
|
if t == nil {
|
||||||
|
_, err := w.Write(cbg.CborNull)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cw := cbg.NewCborWriter(w)
|
||||||
|
|
||||||
|
if _, err := cw.Write([]byte{162}); err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.EndEpoch (abi.ChainEpoch) (int64)
|
// t.EndEpoch (abi.ChainEpoch) (int64)
|
||||||
@@ -1060,6 +1163,28 @@ func (t *DealSchedule) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// t.StartEpoch (abi.ChainEpoch) (int64)
|
||||||
|
if len("StartEpoch") > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Value in field \"StartEpoch\" was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("StartEpoch"))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.WriteString(w, string("StartEpoch")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if t.StartEpoch >= 0 {
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.StartEpoch)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajNegativeInt, uint64(-t.StartEpoch-1)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1101,33 +1226,7 @@ func (t *DealSchedule) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch name {
|
switch name {
|
||||||
// t.StartEpoch (abi.ChainEpoch) (int64)
|
// t.EndEpoch (abi.ChainEpoch) (int64)
|
||||||
case "StartEpoch":
|
|
||||||
{
|
|
||||||
maj, extra, err := cr.ReadHeader()
|
|
||||||
var extraI int64
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
switch maj {
|
|
||||||
case cbg.MajUnsignedInt:
|
|
||||||
extraI = int64(extra)
|
|
||||||
if extraI < 0 {
|
|
||||||
return fmt.Errorf("int64 positive overflow")
|
|
||||||
}
|
|
||||||
case cbg.MajNegativeInt:
|
|
||||||
extraI = int64(extra)
|
|
||||||
if extraI < 0 {
|
|
||||||
return fmt.Errorf("int64 negative oveflow")
|
|
||||||
}
|
|
||||||
extraI = -1 - extraI
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("wrong type for int64 field: %d", maj)
|
|
||||||
}
|
|
||||||
|
|
||||||
t.StartEpoch = abi.ChainEpoch(extraI)
|
|
||||||
}
|
|
||||||
// t.EndEpoch (abi.ChainEpoch) (int64)
|
|
||||||
case "EndEpoch":
|
case "EndEpoch":
|
||||||
{
|
{
|
||||||
maj, extra, err := cr.ReadHeader()
|
maj, extra, err := cr.ReadHeader()
|
||||||
@@ -1144,7 +1243,7 @@ func (t *DealSchedule) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
case cbg.MajNegativeInt:
|
case cbg.MajNegativeInt:
|
||||||
extraI = int64(extra)
|
extraI = int64(extra)
|
||||||
if extraI < 0 {
|
if extraI < 0 {
|
||||||
return fmt.Errorf("int64 negative oveflow")
|
return fmt.Errorf("int64 negative overflow")
|
||||||
}
|
}
|
||||||
extraI = -1 - extraI
|
extraI = -1 - extraI
|
||||||
default:
|
default:
|
||||||
@@ -1153,6 +1252,32 @@ func (t *DealSchedule) UnmarshalCBOR(r io.Reader) (err error) {
|
|||||||
|
|
||||||
t.EndEpoch = abi.ChainEpoch(extraI)
|
t.EndEpoch = abi.ChainEpoch(extraI)
|
||||||
}
|
}
|
||||||
|
// t.StartEpoch (abi.ChainEpoch) (int64)
|
||||||
|
case "StartEpoch":
|
||||||
|
{
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
var extraI int64
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
switch maj {
|
||||||
|
case cbg.MajUnsignedInt:
|
||||||
|
extraI = int64(extra)
|
||||||
|
if extraI < 0 {
|
||||||
|
return fmt.Errorf("int64 positive overflow")
|
||||||
|
}
|
||||||
|
case cbg.MajNegativeInt:
|
||||||
|
extraI = int64(extra)
|
||||||
|
if extraI < 0 {
|
||||||
|
return fmt.Errorf("int64 negative overflow")
|
||||||
|
}
|
||||||
|
extraI = -1 - extraI
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("wrong type for int64 field: %d", maj)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.StartEpoch = abi.ChainEpoch(extraI)
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Field doesn't exist on this type, so ignore it
|
// Field doesn't exist on this type, so ignore it
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import (
|
|||||||
func NewCommonRPCV0(ctx context.Context, addr string, requestHeader http.Header) (api.CommonNet, jsonrpc.ClientCloser, error) {
|
func NewCommonRPCV0(ctx context.Context, addr string, requestHeader http.Header) (api.CommonNet, jsonrpc.ClientCloser, error) {
|
||||||
var res v0api.CommonNetStruct
|
var res v0api.CommonNetStruct
|
||||||
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
||||||
api.GetInternalStructs(&res), requestHeader)
|
api.GetInternalStructs(&res), requestHeader, jsonrpc.WithErrors(api.RPCErrors))
|
||||||
|
|
||||||
return &res, closer, err
|
return &res, closer, err
|
||||||
}
|
}
|
||||||
@@ -29,16 +29,16 @@ func NewFullNodeRPCV0(ctx context.Context, addr string, requestHeader http.Heade
|
|||||||
var res v0api.FullNodeStruct
|
var res v0api.FullNodeStruct
|
||||||
|
|
||||||
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
||||||
api.GetInternalStructs(&res), requestHeader)
|
api.GetInternalStructs(&res), requestHeader, jsonrpc.WithErrors(api.RPCErrors))
|
||||||
|
|
||||||
return &res, closer, err
|
return &res, closer, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFullNodeRPCV1 creates a new http jsonrpc client.
|
// NewFullNodeRPCV1 creates a new http jsonrpc client.
|
||||||
func NewFullNodeRPCV1(ctx context.Context, addr string, requestHeader http.Header) (api.FullNode, jsonrpc.ClientCloser, error) {
|
func NewFullNodeRPCV1(ctx context.Context, addr string, requestHeader http.Header, opts ...jsonrpc.Option) (api.FullNode, jsonrpc.ClientCloser, error) {
|
||||||
var res v1api.FullNodeStruct
|
var res v1api.FullNodeStruct
|
||||||
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
||||||
api.GetInternalStructs(&res), requestHeader)
|
api.GetInternalStructs(&res), requestHeader, append([]jsonrpc.Option{jsonrpc.WithErrors(api.RPCErrors)}, opts...)...)
|
||||||
|
|
||||||
return &res, closer, err
|
return &res, closer, err
|
||||||
}
|
}
|
||||||
@@ -72,6 +72,7 @@ func NewStorageMinerRPCV0(ctx context.Context, addr string, requestHeader http.H
|
|||||||
api.GetInternalStructs(&res), requestHeader,
|
api.GetInternalStructs(&res), requestHeader,
|
||||||
append([]jsonrpc.Option{
|
append([]jsonrpc.Option{
|
||||||
rpcenc.ReaderParamEncoder(pushUrl),
|
rpcenc.ReaderParamEncoder(pushUrl),
|
||||||
|
jsonrpc.WithErrors(api.RPCErrors),
|
||||||
}, opts...)...)
|
}, opts...)...)
|
||||||
|
|
||||||
return &res, closer, err
|
return &res, closer, err
|
||||||
@@ -90,6 +91,7 @@ func NewWorkerRPCV0(ctx context.Context, addr string, requestHeader http.Header)
|
|||||||
rpcenc.ReaderParamEncoder(pushUrl),
|
rpcenc.ReaderParamEncoder(pushUrl),
|
||||||
jsonrpc.WithNoReconnect(),
|
jsonrpc.WithNoReconnect(),
|
||||||
jsonrpc.WithTimeout(30*time.Second),
|
jsonrpc.WithTimeout(30*time.Second),
|
||||||
|
jsonrpc.WithErrors(api.RPCErrors),
|
||||||
)
|
)
|
||||||
|
|
||||||
return &res, closer, err
|
return &res, closer, err
|
||||||
@@ -101,7 +103,7 @@ func NewGatewayRPCV1(ctx context.Context, addr string, requestHeader http.Header
|
|||||||
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
||||||
api.GetInternalStructs(&res),
|
api.GetInternalStructs(&res),
|
||||||
requestHeader,
|
requestHeader,
|
||||||
opts...,
|
append(opts, jsonrpc.WithErrors(api.RPCErrors))...,
|
||||||
)
|
)
|
||||||
|
|
||||||
return &res, closer, err
|
return &res, closer, err
|
||||||
@@ -113,7 +115,7 @@ func NewGatewayRPCV0(ctx context.Context, addr string, requestHeader http.Header
|
|||||||
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
||||||
api.GetInternalStructs(&res),
|
api.GetInternalStructs(&res),
|
||||||
requestHeader,
|
requestHeader,
|
||||||
opts...,
|
append(opts, jsonrpc.WithErrors(api.RPCErrors))...,
|
||||||
)
|
)
|
||||||
|
|
||||||
return &res, closer, err
|
return &res, closer, err
|
||||||
@@ -124,6 +126,7 @@ func NewWalletRPCV0(ctx context.Context, addr string, requestHeader http.Header)
|
|||||||
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin",
|
||||||
api.GetInternalStructs(&res),
|
api.GetInternalStructs(&res),
|
||||||
requestHeader,
|
requestHeader,
|
||||||
|
jsonrpc.WithErrors(api.RPCErrors),
|
||||||
)
|
)
|
||||||
|
|
||||||
return &res, closer, err
|
return &res, closer, err
|
||||||
|
|||||||
+81
-13
@@ -6,6 +6,7 @@ import (
|
|||||||
"go/ast"
|
"go/ast"
|
||||||
"go/parser"
|
"go/parser"
|
||||||
"go/token"
|
"go/token"
|
||||||
|
"net/http"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -17,20 +18,21 @@ import (
|
|||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/ipfs/go-graphsync"
|
"github.com/ipfs/go-graphsync"
|
||||||
textselector "github.com/ipld/go-ipld-selector-text-lite"
|
textselector "github.com/ipld/go-ipld-selector-text-lite"
|
||||||
"github.com/libp2p/go-libp2p-core/metrics"
|
|
||||||
"github.com/libp2p/go-libp2p-core/network"
|
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
|
||||||
"github.com/libp2p/go-libp2p-core/protocol"
|
|
||||||
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
||||||
|
"github.com/libp2p/go-libp2p/core/metrics"
|
||||||
|
"github.com/libp2p/go-libp2p/core/network"
|
||||||
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
|
"github.com/libp2p/go-libp2p/core/protocol"
|
||||||
"github.com/multiformats/go-multiaddr"
|
"github.com/multiformats/go-multiaddr"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-bitfield"
|
"github.com/filecoin-project/go-bitfield"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
|
||||||
"github.com/filecoin-project/go-fil-markets/filestore"
|
"github.com/filecoin-project/go-fil-markets/filestore"
|
||||||
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
"github.com/filecoin-project/go-jsonrpc/auth"
|
"github.com/filecoin-project/go-jsonrpc/auth"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/exitcode"
|
"github.com/filecoin-project/go-state-types/exitcode"
|
||||||
|
|
||||||
@@ -39,6 +41,7 @@ import (
|
|||||||
"github.com/filecoin-project/lotus/api/v0api"
|
"github.com/filecoin-project/lotus/api/v0api"
|
||||||
"github.com/filecoin-project/lotus/build"
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
"github.com/filecoin-project/lotus/chain/types/ethtypes"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
"github.com/filecoin-project/lotus/node/repo/imports"
|
"github.com/filecoin-project/lotus/node/repo/imports"
|
||||||
sealing "github.com/filecoin-project/lotus/storage/pipeline"
|
sealing "github.com/filecoin-project/lotus/storage/pipeline"
|
||||||
@@ -66,6 +69,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ExampleValues[reflect.TypeOf(c)] = c
|
ExampleValues[reflect.TypeOf(c)] = c
|
||||||
|
ExampleValues[reflect.TypeOf(&c)] = &c
|
||||||
|
|
||||||
c2, err := cid.Decode("bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve")
|
c2, err := cid.Decode("bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -136,12 +140,20 @@ func init() {
|
|||||||
addExample(&textSelExample)
|
addExample(&textSelExample)
|
||||||
addExample(&apiSelExample)
|
addExample(&apiSelExample)
|
||||||
addExample(network.ReachabilityPublic)
|
addExample(network.ReachabilityPublic)
|
||||||
addExample(build.NewestNetworkVersion)
|
addExample(build.TestNetworkVersion)
|
||||||
|
allocationId := verifreg.AllocationId(0)
|
||||||
|
addExample(allocationId)
|
||||||
|
addExample(&allocationId)
|
||||||
|
addExample(map[verifreg.AllocationId]verifreg.Allocation{})
|
||||||
|
claimId := verifreg.ClaimId(0)
|
||||||
|
addExample(claimId)
|
||||||
|
addExample(&claimId)
|
||||||
|
addExample(map[verifreg.ClaimId]verifreg.Claim{})
|
||||||
addExample(map[string]int{"name": 42})
|
addExample(map[string]int{"name": 42})
|
||||||
addExample(map[string]time.Time{"name": time.Unix(1615243938, 0).UTC()})
|
addExample(map[string]time.Time{"name": time.Unix(1615243938, 0).UTC()})
|
||||||
addExample(&types.ExecutionTrace{
|
addExample(&types.ExecutionTrace{
|
||||||
Msg: ExampleValue("init", reflect.TypeOf(&types.Message{}), nil).(*types.Message),
|
Msg: ExampleValue("init", reflect.TypeOf(types.MessageTrace{}), nil).(types.MessageTrace),
|
||||||
MsgRct: ExampleValue("init", reflect.TypeOf(&types.MessageReceipt{}), nil).(*types.MessageReceipt),
|
MsgRct: ExampleValue("init", reflect.TypeOf(types.ReturnTrace{}), nil).(types.ReturnTrace),
|
||||||
})
|
})
|
||||||
addExample(map[string]types.Actor{
|
addExample(map[string]types.Actor{
|
||||||
"t01236": ExampleValue("init", reflect.TypeOf(types.Actor{}), nil).(types.Actor),
|
"t01236": ExampleValue("init", reflect.TypeOf(types.Actor{}), nil).(types.Actor),
|
||||||
@@ -288,7 +300,8 @@ func init() {
|
|||||||
"title": "Lotus RPC API",
|
"title": "Lotus RPC API",
|
||||||
"version": "1.2.1/generated=2020-11-22T08:22:42-06:00",
|
"version": "1.2.1/generated=2020-11-22T08:22:42-06:00",
|
||||||
},
|
},
|
||||||
"methods": []interface{}{}},
|
"methods": []interface{}{},
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
addExample(api.CheckStatusCode(0))
|
addExample(api.CheckStatusCode(0))
|
||||||
@@ -325,7 +338,8 @@ func init() {
|
|||||||
NumConnsInbound: 3,
|
NumConnsInbound: 3,
|
||||||
NumConnsOutbound: 4,
|
NumConnsOutbound: 4,
|
||||||
NumFD: 5,
|
NumFD: 5,
|
||||||
}})
|
},
|
||||||
|
})
|
||||||
addExample(api.NetLimit{
|
addExample(api.NetLimit{
|
||||||
Memory: 123,
|
Memory: 123,
|
||||||
StreamsInbound: 1,
|
StreamsInbound: 1,
|
||||||
@@ -337,10 +351,63 @@ func init() {
|
|||||||
FD: 5,
|
FD: 5,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
addExample(map[string]bitfield.BitField{
|
||||||
|
"": bitfield.NewFromSet([]uint64{5, 6, 7, 10}),
|
||||||
|
})
|
||||||
|
addExample(&api.RaftStateData{
|
||||||
|
NonceMap: make(map[address.Address]uint64),
|
||||||
|
MsgUuids: make(map[uuid.UUID]*types.SignedMessage),
|
||||||
|
})
|
||||||
|
|
||||||
|
addExample(http.Header{
|
||||||
|
"Authorization": []string{"Bearer ey.."},
|
||||||
|
})
|
||||||
|
|
||||||
|
addExample(map[storiface.SectorFileType]storiface.SectorLocation{
|
||||||
|
storiface.FTSealed: {
|
||||||
|
Local: false,
|
||||||
|
URL: "https://example.com/sealingservice/sectors/s-f0123-12345",
|
||||||
|
Headers: nil,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
ethint := ethtypes.EthUint64(5)
|
||||||
|
addExample(ethint)
|
||||||
|
addExample(ðint)
|
||||||
|
|
||||||
|
ethaddr, _ := ethtypes.ParseEthAddress("0x5CbEeCF99d3fDB3f25E309Cc264f240bb0664031")
|
||||||
|
addExample(ethaddr)
|
||||||
|
addExample(ðaddr)
|
||||||
|
|
||||||
|
ethhash, _ := ethtypes.EthHashFromCid(c)
|
||||||
|
addExample(ethhash)
|
||||||
|
addExample(ðhash)
|
||||||
|
|
||||||
|
ethFeeHistoryReward := [][]ethtypes.EthBigInt{}
|
||||||
|
addExample(ðFeeHistoryReward)
|
||||||
|
|
||||||
|
addExample(&uuid.UUID{})
|
||||||
|
|
||||||
|
filterid := ethtypes.EthFilterID(ethhash)
|
||||||
|
addExample(filterid)
|
||||||
|
addExample(&filterid)
|
||||||
|
|
||||||
|
subid := ethtypes.EthSubscriptionID(ethhash)
|
||||||
|
addExample(subid)
|
||||||
|
addExample(&subid)
|
||||||
|
|
||||||
|
pstring := func(s string) *string { return &s }
|
||||||
|
addExample(ðtypes.EthFilterSpec{
|
||||||
|
FromBlock: pstring("2301220"),
|
||||||
|
Address: []ethtypes.EthAddress{ethaddr},
|
||||||
|
})
|
||||||
|
|
||||||
|
percent := types.Percent(123)
|
||||||
|
addExample(percent)
|
||||||
|
addExample(&percent)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) {
|
func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) {
|
||||||
|
|
||||||
switch pkg {
|
switch pkg {
|
||||||
case "api": // latest
|
case "api": // latest
|
||||||
switch name {
|
switch name {
|
||||||
@@ -410,7 +477,7 @@ func ExampleValue(method string, t, parent reflect.Type) interface{} {
|
|||||||
case reflect.Ptr:
|
case reflect.Ptr:
|
||||||
if t.Elem().Kind() == reflect.Struct {
|
if t.Elem().Kind() == reflect.Struct {
|
||||||
es := exampleStruct(method, t.Elem(), t)
|
es := exampleStruct(method, t.Elem(), t)
|
||||||
//ExampleValues[t] = es
|
ExampleValues[t] = es
|
||||||
return es
|
return es
|
||||||
}
|
}
|
||||||
case reflect.Interface:
|
case reflect.Interface:
|
||||||
@@ -427,7 +494,8 @@ func exampleStruct(method string, t, parent reflect.Type) interface{} {
|
|||||||
if f.Type == parent {
|
if f.Type == parent {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if strings.Title(f.Name) == f.Name {
|
|
||||||
|
if f.IsExported() {
|
||||||
ns.Elem().Field(i).Set(reflect.ValueOf(ExampleValue(method, f.Type, t)))
|
ns.Elem().Field(i).Set(reflect.ValueOf(ExampleValue(method, f.Type, t)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import apitypes "github.com/filecoin-project/lotus/api/types"
|
||||||
|
|
||||||
|
func CreateEthRPCAliases(as apitypes.Aliaser) {
|
||||||
|
// TODO: maybe use reflect to automatically register all the eth aliases
|
||||||
|
as.AliasMethod("eth_accounts", "Filecoin.EthAccounts")
|
||||||
|
as.AliasMethod("eth_blockNumber", "Filecoin.EthBlockNumber")
|
||||||
|
as.AliasMethod("eth_getBlockTransactionCountByNumber", "Filecoin.EthGetBlockTransactionCountByNumber")
|
||||||
|
as.AliasMethod("eth_getBlockTransactionCountByHash", "Filecoin.EthGetBlockTransactionCountByHash")
|
||||||
|
|
||||||
|
as.AliasMethod("eth_getBlockByHash", "Filecoin.EthGetBlockByHash")
|
||||||
|
as.AliasMethod("eth_getBlockByNumber", "Filecoin.EthGetBlockByNumber")
|
||||||
|
as.AliasMethod("eth_getTransactionByHash", "Filecoin.EthGetTransactionByHash")
|
||||||
|
as.AliasMethod("eth_getTransactionCount", "Filecoin.EthGetTransactionCount")
|
||||||
|
as.AliasMethod("eth_getTransactionReceipt", "Filecoin.EthGetTransactionReceipt")
|
||||||
|
as.AliasMethod("eth_getTransactionByBlockHashAndIndex", "Filecoin.EthGetTransactionByBlockHashAndIndex")
|
||||||
|
as.AliasMethod("eth_getTransactionByBlockNumberAndIndex", "Filecoin.EthGetTransactionByBlockNumberAndIndex")
|
||||||
|
|
||||||
|
as.AliasMethod("eth_getCode", "Filecoin.EthGetCode")
|
||||||
|
as.AliasMethod("eth_getStorageAt", "Filecoin.EthGetStorageAt")
|
||||||
|
as.AliasMethod("eth_getBalance", "Filecoin.EthGetBalance")
|
||||||
|
as.AliasMethod("eth_chainId", "Filecoin.EthChainId")
|
||||||
|
as.AliasMethod("eth_syncing", "Filecoin.EthSyncing")
|
||||||
|
as.AliasMethod("eth_feeHistory", "Filecoin.EthFeeHistory")
|
||||||
|
as.AliasMethod("eth_protocolVersion", "Filecoin.EthProtocolVersion")
|
||||||
|
as.AliasMethod("eth_maxPriorityFeePerGas", "Filecoin.EthMaxPriorityFeePerGas")
|
||||||
|
as.AliasMethod("eth_gasPrice", "Filecoin.EthGasPrice")
|
||||||
|
as.AliasMethod("eth_sendRawTransaction", "Filecoin.EthSendRawTransaction")
|
||||||
|
as.AliasMethod("eth_estimateGas", "Filecoin.EthEstimateGas")
|
||||||
|
as.AliasMethod("eth_call", "Filecoin.EthCall")
|
||||||
|
|
||||||
|
as.AliasMethod("eth_getLogs", "Filecoin.EthGetLogs")
|
||||||
|
as.AliasMethod("eth_getFilterChanges", "Filecoin.EthGetFilterChanges")
|
||||||
|
as.AliasMethod("eth_getFilterLogs", "Filecoin.EthGetFilterLogs")
|
||||||
|
as.AliasMethod("eth_newFilter", "Filecoin.EthNewFilter")
|
||||||
|
as.AliasMethod("eth_newBlockFilter", "Filecoin.EthNewBlockFilter")
|
||||||
|
as.AliasMethod("eth_newPendingTransactionFilter", "Filecoin.EthNewPendingTransactionFilter")
|
||||||
|
as.AliasMethod("eth_uninstallFilter", "Filecoin.EthUninstallFilter")
|
||||||
|
as.AliasMethod("eth_subscribe", "Filecoin.EthSubscribe")
|
||||||
|
as.AliasMethod("eth_unsubscribe", "Filecoin.EthUnsubscribe")
|
||||||
|
|
||||||
|
as.AliasMethod("net_version", "Filecoin.NetVersion")
|
||||||
|
as.AliasMethod("net_listening", "Filecoin.NetListening")
|
||||||
|
|
||||||
|
as.AliasMethod("web3_clientVersion", "Filecoin.Web3ClientVersion")
|
||||||
|
}
|
||||||
+821
-10
@@ -14,20 +14,22 @@ import (
|
|||||||
uuid "github.com/google/uuid"
|
uuid "github.com/google/uuid"
|
||||||
blocks "github.com/ipfs/go-block-format"
|
blocks "github.com/ipfs/go-block-format"
|
||||||
cid "github.com/ipfs/go-cid"
|
cid "github.com/ipfs/go-cid"
|
||||||
metrics "github.com/libp2p/go-libp2p-core/metrics"
|
metrics "github.com/libp2p/go-libp2p/core/metrics"
|
||||||
network0 "github.com/libp2p/go-libp2p-core/network"
|
network0 "github.com/libp2p/go-libp2p/core/network"
|
||||||
peer "github.com/libp2p/go-libp2p-core/peer"
|
peer "github.com/libp2p/go-libp2p/core/peer"
|
||||||
protocol "github.com/libp2p/go-libp2p-core/protocol"
|
protocol "github.com/libp2p/go-libp2p/core/protocol"
|
||||||
|
|
||||||
address "github.com/filecoin-project/go-address"
|
address "github.com/filecoin-project/go-address"
|
||||||
bitfield "github.com/filecoin-project/go-bitfield"
|
bitfield "github.com/filecoin-project/go-bitfield"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
|
||||||
retrievalmarket "github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
retrievalmarket "github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
|
jsonrpc "github.com/filecoin-project/go-jsonrpc"
|
||||||
auth "github.com/filecoin-project/go-jsonrpc/auth"
|
auth "github.com/filecoin-project/go-jsonrpc/auth"
|
||||||
abi "github.com/filecoin-project/go-state-types/abi"
|
abi "github.com/filecoin-project/go-state-types/abi"
|
||||||
big "github.com/filecoin-project/go-state-types/big"
|
big "github.com/filecoin-project/go-state-types/big"
|
||||||
miner "github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
|
||||||
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
|
miner "github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifreg "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
crypto "github.com/filecoin-project/go-state-types/crypto"
|
crypto "github.com/filecoin-project/go-state-types/crypto"
|
||||||
dline "github.com/filecoin-project/go-state-types/dline"
|
dline "github.com/filecoin-project/go-state-types/dline"
|
||||||
network "github.com/filecoin-project/go-state-types/network"
|
network "github.com/filecoin-project/go-state-types/network"
|
||||||
@@ -36,6 +38,7 @@ import (
|
|||||||
apitypes "github.com/filecoin-project/lotus/api/types"
|
apitypes "github.com/filecoin-project/lotus/api/types"
|
||||||
miner0 "github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
miner0 "github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
||||||
types "github.com/filecoin-project/lotus/chain/types"
|
types "github.com/filecoin-project/lotus/chain/types"
|
||||||
|
ethtypes "github.com/filecoin-project/lotus/chain/types/ethtypes"
|
||||||
alerting "github.com/filecoin-project/lotus/journal/alerting"
|
alerting "github.com/filecoin-project/lotus/journal/alerting"
|
||||||
dtypes "github.com/filecoin-project/lotus/node/modules/dtypes"
|
dtypes "github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
imports "github.com/filecoin-project/lotus/node/repo/imports"
|
imports "github.com/filecoin-project/lotus/node/repo/imports"
|
||||||
@@ -152,6 +155,20 @@ func (mr *MockFullNodeMockRecorder) ChainExport(arg0, arg1, arg2, arg3 interface
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainExport", reflect.TypeOf((*MockFullNode)(nil).ChainExport), arg0, arg1, arg2, arg3)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainExport", reflect.TypeOf((*MockFullNode)(nil).ChainExport), arg0, arg1, arg2, arg3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChainExportRangeInternal mocks base method.
|
||||||
|
func (m *MockFullNode) ChainExportRangeInternal(arg0 context.Context, arg1, arg2 types.TipSetKey, arg3 api.ChainExportConfig) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "ChainExportRangeInternal", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChainExportRangeInternal indicates an expected call of ChainExportRangeInternal.
|
||||||
|
func (mr *MockFullNodeMockRecorder) ChainExportRangeInternal(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainExportRangeInternal", reflect.TypeOf((*MockFullNode)(nil).ChainExportRangeInternal), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
// ChainGetBlock mocks base method.
|
// ChainGetBlock mocks base method.
|
||||||
func (m *MockFullNode) ChainGetBlock(arg0 context.Context, arg1 cid.Cid) (*types.BlockHeader, error) {
|
func (m *MockFullNode) ChainGetBlock(arg0 context.Context, arg1 cid.Cid) (*types.BlockHeader, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -182,6 +199,21 @@ func (mr *MockFullNodeMockRecorder) ChainGetBlockMessages(arg0, arg1 interface{}
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetBlockMessages", reflect.TypeOf((*MockFullNode)(nil).ChainGetBlockMessages), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetBlockMessages", reflect.TypeOf((*MockFullNode)(nil).ChainGetBlockMessages), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChainGetEvents mocks base method.
|
||||||
|
func (m *MockFullNode) ChainGetEvents(arg0 context.Context, arg1 cid.Cid) ([]types.Event, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "ChainGetEvents", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].([]types.Event)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChainGetEvents indicates an expected call of ChainGetEvents.
|
||||||
|
func (mr *MockFullNodeMockRecorder) ChainGetEvents(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetEvents", reflect.TypeOf((*MockFullNode)(nil).ChainGetEvents), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// ChainGetGenesis mocks base method.
|
// ChainGetGenesis mocks base method.
|
||||||
func (m *MockFullNode) ChainGetGenesis(arg0 context.Context) (*types.TipSet, error) {
|
func (m *MockFullNode) ChainGetGenesis(arg0 context.Context) (*types.TipSet, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -362,6 +394,20 @@ func (mr *MockFullNodeMockRecorder) ChainHead(arg0 interface{}) *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHead", reflect.TypeOf((*MockFullNode)(nil).ChainHead), arg0)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHead", reflect.TypeOf((*MockFullNode)(nil).ChainHead), arg0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChainHotGC mocks base method.
|
||||||
|
func (m *MockFullNode) ChainHotGC(arg0 context.Context, arg1 api.HotGCOpts) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "ChainHotGC", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChainHotGC indicates an expected call of ChainHotGC.
|
||||||
|
func (mr *MockFullNodeMockRecorder) ChainHotGC(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHotGC", reflect.TypeOf((*MockFullNode)(nil).ChainHotGC), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// ChainNotify mocks base method.
|
// ChainNotify mocks base method.
|
||||||
func (m *MockFullNode) ChainNotify(arg0 context.Context) (<-chan []*api.HeadChange, error) {
|
func (m *MockFullNode) ChainNotify(arg0 context.Context) (<-chan []*api.HeadChange, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -920,6 +966,576 @@ func (mr *MockFullNodeMockRecorder) Discover(arg0 interface{}) *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Discover", reflect.TypeOf((*MockFullNode)(nil).Discover), arg0)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Discover", reflect.TypeOf((*MockFullNode)(nil).Discover), arg0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EthAccounts mocks base method.
|
||||||
|
func (m *MockFullNode) EthAccounts(arg0 context.Context) ([]ethtypes.EthAddress, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthAccounts", arg0)
|
||||||
|
ret0, _ := ret[0].([]ethtypes.EthAddress)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthAccounts indicates an expected call of EthAccounts.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthAccounts(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthAccounts", reflect.TypeOf((*MockFullNode)(nil).EthAccounts), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthAddressToFilecoinAddress mocks base method.
|
||||||
|
func (m *MockFullNode) EthAddressToFilecoinAddress(arg0 context.Context, arg1 ethtypes.EthAddress) (address.Address, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthAddressToFilecoinAddress", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(address.Address)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthAddressToFilecoinAddress indicates an expected call of EthAddressToFilecoinAddress.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthAddressToFilecoinAddress(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthAddressToFilecoinAddress", reflect.TypeOf((*MockFullNode)(nil).EthAddressToFilecoinAddress), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthBlockNumber mocks base method.
|
||||||
|
func (m *MockFullNode) EthBlockNumber(arg0 context.Context) (ethtypes.EthUint64, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthBlockNumber", arg0)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthUint64)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthBlockNumber indicates an expected call of EthBlockNumber.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthBlockNumber(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthBlockNumber", reflect.TypeOf((*MockFullNode)(nil).EthBlockNumber), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthCall mocks base method.
|
||||||
|
func (m *MockFullNode) EthCall(arg0 context.Context, arg1 ethtypes.EthCall, arg2 string) (ethtypes.EthBytes, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthCall", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthBytes)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthCall indicates an expected call of EthCall.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthCall(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthCall", reflect.TypeOf((*MockFullNode)(nil).EthCall), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthChainId mocks base method.
|
||||||
|
func (m *MockFullNode) EthChainId(arg0 context.Context) (ethtypes.EthUint64, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthChainId", arg0)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthUint64)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthChainId indicates an expected call of EthChainId.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthChainId(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthChainId", reflect.TypeOf((*MockFullNode)(nil).EthChainId), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthEstimateGas mocks base method.
|
||||||
|
func (m *MockFullNode) EthEstimateGas(arg0 context.Context, arg1 ethtypes.EthCall) (ethtypes.EthUint64, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthEstimateGas", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthUint64)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthEstimateGas indicates an expected call of EthEstimateGas.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthEstimateGas(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthEstimateGas", reflect.TypeOf((*MockFullNode)(nil).EthEstimateGas), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthFeeHistory mocks base method.
|
||||||
|
func (m *MockFullNode) EthFeeHistory(arg0 context.Context, arg1 jsonrpc.RawParams) (ethtypes.EthFeeHistory, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthFeeHistory", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthFeeHistory)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthFeeHistory indicates an expected call of EthFeeHistory.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthFeeHistory(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthFeeHistory", reflect.TypeOf((*MockFullNode)(nil).EthFeeHistory), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGasPrice mocks base method.
|
||||||
|
func (m *MockFullNode) EthGasPrice(arg0 context.Context) (ethtypes.EthBigInt, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGasPrice", arg0)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthBigInt)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGasPrice indicates an expected call of EthGasPrice.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGasPrice(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGasPrice", reflect.TypeOf((*MockFullNode)(nil).EthGasPrice), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBalance mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetBalance(arg0 context.Context, arg1 ethtypes.EthAddress, arg2 string) (ethtypes.EthBigInt, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetBalance", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthBigInt)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBalance indicates an expected call of EthGetBalance.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetBalance(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetBalance", reflect.TypeOf((*MockFullNode)(nil).EthGetBalance), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBlockByHash mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetBlockByHash(arg0 context.Context, arg1 ethtypes.EthHash, arg2 bool) (ethtypes.EthBlock, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetBlockByHash", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthBlock)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBlockByHash indicates an expected call of EthGetBlockByHash.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetBlockByHash(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetBlockByHash", reflect.TypeOf((*MockFullNode)(nil).EthGetBlockByHash), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBlockByNumber mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetBlockByNumber(arg0 context.Context, arg1 string, arg2 bool) (ethtypes.EthBlock, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetBlockByNumber", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthBlock)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBlockByNumber indicates an expected call of EthGetBlockByNumber.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetBlockByNumber(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetBlockByNumber", reflect.TypeOf((*MockFullNode)(nil).EthGetBlockByNumber), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBlockTransactionCountByHash mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetBlockTransactionCountByHash(arg0 context.Context, arg1 ethtypes.EthHash) (ethtypes.EthUint64, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetBlockTransactionCountByHash", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthUint64)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBlockTransactionCountByHash indicates an expected call of EthGetBlockTransactionCountByHash.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetBlockTransactionCountByHash(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetBlockTransactionCountByHash", reflect.TypeOf((*MockFullNode)(nil).EthGetBlockTransactionCountByHash), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBlockTransactionCountByNumber mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetBlockTransactionCountByNumber(arg0 context.Context, arg1 ethtypes.EthUint64) (ethtypes.EthUint64, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetBlockTransactionCountByNumber", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthUint64)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetBlockTransactionCountByNumber indicates an expected call of EthGetBlockTransactionCountByNumber.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetBlockTransactionCountByNumber(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetBlockTransactionCountByNumber", reflect.TypeOf((*MockFullNode)(nil).EthGetBlockTransactionCountByNumber), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetCode mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetCode(arg0 context.Context, arg1 ethtypes.EthAddress, arg2 string) (ethtypes.EthBytes, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetCode", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthBytes)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetCode indicates an expected call of EthGetCode.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetCode(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetCode", reflect.TypeOf((*MockFullNode)(nil).EthGetCode), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetFilterChanges mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetFilterChanges(arg0 context.Context, arg1 ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetFilterChanges", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*ethtypes.EthFilterResult)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetFilterChanges indicates an expected call of EthGetFilterChanges.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetFilterChanges(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetFilterChanges", reflect.TypeOf((*MockFullNode)(nil).EthGetFilterChanges), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetFilterLogs mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetFilterLogs(arg0 context.Context, arg1 ethtypes.EthFilterID) (*ethtypes.EthFilterResult, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetFilterLogs", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*ethtypes.EthFilterResult)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetFilterLogs indicates an expected call of EthGetFilterLogs.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetFilterLogs(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetFilterLogs", reflect.TypeOf((*MockFullNode)(nil).EthGetFilterLogs), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetLogs mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetLogs(arg0 context.Context, arg1 *ethtypes.EthFilterSpec) (*ethtypes.EthFilterResult, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetLogs", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*ethtypes.EthFilterResult)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetLogs indicates an expected call of EthGetLogs.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetLogs(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetLogs", reflect.TypeOf((*MockFullNode)(nil).EthGetLogs), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetMessageCidByTransactionHash mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetMessageCidByTransactionHash(arg0 context.Context, arg1 *ethtypes.EthHash) (*cid.Cid, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetMessageCidByTransactionHash", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*cid.Cid)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetMessageCidByTransactionHash indicates an expected call of EthGetMessageCidByTransactionHash.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetMessageCidByTransactionHash(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetMessageCidByTransactionHash", reflect.TypeOf((*MockFullNode)(nil).EthGetMessageCidByTransactionHash), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetStorageAt mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetStorageAt(arg0 context.Context, arg1 ethtypes.EthAddress, arg2 ethtypes.EthBytes, arg3 string) (ethtypes.EthBytes, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetStorageAt", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthBytes)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetStorageAt indicates an expected call of EthGetStorageAt.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetStorageAt(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetStorageAt", reflect.TypeOf((*MockFullNode)(nil).EthGetStorageAt), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionByBlockHashAndIndex mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetTransactionByBlockHashAndIndex(arg0 context.Context, arg1 ethtypes.EthHash, arg2 ethtypes.EthUint64) (ethtypes.EthTx, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetTransactionByBlockHashAndIndex", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthTx)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionByBlockHashAndIndex indicates an expected call of EthGetTransactionByBlockHashAndIndex.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetTransactionByBlockHashAndIndex(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetTransactionByBlockHashAndIndex", reflect.TypeOf((*MockFullNode)(nil).EthGetTransactionByBlockHashAndIndex), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionByBlockNumberAndIndex mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetTransactionByBlockNumberAndIndex(arg0 context.Context, arg1, arg2 ethtypes.EthUint64) (ethtypes.EthTx, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetTransactionByBlockNumberAndIndex", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthTx)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionByBlockNumberAndIndex indicates an expected call of EthGetTransactionByBlockNumberAndIndex.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetTransactionByBlockNumberAndIndex(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetTransactionByBlockNumberAndIndex", reflect.TypeOf((*MockFullNode)(nil).EthGetTransactionByBlockNumberAndIndex), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionByHash mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetTransactionByHash(arg0 context.Context, arg1 *ethtypes.EthHash) (*ethtypes.EthTx, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetTransactionByHash", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*ethtypes.EthTx)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionByHash indicates an expected call of EthGetTransactionByHash.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetTransactionByHash(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetTransactionByHash", reflect.TypeOf((*MockFullNode)(nil).EthGetTransactionByHash), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionByHashLimited mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetTransactionByHashLimited(arg0 context.Context, arg1 *ethtypes.EthHash, arg2 abi.ChainEpoch) (*ethtypes.EthTx, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetTransactionByHashLimited", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(*ethtypes.EthTx)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionByHashLimited indicates an expected call of EthGetTransactionByHashLimited.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetTransactionByHashLimited(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetTransactionByHashLimited", reflect.TypeOf((*MockFullNode)(nil).EthGetTransactionByHashLimited), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionCount mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetTransactionCount(arg0 context.Context, arg1 ethtypes.EthAddress, arg2 string) (ethtypes.EthUint64, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetTransactionCount", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthUint64)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionCount indicates an expected call of EthGetTransactionCount.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetTransactionCount(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetTransactionCount", reflect.TypeOf((*MockFullNode)(nil).EthGetTransactionCount), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionHashByCid mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetTransactionHashByCid(arg0 context.Context, arg1 cid.Cid) (*ethtypes.EthHash, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetTransactionHashByCid", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*ethtypes.EthHash)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionHashByCid indicates an expected call of EthGetTransactionHashByCid.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetTransactionHashByCid(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetTransactionHashByCid", reflect.TypeOf((*MockFullNode)(nil).EthGetTransactionHashByCid), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionReceipt mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetTransactionReceipt(arg0 context.Context, arg1 ethtypes.EthHash) (*api.EthTxReceipt, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetTransactionReceipt", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(*api.EthTxReceipt)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionReceipt indicates an expected call of EthGetTransactionReceipt.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetTransactionReceipt(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetTransactionReceipt", reflect.TypeOf((*MockFullNode)(nil).EthGetTransactionReceipt), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionReceiptLimited mocks base method.
|
||||||
|
func (m *MockFullNode) EthGetTransactionReceiptLimited(arg0 context.Context, arg1 ethtypes.EthHash, arg2 abi.ChainEpoch) (*api.EthTxReceipt, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthGetTransactionReceiptLimited", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(*api.EthTxReceipt)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthGetTransactionReceiptLimited indicates an expected call of EthGetTransactionReceiptLimited.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthGetTransactionReceiptLimited(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthGetTransactionReceiptLimited", reflect.TypeOf((*MockFullNode)(nil).EthGetTransactionReceiptLimited), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthMaxPriorityFeePerGas mocks base method.
|
||||||
|
func (m *MockFullNode) EthMaxPriorityFeePerGas(arg0 context.Context) (ethtypes.EthBigInt, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthMaxPriorityFeePerGas", arg0)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthBigInt)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthMaxPriorityFeePerGas indicates an expected call of EthMaxPriorityFeePerGas.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthMaxPriorityFeePerGas(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthMaxPriorityFeePerGas", reflect.TypeOf((*MockFullNode)(nil).EthMaxPriorityFeePerGas), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthNewBlockFilter mocks base method.
|
||||||
|
func (m *MockFullNode) EthNewBlockFilter(arg0 context.Context) (ethtypes.EthFilterID, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthNewBlockFilter", arg0)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthFilterID)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthNewBlockFilter indicates an expected call of EthNewBlockFilter.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthNewBlockFilter(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthNewBlockFilter", reflect.TypeOf((*MockFullNode)(nil).EthNewBlockFilter), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthNewFilter mocks base method.
|
||||||
|
func (m *MockFullNode) EthNewFilter(arg0 context.Context, arg1 *ethtypes.EthFilterSpec) (ethtypes.EthFilterID, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthNewFilter", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthFilterID)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthNewFilter indicates an expected call of EthNewFilter.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthNewFilter(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthNewFilter", reflect.TypeOf((*MockFullNode)(nil).EthNewFilter), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthNewPendingTransactionFilter mocks base method.
|
||||||
|
func (m *MockFullNode) EthNewPendingTransactionFilter(arg0 context.Context) (ethtypes.EthFilterID, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthNewPendingTransactionFilter", arg0)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthFilterID)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthNewPendingTransactionFilter indicates an expected call of EthNewPendingTransactionFilter.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthNewPendingTransactionFilter(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthNewPendingTransactionFilter", reflect.TypeOf((*MockFullNode)(nil).EthNewPendingTransactionFilter), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthProtocolVersion mocks base method.
|
||||||
|
func (m *MockFullNode) EthProtocolVersion(arg0 context.Context) (ethtypes.EthUint64, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthProtocolVersion", arg0)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthUint64)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthProtocolVersion indicates an expected call of EthProtocolVersion.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthProtocolVersion(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthProtocolVersion", reflect.TypeOf((*MockFullNode)(nil).EthProtocolVersion), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthSendRawTransaction mocks base method.
|
||||||
|
func (m *MockFullNode) EthSendRawTransaction(arg0 context.Context, arg1 ethtypes.EthBytes) (ethtypes.EthHash, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthSendRawTransaction", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthHash)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthSendRawTransaction indicates an expected call of EthSendRawTransaction.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthSendRawTransaction(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthSendRawTransaction", reflect.TypeOf((*MockFullNode)(nil).EthSendRawTransaction), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthSubscribe mocks base method.
|
||||||
|
func (m *MockFullNode) EthSubscribe(arg0 context.Context, arg1 jsonrpc.RawParams) (ethtypes.EthSubscriptionID, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthSubscribe", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthSubscriptionID)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthSubscribe indicates an expected call of EthSubscribe.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthSubscribe(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthSubscribe", reflect.TypeOf((*MockFullNode)(nil).EthSubscribe), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthSyncing mocks base method.
|
||||||
|
func (m *MockFullNode) EthSyncing(arg0 context.Context) (ethtypes.EthSyncingResult, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthSyncing", arg0)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthSyncingResult)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthSyncing indicates an expected call of EthSyncing.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthSyncing(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthSyncing", reflect.TypeOf((*MockFullNode)(nil).EthSyncing), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthUninstallFilter mocks base method.
|
||||||
|
func (m *MockFullNode) EthUninstallFilter(arg0 context.Context, arg1 ethtypes.EthFilterID) (bool, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthUninstallFilter", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(bool)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthUninstallFilter indicates an expected call of EthUninstallFilter.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthUninstallFilter(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthUninstallFilter", reflect.TypeOf((*MockFullNode)(nil).EthUninstallFilter), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthUnsubscribe mocks base method.
|
||||||
|
func (m *MockFullNode) EthUnsubscribe(arg0 context.Context, arg1 ethtypes.EthSubscriptionID) (bool, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "EthUnsubscribe", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(bool)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// EthUnsubscribe indicates an expected call of EthUnsubscribe.
|
||||||
|
func (mr *MockFullNodeMockRecorder) EthUnsubscribe(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EthUnsubscribe", reflect.TypeOf((*MockFullNode)(nil).EthUnsubscribe), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilecoinAddressToEthAddress mocks base method.
|
||||||
|
func (m *MockFullNode) FilecoinAddressToEthAddress(arg0 context.Context, arg1 address.Address) (ethtypes.EthAddress, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "FilecoinAddressToEthAddress", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(ethtypes.EthAddress)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilecoinAddressToEthAddress indicates an expected call of FilecoinAddressToEthAddress.
|
||||||
|
func (mr *MockFullNodeMockRecorder) FilecoinAddressToEthAddress(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilecoinAddressToEthAddress", reflect.TypeOf((*MockFullNode)(nil).FilecoinAddressToEthAddress), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// GasEstimateFeeCap mocks base method.
|
// GasEstimateFeeCap mocks base method.
|
||||||
func (m *MockFullNode) GasEstimateFeeCap(arg0 context.Context, arg1 *types.Message, arg2 int64, arg3 types.TipSetKey) (big.Int, error) {
|
func (m *MockFullNode) GasEstimateFeeCap(arg0 context.Context, arg1 *types.Message, arg2 int64, arg3 types.TipSetKey) (big.Int, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -1842,6 +2458,21 @@ func (mr *MockFullNodeMockRecorder) NetLimit(arg0, arg1 interface{}) *gomock.Cal
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetLimit", reflect.TypeOf((*MockFullNode)(nil).NetLimit), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetLimit", reflect.TypeOf((*MockFullNode)(nil).NetLimit), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NetListening mocks base method.
|
||||||
|
func (m *MockFullNode) NetListening(arg0 context.Context) (bool, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "NetListening", arg0)
|
||||||
|
ret0, _ := ret[0].(bool)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetListening indicates an expected call of NetListening.
|
||||||
|
func (mr *MockFullNodeMockRecorder) NetListening(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetListening", reflect.TypeOf((*MockFullNode)(nil).NetListening), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// NetPeerInfo mocks base method.
|
// NetPeerInfo mocks base method.
|
||||||
func (m *MockFullNode) NetPeerInfo(arg0 context.Context, arg1 peer.ID) (*api.ExtendedPeerInfo, error) {
|
func (m *MockFullNode) NetPeerInfo(arg0 context.Context, arg1 peer.ID) (*api.ExtendedPeerInfo, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -1974,6 +2605,21 @@ func (mr *MockFullNodeMockRecorder) NetStat(arg0, arg1 interface{}) *gomock.Call
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetStat", reflect.TypeOf((*MockFullNode)(nil).NetStat), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetStat", reflect.TypeOf((*MockFullNode)(nil).NetStat), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NetVersion mocks base method.
|
||||||
|
func (m *MockFullNode) NetVersion(arg0 context.Context) (string, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "NetVersion", arg0)
|
||||||
|
ret0, _ := ret[0].(string)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetVersion indicates an expected call of NetVersion.
|
||||||
|
func (mr *MockFullNodeMockRecorder) NetVersion(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetVersion", reflect.TypeOf((*MockFullNode)(nil).NetVersion), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// NodeStatus mocks base method.
|
// NodeStatus mocks base method.
|
||||||
func (m *MockFullNode) NodeStatus(arg0 context.Context, arg1 bool) (api.NodeStatus, error) {
|
func (m *MockFullNode) NodeStatus(arg0 context.Context, arg1 bool) (api.NodeStatus, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -2243,6 +2889,36 @@ func (mr *MockFullNodeMockRecorder) PaychVoucherSubmit(arg0, arg1, arg2, arg3, a
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherSubmit", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherSubmit), arg0, arg1, arg2, arg3, arg4)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherSubmit", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherSubmit), arg0, arg1, arg2, arg3, arg4)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RaftLeader mocks base method.
|
||||||
|
func (m *MockFullNode) RaftLeader(arg0 context.Context) (peer.ID, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "RaftLeader", arg0)
|
||||||
|
ret0, _ := ret[0].(peer.ID)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// RaftLeader indicates an expected call of RaftLeader.
|
||||||
|
func (mr *MockFullNodeMockRecorder) RaftLeader(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RaftLeader", reflect.TypeOf((*MockFullNode)(nil).RaftLeader), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RaftState mocks base method.
|
||||||
|
func (m *MockFullNode) RaftState(arg0 context.Context) (*api.RaftStateData, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "RaftState", arg0)
|
||||||
|
ret0, _ := ret[0].(*api.RaftStateData)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// RaftState indicates an expected call of RaftState.
|
||||||
|
func (mr *MockFullNodeMockRecorder) RaftState(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RaftState", reflect.TypeOf((*MockFullNode)(nil).RaftState), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// Session mocks base method.
|
// Session mocks base method.
|
||||||
func (m *MockFullNode) Session(arg0 context.Context) (uuid.UUID, error) {
|
func (m *MockFullNode) Session(arg0 context.Context) (uuid.UUID, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -2272,6 +2948,21 @@ func (mr *MockFullNodeMockRecorder) Shutdown(arg0 interface{}) *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Shutdown", reflect.TypeOf((*MockFullNode)(nil).Shutdown), arg0)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Shutdown", reflect.TypeOf((*MockFullNode)(nil).Shutdown), arg0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StartTime mocks base method.
|
||||||
|
func (m *MockFullNode) StartTime(arg0 context.Context) (time.Time, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StartTime", arg0)
|
||||||
|
ret0, _ := ret[0].(time.Time)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StartTime indicates an expected call of StartTime.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StartTime(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartTime", reflect.TypeOf((*MockFullNode)(nil).StartTime), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// StateAccountKey mocks base method.
|
// StateAccountKey mocks base method.
|
||||||
func (m *MockFullNode) StateAccountKey(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (address.Address, error) {
|
func (m *MockFullNode) StateAccountKey(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (address.Address, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -2302,6 +2993,21 @@ func (mr *MockFullNodeMockRecorder) StateActorCodeCIDs(arg0, arg1 interface{}) *
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateActorCodeCIDs", reflect.TypeOf((*MockFullNode)(nil).StateActorCodeCIDs), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateActorCodeCIDs", reflect.TypeOf((*MockFullNode)(nil).StateActorCodeCIDs), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateActorManifestCID mocks base method.
|
||||||
|
func (m *MockFullNode) StateActorManifestCID(arg0 context.Context, arg1 network.Version) (cid.Cid, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateActorManifestCID", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(cid.Cid)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateActorManifestCID indicates an expected call of StateActorManifestCID.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateActorManifestCID(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateActorManifestCID", reflect.TypeOf((*MockFullNode)(nil).StateActorManifestCID), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// StateAllMinerFaults mocks base method.
|
// StateAllMinerFaults mocks base method.
|
||||||
func (m *MockFullNode) StateAllMinerFaults(arg0 context.Context, arg1 abi.ChainEpoch, arg2 types.TipSetKey) ([]*api.Fault, error) {
|
func (m *MockFullNode) StateAllMinerFaults(arg0 context.Context, arg1 abi.ChainEpoch, arg2 types.TipSetKey) ([]*api.Fault, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -2333,10 +3039,10 @@ func (mr *MockFullNodeMockRecorder) StateCall(arg0, arg1, arg2 interface{}) *gom
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StateChangedActors mocks base method.
|
// StateChangedActors mocks base method.
|
||||||
func (m *MockFullNode) StateChangedActors(arg0 context.Context, arg1, arg2 cid.Cid) (map[string]types.Actor, error) {
|
func (m *MockFullNode) StateChangedActors(arg0 context.Context, arg1, arg2 cid.Cid) (map[string]types.ActorV5, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "StateChangedActors", arg0, arg1, arg2)
|
ret := m.ctrl.Call(m, "StateChangedActors", arg0, arg1, arg2)
|
||||||
ret0, _ := ret[0].(map[string]types.Actor)
|
ret0, _ := ret[0].(map[string]types.ActorV5)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
@@ -2438,10 +3144,10 @@ func (mr *MockFullNodeMockRecorder) StateEncodeParams(arg0, arg1, arg2, arg3 int
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StateGetActor mocks base method.
|
// StateGetActor mocks base method.
|
||||||
func (m *MockFullNode) StateGetActor(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (*types.Actor, error) {
|
func (m *MockFullNode) StateGetActor(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (*types.ActorV5, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "StateGetActor", arg0, arg1, arg2)
|
ret := m.ctrl.Call(m, "StateGetActor", arg0, arg1, arg2)
|
||||||
ret0, _ := ret[0].(*types.Actor)
|
ret0, _ := ret[0].(*types.ActorV5)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
@@ -2452,6 +3158,51 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{})
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateGetAllocation mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocation", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocation indicates an expected call of StateGetAllocation.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocation(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocation", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocation), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocationForPendingDeal mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocationForPendingDeal(arg0 context.Context, arg1 abi.DealID, arg2 types.TipSetKey) (*verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocationForPendingDeal", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocationForPendingDeal indicates an expected call of StateGetAllocationForPendingDeal.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocationForPendingDeal(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocationForPendingDeal", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocationForPendingDeal), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocations mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocations(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocations", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(map[verifreg.AllocationId]verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocations indicates an expected call of StateGetAllocations.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocations(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocations", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocations), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
// StateGetBeaconEntry mocks base method.
|
// StateGetBeaconEntry mocks base method.
|
||||||
func (m *MockFullNode) StateGetBeaconEntry(arg0 context.Context, arg1 abi.ChainEpoch) (*types.BeaconEntry, error) {
|
func (m *MockFullNode) StateGetBeaconEntry(arg0 context.Context, arg1 abi.ChainEpoch) (*types.BeaconEntry, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -2467,6 +3218,36 @@ func (mr *MockFullNodeMockRecorder) StateGetBeaconEntry(arg0, arg1 interface{})
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetBeaconEntry", reflect.TypeOf((*MockFullNode)(nil).StateGetBeaconEntry), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetBeaconEntry", reflect.TypeOf((*MockFullNode)(nil).StateGetBeaconEntry), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateGetClaim mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetClaim(arg0 context.Context, arg1 address.Address, arg2 verifreg.ClaimId, arg3 types.TipSetKey) (*verifreg.Claim, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetClaim", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Claim)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaim indicates an expected call of StateGetClaim.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetClaim(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetClaim", reflect.TypeOf((*MockFullNode)(nil).StateGetClaim), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaims mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetClaims(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetClaims", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(map[verifreg.ClaimId]verifreg.Claim)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaims indicates an expected call of StateGetClaims.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetClaims(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetClaims", reflect.TypeOf((*MockFullNode)(nil).StateGetClaims), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
// StateGetNetworkParams mocks base method.
|
// StateGetNetworkParams mocks base method.
|
||||||
func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) {
|
func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -2662,6 +3443,21 @@ func (mr *MockFullNodeMockRecorder) StateMinerActiveSectors(arg0, arg1, arg2 int
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerActiveSectors", reflect.TypeOf((*MockFullNode)(nil).StateMinerActiveSectors), arg0, arg1, arg2)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerActiveSectors", reflect.TypeOf((*MockFullNode)(nil).StateMinerActiveSectors), arg0, arg1, arg2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateMinerAllocated mocks base method.
|
||||||
|
func (m *MockFullNode) StateMinerAllocated(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (*bitfield.BitField, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateMinerAllocated", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(*bitfield.BitField)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateMinerAllocated indicates an expected call of StateMinerAllocated.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateMinerAllocated(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerAllocated", reflect.TypeOf((*MockFullNode)(nil).StateMinerAllocated), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
// StateMinerAvailableBalance mocks base method.
|
// StateMinerAvailableBalance mocks base method.
|
||||||
func (m *MockFullNode) StateMinerAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (big.Int, error) {
|
func (m *MockFullNode) StateMinerAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (big.Int, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -3404,3 +4200,18 @@ func (mr *MockFullNodeMockRecorder) WalletVerify(arg0, arg1, arg2, arg3 interfac
|
|||||||
mr.mock.ctrl.T.Helper()
|
mr.mock.ctrl.T.Helper()
|
||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletVerify", reflect.TypeOf((*MockFullNode)(nil).WalletVerify), arg0, arg1, arg2, arg3)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletVerify", reflect.TypeOf((*MockFullNode)(nil).WalletVerify), arg0, arg1, arg2, arg3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Web3ClientVersion mocks base method.
|
||||||
|
func (m *MockFullNode) Web3ClientVersion(arg0 context.Context) (string, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Web3ClientVersion", arg0)
|
||||||
|
ret0, _ := ret[0].(string)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Web3ClientVersion indicates an expected call of Web3ClientVersion.
|
||||||
|
func (mr *MockFullNodeMockRecorder) Web3ClientVersion(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Web3ClientVersion", reflect.TypeOf((*MockFullNode)(nil).Web3ClientVersion), arg0)
|
||||||
|
}
|
||||||
|
|||||||
+1954
-478
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
+117
-43
@@ -5,17 +5,21 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/ipfs/go-graphsync"
|
"github.com/ipfs/go-graphsync"
|
||||||
"github.com/libp2p/go-libp2p-core/network"
|
"github.com/ipld/go-ipld-prime"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/ipld/go-ipld-prime/codec/dagjson"
|
||||||
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
||||||
|
"github.com/libp2p/go-libp2p/core/network"
|
||||||
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
ma "github.com/multiformats/go-multiaddr"
|
ma "github.com/multiformats/go-multiaddr"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
|
||||||
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
@@ -53,7 +57,13 @@ type PubsubScore struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MessageSendSpec struct {
|
type MessageSendSpec struct {
|
||||||
MaxFee abi.TokenAmount
|
MaxFee abi.TokenAmount
|
||||||
|
MsgUuid uuid.UUID
|
||||||
|
}
|
||||||
|
|
||||||
|
type MpoolMessageWhole struct {
|
||||||
|
Msg *types.Message
|
||||||
|
Spec *MessageSendSpec
|
||||||
}
|
}
|
||||||
|
|
||||||
// GraphSyncDataTransfer provides diagnostics on a data transfer happening over graphsync
|
// GraphSyncDataTransfer provides diagnostics on a data transfer happening over graphsync
|
||||||
@@ -102,16 +112,12 @@ func NewDataTransferChannel(hostID peer.ID, channelState datatransfer.ChannelSta
|
|||||||
IsSender: channelState.Sender() == hostID,
|
IsSender: channelState.Sender() == hostID,
|
||||||
Message: channelState.Message(),
|
Message: channelState.Message(),
|
||||||
}
|
}
|
||||||
stringer, ok := channelState.Voucher().(fmt.Stringer)
|
voucher := channelState.Voucher()
|
||||||
if ok {
|
voucherJSON, err := ipld.Encode(voucher.Voucher, dagjson.Encode)
|
||||||
channel.Voucher = stringer.String()
|
if err != nil {
|
||||||
|
channel.Voucher = fmt.Errorf("Voucher Serialization: %w", err).Error()
|
||||||
} else {
|
} else {
|
||||||
voucherJSON, err := json.Marshal(channelState.Voucher())
|
channel.Voucher = string(voucherJSON)
|
||||||
if err != nil {
|
|
||||||
channel.Voucher = fmt.Errorf("Voucher Serialization: %w", err).Error()
|
|
||||||
} else {
|
|
||||||
channel.Voucher = string(voucherJSON)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if channel.IsSender {
|
if channel.IsSender {
|
||||||
channel.IsInitiator = !channelState.IsPull()
|
channel.IsInitiator = !channelState.IsPull()
|
||||||
@@ -134,13 +140,7 @@ type NetStat struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type NetLimit struct {
|
type NetLimit struct {
|
||||||
Dynamic bool `json:",omitempty"`
|
|
||||||
// set if Dynamic is false
|
|
||||||
Memory int64 `json:",omitempty"`
|
Memory int64 `json:",omitempty"`
|
||||||
// set if Dynamic is true
|
|
||||||
MemoryFraction float64 `json:",omitempty"`
|
|
||||||
MinMemory int64 `json:",omitempty"`
|
|
||||||
MaxMemory int64 `json:",omitempty"`
|
|
||||||
|
|
||||||
Streams, StreamsInbound, StreamsOutbound int
|
Streams, StreamsInbound, StreamsOutbound int
|
||||||
Conns, ConnsInbound, ConnsOutbound int
|
Conns, ConnsInbound, ConnsOutbound int
|
||||||
@@ -252,10 +252,10 @@ type RestrievalRes struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Selector specifies ipld selector string
|
// Selector specifies ipld selector string
|
||||||
// - if the string starts with '{', it's interpreted as json selector string
|
// - if the string starts with '{', it's interpreted as json selector string
|
||||||
// see https://ipld.io/specs/selectors/ and https://ipld.io/specs/selectors/fixtures/selector-fixtures-1/
|
// see https://ipld.io/specs/selectors/ and https://ipld.io/specs/selectors/fixtures/selector-fixtures-1/
|
||||||
// - otherwise the string is interpreted as ipld-selector-text-lite (simple ipld path)
|
// - otherwise the string is interpreted as ipld-selector-text-lite (simple ipld path)
|
||||||
// see https://github.com/ipld/go-ipld-selector-text-lite
|
// see https://github.com/ipld/go-ipld-selector-text-lite
|
||||||
type Selector string
|
type Selector string
|
||||||
|
|
||||||
type DagSpec struct {
|
type DagSpec struct {
|
||||||
@@ -299,6 +299,9 @@ type MinerInfo struct {
|
|||||||
SectorSize abi.SectorSize
|
SectorSize abi.SectorSize
|
||||||
WindowPoStPartitionSectors uint64
|
WindowPoStPartitionSectors uint64
|
||||||
ConsensusFaultElapsed abi.ChainEpoch
|
ConsensusFaultElapsed abi.ChainEpoch
|
||||||
|
Beneficiary address.Address
|
||||||
|
BeneficiaryTerm *miner.BeneficiaryTerm
|
||||||
|
PendingBeneficiaryTerm *miner.PendingBeneficiaryChange
|
||||||
}
|
}
|
||||||
|
|
||||||
type NetworkParams struct {
|
type NetworkParams struct {
|
||||||
@@ -311,24 +314,95 @@ type NetworkParams struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ForkUpgradeParams struct {
|
type ForkUpgradeParams struct {
|
||||||
UpgradeSmokeHeight abi.ChainEpoch
|
UpgradeSmokeHeight abi.ChainEpoch
|
||||||
UpgradeBreezeHeight abi.ChainEpoch
|
UpgradeBreezeHeight abi.ChainEpoch
|
||||||
UpgradeIgnitionHeight abi.ChainEpoch
|
UpgradeIgnitionHeight abi.ChainEpoch
|
||||||
UpgradeLiftoffHeight abi.ChainEpoch
|
UpgradeLiftoffHeight abi.ChainEpoch
|
||||||
UpgradeAssemblyHeight abi.ChainEpoch
|
UpgradeAssemblyHeight abi.ChainEpoch
|
||||||
UpgradeRefuelHeight abi.ChainEpoch
|
UpgradeRefuelHeight abi.ChainEpoch
|
||||||
UpgradeTapeHeight abi.ChainEpoch
|
UpgradeTapeHeight abi.ChainEpoch
|
||||||
UpgradeKumquatHeight abi.ChainEpoch
|
UpgradeKumquatHeight abi.ChainEpoch
|
||||||
UpgradePriceListOopsHeight abi.ChainEpoch
|
BreezeGasTampingDuration abi.ChainEpoch
|
||||||
BreezeGasTampingDuration abi.ChainEpoch
|
UpgradeCalicoHeight abi.ChainEpoch
|
||||||
UpgradeCalicoHeight abi.ChainEpoch
|
UpgradePersianHeight abi.ChainEpoch
|
||||||
UpgradePersianHeight abi.ChainEpoch
|
UpgradeOrangeHeight abi.ChainEpoch
|
||||||
UpgradeOrangeHeight abi.ChainEpoch
|
UpgradeClausHeight abi.ChainEpoch
|
||||||
UpgradeClausHeight abi.ChainEpoch
|
UpgradeTrustHeight abi.ChainEpoch
|
||||||
UpgradeTrustHeight abi.ChainEpoch
|
UpgradeNorwegianHeight abi.ChainEpoch
|
||||||
UpgradeNorwegianHeight abi.ChainEpoch
|
UpgradeTurboHeight abi.ChainEpoch
|
||||||
UpgradeTurboHeight abi.ChainEpoch
|
UpgradeHyperdriveHeight abi.ChainEpoch
|
||||||
UpgradeHyperdriveHeight abi.ChainEpoch
|
UpgradeChocolateHeight abi.ChainEpoch
|
||||||
UpgradeChocolateHeight abi.ChainEpoch
|
UpgradeOhSnapHeight abi.ChainEpoch
|
||||||
UpgradeOhSnapHeight abi.ChainEpoch
|
UpgradeSkyrHeight abi.ChainEpoch
|
||||||
|
UpgradeSharkHeight abi.ChainEpoch
|
||||||
|
UpgradeHyggeHeight abi.ChainEpoch
|
||||||
|
UpgradeLightningHeight abi.ChainEpoch
|
||||||
|
UpgradeThunderHeight abi.ChainEpoch
|
||||||
|
}
|
||||||
|
|
||||||
|
type NonceMapType map[address.Address]uint64
|
||||||
|
type MsgUuidMapType map[uuid.UUID]*types.SignedMessage
|
||||||
|
|
||||||
|
type RaftStateData struct {
|
||||||
|
NonceMap NonceMapType
|
||||||
|
MsgUuids MsgUuidMapType
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NonceMapType) MarshalJSON() ([]byte, error) {
|
||||||
|
marshalled := make(map[string]uint64)
|
||||||
|
for a, n := range *n {
|
||||||
|
marshalled[a.String()] = n
|
||||||
|
}
|
||||||
|
return json.Marshal(marshalled)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NonceMapType) UnmarshalJSON(b []byte) error {
|
||||||
|
unmarshalled := make(map[string]uint64)
|
||||||
|
err := json.Unmarshal(b, &unmarshalled)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*n = make(map[address.Address]uint64)
|
||||||
|
for saddr, nonce := range unmarshalled {
|
||||||
|
a, err := address.NewFromString(saddr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
(*n)[a] = nonce
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MsgUuidMapType) MarshalJSON() ([]byte, error) {
|
||||||
|
marshalled := make(map[string]*types.SignedMessage)
|
||||||
|
for u, msg := range *m {
|
||||||
|
marshalled[u.String()] = msg
|
||||||
|
}
|
||||||
|
return json.Marshal(marshalled)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MsgUuidMapType) UnmarshalJSON(b []byte) error {
|
||||||
|
unmarshalled := make(map[string]*types.SignedMessage)
|
||||||
|
err := json.Unmarshal(b, &unmarshalled)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*m = make(map[uuid.UUID]*types.SignedMessage)
|
||||||
|
for suid, msg := range unmarshalled {
|
||||||
|
u, err := uuid.Parse(suid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
(*m)[u] = msg
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChainExportConfig holds configuration for chain ranged exports.
|
||||||
|
type ChainExportConfig struct {
|
||||||
|
WriteBufferSize int
|
||||||
|
NumWorkers int
|
||||||
|
IncludeMessages bool
|
||||||
|
IncludeReceipts bool
|
||||||
|
IncludeStateRoots bool
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package apitypes
|
||||||
|
|
||||||
|
type Aliaser interface {
|
||||||
|
AliasMethod(alias, original string)
|
||||||
|
}
|
||||||
+25
-12
@@ -6,16 +6,17 @@ import (
|
|||||||
blocks "github.com/ipfs/go-block-format"
|
blocks "github.com/ipfs/go-block-format"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
textselector "github.com/ipld/go-ipld-selector-text-lite"
|
textselector "github.com/ipld/go-ipld-selector-text-lite"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-bitfield"
|
"github.com/filecoin-project/go-bitfield"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
|
||||||
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
@@ -140,7 +141,7 @@ type FullNode interface {
|
|||||||
|
|
||||||
// ChainGetPath returns a set of revert/apply operations needed to get from
|
// ChainGetPath returns a set of revert/apply operations needed to get from
|
||||||
// one tipset to another, for example:
|
// one tipset to another, for example:
|
||||||
//```
|
// ```
|
||||||
// to
|
// to
|
||||||
// ^
|
// ^
|
||||||
// from tAA
|
// from tAA
|
||||||
@@ -149,7 +150,7 @@ type FullNode interface {
|
|||||||
// ^---*--^
|
// ^---*--^
|
||||||
// ^
|
// ^
|
||||||
// tRR
|
// tRR
|
||||||
//```
|
// ```
|
||||||
// Would return `[revert(tBA), apply(tAB), apply(tAA)]`
|
// Would return `[revert(tBA), apply(tAB), apply(tAA)]`
|
||||||
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*api.HeadChange, error) //perm:read
|
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*api.HeadChange, error) //perm:read
|
||||||
|
|
||||||
@@ -366,12 +367,12 @@ type FullNode interface {
|
|||||||
ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmarket.DealID) error //perm:write
|
ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmarket.DealID) error //perm:write
|
||||||
|
|
||||||
// ClientUnimport removes references to the specified file from filestore
|
// ClientUnimport removes references to the specified file from filestore
|
||||||
//ClientUnimport(path string)
|
// ClientUnimport(path string)
|
||||||
|
|
||||||
// ClientListImports lists imported files and their root CIDs
|
// ClientListImports lists imported files and their root CIDs
|
||||||
ClientListImports(ctx context.Context) ([]api.Import, error) //perm:write
|
ClientListImports(ctx context.Context) ([]api.Import, error) //perm:write
|
||||||
|
|
||||||
//ClientListAsks() []Ask
|
// ClientListAsks() []Ask
|
||||||
|
|
||||||
// MethodGroup: State
|
// MethodGroup: State
|
||||||
// The State methods are used to query, inspect, and interact with chain state.
|
// The State methods are used to query, inspect, and interact with chain state.
|
||||||
@@ -531,6 +532,16 @@ type FullNode interface {
|
|||||||
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*api.MarketDeal, error) //perm:read
|
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*api.MarketDeal, error) //perm:read
|
||||||
// StateMarketStorageDeal returns information about the indicated deal
|
// StateMarketStorageDeal returns information about the indicated deal
|
||||||
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*api.MarketDeal, error) //perm:read
|
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*api.MarketDeal, error) //perm:read
|
||||||
|
// StateGetAllocationForPendingDeal returns the allocation for a given deal ID of a pending deal.
|
||||||
|
StateGetAllocationForPendingDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetAllocation returns the allocation for a given address and allocation ID.
|
||||||
|
StateGetAllocation(ctx context.Context, clientAddr address.Address, allocationId verifregtypes.AllocationId, tsk types.TipSetKey) (*verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetAllocations returns the all the allocations for a given client.
|
||||||
|
StateGetAllocations(ctx context.Context, clientAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) //perm:read
|
||||||
|
// StateGetClaim returns the claim for a given address and claim ID.
|
||||||
|
StateGetClaim(ctx context.Context, providerAddr address.Address, claimId verifregtypes.ClaimId, tsk types.TipSetKey) (*verifregtypes.Claim, error) //perm:read
|
||||||
|
// StateGetClaims returns the all the claims for a given provider.
|
||||||
|
StateGetClaims(ctx context.Context, providerAddr address.Address, tsk types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) //perm:read
|
||||||
// StateLookupID retrieves the ID address of the given address
|
// StateLookupID retrieves the ID address of the given address
|
||||||
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read
|
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read
|
||||||
// StateAccountKey returns the public key address of the given ID address
|
// StateAccountKey returns the public key address of the given ID address
|
||||||
@@ -591,7 +602,7 @@ type FullNode interface {
|
|||||||
// Returns nil if there is no entry in the data cap table for the
|
// Returns nil if there is no entry in the data cap table for the
|
||||||
// address.
|
// address.
|
||||||
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) //perm:read
|
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) //perm:read
|
||||||
// StateVerifiedClientStatus returns the address of the Verified Registry's root key
|
// StateVerifiedRegistryRootKey returns the address of the Verified Registry's root key
|
||||||
StateVerifiedRegistryRootKey(ctx context.Context, tsk types.TipSetKey) (address.Address, error) //perm:read
|
StateVerifiedRegistryRootKey(ctx context.Context, tsk types.TipSetKey) (address.Address, error) //perm:read
|
||||||
// StateDealProviderCollateralBounds returns the min and max collateral a storage provider
|
// StateDealProviderCollateralBounds returns the min and max collateral a storage provider
|
||||||
// can issue. It takes the deal size and verified status as parameters.
|
// can issue. It takes the deal size and verified status as parameters.
|
||||||
@@ -607,6 +618,8 @@ type FullNode interface {
|
|||||||
StateNetworkVersion(context.Context, types.TipSetKey) (apitypes.NetworkVersion, error) //perm:read
|
StateNetworkVersion(context.Context, types.TipSetKey) (apitypes.NetworkVersion, error) //perm:read
|
||||||
// StateActorCodeCIDs returns the CIDs of all the builtin actors for the given network version
|
// StateActorCodeCIDs returns the CIDs of all the builtin actors for the given network version
|
||||||
StateActorCodeCIDs(context.Context, abinetwork.Version) (map[string]cid.Cid, error) //perm:read
|
StateActorCodeCIDs(context.Context, abinetwork.Version) (map[string]cid.Cid, error) //perm:read
|
||||||
|
// StateActorManifestCID returns the CID of the builtin actors manifest for the given network version
|
||||||
|
StateActorManifestCID(context.Context, abinetwork.Version) (cid.Cid, error) //perm:read
|
||||||
|
|
||||||
// StateGetRandomnessFromTickets is used to sample the chain for randomness.
|
// StateGetRandomnessFromTickets is used to sample the chain for randomness.
|
||||||
StateGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read
|
StateGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read
|
||||||
@@ -628,14 +641,14 @@ type FullNode interface {
|
|||||||
// It takes the following params: <multisig address>, <start epoch>, <end epoch>
|
// It takes the following params: <multisig address>, <start epoch>, <end epoch>
|
||||||
MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) //perm:read
|
MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) //perm:read
|
||||||
|
|
||||||
//MsigGetPending returns pending transactions for the given multisig
|
// MsigGetPending returns pending transactions for the given multisig
|
||||||
//wallet. Once pending transactions are fully approved, they will no longer
|
// wallet. Once pending transactions are fully approved, they will no longer
|
||||||
//appear here.
|
// appear here.
|
||||||
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*api.MsigTransaction, error) //perm:read
|
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*api.MsigTransaction, error) //perm:read
|
||||||
|
|
||||||
// MsigCreate creates a multisig wallet
|
// MsigCreate creates a multisig wallet
|
||||||
// It takes the following params: <required number of senders>, <approving addresses>, <unlock duration>
|
// It takes the following params: <required number of senders>, <approving addresses>, <unlock duration>
|
||||||
//<initial balance>, <sender address of the create msg>, <gas price>
|
// <initial balance>, <sender address of the create msg>, <gas price>
|
||||||
MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error) //perm:sign
|
MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error) //perm:sign
|
||||||
// MsigPropose proposes a multisig message
|
// MsigPropose proposes a multisig message
|
||||||
// It takes the following params: <multisig address>, <recipient address>, <value to transfer>,
|
// It takes the following params: <multisig address>, <recipient address>, <value to transfer>,
|
||||||
|
|||||||
@@ -8,12 +8,13 @@ import (
|
|||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
|
"github.com/filecoin-project/lotus/node/modules/dtypes"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MODIFYING THE API INTERFACE
|
// MODIFYING THE API INTERFACE
|
||||||
@@ -34,6 +35,9 @@ import (
|
|||||||
// * Generate openrpc blobs
|
// * Generate openrpc blobs
|
||||||
|
|
||||||
type Gateway interface {
|
type Gateway interface {
|
||||||
|
StateMinerSectorCount(context.Context, address.Address, types.TipSetKey) (api.MinerSectors, error)
|
||||||
|
GasEstimateGasPremium(context.Context, uint64, address.Address, int64, types.TipSetKey) (types.BigInt, error)
|
||||||
|
StateReplay(context.Context, types.TipSetKey, cid.Cid) (*api.InvocResult, error)
|
||||||
ChainHasObj(context.Context, cid.Cid) (bool, error)
|
ChainHasObj(context.Context, cid.Cid) (bool, error)
|
||||||
ChainPutObj(context.Context, blocks.Block) error
|
ChainPutObj(context.Context, blocks.Block) error
|
||||||
ChainHead(ctx context.Context) (*types.TipSet, error)
|
ChainHead(ctx context.Context) (*types.TipSet, error)
|
||||||
@@ -44,12 +48,15 @@ type Gateway interface {
|
|||||||
ChainNotify(context.Context) (<-chan []*api.HeadChange, error)
|
ChainNotify(context.Context) (<-chan []*api.HeadChange, error)
|
||||||
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
|
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
|
||||||
GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *api.MessageSendSpec, tsk types.TipSetKey) (*types.Message, error)
|
GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *api.MessageSendSpec, tsk types.TipSetKey) (*types.Message, error)
|
||||||
|
MpoolGetNonce(ctx context.Context, addr address.Address) (uint64, error)
|
||||||
MpoolPush(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error)
|
MpoolPush(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error)
|
||||||
MsigGetAvailableBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error)
|
MsigGetAvailableBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error)
|
||||||
MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error)
|
MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error)
|
||||||
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*api.MsigTransaction, error)
|
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*api.MsigTransaction, error)
|
||||||
StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
|
StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
|
||||||
|
StateCall(ctx context.Context, msg *types.Message, tsk types.TipSetKey) (*api.InvocResult, error)
|
||||||
StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (api.DealCollateralBounds, error)
|
StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (api.DealCollateralBounds, error)
|
||||||
|
StateDecodeParams(ctx context.Context, toAddr address.Address, method abi.MethodNum, params []byte, tsk types.TipSetKey) (interface{}, error)
|
||||||
StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error)
|
StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error)
|
||||||
StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error)
|
StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error)
|
||||||
StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error)
|
StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error)
|
||||||
@@ -59,6 +66,7 @@ type Gateway interface {
|
|||||||
StateMinerInfo(ctx context.Context, actor address.Address, tsk types.TipSetKey) (api.MinerInfo, error)
|
StateMinerInfo(ctx context.Context, actor address.Address, tsk types.TipSetKey) (api.MinerInfo, error)
|
||||||
StateMinerProvingDeadline(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*dline.Info, error)
|
StateMinerProvingDeadline(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*dline.Info, error)
|
||||||
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*api.MinerPower, error)
|
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*api.MinerPower, error)
|
||||||
|
StateNetworkName(context.Context) (dtypes.NetworkName, error)
|
||||||
StateNetworkVersion(context.Context, types.TipSetKey) (abinetwork.Version, error)
|
StateNetworkVersion(context.Context, types.TipSetKey) (abinetwork.Version, error)
|
||||||
StateSearchMsg(ctx context.Context, msg cid.Cid) (*api.MsgLookup, error)
|
StateSearchMsg(ctx context.Context, msg cid.Cid) (*api.MsgLookup, error)
|
||||||
StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error)
|
StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error)
|
||||||
|
|||||||
+395
-221
@@ -7,17 +7,18 @@ import (
|
|||||||
|
|
||||||
blocks "github.com/ipfs/go-block-format"
|
blocks "github.com/ipfs/go-block-format"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-bitfield"
|
"github.com/filecoin-project/go-bitfield"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
|
||||||
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifregtypes "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
"github.com/filecoin-project/go-state-types/dline"
|
"github.com/filecoin-project/go-state-types/dline"
|
||||||
abinetwork "github.com/filecoin-project/go-state-types/network"
|
abinetwork "github.com/filecoin-project/go-state-types/network"
|
||||||
@@ -38,371 +39,385 @@ type FullNodeStruct struct {
|
|||||||
|
|
||||||
NetStruct
|
NetStruct
|
||||||
|
|
||||||
Internal struct {
|
Internal FullNodeMethods
|
||||||
BeaconGetEntry func(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) `perm:"read"`
|
}
|
||||||
|
|
||||||
ChainDeleteObj func(p0 context.Context, p1 cid.Cid) error `perm:"admin"`
|
type FullNodeMethods struct {
|
||||||
|
BeaconGetEntry func(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) `perm:"read"`
|
||||||
|
|
||||||
ChainExport func(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 types.TipSetKey) (<-chan []byte, error) `perm:"read"`
|
ChainDeleteObj func(p0 context.Context, p1 cid.Cid) error `perm:"admin"`
|
||||||
|
|
||||||
ChainGetBlock func(p0 context.Context, p1 cid.Cid) (*types.BlockHeader, error) `perm:"read"`
|
ChainExport func(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 types.TipSetKey) (<-chan []byte, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*api.BlockMessages, error) `perm:"read"`
|
ChainGetBlock func(p0 context.Context, p1 cid.Cid) (*types.BlockHeader, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetGenesis func(p0 context.Context) (*types.TipSet, error) `perm:"read"`
|
ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*api.BlockMessages, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*types.Message, error) `perm:"read"`
|
ChainGetGenesis func(p0 context.Context) (*types.TipSet, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetMessagesInTipset func(p0 context.Context, p1 types.TipSetKey) ([]api.Message, error) `perm:"read"`
|
ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*types.Message, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetNode func(p0 context.Context, p1 string) (*api.IpldObject, error) `perm:"read"`
|
ChainGetMessagesInTipset func(p0 context.Context, p1 types.TipSetKey) ([]api.Message, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetParentMessages func(p0 context.Context, p1 cid.Cid) ([]api.Message, error) `perm:"read"`
|
ChainGetNode func(p0 context.Context, p1 string) (*api.IpldObject, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetParentReceipts func(p0 context.Context, p1 cid.Cid) ([]*types.MessageReceipt, error) `perm:"read"`
|
ChainGetParentMessages func(p0 context.Context, p1 cid.Cid) ([]api.Message, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetPath func(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*api.HeadChange, error) `perm:"read"`
|
ChainGetParentReceipts func(p0 context.Context, p1 cid.Cid) ([]*types.MessageReceipt, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetRandomnessFromBeacon func(p0 context.Context, p1 types.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"`
|
ChainGetPath func(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*api.HeadChange, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetRandomnessFromTickets func(p0 context.Context, p1 types.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"`
|
ChainGetRandomnessFromBeacon func(p0 context.Context, p1 types.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetTipSet func(p0 context.Context, p1 types.TipSetKey) (*types.TipSet, error) `perm:"read"`
|
ChainGetRandomnessFromTickets func(p0 context.Context, p1 types.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"`
|
||||||
|
|
||||||
ChainGetTipSetByHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) `perm:"read"`
|
ChainGetTipSet func(p0 context.Context, p1 types.TipSetKey) (*types.TipSet, error) `perm:"read"`
|
||||||
|
|
||||||
ChainHasObj func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"read"`
|
ChainGetTipSetByHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) `perm:"read"`
|
||||||
|
|
||||||
ChainHead func(p0 context.Context) (*types.TipSet, error) `perm:"read"`
|
ChainHasObj func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"read"`
|
||||||
|
|
||||||
ChainNotify func(p0 context.Context) (<-chan []*api.HeadChange, error) `perm:"read"`
|
ChainHead func(p0 context.Context) (*types.TipSet, error) `perm:"read"`
|
||||||
|
|
||||||
ChainPutObj func(p0 context.Context, p1 blocks.Block) error ``
|
ChainNotify func(p0 context.Context) (<-chan []*api.HeadChange, error) `perm:"read"`
|
||||||
|
|
||||||
ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) `perm:"read"`
|
ChainPutObj func(p0 context.Context, p1 blocks.Block) error ``
|
||||||
|
|
||||||
ChainSetHead func(p0 context.Context, p1 types.TipSetKey) error `perm:"admin"`
|
ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) `perm:"read"`
|
||||||
|
|
||||||
ChainStatObj func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (api.ObjStat, error) `perm:"read"`
|
ChainSetHead func(p0 context.Context, p1 types.TipSetKey) error `perm:"admin"`
|
||||||
|
|
||||||
ChainTipSetWeight func(p0 context.Context, p1 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
ChainStatObj func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (api.ObjStat, error) `perm:"read"`
|
||||||
|
|
||||||
ClientCalcCommP func(p0 context.Context, p1 string) (*api.CommPRet, error) `perm:"write"`
|
ChainTipSetWeight func(p0 context.Context, p1 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
ClientCancelDataTransfer func(p0 context.Context, p1 datatransfer.TransferID, p2 peer.ID, p3 bool) error `perm:"write"`
|
ClientCalcCommP func(p0 context.Context, p1 string) (*api.CommPRet, error) `perm:"write"`
|
||||||
|
|
||||||
ClientCancelRetrievalDeal func(p0 context.Context, p1 retrievalmarket.DealID) error `perm:"write"`
|
ClientCancelDataTransfer func(p0 context.Context, p1 datatransfer.TransferID, p2 peer.ID, p3 bool) error `perm:"write"`
|
||||||
|
|
||||||
ClientDataTransferUpdates func(p0 context.Context) (<-chan api.DataTransferChannel, error) `perm:"write"`
|
ClientCancelRetrievalDeal func(p0 context.Context, p1 retrievalmarket.DealID) error `perm:"write"`
|
||||||
|
|
||||||
ClientDealPieceCID func(p0 context.Context, p1 cid.Cid) (api.DataCIDSize, error) `perm:"read"`
|
ClientDataTransferUpdates func(p0 context.Context) (<-chan api.DataTransferChannel, error) `perm:"write"`
|
||||||
|
|
||||||
ClientDealSize func(p0 context.Context, p1 cid.Cid) (api.DataSize, error) `perm:"read"`
|
ClientDealPieceCID func(p0 context.Context, p1 cid.Cid) (api.DataCIDSize, error) `perm:"read"`
|
||||||
|
|
||||||
ClientFindData func(p0 context.Context, p1 cid.Cid, p2 *cid.Cid) ([]api.QueryOffer, error) `perm:"read"`
|
ClientDealSize func(p0 context.Context, p1 cid.Cid) (api.DataSize, error) `perm:"read"`
|
||||||
|
|
||||||
ClientGenCar func(p0 context.Context, p1 api.FileRef, p2 string) error `perm:"write"`
|
ClientFindData func(p0 context.Context, p1 cid.Cid, p2 *cid.Cid) ([]api.QueryOffer, error) `perm:"read"`
|
||||||
|
|
||||||
ClientGetDealInfo func(p0 context.Context, p1 cid.Cid) (*api.DealInfo, error) `perm:"read"`
|
ClientGenCar func(p0 context.Context, p1 api.FileRef, p2 string) error `perm:"write"`
|
||||||
|
|
||||||
ClientGetDealStatus func(p0 context.Context, p1 uint64) (string, error) `perm:"read"`
|
ClientGetDealInfo func(p0 context.Context, p1 cid.Cid) (*api.DealInfo, error) `perm:"read"`
|
||||||
|
|
||||||
ClientGetDealUpdates func(p0 context.Context) (<-chan api.DealInfo, error) `perm:"write"`
|
ClientGetDealStatus func(p0 context.Context, p1 uint64) (string, error) `perm:"read"`
|
||||||
|
|
||||||
ClientGetRetrievalUpdates func(p0 context.Context) (<-chan api.RetrievalInfo, error) `perm:"write"`
|
ClientGetDealUpdates func(p0 context.Context) (<-chan api.DealInfo, error) `perm:"write"`
|
||||||
|
|
||||||
ClientHasLocal func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"write"`
|
ClientGetRetrievalUpdates func(p0 context.Context) (<-chan api.RetrievalInfo, error) `perm:"write"`
|
||||||
|
|
||||||
ClientImport func(p0 context.Context, p1 api.FileRef) (*api.ImportRes, error) `perm:"admin"`
|
ClientHasLocal func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"write"`
|
||||||
|
|
||||||
ClientListDataTransfers func(p0 context.Context) ([]api.DataTransferChannel, error) `perm:"write"`
|
ClientImport func(p0 context.Context, p1 api.FileRef) (*api.ImportRes, error) `perm:"admin"`
|
||||||
|
|
||||||
ClientListDeals func(p0 context.Context) ([]api.DealInfo, error) `perm:"write"`
|
ClientListDataTransfers func(p0 context.Context) ([]api.DataTransferChannel, error) `perm:"write"`
|
||||||
|
|
||||||
ClientListImports func(p0 context.Context) ([]api.Import, error) `perm:"write"`
|
ClientListDeals func(p0 context.Context) ([]api.DealInfo, error) `perm:"write"`
|
||||||
|
|
||||||
ClientListRetrievals func(p0 context.Context) ([]api.RetrievalInfo, error) `perm:"write"`
|
ClientListImports func(p0 context.Context) ([]api.Import, error) `perm:"write"`
|
||||||
|
|
||||||
ClientMinerQueryOffer func(p0 context.Context, p1 address.Address, p2 cid.Cid, p3 *cid.Cid) (api.QueryOffer, error) `perm:"read"`
|
ClientListRetrievals func(p0 context.Context) ([]api.RetrievalInfo, error) `perm:"write"`
|
||||||
|
|
||||||
ClientQueryAsk func(p0 context.Context, p1 peer.ID, p2 address.Address) (*storagemarket.StorageAsk, error) `perm:"read"`
|
ClientMinerQueryOffer func(p0 context.Context, p1 address.Address, p2 cid.Cid, p3 *cid.Cid) (api.QueryOffer, error) `perm:"read"`
|
||||||
|
|
||||||
ClientRemoveImport func(p0 context.Context, p1 imports.ID) error `perm:"admin"`
|
ClientQueryAsk func(p0 context.Context, p1 peer.ID, p2 address.Address) (*storagemarket.StorageAsk, error) `perm:"read"`
|
||||||
|
|
||||||
ClientRestartDataTransfer func(p0 context.Context, p1 datatransfer.TransferID, p2 peer.ID, p3 bool) error `perm:"write"`
|
ClientRemoveImport func(p0 context.Context, p1 imports.ID) error `perm:"admin"`
|
||||||
|
|
||||||
ClientRetrieve func(p0 context.Context, p1 RetrievalOrder, p2 *api.FileRef) error `perm:"admin"`
|
ClientRestartDataTransfer func(p0 context.Context, p1 datatransfer.TransferID, p2 peer.ID, p3 bool) error `perm:"write"`
|
||||||
|
|
||||||
ClientRetrieveTryRestartInsufficientFunds func(p0 context.Context, p1 address.Address) error `perm:"write"`
|
ClientRetrieve func(p0 context.Context, p1 RetrievalOrder, p2 *api.FileRef) error `perm:"admin"`
|
||||||
|
|
||||||
ClientRetrieveWithEvents func(p0 context.Context, p1 RetrievalOrder, p2 *api.FileRef) (<-chan marketevents.RetrievalEvent, error) `perm:"admin"`
|
ClientRetrieveTryRestartInsufficientFunds func(p0 context.Context, p1 address.Address) error `perm:"write"`
|
||||||
|
|
||||||
ClientStartDeal func(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) `perm:"admin"`
|
ClientRetrieveWithEvents func(p0 context.Context, p1 RetrievalOrder, p2 *api.FileRef) (<-chan marketevents.RetrievalEvent, error) `perm:"admin"`
|
||||||
|
|
||||||
ClientStatelessDeal func(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) `perm:"write"`
|
ClientStartDeal func(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) `perm:"admin"`
|
||||||
|
|
||||||
CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"`
|
ClientStatelessDeal func(p0 context.Context, p1 *api.StartDealParams) (*cid.Cid, error) `perm:"write"`
|
||||||
|
|
||||||
GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
CreateBackup func(p0 context.Context, p1 string) error `perm:"admin"`
|
||||||
|
|
||||||
GasEstimateGasLimit func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (int64, error) `perm:"read"`
|
GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
GasEstimateGasPremium func(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
GasEstimateGasLimit func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (int64, error) `perm:"read"`
|
||||||
|
|
||||||
GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `perm:"read"`
|
GasEstimateGasPremium func(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
MarketAddBalance func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"`
|
GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `perm:"read"`
|
||||||
|
|
||||||
MarketGetReserved func(p0 context.Context, p1 address.Address) (types.BigInt, error) `perm:"sign"`
|
MarketAddBalance func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MarketReleaseFunds func(p0 context.Context, p1 address.Address, p2 types.BigInt) error `perm:"sign"`
|
MarketGetReserved func(p0 context.Context, p1 address.Address) (types.BigInt, error) `perm:"sign"`
|
||||||
|
|
||||||
MarketReserveFunds func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"`
|
MarketReleaseFunds func(p0 context.Context, p1 address.Address, p2 types.BigInt) error `perm:"sign"`
|
||||||
|
|
||||||
MarketWithdraw func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"`
|
MarketReserveFunds func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MinerCreateBlock func(p0 context.Context, p1 *api.BlockTemplate) (*types.BlockMsg, error) `perm:"write"`
|
MarketWithdraw func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*api.MiningBaseInfo, error) `perm:"read"`
|
MinerCreateBlock func(p0 context.Context, p1 *api.BlockTemplate) (*types.BlockMsg, error) `perm:"write"`
|
||||||
|
|
||||||
MpoolBatchPush func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"`
|
MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*api.MiningBaseInfo, error) `perm:"read"`
|
||||||
|
|
||||||
MpoolBatchPushMessage func(p0 context.Context, p1 []*types.Message, p2 *api.MessageSendSpec) ([]*types.SignedMessage, error) `perm:"sign"`
|
MpoolBatchPush func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"`
|
||||||
|
|
||||||
MpoolBatchPushUntrusted func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"`
|
MpoolBatchPushMessage func(p0 context.Context, p1 []*types.Message, p2 *api.MessageSendSpec) ([]*types.SignedMessage, error) `perm:"sign"`
|
||||||
|
|
||||||
MpoolClear func(p0 context.Context, p1 bool) error `perm:"write"`
|
MpoolBatchPushUntrusted func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"`
|
||||||
|
|
||||||
MpoolGetConfig func(p0 context.Context) (*types.MpoolConfig, error) `perm:"read"`
|
MpoolClear func(p0 context.Context, p1 bool) error `perm:"write"`
|
||||||
|
|
||||||
MpoolGetNonce func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"read"`
|
MpoolGetConfig func(p0 context.Context) (*types.MpoolConfig, error) `perm:"read"`
|
||||||
|
|
||||||
MpoolPending func(p0 context.Context, p1 types.TipSetKey) ([]*types.SignedMessage, error) `perm:"read"`
|
MpoolGetNonce func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"read"`
|
||||||
|
|
||||||
MpoolPush func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"`
|
MpoolPending func(p0 context.Context, p1 types.TipSetKey) ([]*types.SignedMessage, error) `perm:"read"`
|
||||||
|
|
||||||
MpoolPushMessage func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec) (*types.SignedMessage, error) `perm:"sign"`
|
MpoolPush func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"`
|
||||||
|
|
||||||
MpoolPushUntrusted func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"`
|
MpoolPushMessage func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec) (*types.SignedMessage, error) `perm:"sign"`
|
||||||
|
|
||||||
MpoolSelect func(p0 context.Context, p1 types.TipSetKey, p2 float64) ([]*types.SignedMessage, error) `perm:"read"`
|
MpoolPushUntrusted func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"`
|
||||||
|
|
||||||
MpoolSetConfig func(p0 context.Context, p1 *types.MpoolConfig) error `perm:"admin"`
|
MpoolSelect func(p0 context.Context, p1 types.TipSetKey, p2 float64) ([]*types.SignedMessage, error) `perm:"read"`
|
||||||
|
|
||||||
MpoolSub func(p0 context.Context) (<-chan api.MpoolUpdate, error) `perm:"read"`
|
MpoolSetConfig func(p0 context.Context, p1 *types.MpoolConfig) error `perm:"admin"`
|
||||||
|
|
||||||
MsigAddApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (cid.Cid, error) `perm:"sign"`
|
MpoolSub func(p0 context.Context) (<-chan api.MpoolUpdate, error) `perm:"read"`
|
||||||
|
|
||||||
MsigAddCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (cid.Cid, error) `perm:"sign"`
|
MsigAddApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigAddPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) `perm:"sign"`
|
MsigAddCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigApprove func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (cid.Cid, error) `perm:"sign"`
|
MsigAddPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigApproveTxnHash func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (cid.Cid, error) `perm:"sign"`
|
MsigApprove func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigCancel func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) `perm:"sign"`
|
MsigApproveTxnHash func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigCreate func(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (cid.Cid, error) `perm:"sign"`
|
MsigCancel func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigGetAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
MsigCreate func(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigGetPending func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*api.MsigTransaction, error) `perm:"read"`
|
MsigGetAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
MsigGetVested func(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
MsigGetPending func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*api.MsigTransaction, error) `perm:"read"`
|
||||||
|
|
||||||
MsigGetVestingSchedule func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MsigVesting, error) `perm:"read"`
|
MsigGetVested func(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
MsigPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) `perm:"sign"`
|
MsigGetVestingSchedule func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MsigVesting, error) `perm:"read"`
|
||||||
|
|
||||||
MsigRemoveSigner func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) `perm:"sign"`
|
MsigPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigSwapApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (cid.Cid, error) `perm:"sign"`
|
MsigRemoveSigner func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigSwapCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (cid.Cid, error) `perm:"sign"`
|
MsigSwapApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
MsigSwapPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (cid.Cid, error) `perm:"sign"`
|
MsigSwapCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychAllocateLane func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"sign"`
|
MsigSwapPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychAvailableFunds func(p0 context.Context, p1 address.Address) (*api.ChannelAvailableFunds, error) `perm:"sign"`
|
PaychAllocateLane func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychAvailableFundsByFromTo func(p0 context.Context, p1 address.Address, p2 address.Address) (*api.ChannelAvailableFunds, error) `perm:"sign"`
|
PaychAvailableFunds func(p0 context.Context, p1 address.Address) (*api.ChannelAvailableFunds, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychCollect func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"`
|
PaychAvailableFundsByFromTo func(p0 context.Context, p1 address.Address, p2 address.Address) (*api.ChannelAvailableFunds, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychGet func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (*api.ChannelInfo, error) `perm:"sign"`
|
PaychCollect func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychGetWaitReady func(p0 context.Context, p1 cid.Cid) (address.Address, error) `perm:"sign"`
|
PaychGet func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt) (*api.ChannelInfo, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychList func(p0 context.Context) ([]address.Address, error) `perm:"read"`
|
PaychGetWaitReady func(p0 context.Context, p1 cid.Cid) (address.Address, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychNewPayment func(p0 context.Context, p1 address.Address, p2 address.Address, p3 []api.VoucherSpec) (*api.PaymentInfo, error) `perm:"sign"`
|
PaychList func(p0 context.Context) ([]address.Address, error) `perm:"read"`
|
||||||
|
|
||||||
PaychSettle func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"`
|
PaychNewPayment func(p0 context.Context, p1 address.Address, p2 address.Address, p3 []api.VoucherSpec) (*api.PaymentInfo, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychStatus func(p0 context.Context, p1 address.Address) (*api.PaychStatus, error) `perm:"read"`
|
PaychSettle func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychVoucherAdd func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 types.BigInt) (types.BigInt, error) `perm:"write"`
|
PaychStatus func(p0 context.Context, p1 address.Address) (*api.PaychStatus, error) `perm:"read"`
|
||||||
|
|
||||||
PaychVoucherCheckSpendable func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) `perm:"read"`
|
PaychVoucherAdd func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 types.BigInt) (types.BigInt, error) `perm:"write"`
|
||||||
|
|
||||||
PaychVoucherCheckValid func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error `perm:"read"`
|
PaychVoucherCheckSpendable func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) `perm:"read"`
|
||||||
|
|
||||||
PaychVoucherCreate func(p0 context.Context, p1 address.Address, p2 types.BigInt, p3 uint64) (*api.VoucherCreateResult, error) `perm:"sign"`
|
PaychVoucherCheckValid func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error `perm:"read"`
|
||||||
|
|
||||||
PaychVoucherList func(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) `perm:"write"`
|
PaychVoucherCreate func(p0 context.Context, p1 address.Address, p2 types.BigInt, p3 uint64) (*api.VoucherCreateResult, error) `perm:"sign"`
|
||||||
|
|
||||||
PaychVoucherSubmit func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) `perm:"sign"`
|
PaychVoucherList func(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) `perm:"write"`
|
||||||
|
|
||||||
StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"`
|
PaychVoucherSubmit func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) `perm:"sign"`
|
||||||
|
|
||||||
StateActorCodeCIDs func(p0 context.Context, p1 abinetwork.Version) (map[string]cid.Cid, error) `perm:"read"`
|
StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"`
|
||||||
|
|
||||||
StateAllMinerFaults func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) ([]*api.Fault, error) `perm:"read"`
|
StateActorCodeCIDs func(p0 context.Context, p1 abinetwork.Version) (map[string]cid.Cid, error) `perm:"read"`
|
||||||
|
|
||||||
StateCall func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*api.InvocResult, error) `perm:"read"`
|
StateActorManifestCID func(p0 context.Context, p1 abinetwork.Version) (cid.Cid, error) `perm:"read"`
|
||||||
|
|
||||||
StateChangedActors func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (map[string]types.Actor, error) `perm:"read"`
|
StateAllMinerFaults func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) ([]*api.Fault, error) `perm:"read"`
|
||||||
|
|
||||||
StateCirculatingSupply func(p0 context.Context, p1 types.TipSetKey) (abi.TokenAmount, error) `perm:"read"`
|
StateCall func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*api.InvocResult, error) `perm:"read"`
|
||||||
|
|
||||||
StateCompute func(p0 context.Context, p1 abi.ChainEpoch, p2 []*types.Message, p3 types.TipSetKey) (*api.ComputeStateOutput, error) `perm:"read"`
|
StateChangedActors func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (map[string]types.Actor, error) `perm:"read"`
|
||||||
|
|
||||||
StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) `perm:"read"`
|
StateCirculatingSupply func(p0 context.Context, p1 types.TipSetKey) (abi.TokenAmount, error) `perm:"read"`
|
||||||
|
|
||||||
StateDecodeParams func(p0 context.Context, p1 address.Address, p2 abi.MethodNum, p3 []byte, p4 types.TipSetKey) (interface{}, error) `perm:"read"`
|
StateCompute func(p0 context.Context, p1 abi.ChainEpoch, p2 []*types.Message, p3 types.TipSetKey) (*api.ComputeStateOutput, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"`
|
StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetNetworkParams func(p0 context.Context) (*api.NetworkParams, error) `perm:"read"`
|
StateDecodeParams func(p0 context.Context, p1 address.Address, p2 abi.MethodNum, p3 []byte, p4 types.TipSetKey) (interface{}, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"`
|
StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetRandomnessFromTickets func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"`
|
StateGetAllocation func(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
StateGetReceipt func(p0 context.Context, p1 cid.Cid, p2 types.TipSetKey) (*types.MessageReceipt, error) `perm:"read"`
|
StateGetAllocationForPendingDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
StateListActors func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"`
|
StateGetAllocations func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) `perm:"read"`
|
||||||
|
|
||||||
StateListMessages func(p0 context.Context, p1 *api.MessageMatch, p2 types.TipSetKey, p3 abi.ChainEpoch) ([]cid.Cid, error) `perm:"read"`
|
StateGetClaim func(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) `perm:"read"`
|
||||||
|
|
||||||
StateListMiners func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"`
|
StateGetClaims func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) `perm:"read"`
|
||||||
|
|
||||||
StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"`
|
StateGetNetworkParams func(p0 context.Context) (*api.NetworkParams, error) `perm:"read"`
|
||||||
|
|
||||||
StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MarketBalance, error) `perm:"read"`
|
StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"`
|
||||||
|
|
||||||
StateMarketDeals func(p0 context.Context, p1 types.TipSetKey) (map[string]*api.MarketDeal, error) `perm:"read"`
|
StateGetRandomnessFromTickets func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"`
|
||||||
|
|
||||||
StateMarketParticipants func(p0 context.Context, p1 types.TipSetKey) (map[string]api.MarketBalance, error) `perm:"read"`
|
StateGetReceipt func(p0 context.Context, p1 cid.Cid, p2 types.TipSetKey) (*types.MessageReceipt, error) `perm:"read"`
|
||||||
|
|
||||||
StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*api.MarketDeal, error) `perm:"read"`
|
StateListActors func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerActiveSectors func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"`
|
StateListMessages func(p0 context.Context, p1 *api.MessageMatch, p2 types.TipSetKey, p3 abi.ChainEpoch) ([]cid.Cid, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
StateListMiners func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerDeadlines func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]api.Deadline, error) `perm:"read"`
|
StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerFaults func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"`
|
StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MarketBalance, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerInfo func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerInfo, error) `perm:"read"`
|
StateMarketDeals func(p0 context.Context, p1 types.TipSetKey) (map[string]*api.MarketDeal, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerInitialPledgeCollateral func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
StateMarketParticipants func(p0 context.Context, p1 types.TipSetKey) (map[string]api.MarketBalance, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerPartitions func(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]api.Partition, error) `perm:"read"`
|
StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*api.MarketDeal, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.MinerPower, error) `perm:"read"`
|
StateMinerActiveSectors func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerPreCommitDepositForPower func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
StateMinerAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) `perm:"read"`
|
StateMinerDeadlines func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]api.Deadline, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerRecoveries func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"`
|
StateMinerFaults func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerSectorAllocated func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (bool, error) `perm:"read"`
|
StateMinerInfo func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerInfo, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerSectors, error) `perm:"read"`
|
StateMinerInitialPledgeCollateral func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
StateMinerSectors func(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"`
|
StateMinerPartitions func(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]api.Partition, error) `perm:"read"`
|
||||||
|
|
||||||
StateNetworkName func(p0 context.Context) (dtypes.NetworkName, error) `perm:"read"`
|
StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.MinerPower, error) `perm:"read"`
|
||||||
|
|
||||||
StateNetworkVersion func(p0 context.Context, p1 types.TipSetKey) (apitypes.NetworkVersion, error) `perm:"read"`
|
StateMinerPreCommitDepositForPower func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
StateReadState func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.ActorState, error) `perm:"read"`
|
StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) `perm:"read"`
|
||||||
|
|
||||||
StateReplay func(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*api.InvocResult, error) `perm:"read"`
|
StateMinerRecoveries func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"`
|
||||||
|
|
||||||
StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) `perm:"read"`
|
StateMinerSectorAllocated func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (bool, error) `perm:"read"`
|
||||||
|
|
||||||
StateSearchMsgLimited func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*api.MsgLookup, error) `perm:"read"`
|
StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerSectors, error) `perm:"read"`
|
||||||
|
|
||||||
StateSectorExpiration func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*lminer.SectorExpiration, error) `perm:"read"`
|
StateMinerSectors func(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"`
|
||||||
|
|
||||||
StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) `perm:"read"`
|
StateNetworkName func(p0 context.Context) (dtypes.NetworkName, error) `perm:"read"`
|
||||||
|
|
||||||
StateSectorPartition func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*lminer.SectorLocation, error) `perm:"read"`
|
StateNetworkVersion func(p0 context.Context, p1 types.TipSetKey) (apitypes.NetworkVersion, error) `perm:"read"`
|
||||||
|
|
||||||
StateSectorPreCommitInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) `perm:"read"`
|
StateReadState func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.ActorState, error) `perm:"read"`
|
||||||
|
|
||||||
StateVMCirculatingSupplyInternal func(p0 context.Context, p1 types.TipSetKey) (api.CirculatingSupply, error) `perm:"read"`
|
StateReplay func(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*api.InvocResult, error) `perm:"read"`
|
||||||
|
|
||||||
StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"`
|
StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) `perm:"read"`
|
||||||
|
|
||||||
StateVerifiedRegistryRootKey func(p0 context.Context, p1 types.TipSetKey) (address.Address, error) `perm:"read"`
|
StateSearchMsgLimited func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*api.MsgLookup, error) `perm:"read"`
|
||||||
|
|
||||||
StateVerifierStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"`
|
StateSectorExpiration func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*lminer.SectorExpiration, error) `perm:"read"`
|
||||||
|
|
||||||
StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*api.MsgLookup, error) `perm:"read"`
|
StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) `perm:"read"`
|
||||||
|
|
||||||
StateWaitMsgLimited func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*api.MsgLookup, error) `perm:"read"`
|
StateSectorPartition func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*lminer.SectorLocation, error) `perm:"read"`
|
||||||
|
|
||||||
SyncCheckBad func(p0 context.Context, p1 cid.Cid) (string, error) `perm:"read"`
|
StateSectorPreCommitInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) `perm:"read"`
|
||||||
|
|
||||||
SyncCheckpoint func(p0 context.Context, p1 types.TipSetKey) error `perm:"admin"`
|
StateVMCirculatingSupplyInternal func(p0 context.Context, p1 types.TipSetKey) (api.CirculatingSupply, error) `perm:"read"`
|
||||||
|
|
||||||
SyncIncomingBlocks func(p0 context.Context) (<-chan *types.BlockHeader, error) `perm:"read"`
|
StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"`
|
||||||
|
|
||||||
SyncMarkBad func(p0 context.Context, p1 cid.Cid) error `perm:"admin"`
|
StateVerifiedRegistryRootKey func(p0 context.Context, p1 types.TipSetKey) (address.Address, error) `perm:"read"`
|
||||||
|
|
||||||
SyncState func(p0 context.Context) (*api.SyncState, error) `perm:"read"`
|
StateVerifierStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"`
|
||||||
|
|
||||||
SyncSubmitBlock func(p0 context.Context, p1 *types.BlockMsg) error `perm:"write"`
|
StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*api.MsgLookup, error) `perm:"read"`
|
||||||
|
|
||||||
SyncUnmarkAllBad func(p0 context.Context) error `perm:"admin"`
|
StateWaitMsgLimited func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*api.MsgLookup, error) `perm:"read"`
|
||||||
|
|
||||||
SyncUnmarkBad func(p0 context.Context, p1 cid.Cid) error `perm:"admin"`
|
SyncCheckBad func(p0 context.Context, p1 cid.Cid) (string, error) `perm:"read"`
|
||||||
|
|
||||||
SyncValidateTipset func(p0 context.Context, p1 types.TipSetKey) (bool, error) `perm:"read"`
|
SyncCheckpoint func(p0 context.Context, p1 types.TipSetKey) error `perm:"admin"`
|
||||||
|
|
||||||
WalletBalance func(p0 context.Context, p1 address.Address) (types.BigInt, error) `perm:"read"`
|
SyncIncomingBlocks func(p0 context.Context) (<-chan *types.BlockHeader, error) `perm:"read"`
|
||||||
|
|
||||||
WalletDefaultAddress func(p0 context.Context) (address.Address, error) `perm:"write"`
|
SyncMarkBad func(p0 context.Context, p1 cid.Cid) error `perm:"admin"`
|
||||||
|
|
||||||
WalletDelete func(p0 context.Context, p1 address.Address) error `perm:"admin"`
|
SyncState func(p0 context.Context) (*api.SyncState, error) `perm:"read"`
|
||||||
|
|
||||||
WalletExport func(p0 context.Context, p1 address.Address) (*types.KeyInfo, error) `perm:"admin"`
|
SyncSubmitBlock func(p0 context.Context, p1 *types.BlockMsg) error `perm:"write"`
|
||||||
|
|
||||||
WalletHas func(p0 context.Context, p1 address.Address) (bool, error) `perm:"write"`
|
SyncUnmarkAllBad func(p0 context.Context) error `perm:"admin"`
|
||||||
|
|
||||||
WalletImport func(p0 context.Context, p1 *types.KeyInfo) (address.Address, error) `perm:"admin"`
|
SyncUnmarkBad func(p0 context.Context, p1 cid.Cid) error `perm:"admin"`
|
||||||
|
|
||||||
WalletList func(p0 context.Context) ([]address.Address, error) `perm:"write"`
|
SyncValidateTipset func(p0 context.Context, p1 types.TipSetKey) (bool, error) `perm:"read"`
|
||||||
|
|
||||||
WalletNew func(p0 context.Context, p1 types.KeyType) (address.Address, error) `perm:"write"`
|
WalletBalance func(p0 context.Context, p1 address.Address) (types.BigInt, error) `perm:"read"`
|
||||||
|
|
||||||
WalletSetDefault func(p0 context.Context, p1 address.Address) error `perm:"write"`
|
WalletDefaultAddress func(p0 context.Context) (address.Address, error) `perm:"write"`
|
||||||
|
|
||||||
WalletSign func(p0 context.Context, p1 address.Address, p2 []byte) (*crypto.Signature, error) `perm:"sign"`
|
WalletDelete func(p0 context.Context, p1 address.Address) error `perm:"admin"`
|
||||||
|
|
||||||
WalletSignMessage func(p0 context.Context, p1 address.Address, p2 *types.Message) (*types.SignedMessage, error) `perm:"sign"`
|
WalletExport func(p0 context.Context, p1 address.Address) (*types.KeyInfo, error) `perm:"admin"`
|
||||||
|
|
||||||
WalletValidateAddress func(p0 context.Context, p1 string) (address.Address, error) `perm:"read"`
|
WalletHas func(p0 context.Context, p1 address.Address) (bool, error) `perm:"write"`
|
||||||
|
|
||||||
WalletVerify func(p0 context.Context, p1 address.Address, p2 []byte, p3 *crypto.Signature) (bool, error) `perm:"read"`
|
WalletImport func(p0 context.Context, p1 *types.KeyInfo) (address.Address, error) `perm:"admin"`
|
||||||
}
|
|
||||||
|
WalletList func(p0 context.Context) ([]address.Address, error) `perm:"write"`
|
||||||
|
|
||||||
|
WalletNew func(p0 context.Context, p1 types.KeyType) (address.Address, error) `perm:"write"`
|
||||||
|
|
||||||
|
WalletSetDefault func(p0 context.Context, p1 address.Address) error `perm:"write"`
|
||||||
|
|
||||||
|
WalletSign func(p0 context.Context, p1 address.Address, p2 []byte) (*crypto.Signature, error) `perm:"sign"`
|
||||||
|
|
||||||
|
WalletSignMessage func(p0 context.Context, p1 address.Address, p2 *types.Message) (*types.SignedMessage, error) `perm:"sign"`
|
||||||
|
|
||||||
|
WalletValidateAddress func(p0 context.Context, p1 string) (address.Address, error) `perm:"read"`
|
||||||
|
|
||||||
|
WalletVerify func(p0 context.Context, p1 address.Address, p2 []byte, p3 *crypto.Signature) (bool, error) `perm:"read"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type FullNodeStub struct {
|
type FullNodeStub struct {
|
||||||
@@ -412,71 +427,87 @@ type FullNodeStub struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type GatewayStruct struct {
|
type GatewayStruct struct {
|
||||||
Internal struct {
|
Internal GatewayMethods
|
||||||
ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*api.BlockMessages, error) ``
|
}
|
||||||
|
|
||||||
ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*types.Message, error) ``
|
type GatewayMethods struct {
|
||||||
|
ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*api.BlockMessages, error) ``
|
||||||
|
|
||||||
ChainGetTipSet func(p0 context.Context, p1 types.TipSetKey) (*types.TipSet, error) ``
|
ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*types.Message, error) ``
|
||||||
|
|
||||||
ChainGetTipSetByHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) ``
|
ChainGetTipSet func(p0 context.Context, p1 types.TipSetKey) (*types.TipSet, error) ``
|
||||||
|
|
||||||
ChainHasObj func(p0 context.Context, p1 cid.Cid) (bool, error) ``
|
ChainGetTipSetByHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) ``
|
||||||
|
|
||||||
ChainHead func(p0 context.Context) (*types.TipSet, error) ``
|
ChainHasObj func(p0 context.Context, p1 cid.Cid) (bool, error) ``
|
||||||
|
|
||||||
ChainNotify func(p0 context.Context) (<-chan []*api.HeadChange, error) ``
|
ChainHead func(p0 context.Context) (*types.TipSet, error) ``
|
||||||
|
|
||||||
ChainPutObj func(p0 context.Context, p1 blocks.Block) error ``
|
ChainNotify func(p0 context.Context) (<-chan []*api.HeadChange, error) ``
|
||||||
|
|
||||||
ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) ``
|
ChainPutObj func(p0 context.Context, p1 blocks.Block) error ``
|
||||||
|
|
||||||
GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) ``
|
ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) ``
|
||||||
|
|
||||||
MpoolPush func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) ``
|
GasEstimateGasPremium func(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (types.BigInt, error) ``
|
||||||
|
|
||||||
MsigGetAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) ``
|
GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) ``
|
||||||
|
|
||||||
MsigGetPending func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*api.MsigTransaction, error) ``
|
MpoolGetNonce func(p0 context.Context, p1 address.Address) (uint64, error) ``
|
||||||
|
|
||||||
MsigGetVested func(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) ``
|
MpoolPush func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) ``
|
||||||
|
|
||||||
StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) ``
|
MsigGetAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (types.BigInt, error) ``
|
||||||
|
|
||||||
StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) ``
|
MsigGetPending func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*api.MsigTransaction, error) ``
|
||||||
|
|
||||||
StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) ``
|
MsigGetVested func(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) ``
|
||||||
|
|
||||||
StateGetReceipt func(p0 context.Context, p1 cid.Cid, p2 types.TipSetKey) (*types.MessageReceipt, error) ``
|
StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) ``
|
||||||
|
|
||||||
StateListMiners func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) ``
|
StateCall func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*api.InvocResult, error) ``
|
||||||
|
|
||||||
StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) ``
|
StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) ``
|
||||||
|
|
||||||
StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MarketBalance, error) ``
|
StateDecodeParams func(p0 context.Context, p1 address.Address, p2 abi.MethodNum, p3 []byte, p4 types.TipSetKey) (interface{}, error) ``
|
||||||
|
|
||||||
StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*api.MarketDeal, error) ``
|
StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) ``
|
||||||
|
|
||||||
StateMinerInfo func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerInfo, error) ``
|
StateGetReceipt func(p0 context.Context, p1 cid.Cid, p2 types.TipSetKey) (*types.MessageReceipt, error) ``
|
||||||
|
|
||||||
StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.MinerPower, error) ``
|
StateListMiners func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) ``
|
||||||
|
|
||||||
StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) ``
|
StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) ``
|
||||||
|
|
||||||
StateNetworkVersion func(p0 context.Context, p1 types.TipSetKey) (abinetwork.Version, error) ``
|
StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MarketBalance, error) ``
|
||||||
|
|
||||||
StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) ``
|
StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*api.MarketDeal, error) ``
|
||||||
|
|
||||||
StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) ``
|
StateMinerInfo func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerInfo, error) ``
|
||||||
|
|
||||||
StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) ``
|
StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*api.MinerPower, error) ``
|
||||||
|
|
||||||
StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*api.MsgLookup, error) ``
|
StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) ``
|
||||||
|
|
||||||
Version func(p0 context.Context) (api.APIVersion, error) ``
|
StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerSectors, error) ``
|
||||||
|
|
||||||
WalletBalance func(p0 context.Context, p1 address.Address) (types.BigInt, error) ``
|
StateNetworkName func(p0 context.Context) (dtypes.NetworkName, error) ``
|
||||||
}
|
|
||||||
|
StateNetworkVersion func(p0 context.Context, p1 types.TipSetKey) (abinetwork.Version, error) ``
|
||||||
|
|
||||||
|
StateReplay func(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*api.InvocResult, error) ``
|
||||||
|
|
||||||
|
StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) ``
|
||||||
|
|
||||||
|
StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) ``
|
||||||
|
|
||||||
|
StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) ``
|
||||||
|
|
||||||
|
StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*api.MsgLookup, error) ``
|
||||||
|
|
||||||
|
Version func(p0 context.Context) (api.APIVersion, error) ``
|
||||||
|
|
||||||
|
WalletBalance func(p0 context.Context, p1 address.Address) (types.BigInt, error) ``
|
||||||
}
|
}
|
||||||
|
|
||||||
type GatewayStub struct {
|
type GatewayStub struct {
|
||||||
@@ -1692,6 +1723,17 @@ func (s *FullNodeStub) StateActorCodeCIDs(p0 context.Context, p1 abinetwork.Vers
|
|||||||
return *new(map[string]cid.Cid), ErrNotSupported
|
return *new(map[string]cid.Cid), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateActorManifestCID(p0 context.Context, p1 abinetwork.Version) (cid.Cid, error) {
|
||||||
|
if s.Internal.StateActorManifestCID == nil {
|
||||||
|
return *new(cid.Cid), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateActorManifestCID(p0, p1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateActorManifestCID(p0 context.Context, p1 abinetwork.Version) (cid.Cid, error) {
|
||||||
|
return *new(cid.Cid), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) StateAllMinerFaults(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) ([]*api.Fault, error) {
|
func (s *FullNodeStruct) StateAllMinerFaults(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) ([]*api.Fault, error) {
|
||||||
if s.Internal.StateAllMinerFaults == nil {
|
if s.Internal.StateAllMinerFaults == nil {
|
||||||
return *new([]*api.Fault), ErrNotSupported
|
return *new([]*api.Fault), ErrNotSupported
|
||||||
@@ -1780,6 +1822,61 @@ func (s *FullNodeStub) StateGetActor(p0 context.Context, p1 address.Address, p2
|
|||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocation == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocation(p0, p1, p2, p3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocation(p0 context.Context, p1 address.Address, p2 verifregtypes.AllocationId, p3 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocationForPendingDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocationForPendingDeal == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocationForPendingDeal(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocationForPendingDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*verifregtypes.Allocation, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetAllocations(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) {
|
||||||
|
if s.Internal.StateGetAllocations == nil {
|
||||||
|
return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetAllocations(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetAllocations(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.AllocationId]verifregtypes.Allocation, error) {
|
||||||
|
return *new(map[verifregtypes.AllocationId]verifregtypes.Allocation), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetClaim(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) {
|
||||||
|
if s.Internal.StateGetClaim == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetClaim(p0, p1, p2, p3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetClaim(p0 context.Context, p1 address.Address, p2 verifregtypes.ClaimId, p3 types.TipSetKey) (*verifregtypes.Claim, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStruct) StateGetClaims(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) {
|
||||||
|
if s.Internal.StateGetClaims == nil {
|
||||||
|
return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateGetClaims(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *FullNodeStub) StateGetClaims(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (map[verifregtypes.ClaimId]verifregtypes.Claim, error) {
|
||||||
|
return *new(map[verifregtypes.ClaimId]verifregtypes.Claim), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*api.NetworkParams, error) {
|
func (s *FullNodeStruct) StateGetNetworkParams(p0 context.Context) (*api.NetworkParams, error) {
|
||||||
if s.Internal.StateGetNetworkParams == nil {
|
if s.Internal.StateGetNetworkParams == nil {
|
||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
@@ -2583,6 +2680,17 @@ func (s *GatewayStub) ChainReadObj(p0 context.Context, p1 cid.Cid) ([]byte, erro
|
|||||||
return *new([]byte), ErrNotSupported
|
return *new([]byte), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStruct) GasEstimateGasPremium(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (types.BigInt, error) {
|
||||||
|
if s.Internal.GasEstimateGasPremium == nil {
|
||||||
|
return *new(types.BigInt), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.GasEstimateGasPremium(p0, p1, p2, p3, p4)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStub) GasEstimateGasPremium(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (types.BigInt, error) {
|
||||||
|
return *new(types.BigInt), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *GatewayStruct) GasEstimateMessageGas(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) {
|
func (s *GatewayStruct) GasEstimateMessageGas(p0 context.Context, p1 *types.Message, p2 *api.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) {
|
||||||
if s.Internal.GasEstimateMessageGas == nil {
|
if s.Internal.GasEstimateMessageGas == nil {
|
||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
@@ -2594,6 +2702,17 @@ func (s *GatewayStub) GasEstimateMessageGas(p0 context.Context, p1 *types.Messag
|
|||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStruct) MpoolGetNonce(p0 context.Context, p1 address.Address) (uint64, error) {
|
||||||
|
if s.Internal.MpoolGetNonce == nil {
|
||||||
|
return 0, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.MpoolGetNonce(p0, p1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStub) MpoolGetNonce(p0 context.Context, p1 address.Address) (uint64, error) {
|
||||||
|
return 0, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *GatewayStruct) MpoolPush(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) {
|
func (s *GatewayStruct) MpoolPush(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) {
|
||||||
if s.Internal.MpoolPush == nil {
|
if s.Internal.MpoolPush == nil {
|
||||||
return *new(cid.Cid), ErrNotSupported
|
return *new(cid.Cid), ErrNotSupported
|
||||||
@@ -2649,6 +2768,17 @@ func (s *GatewayStub) StateAccountKey(p0 context.Context, p1 address.Address, p2
|
|||||||
return *new(address.Address), ErrNotSupported
|
return *new(address.Address), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStruct) StateCall(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*api.InvocResult, error) {
|
||||||
|
if s.Internal.StateCall == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateCall(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStub) StateCall(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*api.InvocResult, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *GatewayStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) {
|
func (s *GatewayStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (api.DealCollateralBounds, error) {
|
||||||
if s.Internal.StateDealProviderCollateralBounds == nil {
|
if s.Internal.StateDealProviderCollateralBounds == nil {
|
||||||
return *new(api.DealCollateralBounds), ErrNotSupported
|
return *new(api.DealCollateralBounds), ErrNotSupported
|
||||||
@@ -2660,6 +2790,17 @@ func (s *GatewayStub) StateDealProviderCollateralBounds(p0 context.Context, p1 a
|
|||||||
return *new(api.DealCollateralBounds), ErrNotSupported
|
return *new(api.DealCollateralBounds), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStruct) StateDecodeParams(p0 context.Context, p1 address.Address, p2 abi.MethodNum, p3 []byte, p4 types.TipSetKey) (interface{}, error) {
|
||||||
|
if s.Internal.StateDecodeParams == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateDecodeParams(p0, p1, p2, p3, p4)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStub) StateDecodeParams(p0 context.Context, p1 address.Address, p2 abi.MethodNum, p3 []byte, p4 types.TipSetKey) (interface{}, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *GatewayStruct) StateGetActor(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) {
|
func (s *GatewayStruct) StateGetActor(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) {
|
||||||
if s.Internal.StateGetActor == nil {
|
if s.Internal.StateGetActor == nil {
|
||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
@@ -2759,6 +2900,28 @@ func (s *GatewayStub) StateMinerProvingDeadline(p0 context.Context, p1 address.A
|
|||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStruct) StateMinerSectorCount(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerSectors, error) {
|
||||||
|
if s.Internal.StateMinerSectorCount == nil {
|
||||||
|
return *new(api.MinerSectors), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateMinerSectorCount(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStub) StateMinerSectorCount(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (api.MinerSectors, error) {
|
||||||
|
return *new(api.MinerSectors), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStruct) StateNetworkName(p0 context.Context) (dtypes.NetworkName, error) {
|
||||||
|
if s.Internal.StateNetworkName == nil {
|
||||||
|
return *new(dtypes.NetworkName), ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateNetworkName(p0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStub) StateNetworkName(p0 context.Context) (dtypes.NetworkName, error) {
|
||||||
|
return *new(dtypes.NetworkName), ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *GatewayStruct) StateNetworkVersion(p0 context.Context, p1 types.TipSetKey) (abinetwork.Version, error) {
|
func (s *GatewayStruct) StateNetworkVersion(p0 context.Context, p1 types.TipSetKey) (abinetwork.Version, error) {
|
||||||
if s.Internal.StateNetworkVersion == nil {
|
if s.Internal.StateNetworkVersion == nil {
|
||||||
return *new(abinetwork.Version), ErrNotSupported
|
return *new(abinetwork.Version), ErrNotSupported
|
||||||
@@ -2770,6 +2933,17 @@ func (s *GatewayStub) StateNetworkVersion(p0 context.Context, p1 types.TipSetKey
|
|||||||
return *new(abinetwork.Version), ErrNotSupported
|
return *new(abinetwork.Version), ErrNotSupported
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStruct) StateReplay(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*api.InvocResult, error) {
|
||||||
|
if s.Internal.StateReplay == nil {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
return s.Internal.StateReplay(p0, p1, p2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *GatewayStub) StateReplay(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid) (*api.InvocResult, error) {
|
||||||
|
return nil, ErrNotSupported
|
||||||
|
}
|
||||||
|
|
||||||
func (s *GatewayStruct) StateSearchMsg(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) {
|
func (s *GatewayStruct) StateSearchMsg(p0 context.Context, p1 cid.Cid) (*api.MsgLookup, error) {
|
||||||
if s.Internal.StateSearchMsg == nil {
|
if s.Internal.StateSearchMsg == nil {
|
||||||
return nil, ErrNotSupported
|
return nil, ErrNotSupported
|
||||||
|
|||||||
+116
-10
@@ -13,21 +13,22 @@ import (
|
|||||||
uuid "github.com/google/uuid"
|
uuid "github.com/google/uuid"
|
||||||
blocks "github.com/ipfs/go-block-format"
|
blocks "github.com/ipfs/go-block-format"
|
||||||
cid "github.com/ipfs/go-cid"
|
cid "github.com/ipfs/go-cid"
|
||||||
metrics "github.com/libp2p/go-libp2p-core/metrics"
|
metrics "github.com/libp2p/go-libp2p/core/metrics"
|
||||||
network0 "github.com/libp2p/go-libp2p-core/network"
|
network0 "github.com/libp2p/go-libp2p/core/network"
|
||||||
peer "github.com/libp2p/go-libp2p-core/peer"
|
peer "github.com/libp2p/go-libp2p/core/peer"
|
||||||
protocol "github.com/libp2p/go-libp2p-core/protocol"
|
protocol "github.com/libp2p/go-libp2p/core/protocol"
|
||||||
|
|
||||||
address "github.com/filecoin-project/go-address"
|
address "github.com/filecoin-project/go-address"
|
||||||
bitfield "github.com/filecoin-project/go-bitfield"
|
bitfield "github.com/filecoin-project/go-bitfield"
|
||||||
datatransfer "github.com/filecoin-project/go-data-transfer"
|
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
|
||||||
retrievalmarket "github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
retrievalmarket "github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
||||||
storagemarket "github.com/filecoin-project/go-fil-markets/storagemarket"
|
storagemarket "github.com/filecoin-project/go-fil-markets/storagemarket"
|
||||||
auth "github.com/filecoin-project/go-jsonrpc/auth"
|
auth "github.com/filecoin-project/go-jsonrpc/auth"
|
||||||
abi "github.com/filecoin-project/go-state-types/abi"
|
abi "github.com/filecoin-project/go-state-types/abi"
|
||||||
big "github.com/filecoin-project/go-state-types/big"
|
big "github.com/filecoin-project/go-state-types/big"
|
||||||
miner "github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
|
||||||
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
paych "github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
||||||
|
miner "github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
|
verifreg "github.com/filecoin-project/go-state-types/builtin/v9/verifreg"
|
||||||
crypto "github.com/filecoin-project/go-state-types/crypto"
|
crypto "github.com/filecoin-project/go-state-types/crypto"
|
||||||
dline "github.com/filecoin-project/go-state-types/dline"
|
dline "github.com/filecoin-project/go-state-types/dline"
|
||||||
network "github.com/filecoin-project/go-state-types/network"
|
network "github.com/filecoin-project/go-state-types/network"
|
||||||
@@ -2157,6 +2158,21 @@ func (mr *MockFullNodeMockRecorder) Shutdown(arg0 interface{}) *gomock.Call {
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Shutdown", reflect.TypeOf((*MockFullNode)(nil).Shutdown), arg0)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Shutdown", reflect.TypeOf((*MockFullNode)(nil).Shutdown), arg0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StartTime mocks base method.
|
||||||
|
func (m *MockFullNode) StartTime(arg0 context.Context) (time.Time, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StartTime", arg0)
|
||||||
|
ret0, _ := ret[0].(time.Time)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StartTime indicates an expected call of StartTime.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StartTime(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartTime", reflect.TypeOf((*MockFullNode)(nil).StartTime), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
// StateAccountKey mocks base method.
|
// StateAccountKey mocks base method.
|
||||||
func (m *MockFullNode) StateAccountKey(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (address.Address, error) {
|
func (m *MockFullNode) StateAccountKey(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (address.Address, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -2187,6 +2203,21 @@ func (mr *MockFullNodeMockRecorder) StateActorCodeCIDs(arg0, arg1 interface{}) *
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateActorCodeCIDs", reflect.TypeOf((*MockFullNode)(nil).StateActorCodeCIDs), arg0, arg1)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateActorCodeCIDs", reflect.TypeOf((*MockFullNode)(nil).StateActorCodeCIDs), arg0, arg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateActorManifestCID mocks base method.
|
||||||
|
func (m *MockFullNode) StateActorManifestCID(arg0 context.Context, arg1 network.Version) (cid.Cid, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateActorManifestCID", arg0, arg1)
|
||||||
|
ret0, _ := ret[0].(cid.Cid)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateActorManifestCID indicates an expected call of StateActorManifestCID.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateActorManifestCID(arg0, arg1 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateActorManifestCID", reflect.TypeOf((*MockFullNode)(nil).StateActorManifestCID), arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
// StateAllMinerFaults mocks base method.
|
// StateAllMinerFaults mocks base method.
|
||||||
func (m *MockFullNode) StateAllMinerFaults(arg0 context.Context, arg1 abi.ChainEpoch, arg2 types.TipSetKey) ([]*api.Fault, error) {
|
func (m *MockFullNode) StateAllMinerFaults(arg0 context.Context, arg1 abi.ChainEpoch, arg2 types.TipSetKey) ([]*api.Fault, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
@@ -2218,10 +2249,10 @@ func (mr *MockFullNodeMockRecorder) StateCall(arg0, arg1, arg2 interface{}) *gom
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StateChangedActors mocks base method.
|
// StateChangedActors mocks base method.
|
||||||
func (m *MockFullNode) StateChangedActors(arg0 context.Context, arg1, arg2 cid.Cid) (map[string]types.Actor, error) {
|
func (m *MockFullNode) StateChangedActors(arg0 context.Context, arg1, arg2 cid.Cid) (map[string]types.ActorV5, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "StateChangedActors", arg0, arg1, arg2)
|
ret := m.ctrl.Call(m, "StateChangedActors", arg0, arg1, arg2)
|
||||||
ret0, _ := ret[0].(map[string]types.Actor)
|
ret0, _ := ret[0].(map[string]types.ActorV5)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
@@ -2293,10 +2324,10 @@ func (mr *MockFullNodeMockRecorder) StateDecodeParams(arg0, arg1, arg2, arg3, ar
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StateGetActor mocks base method.
|
// StateGetActor mocks base method.
|
||||||
func (m *MockFullNode) StateGetActor(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (*types.Actor, error) {
|
func (m *MockFullNode) StateGetActor(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (*types.ActorV5, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "StateGetActor", arg0, arg1, arg2)
|
ret := m.ctrl.Call(m, "StateGetActor", arg0, arg1, arg2)
|
||||||
ret0, _ := ret[0].(*types.Actor)
|
ret0, _ := ret[0].(*types.ActorV5)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
@@ -2307,6 +2338,81 @@ func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{})
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2)
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StateGetAllocation mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocation(arg0 context.Context, arg1 address.Address, arg2 verifreg.AllocationId, arg3 types.TipSetKey) (*verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocation", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocation indicates an expected call of StateGetAllocation.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocation(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocation", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocation), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocationForPendingDeal mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocationForPendingDeal(arg0 context.Context, arg1 abi.DealID, arg2 types.TipSetKey) (*verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocationForPendingDeal", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocationForPendingDeal indicates an expected call of StateGetAllocationForPendingDeal.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocationForPendingDeal(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocationForPendingDeal", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocationForPendingDeal), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocations mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetAllocations(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.AllocationId]verifreg.Allocation, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetAllocations", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(map[verifreg.AllocationId]verifreg.Allocation)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetAllocations indicates an expected call of StateGetAllocations.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetAllocations(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetAllocations", reflect.TypeOf((*MockFullNode)(nil).StateGetAllocations), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaim mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetClaim(arg0 context.Context, arg1 address.Address, arg2 verifreg.ClaimId, arg3 types.TipSetKey) (*verifreg.Claim, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetClaim", arg0, arg1, arg2, arg3)
|
||||||
|
ret0, _ := ret[0].(*verifreg.Claim)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaim indicates an expected call of StateGetClaim.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetClaim(arg0, arg1, arg2, arg3 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetClaim", reflect.TypeOf((*MockFullNode)(nil).StateGetClaim), arg0, arg1, arg2, arg3)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaims mocks base method.
|
||||||
|
func (m *MockFullNode) StateGetClaims(arg0 context.Context, arg1 address.Address, arg2 types.TipSetKey) (map[verifreg.ClaimId]verifreg.Claim, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "StateGetClaims", arg0, arg1, arg2)
|
||||||
|
ret0, _ := ret[0].(map[verifreg.ClaimId]verifreg.Claim)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// StateGetClaims indicates an expected call of StateGetClaims.
|
||||||
|
func (mr *MockFullNodeMockRecorder) StateGetClaims(arg0, arg1, arg2 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetClaims", reflect.TypeOf((*MockFullNode)(nil).StateGetClaims), arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
|
||||||
// StateGetNetworkParams mocks base method.
|
// StateGetNetworkParams mocks base method.
|
||||||
func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) {
|
func (m *MockFullNode) StateGetNetworkParams(arg0 context.Context) (*api.NetworkParams, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
@@ -12,7 +12,7 @@ import (
|
|||||||
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
"github.com/filecoin-project/go-state-types/big"
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
"github.com/filecoin-project/go-state-types/builtin/v9/miner"
|
||||||
"github.com/filecoin-project/go-state-types/crypto"
|
"github.com/filecoin-project/go-state-types/crypto"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import (
|
|||||||
type FullNode = api.FullNode
|
type FullNode = api.FullNode
|
||||||
type FullNodeStruct = api.FullNodeStruct
|
type FullNodeStruct = api.FullNodeStruct
|
||||||
|
|
||||||
|
type RawFullNodeAPI FullNode
|
||||||
|
|
||||||
func PermissionedFullAPI(a FullNode) FullNode {
|
func PermissionedFullAPI(a FullNode) FullNode {
|
||||||
return api.PermissionedFullAPI(a)
|
return api.PermissionedFullAPI(a)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -58,7 +58,7 @@ var (
|
|||||||
FullAPIVersion1 = newVer(2, 3, 0)
|
FullAPIVersion1 = newVer(2, 3, 0)
|
||||||
|
|
||||||
MinerAPIVersion0 = newVer(1, 5, 0)
|
MinerAPIVersion0 = newVer(1, 5, 0)
|
||||||
WorkerAPIVersion0 = newVer(1, 6, 0)
|
WorkerAPIVersion0 = newVer(1, 7, 0)
|
||||||
)
|
)
|
||||||
|
|
||||||
//nolint:varcheck,deadcode
|
//nolint:varcheck,deadcode
|
||||||
|
|||||||
@@ -181,18 +181,22 @@ func (bs *AutobatchBlockstore) Get(ctx context.Context, c cid.Cid) (block.Block,
|
|||||||
}
|
}
|
||||||
|
|
||||||
bs.stateLock.Lock()
|
bs.stateLock.Lock()
|
||||||
defer bs.stateLock.Unlock()
|
|
||||||
v, ok := bs.flushingBatch.blockMap[c]
|
v, ok := bs.flushingBatch.blockMap[c]
|
||||||
if ok {
|
if ok {
|
||||||
|
bs.stateLock.Unlock()
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
v, ok = bs.bufferedBatch.blockMap[c]
|
v, ok = bs.bufferedBatch.blockMap[c]
|
||||||
if ok {
|
if ok {
|
||||||
|
bs.stateLock.Unlock()
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
bs.stateLock.Unlock()
|
||||||
|
|
||||||
return bs.Get(ctx, c)
|
// We have to check the backing store one more time because it may have been flushed by the
|
||||||
|
// time we were able to take the lock above.
|
||||||
|
return bs.backingBs.Get(ctx, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bs *AutobatchBlockstore) DeleteBlock(context.Context, cid.Cid) error {
|
func (bs *AutobatchBlockstore) DeleteBlock(context.Context, cid.Cid) error {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -29,6 +30,10 @@ func TestAutobatchBlockstore(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, b2.RawData(), v2.RawData())
|
require.Equal(t, b2.RawData(), v2.RawData())
|
||||||
|
|
||||||
|
// Regression test for a deadlock.
|
||||||
|
_, err = ab.Get(ctx, b3.Cid())
|
||||||
|
require.True(t, ipld.IsNotFound(err))
|
||||||
|
|
||||||
require.NoError(t, ab.Flush(ctx))
|
require.NoError(t, ab.Flush(ctx))
|
||||||
require.NoError(t, ab.Shutdown(ctx))
|
require.NoError(t, ab.Shutdown(ctx))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import (
|
|||||||
pool "github.com/libp2p/go-buffer-pool"
|
pool "github.com/libp2p/go-buffer-pool"
|
||||||
"github.com/multiformats/go-base32"
|
"github.com/multiformats/go-base32"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/blockstore"
|
"github.com/filecoin-project/lotus/blockstore"
|
||||||
)
|
)
|
||||||
@@ -44,7 +45,8 @@ const (
|
|||||||
// MemoryMap is equivalent to badger/options.MemoryMap.
|
// MemoryMap is equivalent to badger/options.MemoryMap.
|
||||||
MemoryMap = options.MemoryMap
|
MemoryMap = options.MemoryMap
|
||||||
// LoadToRAM is equivalent to badger/options.LoadToRAM.
|
// LoadToRAM is equivalent to badger/options.LoadToRAM.
|
||||||
LoadToRAM = options.LoadToRAM
|
LoadToRAM = options.LoadToRAM
|
||||||
|
defaultGCThreshold = 0.125
|
||||||
)
|
)
|
||||||
|
|
||||||
// Options embeds the badger options themselves, and augments them with
|
// Options embeds the badger options themselves, and augments them with
|
||||||
@@ -394,6 +396,9 @@ func (b *Blockstore) doCopy(from, to *badger.DB) error {
|
|||||||
if workers < 2 {
|
if workers < 2 {
|
||||||
workers = 2
|
workers = 2
|
||||||
}
|
}
|
||||||
|
if workers > 8 {
|
||||||
|
workers = 8
|
||||||
|
}
|
||||||
|
|
||||||
stream := from.NewStream()
|
stream := from.NewStream()
|
||||||
stream.NumGo = workers
|
stream.NumGo = workers
|
||||||
@@ -439,7 +444,7 @@ func (b *Blockstore) deleteDB(path string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Blockstore) onlineGC() error {
|
func (b *Blockstore) onlineGC(ctx context.Context, threshold float64, checkFreq time.Duration, check func() error) error {
|
||||||
b.lockDB()
|
b.lockDB()
|
||||||
defer b.unlockDB()
|
defer b.unlockDB()
|
||||||
|
|
||||||
@@ -448,14 +453,26 @@ func (b *Blockstore) onlineGC() error {
|
|||||||
if nworkers < 2 {
|
if nworkers < 2 {
|
||||||
nworkers = 2
|
nworkers = 2
|
||||||
}
|
}
|
||||||
|
if nworkers > 7 { // max out at 1 goroutine per badger level
|
||||||
|
nworkers = 7
|
||||||
|
}
|
||||||
|
|
||||||
err := b.db.Flatten(nworkers)
|
err := b.db.Flatten(nworkers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
checkTick := time.NewTimer(checkFreq)
|
||||||
|
defer checkTick.Stop()
|
||||||
for err == nil {
|
for err == nil {
|
||||||
err = b.db.RunValueLogGC(0.125)
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
err = ctx.Err()
|
||||||
|
case <-checkTick.C:
|
||||||
|
err = check()
|
||||||
|
checkTick.Reset(checkFreq)
|
||||||
|
default:
|
||||||
|
err = b.db.RunValueLogGC(threshold)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err == badger.ErrNoRewrite {
|
if err == badger.ErrNoRewrite {
|
||||||
@@ -468,7 +485,7 @@ func (b *Blockstore) onlineGC() error {
|
|||||||
|
|
||||||
// CollectGarbage compacts and runs garbage collection on the value log;
|
// CollectGarbage compacts and runs garbage collection on the value log;
|
||||||
// implements the BlockstoreGC trait
|
// implements the BlockstoreGC trait
|
||||||
func (b *Blockstore) CollectGarbage(opts ...blockstore.BlockstoreGCOption) error {
|
func (b *Blockstore) CollectGarbage(ctx context.Context, opts ...blockstore.BlockstoreGCOption) error {
|
||||||
if err := b.access(); err != nil {
|
if err := b.access(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -485,8 +502,58 @@ func (b *Blockstore) CollectGarbage(opts ...blockstore.BlockstoreGCOption) error
|
|||||||
if options.FullGC {
|
if options.FullGC {
|
||||||
return b.movingGC()
|
return b.movingGC()
|
||||||
}
|
}
|
||||||
|
threshold := options.Threshold
|
||||||
|
if threshold == 0 {
|
||||||
|
threshold = defaultGCThreshold
|
||||||
|
}
|
||||||
|
checkFreq := options.CheckFreq
|
||||||
|
if checkFreq < 30*time.Second { // disallow checking more frequently than block time
|
||||||
|
checkFreq = 30 * time.Second
|
||||||
|
}
|
||||||
|
check := options.Check
|
||||||
|
if check == nil {
|
||||||
|
check = func() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b.onlineGC(ctx, threshold, checkFreq, check)
|
||||||
|
}
|
||||||
|
|
||||||
return b.onlineGC()
|
// GCOnce runs garbage collection on the value log;
|
||||||
|
// implements BlockstoreGCOnce trait
|
||||||
|
func (b *Blockstore) GCOnce(ctx context.Context, opts ...blockstore.BlockstoreGCOption) error {
|
||||||
|
if err := b.access(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer b.viewers.Done()
|
||||||
|
|
||||||
|
var options blockstore.BlockstoreGCOptions
|
||||||
|
for _, opt := range opts {
|
||||||
|
err := opt(&options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if options.FullGC {
|
||||||
|
return xerrors.Errorf("FullGC option specified for GCOnce but full GC is non incremental")
|
||||||
|
}
|
||||||
|
|
||||||
|
threshold := options.Threshold
|
||||||
|
if threshold == 0 {
|
||||||
|
threshold = defaultGCThreshold
|
||||||
|
}
|
||||||
|
|
||||||
|
b.lockDB()
|
||||||
|
defer b.unlockDB()
|
||||||
|
|
||||||
|
// Note no compaction needed before single GC as we will hit at most one vlog anyway
|
||||||
|
err := b.db.RunValueLogGC(threshold)
|
||||||
|
if err == badger.ErrNoRewrite {
|
||||||
|
// not really an error in this case, it signals the end of GC
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Size returns the aggregate size of the blockstore
|
// Size returns the aggregate size of the blockstore
|
||||||
@@ -551,6 +618,18 @@ func (b *Blockstore) View(ctx context.Context, cid cid.Cid, fn func([]byte) erro
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *Blockstore) Flush(context.Context) error {
|
||||||
|
if err := b.access(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer b.viewers.Done()
|
||||||
|
|
||||||
|
b.lockDB()
|
||||||
|
defer b.unlockDB()
|
||||||
|
|
||||||
|
return b.db.Sync()
|
||||||
|
}
|
||||||
|
|
||||||
// Has implements Blockstore.Has.
|
// Has implements Blockstore.Has.
|
||||||
func (b *Blockstore) Has(ctx context.Context, cid cid.Cid) (bool, error) {
|
func (b *Blockstore) Has(ctx context.Context, cid cid.Cid) (bool, error) {
|
||||||
if err := b.access(); err != nil {
|
if err := b.access(); err != nil {
|
||||||
@@ -667,6 +746,20 @@ func (b *Blockstore) Put(ctx context.Context, block blocks.Block) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
put := func(db *badger.DB) error {
|
put := func(db *badger.DB) error {
|
||||||
|
// Check if we have it before writing it.
|
||||||
|
switch err := db.View(func(txn *badger.Txn) error {
|
||||||
|
_, err := txn.Get(k)
|
||||||
|
return err
|
||||||
|
}); err {
|
||||||
|
case badger.ErrKeyNotFound:
|
||||||
|
case nil:
|
||||||
|
// Already exists, skip the put.
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then write it.
|
||||||
err := db.Update(func(txn *badger.Txn) error {
|
err := db.Update(func(txn *badger.Txn) error {
|
||||||
return txn.Set(k, block.RawData())
|
return txn.Set(k, block.RawData())
|
||||||
})
|
})
|
||||||
@@ -722,12 +815,33 @@ func (b *Blockstore) PutMany(ctx context.Context, blocks []blocks.Block) error {
|
|||||||
keys = append(keys, k)
|
keys = append(keys, k)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err := b.db.View(func(txn *badger.Txn) error {
|
||||||
|
for i, k := range keys {
|
||||||
|
switch _, err := txn.Get(k); err {
|
||||||
|
case badger.ErrKeyNotFound:
|
||||||
|
case nil:
|
||||||
|
keys[i] = nil
|
||||||
|
default:
|
||||||
|
// Something is actually wrong
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
put := func(db *badger.DB) error {
|
put := func(db *badger.DB) error {
|
||||||
batch := db.NewWriteBatch()
|
batch := db.NewWriteBatch()
|
||||||
defer batch.Cancel()
|
defer batch.Cancel()
|
||||||
|
|
||||||
for i, block := range blocks {
|
for i, block := range blocks {
|
||||||
k := keys[i]
|
k := keys[i]
|
||||||
|
if k == nil {
|
||||||
|
// skipped because we already have it.
|
||||||
|
continue
|
||||||
|
}
|
||||||
if err := batch.Set(k, block.RawData()); err != nil {
|
if err := batch.Set(k, block.RawData()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package badgerbs
|
package badgerbs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -145,7 +145,7 @@ func testMove(t *testing.T, optsF func(string) Options) {
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
g.Go(func() error {
|
g.Go(func() error {
|
||||||
return db.CollectGarbage(blockstore.WithFullGC(true))
|
return db.CollectGarbage(ctx, blockstore.WithFullGC(true))
|
||||||
})
|
})
|
||||||
|
|
||||||
err = g.Wait()
|
err = g.Wait()
|
||||||
@@ -230,7 +230,7 @@ func testMove(t *testing.T, optsF func(string) Options) {
|
|||||||
checkPath()
|
checkPath()
|
||||||
|
|
||||||
// now do another FullGC to test the double move and following of symlinks
|
// now do another FullGC to test the double move and following of symlinks
|
||||||
if err := db.CollectGarbage(blockstore.WithFullGC(true)); err != nil {
|
if err := db.CollectGarbage(ctx, blockstore.WithFullGC(true)); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package badgerbs
|
package badgerbs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package blockstore
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
ds "github.com/ipfs/go-datastore"
|
ds "github.com/ipfs/go-datastore"
|
||||||
@@ -18,6 +19,7 @@ type Blockstore interface {
|
|||||||
blockstore.Blockstore
|
blockstore.Blockstore
|
||||||
blockstore.Viewer
|
blockstore.Viewer
|
||||||
BatchDeleter
|
BatchDeleter
|
||||||
|
Flusher
|
||||||
}
|
}
|
||||||
|
|
||||||
// BasicBlockstore is an alias to the original IPFS Blockstore.
|
// BasicBlockstore is an alias to the original IPFS Blockstore.
|
||||||
@@ -25,6 +27,10 @@ type BasicBlockstore = blockstore.Blockstore
|
|||||||
|
|
||||||
type Viewer = blockstore.Viewer
|
type Viewer = blockstore.Viewer
|
||||||
|
|
||||||
|
type Flusher interface {
|
||||||
|
Flush(context.Context) error
|
||||||
|
}
|
||||||
|
|
||||||
type BatchDeleter interface {
|
type BatchDeleter interface {
|
||||||
DeleteMany(ctx context.Context, cids []cid.Cid) error
|
DeleteMany(ctx context.Context, cids []cid.Cid) error
|
||||||
}
|
}
|
||||||
@@ -36,7 +42,12 @@ type BlockstoreIterator interface {
|
|||||||
|
|
||||||
// BlockstoreGC is a trait for blockstores that support online garbage collection
|
// BlockstoreGC is a trait for blockstores that support online garbage collection
|
||||||
type BlockstoreGC interface {
|
type BlockstoreGC interface {
|
||||||
CollectGarbage(options ...BlockstoreGCOption) error
|
CollectGarbage(ctx context.Context, options ...BlockstoreGCOption) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// BlockstoreGCOnce is a trait for a blockstore that supports incremental online garbage collection
|
||||||
|
type BlockstoreGCOnce interface {
|
||||||
|
GCOnce(ctx context.Context, options ...BlockstoreGCOption) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// BlockstoreGCOption is a functional interface for controlling blockstore GC options
|
// BlockstoreGCOption is a functional interface for controlling blockstore GC options
|
||||||
@@ -45,6 +56,12 @@ type BlockstoreGCOption = func(*BlockstoreGCOptions) error
|
|||||||
// BlockstoreGCOptions is a struct with GC options
|
// BlockstoreGCOptions is a struct with GC options
|
||||||
type BlockstoreGCOptions struct {
|
type BlockstoreGCOptions struct {
|
||||||
FullGC bool
|
FullGC bool
|
||||||
|
// fraction of garbage in badger vlog before its worth processing in online GC
|
||||||
|
Threshold float64
|
||||||
|
// how often to call the check function
|
||||||
|
CheckFreq time.Duration
|
||||||
|
// function to call periodically to pause or early terminate GC
|
||||||
|
Check func() error
|
||||||
}
|
}
|
||||||
|
|
||||||
func WithFullGC(fullgc bool) BlockstoreGCOption {
|
func WithFullGC(fullgc bool) BlockstoreGCOption {
|
||||||
@@ -54,6 +71,27 @@ func WithFullGC(fullgc bool) BlockstoreGCOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WithThreshold(threshold float64) BlockstoreGCOption {
|
||||||
|
return func(opts *BlockstoreGCOptions) error {
|
||||||
|
opts.Threshold = threshold
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func WithCheckFreq(f time.Duration) BlockstoreGCOption {
|
||||||
|
return func(opts *BlockstoreGCOptions) error {
|
||||||
|
opts.CheckFreq = f
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func WithCheck(check func() error) BlockstoreGCOption {
|
||||||
|
return func(opts *BlockstoreGCOptions) error {
|
||||||
|
opts.Check = check
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// BlockstoreSize is a trait for on-disk blockstores that can report their size
|
// BlockstoreSize is a trait for on-disk blockstores that can report their size
|
||||||
type BlockstoreSize interface {
|
type BlockstoreSize interface {
|
||||||
Size() (int64, error)
|
Size() (int64, error)
|
||||||
@@ -92,6 +130,13 @@ type adaptedBlockstore struct {
|
|||||||
|
|
||||||
var _ Blockstore = (*adaptedBlockstore)(nil)
|
var _ Blockstore = (*adaptedBlockstore)(nil)
|
||||||
|
|
||||||
|
func (a *adaptedBlockstore) Flush(ctx context.Context) error {
|
||||||
|
if flusher, canFlush := a.Blockstore.(Flusher); canFlush {
|
||||||
|
return flusher.Flush(ctx)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (a *adaptedBlockstore) View(ctx context.Context, cid cid.Cid, callback func([]byte) error) error {
|
func (a *adaptedBlockstore) View(ctx context.Context, cid cid.Cid, callback func([]byte) error) error {
|
||||||
blk, err := a.Get(ctx, cid)
|
blk, err := a.Get(ctx, cid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ var (
|
|||||||
_ Viewer = (*BufferedBlockstore)(nil)
|
_ Viewer = (*BufferedBlockstore)(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (bs *BufferedBlockstore) Flush(ctx context.Context) error { return bs.write.Flush(ctx) }
|
||||||
|
|
||||||
func (bs *BufferedBlockstore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) {
|
func (bs *BufferedBlockstore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) {
|
||||||
a, err := bs.read.AllKeysChan(ctx)
|
a, err := bs.read.AllKeysChan(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -0,0 +1,441 @@
|
|||||||
|
// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"math"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
cid "github.com/ipfs/go-cid"
|
||||||
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
|
xerrors "golang.org/x/xerrors"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = xerrors.Errorf
|
||||||
|
var _ = cid.Undef
|
||||||
|
var _ = math.E
|
||||||
|
var _ = sort.Sort
|
||||||
|
|
||||||
|
var lengthBufNetRpcReq = []byte{132}
|
||||||
|
|
||||||
|
func (t *NetRpcReq) MarshalCBOR(w io.Writer) error {
|
||||||
|
if t == nil {
|
||||||
|
_, err := w.Write(cbg.CborNull)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cw := cbg.NewCborWriter(w)
|
||||||
|
|
||||||
|
if _, err := cw.Write(lengthBufNetRpcReq); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCReqType) (uint8)
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Type)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.ID (uint64) (uint64)
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.ID)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Cid ([]cid.Cid) (slice)
|
||||||
|
if len(t.Cid) > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Slice value in field t.Cid was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Cid))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, v := range t.Cid {
|
||||||
|
if err := cbg.WriteCid(w, v); err != nil {
|
||||||
|
return xerrors.Errorf("failed writing cid field t.Cid: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Data ([][]uint8) (slice)
|
||||||
|
if len(t.Data) > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Slice value in field t.Data was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajArray, uint64(len(t.Data))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, v := range t.Data {
|
||||||
|
if len(v) > cbg.ByteArrayMaxLen {
|
||||||
|
return xerrors.Errorf("Byte array in field v was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajByteString, uint64(len(v))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := cw.Write(v[:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *NetRpcReq) UnmarshalCBOR(r io.Reader) (err error) {
|
||||||
|
*t = NetRpcReq{}
|
||||||
|
|
||||||
|
cr := cbg.NewCborReader(r)
|
||||||
|
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err == io.EOF {
|
||||||
|
err = io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("cbor input should be of type array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra != 4 {
|
||||||
|
return fmt.Errorf("cbor input had wrong number of fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCReqType) (uint8)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint8 field")
|
||||||
|
}
|
||||||
|
if extra > math.MaxUint8 {
|
||||||
|
return fmt.Errorf("integer in input was too large for uint8 field")
|
||||||
|
}
|
||||||
|
t.Type = NetRPCReqType(extra)
|
||||||
|
// t.ID (uint64) (uint64)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint64 field")
|
||||||
|
}
|
||||||
|
t.ID = uint64(extra)
|
||||||
|
|
||||||
|
}
|
||||||
|
// t.Cid ([]cid.Cid) (slice)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.MaxLength {
|
||||||
|
return fmt.Errorf("t.Cid: array too large (%d)", extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("expected cbor array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > 0 {
|
||||||
|
t.Cid = make([]cid.Cid, extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(extra); i++ {
|
||||||
|
|
||||||
|
c, err := cbg.ReadCid(cr)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("reading cid field t.Cid failed: %w", err)
|
||||||
|
}
|
||||||
|
t.Cid[i] = c
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Data ([][]uint8) (slice)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.MaxLength {
|
||||||
|
return fmt.Errorf("t.Data: array too large (%d)", extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("expected cbor array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > 0 {
|
||||||
|
t.Data = make([][]uint8, extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < int(extra); i++ {
|
||||||
|
{
|
||||||
|
var maj byte
|
||||||
|
var extra uint64
|
||||||
|
var err error
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.ByteArrayMaxLen {
|
||||||
|
return fmt.Errorf("t.Data[i]: byte array too large (%d)", extra)
|
||||||
|
}
|
||||||
|
if maj != cbg.MajByteString {
|
||||||
|
return fmt.Errorf("expected byte array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > 0 {
|
||||||
|
t.Data[i] = make([]uint8, extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := io.ReadFull(cr, t.Data[i][:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var lengthBufNetRpcResp = []byte{131}
|
||||||
|
|
||||||
|
func (t *NetRpcResp) MarshalCBOR(w io.Writer) error {
|
||||||
|
if t == nil {
|
||||||
|
_, err := w.Write(cbg.CborNull)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cw := cbg.NewCborWriter(w)
|
||||||
|
|
||||||
|
if _, err := cw.Write(lengthBufNetRpcResp); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCRespType) (uint8)
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Type)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.ID (uint64) (uint64)
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.ID)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Data ([]uint8) (slice)
|
||||||
|
if len(t.Data) > cbg.ByteArrayMaxLen {
|
||||||
|
return xerrors.Errorf("Byte array in field t.Data was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajByteString, uint64(len(t.Data))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := cw.Write(t.Data[:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *NetRpcResp) UnmarshalCBOR(r io.Reader) (err error) {
|
||||||
|
*t = NetRpcResp{}
|
||||||
|
|
||||||
|
cr := cbg.NewCborReader(r)
|
||||||
|
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err == io.EOF {
|
||||||
|
err = io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("cbor input should be of type array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra != 3 {
|
||||||
|
return fmt.Errorf("cbor input had wrong number of fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCRespType) (uint8)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint8 field")
|
||||||
|
}
|
||||||
|
if extra > math.MaxUint8 {
|
||||||
|
return fmt.Errorf("integer in input was too large for uint8 field")
|
||||||
|
}
|
||||||
|
t.Type = NetRPCRespType(extra)
|
||||||
|
// t.ID (uint64) (uint64)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint64 field")
|
||||||
|
}
|
||||||
|
t.ID = uint64(extra)
|
||||||
|
|
||||||
|
}
|
||||||
|
// t.Data ([]uint8) (slice)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > cbg.ByteArrayMaxLen {
|
||||||
|
return fmt.Errorf("t.Data: byte array too large (%d)", extra)
|
||||||
|
}
|
||||||
|
if maj != cbg.MajByteString {
|
||||||
|
return fmt.Errorf("expected byte array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra > 0 {
|
||||||
|
t.Data = make([]uint8, extra)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := io.ReadFull(cr, t.Data[:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var lengthBufNetRpcErr = []byte{131}
|
||||||
|
|
||||||
|
func (t *NetRpcErr) MarshalCBOR(w io.Writer) error {
|
||||||
|
if t == nil {
|
||||||
|
_, err := w.Write(cbg.CborNull)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cw := cbg.NewCborWriter(w)
|
||||||
|
|
||||||
|
if _, err := cw.Write(lengthBufNetRpcErr); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCErrType) (uint8)
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajUnsignedInt, uint64(t.Type)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Msg (string) (string)
|
||||||
|
if len(t.Msg) > cbg.MaxLength {
|
||||||
|
return xerrors.Errorf("Value in field t.Msg was too long")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Msg))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.WriteString(w, string(t.Msg)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Cid (cid.Cid) (struct)
|
||||||
|
|
||||||
|
if t.Cid == nil {
|
||||||
|
if _, err := cw.Write(cbg.CborNull); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := cbg.WriteCid(cw, *t.Cid); err != nil {
|
||||||
|
return xerrors.Errorf("failed to write cid field t.Cid: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *NetRpcErr) UnmarshalCBOR(r io.Reader) (err error) {
|
||||||
|
*t = NetRpcErr{}
|
||||||
|
|
||||||
|
cr := cbg.NewCborReader(r)
|
||||||
|
|
||||||
|
maj, extra, err := cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err == io.EOF {
|
||||||
|
err = io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if maj != cbg.MajArray {
|
||||||
|
return fmt.Errorf("cbor input should be of type array")
|
||||||
|
}
|
||||||
|
|
||||||
|
if extra != 3 {
|
||||||
|
return fmt.Errorf("cbor input had wrong number of fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
// t.Type (blockstore.NetRPCErrType) (uint8)
|
||||||
|
|
||||||
|
maj, extra, err = cr.ReadHeader()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if maj != cbg.MajUnsignedInt {
|
||||||
|
return fmt.Errorf("wrong type for uint8 field")
|
||||||
|
}
|
||||||
|
if extra > math.MaxUint8 {
|
||||||
|
return fmt.Errorf("integer in input was too large for uint8 field")
|
||||||
|
}
|
||||||
|
t.Type = NetRPCErrType(extra)
|
||||||
|
// t.Msg (string) (string)
|
||||||
|
|
||||||
|
{
|
||||||
|
sval, err := cbg.ReadString(cr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Msg = string(sval)
|
||||||
|
}
|
||||||
|
// t.Cid (cid.Cid) (struct)
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
b, err := cr.ReadByte()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if b != cbg.CborNull[0] {
|
||||||
|
if err := cr.UnreadByte(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
c, err := cbg.ReadCid(cr)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("failed to read cid field t.Cid: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Cid = &c
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -38,6 +38,10 @@ func (b *discardstore) View(ctx context.Context, cid cid.Cid, f func([]byte) err
|
|||||||
return b.bs.View(ctx, cid, f)
|
return b.bs.View(ctx, cid, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *discardstore) Flush(ctx context.Context) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (b *discardstore) Put(ctx context.Context, blk blocks.Block) error {
|
func (b *discardstore) Put(ctx context.Context, blk blocks.Block) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -179,3 +179,7 @@ func (b *idstore) Close() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *idstore) Flush(ctx context.Context) error {
|
||||||
|
return b.bs.Flush(ctx)
|
||||||
|
}
|
||||||
|
|||||||
+2
-2
@@ -3,7 +3,7 @@ package blockstore
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"io/ioutil"
|
"io"
|
||||||
|
|
||||||
blocks "github.com/ipfs/go-block-format"
|
blocks "github.com/ipfs/go-block-format"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
@@ -103,7 +103,7 @@ func (i *IPFSBlockstore) Get(ctx context.Context, cid cid.Cid) (blocks.Block, er
|
|||||||
return nil, xerrors.Errorf("getting ipfs block: %w", err)
|
return nil, xerrors.Errorf("getting ipfs block: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := ioutil.ReadAll(rd)
|
data, err := io.ReadAll(rd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ func NewMemory() MemBlockstore {
|
|||||||
// To match behavior of badger blockstore we index by multihash only.
|
// To match behavior of badger blockstore we index by multihash only.
|
||||||
type MemBlockstore map[string]blocks.Block
|
type MemBlockstore map[string]blocks.Block
|
||||||
|
|
||||||
|
func (MemBlockstore) Flush(context.Context) error { return nil }
|
||||||
|
|
||||||
func (m MemBlockstore) DeleteBlock(ctx context.Context, k cid.Cid) error {
|
func (m MemBlockstore) DeleteBlock(ctx context.Context, k cid.Cid) error {
|
||||||
delete(m, string(k.Hash()))
|
delete(m, string(k.Hash()))
|
||||||
return nil
|
return nil
|
||||||
@@ -47,6 +49,9 @@ func (m MemBlockstore) Get(ctx context.Context, k cid.Cid) (blocks.Block, error)
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, ipld.ErrNotFound{Cid: k}
|
return nil, ipld.ErrNotFound{Cid: k}
|
||||||
}
|
}
|
||||||
|
if b.Cid().Prefix().Codec != k.Prefix().Codec {
|
||||||
|
return blocks.NewBlockWithCid(b.RawData(), k)
|
||||||
|
}
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
blocks "github.com/ipfs/go-block-format"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
mh "github.com/multiformats/go-multihash"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMemGetCodec(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
bs := NewMemory()
|
||||||
|
|
||||||
|
cborArr := []byte{0x82, 1, 2}
|
||||||
|
|
||||||
|
h, err := mh.Sum(cborArr, mh.SHA2_256, -1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
rawCid := cid.NewCidV1(cid.Raw, h)
|
||||||
|
rawBlk, err := blocks.NewBlockWithCid(cborArr, rawCid)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = bs.Put(ctx, rawBlk)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
cborCid := cid.NewCidV1(cid.DagCBOR, h)
|
||||||
|
|
||||||
|
cborBlk, err := bs.Get(ctx, cborCid)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, cborCid.Prefix(), cborBlk.Cid().Prefix())
|
||||||
|
require.EqualValues(t, cborArr, cborBlk.RawData())
|
||||||
|
|
||||||
|
// was allocated
|
||||||
|
require.NotEqual(t, cborBlk, rawBlk)
|
||||||
|
|
||||||
|
gotRawBlk, err := bs.Get(ctx, rawCid)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// not allocated
|
||||||
|
require.Equal(t, rawBlk, gotRawBlk)
|
||||||
|
}
|
||||||
@@ -0,0 +1,426 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
|
|
||||||
|
blocks "github.com/ipfs/go-block-format"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
|
"github.com/libp2p/go-msgio"
|
||||||
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetRPCReqType byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
NRpcHas NetRPCReqType = iota
|
||||||
|
NRpcGet
|
||||||
|
NRpcGetSize
|
||||||
|
NRpcPut
|
||||||
|
NRpcDelete
|
||||||
|
|
||||||
|
// todo cancel req
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetRPCRespType byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
NRpcOK NetRPCRespType = iota
|
||||||
|
NRpcErr
|
||||||
|
NRpcMore
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetRPCErrType byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
NRpcErrGeneric NetRPCErrType = iota
|
||||||
|
NRpcErrNotFound
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetRpcReq struct {
|
||||||
|
Type NetRPCReqType
|
||||||
|
ID uint64
|
||||||
|
|
||||||
|
Cid []cid.Cid // todo maxsize?
|
||||||
|
Data [][]byte // todo maxsize?
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetRpcResp struct {
|
||||||
|
Type NetRPCRespType
|
||||||
|
ID uint64
|
||||||
|
|
||||||
|
// error or cids in allkeys
|
||||||
|
Data []byte // todo maxsize?
|
||||||
|
|
||||||
|
next <-chan NetRpcResp
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetRpcErr struct {
|
||||||
|
Type NetRPCErrType
|
||||||
|
|
||||||
|
Msg string
|
||||||
|
|
||||||
|
// in case of NRpcErrNotFound
|
||||||
|
Cid *cid.Cid
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetworkStore struct {
|
||||||
|
// note: writer is thread-safe
|
||||||
|
msgStream msgio.ReadWriteCloser
|
||||||
|
|
||||||
|
// atomic
|
||||||
|
reqCount uint64
|
||||||
|
|
||||||
|
respLk sync.Mutex
|
||||||
|
|
||||||
|
// respMap is nil after store closes
|
||||||
|
respMap map[uint64]chan<- NetRpcResp
|
||||||
|
|
||||||
|
closing chan struct{}
|
||||||
|
closed chan struct{}
|
||||||
|
|
||||||
|
closeLk sync.Mutex
|
||||||
|
onClose []func()
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNetworkStore(mss msgio.ReadWriteCloser) *NetworkStore {
|
||||||
|
ns := &NetworkStore{
|
||||||
|
msgStream: mss,
|
||||||
|
|
||||||
|
respMap: map[uint64]chan<- NetRpcResp{},
|
||||||
|
|
||||||
|
closing: make(chan struct{}),
|
||||||
|
closed: make(chan struct{}),
|
||||||
|
}
|
||||||
|
|
||||||
|
go ns.receive()
|
||||||
|
|
||||||
|
return ns
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) shutdown(msg string) {
|
||||||
|
if err := n.msgStream.Close(); err != nil {
|
||||||
|
log.Errorw("closing netstore msg stream", "error", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
nerr := NetRpcErr{
|
||||||
|
Type: NRpcErrGeneric,
|
||||||
|
Msg: msg,
|
||||||
|
Cid: nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
var errb bytes.Buffer
|
||||||
|
if err := nerr.MarshalCBOR(&errb); err != nil {
|
||||||
|
log.Errorw("netstore shutdown: error marshaling error", "err", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
n.respLk.Lock()
|
||||||
|
for id, resps := range n.respMap {
|
||||||
|
resps <- NetRpcResp{
|
||||||
|
Type: NRpcErr,
|
||||||
|
ID: id,
|
||||||
|
Data: errb.Bytes(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
n.respMap = nil
|
||||||
|
|
||||||
|
n.respLk.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) OnClose(cb func()) {
|
||||||
|
n.closeLk.Lock()
|
||||||
|
defer n.closeLk.Unlock()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-n.closed:
|
||||||
|
cb()
|
||||||
|
default:
|
||||||
|
n.onClose = append(n.onClose, cb)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) receive() {
|
||||||
|
defer func() {
|
||||||
|
n.closeLk.Lock()
|
||||||
|
defer n.closeLk.Unlock()
|
||||||
|
|
||||||
|
close(n.closed)
|
||||||
|
if n.onClose != nil {
|
||||||
|
for _, f := range n.onClose {
|
||||||
|
f()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-n.closing:
|
||||||
|
n.shutdown("netstore stopping")
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := n.msgStream.ReadMsg()
|
||||||
|
if err != nil {
|
||||||
|
n.shutdown(fmt.Sprintf("netstore ReadMsg: %s", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp NetRpcResp
|
||||||
|
if err := resp.UnmarshalCBOR(bytes.NewReader(msg)); err != nil {
|
||||||
|
n.shutdown(fmt.Sprintf("unmarshaling netstore response: %s", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
n.msgStream.ReleaseMsg(msg)
|
||||||
|
|
||||||
|
n.respLk.Lock()
|
||||||
|
if ch, ok := n.respMap[resp.ID]; ok {
|
||||||
|
if resp.Type == NRpcMore {
|
||||||
|
nch := make(chan NetRpcResp, 1)
|
||||||
|
resp.next = nch
|
||||||
|
n.respMap[resp.ID] = nch
|
||||||
|
} else {
|
||||||
|
delete(n.respMap, resp.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
ch <- resp
|
||||||
|
}
|
||||||
|
n.respLk.Unlock()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) sendRpc(rt NetRPCReqType, cids []cid.Cid, data [][]byte) (uint64, <-chan NetRpcResp, error) {
|
||||||
|
rid := atomic.AddUint64(&n.reqCount, 1)
|
||||||
|
|
||||||
|
respCh := make(chan NetRpcResp, 1) // todo pool?
|
||||||
|
|
||||||
|
n.respLk.Lock()
|
||||||
|
if n.respMap == nil {
|
||||||
|
n.respLk.Unlock()
|
||||||
|
return 0, nil, xerrors.Errorf("netstore closed")
|
||||||
|
}
|
||||||
|
n.respMap[rid] = respCh
|
||||||
|
n.respLk.Unlock()
|
||||||
|
|
||||||
|
req := NetRpcReq{
|
||||||
|
Type: rt,
|
||||||
|
ID: rid,
|
||||||
|
Cid: cids,
|
||||||
|
Data: data,
|
||||||
|
}
|
||||||
|
|
||||||
|
var rbuf bytes.Buffer // todo buffer pool
|
||||||
|
if err := req.MarshalCBOR(&rbuf); err != nil {
|
||||||
|
n.respLk.Lock()
|
||||||
|
defer n.respLk.Unlock()
|
||||||
|
|
||||||
|
if n.respMap == nil {
|
||||||
|
return 0, nil, xerrors.Errorf("netstore closed")
|
||||||
|
}
|
||||||
|
delete(n.respMap, rid)
|
||||||
|
|
||||||
|
return 0, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := n.msgStream.WriteMsg(rbuf.Bytes()); err != nil {
|
||||||
|
n.respLk.Lock()
|
||||||
|
defer n.respLk.Unlock()
|
||||||
|
|
||||||
|
if n.respMap == nil {
|
||||||
|
return 0, nil, xerrors.Errorf("netstore closed")
|
||||||
|
}
|
||||||
|
delete(n.respMap, rid)
|
||||||
|
|
||||||
|
return 0, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return rid, respCh, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) waitResp(ctx context.Context, rch <-chan NetRpcResp, rid uint64) (NetRpcResp, error) {
|
||||||
|
select {
|
||||||
|
case resp := <-rch:
|
||||||
|
if resp.Type == NRpcErr {
|
||||||
|
var e NetRpcErr
|
||||||
|
if err := e.UnmarshalCBOR(bytes.NewReader(resp.Data)); err != nil {
|
||||||
|
return NetRpcResp{}, xerrors.Errorf("unmarshaling error data: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
switch e.Type {
|
||||||
|
case NRpcErrNotFound:
|
||||||
|
if e.Cid != nil {
|
||||||
|
err = ipld.ErrNotFound{
|
||||||
|
Cid: *e.Cid,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = xerrors.Errorf("block not found, but cid was null")
|
||||||
|
}
|
||||||
|
case NRpcErrGeneric:
|
||||||
|
err = xerrors.Errorf("generic error")
|
||||||
|
default:
|
||||||
|
err = xerrors.Errorf("unknown error type")
|
||||||
|
}
|
||||||
|
|
||||||
|
return NetRpcResp{}, xerrors.Errorf("netstore error response: %s (%w)", e.Msg, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
case <-ctx.Done():
|
||||||
|
// todo send cancel req
|
||||||
|
|
||||||
|
n.respLk.Lock()
|
||||||
|
if n.respMap != nil {
|
||||||
|
delete(n.respMap, rid)
|
||||||
|
}
|
||||||
|
n.respLk.Unlock()
|
||||||
|
|
||||||
|
return NetRpcResp{}, ctx.Err()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) Has(ctx context.Context, c cid.Cid) (bool, error) {
|
||||||
|
req, rch, err := n.sendRpc(NRpcHas, []cid.Cid{c}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(resp.Data) != 1 {
|
||||||
|
return false, xerrors.Errorf("expected reposnse length to be 1 byte")
|
||||||
|
}
|
||||||
|
switch resp.Data[0] {
|
||||||
|
case cbg.CborBoolTrue[0]:
|
||||||
|
return true, nil
|
||||||
|
case cbg.CborBoolFalse[0]:
|
||||||
|
return false, nil
|
||||||
|
default:
|
||||||
|
return false, xerrors.Errorf("has: bad response: %x", resp.Data[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) Get(ctx context.Context, c cid.Cid) (blocks.Block, error) {
|
||||||
|
req, rch, err := n.sendRpc(NRpcGet, []cid.Cid{c}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return blocks.NewBlockWithCid(resp.Data, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) View(ctx context.Context, c cid.Cid, callback func([]byte) error) error {
|
||||||
|
req, rch, err := n.sendRpc(NRpcGet, []cid.Cid{c}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return callback(resp.Data) // todo return buf to pool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) GetSize(ctx context.Context, c cid.Cid) (int, error) {
|
||||||
|
req, rch, err := n.sendRpc(NRpcGetSize, []cid.Cid{c}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(resp.Data) != 4 {
|
||||||
|
return 0, xerrors.Errorf("expected getsize response to be 4 bytes, was %d", resp.Data)
|
||||||
|
}
|
||||||
|
|
||||||
|
return int(binary.LittleEndian.Uint32(resp.Data)), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) Put(ctx context.Context, block blocks.Block) error {
|
||||||
|
return n.PutMany(ctx, []blocks.Block{block})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) PutMany(ctx context.Context, blocks []blocks.Block) error {
|
||||||
|
// todo pool
|
||||||
|
cids := make([]cid.Cid, len(blocks))
|
||||||
|
blkDatas := make([][]byte, len(blocks))
|
||||||
|
for i, block := range blocks {
|
||||||
|
cids[i] = block.Cid()
|
||||||
|
blkDatas[i] = block.RawData()
|
||||||
|
}
|
||||||
|
|
||||||
|
req, rch, err := n.sendRpc(NRpcPut, cids, blkDatas)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) DeleteBlock(ctx context.Context, c cid.Cid) error {
|
||||||
|
return n.DeleteMany(ctx, []cid.Cid{c})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) DeleteMany(ctx context.Context, cids []cid.Cid) error {
|
||||||
|
req, rch, err := n.sendRpc(NRpcDelete, cids, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = n.waitResp(ctx, rch, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) {
|
||||||
|
return nil, xerrors.Errorf("not supported")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NetworkStore) HashOnRead(enabled bool) {
|
||||||
|
// todo
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*NetworkStore) Flush(context.Context) error { return nil }
|
||||||
|
|
||||||
|
func (n *NetworkStore) Stop(ctx context.Context) error {
|
||||||
|
close(n.closing)
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-n.closed:
|
||||||
|
return nil
|
||||||
|
case <-ctx.Done():
|
||||||
|
return ctx.Err()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ Blockstore = &NetworkStore{}
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/binary"
|
||||||
|
|
||||||
|
block "github.com/ipfs/go-block-format"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
|
"github.com/libp2p/go-msgio"
|
||||||
|
cbg "github.com/whyrusleeping/cbor-gen"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NetworkStoreHandler struct {
|
||||||
|
msgStream msgio.ReadWriteCloser
|
||||||
|
|
||||||
|
bs Blockstore
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: This code isn't yet hardened to accept untrusted input. See TODOs here and in net.go
|
||||||
|
func HandleNetBstoreStream(ctx context.Context, bs Blockstore, mss msgio.ReadWriteCloser) *NetworkStoreHandler {
|
||||||
|
ns := &NetworkStoreHandler{
|
||||||
|
msgStream: mss,
|
||||||
|
bs: bs,
|
||||||
|
}
|
||||||
|
|
||||||
|
go ns.handle(ctx)
|
||||||
|
|
||||||
|
return ns
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *NetworkStoreHandler) handle(ctx context.Context) {
|
||||||
|
defer func() {
|
||||||
|
if err := h.msgStream.Close(); err != nil {
|
||||||
|
log.Errorw("error closing blockstore stream", "error", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for {
|
||||||
|
var req NetRpcReq
|
||||||
|
|
||||||
|
ms, err := h.msgStream.ReadMsg()
|
||||||
|
if err != nil {
|
||||||
|
log.Warnw("bstore stream err", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := req.UnmarshalCBOR(bytes.NewReader(ms)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
h.msgStream.ReleaseMsg(ms)
|
||||||
|
|
||||||
|
switch req.Type {
|
||||||
|
case NRpcHas:
|
||||||
|
if len(req.Cid) != 1 {
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("expected request for 1 cid"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := h.bs.Has(ctx, req.Cid[0])
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, req.Cid[0]); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var resData [1]byte
|
||||||
|
if res {
|
||||||
|
resData[0] = cbg.CborBoolTrue[0]
|
||||||
|
} else {
|
||||||
|
resData[0] = cbg.CborBoolFalse[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.respond(req.ID, NRpcOK, resData[:]); err != nil {
|
||||||
|
log.Warnw("writing response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
case NRpcGet:
|
||||||
|
if len(req.Cid) != 1 {
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("expected request for 1 cid"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
err := h.bs.View(ctx, req.Cid[0], func(bdata []byte) error {
|
||||||
|
return h.respond(req.ID, NRpcOK, bdata)
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, req.Cid[0]); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
case NRpcGetSize:
|
||||||
|
if len(req.Cid) != 1 {
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("expected request for 1 cid"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
sz, err := h.bs.GetSize(ctx, req.Cid[0])
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, req.Cid[0]); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var resData [4]byte
|
||||||
|
binary.LittleEndian.PutUint32(resData[:], uint32(sz))
|
||||||
|
|
||||||
|
if err := h.respond(req.ID, NRpcOK, resData[:]); err != nil {
|
||||||
|
log.Warnw("writing response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
case NRpcPut:
|
||||||
|
blocks := make([]block.Block, len(req.Cid))
|
||||||
|
|
||||||
|
if len(req.Cid) != len(req.Data) {
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("cid count didn't match data count"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range req.Cid {
|
||||||
|
blocks[i], err = block.NewBlockWithCid(req.Data[i], req.Cid[i])
|
||||||
|
if err != nil {
|
||||||
|
log.Warnw("make block", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err := h.bs.PutMany(ctx, blocks)
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.respond(req.ID, NRpcOK, []byte{}); err != nil {
|
||||||
|
log.Warnw("writing response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case NRpcDelete:
|
||||||
|
err := h.bs.DeleteMany(ctx, req.Cid)
|
||||||
|
if err != nil {
|
||||||
|
if err := h.respondError(req.ID, err, cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.respond(req.ID, NRpcOK, []byte{}); err != nil {
|
||||||
|
log.Warnw("writing response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if err := h.respondError(req.ID, xerrors.New("unsupported request type"), cid.Undef); err != nil {
|
||||||
|
log.Warnw("writing error response", "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *NetworkStoreHandler) respondError(req uint64, uerr error, c cid.Cid) error {
|
||||||
|
var resp NetRpcResp
|
||||||
|
resp.ID = req
|
||||||
|
resp.Type = NRpcErr
|
||||||
|
|
||||||
|
nerr := NetRpcErr{
|
||||||
|
Type: NRpcErrGeneric,
|
||||||
|
Msg: uerr.Error(),
|
||||||
|
}
|
||||||
|
if ipld.IsNotFound(uerr) {
|
||||||
|
nerr.Type = NRpcErrNotFound
|
||||||
|
nerr.Cid = &c
|
||||||
|
}
|
||||||
|
|
||||||
|
var edata bytes.Buffer
|
||||||
|
if err := nerr.MarshalCBOR(&edata); err != nil {
|
||||||
|
return xerrors.Errorf("marshaling error data: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.Data = edata.Bytes()
|
||||||
|
|
||||||
|
var msg bytes.Buffer
|
||||||
|
if err := resp.MarshalCBOR(&msg); err != nil {
|
||||||
|
return xerrors.Errorf("marshaling error response: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.msgStream.WriteMsg(msg.Bytes()); err != nil {
|
||||||
|
return xerrors.Errorf("write error response: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *NetworkStoreHandler) respond(req uint64, rt NetRPCRespType, data []byte) error {
|
||||||
|
var resp NetRpcResp
|
||||||
|
resp.ID = req
|
||||||
|
resp.Type = rt
|
||||||
|
resp.Data = data
|
||||||
|
|
||||||
|
var msg bytes.Buffer
|
||||||
|
if err := resp.MarshalCBOR(&msg); err != nil {
|
||||||
|
return xerrors.Errorf("marshaling response: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.msgStream.WriteMsg(msg.Bytes()); err != nil {
|
||||||
|
return xerrors.Errorf("write response: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
block "github.com/ipfs/go-block-format"
|
||||||
|
ipld "github.com/ipfs/go-ipld-format"
|
||||||
|
"github.com/libp2p/go-msgio"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNetBstore(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
cr, sw := io.Pipe()
|
||||||
|
sr, cw := io.Pipe()
|
||||||
|
|
||||||
|
cm := msgio.Combine(msgio.NewWriter(cw), msgio.NewReader(cr))
|
||||||
|
sm := msgio.Combine(msgio.NewWriter(sw), msgio.NewReader(sr))
|
||||||
|
|
||||||
|
bbs := NewMemorySync()
|
||||||
|
_ = HandleNetBstoreStream(ctx, bbs, sm)
|
||||||
|
|
||||||
|
nbs := NewNetworkStore(cm)
|
||||||
|
|
||||||
|
tb1 := block.NewBlock([]byte("aoeu"))
|
||||||
|
|
||||||
|
h, err := nbs.Has(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.False(t, h)
|
||||||
|
|
||||||
|
err = nbs.Put(ctx, tb1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
h, err = nbs.Has(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.True(t, h)
|
||||||
|
|
||||||
|
sz, err := nbs.GetSize(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, 4, sz)
|
||||||
|
|
||||||
|
err = nbs.DeleteBlock(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
h, err = nbs.Has(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.False(t, h)
|
||||||
|
|
||||||
|
_, err = nbs.Get(ctx, tb1.Cid())
|
||||||
|
fmt.Println(err)
|
||||||
|
require.True(t, ipld.IsNotFound(err))
|
||||||
|
|
||||||
|
err = nbs.Put(ctx, tb1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
b, err := nbs.Get(ctx, tb1.Cid())
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "aoeu", string(b.RawData()))
|
||||||
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
package blockstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/gorilla/websocket"
|
||||||
|
"github.com/libp2p/go-msgio"
|
||||||
|
"golang.org/x/xerrors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type wsWrapper struct {
|
||||||
|
wc *websocket.Conn
|
||||||
|
|
||||||
|
nextMsg []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) Read(b []byte) (int, error) {
|
||||||
|
return 0, xerrors.New("read unsupported")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) ReadMsg() ([]byte, error) {
|
||||||
|
if w.nextMsg != nil {
|
||||||
|
nm := w.nextMsg
|
||||||
|
w.nextMsg = nil
|
||||||
|
return nm, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mt, r, err := w.wc.NextReader()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch mt {
|
||||||
|
case websocket.BinaryMessage, websocket.TextMessage:
|
||||||
|
default:
|
||||||
|
return nil, xerrors.Errorf("unexpected message type")
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo pool
|
||||||
|
// todo limit sizes
|
||||||
|
var mbuf bytes.Buffer
|
||||||
|
if _, err := mbuf.ReadFrom(r); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return mbuf.Bytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) ReleaseMsg(bytes []byte) {
|
||||||
|
// todo use a pool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) NextMsgLen() (int, error) {
|
||||||
|
if w.nextMsg != nil {
|
||||||
|
return len(w.nextMsg), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mt, msg, err := w.wc.ReadMessage()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch mt {
|
||||||
|
case websocket.BinaryMessage, websocket.TextMessage:
|
||||||
|
default:
|
||||||
|
return 0, xerrors.Errorf("unexpected message type")
|
||||||
|
}
|
||||||
|
|
||||||
|
w.nextMsg = msg
|
||||||
|
return len(w.nextMsg), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) Write(bytes []byte) (int, error) {
|
||||||
|
return 0, xerrors.New("write unsupported")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) WriteMsg(bytes []byte) error {
|
||||||
|
return w.wc.WriteMessage(websocket.BinaryMessage, bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wsWrapper) Close() error {
|
||||||
|
return w.wc.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ msgio.ReadWriteCloser = &wsWrapper{}
|
||||||
|
|
||||||
|
func wsConnToMio(wc *websocket.Conn) msgio.ReadWriteCloser {
|
||||||
|
return &wsWrapper{
|
||||||
|
wc: wc,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func HandleNetBstoreWS(ctx context.Context, bs Blockstore, wc *websocket.Conn) *NetworkStoreHandler {
|
||||||
|
return HandleNetBstoreStream(ctx, bs, wsConnToMio(wc))
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNetworkStoreWS(wc *websocket.Conn) *NetworkStore {
|
||||||
|
return NewNetworkStore(wsConnToMio(wc))
|
||||||
|
}
|
||||||
@@ -11,6 +11,8 @@ import (
|
|||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
"github.com/filecoin-project/lotus/system"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BadgerMarkSetEnv struct {
|
type BadgerMarkSetEnv struct {
|
||||||
@@ -349,7 +351,7 @@ func (s *BadgerMarkSet) write(seqno int) (err error) {
|
|||||||
persist := s.persist
|
persist := s.persist
|
||||||
s.mx.RUnlock()
|
s.mx.RUnlock()
|
||||||
|
|
||||||
if persist {
|
if persist && !system.BadgerFsyncDisable { // WARNING: disabling sync makes recovery from crash during critical section unsound
|
||||||
return s.db.Sync()
|
return s.db.Sync()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package splitstore
|
package splitstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -98,6 +98,10 @@ type Config struct {
|
|||||||
// and directly purges cold blocks.
|
// and directly purges cold blocks.
|
||||||
DiscardColdBlocks bool
|
DiscardColdBlocks bool
|
||||||
|
|
||||||
|
// UniversalColdBlocks indicates whether all blocks being garbage collected and purged
|
||||||
|
// from the hotstore should be written to the cold store
|
||||||
|
UniversalColdBlocks bool
|
||||||
|
|
||||||
// HotstoreMessageRetention indicates the hotstore retention policy for messages.
|
// HotstoreMessageRetention indicates the hotstore retention policy for messages.
|
||||||
// It has the following semantics:
|
// It has the following semantics:
|
||||||
// - a value of 0 will only retain messages within the compaction boundary (4 finalities)
|
// - a value of 0 will only retain messages within the compaction boundary (4 finalities)
|
||||||
@@ -112,20 +116,22 @@ type Config struct {
|
|||||||
// a value of 1 will perform full GC in every compaction.
|
// a value of 1 will perform full GC in every compaction.
|
||||||
HotStoreFullGCFrequency uint64
|
HotStoreFullGCFrequency uint64
|
||||||
|
|
||||||
// EnableColdStoreAutoPrune turns on compaction of the cold store i.e. pruning
|
// HotstoreMaxSpaceTarget suggests the max allowed space the hotstore can take.
|
||||||
// where hotstore compaction occurs every finality epochs pruning happens every 3 finalities
|
// This is not a hard limit, it is possible for the hotstore to exceed the target
|
||||||
// Default is false
|
// for example if state grows massively between compactions. The splitstore
|
||||||
EnableColdStoreAutoPrune bool
|
// will make a best effort to avoid overflowing the target and in practice should
|
||||||
|
// never overflow. This field is used when doing GC at the end of a compaction to
|
||||||
|
// adaptively choose moving GC
|
||||||
|
HotstoreMaxSpaceTarget uint64
|
||||||
|
|
||||||
// ColdStoreFullGCFrequency specifies how often to performa a full (moving) GC on the coldstore.
|
// Moving GC will be triggered when total moving size exceeds
|
||||||
// Only applies if auto prune is enabled. A value of 0 disables while a value of 1 will do
|
// HotstoreMaxSpaceTarget - HotstoreMaxSpaceThreshold
|
||||||
// full GC in every prune.
|
HotstoreMaxSpaceThreshold uint64
|
||||||
// Default is 7 (about once every a week)
|
|
||||||
ColdStoreFullGCFrequency uint64
|
|
||||||
|
|
||||||
// ColdStoreRetention specifies the retention policy for data reachable from the chain, in
|
// Safety buffer to prevent moving GC from overflowing disk.
|
||||||
// finalities beyond the compaction boundary, default is 0, -1 retains everything
|
// Moving GC will not occur when total moving size exceeds
|
||||||
ColdStoreRetention int64
|
// HotstoreMaxSpaceTarget - HotstoreMaxSpaceSafetyBuffer
|
||||||
|
HotstoreMaxSpaceSafetyBuffer uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
// ChainAccessor allows the Splitstore to access the chain. It will most likely
|
// ChainAccessor allows the Splitstore to access the chain. It will most likely
|
||||||
@@ -158,7 +164,7 @@ type SplitStore struct {
|
|||||||
path string
|
path string
|
||||||
|
|
||||||
mx sync.Mutex
|
mx sync.Mutex
|
||||||
warmupEpoch abi.ChainEpoch // protected by mx
|
warmupEpoch atomic.Int64
|
||||||
baseEpoch abi.ChainEpoch // protected by compaction lock
|
baseEpoch abi.ChainEpoch // protected by compaction lock
|
||||||
pruneEpoch abi.ChainEpoch // protected by compaction lock
|
pruneEpoch abi.ChainEpoch // protected by compaction lock
|
||||||
|
|
||||||
@@ -176,10 +182,16 @@ type SplitStore struct {
|
|||||||
|
|
||||||
compactionIndex int64
|
compactionIndex int64
|
||||||
pruneIndex int64
|
pruneIndex int64
|
||||||
|
onlineGCCnt int64
|
||||||
|
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel func()
|
cancel func()
|
||||||
|
|
||||||
|
outOfSync int32 // for fast checking
|
||||||
|
chainSyncMx sync.Mutex
|
||||||
|
chainSyncCond sync.Cond
|
||||||
|
chainSyncFinished bool // protected by chainSyncMx
|
||||||
|
|
||||||
debug *debugLog
|
debug *debugLog
|
||||||
|
|
||||||
// transactional protection for concurrent read/writes during compaction
|
// transactional protection for concurrent read/writes during compaction
|
||||||
@@ -206,6 +218,17 @@ type SplitStore struct {
|
|||||||
|
|
||||||
// registered protectors
|
// registered protectors
|
||||||
protectors []func(func(cid.Cid) error) error
|
protectors []func(func(cid.Cid) error) error
|
||||||
|
|
||||||
|
// dag sizes measured during latest compaction
|
||||||
|
// logged and used for GC strategy
|
||||||
|
|
||||||
|
// protected by compaction lock
|
||||||
|
szWalk int64
|
||||||
|
szProtectedTxns int64
|
||||||
|
szKeys int64 // approximate, not counting keys protected when entering critical section
|
||||||
|
|
||||||
|
// protected by txnLk
|
||||||
|
szMarkedLiveRefs int64
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ bstore.Blockstore = (*SplitStore)(nil)
|
var _ bstore.Blockstore = (*SplitStore)(nil)
|
||||||
@@ -243,6 +266,7 @@ func Open(path string, ds dstore.Datastore, hot, cold bstore.Blockstore, cfg *Co
|
|||||||
|
|
||||||
ss.txnViewsCond.L = &ss.txnViewsMx
|
ss.txnViewsCond.L = &ss.txnViewsMx
|
||||||
ss.txnSyncCond.L = &ss.txnSyncMx
|
ss.txnSyncCond.L = &ss.txnSyncMx
|
||||||
|
ss.chainSyncCond.L = &ss.chainSyncMx
|
||||||
ss.ctx, ss.cancel = context.WithCancel(context.Background())
|
ss.ctx, ss.cancel = context.WithCancel(context.Background())
|
||||||
|
|
||||||
ss.reifyCond.L = &ss.reifyMx
|
ss.reifyCond.L = &ss.reifyMx
|
||||||
@@ -458,6 +482,23 @@ func (s *SplitStore) GetSize(ctx context.Context, cid cid.Cid) (int, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SplitStore) Flush(ctx context.Context) error {
|
||||||
|
s.txnLk.RLock()
|
||||||
|
defer s.txnLk.RUnlock()
|
||||||
|
|
||||||
|
if err := s.cold.Flush(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := s.hot.Flush(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := s.ds.Sync(ctx, dstore.Key{}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *SplitStore) Put(ctx context.Context, blk blocks.Block) error {
|
func (s *SplitStore) Put(ctx context.Context, blk blocks.Block) error {
|
||||||
if isIdentiyCid(blk.Cid()) {
|
if isIdentiyCid(blk.Cid()) {
|
||||||
return nil
|
return nil
|
||||||
@@ -643,9 +684,7 @@ func (s *SplitStore) View(ctx context.Context, cid cid.Cid, cb func([]byte) erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SplitStore) isWarm() bool {
|
func (s *SplitStore) isWarm() bool {
|
||||||
s.mx.Lock()
|
return s.warmupEpoch.Load() > 0
|
||||||
defer s.mx.Unlock()
|
|
||||||
return s.warmupEpoch > 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// State tracking
|
// State tracking
|
||||||
@@ -716,7 +755,7 @@ func (s *SplitStore) Start(chain ChainAccessor, us stmgr.UpgradeSchedule) error
|
|||||||
bs, err = s.ds.Get(s.ctx, warmupEpochKey)
|
bs, err = s.ds.Get(s.ctx, warmupEpochKey)
|
||||||
switch err {
|
switch err {
|
||||||
case nil:
|
case nil:
|
||||||
s.warmupEpoch = bytesToEpoch(bs)
|
s.warmupEpoch.Store(bytesToInt64(bs))
|
||||||
|
|
||||||
case dstore.ErrNotFound:
|
case dstore.ErrNotFound:
|
||||||
warmup = true
|
warmup = true
|
||||||
@@ -750,7 +789,7 @@ func (s *SplitStore) Start(chain ChainAccessor, us stmgr.UpgradeSchedule) error
|
|||||||
return xerrors.Errorf("error loading compaction index: %w", err)
|
return xerrors.Errorf("error loading compaction index: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infow("starting splitstore", "baseEpoch", s.baseEpoch, "warmupEpoch", s.warmupEpoch)
|
log.Infow("starting splitstore", "baseEpoch", s.baseEpoch, "warmupEpoch", s.warmupEpoch.Load())
|
||||||
|
|
||||||
if warmup {
|
if warmup {
|
||||||
err = s.warmup(curTs)
|
err = s.warmup(curTs)
|
||||||
@@ -787,6 +826,11 @@ func (s *SplitStore) Close() error {
|
|||||||
s.txnSyncCond.Broadcast()
|
s.txnSyncCond.Broadcast()
|
||||||
s.txnSyncMx.Unlock()
|
s.txnSyncMx.Unlock()
|
||||||
|
|
||||||
|
s.chainSyncMx.Lock()
|
||||||
|
s.chainSyncFinished = true
|
||||||
|
s.chainSyncCond.Broadcast()
|
||||||
|
s.chainSyncMx.Unlock()
|
||||||
|
|
||||||
log.Warn("close with ongoing compaction in progress; waiting for it to finish...")
|
log.Warn("close with ongoing compaction in progress; waiting for it to finish...")
|
||||||
for atomic.LoadInt32(&s.compacting) == 1 {
|
for atomic.LoadInt32(&s.compacting) == 1 {
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ func (s *SplitStore) doCheck(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
defer visitor.Close() //nolint
|
defer visitor.Close() //nolint
|
||||||
|
|
||||||
err = s.walkChain(curTs, boundaryEpoch, boundaryEpoch, visitor,
|
size := s.walkChain(curTs, boundaryEpoch, boundaryEpoch, visitor,
|
||||||
func(c cid.Cid) error {
|
func(c cid.Cid) error {
|
||||||
if isUnitaryObject(c) {
|
if isUnitaryObject(c) {
|
||||||
return errStopWalk
|
return errStopWalk
|
||||||
@@ -125,7 +125,7 @@ func (s *SplitStore) doCheck(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
}, func(cid.Cid) error { return nil })
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = xerrors.Errorf("error walking chain: %w", err)
|
err = xerrors.Errorf("error walking chain: %w", err)
|
||||||
@@ -133,7 +133,7 @@ func (s *SplitStore) doCheck(curTs *types.TipSet) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infow("check done", "cold", *coldCnt, "missing", *missingCnt)
|
log.Infow("check done", "cold", *coldCnt, "missing", *missingCnt, "walk size", size)
|
||||||
write("--")
|
write("--")
|
||||||
write("cold: %d missing: %d", *coldCnt, *missingCnt)
|
write("cold: %d missing: %d", *coldCnt, *missingCnt)
|
||||||
write("DONE")
|
write("DONE")
|
||||||
@@ -145,7 +145,7 @@ func (s *SplitStore) doCheck(curTs *types.TipSet) error {
|
|||||||
func (s *SplitStore) Info() map[string]interface{} {
|
func (s *SplitStore) Info() map[string]interface{} {
|
||||||
info := make(map[string]interface{})
|
info := make(map[string]interface{})
|
||||||
info["base epoch"] = s.baseEpoch
|
info["base epoch"] = s.baseEpoch
|
||||||
info["warmup epoch"] = s.warmupEpoch
|
info["warmup epoch"] = s.warmupEpoch.Load()
|
||||||
info["compactions"] = s.compactionIndex
|
info["compactions"] = s.compactionIndex
|
||||||
info["prunes"] = s.pruneIndex
|
info["prunes"] = s.pruneIndex
|
||||||
info["compacting"] = s.compacting == 1
|
info["compacting"] = s.compacting == 1
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import (
|
|||||||
|
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
|
||||||
bstore "github.com/filecoin-project/lotus/blockstore"
|
|
||||||
"github.com/filecoin-project/lotus/build"
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain/types"
|
"github.com/filecoin-project/lotus/chain/types"
|
||||||
"github.com/filecoin-project/lotus/metrics"
|
"github.com/filecoin-project/lotus/metrics"
|
||||||
@@ -67,7 +66,8 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
batchSize = 16384
|
batchSize = 16384
|
||||||
|
cidKeySize = 128
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *SplitStore) HeadChange(_, apply []*types.TipSet) error {
|
func (s *SplitStore) HeadChange(_, apply []*types.TipSet) error {
|
||||||
@@ -91,7 +91,35 @@ func (s *SplitStore) HeadChange(_, apply []*types.TipSet) error {
|
|||||||
// Regardless, we put a mutex in HeadChange just to be safe
|
// Regardless, we put a mutex in HeadChange just to be safe
|
||||||
|
|
||||||
if !atomic.CompareAndSwapInt32(&s.compacting, 0, 1) {
|
if !atomic.CompareAndSwapInt32(&s.compacting, 0, 1) {
|
||||||
// we are currently compacting -- protect the new tipset(s)
|
// we are currently compacting
|
||||||
|
// 1. Signal sync condition to yield compaction when out of sync and resume when in sync
|
||||||
|
timestamp := time.Unix(int64(curTs.MinTimestamp()), 0)
|
||||||
|
if CheckSyncGap && time.Since(timestamp) > SyncGapTime {
|
||||||
|
/* Chain out of sync */
|
||||||
|
if atomic.CompareAndSwapInt32(&s.outOfSync, 0, 1) {
|
||||||
|
// transition from in sync to out of sync
|
||||||
|
s.chainSyncMx.Lock()
|
||||||
|
s.chainSyncFinished = false
|
||||||
|
s.chainSyncMx.Unlock()
|
||||||
|
}
|
||||||
|
// already out of sync, no signaling necessary
|
||||||
|
|
||||||
|
}
|
||||||
|
// TODO: ok to use hysteresis with no transitions between 30s and 1m?
|
||||||
|
if time.Since(timestamp) < SyncWaitTime {
|
||||||
|
/* Chain in sync */
|
||||||
|
if atomic.CompareAndSwapInt32(&s.outOfSync, 0, 0) {
|
||||||
|
// already in sync, no signaling necessary
|
||||||
|
} else {
|
||||||
|
// transition from out of sync to in sync
|
||||||
|
s.chainSyncMx.Lock()
|
||||||
|
s.chainSyncFinished = true
|
||||||
|
s.chainSyncCond.Broadcast()
|
||||||
|
s.chainSyncMx.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// 2. protect the new tipset(s)
|
||||||
s.protectTipSets(apply)
|
s.protectTipSets(apply)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -116,8 +144,6 @@ func (s *SplitStore) HeadChange(_, apply []*types.TipSet) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prioritize hot store compaction over cold store prune
|
|
||||||
|
|
||||||
if epoch-s.baseEpoch > CompactionThreshold {
|
if epoch-s.baseEpoch > CompactionThreshold {
|
||||||
// it's time to compact -- prepare the transaction and go!
|
// it's time to compact -- prepare the transaction and go!
|
||||||
s.beginTxnProtect()
|
s.beginTxnProtect()
|
||||||
@@ -134,39 +160,6 @@ func (s *SplitStore) HeadChange(_, apply []*types.TipSet) error {
|
|||||||
log.Infow("compaction done", "took", time.Since(start))
|
log.Infow("compaction done", "took", time.Since(start))
|
||||||
}()
|
}()
|
||||||
// only prune if auto prune is enabled and after at least one compaction
|
// only prune if auto prune is enabled and after at least one compaction
|
||||||
} else if s.cfg.EnableColdStoreAutoPrune && epoch-s.pruneEpoch > PruneThreshold && s.compactionIndex > 0 {
|
|
||||||
s.beginTxnProtect()
|
|
||||||
s.compactType = cold
|
|
||||||
go func() {
|
|
||||||
defer atomic.StoreInt32(&s.compacting, 0)
|
|
||||||
defer s.endTxnProtect()
|
|
||||||
|
|
||||||
log.Info("pruning splitstore")
|
|
||||||
start := time.Now()
|
|
||||||
|
|
||||||
var retainP func(int64) bool
|
|
||||||
switch {
|
|
||||||
case s.cfg.ColdStoreRetention > int64(0):
|
|
||||||
retainP = func(depth int64) bool {
|
|
||||||
return depth <= int64(CompactionBoundary)+s.cfg.ColdStoreRetention*int64(build.Finality)
|
|
||||||
}
|
|
||||||
case s.cfg.ColdStoreRetention < 0:
|
|
||||||
retainP = func(_ int64) bool { return true }
|
|
||||||
default:
|
|
||||||
retainP = func(depth int64) bool {
|
|
||||||
return depth <= int64(CompactionBoundary)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
movingGC := s.cfg.ColdStoreFullGCFrequency > 0 && s.pruneIndex%int64(s.cfg.ColdStoreFullGCFrequency) == 0
|
|
||||||
var gcOpts []bstore.BlockstoreGCOption
|
|
||||||
if movingGC {
|
|
||||||
gcOpts = append(gcOpts, bstore.WithFullGC(true))
|
|
||||||
}
|
|
||||||
doGC := func() error { return s.gcBlockstore(s.cold, gcOpts) }
|
|
||||||
|
|
||||||
s.prune(curTs, retainP, doGC)
|
|
||||||
log.Infow("prune done", "took", time.Since(start))
|
|
||||||
}()
|
|
||||||
} else {
|
} else {
|
||||||
// no compaction necessary
|
// no compaction necessary
|
||||||
atomic.StoreInt32(&s.compacting, 0)
|
atomic.StoreInt32(&s.compacting, 0)
|
||||||
@@ -210,6 +203,8 @@ func (s *SplitStore) protectTipSets(apply []*types.TipSet) {
|
|||||||
timestamp := time.Unix(int64(curTs.MinTimestamp()), 0)
|
timestamp := time.Unix(int64(curTs.MinTimestamp()), 0)
|
||||||
doSync := time.Since(timestamp) < SyncWaitTime
|
doSync := time.Since(timestamp) < SyncWaitTime
|
||||||
go func() {
|
go func() {
|
||||||
|
// we are holding the txnLk while marking
|
||||||
|
// so critical section cannot delete
|
||||||
if doSync {
|
if doSync {
|
||||||
defer func() {
|
defer func() {
|
||||||
s.txnSyncMx.Lock()
|
s.txnSyncMx.Lock()
|
||||||
@@ -233,9 +228,11 @@ func (s *SplitStore) markLiveRefs(cids []cid.Cid) {
|
|||||||
log.Debugf("marking %d live refs", len(cids))
|
log.Debugf("marking %d live refs", len(cids))
|
||||||
startMark := time.Now()
|
startMark := time.Now()
|
||||||
|
|
||||||
|
szMarked := new(int64)
|
||||||
|
|
||||||
count := new(int32)
|
count := new(int32)
|
||||||
visitor := newConcurrentVisitor()
|
visitor := newConcurrentVisitor()
|
||||||
walkObject := func(c cid.Cid) error {
|
walkObject := func(c cid.Cid) (int64, error) {
|
||||||
return s.walkObjectIncomplete(c, visitor,
|
return s.walkObjectIncomplete(c, visitor,
|
||||||
func(c cid.Cid) error {
|
func(c cid.Cid) error {
|
||||||
if isUnitaryObject(c) {
|
if isUnitaryObject(c) {
|
||||||
@@ -262,10 +259,12 @@ func (s *SplitStore) markLiveRefs(cids []cid.Cid) {
|
|||||||
|
|
||||||
// optimize the common case of single put
|
// optimize the common case of single put
|
||||||
if len(cids) == 1 {
|
if len(cids) == 1 {
|
||||||
if err := walkObject(cids[0]); err != nil {
|
sz, err := walkObject(cids[0])
|
||||||
|
if err != nil {
|
||||||
log.Errorf("error marking tipset refs: %s", err)
|
log.Errorf("error marking tipset refs: %s", err)
|
||||||
}
|
}
|
||||||
log.Debugw("marking live refs done", "took", time.Since(startMark), "marked", *count)
|
log.Debugw("marking live refs done", "took", time.Since(startMark), "marked", *count)
|
||||||
|
atomic.AddInt64(szMarked, sz)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,9 +276,11 @@ func (s *SplitStore) markLiveRefs(cids []cid.Cid) {
|
|||||||
|
|
||||||
worker := func() error {
|
worker := func() error {
|
||||||
for c := range workch {
|
for c := range workch {
|
||||||
if err := walkObject(c); err != nil {
|
sz, err := walkObject(c)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
atomic.AddInt64(szMarked, sz)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -302,7 +303,8 @@ func (s *SplitStore) markLiveRefs(cids []cid.Cid) {
|
|||||||
log.Errorf("error marking tipset refs: %s", err)
|
log.Errorf("error marking tipset refs: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debugw("marking live refs done", "took", time.Since(startMark), "marked", *count)
|
log.Debugw("marking live refs done", "took", time.Since(startMark), "marked", *count, "size marked", *szMarked)
|
||||||
|
s.szMarkedLiveRefs += atomic.LoadInt64(szMarked)
|
||||||
}
|
}
|
||||||
|
|
||||||
// transactionally protect a view
|
// transactionally protect a view
|
||||||
@@ -395,6 +397,7 @@ func (s *SplitStore) protectTxnRefs(markSet MarkSet) error {
|
|||||||
|
|
||||||
log.Infow("protecting transactional references", "refs", len(txnRefs))
|
log.Infow("protecting transactional references", "refs", len(txnRefs))
|
||||||
count := 0
|
count := 0
|
||||||
|
sz := new(int64)
|
||||||
workch := make(chan cid.Cid, len(txnRefs))
|
workch := make(chan cid.Cid, len(txnRefs))
|
||||||
startProtect := time.Now()
|
startProtect := time.Now()
|
||||||
|
|
||||||
@@ -427,10 +430,11 @@ func (s *SplitStore) protectTxnRefs(markSet MarkSet) error {
|
|||||||
|
|
||||||
worker := func() error {
|
worker := func() error {
|
||||||
for c := range workch {
|
for c := range workch {
|
||||||
err := s.doTxnProtect(c, markSet)
|
szTxn, err := s.doTxnProtect(c, markSet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error protecting transactional references to %s: %w", c, err)
|
return xerrors.Errorf("error protecting transactional references to %s: %w", c, err)
|
||||||
}
|
}
|
||||||
|
atomic.AddInt64(sz, szTxn)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -443,16 +447,16 @@ func (s *SplitStore) protectTxnRefs(markSet MarkSet) error {
|
|||||||
if err := g.Wait(); err != nil {
|
if err := g.Wait(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
s.szProtectedTxns += atomic.LoadInt64(sz)
|
||||||
log.Infow("protecting transactional refs done", "took", time.Since(startProtect), "protected", count)
|
log.Infow("protecting transactional refs done", "took", time.Since(startProtect), "protected", count, "protected size", sz)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// transactionally protect a reference by walking the object and marking.
|
// transactionally protect a reference by walking the object and marking.
|
||||||
// concurrent markings are short circuited by checking the markset.
|
// concurrent markings are short circuited by checking the markset.
|
||||||
func (s *SplitStore) doTxnProtect(root cid.Cid, markSet MarkSet) error {
|
func (s *SplitStore) doTxnProtect(root cid.Cid, markSet MarkSet) (int64, error) {
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkClosing(); err != nil {
|
||||||
return err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: cold objects are deleted heaviest first, so the consituents of an object
|
// Note: cold objects are deleted heaviest first, so the consituents of an object
|
||||||
@@ -476,7 +480,7 @@ func (s *SplitStore) doTxnProtect(root cid.Cid, markSet MarkSet) error {
|
|||||||
},
|
},
|
||||||
func(c cid.Cid) error {
|
func(c cid.Cid) error {
|
||||||
if s.txnMissing != nil {
|
if s.txnMissing != nil {
|
||||||
log.Warnf("missing object reference %s in %s", c, root)
|
log.Debugf("missing object reference %s in %s", c, root)
|
||||||
s.txnRefsMx.Lock()
|
s.txnRefsMx.Lock()
|
||||||
s.txnMissing[c] = struct{}{}
|
s.txnMissing[c] = struct{}{}
|
||||||
s.txnRefsMx.Unlock()
|
s.txnRefsMx.Unlock()
|
||||||
@@ -519,6 +523,7 @@ func (s *SplitStore) applyProtectors() error {
|
|||||||
// - At this point we are ready to begin purging:
|
// - At this point we are ready to begin purging:
|
||||||
// - We sort cold objects heaviest first, so as to never delete the consituents of a DAG before the DAG itself (which would leave dangling references)
|
// - We sort cold objects heaviest first, so as to never delete the consituents of a DAG before the DAG itself (which would leave dangling references)
|
||||||
// - We delete in small batches taking a lock; each batch is checked again for marks, from the concurrent transactional mark, so as to never delete anything live
|
// - We delete in small batches taking a lock; each batch is checked again for marks, from the concurrent transactional mark, so as to never delete anything live
|
||||||
|
//
|
||||||
// - We then end the transaction and compact/gc the hotstore.
|
// - We then end the transaction and compact/gc the hotstore.
|
||||||
func (s *SplitStore) compact(curTs *types.TipSet) {
|
func (s *SplitStore) compact(curTs *types.TipSet) {
|
||||||
log.Info("waiting for active views to complete")
|
log.Info("waiting for active views to complete")
|
||||||
@@ -542,6 +547,7 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
// might be potentially inconsistent; abort compaction and notify the user to intervene.
|
// might be potentially inconsistent; abort compaction and notify the user to intervene.
|
||||||
return xerrors.Errorf("checkpoint exists; aborting compaction")
|
return xerrors.Errorf("checkpoint exists; aborting compaction")
|
||||||
}
|
}
|
||||||
|
s.clearSizeMeasurements()
|
||||||
|
|
||||||
currentEpoch := curTs.Height()
|
currentEpoch := curTs.Height()
|
||||||
boundaryEpoch := currentEpoch - CompactionBoundary
|
boundaryEpoch := currentEpoch - CompactionBoundary
|
||||||
@@ -561,7 +567,13 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
defer markSet.Close() //nolint:errcheck
|
defer markSet.Close() //nolint:errcheck
|
||||||
defer s.debug.Flush()
|
defer s.debug.Flush()
|
||||||
|
|
||||||
if err := s.checkClosing(); err != nil {
|
coldSet, err := s.markSetEnv.New("cold", s.markSetSize)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error creating cold mark set: %w", err)
|
||||||
|
}
|
||||||
|
defer coldSet.Close() //nolint:errcheck
|
||||||
|
|
||||||
|
if err := s.checkYield(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -579,25 +591,52 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
startMark := time.Now()
|
startMark := time.Now()
|
||||||
|
|
||||||
count := new(int64)
|
count := new(int64)
|
||||||
err = s.walkChain(curTs, boundaryEpoch, inclMsgsEpoch, &noopVisitor{},
|
|
||||||
func(c cid.Cid) error {
|
|
||||||
if isUnitaryObject(c) {
|
|
||||||
return errStopWalk
|
|
||||||
}
|
|
||||||
|
|
||||||
visit, err := markSet.Visit(c)
|
coldCount := new(int64)
|
||||||
if err != nil {
|
fCold := func(c cid.Cid) error {
|
||||||
return xerrors.Errorf("error visiting object: %w", err)
|
// Writes to cold set optimized away in universal and discard mode
|
||||||
}
|
//
|
||||||
|
// Nothing gets written to cold store in discard mode so no cold objects to write
|
||||||
if !visit {
|
// Everything not marked hot gets written to cold store in universal mode so no need to track cold objects separately
|
||||||
return errStopWalk
|
if s.cfg.DiscardColdBlocks || s.cfg.UniversalColdBlocks {
|
||||||
}
|
|
||||||
|
|
||||||
atomic.AddInt64(count, 1)
|
|
||||||
return nil
|
return nil
|
||||||
})
|
}
|
||||||
|
|
||||||
|
if isUnitaryObject(c) {
|
||||||
|
return errStopWalk
|
||||||
|
}
|
||||||
|
|
||||||
|
visit, err := coldSet.Visit(c)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error visiting object: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !visit {
|
||||||
|
return errStopWalk
|
||||||
|
}
|
||||||
|
|
||||||
|
atomic.AddInt64(coldCount, 1)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
fHot := func(c cid.Cid) error {
|
||||||
|
if isUnitaryObject(c) {
|
||||||
|
return errStopWalk
|
||||||
|
}
|
||||||
|
|
||||||
|
visit, err := markSet.Visit(c)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error visiting object: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !visit {
|
||||||
|
return errStopWalk
|
||||||
|
}
|
||||||
|
|
||||||
|
atomic.AddInt64(count, 1)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.walkChain(curTs, boundaryEpoch, inclMsgsEpoch, &noopVisitor{}, fHot, fCold)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error marking: %w", err)
|
return xerrors.Errorf("error marking: %w", err)
|
||||||
}
|
}
|
||||||
@@ -606,7 +645,7 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
|
|
||||||
log.Infow("marking done", "took", time.Since(startMark), "marked", *count)
|
log.Infow("marking done", "took", time.Since(startMark), "marked", *count)
|
||||||
|
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkYield(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -616,7 +655,7 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
return xerrors.Errorf("error protecting transactional refs: %w", err)
|
return xerrors.Errorf("error protecting transactional refs: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkYield(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -630,8 +669,14 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
defer coldw.Close() //nolint:errcheck
|
defer coldw.Close() //nolint:errcheck
|
||||||
|
|
||||||
|
purgew, err := NewColdSetWriter(s.discardSetPath())
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error creating deadset: %w", err)
|
||||||
|
}
|
||||||
|
defer purgew.Close() //nolint:errcheck
|
||||||
|
|
||||||
// some stats for logging
|
// some stats for logging
|
||||||
var hotCnt, coldCnt int
|
var hotCnt, coldCnt, purgeCnt int64
|
||||||
err = s.hot.ForEachKey(func(c cid.Cid) error {
|
err = s.hot.ForEachKey(func(c cid.Cid) error {
|
||||||
// was it marked?
|
// was it marked?
|
||||||
mark, err := markSet.Has(c)
|
mark, err := markSet.Has(c)
|
||||||
@@ -644,9 +689,27 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// it's cold, mark it as candidate for move
|
// it needs to be removed from hot store, mark it as candidate for purge
|
||||||
|
if err := purgew.Write(c); err != nil {
|
||||||
|
return xerrors.Errorf("error writing cid to purge set: %w", err)
|
||||||
|
}
|
||||||
|
purgeCnt++
|
||||||
|
|
||||||
|
coldMark, err := coldSet.Has(c)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error checking cold mark set for %s: %w", c, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Discard mode: coldMark == false, s.cfg.UniversalColdBlocks == false, always return here, no writes to cold store
|
||||||
|
// Universal mode: coldMark == false, s.cfg.UniversalColdBlocks == true, never stop here, all writes to cold store
|
||||||
|
// Otherwise: s.cfg.UniversalColdBlocks == false, if !coldMark stop here and don't write to cold store, if coldMark continue and write to cold store
|
||||||
|
if !coldMark && !s.cfg.UniversalColdBlocks { // universal mode means mark everything as cold
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// it's cold, mark as candidate for move
|
||||||
if err := coldw.Write(c); err != nil {
|
if err := coldw.Write(c); err != nil {
|
||||||
return xerrors.Errorf("error writing cid to coldstore: %w", err)
|
return xerrors.Errorf("error writing cid to cold set")
|
||||||
}
|
}
|
||||||
coldCnt++
|
coldCnt++
|
||||||
|
|
||||||
@@ -655,18 +718,21 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error collecting cold objects: %w", err)
|
return xerrors.Errorf("error collecting cold objects: %w", err)
|
||||||
}
|
}
|
||||||
|
if err := purgew.Close(); err != nil {
|
||||||
|
return xerrors.Errorf("erroring closing purgeset: %w", err)
|
||||||
|
}
|
||||||
if err := coldw.Close(); err != nil {
|
if err := coldw.Close(); err != nil {
|
||||||
return xerrors.Errorf("error closing coldset: %w", err)
|
return xerrors.Errorf("error closing coldset: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infow("cold collection done", "took", time.Since(startCollect))
|
log.Infow("cold collection done", "took", time.Since(startCollect))
|
||||||
|
|
||||||
log.Infow("compaction stats", "hot", hotCnt, "cold", coldCnt)
|
log.Infow("compaction stats", "hot", hotCnt, "cold", coldCnt, "purge", purgeCnt)
|
||||||
stats.Record(s.ctx, metrics.SplitstoreCompactionHot.M(int64(hotCnt)))
|
s.szKeys = hotCnt * cidKeySize
|
||||||
stats.Record(s.ctx, metrics.SplitstoreCompactionCold.M(int64(coldCnt)))
|
stats.Record(s.ctx, metrics.SplitstoreCompactionHot.M(hotCnt))
|
||||||
|
stats.Record(s.ctx, metrics.SplitstoreCompactionCold.M(coldCnt))
|
||||||
|
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkYield(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -675,7 +741,7 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
// possibly delete objects we didn't have when we were collecting cold objects)
|
// possibly delete objects we didn't have when we were collecting cold objects)
|
||||||
s.waitForMissingRefs(markSet)
|
s.waitForMissingRefs(markSet)
|
||||||
|
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkYield(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -695,7 +761,7 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
log.Infow("moving done", "took", time.Since(startMove))
|
log.Infow("moving done", "took", time.Since(startMove))
|
||||||
|
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkYield(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -704,6 +770,12 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
purger, err := NewColdSetReader(s.discardSetPath())
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error opening coldset: %w", err)
|
||||||
|
}
|
||||||
|
defer purger.Close() //nolint:errcheck
|
||||||
|
|
||||||
// 4. Purge cold objects with checkpointing for recovery.
|
// 4. Purge cold objects with checkpointing for recovery.
|
||||||
// This is the critical section of compaction, whereby any cold object not in the markSet is
|
// This is the critical section of compaction, whereby any cold object not in the markSet is
|
||||||
// considered already deleted.
|
// considered already deleted.
|
||||||
@@ -720,7 +792,7 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// wait for the head to catch up so that the current tipset is marked
|
// wait for the head to catch up so that the current tipset is marked
|
||||||
s.waitForSync()
|
s.waitForTxnSync()
|
||||||
|
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkClosing(); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -735,13 +807,13 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
// 5. purge cold objects from the hotstore, taking protected references into account
|
// 5. purge cold objects from the hotstore, taking protected references into account
|
||||||
log.Info("purging cold objects from the hotstore")
|
log.Info("purging cold objects from the hotstore")
|
||||||
startPurge := time.Now()
|
startPurge := time.Now()
|
||||||
err = s.purge(coldr, checkpoint, markSet)
|
err = s.purge(purger, checkpoint, markSet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error purging cold objects: %w", err)
|
return xerrors.Errorf("error purging cold objects: %w", err)
|
||||||
}
|
}
|
||||||
log.Infow("purging cold objects from hotstore done", "took", time.Since(startPurge))
|
log.Infow("purging cold objects from hotstore done", "took", time.Since(startPurge))
|
||||||
|
|
||||||
s.endCriticalSection()
|
s.endCriticalSection()
|
||||||
|
log.Infow("critical section done", "total protected size", s.szProtectedTxns, "total marked live size", s.szMarkedLiveRefs)
|
||||||
|
|
||||||
if err := checkpoint.Close(); err != nil {
|
if err := checkpoint.Close(); err != nil {
|
||||||
log.Warnf("error closing checkpoint: %s", err)
|
log.Warnf("error closing checkpoint: %s", err)
|
||||||
@@ -755,10 +827,13 @@ func (s *SplitStore) doCompact(curTs *types.TipSet) error {
|
|||||||
if err := os.Remove(s.coldSetPath()); err != nil {
|
if err := os.Remove(s.coldSetPath()); err != nil {
|
||||||
log.Warnf("error removing coldset: %s", err)
|
log.Warnf("error removing coldset: %s", err)
|
||||||
}
|
}
|
||||||
|
if err := os.Remove(s.discardSetPath()); err != nil {
|
||||||
|
log.Warnf("error removing discardset: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
// we are done; do some housekeeping
|
// we are done; do some housekeeping
|
||||||
s.endTxnProtect()
|
s.endTxnProtect()
|
||||||
s.gcHotstore()
|
s.gcHotAfterCompaction()
|
||||||
|
|
||||||
err = s.setBaseEpoch(boundaryEpoch)
|
err = s.setBaseEpoch(boundaryEpoch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -818,7 +893,7 @@ func (s *SplitStore) beginCriticalSection(markSet MarkSet) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SplitStore) waitForSync() {
|
func (s *SplitStore) waitForTxnSync() {
|
||||||
log.Info("waiting for sync")
|
log.Info("waiting for sync")
|
||||||
if !CheckSyncGap {
|
if !CheckSyncGap {
|
||||||
log.Warnf("If you see this outside of test it is a serious splitstore issue")
|
log.Warnf("If you see this outside of test it is a serious splitstore issue")
|
||||||
@@ -837,6 +912,25 @@ func (s *SplitStore) waitForSync() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Block compaction operations if chain sync has fallen behind
|
||||||
|
func (s *SplitStore) waitForSync() {
|
||||||
|
if atomic.LoadInt32(&s.outOfSync) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s.chainSyncMx.Lock()
|
||||||
|
defer s.chainSyncMx.Unlock()
|
||||||
|
|
||||||
|
for !s.chainSyncFinished {
|
||||||
|
s.chainSyncCond.Wait()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Combined sync and closing check
|
||||||
|
func (s *SplitStore) checkYield() error {
|
||||||
|
s.waitForSync()
|
||||||
|
return s.checkClosing()
|
||||||
|
}
|
||||||
|
|
||||||
func (s *SplitStore) endTxnProtect() {
|
func (s *SplitStore) endTxnProtect() {
|
||||||
s.txnLk.Lock()
|
s.txnLk.Lock()
|
||||||
defer s.txnLk.Unlock()
|
defer s.txnLk.Unlock()
|
||||||
@@ -863,7 +957,7 @@ func (s *SplitStore) endCriticalSection() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEpoch,
|
func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEpoch,
|
||||||
visitor ObjectVisitor, f func(cid.Cid) error) error {
|
visitor ObjectVisitor, fHot, fCold func(cid.Cid) error) error {
|
||||||
var walked ObjectVisitor
|
var walked ObjectVisitor
|
||||||
var mx sync.Mutex
|
var mx sync.Mutex
|
||||||
// we copy the tipset first into a new slice, which allows us to reuse it in every epoch.
|
// we copy the tipset first into a new slice, which allows us to reuse it in every epoch.
|
||||||
@@ -871,6 +965,11 @@ func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEp
|
|||||||
copy(toWalk, ts.Cids())
|
copy(toWalk, ts.Cids())
|
||||||
walkCnt := new(int64)
|
walkCnt := new(int64)
|
||||||
scanCnt := new(int64)
|
scanCnt := new(int64)
|
||||||
|
szWalk := new(int64)
|
||||||
|
|
||||||
|
tsRef := func(blkCids []cid.Cid) (cid.Cid, error) {
|
||||||
|
return types.NewTipSetKey(blkCids...).Cid()
|
||||||
|
}
|
||||||
|
|
||||||
stopWalk := func(_ cid.Cid) error { return errStopWalk }
|
stopWalk := func(_ cid.Cid) error { return errStopWalk }
|
||||||
|
|
||||||
@@ -885,7 +984,7 @@ func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEp
|
|||||||
|
|
||||||
atomic.AddInt64(walkCnt, 1)
|
atomic.AddInt64(walkCnt, 1)
|
||||||
|
|
||||||
if err := f(c); err != nil {
|
if err := fHot(c); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -893,39 +992,73 @@ func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEp
|
|||||||
err = s.view(c, func(data []byte) error {
|
err = s.view(c, func(data []byte) error {
|
||||||
return hdr.UnmarshalCBOR(bytes.NewBuffer(data))
|
return hdr.UnmarshalCBOR(bytes.NewBuffer(data))
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error unmarshaling block header (cid: %s): %w", c, err)
|
return xerrors.Errorf("error unmarshaling block header (cid: %s): %w", c, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// tipset CID references are retained
|
||||||
|
pRef, err := tsRef(hdr.Parents)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error computing cid reference to parent tipset")
|
||||||
|
}
|
||||||
|
sz, err := s.walkObjectIncomplete(pRef, visitor, fHot, stopWalk)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error walking parent tipset cid reference")
|
||||||
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
|
|
||||||
// message are retained if within the inclMsgs boundary
|
// message are retained if within the inclMsgs boundary
|
||||||
if hdr.Height >= inclMsgs && hdr.Height > 0 {
|
if hdr.Height >= inclMsgs && hdr.Height > 0 {
|
||||||
if inclMsgs < inclState {
|
if inclMsgs < inclState {
|
||||||
// we need to use walkObjectIncomplete here, as messages/receipts may be missing early on if we
|
// we need to use walkObjectIncomplete here, as messages/receipts may be missing early on if we
|
||||||
// synced from snapshot and have a long HotStoreMessageRetentionPolicy.
|
// synced from snapshot and have a long HotStoreMessageRetentionPolicy.
|
||||||
if err := s.walkObjectIncomplete(hdr.Messages, visitor, f, stopWalk); err != nil {
|
sz, err := s.walkObjectIncomplete(hdr.Messages, visitor, fHot, stopWalk)
|
||||||
|
if err != nil {
|
||||||
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
||||||
}
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
|
|
||||||
if err := s.walkObjectIncomplete(hdr.ParentMessageReceipts, visitor, f, stopWalk); err != nil {
|
sz, err = s.walkObjectIncomplete(hdr.ParentMessageReceipts, visitor, fHot, stopWalk)
|
||||||
|
if err != nil {
|
||||||
return xerrors.Errorf("error walking messages receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
return xerrors.Errorf("error walking messages receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
||||||
}
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
} else {
|
} else {
|
||||||
if err := s.walkObject(hdr.Messages, visitor, f); err != nil {
|
sz, err = s.walkObject(hdr.Messages, visitor, fHot)
|
||||||
|
if err != nil {
|
||||||
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
||||||
}
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
|
|
||||||
if err := s.walkObject(hdr.ParentMessageReceipts, visitor, f); err != nil {
|
sz, err := s.walkObjectIncomplete(hdr.ParentMessageReceipts, visitor, fHot, stopWalk)
|
||||||
|
if err != nil {
|
||||||
return xerrors.Errorf("error walking message receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
return xerrors.Errorf("error walking message receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
||||||
}
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// messages and receipts outside of inclMsgs are included in the cold store
|
||||||
|
if hdr.Height < inclMsgs && hdr.Height > 0 {
|
||||||
|
sz, err := s.walkObjectIncomplete(hdr.Messages, visitor, fCold, stopWalk)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error walking messages (cid: %s): %w", hdr.Messages, err)
|
||||||
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
|
sz, err = s.walkObjectIncomplete(hdr.ParentMessageReceipts, visitor, fCold, stopWalk)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error walking messages receipts (cid: %s): %w", hdr.ParentMessageReceipts, err)
|
||||||
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
|
}
|
||||||
|
|
||||||
// state is only retained if within the inclState boundary, with the exception of genesis
|
// state is only retained if within the inclState boundary, with the exception of genesis
|
||||||
if hdr.Height >= inclState || hdr.Height == 0 {
|
if hdr.Height >= inclState || hdr.Height == 0 {
|
||||||
if err := s.walkObject(hdr.ParentStateRoot, visitor, f); err != nil {
|
sz, err := s.walkObject(hdr.ParentStateRoot, visitor, fHot)
|
||||||
|
if err != nil {
|
||||||
return xerrors.Errorf("error walking state root (cid: %s): %w", hdr.ParentStateRoot, err)
|
return xerrors.Errorf("error walking state root (cid: %s): %w", hdr.ParentStateRoot, err)
|
||||||
}
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
atomic.AddInt64(scanCnt, 1)
|
atomic.AddInt64(scanCnt, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -938,9 +1071,20 @@ func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEp
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// retain ref to chain head
|
||||||
|
hRef, err := tsRef(ts.Cids())
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error computing cid reference to parent tipset")
|
||||||
|
}
|
||||||
|
sz, err := s.walkObjectIncomplete(hRef, visitor, fHot, stopWalk)
|
||||||
|
if err != nil {
|
||||||
|
return xerrors.Errorf("error walking parent tipset cid reference")
|
||||||
|
}
|
||||||
|
atomic.AddInt64(szWalk, sz)
|
||||||
|
|
||||||
for len(toWalk) > 0 {
|
for len(toWalk) > 0 {
|
||||||
// walking can take a while, so check this with every opportunity
|
// walking can take a while, so check this with every opportunity
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkYield(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -970,133 +1114,143 @@ func (s *SplitStore) walkChain(ts *types.TipSet, inclState, inclMsgs abi.ChainEp
|
|||||||
if err := walkBlock(c); err != nil {
|
if err := walkBlock(c); err != nil {
|
||||||
return xerrors.Errorf("error walking block (cid: %s): %w", c, err)
|
return xerrors.Errorf("error walking block (cid: %s): %w", c, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := s.checkYield(); err != nil {
|
||||||
|
return xerrors.Errorf("check yield: %w", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := g.Wait(); err != nil {
|
if err := g.Wait(); err != nil {
|
||||||
return err
|
return xerrors.Errorf("walkBlock workers errored: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infow("chain walk done", "walked", *walkCnt, "scanned", *scanCnt)
|
log.Infow("chain walk done", "walked", *walkCnt, "scanned", *scanCnt, "walk size", szWalk)
|
||||||
|
s.szWalk = atomic.LoadInt64(szWalk)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SplitStore) walkObject(c cid.Cid, visitor ObjectVisitor, f func(cid.Cid) error) error {
|
func (s *SplitStore) walkObject(c cid.Cid, visitor ObjectVisitor, f func(cid.Cid) error) (int64, error) {
|
||||||
|
var sz int64
|
||||||
visit, err := visitor.Visit(c)
|
visit, err := visitor.Visit(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error visiting object: %w", err)
|
return 0, xerrors.Errorf("error visiting object: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !visit {
|
if !visit {
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := f(c); err != nil {
|
if err := f(c); err != nil {
|
||||||
if err == errStopWalk {
|
if err == errStopWalk {
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Prefix().Codec != cid.DagCBOR {
|
if c.Prefix().Codec != cid.DagCBOR {
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// check this before recursing
|
// check this before recursing
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkClosing(); err != nil {
|
||||||
return err
|
return 0, xerrors.Errorf("check closing: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var links []cid.Cid
|
var links []cid.Cid
|
||||||
err = s.view(c, func(data []byte) error {
|
err = s.view(c, func(data []byte) error {
|
||||||
|
sz += int64(len(data))
|
||||||
return cbg.ScanForLinks(bytes.NewReader(data), func(c cid.Cid) {
|
return cbg.ScanForLinks(bytes.NewReader(data), func(c cid.Cid) {
|
||||||
links = append(links, c)
|
links = append(links, c)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error scanning linked block (cid: %s): %w", c, err)
|
return 0, xerrors.Errorf("error scanning linked block (cid: %s): %w", c, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range links {
|
for _, c := range links {
|
||||||
err := s.walkObject(c, visitor, f)
|
szLink, err := s.walkObject(c, visitor, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error walking link (cid: %s): %w", c, err)
|
return 0, xerrors.Errorf("error walking link (cid: %s): %w", c, err)
|
||||||
}
|
}
|
||||||
|
sz += szLink
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// like walkObject, but the object may be potentially incomplete (references missing)
|
// like walkObject, but the object may be potentially incomplete (references missing)
|
||||||
func (s *SplitStore) walkObjectIncomplete(c cid.Cid, visitor ObjectVisitor, f, missing func(cid.Cid) error) error {
|
func (s *SplitStore) walkObjectIncomplete(c cid.Cid, visitor ObjectVisitor, f, missing func(cid.Cid) error) (int64, error) {
|
||||||
|
var sz int64
|
||||||
visit, err := visitor.Visit(c)
|
visit, err := visitor.Visit(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error visiting object: %w", err)
|
return 0, xerrors.Errorf("error visiting object: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !visit {
|
if !visit {
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// occurs check -- only for DAGs
|
// occurs check -- only for DAGs
|
||||||
if c.Prefix().Codec == cid.DagCBOR {
|
if c.Prefix().Codec == cid.DagCBOR {
|
||||||
has, err := s.has(c)
|
has, err := s.has(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error occur checking %s: %w", c, err)
|
return 0, xerrors.Errorf("error occur checking %s: %w", c, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !has {
|
if !has {
|
||||||
err = missing(c)
|
err = missing(c)
|
||||||
if err == errStopWalk {
|
if err == errStopWalk {
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return 0, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := f(c); err != nil {
|
if err := f(c); err != nil {
|
||||||
if err == errStopWalk {
|
if err == errStopWalk {
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Prefix().Codec != cid.DagCBOR {
|
if c.Prefix().Codec != cid.DagCBOR {
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// check this before recursing
|
// check this before recursing
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkClosing(); err != nil {
|
||||||
return err
|
return sz, xerrors.Errorf("check closing: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var links []cid.Cid
|
var links []cid.Cid
|
||||||
err = s.view(c, func(data []byte) error {
|
err = s.view(c, func(data []byte) error {
|
||||||
|
sz += int64(len(data))
|
||||||
return cbg.ScanForLinks(bytes.NewReader(data), func(c cid.Cid) {
|
return cbg.ScanForLinks(bytes.NewReader(data), func(c cid.Cid) {
|
||||||
links = append(links, c)
|
links = append(links, c)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error scanning linked block (cid: %s): %w", c, err)
|
return 0, xerrors.Errorf("error scanning linked block (cid: %s): %w", c, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range links {
|
for _, c := range links {
|
||||||
err := s.walkObjectIncomplete(c, visitor, f, missing)
|
szLink, err := s.walkObjectIncomplete(c, visitor, f, missing)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error walking link (cid: %s): %w", c, err)
|
return 0, xerrors.Errorf("error walking link (cid: %s): %w", c, err)
|
||||||
}
|
}
|
||||||
|
sz += szLink
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return sz, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// internal version used during compaction and related operations
|
// internal version used during compaction and related operations
|
||||||
@@ -1159,7 +1313,7 @@ func (s *SplitStore) moveColdBlocks(coldr *ColdSetReader) error {
|
|||||||
batch := make([]blocks.Block, 0, batchSize)
|
batch := make([]blocks.Block, 0, batchSize)
|
||||||
|
|
||||||
err := coldr.ForEach(func(c cid.Cid) error {
|
err := coldr.ForEach(func(c cid.Cid) error {
|
||||||
if err := s.checkClosing(); err != nil {
|
if err := s.checkYield(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
blk, err := s.hot.Get(s.ctx, c)
|
blk, err := s.hot.Get(s.ctx, c)
|
||||||
@@ -1295,7 +1449,7 @@ func (s *SplitStore) coldSetPath() string {
|
|||||||
return filepath.Join(s.path, "coldset")
|
return filepath.Join(s.path, "coldset")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SplitStore) deadSetPath() string {
|
func (s *SplitStore) discardSetPath() string {
|
||||||
return filepath.Join(s.path, "deadset")
|
return filepath.Join(s.path, "deadset")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1362,8 +1516,9 @@ func (s *SplitStore) completeCompaction() error {
|
|||||||
}
|
}
|
||||||
s.compactType = none
|
s.compactType = none
|
||||||
|
|
||||||
// Note: at this point we can start the splitstore; a compaction should run on
|
// Note: at this point we can start the splitstore; base epoch is not
|
||||||
// the first head change, which will trigger gc on the hotstore.
|
// incremented here so a compaction should run on the first head
|
||||||
|
// change, which will trigger gc on the hotstore.
|
||||||
// We don't mind the second (back-to-back) compaction as the head will
|
// We don't mind the second (back-to-back) compaction as the head will
|
||||||
// have advanced during marking and coldset accumulation.
|
// have advanced during marking and coldset accumulation.
|
||||||
return nil
|
return nil
|
||||||
@@ -1421,6 +1576,13 @@ func (s *SplitStore) completePurge(coldr *ColdSetReader, checkpoint *Checkpoint,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SplitStore) clearSizeMeasurements() {
|
||||||
|
s.szKeys = 0
|
||||||
|
s.szMarkedLiveRefs = 0
|
||||||
|
s.szProtectedTxns = 0
|
||||||
|
s.szWalk = 0
|
||||||
|
}
|
||||||
|
|
||||||
// I really don't like having this code, but we seem to have some occasional DAG references with
|
// I really don't like having this code, but we seem to have some occasional DAG references with
|
||||||
// missing constituents. During testing in mainnet *some* of these references *sometimes* appeared
|
// missing constituents. During testing in mainnet *some* of these references *sometimes* appeared
|
||||||
// after a little bit.
|
// after a little bit.
|
||||||
@@ -1461,7 +1623,7 @@ func (s *SplitStore) waitForMissingRefs(markSet MarkSet) {
|
|||||||
missing = make(map[cid.Cid]struct{})
|
missing = make(map[cid.Cid]struct{})
|
||||||
|
|
||||||
for c := range towalk {
|
for c := range towalk {
|
||||||
err := s.walkObjectIncomplete(c, visitor,
|
_, err := s.walkObjectIncomplete(c, visitor,
|
||||||
func(c cid.Cid) error {
|
func(c cid.Cid) error {
|
||||||
if isUnitaryObject(c) {
|
if isUnitaryObject(c) {
|
||||||
return errStopWalk
|
return errStopWalk
|
||||||
|
|||||||
@@ -77,6 +77,10 @@ func (es *exposedSplitStore) GetSize(ctx context.Context, c cid.Cid) (int, error
|
|||||||
return size, err
|
return size, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (es *exposedSplitStore) Flush(ctx context.Context) error {
|
||||||
|
return es.s.Flush(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
func (es *exposedSplitStore) Put(ctx context.Context, blk blocks.Block) error {
|
func (es *exposedSplitStore) Put(ctx context.Context, blk blocks.Block) error {
|
||||||
return es.s.Put(ctx, blk)
|
return es.s.Put(ctx, blk)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,23 +7,74 @@ import (
|
|||||||
bstore "github.com/filecoin-project/lotus/blockstore"
|
bstore "github.com/filecoin-project/lotus/blockstore"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *SplitStore) gcHotstore() {
|
const (
|
||||||
|
// Fraction of garbage in badger vlog for online GC traversal to collect garbage
|
||||||
|
AggressiveOnlineGCThreshold = 0.0001
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *SplitStore) gcHotAfterCompaction() {
|
||||||
|
// Measure hotstore size, determine if we should do full GC, determine if we can do full GC.
|
||||||
|
// We should do full GC if
|
||||||
|
// FullGCFrequency is specified and compaction index matches frequency
|
||||||
|
// OR HotstoreMaxSpaceTarget is specified and total moving space is within 150 GB of target
|
||||||
|
// We can do full if
|
||||||
|
// HotstoreMaxSpaceTarget is not specified
|
||||||
|
// OR total moving space would not exceed 50 GB below target
|
||||||
|
//
|
||||||
|
// a) If we should not do full GC => online GC
|
||||||
|
// b) If we should do full GC and can => moving GC
|
||||||
|
// c) If we should do full GC and can't => aggressive online GC
|
||||||
|
getSize := func() int64 {
|
||||||
|
sizer, ok := s.hot.(bstore.BlockstoreSize)
|
||||||
|
if ok {
|
||||||
|
size, err := sizer.Size()
|
||||||
|
if err != nil {
|
||||||
|
log.Warnf("error getting hotstore size: %s, estimating empty hot store for targeting", err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
log.Errorf("Could not measure hotstore size, assuming it is 0 bytes, which it is not")
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
hotSize := getSize()
|
||||||
|
|
||||||
|
copySizeApprox := s.szKeys + s.szMarkedLiveRefs + s.szProtectedTxns + s.szWalk
|
||||||
|
shouldTarget := s.cfg.HotstoreMaxSpaceTarget > 0 && hotSize+copySizeApprox > int64(s.cfg.HotstoreMaxSpaceTarget)-int64(s.cfg.HotstoreMaxSpaceThreshold)
|
||||||
|
shouldFreq := s.cfg.HotStoreFullGCFrequency > 0 && s.compactionIndex%int64(s.cfg.HotStoreFullGCFrequency) == 0
|
||||||
|
shouldDoFull := shouldTarget || shouldFreq
|
||||||
|
canDoFull := s.cfg.HotstoreMaxSpaceTarget == 0 || hotSize+copySizeApprox < int64(s.cfg.HotstoreMaxSpaceTarget)-int64(s.cfg.HotstoreMaxSpaceSafetyBuffer)
|
||||||
|
log.Debugw("approximating new hot store size", "key size", s.szKeys, "marked live refs", s.szMarkedLiveRefs, "protected txns", s.szProtectedTxns, "walked DAG", s.szWalk)
|
||||||
|
log.Infof("measured hot store size: %d, approximate new size: %d, should do full %t, can do full %t", hotSize, copySizeApprox, shouldDoFull, canDoFull)
|
||||||
|
|
||||||
var opts []bstore.BlockstoreGCOption
|
var opts []bstore.BlockstoreGCOption
|
||||||
if s.cfg.HotStoreFullGCFrequency > 0 && s.compactionIndex%int64(s.cfg.HotStoreFullGCFrequency) == 0 {
|
if shouldDoFull && canDoFull {
|
||||||
opts = append(opts, bstore.WithFullGC(true))
|
opts = append(opts, bstore.WithFullGC(true))
|
||||||
|
} else if shouldDoFull && !canDoFull {
|
||||||
|
log.Warnf("Attention! Estimated moving GC size %d is not within safety buffer %d of target max %d, performing aggressive online GC to attempt to bring hotstore size down safely", copySizeApprox, s.cfg.HotstoreMaxSpaceSafetyBuffer, s.cfg.HotstoreMaxSpaceTarget)
|
||||||
|
log.Warn("If problem continues you can 1) temporarily allocate more disk space to hotstore and 2) reflect in HotstoreMaxSpaceTarget OR trigger manual move with `lotus chain prune hot-moving`")
|
||||||
|
log.Warn("If problem continues and you do not have any more disk space you can run continue to manually trigger online GC at aggressive thresholds (< 0.01) with `lotus chain prune hot`")
|
||||||
|
|
||||||
|
opts = append(opts, bstore.WithThreshold(AggressiveOnlineGCThreshold))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := s.gcBlockstore(s.hot, opts); err != nil {
|
if err := s.gcBlockstore(s.hot, opts); err != nil {
|
||||||
log.Warnf("error garbage collecting hostore: %s", err)
|
log.Warnf("error garbage collecting hostore: %s", err)
|
||||||
}
|
}
|
||||||
|
log.Infof("measured hot store size after GC: %d", getSize())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SplitStore) gcBlockstore(b bstore.Blockstore, opts []bstore.BlockstoreGCOption) error {
|
func (s *SplitStore) gcBlockstore(b bstore.Blockstore, opts []bstore.BlockstoreGCOption) error {
|
||||||
|
if err := s.checkYield(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if gc, ok := b.(bstore.BlockstoreGC); ok {
|
if gc, ok := b.(bstore.BlockstoreGC); ok {
|
||||||
log.Info("garbage collecting blockstore")
|
log.Info("garbage collecting blockstore")
|
||||||
startGC := time.Now()
|
startGC := time.Now()
|
||||||
|
|
||||||
if err := gc.CollectGarbage(opts...); err != nil {
|
opts = append(opts, bstore.WithCheckFreq(90*time.Second))
|
||||||
|
opts = append(opts, bstore.WithCheck(s.checkYield))
|
||||||
|
if err := gc.CollectGarbage(s.ctx, opts...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,3 +84,19 @@ func (s *SplitStore) gcBlockstore(b bstore.Blockstore, opts []bstore.BlockstoreG
|
|||||||
|
|
||||||
return fmt.Errorf("blockstore doesn't support garbage collection: %T", b)
|
return fmt.Errorf("blockstore doesn't support garbage collection: %T", b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *SplitStore) gcBlockstoreOnce(b bstore.Blockstore, opts []bstore.BlockstoreGCOption) error {
|
||||||
|
if gc, ok := b.(bstore.BlockstoreGCOnce); ok {
|
||||||
|
log.Debug("gc blockstore once")
|
||||||
|
startGC := time.Now()
|
||||||
|
|
||||||
|
if err := gc.GCOnce(s.ctx, opts...); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debugw("gc blockstore once done", "took", time.Since(startGC))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("blockstore doesn't support gc once: %T", b)
|
||||||
|
}
|
||||||
|
|||||||
@@ -47,6 +47,23 @@ var (
|
|||||||
PruneThreshold = 7 * build.Finality
|
PruneThreshold = 7 * build.Finality
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// GCHotstore runs online GC on the chain state in the hotstore according the to options specified
|
||||||
|
func (s *SplitStore) GCHotStore(opts api.HotGCOpts) error {
|
||||||
|
if opts.Moving {
|
||||||
|
gcOpts := []bstore.BlockstoreGCOption{bstore.WithFullGC(true)}
|
||||||
|
return s.gcBlockstore(s.hot, gcOpts)
|
||||||
|
}
|
||||||
|
|
||||||
|
gcOpts := []bstore.BlockstoreGCOption{bstore.WithThreshold(opts.Threshold)}
|
||||||
|
var err error
|
||||||
|
if opts.Periodic {
|
||||||
|
err = s.gcBlockstore(s.hot, gcOpts)
|
||||||
|
} else {
|
||||||
|
err = s.gcBlockstoreOnce(s.hot, gcOpts)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// PruneChain instructs the SplitStore to prune chain state in the coldstore, according to the
|
// PruneChain instructs the SplitStore to prune chain state in the coldstore, according to the
|
||||||
// options specified.
|
// options specified.
|
||||||
func (s *SplitStore) PruneChain(opts api.PruneOpts) error {
|
func (s *SplitStore) PruneChain(opts api.PruneOpts) error {
|
||||||
@@ -208,7 +225,7 @@ func (s *SplitStore) doPrune(curTs *types.TipSet, retainStateP func(int64) bool,
|
|||||||
log.Info("collecting dead objects")
|
log.Info("collecting dead objects")
|
||||||
startCollect := time.Now()
|
startCollect := time.Now()
|
||||||
|
|
||||||
deadw, err := NewColdSetWriter(s.deadSetPath())
|
deadw, err := NewColdSetWriter(s.discardSetPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error creating coldset: %w", err)
|
return xerrors.Errorf("error creating coldset: %w", err)
|
||||||
}
|
}
|
||||||
@@ -267,7 +284,7 @@ func (s *SplitStore) doPrune(curTs *types.TipSet, retainStateP func(int64) bool,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
deadr, err := NewColdSetReader(s.deadSetPath())
|
deadr, err := NewColdSetReader(s.discardSetPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error opening deadset: %w", err)
|
return xerrors.Errorf("error opening deadset: %w", err)
|
||||||
}
|
}
|
||||||
@@ -311,10 +328,10 @@ func (s *SplitStore) doPrune(curTs *types.TipSet, retainStateP func(int64) bool,
|
|||||||
log.Warnf("error removing checkpoint: %s", err)
|
log.Warnf("error removing checkpoint: %s", err)
|
||||||
}
|
}
|
||||||
if err := deadr.Close(); err != nil {
|
if err := deadr.Close(); err != nil {
|
||||||
log.Warnf("error closing deadset: %s", err)
|
log.Warnf("error closing discard set: %s", err)
|
||||||
}
|
}
|
||||||
if err := os.Remove(s.deadSetPath()); err != nil {
|
if err := os.Remove(s.discardSetPath()); err != nil {
|
||||||
log.Warnf("error removing deadset: %s", err)
|
log.Warnf("error removing discard set: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// we are done; do some housekeeping
|
// we are done; do some housekeeping
|
||||||
@@ -329,9 +346,9 @@ func (s *SplitStore) doPrune(curTs *types.TipSet, retainStateP func(int64) bool,
|
|||||||
}
|
}
|
||||||
|
|
||||||
s.pruneIndex++
|
s.pruneIndex++
|
||||||
err = s.ds.Put(s.ctx, pruneIndexKey, int64ToBytes(s.compactionIndex))
|
err = s.ds.Put(s.ctx, pruneIndexKey, int64ToBytes(s.pruneIndex))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error saving compaction index: %w", err)
|
return xerrors.Errorf("error saving prune index: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -344,7 +361,7 @@ func (s *SplitStore) completePrune() error {
|
|||||||
}
|
}
|
||||||
defer checkpoint.Close() //nolint:errcheck
|
defer checkpoint.Close() //nolint:errcheck
|
||||||
|
|
||||||
deadr, err := NewColdSetReader(s.deadSetPath())
|
deadr, err := NewColdSetReader(s.discardSetPath())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error opening deadset: %w", err)
|
return xerrors.Errorf("error opening deadset: %w", err)
|
||||||
}
|
}
|
||||||
@@ -378,7 +395,7 @@ func (s *SplitStore) completePrune() error {
|
|||||||
if err := deadr.Close(); err != nil {
|
if err := deadr.Close(); err != nil {
|
||||||
log.Warnf("error closing deadset: %s", err)
|
log.Warnf("error closing deadset: %s", err)
|
||||||
}
|
}
|
||||||
if err := os.Remove(s.deadSetPath()); err != nil {
|
if err := os.Remove(s.discardSetPath()); err != nil {
|
||||||
log.Warnf("error removing deadset: %s", err)
|
log.Warnf("error removing deadset: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ func (s *SplitStore) doReify(c cid.Cid) {
|
|||||||
defer s.txnLk.RUnlock()
|
defer s.txnLk.RUnlock()
|
||||||
|
|
||||||
count := 0
|
count := 0
|
||||||
err := s.walkObjectIncomplete(c, newTmpVisitor(),
|
_, err := s.walkObjectIncomplete(c, newTmpVisitor(),
|
||||||
func(c cid.Cid) error {
|
func(c cid.Cid) error {
|
||||||
if isUnitaryObject(c) {
|
if isUnitaryObject(c) {
|
||||||
return errStopWalk
|
return errStopWalk
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package splitstore
|
package splitstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -38,6 +38,7 @@ func init() {
|
|||||||
func testSplitStore(t *testing.T, cfg *Config) {
|
func testSplitStore(t *testing.T, cfg *Config) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
chain := &mockChain{t: t}
|
chain := &mockChain{t: t}
|
||||||
|
fmt.Printf("Config: %v\n", cfg)
|
||||||
|
|
||||||
// the myriads of stores
|
// the myriads of stores
|
||||||
ds := dssync.MutexWrap(datastore.NewMapDatastore())
|
ds := dssync.MutexWrap(datastore.NewMapDatastore())
|
||||||
@@ -225,7 +226,7 @@ func TestSplitStoreCompaction(t *testing.T) {
|
|||||||
//stm: @SPLITSTORE_SPLITSTORE_OPEN_001, @SPLITSTORE_SPLITSTORE_CLOSE_001
|
//stm: @SPLITSTORE_SPLITSTORE_OPEN_001, @SPLITSTORE_SPLITSTORE_CLOSE_001
|
||||||
//stm: @SPLITSTORE_SPLITSTORE_PUT_001, @SPLITSTORE_SPLITSTORE_ADD_PROTECTOR_001
|
//stm: @SPLITSTORE_SPLITSTORE_PUT_001, @SPLITSTORE_SPLITSTORE_ADD_PROTECTOR_001
|
||||||
//stm: @SPLITSTORE_SPLITSTORE_CLOSE_001
|
//stm: @SPLITSTORE_SPLITSTORE_CLOSE_001
|
||||||
testSplitStore(t, &Config{MarkSetType: "map"})
|
testSplitStore(t, &Config{MarkSetType: "map", UniversalColdBlocks: true})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSplitStoreCompactionWithBadger(t *testing.T) {
|
func TestSplitStoreCompactionWithBadger(t *testing.T) {
|
||||||
@@ -237,7 +238,7 @@ func TestSplitStoreCompactionWithBadger(t *testing.T) {
|
|||||||
t.Cleanup(func() {
|
t.Cleanup(func() {
|
||||||
badgerMarkSetBatchSize = bs
|
badgerMarkSetBatchSize = bs
|
||||||
})
|
})
|
||||||
testSplitStore(t, &Config{MarkSetType: "badger"})
|
testSplitStore(t, &Config{MarkSetType: "badger", UniversalColdBlocks: true})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSplitStoreSuppressCompactionNearUpgrade(t *testing.T) {
|
func TestSplitStoreSuppressCompactionNearUpgrade(t *testing.T) {
|
||||||
@@ -283,7 +284,7 @@ func TestSplitStoreSuppressCompactionNearUpgrade(t *testing.T) {
|
|||||||
path := t.TempDir()
|
path := t.TempDir()
|
||||||
|
|
||||||
// open the splitstore
|
// open the splitstore
|
||||||
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map"})
|
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map", UniversalColdBlocks: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@@ -422,13 +423,13 @@ func testSplitStoreReification(t *testing.T, f func(context.Context, blockstore.
|
|||||||
|
|
||||||
path := t.TempDir()
|
path := t.TempDir()
|
||||||
|
|
||||||
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map"})
|
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map", UniversalColdBlocks: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer ss.Close() //nolint
|
defer ss.Close() //nolint
|
||||||
|
|
||||||
ss.warmupEpoch = 1
|
ss.warmupEpoch.Store(1)
|
||||||
go ss.reifyOrchestrator()
|
go ss.reifyOrchestrator()
|
||||||
|
|
||||||
waitForReification := func() {
|
waitForReification := func() {
|
||||||
@@ -522,13 +523,13 @@ func testSplitStoreReificationLimit(t *testing.T, f func(context.Context, blocks
|
|||||||
|
|
||||||
path := t.TempDir()
|
path := t.TempDir()
|
||||||
|
|
||||||
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map"})
|
ss, err := Open(path, ds, hot, cold, &Config{MarkSetType: "map", UniversalColdBlocks: true})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer ss.Close() //nolint
|
defer ss.Close() //nolint
|
||||||
|
|
||||||
ss.warmupEpoch = 1
|
ss.warmupEpoch.Store(1)
|
||||||
go ss.reifyOrchestrator()
|
go ss.reifyOrchestrator()
|
||||||
|
|
||||||
waitForReification := func() {
|
waitForReification := func() {
|
||||||
@@ -756,6 +757,8 @@ func (b *mockStore) DeleteMany(_ context.Context, cids []cid.Cid) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *mockStore) Flush(context.Context) error { return nil }
|
||||||
|
|
||||||
func (b *mockStore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) {
|
func (b *mockStore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) {
|
||||||
return nil, errors.New("not implemented")
|
return nil, errors.New("not implemented")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ func (s *SplitStore) doWarmup(curTs *types.TipSet) error {
|
|||||||
mx.Unlock()
|
mx.Unlock()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
}, func(cid.Cid) error { return nil })
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -136,9 +136,8 @@ func (s *SplitStore) doWarmup(curTs *types.TipSet) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("error saving warm up epoch: %w", err)
|
return xerrors.Errorf("error saving warm up epoch: %w", err)
|
||||||
}
|
}
|
||||||
s.mx.Lock()
|
|
||||||
s.warmupEpoch = epoch
|
s.warmupEpoch.Store(int64(epoch))
|
||||||
s.mx.Unlock()
|
|
||||||
|
|
||||||
// also save the compactionIndex, as this is used as an indicator of warmup for upgraded nodes
|
// also save the compactionIndex, as this is used as an indicator of warmup for upgraded nodes
|
||||||
err = s.ds.Put(s.ctx, compactionIndexKey, int64ToBytes(s.compactionIndex))
|
err = s.ds.Put(s.ctx, compactionIndexKey, int64ToBytes(s.compactionIndex))
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ type SyncBlockstore struct {
|
|||||||
bs MemBlockstore // specifically use a memStore to save indirection overhead.
|
bs MemBlockstore // specifically use a memStore to save indirection overhead.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (*SyncBlockstore) Flush(context.Context) error { return nil }
|
||||||
|
|
||||||
func (m *SyncBlockstore) DeleteBlock(ctx context.Context, k cid.Cid) error {
|
func (m *SyncBlockstore) DeleteBlock(ctx context.Context, k cid.Cid) error {
|
||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
defer m.mu.Unlock()
|
defer m.mu.Unlock()
|
||||||
|
|||||||
@@ -93,6 +93,16 @@ func (t *TimedCacheBlockstore) rotate() {
|
|||||||
t.mu.Unlock()
|
t.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *TimedCacheBlockstore) Flush(ctx context.Context) error {
|
||||||
|
t.mu.Lock()
|
||||||
|
defer t.mu.Unlock()
|
||||||
|
|
||||||
|
if err := t.active.Flush(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return t.inactive.Flush(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
func (t *TimedCacheBlockstore) Put(ctx context.Context, b blocks.Block) error {
|
func (t *TimedCacheBlockstore) Put(ctx context.Context, b blocks.Block) error {
|
||||||
// Don't check the inactive set here. We want to keep this block for at
|
// Don't check the inactive set here. We want to keep this block for at
|
||||||
// least one interval.
|
// least one interval.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package blockstore
|
package blockstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
+12
-4
@@ -12,10 +12,9 @@ type unionBlockstore []Blockstore
|
|||||||
|
|
||||||
// Union returns an unioned blockstore.
|
// Union returns an unioned blockstore.
|
||||||
//
|
//
|
||||||
// * Reads return from the first blockstore that has the value, querying in the
|
// - Reads return from the first blockstore that has the value, querying in the
|
||||||
// supplied order.
|
// supplied order.
|
||||||
// * Writes (puts and deletes) are broadcast to all stores.
|
// - Writes (puts and deletes) are broadcast to all stores.
|
||||||
//
|
|
||||||
func Union(stores ...Blockstore) Blockstore {
|
func Union(stores ...Blockstore) Blockstore {
|
||||||
return unionBlockstore(stores)
|
return unionBlockstore(stores)
|
||||||
}
|
}
|
||||||
@@ -56,6 +55,15 @@ func (m unionBlockstore) GetSize(ctx context.Context, cid cid.Cid) (size int, er
|
|||||||
return size, err
|
return size, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m unionBlockstore) Flush(ctx context.Context) (err error) {
|
||||||
|
for _, bs := range m {
|
||||||
|
if err = bs.Flush(ctx); err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (m unionBlockstore) Put(ctx context.Context, block blocks.Block) (err error) {
|
func (m unionBlockstore) Put(ctx context.Context, block blocks.Block) (err error) {
|
||||||
for _, bs := range m {
|
for _, bs := range m {
|
||||||
if err = bs.Put(ctx, block); err != nil {
|
if err = bs.Put(ctx, block); err != nil {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package blockstore
|
package blockstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -13,6 +13,7 @@ var (
|
|||||||
b0 = blocks.NewBlock([]byte("abc"))
|
b0 = blocks.NewBlock([]byte("abc"))
|
||||||
b1 = blocks.NewBlock([]byte("foo"))
|
b1 = blocks.NewBlock([]byte("foo"))
|
||||||
b2 = blocks.NewBlock([]byte("bar"))
|
b2 = blocks.NewBlock([]byte("bar"))
|
||||||
|
b3 = blocks.NewBlock([]byte("baz"))
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestUnionBlockstore_Get(t *testing.T) {
|
func TestUnionBlockstore_Get(t *testing.T) {
|
||||||
|
|||||||
@@ -52,4 +52,4 @@ popd
|
|||||||
|
|
||||||
echo "Generating metadata..."
|
echo "Generating metadata..."
|
||||||
|
|
||||||
make -C ../../ bundle-gen
|
make -C ../../ VERSION="$VERSION" RELEASE="$RELEASE" RELEASE_OVERRIDES="${RELEASE_OVERRIDES[*]}" bundle-gen
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
-1
@@ -6,7 +6,7 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/lib/addrutil"
|
"github.com/filecoin-project/lotus/lib/addrutil"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
/dns4/bootstrap-0.butterfly.fildev.network/tcp/1347/p2p/12D3KooWSUZhAY3eyoPUboJ1ZWe4dNPFWTr1EPoDjbTDSAN15uhY
|
/dns4/bootstrap-0.butterfly.fildev.network/tcp/1347/p2p/12D3KooWD5mtdmjHQ1Puj9Md7SEfoa7kWMpwqUhAKsyYsBP56LQC
|
||||||
/dns4/bootstrap-1.butterfly.fildev.network/tcp/1347/p2p/12D3KooWDfvNrSRVGWAGbn3sm9C8z98W2x25qCZjaXGHXmGiH24e
|
/dns4/bootstrap-1.butterfly.fildev.network/tcp/1347/p2p/12D3KooWEoYPkm6o87ES6AppFY7d7WHJUQg7XVPRAyQZjEU31efQ
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/dns4/bootstrap-0.calibration.fildev.network/tcp/1347/p2p/12D3KooWJkikQQkxS58spo76BYzFt4fotaT5NpV2zngvrqm4u5ow
|
/dns4/bootstrap-0.calibration.fildev.network/tcp/1347/p2p/12D3KooWCi2w8U4DDB9xqrejb5KYHaQv2iA2AJJ6uzG3iQxNLBMy
|
||||||
/dns4/bootstrap-1.calibration.fildev.network/tcp/1347/p2p/12D3KooWLce5FDHR4EX4CrYavphA5xS3uDsX6aoowXh5tzDUxJav
|
/dns4/bootstrap-1.calibration.fildev.network/tcp/1347/p2p/12D3KooWDTayrBojBn9jWNNUih4nNQQBGJD7Zo3gQCKgBkUsS6dp
|
||||||
/dns4/bootstrap-2.calibration.fildev.network/tcp/1347/p2p/12D3KooWA9hFfQG9GjP6bHeuQQbMD3FDtZLdW1NayxKXUT26PQZu
|
/dns4/bootstrap-2.calibration.fildev.network/tcp/1347/p2p/12D3KooWNRxTHUn8bf7jz1KEUPMc2dMgGfa4f8ZJTsquVSn3vHCG
|
||||||
/dns4/bootstrap-3.calibration.fildev.network/tcp/1347/p2p/12D3KooWMHDi3LVTFG8Szqogt7RkNXvonbQYqSazxBx41A5aeuVz
|
/dns4/bootstrap-3.calibration.fildev.network/tcp/1347/p2p/12D3KooWFWUqE9jgXvcKHWieYs9nhyp6NF4ftwLGAHm4sCv73jjK
|
||||||
|
|||||||
+12
-9
@@ -18,6 +18,8 @@ import (
|
|||||||
"github.com/ipld/go-car"
|
"github.com/ipld/go-car"
|
||||||
"golang.org/x/xerrors"
|
"golang.org/x/xerrors"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/blockstore"
|
"github.com/filecoin-project/lotus/blockstore"
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
"github.com/filecoin-project/lotus/chain/actors/adt"
|
"github.com/filecoin-project/lotus/chain/actors/adt"
|
||||||
@@ -28,14 +30,14 @@ var embeddedBuiltinActorReleases embed.FS
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
if BundleOverrides == nil {
|
if BundleOverrides == nil {
|
||||||
BundleOverrides = make(map[actors.Version]string)
|
BundleOverrides = make(map[actorstypes.Version]string)
|
||||||
}
|
}
|
||||||
for _, av := range actors.Versions {
|
for _, av := range actors.Versions {
|
||||||
path := os.Getenv(fmt.Sprintf("LOTUS_BUILTIN_ACTORS_V%d_BUNDLE", av))
|
path := os.Getenv(fmt.Sprintf("LOTUS_BUILTIN_ACTORS_V%d_BUNDLE", av))
|
||||||
if path == "" {
|
if path == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
BundleOverrides[actors.Version(av)] = path
|
BundleOverrides[actorstypes.Version(av)] = path
|
||||||
}
|
}
|
||||||
if err := loadManifests(NetworkBundle); err != nil {
|
if err := loadManifests(NetworkBundle); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
@@ -55,7 +57,7 @@ func UseNetworkBundle(netw string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func loadManifests(netw string) error {
|
func loadManifests(netw string) error {
|
||||||
overridden := make(map[actors.Version]struct{})
|
overridden := make(map[actorstypes.Version]struct{})
|
||||||
var newMetadata []*BuiltinActorsMetadata
|
var newMetadata []*BuiltinActorsMetadata
|
||||||
// First, prefer overrides.
|
// First, prefer overrides.
|
||||||
for av, path := range BundleOverrides {
|
for av, path := range BundleOverrides {
|
||||||
@@ -93,10 +95,11 @@ func loadManifests(netw string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type BuiltinActorsMetadata struct {
|
type BuiltinActorsMetadata struct {
|
||||||
Network string
|
Network string
|
||||||
Version actors.Version
|
Version actorstypes.Version
|
||||||
ManifestCid cid.Cid
|
ManifestCid cid.Cid
|
||||||
Actors map[string]cid.Cid
|
Actors map[string]cid.Cid
|
||||||
|
BundleGitTag string
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadEmbeddedBuiltinActorsMetadata reads the metadata from the embedded built-in actor bundles.
|
// ReadEmbeddedBuiltinActorsMetadata reads the metadata from the embedded built-in actor bundles.
|
||||||
@@ -182,7 +185,7 @@ func readEmbeddedBuiltinActorsMetadata(bundle string) ([]*BuiltinActorsMetadata,
|
|||||||
}
|
}
|
||||||
bundles = append(bundles, &BuiltinActorsMetadata{
|
bundles = append(bundles, &BuiltinActorsMetadata{
|
||||||
Network: name,
|
Network: name,
|
||||||
Version: actors.Version(version),
|
Version: actorstypes.Version(version),
|
||||||
ManifestCid: root,
|
ManifestCid: root,
|
||||||
Actors: actorCids,
|
Actors: actorCids,
|
||||||
})
|
})
|
||||||
@@ -229,7 +232,7 @@ func readBundleManifest(r io.Reader) (cid.Cid, map[string]cid.Cid, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetEmbeddedBuiltinActorsBundle returns the builtin-actors bundle for the given actors version.
|
// GetEmbeddedBuiltinActorsBundle returns the builtin-actors bundle for the given actors version.
|
||||||
func GetEmbeddedBuiltinActorsBundle(version actors.Version) ([]byte, bool) {
|
func GetEmbeddedBuiltinActorsBundle(version actorstypes.Version) ([]byte, bool) {
|
||||||
fi, err := embeddedBuiltinActorReleases.Open(fmt.Sprintf("actors/v%d.tar.zst", version))
|
fi, err := embeddedBuiltinActorReleases.Open(fmt.Sprintf("actors/v%d.tar.zst", version))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false
|
return nil, false
|
||||||
|
|||||||
+537
-38
@@ -7,25 +7,97 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMetadata{{
|
var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMetadata{{
|
||||||
Network: "butterflynet",
|
Network: "butterflynet",
|
||||||
Version: 8,
|
Version: 8,
|
||||||
ManifestCid: MustParseCid("bafy2bzacedvaarfyh6q3bk4dyzux46ednlace2ckxp5nbyn6mb3da2apqn6sk"),
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzaceba5qgs4z3imhlxwds5vamahngatvuuglbv5yl3ftfiosj6ud5chs"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzaceavzeu4gqte7o33vr4htiaapiwpfq6p26tgdkqla2baqhmiqswfso"),
|
"account": MustParseCid("bafk2bzacebd5zetyjtragjwrv2nqktct6u2pmsi4eifbanovxohx3a7lszjxi"),
|
||||||
"cron": MustParseCid("bafk2bzacech35onpqxep4yox36k7sr4mj4bch54s3i4b3yyaustrbo5xwfbfs"),
|
"cron": MustParseCid("bafk2bzacecrszortqkc7har77ssgajglymv6ftrqvmdko5h2yqqh5k2qospl2"),
|
||||||
"init": MustParseCid("bafk2bzaceahxin3sf5f6ude5j6we4yeqlg66s5qe4tu7lwp26jcg7yp2ns6hi"),
|
"datacap": MustParseCid("bafk2bzacecapjnxnyw4talwqv5ajbtbkzmzqiosztj5cb3sortyp73ndjl76e"),
|
||||||
"multisig": MustParseCid("bafk2bzacectfmzjtniypgl4whm42sws5aupihqgfikwsr7p5yoq3bmqaogldi"),
|
"eam": MustParseCid("bafk2bzacecflry2dyjqj6fhpovkbcbei377zabectznuxsf6bxggsve7bsxga"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzacecbwu54ce5mjgp2pqxyj6kpn2vlgiu5wv2lj2byjiegxnn3infd5i"),
|
"ethaccount": MustParseCid("bafk2bzacedl4pmkfxkzoqajs6im3ranmopozsmxjcxsnk3kwvd3vv7mfwwrf4"),
|
||||||
"reward": MustParseCid("bafk2bzacecskkbhe6c4ud5jt62wg4w7j7shj6xdwoyic74s5y6pgywxxvnw72"),
|
"evm": MustParseCid("bafk2bzacebgzvmvwv7rsnnhp3zhqbiqkumvyrc7pazfovpptgpgtqkalrli74"),
|
||||||
"storagemarket": MustParseCid("bafk2bzacebycxcwwm7hwhuhpasaskil2kxaqb7tins7azdvvm72rorlciuysi"),
|
"init": MustParseCid("bafk2bzacecbxp66q3ytjkg37nyv4rmzezbfaigvx4i5yhvqbm5gg4amjeaias"),
|
||||||
"storageminer": MustParseCid("bafk2bzacecgx3etor5m6lahpmjdwqnryutqe6naiurfhgsju72rd4nqssutbg"),
|
"multisig": MustParseCid("bafk2bzacecjltag3mn75dsnmrmopjow27buxqhabissowayqlmavrcfetqswc"),
|
||||||
"storagepower": MustParseCid("bafk2bzaceayvy6xyp5cwtngm457c5hssvihidppgq3o7gy3dlmhgor3yzujoc"),
|
"paymentchannel": MustParseCid("bafk2bzacednzxg263eqbl2imwz3uhujov63tjkffieyl4hl3dhrgxyhwep6hc"),
|
||||||
"system": MustParseCid("bafk2bzacec6xctjxybp7r3kkhase56o6jsaiua7ure5ttu2xfuojt4jhlsoa6"),
|
"placeholder": MustParseCid("bafk2bzaceaamp2a35vpfml4skap4dffklzae2urcm34mtwwce2lvhaons3a5y"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzacec2hcqlqcfacylfcrhhliwkisvh4y3adwt47xkf2gdvodwu6ccepc"),
|
"reward": MustParseCid("bafk2bzacectp23cxsbbdrr3uggnw7f263qll5wkkfzqhn5yq37ae2ehdjdzri"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacea45ko3ezkpeujsniovncwnizc4wsxd7kyckskhs7gvzwthzb2mqe"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzaced74qthwrl3gahcf7o3vrdrodbcqhlplh6fykbgy5sd2iyouhq44c"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaceduksv6wqthr5fgp7mx5prv6gzul2oozf3svrjbuggc4bgokdxgfy"),
|
||||||
|
"system": MustParseCid("bafk2bzacebe6j2ius6clbbr7dypsg54jzmn5xablzunph7ebedw6yhwla4cj2"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebu4joy25gneu2qv3qfm3ktakzalndjrbhekeqrqk3zhotv6nyy2g"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "calibrationnet",
|
Network: "butterflynet",
|
||||||
Version: 8,
|
Version: 9,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacec35by4erhcdgcsgzp7yb3j57utydlxxfc73m3k5pep67ehvvyv6i"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceajsdln7v4chxqoukiw7lxw6aexg5qdsaex2hgelz2sbu24iblhzg"),
|
||||||
|
"cron": MustParseCid("bafk2bzacecgrwmgnqhybn3l23uvwf2n2vrcfjrprfzgd44uxers2pgr5mhsue"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacebyier2ceh27acbrq2ccv4efvzotl6qntnlrxdsrik6i4tembz6qw"),
|
||||||
|
"init": MustParseCid("bafk2bzaceberhto43wnf4pklkd4c7d36kzslngyzyms4op7shxuswv3dtvfxu"),
|
||||||
|
"multisig": MustParseCid("bafk2bzaceaclpbrhoqdruvsuqqgknvy2k5dywzmjoehk4uarce3uvt3w2rewu"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacedzp56g5cg73oilloak3kf7u667rdkd5pgnhe2cljmr3o7ykcrzuk"),
|
||||||
|
"reward": MustParseCid("bafk2bzacebczbwfbbi6mvppbjcozatasjiaohvjjiqcy65ccuuyyw3xiixhk2"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzaceawqexy6t2ybzh3jjwhbs7icbg5vqnedbbge4e4r4pfp7spkcadsu"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacearemd7pn2jj26fdtqd4di27lfhpng3vp5chepm7qnmdzgiqr6wfi"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaceddc7fiaxfobfegqaobf5xinjgmhsa5iu4yi6klvc3jmjimcdvgyg"),
|
||||||
|
"system": MustParseCid("bafk2bzacedylltr57b2n6zpadh4i2c2kis4fzzvhao3kgvfaggrrbqyacew7q"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacecjkesz766626ab4svnzpq3jfs26a75vfktlfaku5fjdao2eyiqyq"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "butterflynet",
|
||||||
|
Version: 10,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzaceckjhsggacixv2d377zfdcnuio4hzkveprio3xnhm3gohi3zy3zco"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacedkt3uzgugcsdrcsyfvizcpyr5eshltmienbyhjne2t7t3ktkihny"),
|
||||||
|
"cron": MustParseCid("bafk2bzacecrehknegmfnhmhwy2g43cw52mvl7ptfpp44syus4iph7az7uveuq"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaced4krgbpj4sywcc453l3pygqr4qocc6nxylhztsm4duvkgfwd7vws"),
|
||||||
|
"eam": MustParseCid("bafk2bzacebn5lyg5pfhjpdlf3r7lnah4x33bhp5afftdgbr4kbpuioytr4bhe"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceaxyu24a2tbiacfr4p367xjtptrbang4qrh3fx65cojyrzolwyi4u"),
|
||||||
|
"evm": MustParseCid("bafk2bzacea5bqaubqeuqmpguxrem2pgocjr43wcfi5e3jpw2e3b4o6tcvs746"),
|
||||||
|
"init": MustParseCid("bafk2bzaceaufptkdg2gc4eq4ijqxtqp7wxwifusxb6kxay3vdz3wr5epqjbho"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacedp3c26ccw3l7fci4xhedxhqeqevkubuf5okuslq7o7rcqwqfahci"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacedlmiqvbutz4ebx2mezy3pqj72x2yt4gwea7sf4dv4a4s7xidelok"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacecrzxiowkhzpgz4rl2pdldzwmmnctuq5zzntqjkgyhyfllo3afb5s"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacebh2q3ofolirt5q2jpx367dfv22aecevsmybba3yhnxfs3foe6c5q"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzaceavop4j7iwneew6h7p667gvx37baloxilxetwkhsrr26jme6yye5o"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacecfblbat4w7jkxx7kjst33lowyb7s6apdnl7fsnpmy5c3jfq5kvye"),
|
||||||
|
"system": MustParseCid("bafk2bzacebojf25kc5yo7gskdbdgg5f52oppej2jp6nknzlvrww4ue5vkddd2"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzaceavue3zekq4wmvttck2vgxlcensrsgh5niu5qhna2owejycorftcc"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "butterflynet",
|
||||||
|
Version: 11,
|
||||||
|
BundleGitTag: "v11.0.0",
|
||||||
|
ManifestCid: MustParseCid("bafy2bzaceaiy4dsxxus5xp5n5i4tjzkb7sc54mjz7qnk2efhgmsrobjesxnza"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacecfdqb7p3jakhaa3cqnzpt7hxmhghrbxvafsylqno3febx55fnidw"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceavmqu2qihgbe3xdaotgypuzvdpiifnm7ll6rolks2u4lac6voosk"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacealtvh65rzb34fmyzw4m2np2htnio4w3pn4alzqovwxkdbf23dvpo"),
|
||||||
|
"eam": MustParseCid("bafk2bzacedko6hcjmwpuwgma5pb4gr2wgyvregk3nqqjxit7dv4es6vh5cjoc"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzacedhcei2xnr34poxr4xziypm2obqlibke4cs2cjfnr3sz6nf6h7fyy"),
|
||||||
|
"evm": MustParseCid("bafk2bzacebn5lwxboiikhz67ajwa34v2lc4qevnhpwdnipbmrnutkvrrqkb46"),
|
||||||
|
"init": MustParseCid("bafk2bzacea6vw4esh5tg7mprv5jkbx5xcyilcy4vvf64lss32mjyuvv2mh5ng"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacedq2afnwcfipay5twv5mgzjoio5bbjvyo4yqchdwqcr7wrareyx54"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacebbsvr7i7mqmaadyjibe5wxnv7bwvvec2wlgknuwda6ep45amnd5w"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzaceafuh6idvaqqkj353vs4qdl42tcmvnymewu5zf4rq2nruxdyunses"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzaceb7bx4honi3byjllpdk6fea32dpu3vqvil3okodybdk5m3erlnwjw"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacebxjhofdr3sb2uhy2ky2vcijh4nhmwkh5xijtbgk6dzkknji2kn7a"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaceabskmmkas6njbowols7t4ib3bipa5abpomk3jtgfwojtzd7mjzfm"),
|
||||||
|
"system": MustParseCid("bafk2bzacedtuh7cht3fud7fb4avl4g2zbz57lc4ohiaufpaex6dkmdokn5rgo"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzaceb37hxeuoo5rgf6ansrdl2ykm5v5zp6kireubn4orcopr67jbxv6k"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "calibrationnet",
|
||||||
|
Version: 8,
|
||||||
|
|
||||||
ManifestCid: MustParseCid("bafy2bzacedrdn6z3z7xz7lx4wll3tlgktirhllzqxb766dxpaqp3ukxsjfsba"),
|
ManifestCid: MustParseCid("bafy2bzacedrdn6z3z7xz7lx4wll3tlgktirhllzqxb766dxpaqp3ukxsjfsba"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacecruossn66xqbeutqx5r4k2kjzgd43frmwd4qkw6haez44ubvvpxo"),
|
"account": MustParseCid("bafk2bzacecruossn66xqbeutqx5r4k2kjzgd43frmwd4qkw6haez44ubvvpxo"),
|
||||||
@@ -41,25 +113,166 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
"verifiedregistry": MustParseCid("bafk2bzaceaihibfu625lbtzdp3tcftscshrmbgghgrc7kzqhxn4455pycpdkm"),
|
"verifiedregistry": MustParseCid("bafk2bzaceaihibfu625lbtzdp3tcftscshrmbgghgrc7kzqhxn4455pycpdkm"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "caterpillarnet",
|
Network: "calibrationnet",
|
||||||
Version: 8,
|
Version: 9,
|
||||||
ManifestCid: MustParseCid("bafy2bzacecsmunz6fzhg53276cixadn6ybhcnzkgbw3la5hf342tfxsdoet26"),
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacedbedgynklc4dgpyxippkxmba2mgtw7ecntoneclsvvl4klqwuyyy"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzaced6yatl4y2nmqmx2h3btk3np6oelyw2yt57elsb2nfmm33fadzt2g"),
|
"account": MustParseCid("bafk2bzaceavfgpiw6whqigmskk74z4blm22nwjfnzxb4unlqz2e4wg3c5ujpw"),
|
||||||
"cron": MustParseCid("bafk2bzacebrujytq4u7g62jbz52gio5k2s6rhruty7nt4eqq7ygitzxuee5zi"),
|
"cron": MustParseCid("bafk2bzaceb7hxmudhvkizszbmmf2ur2qfnfxfkok3xmbrlifylx6huw4bb3s4"),
|
||||||
"init": MustParseCid("bafk2bzacedajw5ptnwfdidv6m4rvd4c2m7dve4lhfbawygl5idkalcxbiiudu"),
|
"datacap": MustParseCid("bafk2bzaceanmwcfjfj65xy275rrfqqgoblnuqirdg6zwhc6qhbfhpphomvceu"),
|
||||||
"multisig": MustParseCid("bafk2bzaceb3kh5hjh6eebb5236xp7crn2owyyo7irap6sy4ns76uc7om6pxuy"),
|
"init": MustParseCid("bafk2bzaceczqxpivlxifdo5ohr2rx5ny4uyvssm6tkf7am357xm47x472yxu2"),
|
||||||
"paymentchannel": MustParseCid("bafk2bzacedl5am53e4mtxpzligcycxvmkolfkhfiuavww2dq3ukgaqwowj7vw"),
|
"multisig": MustParseCid("bafk2bzacec6gmi7ucukr3bk67akaxwngohw3lsg3obvdazhmfhdzflkszk3tg"),
|
||||||
"reward": MustParseCid("bafk2bzacecbswf242j43cymj3wh7nszawwlofv6z6z4qipb5d32hpxdhxywng"),
|
"paymentchannel": MustParseCid("bafk2bzacec4kg3bfjtssvv2b4wizlbdk3pdtrg5aknzgeb3a6rmksgurpynca"),
|
||||||
"storagemarket": MustParseCid("bafk2bzaceca5ersmg3zxf2cztgktq33bmfjuiqjcjlktwj52xyrpujbdsqvek"),
|
"reward": MustParseCid("bafk2bzacebpptqhcw6mcwdj576dgpryapdd2zfexxvqzlh3aoc24mabwgmcss"),
|
||||||
"storageminer": MustParseCid("bafk2bzacedg2fqaq5udfp3h6cxhywm27dgagxtselfgkyyyunqq362eaxpdm4"),
|
"storagemarket": MustParseCid("bafk2bzacebkfcnc27d3agm2bhzzbvvtbqahmvy2b2nf5xyj4aoxehow3bules"),
|
||||||
"storagepower": MustParseCid("bafk2bzaceb3dm2i2q323e6iozo3r6pyded645vvlpf537kga2a3hu5x7abgl4"),
|
"storageminer": MustParseCid("bafk2bzacebz4na3nq4gmumghegtkaofrv4nffiihd7sxntrryfneusqkuqodm"),
|
||||||
"system": MustParseCid("bafk2bzacebu47th3xerlngqavlipb6cfu2utljkxxzgadc3totogto2tmx2jc"),
|
"storagepower": MustParseCid("bafk2bzaceburxajojmywawjudovqvigmos4dlu4ifdikogumhso2ca2ccaleo"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzaceci3niq3rmbcmepgn27zvlgci6d5t4dvthx3pbmmx3wcu5elova6i"),
|
"system": MustParseCid("bafk2bzaceaue3nzucbom3tcclgyaahy3iwvbqejsxrohiquakvvsjgbw3shac"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebh7dj6j7yi5vadh7lgqjtq42qi2uq4n6zy2g5vjeathacwn2tscu"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "devnet",
|
Network: "calibrationnet",
|
||||||
Version: 8,
|
Version: 10,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzaced25ta3j6ygs34roprilbtb3f6mxifyfnm7z7ndquaruxzdq3y7lo"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacebhfuz3sv7duvk653544xsxhdn4lsmy7ol7k6gdgancyctvmd7lnq"),
|
||||||
|
"cron": MustParseCid("bafk2bzacecw2yjb6ysieffa7lk7xd32b3n4ssowvafolt7eq52lp6lk4lkhji"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaceaot6tv6p4cat3cg5fknq22htosw3p5rwyijmdsraatwqyc4qyero"),
|
||||||
|
"eam": MustParseCid("bafk2bzacec5untyj6cefdsfm47wckozw6wt6svqqh5dzh63nu4f6dvf26fkco"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzacebiyrhz32xwxi6xql67aaq5nrzeelzas472kuwjqmdmgwotpkj35e"),
|
||||||
|
"evm": MustParseCid("bafk2bzaceblpgzid4qjfavuiht6uwvq2lznshklk2qmf5akm3dzx2fczdqdxc"),
|
||||||
|
"init": MustParseCid("bafk2bzacedhxbcglnonzruxf2jpczara73eh735wf2kznatx2u4gsuhgqwffq"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacebv5gdlte2pyovmz6s37me6x2rixaa6a33w6lgqdohmycl23snvwm"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacea7ngq44gedftjlar3j3ql3dmd7e7xkkb6squgxinfncybfmppmlc"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacea3yo22x4dsh4axioshrdp42eoeugef3tqtmtwz5untyvth7uc73o"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacecclsfboql3iraf3e66pzuh3h7qp3vgmfurqz26qh5g5nrexjgknc"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacedu4chbl36rilas45py4vhqtuj6o7aa5stlvnwef3kshgwcsmha6y"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacedu3c67spbf2dmwo77ymkjel6i2o5gpzyksgu2iuwu2xvcnxgfdjg"),
|
||||||
|
"system": MustParseCid("bafk2bzacea4mtukm5zazygkdbgdf26cpnwwif5n2no7s6tknpxlwy6fpq3mug"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacec67wuchq64k7kgrujguukjvdlsl24pgighqdx5vgjhyk6bycrwnc"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "calibrationnet",
|
||||||
|
Version: 11,
|
||||||
|
BundleGitTag: "v11.0.0-rc2",
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacedhuowetjy2h4cxnijz2l64h4mzpk5m256oywp4evarpono3cjhco"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacebor5mnjnsav34cmm5pcd3dy4wubbv4wtcrvba7depy3sct7ie4sy"),
|
||||||
|
"cron": MustParseCid("bafk2bzacebetehhedh55alfn4rcx2mhjhvuiustxlhtxc3drkemnpttws5eqw"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaced6uhmrh5jjexhw4lco4ipesi2iutl7uupnyspgmnbydyo3amtu4i"),
|
||||||
|
"eam": MustParseCid("bafk2bzacea6wzcnflfnaxqnwydoghh7ezg5au32ew3bnzljzpiw6fimhlpoiu"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzacedrbpvjvyzif2cjxosm4pliyq2m6wzndvrg7r6hzdhixplzvgubbw"),
|
||||||
|
"evm": MustParseCid("bafk2bzaceabftmhejmvjvpzmbsv4cvaew6v5juj5sqtq7cfijugwsnahnsy5w"),
|
||||||
|
"init": MustParseCid("bafk2bzaceduyjd35y7o2lhvevtysqf45rp5ot7x5f36q6iond6dyiz6773g5q"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacebcb72fmbpocetnzgni2wnbrduamlqx6fl3yelrlzu7id6bu5ib5g"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceazwhm63kyp47pste5i5acnuhosrgythyagf3kc5clogiqqx6vkzk"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacecp7xo5ev46y64zr5osnn5fxo7itpoqw235tcfv6eo4rymzdemet2"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacedjt5mueomasx7dijooxnwxsbtzu2dj2ppp45rtle4kiinkmgzeei"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacebkjnjp5okqjhjxzft5qkuv36u4tz7inawseiwi2kw4j43xpxvhpm"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaced2qsypqwore3jrdtaesh4itst2fyeepdsozvtffc2pianzmphdum"),
|
||||||
|
"system": MustParseCid("bafk2bzacedqvik2n3phnj3cni3h2k5mtvz43nyq7mdmv7k7euejysvajywdug"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzaceceoo5jlom2zweh7kpye2vkj33wgqnkjshlsw2neemqkfg5g2rmvg"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "caterpillarnet",
|
||||||
|
Version: 8,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacebsdvrxmdajiyxq2mxxxppvg2zwvqjzz3pgbsxwh6pvdcjofpmnxw"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacedfms6w3ghqtljpgsfuiqa6ztjx7kcuin6myjezj6rypj3zjbqms6"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceaganmlpozvy4jywigs46pfrtdmhjjey6uyhpurplqbasojsislba"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacebafqqe3wv5ytkfwmqzbmchgem66pw6yq6rl7w6vlhqsbkxnisswq"),
|
||||||
|
"eam": MustParseCid("bafk2bzaceaeayeksiivw4y3gdqtigbgfntyvwc3q7v2ivb5kx7u55pn4q5lt6"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceburkmtd63nmzxpux5rcxsbqr6x5didl2ce7al32g4tqrvo4pjz2i"),
|
||||||
|
"evm": MustParseCid("bafk2bzacea7tp4lop7ivhay3ozitkmxxurk74v4zse42ant47rh2uw5z3tq5e"),
|
||||||
|
"init": MustParseCid("bafk2bzaced23r54kwuebl7t6mdantbby5qpfduxwxfryeliof2enyqzhokix6"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacebcn3rib6j6jvclys7dkf62hco45ssgamczkrtzt6xyewd6gt3mtu"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacecvas4leo44pqdguj22nnwqoqdgwajzrpm5d6ltkehc37ni6p6doq"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzaceaamp2a35vpfml4skap4dffklzae2urcm34mtwwce2lvhaons3a5y"),
|
||||||
|
"reward": MustParseCid("bafk2bzacebiizh4ohvv6p4uxjusoygex4wxcgvudqmdl2fsh6ft6s2zt4tz6q"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacedhkidshm7w2sqlw7izvaieyhkvmyhfsem6t6qfnkh7dnwqe56po2"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacedcmsibwfwhkp3sabmbyjmhqibyhjf3wwst7u5bkb2k6xpun3xevg"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacecrgnpypxnxzgglhlitaallfee3dl4ejy3y63knl7llnwba4ycf7i"),
|
||||||
|
"system": MustParseCid("bafk2bzacecl7gizbe52xj6sfm5glubkhrdblmzuwlid6lxrwr5zhcmv4dl2ew"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebzndvdqtdck2y35smcxezldgh6nm6rbkj3g3fmiknsgg2uah235y"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "caterpillarnet",
|
||||||
|
Version: 9,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacebsdvrxmdajiyxq2mxxxppvg2zwvqjzz3pgbsxwh6pvdcjofpmnxw"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacedfms6w3ghqtljpgsfuiqa6ztjx7kcuin6myjezj6rypj3zjbqms6"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceaganmlpozvy4jywigs46pfrtdmhjjey6uyhpurplqbasojsislba"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacebafqqe3wv5ytkfwmqzbmchgem66pw6yq6rl7w6vlhqsbkxnisswq"),
|
||||||
|
"eam": MustParseCid("bafk2bzaceaeayeksiivw4y3gdqtigbgfntyvwc3q7v2ivb5kx7u55pn4q5lt6"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceburkmtd63nmzxpux5rcxsbqr6x5didl2ce7al32g4tqrvo4pjz2i"),
|
||||||
|
"evm": MustParseCid("bafk2bzacea7tp4lop7ivhay3ozitkmxxurk74v4zse42ant47rh2uw5z3tq5e"),
|
||||||
|
"init": MustParseCid("bafk2bzaced23r54kwuebl7t6mdantbby5qpfduxwxfryeliof2enyqzhokix6"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacebcn3rib6j6jvclys7dkf62hco45ssgamczkrtzt6xyewd6gt3mtu"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacecvas4leo44pqdguj22nnwqoqdgwajzrpm5d6ltkehc37ni6p6doq"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzaceaamp2a35vpfml4skap4dffklzae2urcm34mtwwce2lvhaons3a5y"),
|
||||||
|
"reward": MustParseCid("bafk2bzacebiizh4ohvv6p4uxjusoygex4wxcgvudqmdl2fsh6ft6s2zt4tz6q"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacedhkidshm7w2sqlw7izvaieyhkvmyhfsem6t6qfnkh7dnwqe56po2"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacedcmsibwfwhkp3sabmbyjmhqibyhjf3wwst7u5bkb2k6xpun3xevg"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacecrgnpypxnxzgglhlitaallfee3dl4ejy3y63knl7llnwba4ycf7i"),
|
||||||
|
"system": MustParseCid("bafk2bzacecl7gizbe52xj6sfm5glubkhrdblmzuwlid6lxrwr5zhcmv4dl2ew"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebzndvdqtdck2y35smcxezldgh6nm6rbkj3g3fmiknsgg2uah235y"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "caterpillarnet",
|
||||||
|
Version: 10,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzaceajftd7jawqnwf4kzkotksrwy6ag7mu2apkvypzrrmxboheuum5oi"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacecsbx4tovnr5x2ifcpqbpx33oht74mgtvmaauzrqcq2wnm7prr7ak"),
|
||||||
|
"cron": MustParseCid("bafk2bzacecpzfajba6m4v4ty342jw6lcu6n63bwtldmzko733wpd2q5jzfdvu"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaceaa5zplkxvguwvnecfen62buhli5rraa3ga74b33a3sbscanzx4ok"),
|
||||||
|
"eam": MustParseCid("bafk2bzaceaffoa3eqmj7h53lwjatfqrjw63l3czk3vthyjz6oyhgwka3xwp6g"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceb7suh5m4xagoq6ap5v5x7vrhex2coq6gu6d54jteblm36cxhk5b2"),
|
||||||
|
"evm": MustParseCid("bafk2bzaceccmwmnb42pn7y7skbjwjur7b2eqxuw4lvm3he2xpvudjzluss4os"),
|
||||||
|
"init": MustParseCid("bafk2bzaceai72h4hxbgbp6gwm3m24uujscrj4bmbh6pxoerqtduijxt6dchfq"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacebycdokda2gysqpnl3dwksgidujgsksf4n6qotjq4erj5zd7clkzy"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceb5ucvftftiim6cxjusdpsmbht4x33kgexxgv5447gevk47h7jjqk"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzaceajqygfkhamlzfsquqjgoy4p7pc2fruouqajapfucf22rbmtt5yf6"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacednmzko2o5iv5kc6qxvpqfx5rq72krxzvna6cqoqem6flbfukglby"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacedayzz5qw7t7ykycf3a2hp666j5hb23a3mnmgp4xbbpvrx3h3ags4"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacedd3eiejzp35xuwjf3cvgd43b5ukqhelqmtgzqzqnt2wcy56pb744"),
|
||||||
|
"system": MustParseCid("bafk2bzacecfivztuulqqv4o5oyvvvrkblwix4hqt24pqru6ivnpioefhuhria"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacecdhw6x7dfrxfysmn6tdbn2ny464omgqppxhjuawxauscidppd7pc"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "caterpillarnet",
|
||||||
|
Version: 11,
|
||||||
|
BundleGitTag: "v11.0.0",
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacebexc2jgzwr5ngn6jdnkwdqwwmcapajuypdgvopoe6bnvp4yxm4o2"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceanjiq5m3feytue5m7hhxfkob2ofg2greoct5tr77reuhrjglo66g"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceavgd5qj6n744tukhdrvxejygzs3jnlizmcvjsdnxkgiimrd5jrys"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacedmdywxwrzop2gmf4ys5stydlmvbe35j3nyr2efmf273briksuvse"),
|
||||||
|
"eam": MustParseCid("bafk2bzacec7qo7s72li7tqysllstlrxxm2dhfqv2w32pytel2e775cki4ozqm"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceaygtkliu26ubb7ivljrvaeesp5sbjlis5okzl35ishxioa2tlx4w"),
|
||||||
|
"evm": MustParseCid("bafk2bzacebo7iqzy2ophz4f3civzwlltec7q5fut7kmtfckr6vy33r6ic5eqe"),
|
||||||
|
"init": MustParseCid("bafk2bzaceb7uzzlsquqwrqhb2vpbvk3jgr4wp5i3smu2splnag2v5sppdehns"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacebwibfqrytobl4pjtny244zkmfoomazbap3r5gddjryckx5js4csi"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacecuaa5esuxpouigxoamyl5gire2qqqhvyhewsig2x2j73f6ksh7go"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzaced4xxqhv63njf2ibvsqshlwikafctxev7aho5lgsfxyt2javjwvtw"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacedwtx3xokqmbgkgkoqkdt6lam4ymdjb3eznlbtec5wcrtx74l2bpc"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacebbbe4sdo3xxkez7x7lkl6j46w34vx7eg7xswmdzhp7moa44p3wjg"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacedfgz6n24tjsor4pcayomim2f5f3a3fgyatmjgwxxeejna7okndda"),
|
||||||
|
"system": MustParseCid("bafk2bzacebxfzeom3d7ahcz2n2nlwp7ncv767bdbbrisugks4l6v7lcu2tmyg"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacedaws3or3twy45ltcxucgvqijsje4x675ph6vup2w35smlfneamno"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "devnet",
|
||||||
|
Version: 8,
|
||||||
|
|
||||||
ManifestCid: MustParseCid("bafy2bzacedq7tuibavyqxzkq4uybjj7ly22eu42mjkoehwn5d47xfunmtjm4k"),
|
ManifestCid: MustParseCid("bafy2bzacedq7tuibavyqxzkq4uybjj7ly22eu42mjkoehwn5d47xfunmtjm4k"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacea4tlgnp7m6tlldpz3termlwxlnyq24nwd4zdzv4r6nsjuaktuuzc"),
|
"account": MustParseCid("bafk2bzacea4tlgnp7m6tlldpz3termlwxlnyq24nwd4zdzv4r6nsjuaktuuzc"),
|
||||||
@@ -75,8 +288,97 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
"verifiedregistry": MustParseCid("bafk2bzaceaajgtglewgitshgdi2nzrvq7eihjtyqj5yiamesqun2hujl3xev2"),
|
"verifiedregistry": MustParseCid("bafk2bzaceaajgtglewgitshgdi2nzrvq7eihjtyqj5yiamesqun2hujl3xev2"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "mainnet",
|
Network: "devnet",
|
||||||
Version: 8,
|
Version: 9,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacedozk3jh2j4nobqotkbofodq4chbrabioxbfrygpldgoxs3zwgggk"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaced5llqnqqhypolyuogz3h2wjomugqkrhyhocvly3aoib4c5xiush6"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceahwdt32ji53mo5yz6imvztz3s3g2ra5uz3jdfa77j7hqcnq6r4l2"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaceabcxoy5iscdierasorjoj6xzqgnnb5pmrr7prkuibw4yggx3v2d2"),
|
||||||
|
"init": MustParseCid("bafk2bzaceastwn42kqyztz7uzej7l4lemp5nakqqsfvksry7k75q5ombhprme"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacebeiygkjupkpfxcrsidci4bvn6afkvx4lsj3ut3ywhsj654pzfgk4"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacedhsdoo4ww47rm44pizu5qqpho753cizzbbvnd5yz3nm3347su5cy"),
|
||||||
|
"reward": MustParseCid("bafk2bzacebzqvisqe3iaodtxq7l2lgzwfkxznrnp676ddpllqcpvuae5i33le"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzaceduauegz4nniegh667btjhg2anipwpxeb664s4ossq2ifvuqwqlso"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacec23wjdmbm5pt6pqsbjb3w6j7vyrolijz2mysvp6clllfgpmhb6ge"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacebnyywv46n2ghg62inllwpmnyuwtoz57fn5lpgpf436mahajg4qrg"),
|
||||||
|
"system": MustParseCid("bafk2bzacebgafb6h2o2g5whrujc2uvsttrussyc5t56rvhrjqkqhzdu4jopwa"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacednorhcy446agy7ecpmfms2u4aoa3mj2eqomffuoerbik5yavrxyi"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "devnet",
|
||||||
|
Version: 10,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacebzz376j5kizfck56366kdz5aut6ktqrvqbi3efa2d4l2o2m653ts"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacedkj5dqs5xxamnlug2d5dyjl6askf7wlmvwzhmsrzcvogv7acqfe6"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceabslrigld2vshng6sppbp3bsptjtttvbxctwqe5lkyl2efom2wu4"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaceagg4qklzhhg5oj4shwqpoeykeyxus7xhj2abuot2tycdwsf2oaaa"),
|
||||||
|
"eam": MustParseCid("bafk2bzaceafttsbglcetxwtzqtdniittwczogkefgnxztgsp7mymcpvdlhdik"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzacedypn6tf3yrj4bavmscddygeima3puih37fbkxuhjhlrzbjh3dbo4"),
|
||||||
|
"evm": MustParseCid("bafk2bzacec5ywczgg73fnwi36nlxso3zduop3fwj3pq6ynn5zltrs4dpcwglg"),
|
||||||
|
"init": MustParseCid("bafk2bzacebkanlbkwwtniyz4fawevnkoyje67l5nflltmciplqiutekxzzfh4"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacectxa2izvpaybmmpvearekrybxtglctwnexzzneyn6xrnrmectmpa"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacectov7vawkhsvq7aobyjq3oppamytq425wpkxejmq65vvcdm4bt2e"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacec3xpbrxw2rnpuve4mxfhny44lxbpbwmduy4ula4ohj2bp6wplpvc"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacec5nexsejraoqraywka7zcacjoxgpdbopehdkhiwqwcyghtof4s3w"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacecw5xzj6z5b7qxx5xca5py4aoecmqj2pxb6nw673alufy22zckkyo"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaceckhnpxoaanjf474wxzkntlnzdofoy75ehyuydfjkuw4swhotws4y"),
|
||||||
|
"system": MustParseCid("bafk2bzaceairk5qz5hyzt4yyaxa356aszyifswiust5ilxizwxujcmtzvjzoa"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzaced2mkyqobpgna5jevosym3adv2bvraggigyz2jgn5cxymirxj4x3i"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "devnet",
|
||||||
|
Version: 11,
|
||||||
|
BundleGitTag: "v11.0.0",
|
||||||
|
ManifestCid: MustParseCid("bafy2bzaceay35go4xbjb45km6o46e5bib3bi46panhovcbedrynzwmm3drr4i"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacecf2pprkbdlpm4e2xz3ufunxtgrgyh2ie3stuqiyhibsvdze7kvri"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceasr5d2skowvzv5mzsyak6waqrgc46ewj6rzbapkfi5woom6n6bwa"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaceaqd77gptubupda7rp7daxkxbkzwc253dxhiyoezxvj2tljmkgpny"),
|
||||||
|
"eam": MustParseCid("bafk2bzacedve6p4ye6zxydjbfs4ode5r2equ7rqzpyltujsq2lu6wyxnijfx4"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzacea25xfsxwew3h2crer6jlb4c5vwu2gtch2jh73ocuxjhupenyrugy"),
|
||||||
|
"evm": MustParseCid("bafk2bzacece5hivtkmi757lyfahgti7xuqgofodb2u65pxgf6oizfwiiwlcsi"),
|
||||||
|
"init": MustParseCid("bafk2bzacecxnr5y7qifzdqqiwfbjxv2yr7lbkcyu3e2mf5zjdncteupxdlquu"),
|
||||||
|
"multisig": MustParseCid("bafk2bzaceayap4k4u3lbysaeeixct5fvhmafy3fa5eagvdpk3i4a7ubfdpobe"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceafgrz5wepbein35gie7rnsu7zttxvgllgdneuefmmy4j5izydtza"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacedwbtfqlx47fdkxjrb5mwiatheci44x3zkpx33smybc2cme23ymuo"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzaceaj74fmooaf3gj3ebwon64ky7hhdh7kytdr3agclqfrqzmpzykh7g"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacedb7bokkzzs7hnbhivp74pgcpermuy7j6b3ncodylksukkxtnn7ze"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacedilnkegizkxz3nuutib4d4wwlk4bkla22loepia2h53yf4hysmq6"),
|
||||||
|
"system": MustParseCid("bafk2bzacedpyoncjbl4oxkjm5e77ngvpy2xfajjc4myfsv2vltvzxioattlu2"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebdqi5tr5pjnem5nylg2zbqcugvi7oxi35bhnrfudx4y4ufhlit2k"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "hyperspace",
|
||||||
|
Version: 8,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacedvffumcvf72f2btjqvece3kpcdorxq5tq76iwcmqbzvsiu526cqm"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacecim7uybic2qprbkjhowg7qkniv4zywj5h5g4u4ss72urco2akzuo"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceahgq64awp4f7li3hdgimc4upqvdvltpmeywckvens33umcxt424a"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacebkxn52ttooaslkwncijk3bgd3tm2zw7vijdhwvg2cxnxbrzmmq5e"),
|
||||||
|
"eam": MustParseCid("bafk2bzaceczhgub5anrnaf7ol65mu54gsgwcj6c6m3yhet7rhxm2l6kz4s4ru"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzacealn5enbxyxbfs7gbsjbyma2zk3bcr7okvflxhpr753d4eh6ixooa"),
|
||||||
|
"evm": MustParseCid("bafk2bzacedljkrmazyewawpnddrkzrt55556374dw2pm2hokgkompgzw4vx5y"),
|
||||||
|
"init": MustParseCid("bafk2bzacec55gyyaqjrw7zughywocgwcjvv6k5fijjpjw4xgckuqz6pjtff5a"),
|
||||||
|
"multisig": MustParseCid("bafk2bzaceblozbdzybdivvjdiid4jwm2jc6x5a66sunh2vvwsqba6wzqmr7i6"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacealcyke5a6n24efs6qe4iikynpk2twqssyugy7jcyf6p6shgw2iwa"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzaceaamp2a35vpfml4skap4dffklzae2urcm34mtwwce2lvhaons3a5y"),
|
||||||
|
"reward": MustParseCid("bafk2bzacebafzaqhwsm3nmsfwcd6ngvx6ev6zlcpyfljqh4kb77vok6opban6"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacecrjfg4p7fxznsdkoobs4po2ve3ywixrirrk6netgxh63qqaefamg"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzaceb3ctd4atxwhdkmlg4i63zxo5aopknlj7l5kaiqr22xpcmico6vg4"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacecvcix3ugopvby2vah5wwiu5cqjedwzwkanmr34kdoc4f3o6p7nsq"),
|
||||||
|
"system": MustParseCid("bafk2bzacedo2hfopt6gy52goj7fot5qwzhtnysmgo7h25crq4clpugkerjabk"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacea7rfkjrixaidksnmjehglmavyt56nyeu3sfxu2e3dcpf62oab6tw"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "mainnet",
|
||||||
|
Version: 8,
|
||||||
|
|
||||||
ManifestCid: MustParseCid("bafy2bzacebogjbpiemi7npzxchgcjjki3tfxon4ims55obfyfleqntteljsea"),
|
ManifestCid: MustParseCid("bafy2bzacebogjbpiemi7npzxchgcjjki3tfxon4ims55obfyfleqntteljsea"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacedudbf7fc5va57t3tmo63snmt3en4iaidv4vo3qlyacbxaa6hlx6y"),
|
"account": MustParseCid("bafk2bzacedudbf7fc5va57t3tmo63snmt3en4iaidv4vo3qlyacbxaa6hlx6y"),
|
||||||
@@ -92,8 +394,74 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
"verifiedregistry": MustParseCid("bafk2bzaceb3zbkjz3auizmoln2unmxep7dyfcmsre64vnqfhdyh7rkqfoxlw4"),
|
"verifiedregistry": MustParseCid("bafk2bzaceb3zbkjz3auizmoln2unmxep7dyfcmsre64vnqfhdyh7rkqfoxlw4"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "testing",
|
Network: "mainnet",
|
||||||
Version: 8,
|
Version: 9,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzaceb6j6666h36xnhksu3ww4kxb6e25niayfgkdnifaqi6m6ooc66i6i"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacect2p7urje3pylrrrjy3tngn6yaih4gtzauuatf2jllk3ksgfiw2y"),
|
||||||
|
"cron": MustParseCid("bafk2bzacebcec3lffmos3nawm5cvwehssxeqwxixoyyfvejy7viszzsxzyu26"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacebb6uy2ys7tapekmtj7apnjg7oyj4ia5t7tlkvbmwtxwv74lb2pug"),
|
||||||
|
"init": MustParseCid("bafk2bzacebtdq4zyuxk2fzbdkva6kc4mx75mkbfmldplfntayhbl5wkqou33i"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacec4va3nmugyqjqrs3lqyr2ij67jhjia5frvx7omnh2isha6abxzya"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzacebhdvjbjcgupklddfavzef4e4gnkt3xk3rbmgfmk7xhecszhfxeds"),
|
||||||
|
"reward": MustParseCid("bafk2bzacebezgbbmcm2gbcqwisus5fjvpj7hhmu5ubd37phuku3hmkfulxm2o"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacec3j7p6gklk64stax5px3xxd7hdtejaepnd4nw7s2adihde6emkcu"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacedyux5hlrildwutvvjdcsvjtwsoc5xnqdjl73ouiukgklekeuyfl4"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacedsetphfajgne4qy3vdrpyd6ekcmtfs2zkjut4r34cvnuoqemdrtw"),
|
||||||
|
"system": MustParseCid("bafk2bzaceagvlo2jtahj7dloshrmwfulrd6e2izqev32qm46eumf754weec6c"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacecf3yodlyudzukumehbuabgqljyhjt5ifiv4vetcfohnvsxzynwga"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "mainnet",
|
||||||
|
Version: 10,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacecsuyf7mmvrhkx2evng5gnz5canlnz2fdlzu2lvcgptiq2pzuovos"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceampw4romta75hyz5p4cqriypmpbgnkxncgxgqn6zptv5lsp2w2bo"),
|
||||||
|
"cron": MustParseCid("bafk2bzacedcbtsifegiu432m5tysjzkxkmoczxscb6hqpmrr6img7xzdbbs2g"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacealj5uk7wixhvk7l5tnredtelralwnceafqq34nb2lbylhtuyo64u"),
|
||||||
|
"eam": MustParseCid("bafk2bzacedrpm5gbleh4xkyo2jvs7p5g6f34soa6dpv7ashcdgy676snsum6g"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceaqoc5zakbhjxn3jljc4lxnthllzunhdor7sxhwgmskvc6drqc3fa"),
|
||||||
|
"evm": MustParseCid("bafk2bzaceahmzdxhqsm7cu2mexusjp6frm7r4kdesvti3etv5evfqboos2j4g"),
|
||||||
|
"init": MustParseCid("bafk2bzaced2f5rhir3hbpqbz5ght7ohv2kgj42g5ykxrypuo2opxsup3ykwl6"),
|
||||||
|
"multisig": MustParseCid("bafk2bzaceduf3hayh63jnl4z2knxv7cnrdenoubni22fxersc4octlwpxpmy4"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceartlg4mrbwgzcwric6mtvyawpbgx2xclo2vj27nna57nxynf3pgc"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacebnhtaejfjtzymyfmbdrfmo7vgj3zsof6zlucbmkhrvcuotw5dxpq"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzaceclejwjtpu2dhw3qbx6ow7b4pmhwa7ocrbbiqwp36sq5yeg6jz2bc"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzaced4h7noksockro7glnssz2jnmo2rpzd7dvnmfs4p24zx3h6gtx47s"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacec4ay4crzo73ypmh7o3fjendhbqrxake46bprabw67fvwjz5q6ixq"),
|
||||||
|
"system": MustParseCid("bafk2bzacedakk5nofebyup4m7nvx6djksfwhnxzrfuq4oyemhpl4lllaikr64"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacedfel6edzqpe5oujno7fog4i526go4dtcs6vwrdtbpy2xq6htvcg6"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "mainnet",
|
||||||
|
Version: 11,
|
||||||
|
BundleGitTag: "v11.0.0",
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacecnhaiwcrpyjvzl4uv4q3jzoif26okl3m66q3cijp3dfwlcxwztwo"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzacealnlr7st6lkwoh6wxpf2hnrlex5sknaopgmkr2tuhg7vmbfy45so"),
|
||||||
|
"cron": MustParseCid("bafk2bzacebpewdvvgt6tk2o2u4rcovdgym67tadiis5usemlbejg7k3kt567o"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacebslykoyrb2hm7aacjngqgd5n2wmeii2goadrs5zaya3pvdf6pdnq"),
|
||||||
|
"eam": MustParseCid("bafk2bzaceaelwt4yfsfvsu3pa3miwalsvy3cfkcjvmt4sqoeopsppnrmj2mf2"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceclkmc4yidxc6lgcjpfypbde2eddnevcveo4j5kmh4ek6inqysz2k"),
|
||||||
|
"evm": MustParseCid("bafk2bzacediwh6etwzwmb5pivtclpdplewdjzphouwqpppce6opisjv2fjqfe"),
|
||||||
|
"init": MustParseCid("bafk2bzaceckwf3w6n2nw6eh77ktmsxqgsvshonvgnyk5q5syyngtetxvasfxg"),
|
||||||
|
"multisig": MustParseCid("bafk2bzaceafajceqwg5ybiz7xw6rxammuirkgtuv625gzaehsqfprm4bazjmk"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceb4e6cnsnviegmqvsmoxzncruvhra54piq7bwiqfqevle6oob2gvo"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacebwjw2vxkobs7r2kwjdqqb42h2kucyuk6flbnyzw4odg5s4mogamo"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzaceazu2j2zu4p24tr22btnqzkhzjvyjltlvsagaj6w3syevikeb5d7m"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacec24okjqrp7c7rj3hbrs5ez5apvwah2ruka6haesgfngf37mhk6us"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaceaxgloxuzg35vu7l7tohdgaq2frsfp4ejmuo7tkoxjp5zqrze6sf4"),
|
||||||
|
"system": MustParseCid("bafk2bzaced7npe5mt5nh72jxr2igi2sofoa7gedt4w6kueeke7i3xxugqpjfm"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacedej3dnr62g2je2abmyjg3xqv4otvh6e26du5fcrhvw7zgcaaez3a"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "testing",
|
||||||
|
Version: 8,
|
||||||
|
|
||||||
ManifestCid: MustParseCid("bafy2bzacedkjpqx27wgsvfxzuxfvixuxtbpt2y6yo6igcasez6gqiowron776"),
|
ManifestCid: MustParseCid("bafy2bzacedkjpqx27wgsvfxzuxfvixuxtbpt2y6yo6igcasez6gqiowron776"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacebmfbtdj5vruje5auacrhhprcjdd6uclhukb7je7t2f6ozfcgqlu2"),
|
"account": MustParseCid("bafk2bzacebmfbtdj5vruje5auacrhhprcjdd6uclhukb7je7t2f6ozfcgqlu2"),
|
||||||
@@ -109,8 +477,74 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
"verifiedregistry": MustParseCid("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"),
|
"verifiedregistry": MustParseCid("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"),
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
Network: "testing-fake-proofs",
|
Network: "testing",
|
||||||
Version: 8,
|
Version: 9,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacecnnrmekqw2xvud46g3vo6x26cogh3ydgljqajlxqxzzbuxsjlwjm"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceaiebfiuu76zoywzltelio2zuvsavirka27ur6kspn7scvcl5cuiy"),
|
||||||
|
"cron": MustParseCid("bafk2bzacecla36w3tbwap5jgdtooxsud25mdpc75kgtjs34mi4xhwygph2gki"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaced5h3ct6i7oqpyimkj3hwdywmux5tslu5vs2ywbzruqmxjtqczygs"),
|
||||||
|
"init": MustParseCid("bafk2bzaceauxqpspnvui7dryuvfgzoogatbkbahp4ovaih734blwi4bassnlm"),
|
||||||
|
"multisig": MustParseCid("bafk2bzaceddfagxfpsihjxq7yt4ditv2tcoou5w4hzbsapadlw3v44cxfcqpi"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaced4nc4ofrbqevpwrt7fnf3beshi5ccrecq3zojt2sxgrkz7ebnbh4"),
|
||||||
|
"reward": MustParseCid("bafk2bzacedxleepeg4ei3jnayzcfz6shi25rrvoyhr6fxmkdezq4owrazi7rq"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzaceakqcjpppg3exrr7dru7jglvno2xyw4hsuebxay4lvrzvmwmv5kvu"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacealfvphicwnysmmyyerseppyvydy2reisvbft46vdprp2lnfvlgqc"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaceageil5b5mr5uwo6vqs4nnnmpiwe3fkjffzyngcicuu7gruuwapjm"),
|
||||||
|
"system": MustParseCid("bafk2bzacedo4pu3iwx2gu72hinsstpiokhl5iicnb3rumzffsnhy7zhmnxhyy"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzaceatmqip2o3ausbntvdhj7yemu6hb3b5yqv6hm42gylbbmz7geocpm"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "testing",
|
||||||
|
Version: 10,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacebsp3bkxwsijenqeimhvhtg52d6o76hn6qhzxveqfq7d5hdd5l2ee"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceazxb6p2xg6caivmie6k2bvutyesngwyvhwv4eemwu7ia4vnqkcuy"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceax6ym73boyl5zdpbcr6zmbajzylmcdvlapz5zcqgzcshakz44jbq"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacea63x3v6lvtb4ast5uq3nhrpokvylymvezyr5xyjl6vtlfwkuw6qo"),
|
||||||
|
"eam": MustParseCid("bafk2bzacebhualcn7fofyqr6lhrel32ud23hcwzeenfqu3rrn5nmt6gugqgo6"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzacecgft7e3v4kbpb3tlt5s6hng74ptu3ggcdi4wmt5p4vr6qkmkw2zc"),
|
||||||
|
"evm": MustParseCid("bafk2bzaceaoqvbqetgicqpvwvcnpjx5aa74kwlhq3u7mwv4yseszxkimwz5pk"),
|
||||||
|
"init": MustParseCid("bafk2bzaceapmoyg2qppzle24t25ncyycn2uwhnw6crqkqlokkbc7w4mn74wko"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacecn3dlepgaps3h6iwlq65dx6zyrbfi4pmgdqxphb5idubb6ibflwe"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceaanxurr2k3ueolwcnminmdfp3tyxtntqg5fou37smeulb5dxqjzk"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacedujdvwk4omjexdnmh2qrkqbw27v4c2g3krajhtzyfzart36bimum"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacecdbjjxvdtltobiu7thwyyr2puunoz3q4vyfnhhxl2sbp4ovwq37s"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacebo5q7jrf4qjrhtotwt5ouzlygvml4bzofs2egdnbxyfmuo7tro6c"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacebt2ipqnorxbzncwjadkulip6blzksmwd4mmyrfjsmjyf55itra2k"),
|
||||||
|
"system": MustParseCid("bafk2bzacecf2jimdz7knhngs64ximfz3eaud6s3kiunmkybgrkupdjyo2dw7o"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacecdmek2htsgcyoyl35glakyab66cojqo2y335njnm7krleb6yfbps"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "testing",
|
||||||
|
Version: 11,
|
||||||
|
BundleGitTag: "v11.0.0",
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacea2vxre32tg3xhpejrktiuzx4d3pcoe7yyazgscfibmegmchr6n42"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceccerssb3tgel6ukdghlwvs7dxsolj4fpkgn7dh7owzwapqb6ejpw"),
|
||||||
|
"cron": MustParseCid("bafk2bzacebtfl6fczxnitrqqjhyefskf3asyn3gzuvqcddieoqfsaddk5fd4q"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacediikc55y6uzmnhucf4mik6rqpjulwvgp5gdibogxjhgbvusmzff2"),
|
||||||
|
"eam": MustParseCid("bafk2bzaceazqi5ezossp6kvqogaaba6hxlfarqgniktmb7iy5qonha3eflz6m"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceb77ospgfqqmf67v23wkyeg7lr2mu53ybaacu3bslx7s7nhttdueo"),
|
||||||
|
"evm": MustParseCid("bafk2bzacedvgt7mv22hux4vrnklylq7qmw43kfrqwam6wdsfzkdnaewr33qbu"),
|
||||||
|
"init": MustParseCid("bafk2bzacealzb3nk2oypway5ubz3hs5py5ok5tuw545454vg4d3mwbslef4js"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacec45ppn4hrwizmopp2v2atkxw35tb6yem6uqhqilrv7aiaknnnxmu"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceajbr3t6cngzh3katqteflbcrtwtdgbthnlfemon5tg6rytf2uonw"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacea7ycf53kbq4robcuh3ziy7qwwhaqamc5krn3lugypgpxhlewdaiq"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacedskmbcpaeb6bezs32szh52jrukvihobluadauayroo5gzrt32tkm"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzaced3yg5lctmswnbkxyd6cleg3llyux7fu2vbddyd2ho36fpym423mq"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacebvpdf372fzxgixztbz2r7ayxyvx7jmdxwlfuqt2cq7tnqgie3klw"),
|
||||||
|
"system": MustParseCid("bafk2bzaceaatvscbnkv36ixhtt2zel4er5oskxevgumh5gegqkv7uzah36f24"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebp2r56wxadvfzpfbmqwfi3dlnwpmoc5u4tau2hfftbkuafkhye64"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "testing-fake-proofs",
|
||||||
|
Version: 8,
|
||||||
|
|
||||||
ManifestCid: MustParseCid("bafy2bzacecd3lb5v6tzjylnhnrhexslssyaozy6hogzgpkhztoe76exbrgrug"),
|
ManifestCid: MustParseCid("bafy2bzacecd3lb5v6tzjylnhnrhexslssyaozy6hogzgpkhztoe76exbrgrug"),
|
||||||
Actors: map[string]cid.Cid{
|
Actors: map[string]cid.Cid{
|
||||||
"account": MustParseCid("bafk2bzacebmfbtdj5vruje5auacrhhprcjdd6uclhukb7je7t2f6ozfcgqlu2"),
|
"account": MustParseCid("bafk2bzacebmfbtdj5vruje5auacrhhprcjdd6uclhukb7je7t2f6ozfcgqlu2"),
|
||||||
@@ -125,4 +559,69 @@ var EmbeddedBuiltinActorsMetadata []*BuiltinActorsMetadata = []*BuiltinActorsMet
|
|||||||
"system": MustParseCid("bafk2bzaced6kjkbv7lrb2qwq5we2hqaxc6ztch5p52g27qtjy45zdemsk4b7m"),
|
"system": MustParseCid("bafk2bzaced6kjkbv7lrb2qwq5we2hqaxc6ztch5p52g27qtjy45zdemsk4b7m"),
|
||||||
"verifiedregistry": MustParseCid("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"),
|
"verifiedregistry": MustParseCid("bafk2bzacectzxvtoselhnzsair5nv6k5vokvegnht6z2lfee4p3xexo4kg4m6"),
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
Network: "testing-fake-proofs",
|
||||||
|
Version: 9,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacecql2gj2tri4fnbznmldue73qzt6zszvugw4exd64mwb52zrhv7k2"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceaiebfiuu76zoywzltelio2zuvsavirka27ur6kspn7scvcl5cuiy"),
|
||||||
|
"cron": MustParseCid("bafk2bzacecla36w3tbwap5jgdtooxsud25mdpc75kgtjs34mi4xhwygph2gki"),
|
||||||
|
"datacap": MustParseCid("bafk2bzaced5h3ct6i7oqpyimkj3hwdywmux5tslu5vs2ywbzruqmxjtqczygs"),
|
||||||
|
"init": MustParseCid("bafk2bzaceauxqpspnvui7dryuvfgzoogatbkbahp4ovaih734blwi4bassnlm"),
|
||||||
|
"multisig": MustParseCid("bafk2bzaceddfagxfpsihjxq7yt4ditv2tcoou5w4hzbsapadlw3v44cxfcqpi"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaced4nc4ofrbqevpwrt7fnf3beshi5ccrecq3zojt2sxgrkz7ebnbh4"),
|
||||||
|
"reward": MustParseCid("bafk2bzacedxleepeg4ei3jnayzcfz6shi25rrvoyhr6fxmkdezq4owrazi7rq"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzaceakqcjpppg3exrr7dru7jglvno2xyw4hsuebxay4lvrzvmwmv5kvu"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzaceab3cjrwwwfemyc5lw73w6tibpgxtx3wuzjhami6tvhcvetygdm7m"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaceafemwhsy3e7ueqsrn3f7n53vdqkvfbig3hgbw7eohsefnfvgq7yc"),
|
||||||
|
"system": MustParseCid("bafk2bzacedo4pu3iwx2gu72hinsstpiokhl5iicnb3rumzffsnhy7zhmnxhyy"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzaceatmqip2o3ausbntvdhj7yemu6hb3b5yqv6hm42gylbbmz7geocpm"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "testing-fake-proofs",
|
||||||
|
Version: 10,
|
||||||
|
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacedwap2uuii4luljckrnb4vkur2unb6fyinn7xjie6xlva2wmlygj2"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceazxb6p2xg6caivmie6k2bvutyesngwyvhwv4eemwu7ia4vnqkcuy"),
|
||||||
|
"cron": MustParseCid("bafk2bzaceax6ym73boyl5zdpbcr6zmbajzylmcdvlapz5zcqgzcshakz44jbq"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacea63x3v6lvtb4ast5uq3nhrpokvylymvezyr5xyjl6vtlfwkuw6qo"),
|
||||||
|
"eam": MustParseCid("bafk2bzacebhualcn7fofyqr6lhrel32ud23hcwzeenfqu3rrn5nmt6gugqgo6"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzacecgft7e3v4kbpb3tlt5s6hng74ptu3ggcdi4wmt5p4vr6qkmkw2zc"),
|
||||||
|
"evm": MustParseCid("bafk2bzaceaoqvbqetgicqpvwvcnpjx5aa74kwlhq3u7mwv4yseszxkimwz5pk"),
|
||||||
|
"init": MustParseCid("bafk2bzaceapmoyg2qppzle24t25ncyycn2uwhnw6crqkqlokkbc7w4mn74wko"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacecn3dlepgaps3h6iwlq65dx6zyrbfi4pmgdqxphb5idubb6ibflwe"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceaanxurr2k3ueolwcnminmdfp3tyxtntqg5fou37smeulb5dxqjzk"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacedujdvwk4omjexdnmh2qrkqbw27v4c2g3krajhtzyfzart36bimum"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacecdbjjxvdtltobiu7thwyyr2puunoz3q4vyfnhhxl2sbp4ovwq37s"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacedc5klueery4fn2voso4u76rgo54uctsculesdbxxbeh6rgp2q4te"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzacecuz2h2renlfio4xkyrvvro7nwidf7utpjy3oizk2xuszoz3gmea6"),
|
||||||
|
"system": MustParseCid("bafk2bzacecf2jimdz7knhngs64ximfz3eaud6s3kiunmkybgrkupdjyo2dw7o"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacecdmek2htsgcyoyl35glakyab66cojqo2y335njnm7krleb6yfbps"),
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
Network: "testing-fake-proofs",
|
||||||
|
Version: 11,
|
||||||
|
BundleGitTag: "v11.0.0",
|
||||||
|
ManifestCid: MustParseCid("bafy2bzacecojemqglhzzhjnhgtrcbsgkyv67ziytvtbhwlr4ym4oxqofv7zui"),
|
||||||
|
Actors: map[string]cid.Cid{
|
||||||
|
"account": MustParseCid("bafk2bzaceccerssb3tgel6ukdghlwvs7dxsolj4fpkgn7dh7owzwapqb6ejpw"),
|
||||||
|
"cron": MustParseCid("bafk2bzacebtfl6fczxnitrqqjhyefskf3asyn3gzuvqcddieoqfsaddk5fd4q"),
|
||||||
|
"datacap": MustParseCid("bafk2bzacediikc55y6uzmnhucf4mik6rqpjulwvgp5gdibogxjhgbvusmzff2"),
|
||||||
|
"eam": MustParseCid("bafk2bzaceazqi5ezossp6kvqogaaba6hxlfarqgniktmb7iy5qonha3eflz6m"),
|
||||||
|
"ethaccount": MustParseCid("bafk2bzaceb77ospgfqqmf67v23wkyeg7lr2mu53ybaacu3bslx7s7nhttdueo"),
|
||||||
|
"evm": MustParseCid("bafk2bzacedvgt7mv22hux4vrnklylq7qmw43kfrqwam6wdsfzkdnaewr33qbu"),
|
||||||
|
"init": MustParseCid("bafk2bzacealzb3nk2oypway5ubz3hs5py5ok5tuw545454vg4d3mwbslef4js"),
|
||||||
|
"multisig": MustParseCid("bafk2bzacec45ppn4hrwizmopp2v2atkxw35tb6yem6uqhqilrv7aiaknnnxmu"),
|
||||||
|
"paymentchannel": MustParseCid("bafk2bzaceajbr3t6cngzh3katqteflbcrtwtdgbthnlfemon5tg6rytf2uonw"),
|
||||||
|
"placeholder": MustParseCid("bafk2bzacedfvut2myeleyq67fljcrw4kkmn5pb5dpyozovj7jpoez5irnc3ro"),
|
||||||
|
"reward": MustParseCid("bafk2bzacea7ycf53kbq4robcuh3ziy7qwwhaqamc5krn3lugypgpxhlewdaiq"),
|
||||||
|
"storagemarket": MustParseCid("bafk2bzacedskmbcpaeb6bezs32szh52jrukvihobluadauayroo5gzrt32tkm"),
|
||||||
|
"storageminer": MustParseCid("bafk2bzacebqeztpa5exztccqjwqhan5droiy7ga6zekm6f2gzxoe655vneczm"),
|
||||||
|
"storagepower": MustParseCid("bafk2bzaceb2tlyuwxncdxsh3hc4fwcjnpxaijkiv54ustwdjbrqabxdsc27km"),
|
||||||
|
"system": MustParseCid("bafk2bzaceaatvscbnkv36ixhtt2zel4er5oskxevgumh5gegqkv7uzah36f24"),
|
||||||
|
"verifiedregistry": MustParseCid("bafk2bzacebp2r56wxadvfzpfbmqwfi3dlnwpmoc5u4tau2hfftbkuafkhye64"),
|
||||||
|
},
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
|
"github.com/filecoin-project/go-state-types/manifest"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/build"
|
"github.com/filecoin-project/lotus/build"
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
"github.com/filecoin-project/lotus/chain/actors"
|
||||||
)
|
)
|
||||||
@@ -14,21 +17,29 @@ func TestEmbeddedMetadata(t *testing.T) {
|
|||||||
metadata, err := build.ReadEmbeddedBuiltinActorsMetadata()
|
metadata, err := build.ReadEmbeddedBuiltinActorsMetadata()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, metadata, build.EmbeddedBuiltinActorsMetadata)
|
for i, v1 := range metadata {
|
||||||
|
v2 := build.EmbeddedBuiltinActorsMetadata[i]
|
||||||
|
require.Equal(t, v1.Network, v2.Network)
|
||||||
|
require.Equal(t, v1.Version, v2.Version)
|
||||||
|
require.Equal(t, v1.ManifestCid, v2.ManifestCid)
|
||||||
|
require.Equal(t, v1.Actors, v2.Actors)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test that we're registering the manifest correctly.
|
// Test that we're registering the manifest correctly.
|
||||||
func TestRegistration(t *testing.T) {
|
func TestRegistration(t *testing.T) {
|
||||||
manifestCid, found := actors.GetManifest(actors.Version8)
|
for _, av := range []actorstypes.Version{actorstypes.Version8, actorstypes.Version9} {
|
||||||
require.True(t, found)
|
manifestCid, found := actors.GetManifest(av)
|
||||||
require.True(t, manifestCid.Defined())
|
require.True(t, found)
|
||||||
|
require.True(t, manifestCid.Defined())
|
||||||
|
|
||||||
for _, key := range actors.GetBuiltinActorsKeys() {
|
for _, key := range manifest.GetBuiltinActorsKeys(av) {
|
||||||
actorCid, found := actors.GetActorCodeID(actors.Version8, key)
|
actorCid, found := actors.GetActorCodeID(av, key)
|
||||||
require.True(t, found)
|
require.True(t, found)
|
||||||
name, version, found := actors.GetActorMetaByCode(actorCid)
|
name, version, found := actors.GetActorMetaByCode(actorCid)
|
||||||
require.True(t, found)
|
require.True(t, found)
|
||||||
require.Equal(t, actors.Version8, version)
|
require.Equal(t, av, version)
|
||||||
require.Equal(t, key, name)
|
require.Equal(t, key, name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
//stm: #unit
|
// stm: #unit
|
||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|||||||
+20
-3
@@ -10,9 +10,9 @@ import (
|
|||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"github.com/filecoin-project/go-state-types/network"
|
"github.com/filecoin-project/go-state-types/network"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/policy"
|
"github.com/filecoin-project/lotus/chain/actors/policy"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -20,9 +20,10 @@ const BootstrappersFile = ""
|
|||||||
const GenesisFile = ""
|
const GenesisFile = ""
|
||||||
|
|
||||||
var NetworkBundle = "devnet"
|
var NetworkBundle = "devnet"
|
||||||
var BundleOverrides map[actors.Version]string
|
var BundleOverrides map[actorstypes.Version]string
|
||||||
|
var ActorDebugging = true
|
||||||
|
|
||||||
const GenesisNetworkVersion = network.Version16
|
const GenesisNetworkVersion = network.Version18
|
||||||
|
|
||||||
var UpgradeBreezeHeight = abi.ChainEpoch(-1)
|
var UpgradeBreezeHeight = abi.ChainEpoch(-1)
|
||||||
|
|
||||||
@@ -56,6 +57,14 @@ var UpgradeOhSnapHeight = abi.ChainEpoch(-18)
|
|||||||
|
|
||||||
var UpgradeSkyrHeight = abi.ChainEpoch(-19)
|
var UpgradeSkyrHeight = abi.ChainEpoch(-19)
|
||||||
|
|
||||||
|
var UpgradeSharkHeight = abi.ChainEpoch(-20)
|
||||||
|
|
||||||
|
var UpgradeHyggeHeight = abi.ChainEpoch(-21)
|
||||||
|
|
||||||
|
var UpgradeLightningHeight = abi.ChainEpoch(30)
|
||||||
|
|
||||||
|
var UpgradeThunderHeight = abi.ChainEpoch(1000)
|
||||||
|
|
||||||
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
||||||
0: DrandMainnet,
|
0: DrandMainnet,
|
||||||
}
|
}
|
||||||
@@ -107,6 +116,10 @@ func init() {
|
|||||||
UpgradeChocolateHeight = getUpgradeHeight("LOTUS_CHOCOLATE_HEIGHT", UpgradeChocolateHeight)
|
UpgradeChocolateHeight = getUpgradeHeight("LOTUS_CHOCOLATE_HEIGHT", UpgradeChocolateHeight)
|
||||||
UpgradeOhSnapHeight = getUpgradeHeight("LOTUS_OHSNAP_HEIGHT", UpgradeOhSnapHeight)
|
UpgradeOhSnapHeight = getUpgradeHeight("LOTUS_OHSNAP_HEIGHT", UpgradeOhSnapHeight)
|
||||||
UpgradeSkyrHeight = getUpgradeHeight("LOTUS_SKYR_HEIGHT", UpgradeSkyrHeight)
|
UpgradeSkyrHeight = getUpgradeHeight("LOTUS_SKYR_HEIGHT", UpgradeSkyrHeight)
|
||||||
|
UpgradeSharkHeight = getUpgradeHeight("LOTUS_SHARK_HEIGHT", UpgradeSharkHeight)
|
||||||
|
UpgradeHyggeHeight = getUpgradeHeight("LOTUS_HYGGE_HEIGHT", UpgradeHyggeHeight)
|
||||||
|
UpgradeLightningHeight = getUpgradeHeight("LOTUS_LIGHTNING_HEIGHT", UpgradeLightningHeight)
|
||||||
|
UpgradeThunderHeight = getUpgradeHeight("LOTUS_THUNDER_HEIGHT", UpgradeThunderHeight)
|
||||||
|
|
||||||
BuildType |= Build2k
|
BuildType |= Build2k
|
||||||
|
|
||||||
@@ -127,4 +140,8 @@ const InteractivePoRepConfidence = 6
|
|||||||
|
|
||||||
const BootstrapPeerThreshold = 1
|
const BootstrapPeerThreshold = 1
|
||||||
|
|
||||||
|
// ChainId defines the chain ID used in the Ethereum JSON-RPC endpoint.
|
||||||
|
// As per https://github.com/ethereum-lists/chains
|
||||||
|
const Eip155ChainId = 31415926
|
||||||
|
|
||||||
var WhitelistedBlock = cid.Undef
|
var WhitelistedBlock = cid.Undef
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ import (
|
|||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"github.com/filecoin-project/go-state-types/network"
|
"github.com/filecoin-project/go-state-types/network"
|
||||||
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
|
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/policy"
|
"github.com/filecoin-project/lotus/chain/actors/policy"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -19,10 +19,11 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
|||||||
0: DrandMainnet,
|
0: DrandMainnet,
|
||||||
}
|
}
|
||||||
|
|
||||||
const GenesisNetworkVersion = network.Version15
|
const GenesisNetworkVersion = network.Version18
|
||||||
|
|
||||||
var NetworkBundle = "butterflynet"
|
var NetworkBundle = "butterflynet"
|
||||||
var BundleOverrides map[actors.Version]string
|
var BundleOverrides map[actorstypes.Version]string
|
||||||
|
var ActorDebugging = false
|
||||||
|
|
||||||
const BootstrappersFile = "butterflynet.pi"
|
const BootstrappersFile = "butterflynet.pi"
|
||||||
const GenesisFile = "butterflynet.car"
|
const GenesisFile = "butterflynet.car"
|
||||||
@@ -47,10 +48,14 @@ const UpgradeNorwegianHeight = -14
|
|||||||
const UpgradeTurboHeight = -15
|
const UpgradeTurboHeight = -15
|
||||||
const UpgradeHyperdriveHeight = -16
|
const UpgradeHyperdriveHeight = -16
|
||||||
const UpgradeChocolateHeight = -17
|
const UpgradeChocolateHeight = -17
|
||||||
|
|
||||||
const UpgradeOhSnapHeight = -18
|
const UpgradeOhSnapHeight = -18
|
||||||
|
const UpgradeSkyrHeight = -19
|
||||||
|
const UpgradeSharkHeight = -20
|
||||||
|
const UpgradeHyggeHeight = -21
|
||||||
|
|
||||||
const UpgradeSkyrHeight = abi.ChainEpoch(50)
|
const UpgradeLightningHeight = 50
|
||||||
|
|
||||||
|
const UpgradeThunderHeight = UpgradeLightningHeight + 360
|
||||||
|
|
||||||
var SupportedProofTypes = []abi.RegisteredSealProof{
|
var SupportedProofTypes = []abi.RegisteredSealProof{
|
||||||
abi.RegisteredSealProof_StackedDrg512MiBV1,
|
abi.RegisteredSealProof_StackedDrg512MiBV1,
|
||||||
@@ -81,4 +86,8 @@ const PropagationDelaySecs = uint64(6)
|
|||||||
// BootstrapPeerThreshold is the minimum number peers we need to track for a sync worker to start
|
// BootstrapPeerThreshold is the minimum number peers we need to track for a sync worker to start
|
||||||
const BootstrapPeerThreshold = 2
|
const BootstrapPeerThreshold = 2
|
||||||
|
|
||||||
|
// ChainId defines the chain ID used in the Ethereum JSON-RPC endpoint.
|
||||||
|
// As per https://github.com/ethereum-lists/chains
|
||||||
|
const Eip155ChainId = 3141592
|
||||||
|
|
||||||
var WhitelistedBlock = cid.Undef
|
var WhitelistedBlock = cid.Undef
|
||||||
|
|||||||
@@ -4,14 +4,17 @@
|
|||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
actorstypes "github.com/filecoin-project/go-state-types/actors"
|
||||||
"github.com/filecoin-project/go-state-types/network"
|
"github.com/filecoin-project/go-state-types/network"
|
||||||
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
|
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors"
|
|
||||||
"github.com/filecoin-project/lotus/chain/actors/policy"
|
"github.com/filecoin-project/lotus/chain/actors/policy"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -22,7 +25,8 @@ var DrandSchedule = map[abi.ChainEpoch]DrandEnum{
|
|||||||
const GenesisNetworkVersion = network.Version0
|
const GenesisNetworkVersion = network.Version0
|
||||||
|
|
||||||
var NetworkBundle = "calibrationnet"
|
var NetworkBundle = "calibrationnet"
|
||||||
var BundleOverrides map[actors.Version]string
|
var BundleOverrides map[actorstypes.Version]string
|
||||||
|
var ActorDebugging = false
|
||||||
|
|
||||||
const BootstrappersFile = "calibnet.pi"
|
const BootstrappersFile = "calibnet.pi"
|
||||||
const GenesisFile = "calibnet.car"
|
const GenesisFile = "calibnet.car"
|
||||||
@@ -58,13 +62,22 @@ const UpgradeTurboHeight = 390
|
|||||||
|
|
||||||
const UpgradeHyperdriveHeight = 420
|
const UpgradeHyperdriveHeight = 420
|
||||||
|
|
||||||
const UpgradeChocolateHeight = 312746
|
const UpgradeChocolateHeight = 450
|
||||||
|
|
||||||
// 2022-02-10T19:23:00Z
|
const UpgradeOhSnapHeight = 480
|
||||||
const UpgradeOhSnapHeight = 682006
|
|
||||||
|
|
||||||
// 2022-06-16T17:30:00Z
|
const UpgradeSkyrHeight = 510
|
||||||
const UpgradeSkyrHeight = 1044660
|
|
||||||
|
const UpgradeSharkHeight = 16800 // 6 days after genesis
|
||||||
|
|
||||||
|
// 2023-02-21T16:30:00Z
|
||||||
|
const UpgradeHyggeHeight = 322354
|
||||||
|
|
||||||
|
// 2023-04-20T14:00:00Z
|
||||||
|
const UpgradeLightningHeight = 489094
|
||||||
|
|
||||||
|
// 2023-04-21T16:00:00Z
|
||||||
|
const UpgradeThunderHeight = UpgradeLightningHeight + 3120
|
||||||
|
|
||||||
var SupportedProofTypes = []abi.RegisteredSealProof{
|
var SupportedProofTypes = []abi.RegisteredSealProof{
|
||||||
abi.RegisteredSealProof_StackedDrg32GiBV1,
|
abi.RegisteredSealProof_StackedDrg32GiBV1,
|
||||||
@@ -84,15 +97,34 @@ func init() {
|
|||||||
|
|
||||||
Devnet = true
|
Devnet = true
|
||||||
|
|
||||||
|
// NOTE: DO NOT change this unless you REALLY know what you're doing. This is not consensus critical, however,
|
||||||
|
//set this value too high may impacts your block submission; set this value too low may cause you miss
|
||||||
|
//parent tipsets for blocking forming and mining.
|
||||||
|
if len(os.Getenv("PROPAGATION_DELAY_SECS")) != 0 {
|
||||||
|
pds, err := strconv.ParseUint(os.Getenv("PROPAGATION_DELAY_SECS"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
log.Warnw("Error setting PROPAGATION_DELAY_SECS, %v, proceed with default value %s", err,
|
||||||
|
PropagationDelaySecs)
|
||||||
|
} else {
|
||||||
|
PropagationDelaySecs = pds
|
||||||
|
log.Warnw(" !!WARNING!! propagation delay is set to be %s second, "+
|
||||||
|
"this value impacts your message republish interval and block forming - monitor with caution!!", PropagationDelaySecs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BuildType = BuildCalibnet
|
BuildType = BuildCalibnet
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const BlockDelaySecs = uint64(builtin2.EpochDurationSeconds)
|
const BlockDelaySecs = uint64(builtin2.EpochDurationSeconds)
|
||||||
|
|
||||||
const PropagationDelaySecs = uint64(6)
|
var PropagationDelaySecs = uint64(10)
|
||||||
|
|
||||||
// BootstrapPeerThreshold is the minimum number peers we need to track for a sync worker to start
|
// BootstrapPeerThreshold is the minimum number peers we need to track for a sync worker to start
|
||||||
const BootstrapPeerThreshold = 4
|
const BootstrapPeerThreshold = 4
|
||||||
|
|
||||||
|
// ChainId defines the chain ID used in the Ethereum JSON-RPC endpoint.
|
||||||
|
// As per https://github.com/ethereum-lists/chains
|
||||||
|
const Eip155ChainId = 314159
|
||||||
|
|
||||||
var WhitelistedBlock = cid.Undef
|
var WhitelistedBlock = cid.Undef
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user