Compare commits
1192 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62ccdd7ad4 | ||
|
|
aae451de9e | ||
|
|
baeda93474 | ||
|
|
7a28f72abc | ||
|
|
1ab06ce2d2 | ||
|
|
b0cc44aabb | ||
|
|
c983efe895 | ||
|
|
650948feed | ||
|
|
4e76cce0b7 | ||
|
|
9e9045ab94 | ||
|
|
d86333af6b | ||
|
|
28b5906d9e | ||
|
|
24f6d8296b | ||
|
|
9c5e35548d | ||
|
|
92b5b5644f | ||
|
|
8fb47b52f5 | ||
|
|
14361cc7b1 | ||
|
|
2257bc8e2f | ||
|
|
461b2d4853 | ||
|
|
941f2380c4 | ||
|
|
cb31220a4a | ||
|
|
9e09d5b6bf | ||
|
|
a04c5b180a | ||
|
|
db7a8c4ac7 | ||
|
|
fac356c701 | ||
|
|
90eb61091a | ||
|
|
f6998cb04e | ||
|
|
897a94641e | ||
|
|
3f677c6168 | ||
|
|
1cd93e4ceb | ||
|
|
03b96a7c0a | ||
|
|
869fa6fda8 | ||
|
|
bc2f5586ee | ||
|
|
16f435b906 | ||
|
|
0a170efaa5 | ||
|
|
1356d6d8d5 | ||
|
|
0a9114203b | ||
|
|
2b05eb43a9 | ||
|
|
dd2c27958c | ||
|
|
6737484eda | ||
|
|
9fe991db1c | ||
|
|
6cf441fc9e | ||
|
|
99e37844fd | ||
|
|
8348147a4f | ||
|
|
bd7273061e | ||
|
|
4f447c50b2 | ||
|
|
692cd10d4a | ||
|
|
86446d713a | ||
|
|
d1487b3177 | ||
|
|
8e7a08f865 | ||
|
|
0d75d01c84 | ||
|
|
1c75e8eb47 | ||
|
|
431b27d3e1 | ||
|
|
d97cf34138 | ||
|
|
e6f75bccfe | ||
|
|
c039ab79b5 | ||
|
|
9436e88d27 | ||
|
|
652f5032a2 | ||
|
|
d7a7f034db | ||
|
|
27c32d3629 | ||
|
|
0d2993e46d | ||
|
|
e4168c2985 | ||
|
|
9d3771458d | ||
|
|
ff0ce70169 | ||
|
|
811d165458 | ||
|
|
d57944ffb9 | ||
|
|
991f0cac6e | ||
|
|
b2d338bf35 | ||
|
|
ef80698deb | ||
|
|
e12a5159a8 | ||
|
|
0455aa96bf | ||
|
|
9aaedad64f | ||
|
|
ea6b0ec164 | ||
|
|
679d6c6f2b | ||
|
|
ec96091369 | ||
|
|
0a535bf485 | ||
|
|
dcaff6f4c8 | ||
|
|
5e7d42e4a4 | ||
|
|
99a13c4e66 | ||
|
|
060205ab27 | ||
|
|
9f775a7673 | ||
|
|
d477670cb9 | ||
|
|
54c9c382e7 | ||
|
|
9108a3bb50 | ||
|
|
c1cced3662 | ||
|
|
5ea4c22868 | ||
|
|
f1b7d8ab34 | ||
|
|
9c9ddaccec | ||
|
|
68a08df9c3 | ||
|
|
1e6d889fc7 | ||
|
|
443115f885 | ||
|
|
cab073ba00 | ||
|
|
7f9589d678 | ||
|
|
899c1a4b0e | ||
|
|
e3f7b70c38 | ||
|
|
6e49ff1d98 | ||
|
|
0c7f998c25 | ||
|
|
23ea4798e0 | ||
|
|
2632310b6a | ||
|
|
c4dd156113 | ||
|
|
06a7ca221c | ||
|
|
04931618ed | ||
|
|
dbc4d85f0a | ||
|
|
bd45cd4a5e | ||
|
|
8c02211dc3 | ||
|
|
eb18e7ade7 | ||
|
|
8ddd508a44 | ||
|
|
857809f693 | ||
|
|
ca0045482c | ||
|
|
1c2c683ae3 | ||
|
|
7c8d404cf8 | ||
|
|
d293f94a6f | ||
|
|
a60d0e440d | ||
|
|
9e294d577a | ||
|
|
6d5d419e14 | ||
|
|
1b4d9c2d39 | ||
|
|
a91e562021 | ||
|
|
d7f690c8ba | ||
|
|
7f1ff152ca | ||
|
|
beb6438ef5 | ||
|
|
e25a660a11 | ||
|
|
a7887fa9f1 | ||
|
|
a6915778bb | ||
|
|
249f81cbc5 | ||
|
|
373036bb7a | ||
|
|
ed296312aa | ||
|
|
d27c36cf75 | ||
|
|
c737056000 | ||
|
|
6f5bd845ad | ||
|
|
fed4864939 | ||
|
|
acd7192b17 | ||
|
|
21cb08586b | ||
|
|
4d1cb01da0 | ||
|
|
0e548ce7c5 | ||
|
|
236692cfd5 | ||
|
|
322dfbcd78 | ||
|
|
1bad20ae38 | ||
|
|
113c35af0a | ||
|
|
5c47116889 | ||
|
|
23fc5517b5 | ||
|
|
7e948a088f | ||
|
|
102bc7809f | ||
|
|
c2bd1a0e76 | ||
|
|
de72643898 | ||
|
|
e0f71b0c17 | ||
|
|
66f3c50842 | ||
|
|
373fdb65e9 | ||
|
|
58a1671076 | ||
|
|
e0a21e5aae | ||
|
|
3f33370e7d | ||
|
|
06fa900504 | ||
|
|
29d7a0e3c9 | ||
|
|
e8106016c8 | ||
|
|
d716bae3d5 | ||
|
|
f48b09b76e | ||
|
|
f54944bbfc | ||
|
|
ff722cac72 | ||
|
|
eeee90def5 | ||
|
|
47a02480c4 | ||
|
|
bbefdec973 | ||
|
|
f864f72bb5 | ||
|
|
6623de4e61 | ||
|
|
33284e988e | ||
|
|
9d7d6f7108 | ||
|
|
81b52c7336 | ||
|
|
fb17ae7751 | ||
|
|
9bcb589785 | ||
|
|
2e00f656d0 | ||
|
|
87f893265d | ||
|
|
d4205da484 | ||
|
|
ca0d1f5eb7 | ||
|
|
e76a545970 | ||
|
|
ec7282d05c | ||
|
|
ea3083bd3b | ||
|
|
6d5b13c80c | ||
|
|
0da6c7eb45 | ||
|
|
cdb3afee42 | ||
|
|
e54c33d9a7 | ||
|
|
9fec2142ae | ||
|
|
e32b600530 | ||
|
|
df63341eb4 | ||
|
|
6445f12c2d | ||
|
|
eff5cabb3f | ||
|
|
f9d5d618dc | ||
|
|
893979b5da | ||
|
|
e4f863b4b0 | ||
|
|
5cf6684461 | ||
|
|
73756ce262 | ||
|
|
ee93be80c0 | ||
|
|
d90ab40a78 | ||
|
|
f8a2e53f3e | ||
|
|
e0b4506474 | ||
|
|
01d9bff3cf | ||
|
|
db90f5b0a4 | ||
|
|
bfdc097538 | ||
|
|
05f47b6359 | ||
|
|
5b4abec2db | ||
|
|
d6d6a7cc95 | ||
|
|
684322cd6f | ||
|
|
605f3b0381 | ||
|
|
4bda6efed0 | ||
|
|
b77771171d | ||
|
|
e630f647d1 | ||
|
|
76a098114f | ||
|
|
e79ade59c9 | ||
|
|
364a1fa5a8 | ||
|
|
f905a1676f | ||
|
|
ff0c44c060 | ||
|
|
ec34d50459 | ||
|
|
236a4aac22 | ||
|
|
899dd0ff4b | ||
|
|
c6b931766c | ||
|
|
f8618dd02a | ||
|
|
37bfcb737b | ||
|
|
226215eff6 | ||
|
|
0a34ad50b4 | ||
|
|
3d803762ff | ||
|
|
aab63c339d | ||
|
|
5d6e7e1439 | ||
|
|
d1815eec55 | ||
|
|
1cce3cfb75 | ||
|
|
bf57eb8978 | ||
|
|
ebb92947a3 | ||
|
|
5584739b83 | ||
|
|
8b0004b4cf | ||
|
|
bf7e8741c7 | ||
|
|
3cae42bb34 | ||
|
|
006b2f3564 | ||
|
|
a385f9a649 | ||
|
|
8579a56f71 | ||
|
|
90bd6bf700 | ||
|
|
1ca1fba8cf | ||
|
|
a30de1b8d8 | ||
|
|
fab03398dd | ||
|
|
78f39e9090 | ||
|
|
c060d9584d | ||
|
|
2c60a53fef | ||
|
|
a59f6d9bd2 | ||
|
|
a487182e92 | ||
|
|
f244ebeb4a | ||
|
|
b4ed51c5f1 | ||
|
|
516bb685bf | ||
|
|
66755be8f6 | ||
|
|
0a7cebe316 | ||
|
|
fb4582a90e | ||
|
|
ebda6d3916 | ||
|
|
8587df17d9 | ||
|
|
97a3c6e461 | ||
|
|
89772f40f9 | ||
|
|
2cfc2b95d0 | ||
|
|
10a95a5a22 | ||
|
|
0ea1c41573 | ||
|
|
d051dd2a60 | ||
|
|
6dec16bb41 | ||
|
|
4763887a68 | ||
|
|
fee88d04d4 | ||
|
|
f5c68c601e | ||
|
|
a412f7cca6 | ||
|
|
dae99cc53e | ||
|
|
afea11ede6 | ||
|
|
bc8216a82c | ||
|
|
f0d9d3c4d2 | ||
|
|
326de9b535 | ||
|
|
983c29dab1 | ||
|
|
73327d011d | ||
|
|
6d60286bf6 | ||
|
|
66322c769e | ||
|
|
9ab0b67bdf | ||
|
|
8d3843f7dc | ||
|
|
99dbc68276 | ||
|
|
d4861f0a29 | ||
|
|
a39437ac5a | ||
|
|
3acb9d9f4e | ||
|
|
51ef70922e | ||
|
|
d31cfd3c64 | ||
|
|
18f555464e | ||
|
|
f43e355254 | ||
|
|
5859db59c8 | ||
|
|
b535bf390c | ||
|
|
2af4bd195f | ||
|
|
6bebb9e74a | ||
|
|
d430e7f4e2 | ||
|
|
b6791977b3 | ||
|
|
9d972cde98 | ||
|
|
7513949035 | ||
|
|
ad44855a1b | ||
|
|
58645d3908 | ||
|
|
f8bf7e7d41 | ||
|
|
2c426defd9 | ||
|
|
e5c131e0c1 | ||
|
|
d2e44cf1d0 | ||
|
|
afae8e8f6e | ||
|
|
f7012af92e | ||
|
|
5990c64e31 | ||
|
|
bfbe471a1a | ||
|
|
b442b72c9d | ||
|
|
709fbff067 | ||
|
|
30737fe580 | ||
|
|
0c01db4a49 | ||
|
|
d429ce1849 | ||
|
|
6773e88211 | ||
|
|
793624b08c | ||
|
|
9083bec090 | ||
|
|
df200d4284 | ||
|
|
9adee532a0 | ||
|
|
7d49dd4727 | ||
|
|
25b19835e3 | ||
|
|
ee1da09996 | ||
|
|
36ba004c29 | ||
|
|
534692cdae | ||
|
|
c7aed335ce | ||
|
|
7aeb6c5b5f | ||
|
|
9fe61dd529 | ||
|
|
0510cb3aa1 | ||
|
|
0d7e7f0ab8 | ||
|
|
c46887e90b | ||
|
|
12ebd901a5 | ||
|
|
2ac2fbdf89 | ||
|
|
a2d1e046a5 | ||
|
|
62939fd5a0 | ||
|
|
04b571b742 | ||
|
|
594716dc1e | ||
|
|
9578df2abe | ||
|
|
43358cc6bd | ||
|
|
d927320719 | ||
|
|
ad14e656f6 | ||
|
|
24a40af5bc | ||
|
|
b7266e7829 | ||
|
|
6dcf3618d5 | ||
|
|
da62cfd111 | ||
|
|
668d910c44 | ||
|
|
e7f36665bb | ||
|
|
b6e61f403c | ||
|
|
f7f718b30f | ||
|
|
bc942e896e | ||
|
|
f044b61f42 | ||
|
|
9a12945304 | ||
|
|
bf2a925333 | ||
|
|
cfc2a240c4 | ||
|
|
436f09d5a5 | ||
|
|
90b187a837 | ||
|
|
40551b8ffd | ||
|
|
73f5cc57be | ||
|
|
e95b093483 | ||
|
|
4a4d64be56 | ||
|
|
d360074323 | ||
|
|
df5d27d516 | ||
|
|
b685b7fae3 | ||
|
|
7e0928b8a2 | ||
|
|
fff6e037ab | ||
|
|
0b91bd4b11 | ||
|
|
cb8c4b4e96 | ||
|
|
f400a7e171 | ||
|
|
0bdb5d1ca9 | ||
|
|
c2136f7976 | ||
|
|
e4bd4ed060 | ||
|
|
69d7c4f519 | ||
|
|
1e8533acbc | ||
|
|
ab7335d21d | ||
|
|
bdc3d6fee0 | ||
|
|
4c22ca2721 | ||
|
|
825a962323 | ||
|
|
9c88e755e2 | ||
|
|
c6b0db61e7 | ||
|
|
a553485bbd | ||
|
|
7316cb9d92 | ||
|
|
33b8f28f62 | ||
|
|
47b2b151ce | ||
|
|
a52d601f5c | ||
|
|
fc6b1cb4b9 | ||
|
|
ef3cd042fb | ||
|
|
23192e490e | ||
|
|
c37a87e490 | ||
|
|
7e6e024546 | ||
|
|
36e230ee16 | ||
|
|
c8ad8aeac4 | ||
|
|
71da3af1a2 | ||
|
|
ce69c4e6ea | ||
|
|
855c1126a4 | ||
|
|
ac95bfa285 | ||
|
|
37796bdaa9 | ||
|
|
36bb5ed795 | ||
|
|
c417f01a23 | ||
|
|
1d0af99744 | ||
|
|
75f292154d | ||
|
|
1764143db5 | ||
|
|
7c1cbd33ff | ||
|
|
5e4febfc2d | ||
|
|
0292348bd6 | ||
|
|
27d8befbad | ||
|
|
51319ebe3f | ||
|
|
7643e0e17f | ||
|
|
56311cf0b5 | ||
|
|
e439eae54f | ||
|
|
e114b0b28d | ||
|
|
8405edab41 | ||
|
|
6a01113610 | ||
|
|
4ce643ba3f | ||
|
|
f3e7d94fc4 | ||
|
|
8cd1f890ca | ||
|
|
7deeb26e21 | ||
|
|
457d8baf30 | ||
|
|
9d33f6f29a | ||
|
|
823e0a22ca | ||
|
|
bc91eaf4d0 | ||
|
|
c6aea0cae6 | ||
|
|
9c0fceb192 | ||
|
|
51e6e0b4bd | ||
|
|
67a74e155d | ||
|
|
2586eaef92 | ||
|
|
5fee880fbb | ||
|
|
483480d7a1 | ||
|
|
7b40f1cfe9 | ||
|
|
81d4187d14 | ||
|
|
f8bd6b9f63 | ||
|
|
48a15cecf8 | ||
|
|
09573497b0 | ||
|
|
45116099c5 | ||
|
|
26e4fc680c | ||
|
|
a4a9c53b13 | ||
|
|
eb1bb8f5bd | ||
|
|
fc0eb600f3 | ||
|
|
5b5dd85cf9 | ||
|
|
74d2896397 | ||
|
|
a15f62d907 | ||
|
|
2a73101fab | ||
|
|
c0e7abcc81 | ||
|
|
a8001ab453 | ||
|
|
268e8f5a64 | ||
|
|
2e12a2db50 | ||
|
|
31ffb467f5 | ||
|
|
0d5603eece | ||
|
|
d6ae6e315e | ||
|
|
9d35cc1881 | ||
|
|
82340c058a | ||
|
|
d80dd81d77 | ||
|
|
7c24d0665e | ||
|
|
6f516607a1 | ||
|
|
83447c201b | ||
|
|
276496fb4b | ||
|
|
24378f3c44 | ||
|
|
d6f160e868 | ||
|
|
a5a7c1827a | ||
|
|
7d4e4c7a62 | ||
|
|
d5b81ead71 | ||
|
|
9a5d0fed2c | ||
|
|
516725abe4 | ||
|
|
8d15338c84 | ||
|
|
9104d4673c | ||
|
|
00883e477a | ||
|
|
ff094e0a03 | ||
|
|
ee1ce42546 | ||
|
|
b10d567386 | ||
|
|
ab2caee0a3 | ||
|
|
6efca8860a | ||
|
|
b7a744be59 | ||
|
|
d7650e2b9c | ||
|
|
794de9f743 | ||
|
|
2f9532fe4b | ||
|
|
2856305977 | ||
|
|
25a3c001ad | ||
|
|
3fa7d09b5e | ||
|
|
6bc88664ce | ||
|
|
6e5c188eef | ||
|
|
bdd4f62023 | ||
|
|
53dce9ff98 | ||
|
|
ee030cdcac | ||
|
|
4b016672f3 | ||
|
|
5f82f0008f | ||
|
|
5713bb2099 | ||
|
|
9e7f5671a5 | ||
|
|
1d9206735b | ||
|
|
861aa1fa4b | ||
|
|
4971171e8a | ||
|
|
5cb53ddd8d | ||
|
|
f99b977399 | ||
|
|
0637de7303 | ||
|
|
3fd94dc40d | ||
|
|
a638019c17 | ||
|
|
509038c987 | ||
|
|
8f6f6a068e | ||
|
|
4a9a0f6f55 | ||
|
|
0a808a1ac2 | ||
|
|
bb1e03e9cb | ||
|
|
c9865e00a5 | ||
|
|
6587dfecc0 | ||
|
|
9821fd92e4 | ||
|
|
a4959c8509 | ||
|
|
4d28facf5e | ||
|
|
053c009cdb | ||
|
|
82d7fc54b3 | ||
|
|
f3297dd44a | ||
|
|
1851453f00 | ||
|
|
c731b5ef62 | ||
|
|
0a7f27cb11 | ||
|
|
140a78fe0b | ||
|
|
777bce8a13 | ||
|
|
11b0cb8da8 | ||
|
|
50ed1f9d1e | ||
|
|
9202ccccf7 | ||
|
|
0fe018ff68 | ||
|
|
b25f93dda5 | ||
|
|
16d6f98d7c | ||
|
|
fcddc7751a | ||
|
|
77ee23bdd0 | ||
|
|
a05c90abb5 | ||
|
|
ce390fcd75 | ||
|
|
92f0db7cd7 | ||
|
|
f6f7a87dc6 | ||
|
|
3cb4d81eb1 | ||
|
|
aff781b8bb | ||
|
|
5d792324e6 | ||
|
|
f2b51fe9e0 | ||
|
|
fb0006beee | ||
|
|
fa6156ed01 | ||
|
|
b1517654e1 | ||
|
|
dd0fba96a4 | ||
|
|
f61feb33fd | ||
|
|
2d3073fc02 | ||
|
|
fb073583fe | ||
|
|
fcd1f72806 | ||
|
|
dcf6e1d83d | ||
|
|
76b143a758 | ||
|
|
1b898befab | ||
|
|
7d0780d723 | ||
|
|
d5c21c9707 | ||
|
|
3284020b04 | ||
|
|
7e3872fddc | ||
|
|
e52a7de3f7 | ||
|
|
1291a24e4e | ||
|
|
e08893fcf1 | ||
|
|
63d86b50e0 | ||
|
|
e85c98e09a | ||
|
|
e76cec4afc | ||
|
|
83ff213f6c | ||
|
|
dde6baedec | ||
|
|
c544c3e518 | ||
|
|
4f12e1dab1 | ||
|
|
801b6c4bc8 | ||
|
|
2a7b2c7e32 | ||
|
|
ad01f99c44 | ||
|
|
7663451116 | ||
|
|
d1bf0e0e62 | ||
|
|
2e96ffc582 | ||
|
|
3af1e1b3b0 | ||
|
|
a39e210742 | ||
|
|
538e540dde | ||
|
|
519648eb01 | ||
|
|
903bbc7912 | ||
|
|
d1d502765b | ||
|
|
ba89f34751 | ||
|
|
33a96f8ffe | ||
|
|
8780fa0d68 | ||
|
|
e8787c1acf | ||
|
|
359b4de3ff | ||
|
|
13f3113826 | ||
|
|
68db425fe8 | ||
|
|
c32a5353b9 | ||
|
|
06ff816afb | ||
|
|
6836182a36 | ||
|
|
e802ed04da | ||
|
|
9b63d6f63f | ||
|
|
8e89be775c | ||
|
|
9f10fa3c3d | ||
|
|
95d54c4160 | ||
|
|
bef85fb876 | ||
|
|
9d3ca6ec10 | ||
|
|
37973f9112 | ||
|
|
009e350fc7 | ||
|
|
14686f2652 | ||
|
|
30816d8155 | ||
|
|
333e0e1637 | ||
|
|
989f2a0542 | ||
|
|
5bd2894146 | ||
|
|
53e0e3be14 | ||
|
|
0f0a056225 | ||
|
|
c296b8ac5d | ||
|
|
498a708df7 | ||
|
|
6a7f523cdb | ||
|
|
12e9c1cebc | ||
|
|
b036624bac | ||
|
|
ea9c8a174c | ||
|
|
d793019607 | ||
|
|
cebf493dce | ||
|
|
5d6abfe2f5 | ||
|
|
a2c12ab13e | ||
|
|
85e150dbb5 | ||
|
|
7da66c24f0 | ||
|
|
df3a8a9234 | ||
|
|
fc7f3433b7 | ||
|
|
5a7e065e41 | ||
|
|
a2c48deab5 | ||
|
|
309254348b | ||
|
|
d160feeefd | ||
|
|
fcee1c0ac8 | ||
|
|
bc17c61d14 | ||
|
|
570fc56af7 | ||
|
|
e7543f656a | ||
|
|
20f8943eb3 | ||
|
|
3716b09b2e | ||
|
|
66b2db0137 | ||
|
|
7564b05572 | ||
|
|
17df58b767 | ||
|
|
2650154cd7 | ||
|
|
3e4e00fc6a | ||
|
|
ab7307288b | ||
|
|
e67b05e632 | ||
|
|
d105bc272e | ||
|
|
76e693240d | ||
|
|
b5fad300ba | ||
|
|
af409eba07 | ||
|
|
32edb33608 | ||
|
|
01d6532875 | ||
|
|
3945a29ee6 | ||
|
|
6618827d1a | ||
|
|
56875a83b3 | ||
|
|
9798e3c45a | ||
|
|
73dcde65aa | ||
|
|
ac722e9e50 | ||
|
|
d8e86cfe0a | ||
|
|
8d06e19b70 | ||
|
|
3d68051a1f | ||
|
|
5a20a826c4 | ||
|
|
6fe361b382 | ||
|
|
3d0616c1ae | ||
|
|
4f5d73c945 | ||
|
|
7dc7a673f0 | ||
|
|
4a6b103f0e | ||
|
|
6fabb56104 | ||
|
|
81212c5031 | ||
|
|
3c82a0d162 | ||
|
|
e16f6fb9d9 | ||
|
|
b35cc3f716 | ||
|
|
2ca57d7cdb | ||
|
|
605cd5cd9f | ||
|
|
0230a44b15 | ||
|
|
fdc045327a | ||
|
|
a98652bef6 | ||
|
|
95d3741e32 | ||
|
|
0bf48e94cc | ||
|
|
cab5b09591 | ||
|
|
920e4ae1e2 | ||
|
|
4dd3097493 | ||
|
|
a22c48b6b0 | ||
|
|
e6048e4a34 | ||
|
|
5a76d35ca8 | ||
|
|
dd7177dbb2 | ||
|
|
cc184d5206 | ||
|
|
4d7c31540e | ||
|
|
6ddabc0f49 | ||
|
|
57720311ad | ||
|
|
7ed2fa8451 | ||
|
|
abfb9fccd3 | ||
|
|
f7fa9f6e9d | ||
|
|
7e512c637a | ||
|
|
361debd277 | ||
|
|
2e6cf8e04b | ||
|
|
dbd64f13f0 | ||
|
|
8b85f648ca | ||
|
|
b85369d6e8 | ||
|
|
0f92856c3f | ||
|
|
3cf52dac59 | ||
|
|
b5fc6419e6 | ||
|
|
a0090dd0d8 | ||
|
|
af35fa1e33 | ||
|
|
3833f87256 | ||
|
|
b9fbe52f32 | ||
|
|
93e93a50ce | ||
|
|
073b4dacfb | ||
|
|
0f2bfda830 | ||
|
|
399043d37e | ||
|
|
1749dd8d6c | ||
|
|
6997ddda89 | ||
|
|
7fed79295d | ||
|
|
ce1609726f | ||
|
|
bcdfc50a0b | ||
|
|
72907da2ae | ||
|
|
c4466f450b | ||
|
|
cffbf3cab1 | ||
|
|
75cfab8559 | ||
|
|
ec5519ccd1 | ||
|
|
5c8f39c3bd | ||
|
|
5423518e1e | ||
|
|
2288bcd1b4 | ||
|
|
be092e7c09 | ||
|
|
8c6b89df72 | ||
|
|
15c97336a4 | ||
|
|
df49b4b065 | ||
|
|
e13204c5c8 | ||
|
|
dd87b3014b | ||
|
|
dd35c9b1f7 | ||
|
|
f0fc8ed5f8 | ||
|
|
6ab03412ea | ||
|
|
261c0d5368 | ||
|
|
73d195ab79 | ||
|
|
5977e36687 | ||
|
|
4c8780f188 | ||
|
|
ea6e79c9c2 | ||
|
|
394d6e7259 | ||
|
|
aaeb5d4cd7 | ||
|
|
83e2fa3112 | ||
|
|
b3795ac0b5 | ||
|
|
d701ed7262 | ||
|
|
099303a342 | ||
|
|
acdec22d58 | ||
|
|
4a07010539 | ||
|
|
85465fc0b1 | ||
|
|
bd04517477 | ||
|
|
6a0e8a557c | ||
|
|
2557f282a4 | ||
|
|
0ed1e77996 | ||
|
|
d7e4dda3e1 | ||
|
|
8fe40a64d0 | ||
|
|
851401dded | ||
|
|
1516fc1c57 | ||
|
|
bed82e5cc0 | ||
|
|
ffee6aacff | ||
|
|
7eacef99b9 | ||
|
|
7703cd226b | ||
|
|
713bba00ac | ||
|
|
60bb2d9c74 | ||
|
|
f72858ee0a | ||
|
|
0a69d5ac4c | ||
|
|
ec44e3d265 | ||
|
|
b861ad37a4 | ||
|
|
4b3c26f991 | ||
|
|
d525d1e8a7 | ||
|
|
152e56c5d9 | ||
|
|
38652bd296 | ||
|
|
39e27076ad | ||
|
|
4c101c974d | ||
|
|
719f3788e6 | ||
|
|
4b6036fa08 | ||
|
|
4b56f2530d | ||
|
|
9b4db8b4f0 | ||
|
|
44511f9254 | ||
|
|
0abc2b1374 | ||
|
|
f282823e78 | ||
|
|
542cee9ace | ||
|
|
54b14001fa | ||
|
|
8dfdebc2a2 | ||
|
|
b50ed887c7 | ||
|
|
bdf1e6afcc | ||
|
|
f7ba063b22 | ||
|
|
dfccc3fb04 | ||
|
|
b98150526c | ||
|
|
d68b3f131d | ||
|
|
f68cb37efb | ||
|
|
025244e8b2 | ||
|
|
1253a5c577 | ||
|
|
dd13526f6c | ||
|
|
965dff3d32 | ||
|
|
3e5d9b92c1 | ||
|
|
dd21e61371 | ||
|
|
42e23a9633 | ||
|
|
4ba2587226 | ||
|
|
5f5476ceb8 | ||
|
|
56b6adec68 | ||
|
|
097815cb71 | ||
|
|
1177c39772 | ||
|
|
2d222a5920 | ||
|
|
4ac406da6b | ||
|
|
f4c9524eb4 | ||
|
|
bbe9d73e9a | ||
|
|
9ca294740d | ||
|
|
9228ce4bae | ||
|
|
7b14907f7f | ||
|
|
aa929fe6ae | ||
|
|
3a01068747 | ||
|
|
3ea9d80859 | ||
|
|
41eabfcc1e | ||
|
|
bfcf4c4281 | ||
|
|
58db82dbe2 | ||
|
|
b4c4fddb10 | ||
|
|
fdbf6bf7d6 | ||
|
|
490f771faf | ||
|
|
c1288810c6 | ||
|
|
195305ce2e | ||
|
|
da6bd4168b | ||
|
|
48ac6cbcf8 | ||
|
|
5281e09828 | ||
|
|
b1df272f4c | ||
|
|
51caf97705 | ||
|
|
2472a2be0c | ||
|
|
9e04be754c | ||
|
|
62fa1ed524 | ||
|
|
304b067417 | ||
|
|
fc2b58a4eb | ||
|
|
153b8572dd | ||
|
|
a2fe7def1f | ||
|
|
540c93955e | ||
|
|
0f8fb62581 | ||
|
|
1d9542fe88 | ||
|
|
2d10cd0ecc | ||
|
|
86c2633280 | ||
|
|
9a62119a82 | ||
|
|
0e912bca5b | ||
|
|
607cc6c782 | ||
|
|
d852e6b063 | ||
|
|
9c5b96ccbe | ||
|
|
7fe7b6d9a4 | ||
|
|
f9e588dd7b | ||
|
|
c0fc83988f | ||
|
|
e2b96e1fe0 | ||
|
|
98d0ef3fff | ||
|
|
3830f9b464 | ||
|
|
95f0384510 | ||
|
|
bb1be15dc4 | ||
|
|
16d84f8ecf | ||
|
|
a76f768077 | ||
|
|
fa019bd03e | ||
|
|
6f914d1851 | ||
|
|
f1c50e5648 | ||
|
|
c83e9d0f1b | ||
|
|
9e4c1fe6af | ||
|
|
de6066d6b0 | ||
|
|
b49d7ee29c | ||
|
|
7661e93a56 | ||
|
|
8453dda7ef | ||
|
|
5b29b6d064 | ||
|
|
8ecdab68c2 | ||
|
|
5e61f3493e | ||
|
|
6dc50d01b5 | ||
|
|
44db0c55c5 | ||
|
|
774598974e | ||
|
|
aa4bc50c6b | ||
|
|
8365f4d80e | ||
|
|
9fa639ede9 | ||
|
|
b63c3a66ca | ||
|
|
fbad6b5514 | ||
|
|
2ce0eae406 | ||
|
|
d1c9acf439 | ||
|
|
832879e5c8 | ||
|
|
92a9fd3359 | ||
|
|
b03117b262 | ||
|
|
e7690ab658 | ||
|
|
4df541e47a | ||
|
|
51b61ccdbf | ||
|
|
db3ff67182 | ||
|
|
82c8dccddf | ||
|
|
fa4e5c98d0 | ||
|
|
616cafb04a | ||
|
|
d88ec35a6a | ||
|
|
96b4467f86 | ||
|
|
74876fd410 | ||
|
|
dab40e832c | ||
|
|
b49baed696 | ||
|
|
3df67b376b | ||
|
|
b0c15497e1 | ||
|
|
190c1dcede | ||
|
|
1294572907 | ||
|
|
da8bf76c15 | ||
|
|
b277c3810f | ||
|
|
691e93834c | ||
|
|
fcd81a7b86 | ||
|
|
d77dabadbb | ||
|
|
5c220ab64b | ||
|
|
ba6594e30a | ||
|
|
f3ea2f354e | ||
|
|
a2d9b6f9ce | ||
|
|
8c1e402e02 | ||
|
|
df39f5e7fc | ||
|
|
78146e903d | ||
|
|
f36b4e0fca | ||
|
|
c05fd9607c | ||
|
|
eb526b7769 | ||
|
|
afb9647f0d | ||
|
|
c116e064d8 | ||
|
|
439eb294bb | ||
|
|
0be532640a | ||
|
|
4f082da02b | ||
|
|
21c95bbec5 | ||
|
|
290060e6c4 | ||
|
|
55b0b09d6a | ||
|
|
9f00159228 | ||
|
|
341697630d | ||
|
|
39b5e5b98a | ||
|
|
9daa884699 | ||
|
|
81c71ff4ab | ||
|
|
ab902bfb66 | ||
|
|
61bbc19b0b | ||
|
|
9ed8178dff | ||
|
|
4fa4dd8fc8 | ||
|
|
dfe45338c0 | ||
|
|
32a29c11a0 | ||
|
|
d02c696030 | ||
|
|
f9b7be7576 | ||
|
|
abb94c8bf3 | ||
|
|
206abaebb9 | ||
|
|
ac3d548079 | ||
|
|
7e1cb97c7e | ||
|
|
51674f2cc4 | ||
|
|
413da805b5 | ||
|
|
2eac4f6606 | ||
|
|
3795a4869e | ||
|
|
2b48668327 | ||
|
|
312360ef4e | ||
|
|
db9a70d008 | ||
|
|
afec8358d3 | ||
|
|
1e1137a6f7 | ||
|
|
935d1476e9 | ||
|
|
baeab01357 | ||
|
|
4a184dbbe6 | ||
|
|
5d774d360e | ||
|
|
94df97a5ae | ||
|
|
6e2e122288 | ||
|
|
dc85c66052 | ||
|
|
2bcdb07b62 | ||
|
|
ceb1dd8d83 | ||
|
|
093eb3915a | ||
|
|
6d8b511d25 | ||
|
|
ee4f370bdb | ||
|
|
afb101e234 | ||
|
|
1d8886fa7d | ||
|
|
a5cc14ce8c | ||
|
|
7818ed98c7 | ||
|
|
fb7b11553a | ||
|
|
a1bde406de | ||
|
|
d0d8002b66 | ||
|
|
d957a10f47 | ||
|
|
0238295654 | ||
|
|
5b8236cdbd | ||
|
|
be56a06790 | ||
|
|
d7de40ab4c | ||
|
|
b1428c2b56 | ||
|
|
35202e28c2 | ||
|
|
2593477151 | ||
|
|
c2f0778e80 | ||
|
|
39cf190db7 | ||
|
|
2a0820278b | ||
|
|
1b0efa97b2 | ||
|
|
7438cfc47d | ||
|
|
10a7750027 | ||
|
|
d97f6b3812 | ||
|
|
3e08829c39 | ||
|
|
ae66b98aac | ||
|
|
21e8c31aec | ||
|
|
630118b5a5 | ||
|
|
f0e20142af | ||
|
|
039729a074 | ||
|
|
4176936d34 | ||
|
|
f967bc4ac0 | ||
|
|
2d5541f533 | ||
|
|
9aae4614a1 | ||
|
|
317addb7e3 | ||
|
|
a11e9acd12 | ||
|
|
b0228e66a0 | ||
|
|
a48f321fac | ||
|
|
0371dcb7bd | ||
|
|
28e2383778 | ||
|
|
b7ebfab575 | ||
|
|
49a4499d52 | ||
|
|
44a7c3d0b6 | ||
|
|
1bf851ad91 | ||
|
|
2df7a5fe51 | ||
|
|
0892bc90ed | ||
|
|
c088a9a660 | ||
|
|
e7641e38d8 | ||
|
|
34f9e69bff | ||
|
|
e99f86a052 | ||
|
|
f94f69c05c | ||
|
|
696089c479 | ||
|
|
45f91facf1 | ||
|
|
ffd53edf89 | ||
|
|
0a3a860b27 | ||
|
|
cbd32035c8 | ||
|
|
aa95c09a88 | ||
|
|
34a8daa629 | ||
|
|
1d96ba7dfc | ||
|
|
3006ab9253 | ||
|
|
67db54d765 | ||
|
|
dea25b194e | ||
|
|
9b678a58e8 | ||
|
|
52828c0444 | ||
|
|
f8bf4a1522 | ||
|
|
c509733a30 | ||
|
|
b5f4c40406 | ||
|
|
317a59d550 | ||
|
|
0e7c115b73 | ||
|
|
0b71baac4a | ||
|
|
7f6e2a3a35 | ||
|
|
fdebeaf95b | ||
|
|
58c3948316 | ||
|
|
ec62d6f7e0 | ||
|
|
6a51ff22d0 | ||
|
|
6349da22ac | ||
|
|
abb62d5c2a | ||
|
|
4000ec681f | ||
|
|
e70d5c52e4 | ||
|
|
a1b8fabd99 | ||
|
|
5830767273 | ||
|
|
53bde282bb | ||
|
|
0bdd4a93b8 | ||
|
|
3e85bebc66 | ||
|
|
31a0f5ef28 | ||
|
|
e317fcf1d8 | ||
|
|
cd0fbbe948 | ||
|
|
a068f72f08 | ||
|
|
09e40c2f0d | ||
|
|
decc5922de | ||
|
|
715fb688d3 | ||
|
|
de76b8a465 | ||
|
|
c894f7ac1f | ||
|
|
381ed505a0 | ||
|
|
a562f2c434 | ||
|
|
13b96ae7c8 | ||
|
|
49fdd23d58 | ||
|
|
7f3bb37b96 | ||
|
|
36f94fde05 | ||
|
|
fcdaa0d05b | ||
|
|
aaff34364d | ||
|
|
2dc92fc245 | ||
|
|
e36a7fab2d | ||
|
|
2007de3241 | ||
|
|
d8c3c247f8 | ||
|
|
92a9ff3c1a | ||
|
|
a1a8181913 | ||
|
|
03b0ea6139 | ||
|
|
3d24ae0981 | ||
|
|
801b6e0ded | ||
|
|
4dd68f1ef3 | ||
|
|
699aab0b80 | ||
|
|
84f11278ba | ||
|
|
cbcda140ec | ||
|
|
76f0247f5d | ||
|
|
c33ff96bb6 | ||
|
|
15a9e56b09 | ||
|
|
7f77e6004c | ||
|
|
15d4bc9d6d | ||
|
|
9f8467aa80 | ||
|
|
1896c2720b | ||
|
|
8798ed4499 | ||
|
|
6dfa097752 | ||
|
|
d9cb2c7781 | ||
|
|
72f3576c78 | ||
|
|
a6d3d4ea4c | ||
|
|
97c67bc259 | ||
|
|
e479260e1f | ||
|
|
d4532fac18 | ||
|
|
4dd26c0d7c | ||
|
|
acf9096a83 | ||
|
|
df52394871 | ||
|
|
58f15f1674 | ||
|
|
38b4ba8d33 | ||
|
|
121b742482 | ||
|
|
8f5a863468 | ||
|
|
6ea932b1de | ||
|
|
a2fdf38316 | ||
|
|
7bbd48a2bd | ||
|
|
7f4a7abf49 | ||
|
|
c1599a3d85 | ||
|
|
dec0c8ddd6 | ||
|
|
bba1688981 | ||
|
|
6a480ffb5b | ||
|
|
a328eef8d9 | ||
|
|
265618f306 | ||
|
|
fd3c8bced7 | ||
|
|
d888190637 | ||
|
|
fce0167991 | ||
|
|
37c3f51f6e | ||
|
|
45c6cc6ac0 | ||
|
|
d33d54dbf9 | ||
|
|
368e3d1f51 | ||
|
|
7a4eb15b4c | ||
|
|
602115d81e | ||
|
|
6978e38752 | ||
|
|
20bda5f5a0 | ||
|
|
e0927f099e | ||
|
|
4b5a1d01ce | ||
|
|
78461d8a74 | ||
|
|
ab86f9e696 | ||
|
|
f7ea667140 | ||
|
|
673cde3c0b | ||
|
|
95f6f70d8f | ||
|
|
31be9d25f3 | ||
|
|
665998e797 | ||
|
|
c27d96a4f1 | ||
|
|
c5fa9844f2 | ||
|
|
9bc82543ee | ||
|
|
7cdddd344b | ||
|
|
1243728725 | ||
|
|
5da7c32bdf | ||
|
|
79e991d8a6 | ||
|
|
78b6de55b3 | ||
|
|
b1a390983b | ||
|
|
85cf93e65d | ||
|
|
7c78dff386 | ||
|
|
566b6a1967 | ||
|
|
35a5c4787b | ||
|
|
7799883adc | ||
|
|
c3ee7f04e5 | ||
|
|
1c262b2172 | ||
|
|
b9c4e5b36c | ||
|
|
4944f59118 | ||
|
|
a0929c4c90 | ||
|
|
66843a349d | ||
|
|
f014891288 | ||
|
|
19d97136a5 | ||
|
|
68cbd87bc2 | ||
|
|
861cbb874b | ||
|
|
4007865bec | ||
|
|
7623455cb6 | ||
|
|
9f91c0490c | ||
|
|
7785fa3938 | ||
|
|
36b437270b | ||
|
|
c37c579585 | ||
|
|
40744d1bd2 | ||
|
|
0a36ba54dc | ||
|
|
af53a8da83 | ||
|
|
4c28ef40b7 | ||
|
|
073564b508 | ||
|
|
43629d0fd4 | ||
|
|
d91fae4e54 | ||
|
|
9b025cf8c1 | ||
|
|
34bdf61cf0 | ||
|
|
5d78488fef | ||
|
|
c1f07c3329 | ||
|
|
f34a0346bc | ||
|
|
c7949e2fc3 | ||
|
|
539164945a | ||
|
|
2f9e05830b | ||
|
|
c39952a727 | ||
|
|
5323fb5e08 | ||
|
|
1c2580b4a6 | ||
|
|
a1502738f1 | ||
|
|
e7484d07aa | ||
|
|
b57e8f6f0d | ||
|
|
fa243cdf89 | ||
|
|
4781d2e15a | ||
|
|
bccb231899 | ||
|
|
dddefa9a72 | ||
|
|
0745c019a3 | ||
|
|
85711ca66d | ||
|
|
278dfcdcc5 | ||
|
|
4c04b61f8a | ||
|
|
37dd488579 | ||
|
|
d16cfc736d | ||
|
|
c9d41beb28 | ||
|
|
d2cf1cbd0e | ||
|
|
a33dd0108d | ||
|
|
549367fcd6 | ||
|
|
6c702c7b6a | ||
|
|
aabf08fd75 | ||
|
|
34d68ccb73 | ||
|
|
02eeefd73b | ||
|
|
555e5b24f3 | ||
|
|
bdcf2a9c61 | ||
|
|
2badd9778b | ||
|
|
6797172ad4 | ||
|
|
95eeca09b7 | ||
|
|
1cd0350f83 | ||
|
|
17448b370c | ||
|
|
2f0ce06cc1 | ||
|
|
cdab1ebc04 | ||
|
|
851003c07c | ||
|
|
ac138f6a4c | ||
|
|
b749718feb | ||
|
|
234b8dd592 | ||
|
|
22497e5133 | ||
|
|
719023e949 | ||
|
|
2e1b05940f | ||
|
|
1d566a85b2 | ||
|
|
831e52ea07 | ||
|
|
1725c708fe | ||
|
|
0c70cee503 | ||
|
|
84d1151a1f | ||
|
|
3ce9071eb9 | ||
|
|
ec37cf6700 | ||
|
|
cda12ec995 | ||
|
|
bc0ea154df | ||
|
|
a2269a477e | ||
|
|
262169c8a4 | ||
|
|
c044534d6a | ||
|
|
fcdd19e105 | ||
|
|
5fc6a5627e | ||
|
|
2459501f4e | ||
|
|
23469a99e8 | ||
|
|
b3dfc0b6db | ||
|
|
2ffb6496f4 | ||
|
|
4b403266ea | ||
|
|
89e5601ec0 | ||
|
|
9652c0fabb | ||
|
|
11bcfa05e3 | ||
|
|
75d9fa3fe9 | ||
|
|
887b7b5090 | ||
|
|
bb628bca88 | ||
|
|
8a46a4b567 | ||
|
|
8b144bedd1 | ||
|
|
94c8cceb42 | ||
|
|
0d9e849162 | ||
|
|
4568300d9b | ||
|
|
b3056cd0ab |
3
.cargo/config
Normal file
3
.cargo/config
Normal file
@@ -0,0 +1,3 @@
|
||||
[target.x86_64-pc-windows-msvc]
|
||||
# Link the C runtime statically ; https://github.com/paritytech/parity/issues/6643
|
||||
rustflags = ["-Ctarget-feature=+crt-static"]
|
||||
@@ -9,7 +9,7 @@ trim_trailing_whitespace=true
|
||||
max_line_length=120
|
||||
insert_final_newline=true
|
||||
|
||||
[.travis.yml]
|
||||
[*.{yml,sh}]
|
||||
indent_style=space
|
||||
indent_size=2
|
||||
tab_width=8
|
||||
|
||||
84
.github/CODE_OF_CONDUCT.md
vendored
Normal file
84
.github/CODE_OF_CONDUCT.md
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
# Code of Conduct
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
A primary goal of Parity is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof).
|
||||
|
||||
This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior.
|
||||
|
||||
We invite all those who participate in Parity to help us create safe and positive experiences for everyone.
|
||||
|
||||
## 2. Open Source Citizenship
|
||||
|
||||
A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community.
|
||||
|
||||
Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society.
|
||||
|
||||
If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know.
|
||||
|
||||
## 3. Expected Behavior
|
||||
|
||||
The following behaviors are expected and requested of all community members:
|
||||
|
||||
* Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community.
|
||||
* Exercise consideration and respect in your speech and actions.
|
||||
* Attempt collaboration before conflict.
|
||||
* Refrain from demeaning, discriminatory, or harassing behavior and speech.
|
||||
* Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential.
|
||||
* Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations.
|
||||
|
||||
## 4. Unacceptable Behavior
|
||||
|
||||
The following behaviors are considered harassment and are unacceptable within our community:
|
||||
|
||||
* Violence, threats of violence or violent language directed against another person.
|
||||
* Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language.
|
||||
* Posting or displaying sexually explicit or violent material.
|
||||
* Posting or threatening to post other people’s personally identifying information ("doxing").
|
||||
* Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability.
|
||||
* Inappropriate photography or recording.
|
||||
* Inappropriate physical contact. You should have someone’s consent before touching them.
|
||||
* Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances.
|
||||
* Deliberate intimidation, stalking or following (online or in person).
|
||||
* Advocating for, or encouraging, any of the above behavior.
|
||||
* Sustained disruption of community events, including talks and presentations.
|
||||
|
||||
## 5. Consequences of Unacceptable Behavior
|
||||
|
||||
Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated.
|
||||
|
||||
Anyone asked to stop unacceptable behavior is expected to comply immediately.
|
||||
|
||||
If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event).
|
||||
|
||||
## 6. Reporting Guidelines
|
||||
|
||||
If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. community@parity.io.
|
||||
|
||||
Link to reporting guidelines: [CONTRIBUTING.md](CONTRIBUTING.md)
|
||||
|
||||
Link to security policy: [SECURITY.md](../SECURITY.md)
|
||||
|
||||
Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress.
|
||||
|
||||
## 7. Addressing Grievances
|
||||
|
||||
If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify Parity Technologies with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies.
|
||||
|
||||
## 8. Scope
|
||||
|
||||
We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues–online and in-person–as well as in all one-on-one communications pertaining to community business.
|
||||
|
||||
This code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members.
|
||||
|
||||
## 9. Contact info
|
||||
|
||||
You can contact Parity via Email: community@parity.io
|
||||
|
||||
## 10. License and attribution
|
||||
|
||||
This Code of Conduct is distributed under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/).
|
||||
|
||||
Portions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy).
|
||||
|
||||
Retrieved on November 22, 2016 from [http://citizencodeofconduct.org/](http://citizencodeofconduct.org/)
|
||||
33
.github/CONTRIBUTING.md
vendored
Normal file
33
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
# Contributing Guidelines
|
||||
|
||||
## Do you have a question?
|
||||
|
||||
Check out our [Basic Usage](https://github.com/paritytech/parity/wiki/Basic-Usage), [Configuration](https://github.com/paritytech/parity/wiki/Configuring-Parity), and [FAQ](https://github.com/paritytech/parity/wiki/FAQ) articles on our [wiki](https://github.com/paritytech/parity/wiki)!
|
||||
|
||||
See also frequently asked questions [tagged with `parity`](https://ethereum.stackexchange.com/questions/tagged/parity?sort=votes&pageSize=50) on Stack Exchange.
|
||||
|
||||
## Report bugs!
|
||||
|
||||
Do **not** open an issue on Github if you think your discovered bug could be a **security-relevant vulnerability**. Please, read our [security policy](../SECURITY.md) instead.
|
||||
|
||||
Otherwise, just create a [new issue](https://github.com/paritytech/parity/issues/new) in our repository and state:
|
||||
|
||||
- What's your Parity version?
|
||||
- What's your operating system and version?
|
||||
- How did you install parity?
|
||||
- Is your node fully synchronized?
|
||||
- Did you try turning it off and on again?
|
||||
|
||||
Also, try to include **steps to reproduce** the issue and expand on the **actual versus expected behavior**.
|
||||
|
||||
## Contribute!
|
||||
|
||||
If you would like to contribute to Parity, please **fork it**, fix bugs or implement features, and [propose a pull request](https://github.com/paritytech/parity/compare).
|
||||
|
||||
Please, refer to the [Coding Guide](https://github.com/paritytech/parity/wiki/Coding-guide) in our wiki for more details about hacking on Parity.
|
||||
|
||||
## License.
|
||||
|
||||
By contributing to Parity, you agree that your contributions will be licensed under the [GPLv3 License](../LICENSE).
|
||||
|
||||
Each contributor has to sign our Contributor License Agreement. The purpose of the CLA is to ensure that the guardian of a project's outputs has the necessary ownership or grants of rights over all contributions to allow them to distribute under the chosen license. You can read and sign our full Contributor License Agreement at [cla.parity.io](https://cla.parity.io) before submitting a pull request.
|
||||
11
.github/ISSUE_TEMPLATE.md
vendored
11
.github/ISSUE_TEMPLATE.md
vendored
@@ -2,11 +2,12 @@ _Before filing a new issue, please **provide the following information**._
|
||||
|
||||
> I'm running:
|
||||
>
|
||||
> - **Parity version**: 0.0.0
|
||||
> - **Operating system**: Windows / MacOS / Linux
|
||||
> - **And installed**: via installer / homebrew / binaries / from source
|
||||
> - **Which Parity version?**: 0.0.0
|
||||
> - **Which operating system?**: Windows / MacOS / Linux
|
||||
> - **How installed?**: via installer / homebrew / binaries / from source
|
||||
> - **Are you fully synchronized?**: no / yes
|
||||
> - **Which network are you connected to?**: ethereum / ropsten / kovan / ...
|
||||
> - **Did you try to restart the node?**: no / yes
|
||||
|
||||
_Your issue description goes here below. Try to include **actual** vs. **expected behavior** and **steps to reproduce** the issue._
|
||||
|
||||
---
|
||||
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -24,6 +24,9 @@
|
||||
npm-debug.log
|
||||
node_modules
|
||||
|
||||
# js build artifacts
|
||||
.git-release.log
|
||||
|
||||
# gdb files
|
||||
.gdb_history
|
||||
|
||||
|
||||
555
.gitlab-ci.yml
555
.gitlab-ci.yml
@@ -1,19 +1,19 @@
|
||||
stages:
|
||||
- test
|
||||
- js-build
|
||||
- push-release
|
||||
- build
|
||||
variables:
|
||||
GIT_DEPTH: "3"
|
||||
SIMPLECOV: "true"
|
||||
RUST_BACKTRACE: "1"
|
||||
RUSTFLAGS: ""
|
||||
CARGOFLAGS: ""
|
||||
CI_SERVER_NAME: "GitLab CI"
|
||||
LIBSSL: "libssl1.0.0 (>=1.0.0)"
|
||||
cache:
|
||||
key: "$CI_BUILD_STAGE/$CI_BUILD_REF_NAME"
|
||||
key: "$CI_BUILD_STAGE-$CI_BUILD_REF_NAME"
|
||||
paths:
|
||||
- target/
|
||||
untracked: true
|
||||
linux-stable:
|
||||
linux-ubuntu:
|
||||
stage: build
|
||||
image: parity/rust:gitlab-ci
|
||||
only:
|
||||
@@ -23,78 +23,15 @@ linux-stable:
|
||||
- triggers
|
||||
script:
|
||||
- rustup default stable
|
||||
- cargo build -j $(nproc) --release --features final $CARGOFLAGS
|
||||
- cargo build -j $(nproc) --release -p evmbin
|
||||
- cargo build -j $(nproc) --release -p ethstore-cli
|
||||
- cargo build -j $(nproc) --release -p ethkey-cli
|
||||
- strip target/release/parity
|
||||
- strip target/release/parity-evm
|
||||
- strip target/release/ethstore
|
||||
- strip target/release/ethkey
|
||||
- export SHA3=$(target/release/parity tools hash target/release/parity)
|
||||
- md5sum target/release/parity > parity.md5
|
||||
- sh scripts/deb-build.sh amd64
|
||||
- cp target/release/parity deb/usr/bin/parity
|
||||
- cp target/release/parity-evm deb/usr/bin/parity-evm
|
||||
- cp target/release/ethstore deb/usr/bin/ethstore
|
||||
- cp target/release/ethkey deb/usr/bin/ethkey
|
||||
- export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n")
|
||||
- dpkg-deb -b deb "parity_"$VER"_amd64.deb"
|
||||
- md5sum "parity_"$VER"_amd64.deb" > "parity_"$VER"_amd64.deb.md5"
|
||||
- aws configure set aws_access_key_id $s3_key
|
||||
- aws configure set aws_secret_access_key $s3_secret
|
||||
- if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
- aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity --body target/release/parity
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/parity.md5 --body parity.md5
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/"parity_"$VER"_amd64.deb" --body "parity_"$VER"_amd64.deb"
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/"parity_"$VER"_amd64.deb.md5" --body "parity_"$VER"_amd64.deb.md5"
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu
|
||||
# ARGUMENTS: 1. BUILD_PLATFORM (target for binaries) 2. PLATFORM (target for cargo) 3. ARC (architecture) 4. & 5. CC & CXX flags 6. binary identifier
|
||||
- scripts/gitlab-build.sh x86_64-unknown-linux-gnu x86_64-unknown-linux-gnu amd64 gcc g++ ubuntu
|
||||
tags:
|
||||
- rust
|
||||
- rust-stable
|
||||
artifacts:
|
||||
paths:
|
||||
- target/release/parity
|
||||
- target/release/parity-evm
|
||||
- target/release/ethstore
|
||||
- target/release/ethkey
|
||||
- parity.zip
|
||||
name: "stable-x86_64-unknown-linux-gnu_parity"
|
||||
linux-snap:
|
||||
stage: build
|
||||
image: parity/snapcraft:gitlab-ci
|
||||
only:
|
||||
- snap
|
||||
- beta
|
||||
- tags
|
||||
- triggers
|
||||
script:
|
||||
- export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n")
|
||||
- cd snap
|
||||
- rm -rf *snap
|
||||
- sed -i 's/master/'"$VER"'/g' snapcraft.yaml
|
||||
- echo "Version:"$VER
|
||||
- snapcraft
|
||||
- ls
|
||||
- cp "parity_"$CI_BUILD"_REF_NAME_amd64.snap" "parity_"$VER"_amd64.snap"
|
||||
- md5sum "parity_"$VER"_amd64.snap" > "parity_"$VER"_amd64.snap.md5"
|
||||
- aws configure set aws_access_key_id $s3_key
|
||||
- aws configure set aws_secret_access_key $s3_secret
|
||||
- if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/"parity_"$VER"_amd64.snap" --body "parity_"$VER"_amd64.snap"
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu/"parity_"$VER"_amd64.snap.md5" --body "parity_"$VER"_amd64.snap.md5"
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/x86_64-unknown-linux-gnu
|
||||
tags:
|
||||
- rust
|
||||
- rust-stable
|
||||
artifacts:
|
||||
paths:
|
||||
- scripts/parity_*_amd64.snap
|
||||
name: "stable-x86_64-unknown-snap-gnu_parity"
|
||||
allow_failure: true
|
||||
linux-stable-debian:
|
||||
linux-debian:
|
||||
stage: build
|
||||
image: parity/rust-debian:gitlab-ci
|
||||
only:
|
||||
@@ -103,81 +40,14 @@ linux-stable-debian:
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- cargo build -j $(nproc) --release --features final $CARGOFLAGS
|
||||
- cargo build -j $(nproc) --release -p evmbin
|
||||
- cargo build -j $(nproc) --release -p ethstore-cli
|
||||
- cargo build -j $(nproc) --release -p ethkey-cli
|
||||
- strip target/release/parity
|
||||
- strip target/release/parity-evm
|
||||
- strip target/release/ethstore
|
||||
- strip target/release/ethkey
|
||||
- export SHA3=$(target/release/parity tools hash target/release/parity)
|
||||
- md5sum target/release/parity > parity.md5
|
||||
- sh scripts/deb-build.sh amd64
|
||||
- cp target/release/parity deb/usr/bin/parity
|
||||
- cp target/release/parity-evm deb/usr/bin/parity-evm
|
||||
- cp target/release/ethstore deb/usr/bin/ethstore
|
||||
- cp target/release/ethkey deb/usr/bin/ethkey
|
||||
- export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n")
|
||||
- dpkg-deb -b deb "parity_"$VER"_amd64.deb"
|
||||
- md5sum "parity_"$VER"_amd64.deb" > "parity_"$VER"_amd64.deb.md5"
|
||||
- aws configure set aws_access_key_id $s3_key
|
||||
- aws configure set aws_secret_access_key $s3_secret
|
||||
- if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
- aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/x86_64-unknown-debian-gnu
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-debian-gnu/parity --body target/release/parity
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-debian-gnu/parity.md5 --body parity.md5
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-debian-gnu/"parity_"$VER"_amd64.deb" --body "parity_"$VER"_amd64.deb"
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/x86_64-unknown-debian-gnu/"parity_"$VER"_amd64.deb.md5" --body "parity_"$VER"_amd64.deb.md5"
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/x86_64-unknown-debian-gnu
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/x86_64-unknown-debian-gnu
|
||||
- export LIBSSL="libssl1.1 (>=1.1.0)"
|
||||
- scripts/gitlab-build.sh x86_64-unknown-debian-gnu x86_64-unknown-linux-gnu amd64 gcc g++ debian
|
||||
tags:
|
||||
- rust
|
||||
- rust-debian
|
||||
artifacts:
|
||||
paths:
|
||||
- target/release/parity
|
||||
- parity.zip
|
||||
name: "stable-x86_64-unknown-debian-gnu_parity"
|
||||
linux-beta:
|
||||
stage: build
|
||||
image: parity/rust:gitlab-ci
|
||||
only:
|
||||
- beta
|
||||
- tags
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- rustup default beta
|
||||
- cargo build -j $(nproc) --release $CARGOFLAGS
|
||||
- strip target/release/parity
|
||||
tags:
|
||||
- rust
|
||||
- rust-beta
|
||||
artifacts:
|
||||
paths:
|
||||
- target/release/parity
|
||||
name: "beta-x86_64-unknown-linux-gnu_parity"
|
||||
allow_failure: true
|
||||
linux-nightly:
|
||||
stage: build
|
||||
image: parity/rust:gitlab-ci
|
||||
only:
|
||||
- beta
|
||||
- tags
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- rustup default nightly
|
||||
- cargo build -j $(nproc) --release $CARGOFLAGS
|
||||
- strip target/release/parity
|
||||
tags:
|
||||
- rust
|
||||
- rust-nightly
|
||||
artifacts:
|
||||
paths:
|
||||
- target/release/parity
|
||||
name: "nigthly-x86_64-unknown-linux-gnu_parity"
|
||||
allow_failure: true
|
||||
linux-centos:
|
||||
stage: build
|
||||
image: parity/rust-centos:gitlab-ci
|
||||
@@ -187,42 +57,12 @@ linux-centos:
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- export CXX="g++"
|
||||
- export CC="gcc"
|
||||
- export PLATFORM=x86_64-unknown-centos-gnu
|
||||
- cargo build -j $(nproc) --release --features final $CARGOFLAGS
|
||||
- cargo build -j $(nproc) --release -p evmbin
|
||||
- cargo build -j $(nproc) --release -p ethstore-cli
|
||||
- cargo build -j $(nproc) --release -p ethkey-cli
|
||||
- strip target/release/parity
|
||||
- strip target/release/parity-evm
|
||||
- strip target/release/ethstore
|
||||
- strip target/release/ethkey
|
||||
- md5sum target/release/parity > parity.md5
|
||||
- md5sum target/release/parity-evm > parity-evm.md5
|
||||
- md5sum target/release/ethstore > ethstore.md5
|
||||
- md5sum target/release/ethkey > ethkey.md5
|
||||
- export SHA3=$(target/release/parity tools hash target/release/parity)
|
||||
- aws configure set aws_access_key_id $s3_key
|
||||
- aws configure set aws_secret_access_key $s3_secret
|
||||
- if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
- aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu
|
||||
- aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity --body target/release/parity
|
||||
- aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity.md5 --body parity.md5
|
||||
- aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity-evm --body target/release/parity-evm
|
||||
- aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/parity-evm.md5 --body parity-evm.md5
|
||||
- aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/ethstore --body target/release/ethstore
|
||||
- aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/ethstore.md5 --body ethstore.md5
|
||||
- aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/ethkey --body target/release/ethkey
|
||||
- aws s3api put-object --bucket builds-parity --key $CI_BUILD_REF_NAME/x86_64-unknown-centos-gnu/ethkey.md5 --body ethkey.md5
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- scripts/gitlab-build.sh x86_64-unknown-centos-gnu x86_64-unknown-linux-gnu x86_64 gcc g++ centos
|
||||
tags:
|
||||
- rust
|
||||
- rust-centos
|
||||
artifacts:
|
||||
paths:
|
||||
- target/release/parity
|
||||
- parity.zip
|
||||
name: "x86_64-unknown-centos-gnu_parity"
|
||||
linux-i686:
|
||||
stage: build
|
||||
@@ -233,45 +73,12 @@ linux-i686:
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- export HOST_CC=gcc
|
||||
- export HOST_CXX=g++
|
||||
- export COMMIT=$(git rev-parse HEAD)
|
||||
- export PLATFORM=i686-unknown-linux-gnu
|
||||
- cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p evmbin
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p ethstore-cli
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p ethkey-cli
|
||||
- strip target/$PLATFORM/release/parity
|
||||
- strip target/$PLATFORM/release/parity-evm
|
||||
- strip target/$PLATFORM/release/ethstore
|
||||
- strip target/$PLATFORM/release/ethkey
|
||||
- strip target/$PLATFORM/release/parity
|
||||
- md5sum target/$PLATFORM/release/parity > parity.md5
|
||||
- export SHA3=$(target/$PLATFORM/release/parity tools hash target/$PLATFORM/release/parity)
|
||||
- sh scripts/deb-build.sh i386
|
||||
- cp target/$PLATFORM/release/parity deb/usr/bin/parity
|
||||
- cp target/$PLATFORM/release/parity-evm deb/usr/bin/parity-evm
|
||||
- cp target/$PLATFORM/release/ethstore deb/usr/bin/ethstore
|
||||
- cp target/$PLATFORM/release/ethkey deb/usr/bin/ethkey
|
||||
- export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n")
|
||||
- dpkg-deb -b deb "parity_"$VER"_i386.deb"
|
||||
- md5sum "parity_"$VER"_i386.deb" > "parity_"$VER"_i386.deb.md5"
|
||||
- aws configure set aws_access_key_id $s3_key
|
||||
- aws configure set aws_secret_access_key $s3_secret
|
||||
- if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
- aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity --body target/$PLATFORM/release/parity
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity.md5 --body parity.md5
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity_"$VER"_i386.deb" --body "parity_"$VER"_i386.deb"
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity_"$VER"_i386.deb.md5" --body "parity_"$VER"_i386.deb.md5"
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- scripts/gitlab-build.sh i686-unknown-linux-gnu i686-unknown-linux-gnu i386 gcc g++ ubuntu
|
||||
tags:
|
||||
- rust
|
||||
- rust-i686
|
||||
artifacts:
|
||||
paths:
|
||||
- target/i686-unknown-linux-gnu/release/parity
|
||||
- parity.zip
|
||||
name: "i686-unknown-linux-gnu"
|
||||
allow_failure: true
|
||||
linux-armv7:
|
||||
@@ -283,53 +90,12 @@ linux-armv7:
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- export CC=arm-linux-gnueabihf-gcc
|
||||
- export CXX=arm-linux-gnueabihf-g++
|
||||
- export HOST_CC=gcc
|
||||
- export HOST_CXX=g++
|
||||
- export PLATFORM=armv7-unknown-linux-gnueabihf
|
||||
- rm -rf .cargo
|
||||
- mkdir -p .cargo
|
||||
- echo "[target.$PLATFORM]" >> .cargo/config
|
||||
- echo "linker= \"arm-linux-gnueabihf-gcc\"" >> .cargo/config
|
||||
- cat .cargo/config
|
||||
- cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p evmbin
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p ethstore-cli
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p ethkey-cli
|
||||
- md5sum target/$PLATFORM/release/parity > parity.md5
|
||||
- export SHA3=$(target/$PLATFORM/release/parity tools hash target/$PLATFORM/release/parity)
|
||||
- sh scripts/deb-build.sh i386
|
||||
- arm-linux-gnueabihf-strip target/$PLATFORM/release/parity
|
||||
- arm-linux-gnueabihf-strip target/$PLATFORM/release/parity-evm
|
||||
- arm-linux-gnueabihf-strip target/$PLATFORM/release/ethstore
|
||||
- arm-linux-gnueabihf-strip target/$PLATFORM/release/ethkey
|
||||
- export SHA3=$(rhash --sha3-256 target/$PLATFORM/release/parity -p %h)
|
||||
- md5sum target/$PLATFORM/release/parity > parity.md5
|
||||
- sh scripts/deb-build.sh armhf
|
||||
- cp target/$PLATFORM/release/parity deb/usr/bin/parity
|
||||
- cp target/$PLATFORM/release/parity-evm deb/usr/bin/parity-evm
|
||||
- cp target/$PLATFORM/release/ethstore deb/usr/bin/ethstore
|
||||
- cp target/$PLATFORM/release/ethkey deb/usr/bin/ethkey
|
||||
- export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n")
|
||||
- dpkg-deb -b deb "parity_"$VER"_armhf.deb"
|
||||
- md5sum "parity_"$VER"_armhf.deb" > "parity_"$VER"_armhf.deb.md5"
|
||||
- aws configure set aws_access_key_id $s3_key
|
||||
- aws configure set aws_secret_access_key $s3_secret
|
||||
- if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
- aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity --body target/$PLATFORM/release/parity
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity.md5 --body parity.md5
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity_"$VER"_armhf.deb" --body "parity_"$VER"_armhf.deb"
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity_"$VER"_armhf.deb.md5" --body "parity_"$VER"_armhf.deb.md5"
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- scripts/gitlab-build.sh armv7-unknown-linux-gnueabihf armv7-unknown-linux-gnueabihf armhf arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++ ubuntu
|
||||
tags:
|
||||
- rust
|
||||
- rust-arm
|
||||
artifacts:
|
||||
paths:
|
||||
- target/armv7-unknown-linux-gnueabihf/release/parity
|
||||
- parity.zip
|
||||
name: "armv7_unknown_linux_gnueabihf_parity"
|
||||
allow_failure: true
|
||||
linux-arm:
|
||||
@@ -341,50 +107,12 @@ linux-arm:
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- export CC=arm-linux-gnueabihf-gcc
|
||||
- export CXX=arm-linux-gnueabihf-g++
|
||||
- export HOST_CC=gcc
|
||||
- export HOST_CXX=g++
|
||||
- export PLATFORM=arm-unknown-linux-gnueabihf
|
||||
- rm -rf .cargo
|
||||
- mkdir -p .cargo
|
||||
- echo "[target.$PLATFORM]" >> .cargo/config
|
||||
- echo "linker= \"arm-linux-gnueabihf-gcc\"" >> .cargo/config
|
||||
- cat .cargo/config
|
||||
- cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p evmbin
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p ethstore-cli
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p ethkey-cli
|
||||
- arm-linux-gnueabihf-strip target/$PLATFORM/release/parity
|
||||
- arm-linux-gnueabihf-strip target/$PLATFORM/release/parity-evm
|
||||
- arm-linux-gnueabihf-strip target/$PLATFORM/release/ethstore
|
||||
- arm-linux-gnueabihf-strip target/$PLATFORM/release/ethkey
|
||||
- export SHA3=$(rhash --sha3-256 target/$PLATFORM/release/parity -p %h)
|
||||
- md5sum target/$PLATFORM/release/parity > parity.md5
|
||||
- sh scripts/deb-build.sh armhf
|
||||
- cp target/$PLATFORM/release/parity deb/usr/bin/parity
|
||||
- cp target/$PLATFORM/release/parity-evm deb/usr/bin/parity-evm
|
||||
- cp target/$PLATFORM/release/ethstore deb/usr/bin/ethstore
|
||||
- cp target/$PLATFORM/release/ethkey deb/usr/bin/ethkey
|
||||
- export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n")
|
||||
- dpkg-deb -b deb "parity_"$VER"_armhf.deb"
|
||||
- md5sum "parity_"$VER"_armhf.deb" > "parity_"$VER"_armhf.deb.md5"
|
||||
- aws configure set aws_access_key_id $s3_key
|
||||
- aws configure set aws_secret_access_key $s3_secret
|
||||
- if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
- aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity --body target/$PLATFORM/release/parity
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity.md5 --body parity.md5
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity_"$VER"_armhf.deb" --body "parity_"$VER"_armhf.deb"
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity_"$VER"_armhf.deb.md5" --body "parity_"$VER"_armhf.deb.md5"
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- scripts/gitlab-build.sh arm-unknown-linux-gnueabihf arm-unknown-linux-gnueabihf armhf arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++ ubuntu
|
||||
tags:
|
||||
- rust
|
||||
- rust-arm
|
||||
artifacts:
|
||||
paths:
|
||||
- target/arm-unknown-linux-gnueabihf/release/parity
|
||||
- parity.zip
|
||||
name: "arm-unknown-linux-gnueabihf_parity"
|
||||
allow_failure: true
|
||||
linux-aarch64:
|
||||
@@ -396,51 +124,29 @@ linux-aarch64:
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- export CC=aarch64-linux-gnu-gcc
|
||||
- export CXX=aarch64-linux-gnu-g++
|
||||
- export HOST_CC=gcc
|
||||
- export HOST_CXX=g++
|
||||
- export PLATFORM=aarch64-unknown-linux-gnu
|
||||
- rm -rf .cargo
|
||||
- mkdir -p .cargo
|
||||
- echo "[target.$PLATFORM]" >> .cargo/config
|
||||
- echo "linker= \"aarch64-linux-gnu-gcc\"" >> .cargo/config
|
||||
- cat .cargo/config
|
||||
- cargo build -j $(nproc) --target $PLATFORM --features final --release $CARGOFLAGS
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p evmbin
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p ethstore-cli
|
||||
- cargo build -j $(nproc) --target $PLATFORM --release -p ethkey-cli
|
||||
- aarch64-linux-gnu-strip target/$PLATFORM/release/parity
|
||||
- aarch64-linux-gnu-strip target/$PLATFORM/release/parity-evm
|
||||
- aarch64-linux-gnu-strip target/$PLATFORM/release/ethstore
|
||||
- aarch64-linux-gnu-strip target/$PLATFORM/release/ethkey
|
||||
- export SHA3=$(rhash --sha3-256 target/$PLATFORM/release/parity -p %h)
|
||||
- md5sum target/$PLATFORM/release/parity > parity.md5
|
||||
- sh scripts/deb-build.sh arm64
|
||||
- cp target/$PLATFORM/release/parity deb/usr/bin/parity
|
||||
- cp target/$PLATFORM/release/parity-evm deb/usr/bin/parity-evm
|
||||
- cp target/$PLATFORM/release/ethstore deb/usr/bin/ethstore
|
||||
- cp target/$PLATFORM/release/ethkey deb/usr/bin/ethkey
|
||||
- export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n")
|
||||
- dpkg-deb -b deb "parity_"$VER"_arm64.deb"
|
||||
- md5sum "parity_"$VER"_arm64.deb" > "parity_"$VER"_arm64.deb.md5"
|
||||
- aws configure set aws_access_key_id $s3_key
|
||||
- aws configure set aws_secret_access_key $s3_secret
|
||||
- if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
- aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity.md5 --body parity.md5
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity_"$VER"_arm64.deb" --body "parity_"$VER"_arm64.deb"
|
||||
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity_"$VER"_arm64.deb.md5" --body "parity_"$VER"_arm64.deb.md5"
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
- scripts/gitlab-build.sh aarch64-unknown-linux-gnu aarch64-unknown-linux-gnu arm64 aarch64-linux-gnu-gcc aarch64-linux-gnu-g++ ubuntu
|
||||
tags:
|
||||
- rust
|
||||
- rust-arm
|
||||
artifacts:
|
||||
paths:
|
||||
- target/aarch64-unknown-linux-gnu/release/parity
|
||||
- parity.zip
|
||||
name: "aarch64-unknown-linux-gnu_parity"
|
||||
allow_failure: true
|
||||
linux-snap:
|
||||
stage: build
|
||||
image: parity/snapcraft:gitlab-ci
|
||||
only:
|
||||
- stable
|
||||
- beta
|
||||
- tags
|
||||
- triggers
|
||||
script:
|
||||
- scripts/gitlab-build.sh x86_64-unknown-snap-gnu x86_64-unknown-linux-gnu amd64 gcc g++ snap
|
||||
tags:
|
||||
- rust-stable
|
||||
artifacts:
|
||||
paths:
|
||||
- parity.zip
|
||||
name: "stable-x86_64-unknown-snap-gnu_parity"
|
||||
darwin:
|
||||
stage: build
|
||||
only:
|
||||
@@ -448,45 +154,17 @@ darwin:
|
||||
- tags
|
||||
- stable
|
||||
- triggers
|
||||
script: |
|
||||
export COMMIT=$(git rev-parse HEAD)
|
||||
export PLATFORM=x86_64-apple-darwin
|
||||
rustup default stable
|
||||
cargo clean
|
||||
cargo build -j 8 --features final --release #$CARGOFLAGS
|
||||
cargo build -j 8 --release -p ethstore-cli #$CARGOFLAGS
|
||||
cargo build -j 8 --release -p ethkey-cli #$CARGOFLAGS
|
||||
cargo build -j 8 --release -p evmbin #$CARGOFLAGS
|
||||
rm -rf parity.md5
|
||||
md5sum target/release/parity > parity.md5
|
||||
export SHA3=$(target/release/parity tools hash target/release/parity)
|
||||
cd mac
|
||||
xcodebuild -configuration Release
|
||||
cd ..
|
||||
packagesbuild -v mac/Parity.pkgproj
|
||||
productsign --sign 'Developer ID Installer: PARITY TECHNOLOGIES LIMITED (P2PX3JU8FT)' target/release/Parity\ Ethereum.pkg target/release/Parity\ Ethereum-signed.pkg
|
||||
export VER=$(grep -m 1 version Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n")
|
||||
mv target/release/Parity\ Ethereum-signed.pkg "parity-"$VER"-macos-installer.pkg"
|
||||
md5sum "parity-"$VER"-macos-installer.pkg" >> "parity-"$VER"-macos-installer.pkg.md5"
|
||||
aws configure set aws_access_key_id $s3_key
|
||||
aws configure set aws_secret_access_key $s3_secret
|
||||
if [[ $CI_BUILD_REF_NAME =~ ^(master|beta|stable|nightly)$ ]]; then export S3_BUCKET=builds-parity-published; else export S3_BUCKET=builds-parity; fi
|
||||
aws s3 rm --recursive s3://$S3_BUCKET/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity --body target/release/parity
|
||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/parity.md5 --body parity.md5
|
||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity-"$VER"-macos-installer.pkg" --body "parity-"$VER"-macos-installer.pkg"
|
||||
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$PLATFORM/"parity-"$VER"-macos-installer.pkg.md5" --body "parity-"$VER"-macos-installer.pkg.md5"
|
||||
curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1337/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
curl --data "commit=$CI_BUILD_REF&sha3=$SHA3&filename=parity&secret=$RELEASES_SECRET" http://update.parity.io:1338/push-build/$CI_BUILD_REF_NAME/$PLATFORM
|
||||
script:
|
||||
- scripts/gitlab-build.sh x86_64-apple-darwin x86_64-apple-darwin macos gcc g++ macos
|
||||
tags:
|
||||
- osx
|
||||
artifacts:
|
||||
paths:
|
||||
- target/release/parity
|
||||
- parity.zip
|
||||
name: "x86_64-apple-darwin_parity"
|
||||
windows:
|
||||
cache:
|
||||
key: "%CI_BUILD_STAGE%/%CI_BUILD_REF_NAME%"
|
||||
key: "%CI_BUILD_STAGE%-%CI_BUILD_REF_NAME%"
|
||||
untracked: true
|
||||
stage: build
|
||||
only:
|
||||
@@ -495,62 +173,12 @@ windows:
|
||||
- stable
|
||||
- triggers
|
||||
script:
|
||||
- set PLATFORM=x86_64-pc-windows-msvc
|
||||
- set INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;C:\vs2015\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
|
||||
- set LIB=C:\vs2015\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64
|
||||
- set RUST_BACKTRACE=1
|
||||
- set RUSTFLAGS=%RUSTFLAGS%
|
||||
- rustup default stable-x86_64-pc-windows-msvc
|
||||
- cargo clean
|
||||
- cargo build --features final --release #%CARGOFLAGS%
|
||||
- cargo build --release -p ethstore-cli #%CARGOFLAGS%
|
||||
- cargo build --release -p ethkey-cli #%CARGOFLAGS%
|
||||
- cargo build --release -p evmbin #%CARGOFLAGS%
|
||||
- signtool sign /f %keyfile% /p %certpass% target\release\parity.exe
|
||||
- target\release\parity.exe tools hash target\release\parity.exe > parity.sha3
|
||||
- set /P SHA3=<parity.sha3
|
||||
- curl -sL --url "https://github.com/paritytech/win-build/raw/master/SimpleFC.dll" -o nsis\SimpleFC.dll
|
||||
- curl -sL --url "https://github.com/paritytech/win-build/raw/master/vc_redist.x64.exe" -o nsis\vc_redist.x64.exe
|
||||
- msbuild windows\ptray\ptray.vcxproj /p:Platform=x64 /p:Configuration=Release
|
||||
- signtool sign /f %keyfile% /p %certpass% windows\ptray\x64\release\ptray.exe
|
||||
- cd nsis
|
||||
- makensis.exe installer.nsi
|
||||
- copy installer.exe InstallParity.exe
|
||||
- signtool sign /f %keyfile% /p %certpass% InstallParity.exe
|
||||
- md5sums InstallParity.exe > InstallParity.exe.md5
|
||||
- zip win-installer.zip InstallParity.exe InstallParity.exe.md5
|
||||
- md5sums win-installer.zip > win-installer.zip.md5
|
||||
- cd ..\target\release\
|
||||
- md5sums parity.exe > parity.exe.md5
|
||||
- zip parity.zip parity.exe parity.md5
|
||||
- md5sums parity.zip > parity.zip.md5
|
||||
- cd ..\..
|
||||
- aws configure set aws_access_key_id %s3_key%
|
||||
- aws configure set aws_secret_access_key %s3_secret%
|
||||
- echo %CI_BUILD_REF_NAME%
|
||||
- echo %CI_BUILD_REF_NAME% | findstr /R "master" >nul 2>&1 && set S3_BUCKET=builds-parity-published|| set S3_BUCKET=builds-parity
|
||||
- echo %CI_BUILD_REF_NAME% | findstr /R "beta" >nul 2>&1 && set S3_BUCKET=builds-parity-published|| set S3_BUCKET=builds-parity
|
||||
- echo %CI_BUILD_REF_NAME% | findstr /R "stable" >nul 2>&1 && set S3_BUCKET=builds-parity-published|| set S3_BUCKET=builds-parity
|
||||
- echo %CI_BUILD_REF_NAME% | findstr /R "nightly" >nul 2>&1 && set S3_BUCKET=builds-parity-published|| set S3_BUCKET=builds-parity
|
||||
- echo %S3_BUCKET%
|
||||
- aws s3 rm --recursive s3://%S3_BUCKET%/%CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc
|
||||
- aws s3api put-object --bucket %S3_BUCKET% --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity.exe --body target\release\parity.exe
|
||||
- aws s3api put-object --bucket %S3_BUCKET% --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity.exe.md5 --body target\release\parity.exe.md5
|
||||
- aws s3api put-object --bucket %S3_BUCKET% --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity.zip --body target\release\parity.zip
|
||||
- aws s3api put-object --bucket %S3_BUCKET% --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/parity.zip.md5 --body target\release\parity.zip.md5
|
||||
- aws s3api put-object --bucket %S3_BUCKET% --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/InstallParity.exe --body nsis\InstallParity.exe
|
||||
- aws s3api put-object --bucket %S3_BUCKET% --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/InstallParity.exe.md5 --body nsis\InstallParity.exe.md5
|
||||
- aws s3api put-object --bucket %S3_BUCKET% --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/win-installer.zip --body nsis\win-installer.zip
|
||||
- aws s3api put-object --bucket %S3_BUCKET% --key %CI_BUILD_REF_NAME%/x86_64-pc-windows-msvc/win-installer.zip.md5 --body nsis\win-installer.zip.md5
|
||||
- curl --data "commit=%CI_BUILD_REF%&sha3=%SHA3%&filename=parity.exe&secret=%RELEASES_SECRET%" http://update.parity.io:1337/push-build/%CI_BUILD_REF_NAME%/%PLATFORM%
|
||||
- curl --data "commit=%CI_BUILD_REF%&sha3=%SHA3%&filename=parity.exe&secret=%RELEASES_SECRET%" http://update.parity.io:1338/push-build/%CI_BUILD_REF_NAME%/%PLATFORM%
|
||||
- sh scripts/gitlab-build.sh x86_64-pc-windows-msvc x86_64-pc-windows-msvc installer "" "" windows
|
||||
tags:
|
||||
- rust-windows
|
||||
artifacts:
|
||||
paths:
|
||||
- target/release/parity.exe
|
||||
- target/release/parity.pdb
|
||||
- nsis/InstallParity.exe
|
||||
- parity.zip
|
||||
name: "x86_64-pc-windows-msvc_parity"
|
||||
docker-build:
|
||||
stage: build
|
||||
@@ -560,10 +188,10 @@ docker-build:
|
||||
before_script:
|
||||
- docker info
|
||||
script:
|
||||
- if [ "$CI_BUILD_REF_NAME" == "beta-release" ]; then DOCKER_TAG="latest"; else DOCKER_TAG=$CI_BUILD_REF_NAME; fi
|
||||
- if [ "$CI_BUILD_REF_NAME" == "master" ]; then DOCKER_TAG="latest"; else DOCKER_TAG=$CI_BUILD_REF_NAME; fi
|
||||
- echo "Tag:" $DOCKER_TAG
|
||||
- docker login -u $Docker_Hub_User_Parity -p $Docker_Hub_Pass_Parity
|
||||
- sh scripts/docker-build.sh $DOCKER_TAG
|
||||
- scripts/docker-build.sh $DOCKER_TAG
|
||||
- docker logout
|
||||
tags:
|
||||
- docker
|
||||
@@ -572,65 +200,16 @@ test-coverage:
|
||||
only:
|
||||
- master
|
||||
script:
|
||||
- git submodule update --init --recursive
|
||||
- rm -rf target/*
|
||||
- rm -rf js/.coverage
|
||||
- scripts/cov.sh
|
||||
# - COVERAGE=$(grep -Po 'covered":.*?[^\\]"' target/cov/index.json | grep "[0-9]*\.[0-9]" -o)
|
||||
# - echo "Coverage:" $COVERAGE
|
||||
- scripts/gitlab-test.sh test-coverage
|
||||
tags:
|
||||
- kcov
|
||||
allow_failure: true
|
||||
test-darwin:
|
||||
stage: test
|
||||
only:
|
||||
- triggers
|
||||
before_script:
|
||||
- git submodule update --init --recursive
|
||||
- export RUST_FILES_MODIFIED=$(git --no-pager diff --name-only $CI_BUILD_REF^ $CI_BUILD_REF | grep -v -e "^js/" -e ^\\. -e ^LICENSE -e ^README.md -e ^appveyor.yml -e ^test.sh -e ^windows/ -e ^scripts/ -e^mac/ -e ^nsis/ | wc -l)
|
||||
script:
|
||||
- export RUST_BACKTRACE=1
|
||||
- if [ $RUST_FILES_MODIFIED -eq 0 ]; then echo "Skipping Rust tests since no Rust files modified."; else ./test.sh $CARGOFLAGS; fi
|
||||
tags:
|
||||
- osx
|
||||
allow_failure: true
|
||||
test-windows:
|
||||
stage: test
|
||||
only:
|
||||
- triggers
|
||||
before_script:
|
||||
- git submodule update --init --recursive
|
||||
script:
|
||||
- set RUST_BACKTRACE=1
|
||||
- echo cargo test --features json-tests -p rlp -p ethash -p ethcore -p ethcore-bigint -p parity-dapps -p parity-rpc -p ethcore-util -p ethcore-network -p ethcore-io -p ethkey -p ethstore -p ethsync -p ethcore-ipc -p ethcore-ipc-tests -p ethcore-ipc-nano -p parity-rpc-client -p parity %CARGOFLAGS% --verbose --release
|
||||
tags:
|
||||
- rust-windows
|
||||
allow_failure: true
|
||||
test-rust-stable:
|
||||
stage: test
|
||||
image: parity/rust:gitlab-ci
|
||||
before_script:
|
||||
- git submodule update --init --recursive
|
||||
- export RUST_FILES_MODIFIED=$(git --no-pager diff --name-only $CI_BUILD_REF^ $CI_BUILD_REF | grep -v -e ^js -e ^\\. -e ^LICENSE -e ^README.md -e ^test.sh -e ^windows/ -e ^scripts/ -e^mac/ -e ^nsis/ | wc -l)
|
||||
script:
|
||||
- rustup show
|
||||
- export RUST_BACKTRACE=1
|
||||
- if [ $RUST_FILES_MODIFIED -eq 0 ]; then echo "Skipping Rust tests since no Rust files modified."; else ./test.sh $CARGOFLAGS; fi
|
||||
- if [ "$CI_BUILD_REF_NAME" == "nightly" ]; then sh scripts/aura-test.sh; fi
|
||||
- scripts/gitlab-test.sh stable
|
||||
tags:
|
||||
- rust
|
||||
- rust-stable
|
||||
js-test:
|
||||
stage: test
|
||||
image: parity/rust:gitlab-ci
|
||||
before_script:
|
||||
- git submodule update --init --recursive
|
||||
- export JS_FILES_MODIFIED=$(git --no-pager diff --name-only $CI_BUILD_REF^ $CI_BUILD_REF | grep ^js/ | wc -l)
|
||||
- if [ $JS_FILES_MODIFIED -eq 0 ]; then echo "Skipping JS deps install since no JS files modified."; else ./js/scripts/install-deps.sh;fi
|
||||
script:
|
||||
- if [ $JS_FILES_MODIFIED -eq 0 ]; then echo "Skipping JS lint since no JS files modified."; else ./js/scripts/lint.sh && ./js/scripts/test.sh && ./js/scripts/build.sh; fi
|
||||
tags:
|
||||
- rust
|
||||
- rust-stable
|
||||
test-rust-beta:
|
||||
stage: test
|
||||
@@ -638,15 +217,9 @@ test-rust-beta:
|
||||
- triggers
|
||||
- master
|
||||
image: parity/rust:gitlab-ci
|
||||
before_script:
|
||||
- git submodule update --init --recursive
|
||||
- export RUST_FILES_MODIFIED=$(git --no-pager diff --name-only $CI_BUILD_REF^ $CI_BUILD_REF | grep -v -e ^js -e ^\\. -e ^LICENSE -e ^README.md -e ^appveyor.yml -e ^test.sh -e ^windows/ -e ^scripts/ -e^mac/ -e ^nsis/ | wc -l)
|
||||
script:
|
||||
- rustup default beta
|
||||
- export RUST_BACKTRACE=1
|
||||
- if [ $RUST_FILES_MODIFIED -eq 0 ]; then echo "Skipping Rust tests since no Rust files modified."; else ./test.sh $CARGOFLAGS; fi
|
||||
- scripts/gitlab-test.sh beta
|
||||
tags:
|
||||
- rust
|
||||
- rust-beta
|
||||
allow_failure: true
|
||||
test-rust-nightly:
|
||||
@@ -655,36 +228,12 @@ test-rust-nightly:
|
||||
- triggers
|
||||
- master
|
||||
image: parity/rust:gitlab-ci
|
||||
before_script:
|
||||
- git submodule update --init --recursive
|
||||
- export RUST_FILES_MODIFIED=$(git --no-pager diff --name-only $CI_BUILD_REF^ $CI_BUILD_REF | grep -v -e ^js -e ^\\. -e ^LICENSE -e ^README.md -e ^appveyor.yml -e ^test.sh -e ^windows/ -e ^scripts/ -e^mac/ -e ^nsis/ | wc -l)
|
||||
script:
|
||||
- rustup default nightly
|
||||
- export RUST_BACKTRACE=1
|
||||
- if [ $RUST_FILES_MODIFIED -eq 0 ]; then echo "Skipping Rust tests since no Rust files modified."; else ./test.sh $CARGOFLAGS; fi
|
||||
- scripts/gitlab-test.sh nightly
|
||||
tags:
|
||||
- rust
|
||||
- rust-nightly
|
||||
allow_failure: true
|
||||
js-release:
|
||||
stage: js-build
|
||||
only:
|
||||
- master
|
||||
- beta
|
||||
- stable
|
||||
- tags
|
||||
- triggers
|
||||
image: parity/rust:gitlab-ci
|
||||
before_script:
|
||||
- export JS_FILES_MODIFIED=$(git --no-pager diff --name-only $CI_BUILD_REF^ $CI_BUILD_REF | grep ^js/ | wc -l)
|
||||
- echo $JS_FILES_MODIFIED
|
||||
- if [ $JS_FILES_MODIFIED -eq 0 ]; then echo "Skipping JS deps install since no JS files modified."; else ./js/scripts/install-deps.sh;fi
|
||||
script:
|
||||
- rustup default stable
|
||||
- echo $JS_FILES_MODIFIED
|
||||
- if [ $JS_FILES_MODIFIED -eq 0 ]; then echo "Skipping JS rebuild since no JS files modified."; else ./js/scripts/build.sh && ./js/scripts/release.sh; fi
|
||||
tags:
|
||||
- javascript
|
||||
push-release:
|
||||
stage: push-release
|
||||
only:
|
||||
@@ -692,8 +241,6 @@ push-release:
|
||||
- triggers
|
||||
image: parity/rust:gitlab-ci
|
||||
script:
|
||||
- rustup default stable
|
||||
- curl --data "secret=$RELEASES_SECRET" http://update.parity.io:1337/push-release/$CI_BUILD_REF_NAME/$CI_BUILD_REF
|
||||
- curl --data "secret=$RELEASES_SECRET" http://update.parity.io:1338/push-release/$CI_BUILD_REF_NAME/$CI_BUILD_REF
|
||||
- scripts/gitlab-push-release.sh
|
||||
tags:
|
||||
- curl
|
||||
|
||||
899
CHANGELOG.md
899
CHANGELOG.md
@@ -1,652 +1,279 @@
|
||||
## Parity [v1.7.3](https://github.com/paritytech/parity/releases/tag/v1.7.3) (2017-10-09)
|
||||
## Parity [v1.10.2](https://github.com/paritytech/parity/releases/tag/v1.10.2) (2018-04-24)
|
||||
|
||||
Parity 1.7.3 enables the Byzantium fork for Ethereum main network on Block 4_370_000 and offers a variety of bug fixes and stability improvements. Among them:
|
||||
Parity 1.10.2 is a bug-fix release to improve performance and stability.
|
||||
|
||||
- Fixed network protocol version negotiation with Geth nodes v1.7.1+.
|
||||
- Fixed `RETURNDATA` size for built-ins. (Built-ins in some cases overwrite only a portion of the output memory slice.)
|
||||
- Multisig Wallet View now loads if multiple transactions happened within one block.
|
||||
- Improved stability of snapshot-sycns (warp).
|
||||
- Revised timeout and batch size constants for bigger blocks.
|
||||
- Renamed RPC receipt `statusCode` field to `status`.
|
||||
The full list of included changes:
|
||||
|
||||
Full list of included changes:
|
||||
- Update Parity beta to 1.10.2 + Backports ([#8455](https://github.com/paritytech/parity/pull/8455))
|
||||
- Update Parity beta to 1.10.2
|
||||
- Allow 32-bit pipelines to fail ([#8454](https://github.com/paritytech/parity/pull/8454))
|
||||
- Disable 32-bit targets for Gitlab
|
||||
- Rename Linux pipelines
|
||||
- Update wasmi ([#8452](https://github.com/paritytech/parity/pull/8452))
|
||||
- Fix Cargo.lock
|
||||
- Backports ([#8450](https://github.com/paritytech/parity/pull/8450))
|
||||
- Use forked app_dirs crate for reverted Windows dir behavior ([#8438](https://github.com/paritytech/parity/pull/8438))
|
||||
- Remove unused app_dirs dependency in CLI
|
||||
- Use forked app_dirs crate for reverted Windows dir behavior
|
||||
- Remove Tendermint extra_info due to seal inconsistencies ([#8367](https://github.com/paritytech/parity/pull/8367))
|
||||
- Handle queue import errors a bit more gracefully ([#8385](https://github.com/paritytech/parity/pull/8385))
|
||||
- Improve VM executor stack size estimation rules ([#8439](https://github.com/paritytech/parity/pull/8439))
|
||||
- Improve VM executor stack size estimation rules
|
||||
- Typo: docs add "(Debug build)" comment
|
||||
- Fix an off by one typo and set minimal stack size
|
||||
- Use saturating_sub to avoid potential overflow
|
||||
|
||||
- Backporting ([#6676](https://github.com/paritytech/parity/pull/6676))
|
||||
- Fix wallet view ([#6597](https://github.com/paritytech/parity/pull/6597))
|
||||
- Add safe fail for empty logs
|
||||
- Filter transactions
|
||||
- Add more logging
|
||||
- Fix Wallet Creation and wallet tx list
|
||||
- Remove logs
|
||||
- Prevent selecting twice same wallet owner
|
||||
- Fix tests
|
||||
- Remove unused props
|
||||
- Disallow pasting recovery phrases on first run ([#6602](https://github.com/paritytech/parity/pull/6602))
|
||||
- Fix disallowing paste of recovery phrase on first run, ref [#6581](https://github.com/paritytech/parity/issues/6581)
|
||||
- Allow the leader of CATS pasting recovery phrases.
|
||||
- Updated systemd files for linux ([#6592](https://github.com/paritytech/parity/pull/6592))
|
||||
- Previous version put $BASE directory in root directory.
|
||||
- This version clearly explains how to run as root or as specific user.
|
||||
- Additional configuration:
|
||||
- send SIGHUP for clean exit,
|
||||
- restart on fail.
|
||||
- Tested on Ubuntu 16.04.3 LTS with 4.10.0-33-generic x86_64 kernel
|
||||
- Don't expose port 80 for parity anymore ([#6633](https://github.com/paritytech/parity/pull/6633))
|
||||
- Backporting ([#6675](https://github.com/paritytech/parity/pull/6675))
|
||||
- Required validators >= num owners ([#6551](https://github.com/paritytech/parity/pull/6551))
|
||||
- Debounce sync status. ([#6572](https://github.com/paritytech/parity/pull/6572))
|
||||
- Fixed network protocol version negotiation ([#6649](https://github.com/paritytech/parity/pull/6649))
|
||||
- Renamed RPC receipt statusCode field to status ([#6650](https://github.com/paritytech/parity/pull/6650))
|
||||
- Fixed RETURNDATA size for built-ins ([#6652](https://github.com/paritytech/parity/pull/6652))
|
||||
- Byzantium fork block number ([#6661](https://github.com/paritytech/parity/pull/6661))
|
||||
- Refreshing block number on status view ([#6610](https://github.com/paritytech/parity/pull/6610))
|
||||
- Tweaked block download timeouts ([#6595](https://github.com/paritytech/parity/pull/6595))
|
||||
- Backports ([#6563](https://github.com/paritytech/parity/pull/6563))
|
||||
- Sync progress and error handling fixes ([#6560](https://github.com/paritytech/parity/pull/6560))
|
||||
- Fixed receipt serialization and RPC ([#6555](https://github.com/paritytech/parity/pull/6555))
|
||||
- Bump to v1.7.3
|
||||
## Parity [v1.10.1](https://github.com/paritytech/parity/releases/tag/v1.10.1) (2018-04-17)
|
||||
|
||||
## Parity [v1.7.2](https://github.com/paritytech/parity/releases/tag/v1.7.2) (2017-09-18)
|
||||
Parity 1.10.1 is a bug-fix release to improve performance and stability. Among other changes, you can now use `--warp-barrier [BLOCK]` to specify a minimum block number to `--warp` to. This is useful in cases where clients restore to outdated snapshots far behind the latest chain head.
|
||||
|
||||
Parity 1.7.2 is a bug-fix release to improve performance and stability. Among others, it addresses the following:
|
||||
The full list of included changes:
|
||||
|
||||
- Byzantium fork support for the Ropsten and Foundation networks.
|
||||
- Added support for the ConsenSys and Gnosis multi-signature wallets.
|
||||
- Significantly increased token registry and token balance lookup performance.
|
||||
- Fixed issues with the health status indicator in the wallet.
|
||||
- Tweaked warp-sync to quickly catch up with chains fallen back more than 10,000 blocks.
|
||||
- Fixes to the Chrome extension and macOS installer upgrades.
|
||||
- Bump beta to 1.10.1 ([#8350](https://github.com/paritytech/parity/pull/8350))
|
||||
- Bump beta to 1.10.1
|
||||
- Unflag critical release
|
||||
- Backports ([#8346](https://github.com/paritytech/parity/pull/8346))
|
||||
- Warp-only sync with warp-barrier [blocknumber] flag. ([#8228](https://github.com/paritytech/parity/pull/8228))
|
||||
- Warp-only sync with warp-after [blocknumber] flag.
|
||||
- Fix tests.
|
||||
- Fix configuration tests.
|
||||
- Rename to warp barrier.
|
||||
- Allow unsafe js eval on Parity Wallet. ([#8204](https://github.com/paritytech/parity/pull/8204))
|
||||
- Update musicoin spec in line with gmc v2.6.2 ([#8242](https://github.com/paritytech/parity/pull/8242))
|
||||
- Supress TemporaryInvalid verification failures. ([#8256](https://github.com/paritytech/parity/pull/8256))
|
||||
- Include suicided accounts in state diff ([#8297](https://github.com/paritytech/parity/pull/8297))
|
||||
- Include suicided accounts in state diff
|
||||
- Shorten form match -> if let
|
||||
- Test suicide trace diff in State
|
||||
- Replace_home for password_files, reserved_peers and log_file ([#8324](https://github.com/paritytech/parity/pull/8324))
|
||||
- Replace_home for password_files, reserved_peers and log_file
|
||||
- Typo: arg_log_file is Option
|
||||
- Enable UI by default, but only display info page.
|
||||
- Fix test.
|
||||
- Fix naming and remove old todo.
|
||||
- Change "wallet" with "browser UI"
|
||||
- Change name Wallet -> UI ([#8164](https://github.com/paritytech/parity/pull/8164)) ([#8205](https://github.com/paritytech/parity/pull/8205))
|
||||
- Change name Wallet -> UI
|
||||
- Make warning bold
|
||||
- Backport [#8099](https://github.com/paritytech/parity/pull/8099) ([#8132](https://github.com/paritytech/parity/pull/8132))
|
||||
- WASM libs ([#8220](https://github.com/paritytech/parity/pull/8220))
|
||||
- Bump wasm libs ([#8171](https://github.com/paritytech/parity/pull/8171))
|
||||
- Bump wasmi version ([#8209](https://github.com/paritytech/parity/pull/8209))
|
||||
- Update hyper to 0.11.24 ([#8203](https://github.com/paritytech/parity/pull/8203))
|
||||
- Updated jsonrpc to include latest backports (beta) ([#8181](https://github.com/paritytech/parity/pull/8181))
|
||||
- Updated jsonrpc to include latest backports
|
||||
- Update dependencies.
|
||||
|
||||
Full list of included changes:
|
||||
## Parity [v1.10.0](https://github.com/paritytech/parity/releases/tag/v1.10.0) (2018-03-22)
|
||||
|
||||
- Fix output from eth_call. ([#6538](https://github.com/paritytech/parity/pull/6538))
|
||||
- Ropsten fork ([#6532](https://github.com/paritytech/parity/pull/6532))
|
||||
- Byzantium updates ([#6529](https://github.com/paritytech/parity/pull/6529))
|
||||
- Fix modexp bug: return 0 if base=0 ([#6424](https://github.com/paritytech/parity/pull/6424))
|
||||
- Running state test using parity-evm ([#6355](https://github.com/paritytech/parity/pull/6355))
|
||||
- Initial version of state tests.
|
||||
- Refactor state to support tracing.
|
||||
- Unify TransactResult.
|
||||
- Add test.
|
||||
- Byzantium updates ([#5855](https://github.com/paritytech/parity/pull/5855))
|
||||
- EIP-211 updates
|
||||
- Benchmarks
|
||||
- Blockhash instruction gas cost updated
|
||||
- More benches
|
||||
- EIP-684
|
||||
- EIP-649
|
||||
- EIP-658
|
||||
- Updated some tests
|
||||
- Modexp fixes
|
||||
- STATICCALL fixes
|
||||
- Pairing fixes
|
||||
- More STATICALL fixes
|
||||
- Use paritytech/bn
|
||||
- Fixed REVERTing of contract creation
|
||||
- Fixed more tests
|
||||
- Fixed more tests
|
||||
- Blockchain tests
|
||||
- Enable previously broken tests
|
||||
- Transition test
|
||||
- Updated tests
|
||||
- Fixed modexp reading huge numbers
|
||||
- Enabled max_code_size test
|
||||
- Review fixes
|
||||
- Updated pairing pricing
|
||||
- Missing commas (style)
|
||||
- Update test.rs
|
||||
- Small improvements
|
||||
- Eip161abc
|
||||
- Fix extension detection ([#6452](https://github.com/paritytech/parity/pull/6452)) ([#6524](https://github.com/paritytech/parity/pull/6524))
|
||||
- Fix extension detection.
|
||||
- Fix mobx quirks.
|
||||
- Update submodule.
|
||||
- Fix detecting hardware wallets. ([#6509](https://github.com/paritytech/parity/pull/6509))
|
||||
- Allow hardware device reads without lock. ([#6517](https://github.com/paritytech/parity/pull/6517))
|
||||
- Backports [#6497](https://github.com/paritytech/parity/pull/6497)
|
||||
- Fix slow balances ([#6471](https://github.com/paritytech/parity/pull/6471))
|
||||
- Update token updates
|
||||
- Update token info fetching
|
||||
- Update logger
|
||||
- Minor fixes to updates and notifications for balances
|
||||
- Use Pubsub
|
||||
- Fix timeout.
|
||||
- Use pubsub for status.
|
||||
- Fix signer subscription.
|
||||
- Process tokens in chunks.
|
||||
- Fix tokens loaded by chunks
|
||||
- Dispatch tokens asap
|
||||
- Fix chunks processing.
|
||||
- Better filter options
|
||||
- Parallel log fetching.
|
||||
- Fix signer polling.
|
||||
- Fix initial block query.
|
||||
- Token balances updates : the right(er) way
|
||||
- Better tokens info fetching
|
||||
- Fixes in token data fetching
|
||||
- Only fetch what's needed (tokens)
|
||||
- Fix linting issues
|
||||
- Update wasm-tests.
|
||||
- Fixing balances fetching
|
||||
- Fix requests tracking in UI
|
||||
- Fix request watching
|
||||
- Update the Logger
|
||||
- PR Grumbles Fixes
|
||||
- Eth_call returns output of contract creations ([#6420](https://github.com/paritytech/parity/pull/6420))
|
||||
- Eth_call returns output of contract creations
|
||||
- Fix parameters order.
|
||||
- Save outputs for light client as well.
|
||||
- Don't accept transactions above block gas limit.
|
||||
- Expose health status over RPC ([#6274](https://github.com/paritytech/parity/pull/6274))
|
||||
- Node-health to a separate crate.
|
||||
- Initialize node_health outside of dapps.
|
||||
- Expose health over RPC.
|
||||
- Bring back 412 and fix JS.
|
||||
- Add health to workspace and tests.
|
||||
- Fix compilation without default features.
|
||||
- Fix borked merge.
|
||||
- Revert to generics to avoid virtual calls.
|
||||
- Fix node-health tests.
|
||||
- Add missing trailing comma.
|
||||
- Fixing/removing failing JS tests.
|
||||
- Do not activate genesis epoch in immediate transition validator contract ([#6349](https://github.com/paritytech/parity/pull/6349))
|
||||
- Fix memory tracing.
|
||||
- Add test to cover that.
|
||||
- Ensure balances of constructor accounts are kept
|
||||
- Test balance of spec-constructed account is kept
|
||||
- Fix warning spam. [#6369](https://github.com/paritytech/parity/pull/6369)
|
||||
- Bump to 1.7.2
|
||||
- Fix eth_call [#6366](https://github.com/paritytech/parity/pull/6366)
|
||||
- Backporting [#6352](https://github.com/paritytech/parity/pull/6352)
|
||||
- Better check the created accounts before showing Startup Wizard [#6331](https://github.com/paritytech/parity/pull/6331)
|
||||
- Tweaked snapshot params [#6344](https://github.com/paritytech/parity/pull/6344)
|
||||
- Increase default gas limit for eth_call [#6337](https://github.com/paritytech/parity/pull/6337)
|
||||
- Fix balance increase.
|
||||
- Cap gas limit for dapp-originating requests.
|
||||
- Backports [#6333](https://github.com/paritytech/parity/pull/6333)
|
||||
- Overflow check in addition
|
||||
- Unexpose methods on UI RPC. [#6295](https://github.com/paritytech/parity/pull/6295)
|
||||
- Add more descriptive error when signing/decrypting using hw wallet.
|
||||
- Format instant change proofs correctly
|
||||
- Propagate stratum submit share error upstream [#6260](https://github.com/paritytech/parity/pull/6260)
|
||||
- Updated jsonrpc [#6264](https://github.com/paritytech/parity/pull/6264)
|
||||
- Using multiple NTP servers [#6173](https://github.com/paritytech/parity/pull/6173)
|
||||
- Small improvements to time estimation.
|
||||
- Allow multiple NTP servers to be used.
|
||||
- Removing boxing.
|
||||
- Update list of servers and add reference.
|
||||
- Fix dapps CSP when UI is exposed externally [#6178](https://github.com/paritytech/parity/pull/6178)
|
||||
- Allow embeding on any page when ui-hosts=all and fix dev_ui
|
||||
- Fix cache path when using --base-path [#6212](https://github.com/paritytech/parity/pull/6212)
|
||||
- Bump to v1.7.1
|
||||
- UI backports [#6332](https://github.com/paritytech/parity/pull/6332)
|
||||
- Time should not contribue to overall status. [#6276](https://github.com/paritytech/parity/pull/6276)
|
||||
- Add warning to web browser and fix links. [#6232](https://github.com/paritytech/parity/pull/6232)
|
||||
- Extension fixes [#6284](https://github.com/paritytech/parity/pull/6284)
|
||||
- Fix token symbols in extension.
|
||||
- Allow connections from firefox extension.
|
||||
- Add support for ConsenSys multisig wallet [#6153](https://github.com/paritytech/parity/pull/6153)
|
||||
- First draft of ConsenSys wallet
|
||||
- Fix transfer store // WIP Consensys Wallet
|
||||
- Rename walletABI JSON file
|
||||
- Fix wrong daylimit in wallet modal
|
||||
- Confirm/Revoke ConsensysWallet txs
|
||||
- Change of settings for the Multisig Wallet
|
||||
- Update README for beta [#6270](https://github.com/paritytech/parity/pull/6270)
|
||||
- Fixed macOS installer upgrade [#6221](https://github.com/paritytech/parity/pull/6221)
|
||||
This is the Parity 1.10.0-beta release! Cool!
|
||||
|
||||
## Parity [v1.7.0](https://github.com/paritytech/parity/releases/tag/v1.7.0) (2017-07-28)
|
||||
### Disabling the Parity Wallet
|
||||
|
||||
Parity 1.7.0 is a major release introducing several important features:
|
||||
The **Parity Wallet (a.k.a. "UI") is now disabled by default**. We are preparing to split the wallet from the core client.
|
||||
|
||||
- **Experimental [Light client](https://github.com/paritytech/parity/wiki/The-Parity-Light-Protocol-(PIP)) support**. Start Parity with `--light` to enable light mode. Please, note: The wallet UI integration for the light client is not included, yet.
|
||||
- **Experimental web wallet**. A hosted version of Parity that keeps the keys and signs transactions using your browser storage. Try it at https://wallet.parity.io or run your own with `--public-node`.
|
||||
- **WASM contract support**. Private networks can run contracts compiled into WASM bytecode. _More information and documentation to follow_.
|
||||
- **DApps and RPC server merge**. DApp and RPC are now available through a single API endpoint. DApp server related settings are deprecated.
|
||||
- **Export accounts from the wallet**. Backing up your keys can now simply be managed through the wallet interface.
|
||||
- **PoA/Kovan validator set contract**. The PoA network validator-set management via smart contract is now supported by warp and, in the near future, light sync.
|
||||
- **PubSub API**. https://github.com/paritytech/parity/wiki/JSONRPC-Parity-Pub-Sub-module
|
||||
- **Signer apps for IOS and Android**.
|
||||
To reactivate the parity wallet, you have to run Parity either with `parity --force-ui` (not recommended) or `parity ui` (deprecated) from the command line. Or, if you feel super fancy and want to test our pre-releases of the stand-alone electron wallet, head over to the [Parity-JS repositories and check the releases](https://github.com/Parity-JS/shell/releases).
|
||||
|
||||
Full list of included changes:
|
||||
Further reading:
|
||||
|
||||
- Backports [#6163](https://github.com/paritytech/parity/pull/6163)
|
||||
- Light client improvements ([#6156](https://github.com/paritytech/parity/pull/6156))
|
||||
- No seal checking
|
||||
- Import command and --no-seal-check for light client
|
||||
- Fix eth_call
|
||||
- Tweak registry dapps lookup
|
||||
- Ignore failed requests to non-server peers
|
||||
- Fix connecting to wildcard addresses. ([#6167](https://github.com/paritytech/parity/pull/6167))
|
||||
- Don't display an overlay in case the time sync check fails. ([#6164](https://github.com/paritytech/parity/pull/6164))
|
||||
- Small improvements to time estimation.
|
||||
- Temporarily disable NTP time check by default.
|
||||
- Light client fixes ([#6148](https://github.com/paritytech/parity/pull/6148)) [#6151](https://github.com/paritytech/parity/pull/6151)
|
||||
- Light client fixes
|
||||
- Fix memory-lru-cache
|
||||
- Clear pending reqs on disconnect
|
||||
- Filter tokens logs from current block, not genesis ([#6128](https://github.com/paritytech/parity/pull/6128)) [#6141](https://github.com/paritytech/parity/pull/6141)
|
||||
- Fix QR scanner returning null on confirm [#6122](https://github.com/paritytech/parity/pull/6122)
|
||||
- Check QR before lowercase ([#6119](https://github.com/paritytech/parity/pull/6119)) [#6120](https://github.com/paritytech/parity/pull/6120)
|
||||
- Remove chunk to restore from pending set only upon successful import [#6117](https://github.com/paritytech/parity/pull/6117)
|
||||
- Fixed node address detection on incoming connection [#6094](https://github.com/paritytech/parity/pull/6094)
|
||||
- Place RETURNDATA behind block number gate [#6095](https://github.com/paritytech/parity/pull/6095)
|
||||
- Update wallet library binaries [#6108](https://github.com/paritytech/parity/pull/6108)
|
||||
- Backported wallet fix [#6105](https://github.com/paritytech/parity/pull/6105)
|
||||
- Fix initialisation bug. ([#6102](https://github.com/paritytech/parity/pull/6102))
|
||||
- Update wallet library modifiers ([#6103](https://github.com/paritytech/parity/pull/6103))
|
||||
- Place RETURNDATA behind block number gate [#6095](https://github.com/paritytech/parity/pull/6095)
|
||||
- Fixed node address detection on incoming connection [#6094](https://github.com/paritytech/parity/pull/6094)
|
||||
- Bump snap version and tweak importing detection logic ([#6079](https://github.com/paritytech/parity/pull/6079)) [#6081](https://github.com/paritytech/parity/pull/6081)
|
||||
- bump last tick just before printing info and restore sync detection
|
||||
- bump kovan snapshot version
|
||||
- Fixed sync tests
|
||||
- Fixed rpc tests
|
||||
- Acquire client report under lock in informant [#6071](https://github.com/paritytech/parity/pull/6071)
|
||||
- Show busy indicator on Address forget [#6069](https://github.com/paritytech/parity/pull/6069)
|
||||
- Add CSP for worker-src ([#6059](https://github.com/paritytech/parity/pull/6059)) [#6064](https://github.com/paritytech/parity/pull/6064)
|
||||
- Specify worker-src seperately, add blob
|
||||
- Upgrade react-qr-scan to latest version
|
||||
- Set release channel to beta
|
||||
- Limit transaction queue memory & limit future queue [#6038](https://github.com/paritytech/parity/pull/6038)
|
||||
- Fix CI build issue [#6050](https://github.com/paritytech/parity/pull/6050)
|
||||
- New contract PoA sync fixes [#5991](https://github.com/paritytech/parity/pull/5991)
|
||||
- Fixed link to Multisig Contract Wallet on master [#5984](https://github.com/paritytech/parity/pull/5984)
|
||||
- Ethcore crate split part 1 [#6041](https://github.com/paritytech/parity/pull/6041)
|
||||
- Fix status icon [#6039](https://github.com/paritytech/parity/pull/6039)
|
||||
- Errors & warnings for inappropriate RPCs [#6029](https://github.com/paritytech/parity/pull/6029)
|
||||
- Add missing CSP for web3.site [#5992](https://github.com/paritytech/parity/pull/5992)
|
||||
- Remove cargo install --git from README.md [#6037](https://github.com/paritytech/parity/pull/6037)
|
||||
- Node Health warnings [#5951](https://github.com/paritytech/parity/pull/5951)
|
||||
- RPC cpu pool [#6023](https://github.com/paritytech/parity/pull/6023)
|
||||
- Use crates.io dependencies for parity-wasm [#6036](https://github.com/paritytech/parity/pull/6036)
|
||||
- Add test for loading the chain specs [#6028](https://github.com/paritytech/parity/pull/6028)
|
||||
- Whitelist APIs for generic Pub-Sub [#5840](https://github.com/paritytech/parity/pull/5840)
|
||||
- WASM contracts MVP [#5679](https://github.com/paritytech/parity/pull/5679)
|
||||
- Fix valid QR scan not advancing [#6033](https://github.com/paritytech/parity/pull/6033)
|
||||
- --reseal-on-uncle [#5940](https://github.com/paritytech/parity/pull/5940)
|
||||
- Support comments in reserved peers file ([#6004](https://github.com/paritytech/parity/pull/6004)) [#6012](https://github.com/paritytech/parity/pull/6012)
|
||||
- Add new md tnc [#5937](https://github.com/paritytech/parity/pull/5937)
|
||||
- Fix output of parity-evm in case of bad instruction [#5955](https://github.com/paritytech/parity/pull/5955)
|
||||
- Don't send notifications to unsubscribed clients of PubSub [#5960](https://github.com/paritytech/parity/pull/5960)
|
||||
- Proper light client informant and more verification of imported headers [#5897](https://github.com/paritytech/parity/pull/5897)
|
||||
- New Kovan bootnodes [#6017](https://github.com/paritytech/parity/pull/6017)
|
||||
- Use standard paths for Ethash cache [#5881](https://github.com/paritytech/parity/pull/5881)
|
||||
- Defer code hash calculation. [#5959](https://github.com/paritytech/parity/pull/5959)
|
||||
- Fix first run wizard. [#6000](https://github.com/paritytech/parity/pull/6000)
|
||||
- migration to serde 1.0 [#5996](https://github.com/paritytech/parity/pull/5996)
|
||||
- SecretStore: generating signatures [#5764](https://github.com/paritytech/parity/pull/5764)
|
||||
- bigint upgraded to version 3.0 [#5986](https://github.com/paritytech/parity/pull/5986)
|
||||
- config: don't allow dev chain with force sealing option [#5965](https://github.com/paritytech/parity/pull/5965)
|
||||
- Update lockfile for miniz-sys and gcc [#5969](https://github.com/paritytech/parity/pull/5969)
|
||||
- Clean up function naming in RPC error module [#5995](https://github.com/paritytech/parity/pull/5995)
|
||||
- Fix underflow in gas calculation [#5975](https://github.com/paritytech/parity/pull/5975)
|
||||
- PubSub for parity-js [#5830](https://github.com/paritytech/parity/pull/5830)
|
||||
- Report whether a peer was kept from `Handler::on_connect` [#5958](https://github.com/paritytech/parity/pull/5958)
|
||||
- Implement skeleton for transaction index and epoch transition proof PIP messages [#5908](https://github.com/paritytech/parity/pull/5908)
|
||||
- TransactionQueue improvements [#5917](https://github.com/paritytech/parity/pull/5917)
|
||||
- constant time HMAC comparison and clarify docs in ethkey [#5952](https://github.com/paritytech/parity/pull/5952)
|
||||
- Avoid pre-computing jump destinations [#5954](https://github.com/paritytech/parity/pull/5954)
|
||||
- Upgrade elastic array [#5949](https://github.com/paritytech/parity/pull/5949)
|
||||
- PoA: Wait for transition finality before applying [#5774](https://github.com/paritytech/parity/pull/5774)
|
||||
- Logs Pub-Sub [#5705](https://github.com/paritytech/parity/pull/5705)
|
||||
- Add the command to install the parity snap [#5945](https://github.com/paritytech/parity/pull/5945)
|
||||
- Reduce unnecessary allocations [#5944](https://github.com/paritytech/parity/pull/5944)
|
||||
- Clarify confusing messages. [#5935](https://github.com/paritytech/parity/pull/5935)
|
||||
- Content Security Policy [#5790](https://github.com/paritytech/parity/pull/5790)
|
||||
- CLI: Export error message and less verbose peer counter. [#5870](https://github.com/paritytech/parity/pull/5870)
|
||||
- network: make it more explicit about StreamToken and TimerToken [#5939](https://github.com/paritytech/parity/pull/5939)
|
||||
- sync: make it more idiomatic rust [#5938](https://github.com/paritytech/parity/pull/5938)
|
||||
- Prioritize accounts over address book [#5909](https://github.com/paritytech/parity/pull/5909)
|
||||
- Fixing failing compilation of RPC test on master. [#5916](https://github.com/paritytech/parity/pull/5916)
|
||||
- Empty local middleware, until explicitly requested [#5912](https://github.com/paritytech/parity/pull/5912)
|
||||
- Cancel propagated TX [#5899](https://github.com/paritytech/parity/pull/5899)
|
||||
- fix minor race condition in aura seal generation [#5910](https://github.com/paritytech/parity/pull/5910)
|
||||
- Docs for Pub-Sub, optional parameter for parity_subscribe [#5833](https://github.com/paritytech/parity/pull/5833)
|
||||
- Fix gas editor doubling-up on gas [#5820](https://github.com/paritytech/parity/pull/5820)
|
||||
- Information about used paths added to general output block [#5904](https://github.com/paritytech/parity/pull/5904)
|
||||
- Domain-locked web tokens. [#5894](https://github.com/paritytech/parity/pull/5894)
|
||||
- Removed panic handlers [#5895](https://github.com/paritytech/parity/pull/5895)
|
||||
- Latest changes from Rust RocksDB binding merged [#5905](https://github.com/paritytech/parity/pull/5905)
|
||||
- Adjust keyethereum/secp256 aliasses [#5903](https://github.com/paritytech/parity/pull/5903)
|
||||
- Keyethereum fs dependency [#5902](https://github.com/paritytech/parity/pull/5902)
|
||||
- Ethereum Classic Monetary Policy [#5741](https://github.com/paritytech/parity/pull/5741)
|
||||
- Initial token should allow full access. [#5873](https://github.com/paritytech/parity/pull/5873)
|
||||
- Fixed account selection for Dapps on public node [#5856](https://github.com/paritytech/parity/pull/5856)
|
||||
- blacklist bad snapshot manifest hashes upon failure [#5874](https://github.com/paritytech/parity/pull/5874)
|
||||
- Fix wrongly called timeouts [#5838](https://github.com/paritytech/parity/pull/5838)
|
||||
- ArchiveDB and other small fixes [#5867](https://github.com/paritytech/parity/pull/5867)
|
||||
- convert try!() to ? [#5866](https://github.com/paritytech/parity/pull/5866)
|
||||
- Make config file optional in systemd [#5847](https://github.com/paritytech/parity/pull/5847)
|
||||
- EIP-116 (214), [#4833](https://github.com/paritytech/parity/issues/4833) [#4851](https://github.com/paritytech/parity/pull/4851)
|
||||
- all executables are workspace members [#5865](https://github.com/paritytech/parity/pull/5865)
|
||||
- minor optimizations of the modexp builtin [#5860](https://github.com/paritytech/parity/pull/5860)
|
||||
- three small commits for HashDB and MemoryDB [#5766](https://github.com/paritytech/parity/pull/5766)
|
||||
- use rust 1.18's retain to boost the purge performance [#5801](https://github.com/paritytech/parity/pull/5801)
|
||||
- Allow IPFS server to accept POST requests [#5858](https://github.com/paritytech/parity/pull/5858)
|
||||
- Dutch i18n from [#5802](https://github.com/paritytech/parity/issues/5802) for master [#5836](https://github.com/paritytech/parity/pull/5836)
|
||||
- Typos in token deploy dapp ui [#5851](https://github.com/paritytech/parity/pull/5851)
|
||||
- A CLI flag to allow fast transaction signing when account is unlocked. [#5778](https://github.com/paritytech/parity/pull/5778)
|
||||
- Removing `additional` field from EVM instructions [#5821](https://github.com/paritytech/parity/pull/5821)
|
||||
- Don't fail on wrong log decoding [#5813](https://github.com/paritytech/parity/pull/5813)
|
||||
- Use randomized subscription ids for PubSub [#5756](https://github.com/paritytech/parity/pull/5756)
|
||||
- Fixed mem write for empty slice [#5827](https://github.com/paritytech/parity/pull/5827)
|
||||
- Fix party technologies [#5810](https://github.com/paritytech/parity/pull/5810)
|
||||
- Revert "Fixed mem write for empty slice" [#5826](https://github.com/paritytech/parity/pull/5826)
|
||||
- Fixed mem write for empty slice [#5825](https://github.com/paritytech/parity/pull/5825)
|
||||
- Fix JS tests [#5822](https://github.com/paritytech/parity/pull/5822)
|
||||
- Bump native-tls and openssl crates. [#5817](https://github.com/paritytech/parity/pull/5817)
|
||||
- Public node using WASM [#5734](https://github.com/paritytech/parity/pull/5734)
|
||||
- enforce block signer == author field in PoA [#5808](https://github.com/paritytech/parity/pull/5808)
|
||||
- Fix stack display in evmbin. [#5733](https://github.com/paritytech/parity/pull/5733)
|
||||
- Disable UI if it's not compiled in. [#5773](https://github.com/paritytech/parity/pull/5773)
|
||||
- Require phrase confirmation. [#5731](https://github.com/paritytech/parity/pull/5731)
|
||||
- Duration limit made optional for EthashParams [#5777](https://github.com/paritytech/parity/pull/5777)
|
||||
- Update Changelog for 1.6.8 [#5798](https://github.com/paritytech/parity/pull/5798)
|
||||
- Replace Ethcore comany name in T&C and some other places [#5796](https://github.com/paritytech/parity/pull/5796)
|
||||
- PubSub for IPC. [#5800](https://github.com/paritytech/parity/pull/5800)
|
||||
- Fix terminology distributed -> decentralized applications [#5797](https://github.com/paritytech/parity/pull/5797)
|
||||
- Disable compression for RLP strings [#5786](https://github.com/paritytech/parity/pull/5786)
|
||||
- update the source for the snapcraft package [#5781](https://github.com/paritytech/parity/pull/5781)
|
||||
- Fixed default UI port for mac installer [#5782](https://github.com/paritytech/parity/pull/5782)
|
||||
- Block invalid account name creation [#5784](https://github.com/paritytech/parity/pull/5784)
|
||||
- Update Cid/multihash/ring/tinykeccak [#5785](https://github.com/paritytech/parity/pull/5785)
|
||||
- use NULL_RLP, remove NULL_RLP_STATIC [#5742](https://github.com/paritytech/parity/pull/5742)
|
||||
- Blacklist empty phrase account. [#5730](https://github.com/paritytech/parity/pull/5730)
|
||||
- EIP-211 RETURNDATACOPY and RETURNDATASIZE [#5678](https://github.com/paritytech/parity/pull/5678)
|
||||
- Bump mio [#5763](https://github.com/paritytech/parity/pull/5763)
|
||||
- Fixing UI issues after UI server refactor [#5710](https://github.com/paritytech/parity/pull/5710)
|
||||
- Fix WS server expose issue. [#5728](https://github.com/paritytech/parity/pull/5728)
|
||||
- Fix local transactions without condition. [#5716](https://github.com/paritytech/parity/pull/5716)
|
||||
- Bump parity-wordlist. [#5748](https://github.com/paritytech/parity/pull/5748)
|
||||
- two small changes in evm [#5700](https://github.com/paritytech/parity/pull/5700)
|
||||
- Evmbin: JSON format printing pre-state. [#5712](https://github.com/paritytech/parity/pull/5712)
|
||||
- Recover from empty phrase in dev mode [#5698](https://github.com/paritytech/parity/pull/5698)
|
||||
- EIP-210 BLOCKHASH changes [#5505](https://github.com/paritytech/parity/pull/5505)
|
||||
- fixes typo [#5708](https://github.com/paritytech/parity/pull/5708)
|
||||
- Bump rocksdb [#5707](https://github.com/paritytech/parity/pull/5707)
|
||||
- Fixed --datadir option [#5697](https://github.com/paritytech/parity/pull/5697)
|
||||
- rpc -> weak to arc [#5688](https://github.com/paritytech/parity/pull/5688)
|
||||
- typo fix [#5699](https://github.com/paritytech/parity/pull/5699)
|
||||
- Revamping parity-evmbin [#5696](https://github.com/paritytech/parity/pull/5696)
|
||||
- Update dependencies and bigint api [#5685](https://github.com/paritytech/parity/pull/5685)
|
||||
- UI server refactoring [#5580](https://github.com/paritytech/parity/pull/5580)
|
||||
- Fix from/into electrum in ethkey [#5686](https://github.com/paritytech/parity/pull/5686)
|
||||
- Add unit tests [#5668](https://github.com/paritytech/parity/pull/5668)
|
||||
- Guanqun add unit tests [#5671](https://github.com/paritytech/parity/pull/5671)
|
||||
- Parity-PubSub as a separate API. [#5676](https://github.com/paritytech/parity/pull/5676)
|
||||
- EIP-140 REVERT opcode [#5477](https://github.com/paritytech/parity/pull/5477)
|
||||
- Update CHANGELOG for 1.6.7 [#5683](https://github.com/paritytech/parity/pull/5683)
|
||||
- Updated docs slightly. [#5674](https://github.com/paritytech/parity/pull/5674)
|
||||
- Fix build [#5684](https://github.com/paritytech/parity/pull/5684)
|
||||
- Back-references for the on-demand service [#5573](https://github.com/paritytech/parity/pull/5573)
|
||||
- Dynamically adjust PIP request costs based on gathered data [#5603](https://github.com/paritytech/parity/pull/5603)
|
||||
- use cargo workspace [#5601](https://github.com/paritytech/parity/pull/5601)
|
||||
- Latest headers Pub-Sub [#5655](https://github.com/paritytech/parity/pull/5655)
|
||||
- improved dockerfile builds [#5659](https://github.com/paritytech/parity/pull/5659)
|
||||
- Adding CLI options: port shift and unsafe expose. [#5677](https://github.com/paritytech/parity/pull/5677)
|
||||
- Report missing author in Aura [#5583](https://github.com/paritytech/parity/pull/5583)
|
||||
- typo fix [#5669](https://github.com/paritytech/parity/pull/5669)
|
||||
- Remove public middleware (temporary) [#5665](https://github.com/paritytech/parity/pull/5665)
|
||||
- Remove additional polyfill [#5663](https://github.com/paritytech/parity/pull/5663)
|
||||
- Importing accounts from files. [#5644](https://github.com/paritytech/parity/pull/5644)
|
||||
- remove the deprecated options in rustfmt.toml [#5616](https://github.com/paritytech/parity/pull/5616)
|
||||
- Update the Console dapp [#5602](https://github.com/paritytech/parity/pull/5602)
|
||||
- Create an account for chain=dev [#5612](https://github.com/paritytech/parity/pull/5612)
|
||||
- Use babel-runtime as opposed to babel-polyfill [#5662](https://github.com/paritytech/parity/pull/5662)
|
||||
- Connection dialog timestamp info [#5554](https://github.com/paritytech/parity/pull/5554)
|
||||
- use copy_from_slice instead of for loop [#5647](https://github.com/paritytech/parity/pull/5647)
|
||||
- Light friendly dapps [#5634](https://github.com/paritytech/parity/pull/5634)
|
||||
- Add Recover button to Accounts and warnings [#5645](https://github.com/paritytech/parity/pull/5645)
|
||||
- Update eth_sign docs. [#5631](https://github.com/paritytech/parity/pull/5631)
|
||||
- Proper signer Pub-Sub for pending requests. [#5594](https://github.com/paritytech/parity/pull/5594)
|
||||
- Bump bigint to 1.0.5 [#5641](https://github.com/paritytech/parity/pull/5641)
|
||||
- PoA warp implementation [#5488](https://github.com/paritytech/parity/pull/5488)
|
||||
- Improve on-demand dispatch and add support for batch requests [#5419](https://github.com/paritytech/parity/pull/5419)
|
||||
- Use default account for sending transactions [#5588](https://github.com/paritytech/parity/pull/5588)
|
||||
- Add peer management to the Status tab [#5566](https://github.com/paritytech/parity/pull/5566)
|
||||
- Add monotonic step transition [#5587](https://github.com/paritytech/parity/pull/5587)
|
||||
- Decrypting for external accounts. [#5581](https://github.com/paritytech/parity/pull/5581)
|
||||
- only enable warp sync when engine supports it [#5595](https://github.com/paritytech/parity/pull/5595)
|
||||
- fix the doc of installing rust [#5586](https://github.com/paritytech/parity/pull/5586)
|
||||
- Small fixes [#5584](https://github.com/paritytech/parity/pull/5584)
|
||||
- SecretStore: remove session on master node [#5545](https://github.com/paritytech/parity/pull/5545)
|
||||
- run-clean [#5607](https://github.com/paritytech/parity/pull/5607)
|
||||
- relicense RLP to MIT/Apache2 [#5591](https://github.com/paritytech/parity/pull/5591)
|
||||
- Fix eth_sign signature encoding. [#5597](https://github.com/paritytech/parity/pull/5597)
|
||||
- Check pending request on Node local transactions [#5564](https://github.com/paritytech/parity/pull/5564)
|
||||
- Add tooltips on ActionBar [#5562](https://github.com/paritytech/parity/pull/5562)
|
||||
- Can't deploy without compiling Contract [#5593](https://github.com/paritytech/parity/pull/5593)
|
||||
- Add a warning when node is syncing [#5565](https://github.com/paritytech/parity/pull/5565)
|
||||
- Update registry middleware [#5585](https://github.com/paritytech/parity/pull/5585)
|
||||
- Set block condition to BigNumber in MethodDecoding [#5592](https://github.com/paritytech/parity/pull/5592)
|
||||
- Load the sources immediately in Contract Dev [#5575](https://github.com/paritytech/parity/pull/5575)
|
||||
- Remove formal verification messages in Dev Contract [#5574](https://github.com/paritytech/parity/pull/5574)
|
||||
- Fix event params decoding when no names for parameters [#5567](https://github.com/paritytech/parity/pull/5567)
|
||||
- Do not convert to Dates twice [#5563](https://github.com/paritytech/parity/pull/5563)
|
||||
- Fix Multisig wallet settings [#5560](https://github.com/paritytech/parity/pull/5560)
|
||||
- Typo [#5547](https://github.com/paritytech/parity/pull/5547)
|
||||
- Generic PubSub implementation [#5456](https://github.com/paritytech/parity/pull/5456)
|
||||
- Fix CI paths. [#5570](https://github.com/paritytech/parity/pull/5570)
|
||||
- reorg into blocks before minimum history [#5558](https://github.com/paritytech/parity/pull/5558)
|
||||
- EIP-86 update [#5506](https://github.com/paritytech/parity/pull/5506)
|
||||
- Secretstore RPCs + integration [#5439](https://github.com/paritytech/parity/pull/5439)
|
||||
- Fixes Parity Bar position [#5557](https://github.com/paritytech/parity/pull/5557)
|
||||
- Fixes invalid log in BadgeReg events [#5556](https://github.com/paritytech/parity/pull/5556)
|
||||
- Fix issues in Contract Development view [#5555](https://github.com/paritytech/parity/pull/5555)
|
||||
- Added missing methods [#5542](https://github.com/paritytech/parity/pull/5542)
|
||||
- option to disable persistent txqueue [#5544](https://github.com/paritytech/parity/pull/5544)
|
||||
- Bump jsonrpc [#5552](https://github.com/paritytech/parity/pull/5552)
|
||||
- Retrieve block headers only for header-only info [#5480](https://github.com/paritytech/parity/pull/5480)
|
||||
- add snap to CI [#5519](https://github.com/paritytech/parity/pull/5519)
|
||||
- Pass additional data when reporting [#5527](https://github.com/paritytech/parity/pull/5527)
|
||||
- Calculate post-constructors state root in spec at load time [#5523](https://github.com/paritytech/parity/pull/5523)
|
||||
- Fix utf8 decoding [#5533](https://github.com/paritytech/parity/pull/5533)
|
||||
- Add CHANGELOG.md [#5513](https://github.com/paritytech/parity/pull/5513)
|
||||
- Change all occurrences of ethcore.io into parity.io [#5528](https://github.com/paritytech/parity/pull/5528)
|
||||
- Memory usage optimization [#5526](https://github.com/paritytech/parity/pull/5526)
|
||||
- Compose transaction RPC. [#5524](https://github.com/paritytech/parity/pull/5524)
|
||||
- Support external eth_sign [#5481](https://github.com/paritytech/parity/pull/5481)
|
||||
- Treat block numbers as strings, not BigNums. [#5449](https://github.com/paritytech/parity/pull/5449)
|
||||
- npm cleanups [#5512](https://github.com/paritytech/parity/pull/5512)
|
||||
- Export acc js [#4973](https://github.com/paritytech/parity/pull/4973)
|
||||
- YARN [#5395](https://github.com/paritytech/parity/pull/5395)
|
||||
- Fix linting issues [#5511](https://github.com/paritytech/parity/pull/5511)
|
||||
- Chinese Translation [#5460](https://github.com/paritytech/parity/pull/5460)
|
||||
- Fixing secretstore TODOs - part 2 [#5416](https://github.com/paritytech/parity/pull/5416)
|
||||
- fix json format of state snapshot [#5504](https://github.com/paritytech/parity/pull/5504)
|
||||
- Bump jsonrpc version [#5489](https://github.com/paritytech/parity/pull/5489)
|
||||
- Groundwork for generalized warp sync [#5454](https://github.com/paritytech/parity/pull/5454)
|
||||
- Add the packaging metadata to build the parity snap [#5496](https://github.com/paritytech/parity/pull/5496)
|
||||
- Cancel tx JS [#4958](https://github.com/paritytech/parity/pull/4958)
|
||||
- EIP-212 (bn128 curve pairing) [#5307](https://github.com/paritytech/parity/pull/5307)
|
||||
- fix panickers in tree-route [#5479](https://github.com/paritytech/parity/pull/5479)
|
||||
- Update links to etherscan.io [#5455](https://github.com/paritytech/parity/pull/5455)
|
||||
- Refresh UI on nodeKind changes, e.g. personal -> public [#5312](https://github.com/paritytech/parity/pull/5312)
|
||||
- Correct contract address for EIP-86 [#5473](https://github.com/paritytech/parity/pull/5473)
|
||||
- Force two decimals for USD conversion rate [#5471](https://github.com/paritytech/parity/pull/5471)
|
||||
- Refactoring of Tokens & Balances [#5372](https://github.com/paritytech/parity/pull/5372)
|
||||
- Background-repeat round [#5475](https://github.com/paritytech/parity/pull/5475)
|
||||
- nl i18n updated [#5461](https://github.com/paritytech/parity/pull/5461)
|
||||
- Show ETH value (even 0) if ETH transfer in transaction list [#5406](https://github.com/paritytech/parity/pull/5406)
|
||||
- Store the pending requests per network version [#5405](https://github.com/paritytech/parity/pull/5405)
|
||||
- Use in-memory database for tests [#5451](https://github.com/paritytech/parity/pull/5451)
|
||||
- WebSockets RPC server [#5425](https://github.com/paritytech/parity/pull/5425)
|
||||
- Added missing docs [#5452](https://github.com/paritytech/parity/pull/5452)
|
||||
- Tests and tweaks for public node middleware [#5417](https://github.com/paritytech/parity/pull/5417)
|
||||
- Fix removal of hash-mismatched files. [#5440](https://github.com/paritytech/parity/pull/5440)
|
||||
- parity_getBlockHeaderByNumber and LightFetch utility [#5383](https://github.com/paritytech/parity/pull/5383)
|
||||
- New state tests [#5418](https://github.com/paritytech/parity/pull/5418)
|
||||
- Fix buffer length for QR code gen. [#5447](https://github.com/paritytech/parity/pull/5447)
|
||||
- Add raw hash signing [#5423](https://github.com/paritytech/parity/pull/5423)
|
||||
- Filters and block RPCs for the light client [#5320](https://github.com/paritytech/parity/pull/5320)
|
||||
- Work around mismatch for QR checksum [#5374](https://github.com/paritytech/parity/pull/5374)
|
||||
- easy to use conversion from and to string for ethstore::Crypto [#5437](https://github.com/paritytech/parity/pull/5437)
|
||||
- Tendermint fixes [#5415](https://github.com/paritytech/parity/pull/5415)
|
||||
- Adrianbrink lightclientcache branch. [#5428](https://github.com/paritytech/parity/pull/5428)
|
||||
- Add caching to HeaderChain struct [#5403](https://github.com/paritytech/parity/pull/5403)
|
||||
- Add decryption to the UI (in the Signer) [#5422](https://github.com/paritytech/parity/pull/5422)
|
||||
- Add CIDv0 RPC [#5414](https://github.com/paritytech/parity/pull/5414)
|
||||
- Updating documentation for RPCs [#5392](https://github.com/paritytech/parity/pull/5392)
|
||||
- Fixing secretstore TODOs - part 1 [#5386](https://github.com/paritytech/parity/pull/5386)
|
||||
- Fixing disappearing content. [#5399](https://github.com/paritytech/parity/pull/5399)
|
||||
- Snapshot chunks packed by size [#5318](https://github.com/paritytech/parity/pull/5318)
|
||||
- APIs wildcards and simple arithmetic. [#5402](https://github.com/paritytech/parity/pull/5402)
|
||||
- Fixing compilation without dapps. [#5410](https://github.com/paritytech/parity/pull/5410)
|
||||
- Don't use port 8080 anymore [#5397](https://github.com/paritytech/parity/pull/5397)
|
||||
- Quick'n'dirty CLI for the light client [#5002](https://github.com/paritytech/parity/pull/5002)
|
||||
- set gas limit before proving transactions [#5401](https://github.com/paritytech/parity/pull/5401)
|
||||
- Public node: perf and fixes [#5390](https://github.com/paritytech/parity/pull/5390)
|
||||
- Straight download path in the readme [#5393](https://github.com/paritytech/parity/pull/5393)
|
||||
- On-chain ACL checker for secretstore [#5015](https://github.com/paritytech/parity/pull/5015)
|
||||
- Allow empty-encoded values from QR encoding [#5385](https://github.com/paritytech/parity/pull/5385)
|
||||
- Update npm build for new inclusions [#5381](https://github.com/paritytech/parity/pull/5381)
|
||||
- Fix for Ubuntu Dockerfile [#5356](https://github.com/paritytech/parity/pull/5356)
|
||||
- Secretstore over network [#4974](https://github.com/paritytech/parity/pull/4974)
|
||||
- Dapps and RPC server merge [#5365](https://github.com/paritytech/parity/pull/5365)
|
||||
- trigger js build release [#5379](https://github.com/paritytech/parity/pull/5379)
|
||||
- Update expanse json with fork at block 600000 [#5351](https://github.com/paritytech/parity/pull/5351)
|
||||
- Futures-based native wrappers for contract ABIs [#5341](https://github.com/paritytech/parity/pull/5341)
|
||||
- Kovan warp sync fixed [#5337](https://github.com/paritytech/parity/pull/5337)
|
||||
- Aura eip155 validation transition [#5362](https://github.com/paritytech/parity/pull/5362)
|
||||
- Shared wordlist for brain wallets [#5331](https://github.com/paritytech/parity/pull/5331)
|
||||
- Allow signing via Qr [#4881](https://github.com/paritytech/parity/pull/4881)
|
||||
- Allow entry of url or hash for DappReg meta [#5360](https://github.com/paritytech/parity/pull/5360)
|
||||
- Adjust tx overlay colours [#5353](https://github.com/paritytech/parity/pull/5353)
|
||||
- Add ability to disallow API subscriptions [#5366](https://github.com/paritytech/parity/pull/5366)
|
||||
- EIP-213 (bn128 curve operations) [#4999](https://github.com/paritytech/parity/pull/4999)
|
||||
- Fix analize output file name [#5357](https://github.com/paritytech/parity/pull/5357)
|
||||
- Add default eip155 validation [#5346](https://github.com/paritytech/parity/pull/5346)
|
||||
- Add new seed nodes for Classic chain [#5345](https://github.com/paritytech/parity/pull/5345)
|
||||
- Shared wordlist for frontend [#5336](https://github.com/paritytech/parity/pull/5336)
|
||||
- fix rpc tests [#5338](https://github.com/paritytech/parity/pull/5338)
|
||||
- Public node with accounts and signing in Frontend [#5304](https://github.com/paritytech/parity/pull/5304)
|
||||
- Rename Status/Status -> Status/NodeStatus [#5332](https://github.com/paritytech/parity/pull/5332)
|
||||
- Updating paths to repos. [#5330](https://github.com/paritytech/parity/pull/5330)
|
||||
- Separate status for canceled local transactions. [#5319](https://github.com/paritytech/parity/pull/5319)
|
||||
- Cleanup the Status View [#5317](https://github.com/paritytech/parity/pull/5317)
|
||||
- Update UI minimised requests [#5324](https://github.com/paritytech/parity/pull/5324)
|
||||
- Order signer transactions FIFO [#5321](https://github.com/paritytech/parity/pull/5321)
|
||||
- updating dependencies [#5028](https://github.com/paritytech/parity/pull/5028)
|
||||
- Minimise transactions progress [#4942](https://github.com/paritytech/parity/pull/4942)
|
||||
- Fix eth_sign showing as wallet account [#5309](https://github.com/paritytech/parity/pull/5309)
|
||||
- Ropsten revival [#5302](https://github.com/paritytech/parity/pull/5302)
|
||||
- Strict validation transitions [#4988](https://github.com/paritytech/parity/pull/4988)
|
||||
- Fix default list sorting [#5303](https://github.com/paritytech/parity/pull/5303)
|
||||
- Use unique owners for multisig wallets [#5298](https://github.com/paritytech/parity/pull/5298)
|
||||
- Copy all existing i18n strings into zh (as-is translation aid) [#5305](https://github.com/paritytech/parity/pull/5305)
|
||||
- Fix booleans in Typedinput [#5295](https://github.com/paritytech/parity/pull/5295)
|
||||
- node kind RPC [#5025](https://github.com/paritytech/parity/pull/5025)
|
||||
- Fix the use of MobX in playground [#5294](https://github.com/paritytech/parity/pull/5294)
|
||||
- Fine grained snapshot chunking [#5019](https://github.com/paritytech/parity/pull/5019)
|
||||
- Add lint:i18n to find missing & extra keys [#5290](https://github.com/paritytech/parity/pull/5290)
|
||||
- Scaffolding for zh translations, including first-round by @btceth [#5289](https://github.com/paritytech/parity/pull/5289)
|
||||
- JS package bumps [#5287](https://github.com/paritytech/parity/pull/5287)
|
||||
- Auto-extract new i18n strings (update) [#5288](https://github.com/paritytech/parity/pull/5288)
|
||||
- eip100b [#5027](https://github.com/paritytech/parity/pull/5027)
|
||||
- Set earliest era in snapshot restoration [#5021](https://github.com/paritytech/parity/pull/5021)
|
||||
- Avoid clogging up tmp when updater dir has bad permissions. [#5024](https://github.com/paritytech/parity/pull/5024)
|
||||
- Resilient warp sync [#5018](https://github.com/paritytech/parity/pull/5018)
|
||||
- Create webpack analysis files (size) [#5009](https://github.com/paritytech/parity/pull/5009)
|
||||
- Dispatch an open event on drag of Parity Bar [#4987](https://github.com/paritytech/parity/pull/4987)
|
||||
- Various installer and tray apps fixes [#4970](https://github.com/paritytech/parity/pull/4970)
|
||||
- Export account RPC [#4967](https://github.com/paritytech/parity/pull/4967)
|
||||
- Switching ValidatorSet [#4961](https://github.com/paritytech/parity/pull/4961)
|
||||
- Implement PIP messages, request builder, and handlers [#4945](https://github.com/paritytech/parity/pull/4945)
|
||||
- auto lint [#5003](https://github.com/paritytech/parity/pull/5003)
|
||||
- Fix FireFox overflows [#5000](https://github.com/paritytech/parity/pull/5000)
|
||||
- Show busy indicator, focus first field in password change [#4997](https://github.com/paritytech/parity/pull/4997)
|
||||
- Consistent store naming in the Signer components [#4996](https://github.com/paritytech/parity/pull/4996)
|
||||
- second (and last) part of rlp refactor [#4901](https://github.com/paritytech/parity/pull/4901)
|
||||
- Double click to select account creation type [#4986](https://github.com/paritytech/parity/pull/4986)
|
||||
- Fixes to the Registry dapp [#4984](https://github.com/paritytech/parity/pull/4984)
|
||||
- Extend api.util [#4979](https://github.com/paritytech/parity/pull/4979)
|
||||
- Updating JSON-RPC crates [#4934](https://github.com/paritytech/parity/pull/4934)
|
||||
- splitting part of util into smaller crates [#4956](https://github.com/paritytech/parity/pull/4956)
|
||||
- Updating syntex et al [#4983](https://github.com/paritytech/parity/pull/4983)
|
||||
- EIP198 and built-in activation [#4926](https://github.com/paritytech/parity/pull/4926)
|
||||
- Fix MethodDecoding for Arrays [#4977](https://github.com/paritytech/parity/pull/4977)
|
||||
- Try to fix WS race condition connection [#4976](https://github.com/paritytech/parity/pull/4976)
|
||||
- eth_sign where account === undefined [#4964](https://github.com/paritytech/parity/pull/4964)
|
||||
- Fix references to api outside of `parity.js` [#4981](https://github.com/paritytech/parity/pull/4981)
|
||||
- Fix Password Dialog form overflow [#4968](https://github.com/paritytech/parity/pull/4968)
|
||||
- Changing Mutex into RwLock for transaction queue [#4951](https://github.com/paritytech/parity/pull/4951)
|
||||
- Disable max seal period for external sealing [#4927](https://github.com/paritytech/parity/pull/4927)
|
||||
- Attach hardware wallets already in addressbook [#4912](https://github.com/paritytech/parity/pull/4912)
|
||||
- rlp serialization refactor [#4873](https://github.com/paritytech/parity/pull/4873)
|
||||
- Bump nanomsg [#4965](https://github.com/paritytech/parity/pull/4965)
|
||||
- Fixed multi-chunk ledger transactions on windows [#4960](https://github.com/paritytech/parity/pull/4960)
|
||||
- Fix outputs in Contract Constant Queries [#4953](https://github.com/paritytech/parity/pull/4953)
|
||||
- systemd: Start parity after network.target [#4952](https://github.com/paritytech/parity/pull/4952)
|
||||
- Remove transaction RPC [#4949](https://github.com/paritytech/parity/pull/4949)
|
||||
- Swap out ethcore.io url for parity.io [#4947](https://github.com/paritytech/parity/pull/4947)
|
||||
- Don't remove confirmed requests to early. [#4933](https://github.com/paritytech/parity/pull/4933)
|
||||
- Ensure sealing work enabled in miner once subscribers added [#4930](https://github.com/paritytech/parity/pull/4930)
|
||||
- Add z-index to small modals as well [#4923](https://github.com/paritytech/parity/pull/4923)
|
||||
- Bump nanomsg [#4946](https://github.com/paritytech/parity/pull/4946)
|
||||
- Bumping multihash and libc [#4943](https://github.com/paritytech/parity/pull/4943)
|
||||
- Edit ETH value, gas and gas price in Contract Deployment [#4919](https://github.com/paritytech/parity/pull/4919)
|
||||
- Add ability to configure Secure API [#4922](https://github.com/paritytech/parity/pull/4922)
|
||||
- Add Token image from URL [#4916](https://github.com/paritytech/parity/pull/4916)
|
||||
- Use the registry fee in Token Deployment dapp [#4915](https://github.com/paritytech/parity/pull/4915)
|
||||
- Add reseal max period [#4903](https://github.com/paritytech/parity/pull/4903)
|
||||
- Detect rust compiler version in Parity build script, closes 4742 [#4907](https://github.com/paritytech/parity/pull/4907)
|
||||
- Add Vaults logic to First Run [#4914](https://github.com/paritytech/parity/pull/4914)
|
||||
- Updated gcc and rayon crates to remove outdated num_cpus dependency [#4909](https://github.com/paritytech/parity/pull/4909)
|
||||
- Renaming evm binary to avoid conflicts. [#4899](https://github.com/paritytech/parity/pull/4899)
|
||||
- Better error handling for traces RPC [#4849](https://github.com/paritytech/parity/pull/4849)
|
||||
- Safari SectionList fix [#4895](https://github.com/paritytech/parity/pull/4895)
|
||||
- Safari Dialog scrolling fix [#4893](https://github.com/paritytech/parity/pull/4893)
|
||||
- Spelling :) [#4900](https://github.com/paritytech/parity/pull/4900)
|
||||
- Additional kovan params [#4892](https://github.com/paritytech/parity/pull/4892)
|
||||
- trigger js-precompiled build [#4898](https://github.com/paritytech/parity/pull/4898)
|
||||
- Recalculate receipt roots in close_and_lock [#4884](https://github.com/paritytech/parity/pull/4884)
|
||||
- Reload UI on network switch [#4864](https://github.com/paritytech/parity/pull/4864)
|
||||
- Update parity-ui-precompiled with branch [#4850](https://github.com/paritytech/parity/pull/4850)
|
||||
- OSX Installer is no longer experimental [#4882](https://github.com/paritytech/parity/pull/4882)
|
||||
- Chain-selection from UI [#4859](https://github.com/paritytech/parity/pull/4859)
|
||||
- removed redundant (and unused) FromJson trait [#4871](https://github.com/paritytech/parity/pull/4871)
|
||||
- fix typos and grammar [#4880](https://github.com/paritytech/parity/pull/4880)
|
||||
- Remove old experimental remote-db code [#4872](https://github.com/paritytech/parity/pull/4872)
|
||||
- removed redundant FixedHash trait, fixes [#4029](https://github.com/paritytech/parity/issues/4029) [#4866](https://github.com/paritytech/parity/pull/4866)
|
||||
- Reference JSON-RPC more changes-friendly [#4870](https://github.com/paritytech/parity/pull/4870)
|
||||
- Better handling of Solidity compliation [#4860](https://github.com/paritytech/parity/pull/4860)
|
||||
- Go through contract links in Transaction List display [#4863](https://github.com/paritytech/parity/pull/4863)
|
||||
- Fix Gas Price Selector Tooltips [#4865](https://github.com/paritytech/parity/pull/4865)
|
||||
- Fix auto-updater [#4867](https://github.com/paritytech/parity/pull/4867)
|
||||
- Make the UI work offline [#4861](https://github.com/paritytech/parity/pull/4861)
|
||||
- Subscribe to accounts info in Signer / ParityBar [#4856](https://github.com/paritytech/parity/pull/4856)
|
||||
- Don't link libsnappy explicitly [#4841](https://github.com/paritytech/parity/pull/4841)
|
||||
- Fix paste in Inputs [#4854](https://github.com/paritytech/parity/pull/4854)
|
||||
- Extract i18n from shared UI components [#4834](https://github.com/paritytech/parity/pull/4834)
|
||||
- Fix paste in Inputs [#4844](https://github.com/paritytech/parity/pull/4844)
|
||||
- Pull contract deployment title from available steps [#4848](https://github.com/paritytech/parity/pull/4848)
|
||||
- Supress USB error message [#4839](https://github.com/paritytech/parity/pull/4839)
|
||||
- Fix getTransactionCount in --geth mode [#4837](https://github.com/paritytech/parity/pull/4837)
|
||||
- CI: test coverage (for core and js) [#4832](https://github.com/paritytech/parity/pull/4832)
|
||||
- Lowering threshold for transactions above gas limit [#4831](https://github.com/paritytech/parity/pull/4831)
|
||||
- Fix TxViewer when no `to` (contract deployment) [#4847](https://github.com/paritytech/parity/pull/4847)
|
||||
- Fix method decoding [#4845](https://github.com/paritytech/parity/pull/4845)
|
||||
- Add React Hot Reload to dapps + TokenDeploy fix [#4846](https://github.com/paritytech/parity/pull/4846)
|
||||
- Dapps show multiple times in some cases [#4843](https://github.com/paritytech/parity/pull/4843)
|
||||
- Fixes to the Registry dapp [#4838](https://github.com/paritytech/parity/pull/4838)
|
||||
- Show token icons on list summary pages [#4826](https://github.com/paritytech/parity/pull/4826)
|
||||
- Calibrate step before rejection [#4800](https://github.com/paritytech/parity/pull/4800)
|
||||
- Add replay protection [#4808](https://github.com/paritytech/parity/pull/4808)
|
||||
- Better icon on windows [#4804](https://github.com/paritytech/parity/pull/4804)
|
||||
- Better logic for contract deployments detection [#4821](https://github.com/paritytech/parity/pull/4821)
|
||||
- Fix wrong default values for contract queries inputs [#4819](https://github.com/paritytech/parity/pull/4819)
|
||||
- Adjust selection colours/display [#4811](https://github.com/paritytech/parity/pull/4811)
|
||||
- Update the Wallet Library Registry key [#4817](https://github.com/paritytech/parity/pull/4817)
|
||||
- Update Wallet to new Wallet Code [#4805](https://github.com/paritytech/parity/pull/4805)
|
||||
- [Docs: Parity Wallet](https://wiki.parity.io/Parity-Wallet)
|
||||
- [Docs: How to customize Parity UI?](https://wiki.parity.io/FAQ-Customize-Parity-UI.html)
|
||||
- [Github: Parity-JS](https://github.com/parity-js)
|
||||
|
||||
### Previous releases
|
||||
### Introducing the Wasm VM
|
||||
|
||||
- [CHANGELOG-1.6](docs/CHANGELOG-1.6.md)
|
||||
- [CHANGELOG-1.5](docs/CHANGELOG-1.5.md)
|
||||
- [CHANGELOG-1.4](docs/CHANGELOG-1.4.md)
|
||||
- [CHANGELOG-1.3](docs/CHANGELOG-1.3.md)
|
||||
- [CHANGELOG-1.2](docs/CHANGELOG-1.2.md)
|
||||
- [CHANGELOG-1.1](docs/CHANGELOG-1.1.md)
|
||||
- [CHANGELOG-1.0](docs/CHANGELOG-1.0.md)
|
||||
- [CHANGELOG-0.9](docs/CHANGELOG-0.9.md)
|
||||
We are excited to announce support for **Wasm Smart Contracts on Kovan network**. The hard-fork to activate the Wasm-VM will take place on block `6_600_000`.
|
||||
|
||||
To enable Wasm contracts on your custom network, just schedule a `wasmActivationTransition` at your favorite block number (e.g., `42`, `666`, or `0xbada55`). To hack your first Wasm smart contracts in Rust, have a look at the [Parity Wasm Tutorials](https://github.com/paritytech/pwasm-tutorial).
|
||||
|
||||
Further reading:
|
||||
|
||||
- [Docs: WebAssembly (wasm)](https://wiki.parity.io/WebAssembly-Home)
|
||||
- [Docs: Wasm VM Design](https://wiki.parity.io/WebAssembly-Design)
|
||||
- [Docs: Wasm tutorials and examples](https://wiki.parity.io/WebAssembly-Links)
|
||||
|
||||
### Empty step messages in PoA
|
||||
|
||||
To **reduce blockchain bloat, proof-of-authority networks can now enable _empty step messages_ which replace empty blocks**. Each step message will be signed and broadcasted by the issuing authorities, and included and rewarded in the next non-empty block.
|
||||
|
||||
To enable empty step messages, set the `emptyStepsTransition` to your favorite block number. You can also specify a maximum number of empty steps with `maximumEmptySteps` in your chain spec.
|
||||
|
||||
### Other noteworthy changes
|
||||
|
||||
We removed the old database migrations from 2016. In case you upgrade Parity from a really, really old version, you will have to reset your database manually first with `parity <options> db kill`.
|
||||
|
||||
We fixed DELEGATECALL `from` and `to` fields, see [#7166](https://github.com/paritytech/parity/issues/7166).
|
||||
|
||||
We reduced the default USD per transaction value to 0.0001. Thanks, @MysticRyuujin!
|
||||
|
||||
The Musicoin chain is now enabled with Byzantium features starting at block `2_222_222`.
|
||||
|
||||
### Overview of all changes included
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Re-enable signer, even with no UI. ([#8167](https://github.com/paritytech/parity/pull/8167)) ([#8168](https://github.com/paritytech/parity/pull/8168))
|
||||
- Re-enable signer, even with no UI.
|
||||
- Fix message.
|
||||
- Beta Backports ([#8136](https://github.com/paritytech/parity/pull/8136))
|
||||
- Support parity protocol. ([#8035](https://github.com/paritytech/parity/pull/8035))
|
||||
- updater: apply exponential backoff after download failure ([#8059](https://github.com/paritytech/parity/pull/8059))
|
||||
- updater: apply exponential backoff after download failure
|
||||
- updater: reset backoff on new release
|
||||
- Max code size on Kovan ([#8067](https://github.com/paritytech/parity/pull/8067))
|
||||
- Enable code size limit on kovan
|
||||
- Fix formatting.
|
||||
- Limit incoming connections. ([#8060](https://github.com/paritytech/parity/pull/8060))
|
||||
- Limit ingress connections
|
||||
- Optimized handshakes logging
|
||||
- WASM libraries bump ([#7970](https://github.com/paritytech/parity/pull/7970))
|
||||
- update wasmi, parity-wasm, wasm-utils to latest version
|
||||
- Update to new wasmi & error handling
|
||||
- also utilize new stack limiter
|
||||
- fix typo
|
||||
- replace dependency url
|
||||
- Cargo.lock update
|
||||
- add some dos protection ([#8084](https://github.com/paritytech/parity/pull/8084))
|
||||
- revert removing blooms ([#8066](https://github.com/paritytech/parity/pull/8066))
|
||||
- Revert "fix traces, removed bloomchain crate, closes [#7228](https://github.com/paritytech/parity/issues/7228), closes [#7167](https://github.com/paritytech/parity/issues/7167)"
|
||||
- Revert "fixed broken logs ([#7934](https://github.com/paritytech/parity/pull/7934))"
|
||||
- fixed broken logs
|
||||
- bring back old lock order
|
||||
- remove migration v13
|
||||
- revert CURRENT_VERSION to 12 in migration.rs
|
||||
- more dos protection ([#8104](https://github.com/paritytech/parity/pull/8104))
|
||||
- Const time comparison ([#8113](https://github.com/paritytech/parity/pull/8113))
|
||||
- Use `subtle::slices_equal` for constant time comparison.
|
||||
- Also update the existing version of subtle in `ethcrypto` from 0.1 to 0.5
|
||||
- Test specifically for InvalidPassword error.
|
||||
- fix trace filter returning returning unrelated reward calls, closes #8070 ([#8098](https://github.com/paritytech/parity/pull/8098))
|
||||
- network: init discovery using healthy nodes ([#8061](https://github.com/paritytech/parity/pull/8061))
|
||||
- network: init discovery using healthy nodes
|
||||
- network: fix style grumble
|
||||
- network: fix typo
|
||||
- Postpone Kovan hard fork ([#8137](https://github.com/paritytech/parity/pull/8137))
|
||||
- ethcore: postpone Kovan hard fork
|
||||
- util: update version fork metadata
|
||||
- Disable UI by default. ([#8105](https://github.com/paritytech/parity/pull/8105))
|
||||
- dapps: update parity-ui dependencies ([#8160](https://github.com/paritytech/parity/pull/8160))
|
||||
- Probe changes one step deeper ([#8134](https://github.com/paritytech/parity/pull/8134)) ([#8135](https://github.com/paritytech/parity/pull/8135))
|
||||
- Beta backports ([#8053](https://github.com/paritytech/parity/pull/8053))
|
||||
- CI: Fix cargo cache ([#7968](https://github.com/paritytech/parity/pull/7968))
|
||||
- Fix cache
|
||||
- Only clean locked cargo cache on windows
|
||||
- fixed ethstore sign ([#8026](https://github.com/paritytech/parity/pull/8026))
|
||||
- fixed parsing ethash seals and verify_block_undordered ([#8031](https://github.com/paritytech/parity/pull/8031))
|
||||
- fix for verify_block_basic crashing on invalid transaction rlp ([#8032](https://github.com/paritytech/parity/pull/8032))
|
||||
- fix cache & snapcraft CI build ([#8052](https://github.com/paritytech/parity/pull/8052))
|
||||
- Add MCIP-6 Byzyantium transition to Musicoin spec ([#7841](https://github.com/paritytech/parity/pull/7841))
|
||||
- Add test chain spec for musicoin byzantium testnet
|
||||
- Add MCIP-6 Byzyantium transition to Musicoin spec
|
||||
- Update mcip6_byz.json
|
||||
- ethcore: update musicoin byzantium block number
|
||||
- ethcore: update musicoin bootnodes
|
||||
- Update musicoin.json
|
||||
- More bootnodes.
|
||||
- Make 1.10 beta ([#8022](https://github.com/paritytech/parity/pull/8022))
|
||||
- Make 1.10 beta
|
||||
- Fix gitlab builds
|
||||
- SecretStore: secretstore_generateDocumentKey RPC ([#7864](https://github.com/paritytech/parity/pull/7864))
|
||||
- SecretStore: ECDSA session for cases when 2*t < N ([#7739](https://github.com/paritytech/parity/pull/7739))
|
||||
- bump tiny-keccak ([#8019](https://github.com/paritytech/parity/pull/8019))
|
||||
- Remove un-necessary comment ([#8014](https://github.com/paritytech/parity/pull/8014))
|
||||
- clean up account fmt::Debug ([#7983](https://github.com/paritytech/parity/pull/7983))
|
||||
- improve quality of vote_collector module ([#7984](https://github.com/paritytech/parity/pull/7984))
|
||||
- ExecutedBlock cleanup ([#7991](https://github.com/paritytech/parity/pull/7991))
|
||||
- Hardware-wallet/usb-subscribe-refactor ([#7860](https://github.com/paritytech/parity/pull/7860))
|
||||
- remove wildcard imports from views, make tests more idiomatic ([#7986](https://github.com/paritytech/parity/pull/7986))
|
||||
- moved PerfTimer to a separate crate - "trace-time" ([#7985](https://github.com/paritytech/parity/pull/7985))
|
||||
- clean up ethcore::spec module imports ([#7990](https://github.com/paritytech/parity/pull/7990))
|
||||
- rpc: don't include current block in new_block_filter ([#7982](https://github.com/paritytech/parity/pull/7982))
|
||||
- fix traces, removed bloomchain crate ([#7979](https://github.com/paritytech/parity/pull/7979))
|
||||
- simplify compression and move it out of rlp crate ([#7957](https://github.com/paritytech/parity/pull/7957))
|
||||
- removed old migrations ([#7974](https://github.com/paritytech/parity/pull/7974))
|
||||
- Reject too large packets in snapshot sync. ([#7977](https://github.com/paritytech/parity/pull/7977))
|
||||
- fixed broken logs ([#7934](https://github.com/paritytech/parity/pull/7934))
|
||||
- Increase max download limit to 128MB ([#7965](https://github.com/paritytech/parity/pull/7965))
|
||||
- Calculate proper keccak256/sha3 using parity. ([#7953](https://github.com/paritytech/parity/pull/7953))
|
||||
- Add changelog for 1.8.10 stable and 1.9.3 beta ([#7947](https://github.com/paritytech/parity/pull/7947))
|
||||
- kvdb-rocksdb: remove buffered operations when committing transaction ([#7950](https://github.com/paritytech/parity/pull/7950))
|
||||
- Bump WebSockets ([#7952](https://github.com/paritytech/parity/pull/7952))
|
||||
- removed redundant Bloom conversions ([#7932](https://github.com/paritytech/parity/pull/7932))
|
||||
- simplify RefInfo fmt ([#7929](https://github.com/paritytech/parity/pull/7929))
|
||||
- Kovan WASM fork code ([#7849](https://github.com/paritytech/parity/pull/7849))
|
||||
- bring back trie and triehash benches ([#7926](https://github.com/paritytech/parity/pull/7926))
|
||||
- removed redundant PodAccount::new method ([#7928](https://github.com/paritytech/parity/pull/7928))
|
||||
- removed dummy wrapper structure - LogGroupPosition ([#7922](https://github.com/paritytech/parity/pull/7922))
|
||||
- spec: Validate required divisor fields are not 0 ([#7933](https://github.com/paritytech/parity/pull/7933))
|
||||
- simplify Client::filter_traces method ([#7936](https://github.com/paritytech/parity/pull/7936))
|
||||
- gitlab cache ([#7921](https://github.com/paritytech/parity/pull/7921))
|
||||
- Fix a division by zero in light client RPC handler ([#7917](https://github.com/paritytech/parity/pull/7917))
|
||||
- triehash optimisations ([#7920](https://github.com/paritytech/parity/pull/7920))
|
||||
- removed redundant Blockchain::db method ([#7919](https://github.com/paritytech/parity/pull/7919))
|
||||
- removed redundant Blockchain::rewind method ([#7918](https://github.com/paritytech/parity/pull/7918))
|
||||
- Pending transactions subscription ([#7906](https://github.com/paritytech/parity/pull/7906))
|
||||
- removed redundant otry! macro from ethcore ([#7916](https://github.com/paritytech/parity/pull/7916))
|
||||
- Make block generator easier to use ([#7888](https://github.com/paritytech/parity/pull/7888))
|
||||
- ECIP 1041 - Remove Difficulty Bomb ([#7905](https://github.com/paritytech/parity/pull/7905))
|
||||
- Fix CSP for dapps that require eval. ([#7867](https://github.com/paritytech/parity/pull/7867))
|
||||
- Fix gitlab ([#7901](https://github.com/paritytech/parity/pull/7901))
|
||||
- Gitlb snap master patch ([#7900](https://github.com/paritytech/parity/pull/7900))
|
||||
- fix snap build master ([#7896](https://github.com/paritytech/parity/pull/7896))
|
||||
- Fix wallet import ([#7873](https://github.com/paritytech/parity/pull/7873))
|
||||
- Fix snapcraft nightly ([#7884](https://github.com/paritytech/parity/pull/7884))
|
||||
- Add a timeout for light client sync requests ([#7848](https://github.com/paritytech/parity/pull/7848))
|
||||
- SecretStore: fixed test ([#7878](https://github.com/paritytech/parity/pull/7878))
|
||||
- Fix checksums and auto-update push ([#7846](https://github.com/paritytech/parity/pull/7846))
|
||||
- Forward-port snap fixes ([#7831](https://github.com/paritytech/parity/pull/7831))
|
||||
- Update gitlab-test.sh ([#7883](https://github.com/paritytech/parity/pull/7883))
|
||||
- Fix installer binary names for macos and windows ([#7881](https://github.com/paritytech/parity/pull/7881))
|
||||
- Fix string typo: "develoopment" -> "development" ([#7874](https://github.com/paritytech/parity/pull/7874))
|
||||
- Update the instructions to install the stable snap ([#7876](https://github.com/paritytech/parity/pull/7876))
|
||||
- SecretStore: 'broadcast' decryption session ([#7843](https://github.com/paritytech/parity/pull/7843))
|
||||
- Flush keyfiles. Resolves #7632 ([#7868](https://github.com/paritytech/parity/pull/7868))
|
||||
- Read registry_address from given block ([#7866](https://github.com/paritytech/parity/pull/7866))
|
||||
- Clean up docs formatting for Wasm runtime ([#7869](https://github.com/paritytech/parity/pull/7869))
|
||||
- WASM: Disable internal memory ([#7842](https://github.com/paritytech/parity/pull/7842))
|
||||
- Update gitlab-build.sh ([#7855](https://github.com/paritytech/parity/pull/7855))
|
||||
- ethabi version 5 ([#7723](https://github.com/paritytech/parity/pull/7723))
|
||||
- Light client: randomize the peer we dispatch requests to ([#7844](https://github.com/paritytech/parity/pull/7844))
|
||||
- Store updater metadata in a single place ([#7832](https://github.com/paritytech/parity/pull/7832))
|
||||
- Add new EF ropstens nodes. ([#7824](https://github.com/paritytech/parity/pull/7824))
|
||||
- refactor stratum to remove retain cycle ([#7827](https://github.com/paritytech/parity/pull/7827))
|
||||
- Bump jsonrpc. ([#7828](https://github.com/paritytech/parity/pull/7828))
|
||||
- Add binary identifiers and sha256sum to builds ([#7830](https://github.com/paritytech/parity/pull/7830))
|
||||
- Update references to UI shell & wallet ([#7808](https://github.com/paritytech/parity/pull/7808))
|
||||
- Adjust storage update evm-style ([#7812](https://github.com/paritytech/parity/pull/7812))
|
||||
- Updated WASM Runtime & new interpreter (wasmi) ([#7796](https://github.com/paritytech/parity/pull/7796))
|
||||
- SecretStore: ignore removed authorities when running auto-migration ([#7674](https://github.com/paritytech/parity/pull/7674))
|
||||
- Fix build ([#7807](https://github.com/paritytech/parity/pull/7807))
|
||||
- Move js & js-old code to github.com/parity-js ([#7685](https://github.com/paritytech/parity/pull/7685))
|
||||
- More changelogs :) ([#7782](https://github.com/paritytech/parity/pull/7782))
|
||||
- Actualized API set in help ([#7790](https://github.com/paritytech/parity/pull/7790))
|
||||
- Removed obsolete file ([#7788](https://github.com/paritytech/parity/pull/7788))
|
||||
- Update ropsten bootnodes ([#7776](https://github.com/paritytech/parity/pull/7776))
|
||||
- CHANGELOG for 1.9.1 and 1.8.8 ([#7775](https://github.com/paritytech/parity/pull/7775))
|
||||
- Enable byzantium features on non-ethash chains ([#7753](https://github.com/paritytech/parity/pull/7753))
|
||||
- Fix client not being dropped on shutdown ([#7695](https://github.com/paritytech/parity/pull/7695))
|
||||
- Filter-out nodes.json ([#7716](https://github.com/paritytech/parity/pull/7716))
|
||||
- Removes redundant parentheses ([#7721](https://github.com/paritytech/parity/pull/7721))
|
||||
- Transaction-pool fixes ([#7741](https://github.com/paritytech/parity/pull/7741))
|
||||
- More visible download link in README.md ([#7707](https://github.com/paritytech/parity/pull/7707))
|
||||
- Changelog for 1.9.0 ([#7664](https://github.com/paritytech/parity/pull/7664))
|
||||
- Add scroll when too many accounts ([#7677](https://github.com/paritytech/parity/pull/7677))
|
||||
- SecretStore: return HTTP 403 (access denied) if consensus is unreachable ([#7656](https://github.com/paritytech/parity/pull/7656))
|
||||
- Moved StopGaurd to it's own crate ([#7635](https://github.com/paritytech/parity/pull/7635))
|
||||
|
||||
## Previous releases
|
||||
|
||||
- [CHANGELOG-1.9](docs/CHANGELOG-1.9.md) (_stable_)
|
||||
- [CHANGELOG-1.8](docs/CHANGELOG-1.8.md) (EOL: 2018-03-22)
|
||||
- [CHANGELOG-1.7](docs/CHANGELOG-1.7.md) (EOL: 2018-01-25)
|
||||
- [CHANGELOG-1.6](docs/CHANGELOG-1.6.md) (EOL: 2017-10-15)
|
||||
- [CHANGELOG-1.5](docs/CHANGELOG-1.5.md) (EOL: 2017-07-28)
|
||||
- [CHANGELOG-1.4](docs/CHANGELOG-1.4.md) (EOL: 2017-03-13)
|
||||
- [CHANGELOG-1.3](docs/CHANGELOG-1.3.md) (EOL: 2017-01-19)
|
||||
- [CHANGELOG-1.2](docs/CHANGELOG-1.2.md) (EOL: 2016-11-07)
|
||||
- [CHANGELOG-1.1](docs/CHANGELOG-1.1.md) (EOL: 2016-08-12)
|
||||
- [CHANGELOG-1.0](docs/CHANGELOG-1.0.md) (EOL: 2016-06-24)
|
||||
- [CHANGELOG-0.9](docs/CHANGELOG-0.9.md) (EOL: 2016-05-02)
|
||||
|
||||
3636
Cargo.lock
generated
3636
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
79
Cargo.toml
79
Cargo.toml
@@ -1,10 +1,10 @@
|
||||
[package]
|
||||
description = "Parity Ethereum client"
|
||||
name = "parity"
|
||||
version = "1.8.6"
|
||||
# NOTE Make sure to update util/version/Cargo.toml as well
|
||||
version = "1.11.0"
|
||||
license = "GPL-3.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
build = "build.rs"
|
||||
|
||||
[dependencies]
|
||||
log = "0.3"
|
||||
@@ -12,40 +12,38 @@ env_logger = "0.4"
|
||||
rustc-hex = "1.0"
|
||||
docopt = "0.8"
|
||||
clap = "2"
|
||||
time = "0.1"
|
||||
term_size = "0.3"
|
||||
textwrap = "0.9"
|
||||
num_cpus = "1.2"
|
||||
number_prefix = "0.2"
|
||||
rpassword = "0.2.1"
|
||||
semver = "0.6"
|
||||
ansi_term = "0.9"
|
||||
parking_lot = "0.4"
|
||||
rpassword = "1.0"
|
||||
semver = "0.9"
|
||||
ansi_term = "0.10"
|
||||
parking_lot = "0.5"
|
||||
regex = "0.2"
|
||||
isatty = "0.1"
|
||||
atty = "0.2.8"
|
||||
toml = "0.4"
|
||||
serde = "1.0"
|
||||
serde_json = "1.0"
|
||||
serde_derive = "1.0"
|
||||
app_dirs = "1.1.1"
|
||||
futures = "0.1"
|
||||
futures-cpupool = "0.1"
|
||||
fdlimit = "0.1"
|
||||
ws2_32-sys = "0.2"
|
||||
ctrlc = { git = "https://github.com/paritytech/rust-ctrlc.git" }
|
||||
jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.8" }
|
||||
ethsync = { path = "sync" }
|
||||
jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.11" }
|
||||
ethcore = { path = "ethcore" }
|
||||
ethcore-util = { path = "util" }
|
||||
ethcore-bytes = { path = "util/bytes" }
|
||||
ethcore-bigint = { path = "util/bigint" }
|
||||
ethcore-io = { path = "util/io" }
|
||||
ethcore-devtools = { path = "devtools" }
|
||||
ethcore-ipc = { path = "ipc/rpc" }
|
||||
ethcore-ipc-nano = { path = "ipc/nano" }
|
||||
ethcore-ipc-hypervisor = { path = "ipc/hypervisor" }
|
||||
ethcore-light = { path = "ethcore/light" }
|
||||
ethcore-logger = { path = "logger" }
|
||||
ethcore-stratum = { path = "stratum" }
|
||||
ethcore-miner = { path = "miner" }
|
||||
ethcore-network = { path = "util/network" }
|
||||
ethcore-private-tx = { path = "ethcore/private-tx" }
|
||||
ethcore-service = { path = "ethcore/service" }
|
||||
ethcore-stratum = { path = "ethcore/stratum" }
|
||||
ethcore-sync = { path = "ethcore/sync" }
|
||||
ethcore-transaction = { path = "ethcore/transaction" }
|
||||
ethereum-types = "0.3"
|
||||
node-filter = { path = "ethcore/node_filter" }
|
||||
ethkey = { path = "ethkey" }
|
||||
node-health = { path = "dapps/node-health" }
|
||||
@@ -58,30 +56,37 @@ parity-reactor = { path = "util/reactor" }
|
||||
parity-rpc = { path = "rpc" }
|
||||
parity-rpc-client = { path = "rpc_client" }
|
||||
parity-updater = { path = "updater" }
|
||||
parity-version = { path = "util/version" }
|
||||
parity-whisper = { path = "whisper" }
|
||||
path = { path = "util/path" }
|
||||
panic_hook = { path = "panic_hook" }
|
||||
hash = { path = "util/hash" }
|
||||
migration = { path = "util/migration" }
|
||||
dir = { path = "util/dir" }
|
||||
panic_hook = { path = "util/panic_hook" }
|
||||
keccak-hash = { path = "util/hash" }
|
||||
migration-rocksdb = { path = "util/migration-rocksdb" }
|
||||
kvdb = { path = "util/kvdb" }
|
||||
kvdb-rocksdb = { path = "util/kvdb-rocksdb" }
|
||||
journaldb = { path = "util/journaldb" }
|
||||
mem = { path = "util/mem" }
|
||||
|
||||
parity-dapps = { path = "dapps", optional = true }
|
||||
clippy = { version = "0.0.103", optional = true}
|
||||
ethcore-secretstore = { path = "secret_store", optional = true }
|
||||
|
||||
registrar = { path = "registrar" }
|
||||
|
||||
[build-dependencies]
|
||||
rustc_version = "0.2"
|
||||
|
||||
[dev-dependencies]
|
||||
ethcore-ipc-tests = { path = "ipc/tests" }
|
||||
pretty_assertions = "0.1"
|
||||
ipnetwork = "0.12.6"
|
||||
tempdir = "0.3"
|
||||
fake-fetch = { path = "util/fake-fetch" }
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
winapi = "0.2"
|
||||
winapi = { version = "0.3.4", features = ["winsock2", "winuser", "shellapi"] }
|
||||
|
||||
[target.'cfg(not(windows))'.dependencies]
|
||||
daemonize = "0.2"
|
||||
daemonize = { git = "https://github.com/paritytech/daemonize" }
|
||||
|
||||
[features]
|
||||
default = ["ui-precompiled"]
|
||||
@@ -95,16 +100,13 @@ ui-precompiled = [
|
||||
]
|
||||
ui-enabled = ["dapps"]
|
||||
dapps = ["parity-dapps"]
|
||||
ipc = ["ethcore/ipc", "ethsync/ipc"]
|
||||
jit = ["ethcore/jit"]
|
||||
dev = ["clippy", "ethcore/dev", "ethcore-util/dev", "ethsync/dev", "parity-rpc/dev", "parity-dapps/dev"]
|
||||
json-tests = ["ethcore/json-tests"]
|
||||
test-heavy = ["ethcore/test-heavy"]
|
||||
evm-debug = ["ethcore/evm-debug"]
|
||||
evm-debug-tests = ["ethcore/evm-debug-tests"]
|
||||
slow-blocks = ["ethcore/slow-blocks"]
|
||||
final = ["ethcore-util/final"]
|
||||
secretstore = ["ethcore-secretstore"]
|
||||
final = ["parity-version/final"]
|
||||
|
||||
[[bin]]
|
||||
path = "parity/main.rs"
|
||||
@@ -119,4 +121,19 @@ lto = false
|
||||
panic = "abort"
|
||||
|
||||
[workspace]
|
||||
members = ["ethstore/cli", "ethkey/cli", "evmbin", "whisper", "chainspec", "dapps/js-glue"]
|
||||
members = [
|
||||
"chainspec",
|
||||
"dapps/js-glue",
|
||||
"ethcore/wasm/run",
|
||||
"ethcore/types",
|
||||
"ethkey/cli",
|
||||
"ethstore/cli",
|
||||
"evmbin",
|
||||
"miner",
|
||||
"transaction-pool",
|
||||
"whisper",
|
||||
"whisper/cli",
|
||||
]
|
||||
|
||||
[patch.crates-io]
|
||||
ring = { git = "https://github.com/paritytech/ring" }
|
||||
|
||||
101
README.md
101
README.md
@@ -1,10 +1,12 @@
|
||||
# [Parity](https://parity.io/) - fast, light, and robust Ethereum client
|
||||
# Parity - fast, light, and robust Ethereum client
|
||||
|
||||
## [» Download the latest release «](https://github.com/paritytech/parity/releases/latest)
|
||||
|
||||
[](https://gitlab.parity.io/parity/parity/commits/master)
|
||||
[](https://codecov.io/gh/paritytech/parity)
|
||||
[](https://build.snapcraft.io/user/paritytech/parity)
|
||||
[](https://www.gnu.org/licenses/gpl-3.0.en.html)
|
||||
|
||||
- [Download the latest release here.](https://github.com/paritytech/parity/releases)
|
||||
|
||||
### Join the chat!
|
||||
|
||||
@@ -14,7 +16,12 @@ Get in touch with us on Gitter:
|
||||
[](https://gitter.im/paritytech/parity/miners)
|
||||
[](https://gitter.im/paritytech/parity-poa)
|
||||
|
||||
Be sure to check out [our wiki](https://github.com/paritytech/parity/wiki) and the [internal documentation](https://paritytech.github.io/parity/ethcore/index.html) for more information.
|
||||
Or join our community on Matrix:
|
||||
[](https://riot.im/app/#/group/+parity:matrix.parity.io)
|
||||
|
||||
Official website: https://parity.io
|
||||
|
||||
Be sure to check out [our wiki](https://wiki.parity.io) for more information.
|
||||
|
||||
----
|
||||
|
||||
@@ -22,26 +29,28 @@ Be sure to check out [our wiki](https://github.com/paritytech/parity/wiki) and t
|
||||
|
||||
Parity's goal is to be the fastest, lightest, and most secure Ethereum client. We are developing Parity using the sophisticated and cutting-edge Rust programming language. Parity is licensed under the GPLv3, and can be used for all your Ethereum needs.
|
||||
|
||||
Parity comes with a built-in wallet. To access [Parity Wallet](http://web3.site/) simply go to http://web3.site/ (if you don't have access to the internet, but still want to use the service, you can also use http://127.0.0.1:8180/). It includes various functionality allowing you to:
|
||||
Parity comes with a built-in wallet, to install it please follow [these instructions](https://wiki.parity.io/Parity-Wallet). It includes various functionality allowing you to:
|
||||
|
||||
- create and manage your Ethereum accounts;
|
||||
- manage your Ether and any Ethereum tokens;
|
||||
- create and register your own tokens;
|
||||
- and much more.
|
||||
|
||||
By default, Parity will also run a JSONRPC server on `127.0.0.1:8545`. This is fully configurable and supports a number of RPC APIs.
|
||||
From Parity Ethereum client version >=1.10, the User Interface (UI) is accessible in a separate application called Parity UI. To keep using the UI in the browser (deprecated), [follow these steps](https://wiki.parity.io/FAQ-Basic-Operations,-Configuration,-and-Synchronization.md#the-parity-ui-application-isnt-working-the-way-i-want).
|
||||
|
||||
If you run into an issue while using parity, feel free to file one in this repository or hop on our [gitter chat room](https://gitter.im/paritytech/parity) to ask a question. We are glad to help!
|
||||
By default, Parity will also run a JSONRPC server on `127.0.0.1:8545` and a websockets server on `127.0.0.1:8546`. This is fully configurable and supports a number of APIs.
|
||||
|
||||
**For security-critical issues**, please refer to the security policy outlined in `SECURITY.MD`.
|
||||
If you run into an issue while using Parity, feel free to file one in this repository or hop on our [Gitter](https://gitter.im/paritytech/parity) or [Riot](https://riot.im/app/#/group/+parity:matrix.parity.io) chat room to ask a question. We are glad to help!
|
||||
|
||||
Parity's current release is 1.7. You can download it at https://github.com/paritytech/parity/releases or follow the instructions below to build from source.
|
||||
**For security-critical issues**, please refer to the security policy outlined in [SECURITY.MD](SECURITY.md).
|
||||
|
||||
Parity's current release is 1.9. You can download it at https://github.com/paritytech/parity/releases or follow the instructions below to build from source.
|
||||
|
||||
----
|
||||
|
||||
## Build dependencies
|
||||
|
||||
**Parity requires Rust version 1.19.0 to build**
|
||||
**Parity requires Rust version 1.23.0 to build**
|
||||
|
||||
We recommend installing Rust through [rustup](https://www.rustup.rs/). If you don't already have rustup, you can install it like this:
|
||||
|
||||
@@ -51,21 +60,26 @@ We recommend installing Rust through [rustup](https://www.rustup.rs/). If you do
|
||||
```
|
||||
|
||||
Parity also requires `gcc`, `g++`, `libssl-dev`/`openssl`, `libudev-dev` and `pkg-config` packages to be installed.
|
||||
|
||||
- OSX:
|
||||
```bash
|
||||
$ curl https://sh.rustup.rs -sSf | sh
|
||||
```
|
||||
|
||||
`clang` is required. It comes with Xcode command line tools or can be installed with homebrew.
|
||||
|
||||
- Windows
|
||||
|
||||
Make sure you have Visual Studio 2015 with C++ support installed. Next, download and run the rustup installer from
|
||||
Make sure you have Visual Studio 2015 with C++ support installed. Next, download and run the rustup installer from
|
||||
https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe, start "VS2015 x64 Native Tools Command Prompt", and use the following command to install and set up the msvc toolchain:
|
||||
```
|
||||
```bash
|
||||
$ rustup default stable-x86_64-pc-windows-msvc
|
||||
```
|
||||
```
|
||||
|
||||
Once you have rustup, install parity or download and build from source
|
||||
Once you have rustup installed, then you need to install:
|
||||
* [Perl](https://www.perl.org)
|
||||
* [Yasm](http://yasm.tortall.net)
|
||||
|
||||
Make sure that these binaries are in your `PATH`. After that you should be able to build parity from source.
|
||||
|
||||
----
|
||||
|
||||
@@ -74,10 +88,20 @@ Once you have rustup, install parity or download and build from source
|
||||
In any of the [supported Linux distros](https://snapcraft.io/docs/core/install):
|
||||
|
||||
```bash
|
||||
sudo snap install parity --edge
|
||||
sudo snap install parity
|
||||
```
|
||||
|
||||
(Note that this is an experimental and unstable release, at the moment)
|
||||
Or, if you want to contribute testing the upcoming release:
|
||||
|
||||
```bash
|
||||
sudo snap install parity --beta
|
||||
```
|
||||
|
||||
And to test the latest code landed into the master branch:
|
||||
|
||||
```bash
|
||||
sudo snap install parity --edge
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
@@ -93,11 +117,39 @@ $ cargo build --release
|
||||
```
|
||||
|
||||
This will produce an executable in the `./target/release` subdirectory.
|
||||
|
||||
Note: if cargo fails to parse manifest try:
|
||||
|
||||
```bash
|
||||
$ ~/.cargo/bin/cargo build --release
|
||||
```
|
||||
|
||||
Note: When compiling a crate and you receive the following error:
|
||||
|
||||
```
|
||||
error: the crate is compiled with the panic strategy `abort` which is incompatible with this crate's strategy of `unwind`
|
||||
```
|
||||
|
||||
Cleaning the repository will most likely solve the issue, try:
|
||||
|
||||
```bash
|
||||
$ cargo clean
|
||||
```
|
||||
|
||||
This will always compile the latest nightly builds. If you want to build stable or beta, do a
|
||||
|
||||
```bash
|
||||
$ git checkout stable
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
$ git checkout beta
|
||||
```
|
||||
|
||||
first.
|
||||
|
||||
----
|
||||
|
||||
## Simple one-line installer for Mac and Ubuntu
|
||||
@@ -106,9 +158,18 @@ $ ~/.cargo/bin/cargo build --release
|
||||
bash <(curl https://get.parity.io -Lk)
|
||||
```
|
||||
|
||||
The one-line installer always defaults to the latest beta release. To install a stable release, run:
|
||||
|
||||
```bash
|
||||
bash <(curl https://get.parity.io -Lk) -r stable
|
||||
```
|
||||
|
||||
## Start Parity
|
||||
|
||||
### Manually
|
||||
|
||||
To start Parity manually, just run
|
||||
|
||||
```bash
|
||||
$ ./target/release/parity
|
||||
```
|
||||
@@ -116,11 +177,9 @@ $ ./target/release/parity
|
||||
and Parity will begin syncing the Ethereum blockchain.
|
||||
|
||||
### Using systemd service file
|
||||
|
||||
To start Parity as a regular user using systemd init:
|
||||
|
||||
1. Copy `parity/scripts/parity.service` to your
|
||||
1. Copy `./scripts/parity.service` to your
|
||||
systemd user directory (usually `~/.config/systemd/user`).
|
||||
2. To pass any argument to Parity, write a `~/.parity/parity.conf` file this way:
|
||||
`ARGS="ARG1 ARG2 ARG3"`.
|
||||
|
||||
Example: `ARGS="ui --identity MyMachine"`.
|
||||
2. To configure Parity, write a `/etc/parity/config.toml` config file, see [Configuring Parity](https://paritytech.github.io/wiki/Configuring-Parity) for details.
|
||||
|
||||
56
SECURITY.md
56
SECURITY.md
@@ -1,13 +1,49 @@
|
||||
# Security Policy
|
||||
|
||||
For security inquiries or vulnerability reports, please send a message to security@parity.io.
|
||||
Parity Technologies is committed to resolving security vulnerabilities in our software quickly and carefully. We take the necessary steps to minimize risk, provide timely information, and deliver vulnerability fixes and mitigations required to address security issues.
|
||||
|
||||
Please use a descriptive subject line so we can identify the report as such.
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you send a report, we will respond to the e-mail within 48 hours, and provide regular updates from that time onwards.
|
||||
Security vulnerabilities in Parity software should be reported by email to security@parity.io. If you think your report might be eligible for the Parity Bug Bounty Program, your email should be send to bugbounty@parity.io.
|
||||
|
||||
If you would like to encrypt your report, please use the PGP key provided below.
|
||||
It is also reproduced [on MIT's key server](https://pgp.mit.edu/pks/lookup?op=get&search=0x5D0F03018D07DE73)
|
||||
Your report should include the following:
|
||||
|
||||
- your name
|
||||
- description of the vulnerability
|
||||
- attack scenario (if any)
|
||||
- components
|
||||
- reproduction
|
||||
- other details
|
||||
|
||||
Try to include as much information in your report as you can, including a description of the vulnerability, its potential impact, and steps for reproducing it. Be sure to use a descriptive subject line.
|
||||
|
||||
You'll receive a response to your email within two business days indicating the next steps in handling your report. We encourage finders to use encrypted communication channels to protect the confidentiality of vulnerability reports. You can encrypt your report using our public key. This key is [on MIT's key server](https://pgp.mit.edu/pks/lookup?op=get&search=0x5D0F03018D07DE73) server and reproduced below.
|
||||
|
||||
After the initial reply to your report, our team will endeavor to keep you informed of the progress being made towards a fix. These updates will be sent at least every five business days.
|
||||
|
||||
Thank you for taking the time to responsibly disclose any vulnerabilities you find.
|
||||
|
||||
## Responsible Investigation and Reporting
|
||||
|
||||
Responsible investigation and reporting includes, but isn't limited to, the following:
|
||||
|
||||
- Don't violate the privacy of other users, destroy data, etc.
|
||||
- Don’t defraud or harm Parity Technologies Ltd or its users during your research; you should make a good faith effort to not interrupt or degrade our services.
|
||||
- Don't target our physical security measures, or attempt to use social engineering, spam, distributed denial of service (DDOS) attacks, etc.
|
||||
- Initially report the bug only to us and not to anyone else.
|
||||
- Give us a reasonable amount of time to fix the bug before disclosing it to anyone else, and give us adequate written warning before disclosing it to anyone else.
|
||||
- In general, please investigate and report bugs in a way that makes a reasonable, good faith effort not to be disruptive or harmful to us or our users. Otherwise your actions might be interpreted as an attack rather than an effort to be helpful.
|
||||
|
||||
## Bug Bounty Program
|
||||
|
||||
Our Bug Bounty Program allows us to recognise and reward members of the Parity community for helping us find and address significant bugs, in accordance with the terms of the Parity Bug Bounty Program. A detailed description on eligibility, rewards, legal information and terms & conditions for contributors can be found on [our website](https://paritytech.io/bug-bounty.html).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Plaintext PGP Key
|
||||
|
||||
```
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
@@ -42,13 +78,3 @@ ETBD1Q==
|
||||
=K9Qw
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
```
|
||||
|
||||
Important Legal Information:
|
||||
|
||||
Your submission might be eligible for a bug bounty. The bug bounty program is an experimental and discretionary rewards program for the Parity community to reward those who are helping to improve the Parity software. Rewards are at the sole discretion of Parity Technologies Ltd..
|
||||
|
||||
We are not able to issue rewards to individuals who are on sanctions lists or who are in countries on sanctions lists (e.g. North Korea, Iran, etc).
|
||||
|
||||
You are responsible for all taxes. All rewards are subject to applicable law.
|
||||
|
||||
Finally, your testing must not violate any law or compromise any data that is not yours.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
description = "Parity Dapps crate"
|
||||
name = "parity-dapps"
|
||||
version = "1.8.0"
|
||||
version = "1.11.0"
|
||||
license = "GPL-3.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
|
||||
@@ -13,39 +13,37 @@ futures = "0.1"
|
||||
futures-cpupool = "0.1"
|
||||
linked-hash-map = "0.5"
|
||||
log = "0.3"
|
||||
parity-dapps-glue = "1.8"
|
||||
parking_lot = "0.4"
|
||||
parity-dapps-glue = "1.9"
|
||||
parking_lot = "0.5"
|
||||
mime_guess = "2.0.0-alpha.2"
|
||||
rand = "0.3"
|
||||
rand = "0.4"
|
||||
rustc-hex = "1.0"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
serde_json = "1.0"
|
||||
unicase = "1.4"
|
||||
zip = { version = "0.1", default-features = false }
|
||||
zip = { version = "0.3", default-features = false, features = ["deflate"] }
|
||||
itertools = "0.5"
|
||||
|
||||
jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.8" }
|
||||
jsonrpc-http-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.8" }
|
||||
jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.11" }
|
||||
jsonrpc-http-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.11" }
|
||||
|
||||
ethcore-util = { path = "../util" }
|
||||
ethcore-bigint = { path = "../util/bigint" }
|
||||
ethcore-bytes = { path = "../util/bytes" }
|
||||
ethereum-types = "0.3"
|
||||
fetch = { path = "../util/fetch" }
|
||||
node-health = { path = "./node-health" }
|
||||
parity-hash-fetch = { path = "../hash-fetch" }
|
||||
parity-reactor = { path = "../util/reactor" }
|
||||
parity-ui = { path = "./ui" }
|
||||
hash = { path = "../util/hash" }
|
||||
|
||||
clippy = { version = "0.0.103", optional = true}
|
||||
parity-ui-deprecation = { path = "./ui-deprecation" }
|
||||
keccak-hash = { path = "../util/hash" }
|
||||
parity-version = { path = "../util/version" }
|
||||
registrar = { path = "../registrar" }
|
||||
|
||||
[dev-dependencies]
|
||||
env_logger = "0.4"
|
||||
ethcore-devtools = { path = "../devtools" }
|
||||
|
||||
[features]
|
||||
dev = ["clippy", "ethcore-util/dev"]
|
||||
|
||||
ui = ["parity-ui/no-precompiled-js"]
|
||||
ui-precompiled = ["parity-ui/use-precompiled-js"]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
description = "Base Package for all Parity built-in dapps"
|
||||
name = "parity-dapps-glue"
|
||||
version = "1.8.0"
|
||||
version = "1.9.1"
|
||||
license = "GPL-3.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
build = "build.rs"
|
||||
@@ -18,13 +18,10 @@ quasi = { version = "0.32", default-features = false }
|
||||
quasi_macros = { version = "0.32", optional = true }
|
||||
syntex = { version = "0.58", optional = true }
|
||||
syntex_syntax = { version = "0.58", optional = true }
|
||||
clippy = { version = "0.0.90", optional = true }
|
||||
|
||||
[features]
|
||||
dev = ["clippy"]
|
||||
default = ["with-syntex"]
|
||||
nightly = ["quasi_macros"]
|
||||
nightly-testing = ["clippy"]
|
||||
with-syntex = ["quasi/with-syntex", "quasi_codegen", "quasi_codegen/with-syntex", "syntex", "syntex_syntax"]
|
||||
use-precompiled-js = []
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ mod platform {
|
||||
use std::process::Command;
|
||||
|
||||
pub static NPM_CMD: &'static str = "npm";
|
||||
pub fn handle_fd(cmd: &mut Command) -> &mut Command {
|
||||
pub fn handle_cmd(cmd: &mut Command) -> &mut Command {
|
||||
cmd
|
||||
}
|
||||
}
|
||||
@@ -34,14 +34,14 @@ mod platform {
|
||||
mod platform {
|
||||
use std::process::{Command, Stdio};
|
||||
|
||||
pub static NPM_CMD: &'static str = "npm.cmd";
|
||||
pub static NPM_CMD: &'static str = "cmd.exe";
|
||||
// NOTE [ToDr] For some reason on windows
|
||||
// We cannot have any file descriptors open when running a child process
|
||||
// during build phase.
|
||||
pub fn handle_fd(cmd: &mut Command) -> &mut Command {
|
||||
// The command doesn't have %~dp0 set properly
|
||||
// and it cannot load globally installed node.exe
|
||||
pub fn handle_cmd(cmd: &mut Command) -> &mut Command {
|
||||
cmd.stdin(Stdio::null())
|
||||
.stdout(Stdio::null())
|
||||
.stderr(Stdio::null())
|
||||
.arg("/c")
|
||||
.arg("npm.cmd")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ pub fn build(_path: &str, _dest: &str) {
|
||||
|
||||
#[cfg(not(feature = "use-precompiled-js"))]
|
||||
pub fn build(path: &str, dest: &str) {
|
||||
let child = platform::handle_fd(&mut Command::new(platform::NPM_CMD))
|
||||
let child = platform::handle_cmd(&mut Command::new(platform::NPM_CMD))
|
||||
.arg("install")
|
||||
.arg("--no-progress")
|
||||
.current_dir(path)
|
||||
@@ -66,7 +66,7 @@ pub fn build(path: &str, dest: &str) {
|
||||
.unwrap_or_else(|e| die("Installing node.js dependencies with npm", e));
|
||||
assert!(child.success(), "There was an error installing dependencies.");
|
||||
|
||||
let child = platform::handle_fd(&mut Command::new(platform::NPM_CMD))
|
||||
let child = platform::handle_cmd(&mut Command::new(platform::NPM_CMD))
|
||||
.arg("run")
|
||||
.arg("build")
|
||||
.env("NODE_ENV", "production")
|
||||
|
||||
@@ -9,8 +9,8 @@ authors = ["Parity Technologies <admin@parity.io>"]
|
||||
futures = "0.1"
|
||||
futures-cpupool = "0.1"
|
||||
log = "0.3"
|
||||
ntp = "0.2.0"
|
||||
parking_lot = "0.4"
|
||||
ntp = "0.3.0"
|
||||
parking_lot = "0.5"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
time = "0.1.35"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
//! Reporting node's health.
|
||||
|
||||
use std::sync::Arc;
|
||||
use std::time;
|
||||
use std::time::Duration;
|
||||
use futures::Future;
|
||||
use futures::sync::oneshot;
|
||||
use types::{HealthInfo, HealthStatus, Health};
|
||||
@@ -26,7 +26,7 @@ use parity_reactor::Remote;
|
||||
use parking_lot::Mutex;
|
||||
use {SyncStatus};
|
||||
|
||||
const TIMEOUT_SECS: u64 = 5;
|
||||
const TIMEOUT: Duration = Duration::from_secs(5);
|
||||
const PROOF: &str = "Only one closure is invoked.";
|
||||
|
||||
/// A struct enabling you to query for node's health.
|
||||
@@ -53,11 +53,11 @@ impl NodeHealth {
|
||||
let tx = Arc::new(Mutex::new(Some(tx)));
|
||||
let tx2 = tx.clone();
|
||||
self.remote.spawn_with_timeout(
|
||||
move || time.then(move |result| {
|
||||
move |_| time.then(move |result| {
|
||||
let _ = tx.lock().take().expect(PROOF).send(Ok(result));
|
||||
Ok(())
|
||||
}),
|
||||
time::Duration::from_secs(TIMEOUT_SECS),
|
||||
TIMEOUT,
|
||||
move || {
|
||||
let _ = tx2.lock().take().expect(PROOF).send(Err(()));
|
||||
},
|
||||
|
||||
@@ -14,42 +14,26 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use endpoint::EndpointInfo;
|
||||
|
||||
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct App {
|
||||
pub id: String,
|
||||
pub id: Option<String>,
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub version: String,
|
||||
pub author: String,
|
||||
#[serde(rename="iconUrl")]
|
||||
pub icon_url: String,
|
||||
#[serde(rename="localUrl")]
|
||||
pub local_url: Option<String>,
|
||||
#[serde(rename="allowJsEval")]
|
||||
pub allow_js_eval: Option<bool>,
|
||||
}
|
||||
|
||||
impl App {
|
||||
/// Creates `App` instance from `EndpointInfo` and `id`.
|
||||
pub fn from_info(id: &str, info: &EndpointInfo) -> Self {
|
||||
App {
|
||||
id: id.to_owned(),
|
||||
name: info.name.to_owned(),
|
||||
description: info.description.to_owned(),
|
||||
version: info.version.to_owned(),
|
||||
author: info.author.to_owned(),
|
||||
icon_url: info.icon_url.to_owned(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<EndpointInfo> for App {
|
||||
fn into(self) -> EndpointInfo {
|
||||
EndpointInfo {
|
||||
name: self.name,
|
||||
description: self.description,
|
||||
version: self.version,
|
||||
author: self.author,
|
||||
icon_url: self.icon_url,
|
||||
}
|
||||
pub fn with_id(&self, id: &str) -> Self {
|
||||
let mut app = self.clone();
|
||||
app.id = Some(id.into());
|
||||
app
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,10 +18,11 @@ use zip;
|
||||
use std::{fs, fmt};
|
||||
use std::io::{self, Read, Write};
|
||||
use std::path::PathBuf;
|
||||
use bigint::hash::H256;
|
||||
use fetch::{self, Mime};
|
||||
use ethereum_types::H256;
|
||||
use fetch;
|
||||
use futures_cpupool::CpuPool;
|
||||
use hash::keccak_buffer;
|
||||
use hash::keccak_pipe;
|
||||
use mime_guess::Mime;
|
||||
|
||||
use apps::manifest::{MANIFEST_FILENAME, deserialize_manifest, serialize_manifest, Manifest};
|
||||
use handlers::{ContentValidator, ValidatorResponse};
|
||||
@@ -53,16 +54,16 @@ fn write_response_and_check_hash(
|
||||
|
||||
// Now write the response
|
||||
let mut file = io::BufWriter::new(fs::File::create(&content_path)?);
|
||||
let mut reader = io::BufReader::new(response);
|
||||
io::copy(&mut reader, &mut file)?;
|
||||
let mut reader = io::BufReader::new(fetch::BodyReader::new(response));
|
||||
let hash = keccak_pipe(&mut reader, &mut file)?;
|
||||
let mut file = file.into_inner()?;
|
||||
file.flush()?;
|
||||
|
||||
// Validate hash
|
||||
// TODO [ToDr] calculate keccak in-flight while reading the response
|
||||
let mut file = io::BufReader::new(fs::File::open(&content_path)?);
|
||||
let hash = keccak_buffer(&mut file)?;
|
||||
if id == hash {
|
||||
Ok((file.into_inner(), content_path))
|
||||
// The writing above changed the file Read position, which we need later. So we just create a new file handle
|
||||
// here.
|
||||
Ok((fs::File::open(&content_path)?, content_path))
|
||||
} else {
|
||||
Err(ValidationError::HashMismatch {
|
||||
expected: id,
|
||||
@@ -178,7 +179,7 @@ impl ContentValidator for Dapp {
|
||||
// First find manifest file
|
||||
let (mut manifest, manifest_dir) = Self::find_manifest(&mut zip)?;
|
||||
// Overwrite id to match hash
|
||||
manifest.id = id;
|
||||
manifest.id = Some(id);
|
||||
|
||||
// Unpack zip
|
||||
for i in 0..zip.len() {
|
||||
@@ -265,3 +266,9 @@ impl From<zip::result::ZipError> for ValidationError {
|
||||
ValidationError::Zip(err)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<io::IntoInnerError<io::BufWriter<fs::File>>> for ValidationError {
|
||||
fn from(err: io::IntoInnerError<io::BufWriter<fs::File>>) -> Self {
|
||||
ValidationError::Io(err.into())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ mod installers;
|
||||
use std::{fs, env};
|
||||
use std::path::PathBuf;
|
||||
use std::sync::Arc;
|
||||
use rustc_hex::FromHex;
|
||||
use futures::{future, Future};
|
||||
use futures_cpupool::CpuPool;
|
||||
use fetch::{Client as FetchClient, Fetch};
|
||||
@@ -31,6 +30,7 @@ use hash_fetch::urlhint::{URLHintContract, URLHint, URLHintResult};
|
||||
|
||||
use hyper::StatusCode;
|
||||
|
||||
use ethereum_types::H256;
|
||||
use {Embeddable, SyncStatus, random_filename};
|
||||
use parking_lot::Mutex;
|
||||
use page::local;
|
||||
@@ -132,7 +132,7 @@ impl<R: URLHint + 'static, F: Fetch> ContentFetcher<F, R> {
|
||||
|
||||
// resolve contract call synchronously.
|
||||
// TODO: port to futures-based hyper and make it all async.
|
||||
fn resolve(&self, content_id: Vec<u8>) -> Option<URLHintResult> {
|
||||
fn resolve(&self, content_id: H256) -> Option<URLHintResult> {
|
||||
self.resolver.resolve(content_id)
|
||||
.wait()
|
||||
.unwrap_or_else(|e| { warn!("Error resolving content-id: {}", e); None })
|
||||
@@ -149,7 +149,7 @@ impl<R: URLHint + 'static, F: Fetch> Fetcher for ContentFetcher<F, R> {
|
||||
}
|
||||
}
|
||||
// fallback to resolver
|
||||
if let Ok(content_id) = content_id.from_hex() {
|
||||
if let Ok(content_id) = content_id.parse() {
|
||||
// if there is content or we are syncing return true
|
||||
self.sync.is_major_importing() || self.resolve(content_id).is_some()
|
||||
} else {
|
||||
@@ -178,7 +178,7 @@ impl<R: URLHint + 'static, F: Fetch> Endpoint for ContentFetcher<F, R> {
|
||||
// We need to start fetching the content
|
||||
_ => {
|
||||
trace!(target: "dapps", "Content unavailable. Fetching... {:?}", content_id);
|
||||
let content_hex = content_id.from_hex().expect("to_handler is called only when `contains` returns true.");
|
||||
let content_hex = content_id.parse().expect("to_handler is called only when `contains` returns true.");
|
||||
let content = self.resolve(content_hex);
|
||||
|
||||
let cache = self.cache.clone();
|
||||
@@ -200,39 +200,60 @@ impl<R: URLHint + 'static, F: Fetch> Endpoint for ContentFetcher<F, R> {
|
||||
Some(URLHintResult::Dapp(_)) if self.only_content => {
|
||||
(None, Self::dapps_disabled(self.embeddable_on.clone()))
|
||||
},
|
||||
Some(URLHintResult::Dapp(dapp)) => {
|
||||
let handler = ContentFetcherHandler::new(
|
||||
req.method(),
|
||||
&dapp.url(),
|
||||
path,
|
||||
installers::Dapp::new(
|
||||
content_id.clone(),
|
||||
self.cache_path.clone(),
|
||||
Box::new(on_done),
|
||||
self.embeddable_on.clone(),
|
||||
self.pool.clone(),
|
||||
),
|
||||
self.embeddable_on.clone(),
|
||||
self.fetch.clone(),
|
||||
);
|
||||
|
||||
(Some(ContentStatus::Fetching(handler.fetch_control())), Box::new(handler) as endpoint::Response)
|
||||
},
|
||||
Some(URLHintResult::Content(content)) => {
|
||||
let handler = ContentFetcherHandler::new(
|
||||
req.method(),
|
||||
&content.url,
|
||||
path,
|
||||
installers::Content::new(
|
||||
content_id.clone(),
|
||||
content.mime,
|
||||
self.cache_path.clone(),
|
||||
Box::new(on_done),
|
||||
self.pool.clone(),
|
||||
),
|
||||
self.embeddable_on.clone(),
|
||||
self.fetch.clone(),
|
||||
);
|
||||
Some(content) => {
|
||||
let handler = match content {
|
||||
URLHintResult::Dapp(dapp) => {
|
||||
ContentFetcherHandler::new(
|
||||
req.method(),
|
||||
&dapp.url(),
|
||||
path,
|
||||
installers::Dapp::new(
|
||||
content_id.clone(),
|
||||
self.cache_path.clone(),
|
||||
Box::new(on_done),
|
||||
self.embeddable_on.clone(),
|
||||
self.pool.clone(),
|
||||
),
|
||||
self.embeddable_on.clone(),
|
||||
self.fetch.clone(),
|
||||
self.pool.clone(),
|
||||
)
|
||||
},
|
||||
URLHintResult::GithubDapp(content) => {
|
||||
ContentFetcherHandler::new(
|
||||
req.method(),
|
||||
&content.url,
|
||||
path,
|
||||
installers::Dapp::new(
|
||||
content_id.clone(),
|
||||
self.cache_path.clone(),
|
||||
Box::new(on_done),
|
||||
self.embeddable_on.clone(),
|
||||
self.pool.clone(),
|
||||
),
|
||||
self.embeddable_on.clone(),
|
||||
self.fetch.clone(),
|
||||
self.pool.clone(),
|
||||
)
|
||||
},
|
||||
URLHintResult::Content(content) => {
|
||||
ContentFetcherHandler::new(
|
||||
req.method(),
|
||||
&content.url,
|
||||
path,
|
||||
installers::Content::new(
|
||||
content_id.clone(),
|
||||
content.mime,
|
||||
self.cache_path.clone(),
|
||||
Box::new(on_done),
|
||||
self.pool.clone(),
|
||||
),
|
||||
self.embeddable_on.clone(),
|
||||
self.fetch.clone(),
|
||||
self.pool.clone(),
|
||||
)
|
||||
},
|
||||
};
|
||||
|
||||
(Some(ContentStatus::Fetching(handler.fetch_control())), Box::new(handler) as endpoint::Response)
|
||||
},
|
||||
@@ -262,10 +283,10 @@ impl<R: URLHint + 'static, F: Fetch> Endpoint for ContentFetcher<F, R> {
|
||||
mod tests {
|
||||
use std::env;
|
||||
use std::sync::Arc;
|
||||
use bytes::Bytes;
|
||||
use fetch::{Fetch, Client};
|
||||
use futures::future;
|
||||
use hash_fetch::urlhint::{URLHint, URLHintResult, BoxFuture};
|
||||
use fetch::Client;
|
||||
use futures::{future, Future};
|
||||
use hash_fetch::urlhint::{URLHint, URLHintResult};
|
||||
use ethereum_types::H256;
|
||||
|
||||
use apps::cache::ContentStatus;
|
||||
use endpoint::EndpointInfo;
|
||||
@@ -276,7 +297,7 @@ mod tests {
|
||||
#[derive(Clone)]
|
||||
struct FakeResolver;
|
||||
impl URLHint for FakeResolver {
|
||||
fn resolve(&self, _id: Bytes) -> BoxFuture<Option<URLHintResult>, String> {
|
||||
fn resolve(&self, _id: H256) -> Box<Future<Item = Option<URLHintResult>, Error = String> + Send> {
|
||||
Box::new(future::ok(None))
|
||||
}
|
||||
}
|
||||
@@ -301,11 +322,14 @@ mod tests {
|
||||
).allow_dapps(true);
|
||||
|
||||
let handler = local::Dapp::new(pool, path, EndpointInfo {
|
||||
id: None,
|
||||
name: "fake".into(),
|
||||
description: "".into(),
|
||||
version: "".into(),
|
||||
author: "".into(),
|
||||
icon_url: "".into(),
|
||||
local_url: Some("".into()),
|
||||
allow_js_eval: None,
|
||||
}, Default::default(), None);
|
||||
|
||||
// when
|
||||
|
||||
@@ -46,16 +46,18 @@ fn read_manifest(name: &str, mut path: PathBuf) -> EndpointInfo {
|
||||
// Try to deserialize manifest
|
||||
deserialize_manifest(s)
|
||||
})
|
||||
.map(Into::into)
|
||||
.unwrap_or_else(|e| {
|
||||
warn!(target: "dapps", "Cannot read manifest file at: {:?}. Error: {:?}", path, e);
|
||||
|
||||
EndpointInfo {
|
||||
id: None,
|
||||
name: name.into(),
|
||||
description: name.into(),
|
||||
version: "0.0.0".into(),
|
||||
author: "?".into(),
|
||||
icon_url: "icon.png".into(),
|
||||
local_url: None,
|
||||
allow_js_eval: Some(false),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -20,8 +20,13 @@ pub use apps::App as Manifest;
|
||||
pub const MANIFEST_FILENAME: &'static str = "manifest.json";
|
||||
|
||||
pub fn deserialize_manifest(manifest: String) -> Result<Manifest, String> {
|
||||
serde_json::from_str::<Manifest>(&manifest).map_err(|e| format!("{:?}", e))
|
||||
// TODO [todr] Manifest validation (especialy: id (used as path))
|
||||
let mut manifest = serde_json::from_str::<Manifest>(&manifest).map_err(|e| format!("{:?}", e))?;
|
||||
if manifest.id.is_none() {
|
||||
return Err("App 'id' is missing.".into());
|
||||
}
|
||||
manifest.allow_js_eval = Some(manifest.allow_js_eval.unwrap_or(false));
|
||||
|
||||
Ok(manifest)
|
||||
}
|
||||
|
||||
pub fn serialize_manifest(manifest: &Manifest) -> Result<String, String> {
|
||||
|
||||
@@ -23,8 +23,6 @@ use page;
|
||||
use proxypac::ProxyPac;
|
||||
use web::Web;
|
||||
use fetch::Fetch;
|
||||
use parity_dapps::WebApp;
|
||||
use parity_ui;
|
||||
use {WebProxyTokens, ParentFrameSettings};
|
||||
|
||||
mod app;
|
||||
@@ -44,11 +42,15 @@ pub const WEB_PATH: &'static str = "web";
|
||||
pub const URL_REFERER: &'static str = "__referer=";
|
||||
|
||||
pub fn utils(pool: CpuPool) -> Box<Endpoint> {
|
||||
Box::new(page::builtin::Dapp::new(pool, parity_ui::App::default()))
|
||||
Box::new(page::builtin::Dapp::new(pool, ::parity_ui::App::default()))
|
||||
}
|
||||
|
||||
pub fn ui(pool: CpuPool) -> Box<Endpoint> {
|
||||
Box::new(page::builtin::Dapp::with_fallback_to_index(pool, parity_ui::App::default()))
|
||||
Box::new(page::builtin::Dapp::with_fallback_to_index(pool, ::parity_ui::App::default()))
|
||||
}
|
||||
|
||||
pub fn ui_deprecation(pool: CpuPool) -> Box<Endpoint> {
|
||||
Box::new(page::builtin::Dapp::with_fallback_to_index(pool, ::parity_ui_deprecation::App::default()))
|
||||
}
|
||||
|
||||
pub fn ui_redirection(embeddable: Option<ParentFrameSettings>) -> Box<Endpoint> {
|
||||
@@ -76,22 +78,28 @@ pub fn all_endpoints<F: Fetch>(
|
||||
}
|
||||
|
||||
// NOTE [ToDr] Dapps will be currently embeded on 8180
|
||||
insert::<parity_ui::App>(&mut pages, "ui", Embeddable::Yes(embeddable.clone()), pool.clone());
|
||||
pages.insert("proxy".into(), ProxyPac::boxed(embeddable.clone(), dapps_domain.to_owned()));
|
||||
pages.insert(WEB_PATH.into(), Web::boxed(embeddable.clone(), web_proxy_tokens.clone(), fetch.clone()));
|
||||
pages.insert(
|
||||
"ui".into(),
|
||||
Box::new(page::builtin::Dapp::new_safe_to_embed(pool.clone(), ::parity_ui::App::default(), embeddable.clone()))
|
||||
);
|
||||
// old version
|
||||
pages.insert(
|
||||
"v1".into(),
|
||||
Box::new({
|
||||
let mut page = page::builtin::Dapp::new_safe_to_embed(pool.clone(), ::parity_ui::old::App::default(), embeddable.clone());
|
||||
// allow JS eval on old Wallet
|
||||
page.allow_js_eval();
|
||||
page
|
||||
})
|
||||
);
|
||||
pages.insert(
|
||||
"proxy".into(),
|
||||
ProxyPac::boxed(embeddable.clone(), dapps_domain.to_owned())
|
||||
);
|
||||
pages.insert(
|
||||
WEB_PATH.into(),
|
||||
Web::boxed(embeddable.clone(), web_proxy_tokens.clone(), fetch.clone(), pool.clone())
|
||||
);
|
||||
|
||||
(local_endpoints, pages)
|
||||
}
|
||||
|
||||
fn insert<T : WebApp + Default + 'static>(pages: &mut Endpoints, id: &str, embed_at: Embeddable, pool: CpuPool) {
|
||||
pages.insert(id.to_owned(), Box::new(match embed_at {
|
||||
Embeddable::Yes(address) => page::builtin::Dapp::new_safe_to_embed(pool, T::default(), address),
|
||||
Embeddable::No => page::builtin::Dapp::new(pool, T::default()),
|
||||
}));
|
||||
}
|
||||
|
||||
enum Embeddable {
|
||||
Yes(Option<ParentFrameSettings>),
|
||||
#[allow(dead_code)]
|
||||
No,
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use jsonrpc_core::BoxFuture;
|
||||
use futures::Future;
|
||||
use hyper;
|
||||
|
||||
#[derive(Debug, PartialEq, Default, Clone)]
|
||||
@@ -37,17 +37,9 @@ impl EndpointPath {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub struct EndpointInfo {
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub version: String,
|
||||
pub author: String,
|
||||
pub icon_url: String,
|
||||
}
|
||||
|
||||
pub type EndpointInfo = ::apps::App;
|
||||
pub type Endpoints = BTreeMap<String, Box<Endpoint>>;
|
||||
pub type Response = BoxFuture<hyper::Response, hyper::Error>;
|
||||
pub type Response = Box<Future<Item=hyper::Response, Error=hyper::Error> + Send>;
|
||||
pub type Request = hyper::Request;
|
||||
|
||||
pub trait Endpoint : Send + Sync {
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
use hyper::{self, mime, header};
|
||||
use hyper::StatusCode;
|
||||
|
||||
use util::version;
|
||||
use parity_version::version;
|
||||
|
||||
use handlers::add_security_headers;
|
||||
use Embeddable;
|
||||
@@ -82,7 +82,7 @@ impl Into<hyper::Response> for ContentHandler {
|
||||
.with_status(self.code)
|
||||
.with_header(header::ContentType(self.mimetype))
|
||||
.with_body(self.content);
|
||||
add_security_headers(&mut res.headers_mut(), self.safe_to_embed_on);
|
||||
add_security_headers(&mut res.headers_mut(), self.safe_to_embed_on, false);
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ impl Into<hyper::Response> for EchoHandler {
|
||||
.with_header(content_type.unwrap_or(header::ContentType::json()))
|
||||
.with_body(self.request.body());
|
||||
|
||||
add_security_headers(res.headers_mut(), None);
|
||||
add_security_headers(res.headers_mut(), None, false);
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ use std::time::{Instant, Duration};
|
||||
use fetch::{self, Fetch};
|
||||
use futures::sync::oneshot;
|
||||
use futures::{self, Future};
|
||||
use hyper::{self, Method, StatusCode};
|
||||
use jsonrpc_core::BoxFuture;
|
||||
use futures_cpupool::CpuPool;
|
||||
use hyper::{self, StatusCode};
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use endpoint::{self, EndpointPath};
|
||||
@@ -32,11 +32,11 @@ use handlers::{ContentHandler, StreamingHandler};
|
||||
use page::local;
|
||||
use {Embeddable};
|
||||
|
||||
const FETCH_TIMEOUT: u64 = 300;
|
||||
const FETCH_TIMEOUT: Duration = Duration::from_secs(300);
|
||||
|
||||
pub enum ValidatorResponse {
|
||||
Local(local::Dapp),
|
||||
Streaming(StreamingHandler<fetch::Response>),
|
||||
Streaming(StreamingHandler<fetch::BodyReader>),
|
||||
}
|
||||
|
||||
pub trait ContentValidator: Sized + Send + 'static {
|
||||
@@ -57,7 +57,7 @@ impl Default for FetchControl {
|
||||
FetchControl {
|
||||
abort: Arc::new(AtomicBool::new(false)),
|
||||
listeners: Arc::new(Mutex::new(Vec::new())),
|
||||
deadline: Instant::now() + Duration::from_secs(FETCH_TIMEOUT),
|
||||
deadline: Instant::now() + FETCH_TIMEOUT,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -193,7 +193,7 @@ impl Errors {
|
||||
ContentHandler::error(
|
||||
StatusCode::GatewayTimeout,
|
||||
"Download Timeout",
|
||||
&format!("Could not fetch content within {} seconds.", FETCH_TIMEOUT),
|
||||
&format!("Could not fetch content within {} seconds.", FETCH_TIMEOUT.as_secs()),
|
||||
None,
|
||||
self.embeddable_on.clone(),
|
||||
)
|
||||
@@ -212,7 +212,7 @@ impl Errors {
|
||||
|
||||
enum FetchState {
|
||||
Error(ContentHandler),
|
||||
InProgress(BoxFuture<FetchState, ()>),
|
||||
InProgress(Box<Future<Item=FetchState, Error=()> + Send>),
|
||||
Streaming(hyper::Response),
|
||||
Done(local::Dapp, endpoint::Response),
|
||||
Empty,
|
||||
@@ -253,6 +253,7 @@ impl ContentFetcherHandler {
|
||||
installer: H,
|
||||
embeddable_on: Embeddable,
|
||||
fetch: F,
|
||||
pool: CpuPool,
|
||||
) -> Self {
|
||||
let fetch_control = FetchControl::default();
|
||||
let errors = Errors { embeddable_on };
|
||||
@@ -260,9 +261,10 @@ impl ContentFetcherHandler {
|
||||
// Validation of method
|
||||
let status = match *method {
|
||||
// Start fetching content
|
||||
Method::Get => {
|
||||
hyper::Method::Get => {
|
||||
trace!(target: "dapps", "Fetching content from: {:?}", url);
|
||||
FetchState::InProgress(Self::fetch_content(
|
||||
pool,
|
||||
fetch,
|
||||
url,
|
||||
fetch_control.abort.clone(),
|
||||
@@ -283,16 +285,17 @@ impl ContentFetcherHandler {
|
||||
}
|
||||
|
||||
fn fetch_content<H: ContentValidator, F: Fetch>(
|
||||
pool: CpuPool,
|
||||
fetch: F,
|
||||
url: &str,
|
||||
abort: Arc<AtomicBool>,
|
||||
path: EndpointPath,
|
||||
errors: Errors,
|
||||
installer: H,
|
||||
) -> BoxFuture<FetchState, ()> {
|
||||
) -> Box<Future<Item=FetchState, Error=()> + Send> {
|
||||
// Start fetching the content
|
||||
let fetch2 = fetch.clone();
|
||||
let future = fetch.fetch_with_abort(url, abort.into()).then(move |result| {
|
||||
let pool2 = pool.clone();
|
||||
let future = fetch.get(url, abort.into()).then(move |result| {
|
||||
trace!(target: "dapps", "Fetching content finished. Starting validation: {:?}", result);
|
||||
Ok(match result {
|
||||
Ok(response) => match installer.validate_and_install(response) {
|
||||
@@ -304,7 +307,7 @@ impl ContentFetcherHandler {
|
||||
Ok(ValidatorResponse::Streaming(stream)) => {
|
||||
trace!(target: "dapps", "Validation OK. Streaming response.");
|
||||
let (reading, response) = stream.into_response();
|
||||
fetch2.process_and_forget(reading);
|
||||
pool.spawn(reading).forget();
|
||||
FetchState::Streaming(response)
|
||||
},
|
||||
Err(e) => {
|
||||
@@ -320,7 +323,7 @@ impl ContentFetcherHandler {
|
||||
});
|
||||
|
||||
// make sure to run within fetch thread pool.
|
||||
fetch.process(future)
|
||||
Box::new(pool2.spawn(future))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ use hyper::header;
|
||||
use {apps, address, Embeddable};
|
||||
|
||||
/// Adds security-related headers to the Response.
|
||||
pub fn add_security_headers(headers: &mut header::Headers, embeddable_on: Embeddable) {
|
||||
pub fn add_security_headers(headers: &mut header::Headers, embeddable_on: Embeddable, allow_js_eval: bool) {
|
||||
headers.set_raw("X-XSS-Protection", "1; mode=block");
|
||||
headers.set_raw("X-Content-Type-Options", "nosniff");
|
||||
|
||||
@@ -47,6 +47,8 @@ pub fn add_security_headers(headers: &mut header::Headers, embeddable_on: Embedd
|
||||
|
||||
// Content Security Policy headers
|
||||
headers.set_raw("Content-Security-Policy", String::new()
|
||||
// Restrict everything to the same origin by default.
|
||||
+ "default-src 'self';"
|
||||
// Allow connecting to WS servers and HTTP(S) servers.
|
||||
// We could be more restrictive and allow only RPC server URL.
|
||||
+ "connect-src http: https: ws: wss:;"
|
||||
@@ -64,26 +66,29 @@ pub fn add_security_headers(headers: &mut header::Headers, embeddable_on: Embedd
|
||||
+ "style-src 'self' 'unsafe-inline' data: blob: https:;"
|
||||
// Allow fonts from data: and HTTPS.
|
||||
+ "font-src 'self' data: https:;"
|
||||
// Allow inline scripts and scripts eval (webpack/jsconsole)
|
||||
// Disallow objects
|
||||
+ "object-src 'none';"
|
||||
// Allow scripts
|
||||
+ {
|
||||
let script_src = embeddable_on.as_ref()
|
||||
.map(|e| e.extra_script_src.iter()
|
||||
.map(|&(ref host, port)| address(host, port))
|
||||
.join(" ")
|
||||
).unwrap_or_default();
|
||||
let eval = if allow_js_eval { " 'unsafe-eval'" } else { "" };
|
||||
|
||||
&format!(
|
||||
"script-src 'self' 'unsafe-inline' 'unsafe-eval' {};",
|
||||
script_src
|
||||
"script-src 'self' {}{};",
|
||||
script_src,
|
||||
eval
|
||||
)
|
||||
}
|
||||
// Same restrictions as script-src with additional
|
||||
// blob: that is required for camera access (worker)
|
||||
+ "worker-src 'self' 'unsafe-inline' 'unsafe-eval' https: blob:;"
|
||||
// Restrict everything else to the same origin.
|
||||
+ "default-src 'self';"
|
||||
+ "worker-src 'self' https: blob:;"
|
||||
// Run in sandbox mode (although it's not fully safe since we allow same-origin and script)
|
||||
+ "sandbox allow-same-origin allow-forms allow-modals allow-popups allow-presentation allow-scripts;"
|
||||
// Disallow subitting forms from any dapps
|
||||
// Disallow submitting forms from any dapps
|
||||
+ "form-action 'none';"
|
||||
// Never allow mixed content
|
||||
+ "block-all-mixed-content;"
|
||||
|
||||
@@ -51,7 +51,7 @@ impl<R: io::Read> StreamingHandler<R> {
|
||||
.with_status(self.status)
|
||||
.with_header(header::ContentType(self.mimetype))
|
||||
.with_body(body);
|
||||
add_security_headers(&mut res.headers_mut(), self.safe_to_embed_on);
|
||||
add_security_headers(&mut res.headers_mut(), self.safe_to_embed_on, false);
|
||||
|
||||
(reader, res)
|
||||
}
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
//! Ethcore Webapplications for Parity
|
||||
#![warn(missing_docs)]
|
||||
#![cfg_attr(feature="nightly", feature(plugin))]
|
||||
#![cfg_attr(feature="nightly", plugin(clippy))]
|
||||
|
||||
extern crate base32;
|
||||
extern crate futures_cpupool;
|
||||
@@ -32,18 +30,19 @@ extern crate serde_json;
|
||||
extern crate unicase;
|
||||
extern crate zip;
|
||||
|
||||
extern crate jsonrpc_core;
|
||||
extern crate jsonrpc_http_server;
|
||||
|
||||
extern crate ethcore_util as util;
|
||||
extern crate ethcore_bigint as bigint;
|
||||
extern crate ethcore_bytes as bytes;
|
||||
extern crate ethereum_types;
|
||||
extern crate fetch;
|
||||
extern crate node_health;
|
||||
extern crate parity_dapps_glue as parity_dapps;
|
||||
extern crate parity_hash_fetch as hash_fetch;
|
||||
extern crate parity_ui;
|
||||
extern crate hash;
|
||||
extern crate parity_ui_deprecation;
|
||||
extern crate keccak_hash as hash;
|
||||
extern crate parity_version;
|
||||
extern crate registrar;
|
||||
|
||||
#[macro_use]
|
||||
extern crate futures;
|
||||
@@ -52,10 +51,12 @@ extern crate log;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate env_logger;
|
||||
#[cfg(test)]
|
||||
extern crate ethcore_devtools as devtools;
|
||||
#[cfg(test)]
|
||||
extern crate env_logger;
|
||||
extern crate jsonrpc_core;
|
||||
#[cfg(test)]
|
||||
extern crate parity_reactor;
|
||||
|
||||
@@ -81,7 +82,7 @@ use parking_lot::RwLock;
|
||||
use fetch::Fetch;
|
||||
use node_health::NodeHealth;
|
||||
|
||||
pub use hash_fetch::urlhint::ContractClient;
|
||||
pub use registrar::{RegistrarClient, Asynchronous};
|
||||
pub use node_health::SyncStatus;
|
||||
|
||||
|
||||
@@ -109,7 +110,7 @@ impl Endpoints {
|
||||
/// Returns a current list of app endpoints.
|
||||
pub fn list(&self) -> Vec<apps::App> {
|
||||
self.endpoints.read().iter().filter_map(|(ref k, ref e)| {
|
||||
e.info().map(|ref info| apps::App::from_info(k, info))
|
||||
e.info().map(|ref info| info.with_id(k))
|
||||
}).collect()
|
||||
}
|
||||
|
||||
@@ -156,9 +157,10 @@ impl Middleware {
|
||||
pool: CpuPool,
|
||||
health: NodeHealth,
|
||||
dapps_domain: &str,
|
||||
registrar: Arc<ContractClient>,
|
||||
registrar: Arc<RegistrarClient<Call=Asynchronous>>,
|
||||
sync_status: Arc<SyncStatus>,
|
||||
fetch: F,
|
||||
info_page_only: bool,
|
||||
) -> Self {
|
||||
let content_fetcher = Arc::new(apps::fetcher::ContentFetcher::new(
|
||||
hash_fetch::urlhint::URLHintContract::new(registrar),
|
||||
@@ -166,6 +168,23 @@ impl Middleware {
|
||||
fetch.clone(),
|
||||
pool.clone(),
|
||||
).embeddable_on(None).allow_dapps(false));
|
||||
|
||||
if info_page_only {
|
||||
let mut special = HashMap::default();
|
||||
special.insert(router::SpecialEndpoint::Home, Some(apps::ui_deprecation(pool.clone())));
|
||||
|
||||
return Middleware {
|
||||
endpoints: Default::default(),
|
||||
router: router::Router::new(
|
||||
content_fetcher,
|
||||
None,
|
||||
special,
|
||||
None,
|
||||
dapps_domain.to_owned(),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
let special = {
|
||||
let mut special = special_endpoints(
|
||||
pool.clone(),
|
||||
@@ -199,7 +218,7 @@ impl Middleware {
|
||||
dapps_path: PathBuf,
|
||||
extra_dapps: Vec<PathBuf>,
|
||||
dapps_domain: &str,
|
||||
registrar: Arc<ContractClient>,
|
||||
registrar: Arc<RegistrarClient<Call=Asynchronous>>,
|
||||
sync_status: Arc<SyncStatus>,
|
||||
web_proxy_tokens: Arc<WebProxyTokens>,
|
||||
fetch: F,
|
||||
|
||||
@@ -75,6 +75,11 @@ impl<T: WebApp + 'static> Dapp<T> {
|
||||
fallback_to_index_html: false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Allow the dapp to use `unsafe-eval` to run JS.
|
||||
pub fn allow_js_eval(&mut self) {
|
||||
self.info.allow_js_eval = Some(true);
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: WebApp> Endpoint for Dapp<T> {
|
||||
@@ -117,6 +122,7 @@ impl<T: WebApp> Endpoint for Dapp<T> {
|
||||
file,
|
||||
cache: PageCache::Disabled,
|
||||
safe_to_embed_on: self.safe_to_embed_on.clone(),
|
||||
allow_js_eval: self.info.allow_js_eval.clone().unwrap_or(false),
|
||||
}.into_response();
|
||||
|
||||
self.pool.spawn(reader).forget();
|
||||
@@ -128,11 +134,14 @@ impl<T: WebApp> Endpoint for Dapp<T> {
|
||||
impl From<Info> for EndpointInfo {
|
||||
fn from(info: Info) -> Self {
|
||||
EndpointInfo {
|
||||
id: None,
|
||||
name: info.name.into(),
|
||||
description: info.description.into(),
|
||||
author: info.author.into(),
|
||||
icon_url: info.icon_url.into(),
|
||||
local_url: None,
|
||||
version: info.version.into(),
|
||||
allow_js_eval: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,9 @@
|
||||
use std::io;
|
||||
use std::time::{Duration, SystemTime};
|
||||
use hyper::{self, header, StatusCode};
|
||||
use hyper::mime::Mime;
|
||||
use hyper::mime::{self, Mime};
|
||||
|
||||
use apps;
|
||||
use handlers::{Reader, ContentHandler, add_security_headers};
|
||||
use {Embeddable};
|
||||
|
||||
@@ -58,6 +59,8 @@ pub struct PageHandler<T: DappFile> {
|
||||
pub safe_to_embed_on: Embeddable,
|
||||
/// Cache settings for this page.
|
||||
pub cache: PageCache,
|
||||
/// Allow JS unsafe-eval.
|
||||
pub allow_js_eval: bool,
|
||||
}
|
||||
|
||||
impl<T: DappFile> PageHandler<T> {
|
||||
@@ -92,10 +95,21 @@ impl<T: DappFile> PageHandler<T> {
|
||||
|
||||
headers.set(header::ContentType(file.content_type().to_owned()));
|
||||
|
||||
add_security_headers(&mut headers, self.safe_to_embed_on);
|
||||
add_security_headers(&mut headers, self.safe_to_embed_on, self.allow_js_eval);
|
||||
}
|
||||
|
||||
let (reader, body) = Reader::pair(file.into_reader(), Vec::new());
|
||||
let initial_content = if file.content_type().to_owned() == mime::TEXT_HTML {
|
||||
let content = &format!(
|
||||
r#"<script src="/{}/inject.js"></script>"#,
|
||||
apps::UTILS_PATH,
|
||||
);
|
||||
|
||||
content.as_bytes().to_vec()
|
||||
} else {
|
||||
Vec::new()
|
||||
};
|
||||
|
||||
let (reader, body) = Reader::pair(file.into_reader(), initial_content);
|
||||
res.set_body(body);
|
||||
(Some(reader), res)
|
||||
}
|
||||
|
||||
@@ -98,6 +98,7 @@ impl Dapp {
|
||||
file: self.get_file(path),
|
||||
cache: self.cache,
|
||||
safe_to_embed_on: self.embeddable_on.clone(),
|
||||
allow_js_eval: self.info.as_ref().and_then(|x| x.allow_js_eval).unwrap_or(false),
|
||||
}.into_response();
|
||||
|
||||
self.pool.spawn(reader).forget();
|
||||
|
||||
@@ -138,6 +138,7 @@ impl Router {
|
||||
},
|
||||
// Any other GET|HEAD requests to home page.
|
||||
_ if (is_get_request || is_head_request) && self.special.contains_key(&SpecialEndpoint::Home) => {
|
||||
trace!(target: "dapps", "Resolving to home page.");
|
||||
let special = self.special.get(&SpecialEndpoint::Home).expect("special known to contain key; qed");
|
||||
match *special {
|
||||
Some(ref special) => {
|
||||
@@ -149,10 +150,20 @@ impl Router {
|
||||
}
|
||||
},
|
||||
// RPC by default
|
||||
_ => {
|
||||
_ if self.special.contains_key(&SpecialEndpoint::Rpc) => {
|
||||
trace!(target: "dapps", "Resolving to RPC call.");
|
||||
Response::None(req)
|
||||
}
|
||||
},
|
||||
// 404 otherwise
|
||||
_ => {
|
||||
Response::Some(Box::new(future::ok(handlers::ContentHandler::error(
|
||||
hyper::StatusCode::NotFound,
|
||||
"404 Not Found",
|
||||
"Requested content was not found.",
|
||||
None,
|
||||
self.embeddable_on.clone(),
|
||||
).into())))
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,28 +166,31 @@ fn should_return_fetched_dapp_content() {
|
||||
|
||||
response1.assert_status("HTTP/1.1 200 OK");
|
||||
assert_security_headers_for_embed(&response1.headers);
|
||||
assert_eq!(
|
||||
response1.body,
|
||||
r#"18
|
||||
assert!(
|
||||
response1.body.contains(r#"18
|
||||
<h1>Hello Gavcoin!</h1>
|
||||
|
||||
0
|
||||
|
||||
"#
|
||||
"#),
|
||||
"Expected Gavcoin body: {}",
|
||||
response1.body
|
||||
);
|
||||
|
||||
response2.assert_status("HTTP/1.1 200 OK");
|
||||
assert_security_headers_for_embed(&response2.headers);
|
||||
assert_eq!(
|
||||
response2.body,
|
||||
r#"BE
|
||||
r#"EA
|
||||
{
|
||||
"id": "9c94e154dab8acf859b30ee80fc828fb1d38359d938751b65db71d460588d82a",
|
||||
"name": "Gavcoin",
|
||||
"description": "Gavcoin",
|
||||
"version": "1.0.0",
|
||||
"author": "",
|
||||
"iconUrl": "icon.png"
|
||||
"iconUrl": "icon.png",
|
||||
"localUrl": null,
|
||||
"allowJsEval": false
|
||||
}
|
||||
0
|
||||
|
||||
|
||||
@@ -14,12 +14,13 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use std::{io, thread, time};
|
||||
use std::{thread, time};
|
||||
use std::sync::{atomic, mpsc, Arc};
|
||||
use parking_lot::Mutex;
|
||||
use hyper;
|
||||
|
||||
use futures::{self, Future};
|
||||
use fetch::{self, Fetch};
|
||||
use futures::{self, future, Future};
|
||||
use fetch::{self, Fetch, Url, Request, Abort};
|
||||
|
||||
pub struct FetchControl {
|
||||
sender: mpsc::Sender<()>,
|
||||
@@ -33,8 +34,8 @@ impl FetchControl {
|
||||
}
|
||||
|
||||
pub fn wait_for_requests(&self, len: usize) {
|
||||
const MAX_TIMEOUT_MS: u64 = 5000;
|
||||
const ATTEMPTS: u64 = 10;
|
||||
const MAX_TIMEOUT: time::Duration = time::Duration::from_millis(5000);
|
||||
const ATTEMPTS: u32 = 10;
|
||||
let mut attempts_left = ATTEMPTS;
|
||||
loop {
|
||||
let current = self.fetch.requested.lock().len();
|
||||
@@ -49,7 +50,7 @@ impl FetchControl {
|
||||
} else {
|
||||
attempts_left -= 1;
|
||||
// Should we handle spurious timeouts better?
|
||||
thread::park_timeout(time::Duration::from_millis(MAX_TIMEOUT_MS / ATTEMPTS));
|
||||
thread::park_timeout(MAX_TIMEOUT / ATTEMPTS);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -96,12 +97,9 @@ impl FakeFetch {
|
||||
impl Fetch for FakeFetch {
|
||||
type Result = Box<Future<Item = fetch::Response, Error = fetch::Error> + Send>;
|
||||
|
||||
fn new() -> Result<Self, fetch::Error> where Self: Sized {
|
||||
Ok(FakeFetch::default())
|
||||
}
|
||||
|
||||
fn fetch_with_abort(&self, url: &str, _abort: fetch::Abort) -> Self::Result {
|
||||
self.requested.lock().push(url.into());
|
||||
fn fetch(&self, request: Request, abort: fetch::Abort) -> Self::Result {
|
||||
let u = request.url().clone();
|
||||
self.requested.lock().push(u.as_str().into());
|
||||
let manual = self.manual.clone();
|
||||
let response = self.response.clone();
|
||||
|
||||
@@ -111,23 +109,26 @@ impl Fetch for FakeFetch {
|
||||
// wait for manual resume
|
||||
let _ = rx.recv();
|
||||
}
|
||||
|
||||
let data = response.lock().take().unwrap_or(b"Some content");
|
||||
let cursor = io::Cursor::new(data);
|
||||
tx.send(fetch::Response::from_reader(cursor)).unwrap();
|
||||
tx.send(fetch::Response::new(u, hyper::Response::new().with_body(data), abort)).unwrap();
|
||||
});
|
||||
|
||||
Box::new(rx.map_err(|_| fetch::Error::Aborted))
|
||||
}
|
||||
|
||||
fn process_and_forget<F, I, E>(&self, f: F) where
|
||||
F: Future<Item=I, Error=E> + Send + 'static,
|
||||
I: Send + 'static,
|
||||
E: Send + 'static,
|
||||
{
|
||||
// Spawn the task in a separate thread.
|
||||
thread::spawn(|| {
|
||||
let _ = f.wait();
|
||||
});
|
||||
fn get(&self, url: &str, abort: Abort) -> Self::Result {
|
||||
let url: Url = match url.parse() {
|
||||
Ok(u) => u,
|
||||
Err(e) => return Box::new(future::err(e.into()))
|
||||
};
|
||||
self.fetch(Request::get(url), abort)
|
||||
}
|
||||
|
||||
fn post(&self, url: &str, abort: Abort) -> Self::Result {
|
||||
let url: Url = match url.parse() {
|
||||
Ok(u) => u,
|
||||
Err(e) => return Box::new(future::err(e.into()))
|
||||
};
|
||||
self.fetch(Request::post(url), abort)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use std::env;
|
||||
use std::str;
|
||||
use std::{env, io, str};
|
||||
use std::net::SocketAddr;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::Arc;
|
||||
@@ -25,7 +24,7 @@ use jsonrpc_http_server::{self as http, Host, DomainsValidation};
|
||||
use parity_reactor::Remote;
|
||||
|
||||
use devtools::http_client;
|
||||
use hash_fetch::urlhint::ContractClient;
|
||||
use registrar::{RegistrarClient, Asynchronous};
|
||||
use fetch::{Fetch, Client as FetchClient};
|
||||
use node_health::{NodeHealth, TimeChecker, CpuPool};
|
||||
|
||||
@@ -64,7 +63,7 @@ pub fn init_server<F, B>(process: F, io: IoHandler) -> (Server, Arc<FakeRegistra
|
||||
let mut dapps_path = env::temp_dir();
|
||||
dapps_path.push("non-existent-dir-to-prevent-fs-files-from-loading");
|
||||
|
||||
let mut builder = ServerBuilder::new(&dapps_path, registrar.clone());
|
||||
let mut builder = ServerBuilder::new(FetchClient::new().unwrap(), &dapps_path, registrar.clone());
|
||||
builder.signer_address = Some(("127.0.0.1".into(), SIGNER_PORT));
|
||||
let server = process(builder).start_unsecured_http(&"127.0.0.1:0".parse().unwrap(), io).unwrap();
|
||||
(
|
||||
@@ -145,18 +144,18 @@ pub fn assert_security_headers_for_embed(headers: &[String]) {
|
||||
/// Webapps HTTP+RPC server build.
|
||||
pub struct ServerBuilder<T: Fetch = FetchClient> {
|
||||
dapps_path: PathBuf,
|
||||
registrar: Arc<ContractClient>,
|
||||
registrar: Arc<RegistrarClient<Call=Asynchronous>>,
|
||||
sync_status: Arc<SyncStatus>,
|
||||
web_proxy_tokens: Arc<WebProxyTokens>,
|
||||
signer_address: Option<(String, u16)>,
|
||||
allowed_hosts: DomainsValidation<Host>,
|
||||
fetch: Option<T>,
|
||||
fetch: T,
|
||||
serve_ui: bool,
|
||||
}
|
||||
|
||||
impl ServerBuilder {
|
||||
/// Construct new dapps server
|
||||
pub fn new<P: AsRef<Path>>(dapps_path: P, registrar: Arc<ContractClient>) -> Self {
|
||||
pub fn new<P: AsRef<Path>>(fetch: FetchClient, dapps_path: P, registrar: Arc<RegistrarClient<Call=Asynchronous>>) -> Self {
|
||||
ServerBuilder {
|
||||
dapps_path: dapps_path.as_ref().to_owned(),
|
||||
registrar: registrar,
|
||||
@@ -164,7 +163,7 @@ impl ServerBuilder {
|
||||
web_proxy_tokens: Arc::new(|_| None),
|
||||
signer_address: None,
|
||||
allowed_hosts: DomainsValidation::Disabled,
|
||||
fetch: None,
|
||||
fetch: fetch,
|
||||
serve_ui: false,
|
||||
}
|
||||
}
|
||||
@@ -180,15 +179,14 @@ impl<T: Fetch> ServerBuilder<T> {
|
||||
web_proxy_tokens: self.web_proxy_tokens,
|
||||
signer_address: self.signer_address,
|
||||
allowed_hosts: self.allowed_hosts,
|
||||
fetch: Some(fetch),
|
||||
fetch: fetch,
|
||||
serve_ui: self.serve_ui,
|
||||
}
|
||||
}
|
||||
|
||||
/// Asynchronously start server with no authentication,
|
||||
/// returns result with `Server` handle on success or an error.
|
||||
pub fn start_unsecured_http(self, addr: &SocketAddr, io: IoHandler) -> Result<Server, http::Error> {
|
||||
let fetch = self.fetch_client();
|
||||
pub fn start_unsecured_http(self, addr: &SocketAddr, io: IoHandler) -> io::Result<Server> {
|
||||
Server::start_http(
|
||||
addr,
|
||||
io,
|
||||
@@ -200,17 +198,10 @@ impl<T: Fetch> ServerBuilder<T> {
|
||||
self.sync_status,
|
||||
self.web_proxy_tokens,
|
||||
Remote::new_sync(),
|
||||
fetch,
|
||||
self.fetch,
|
||||
self.serve_ui,
|
||||
)
|
||||
}
|
||||
|
||||
fn fetch_client(&self) -> T {
|
||||
match self.fetch.clone() {
|
||||
Some(fetch) => fetch,
|
||||
None => T::new().unwrap(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const DAPPS_DOMAIN: &'static str = "web3.site";
|
||||
@@ -228,13 +219,13 @@ impl Server {
|
||||
signer_address: Option<(String, u16)>,
|
||||
dapps_path: PathBuf,
|
||||
extra_dapps: Vec<PathBuf>,
|
||||
registrar: Arc<ContractClient>,
|
||||
registrar: Arc<RegistrarClient<Call=Asynchronous>>,
|
||||
sync_status: Arc<SyncStatus>,
|
||||
web_proxy_tokens: Arc<WebProxyTokens>,
|
||||
remote: Remote,
|
||||
fetch: F,
|
||||
serve_ui: bool,
|
||||
) -> Result<Server, http::Error> {
|
||||
) -> io::Result<Server> {
|
||||
let health = NodeHealth::new(
|
||||
sync_status.clone(),
|
||||
TimeChecker::new::<String>(&[], CpuPool::new(1)),
|
||||
@@ -249,6 +240,7 @@ impl Server {
|
||||
registrar,
|
||||
sync_status,
|
||||
fetch,
|
||||
false,
|
||||
)
|
||||
} else {
|
||||
Middleware::dapps(
|
||||
@@ -268,7 +260,7 @@ impl Server {
|
||||
};
|
||||
|
||||
let mut allowed_hosts: Option<Vec<Host>> = allowed_hosts.into();
|
||||
allowed_hosts.as_mut().map(|mut hosts| {
|
||||
allowed_hosts.as_mut().map(|hosts| {
|
||||
hosts.push(format!("http://*.{}:*", DAPPS_DOMAIN).into());
|
||||
hosts.push(format!("http://*.{}", DAPPS_DOMAIN).into());
|
||||
});
|
||||
|
||||
@@ -18,12 +18,11 @@ use std::str;
|
||||
use std::sync::Arc;
|
||||
use std::collections::HashMap;
|
||||
|
||||
use bigint::hash::H256;
|
||||
use ethereum_types::{H256, Address};
|
||||
use bytes::{Bytes, ToPretty};
|
||||
use hash_fetch::urlhint::{ContractClient, BoxFuture};
|
||||
use registrar::{RegistrarClient, Asynchronous};
|
||||
use parking_lot::Mutex;
|
||||
use rustc_hex::FromHex;
|
||||
use util::Address;
|
||||
|
||||
const REGISTRAR: &'static str = "8e4e9b13d4b45cb0befc93c3061b1408f67316b2";
|
||||
const URLHINT: &'static str = "deadbeefcafe0000000000000000000000000000";
|
||||
@@ -56,18 +55,20 @@ impl FakeRegistrar {
|
||||
|
||||
pub fn set_result(&self, hash: H256, result: Result<Bytes, String>) {
|
||||
self.responses.lock().insert(
|
||||
(URLHINT.into(), format!("{}{:?}", URLHINT_RESOLVE, hash)),
|
||||
(URLHINT.into(), format!("{}{:x}", URLHINT_RESOLVE, hash)),
|
||||
result
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
impl ContractClient for FakeRegistrar {
|
||||
fn registrar(&self) -> Result<Address, String> {
|
||||
impl RegistrarClient for FakeRegistrar {
|
||||
type Call = Asynchronous;
|
||||
|
||||
fn registrar_address(&self) -> Result<Address, String> {
|
||||
Ok(REGISTRAR.parse().unwrap())
|
||||
}
|
||||
|
||||
fn call(&self, address: Address, data: Bytes) -> BoxFuture<Bytes, String> {
|
||||
fn call_contract(&self, address: Address, data: Bytes) -> Self::Call {
|
||||
let call = (address.to_hex(), data.to_hex());
|
||||
self.calls.lock().push(call.clone());
|
||||
let res = self.responses.lock().get(&call).cloned().expect(&format!("No response for call: {:?}", call));
|
||||
|
||||
@@ -60,3 +60,32 @@ fn should_serve_home() {
|
||||
response.assert_header("Content-Type", "text/html");
|
||||
assert_security_headers(&response.headers);
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn should_inject_js() {
|
||||
// given
|
||||
let server = serve_ui();
|
||||
|
||||
// when
|
||||
let response = request(server,
|
||||
"\
|
||||
GET / HTTP/1.1\r\n\
|
||||
Host: 127.0.0.1:8080\r\n\
|
||||
Connection: close\r\n\
|
||||
\r\n\
|
||||
{}
|
||||
"
|
||||
);
|
||||
|
||||
// then
|
||||
response.assert_status("HTTP/1.1 200 OK");
|
||||
response.assert_header("Content-Type", "text/html");
|
||||
assert_eq!(
|
||||
response.body.contains(r#"/inject.js"></script>"#),
|
||||
true,
|
||||
"Expected inject script tag in: {}",
|
||||
response.body
|
||||
);
|
||||
assert_security_headers(&response.headers);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ use hyper::{mime, StatusCode};
|
||||
use apps;
|
||||
use endpoint::{Endpoint, EndpointPath, Request, Response};
|
||||
use futures::future;
|
||||
use futures_cpupool::CpuPool;
|
||||
use handlers::{
|
||||
ContentFetcherHandler, ContentHandler, ContentValidator, ValidatorResponse,
|
||||
StreamingHandler,
|
||||
@@ -35,6 +36,7 @@ pub struct Web<F> {
|
||||
embeddable_on: Embeddable,
|
||||
web_proxy_tokens: Arc<WebProxyTokens>,
|
||||
fetch: F,
|
||||
pool: CpuPool,
|
||||
}
|
||||
|
||||
impl<F: Fetch> Web<F> {
|
||||
@@ -42,11 +44,13 @@ impl<F: Fetch> Web<F> {
|
||||
embeddable_on: Embeddable,
|
||||
web_proxy_tokens: Arc<WebProxyTokens>,
|
||||
fetch: F,
|
||||
pool: CpuPool,
|
||||
) -> Box<Endpoint> {
|
||||
Box::new(Web {
|
||||
embeddable_on,
|
||||
web_proxy_tokens,
|
||||
fetch,
|
||||
pool,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -129,6 +133,7 @@ impl<F: Fetch> Endpoint for Web<F> {
|
||||
},
|
||||
self.embeddable_on.clone(),
|
||||
self.fetch.clone(),
|
||||
self.pool.clone(),
|
||||
))
|
||||
}
|
||||
}
|
||||
@@ -146,7 +151,7 @@ impl ContentValidator for WebInstaller {
|
||||
let is_html = response.is_html();
|
||||
let mime = response.content_type().unwrap_or(mime::TEXT_HTML);
|
||||
let mut handler = StreamingHandler::new(
|
||||
response,
|
||||
fetch::BodyReader::new(response),
|
||||
status,
|
||||
mime,
|
||||
self.embeddable_on,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
description = "Parity built-in dapps."
|
||||
name = "parity-ui-precompiled"
|
||||
version = "1.4.0"
|
||||
description = "Parity UI deprecation notice."
|
||||
name = "parity-ui-deprecation"
|
||||
version = "1.10.0"
|
||||
license = "GPL-3.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
build = "build.rs"
|
||||
@@ -12,8 +12,7 @@ use-precompiled-js = ["parity-dapps-glue/use-precompiled-js"]
|
||||
with-syntex = ["parity-dapps-glue/with-syntex"]
|
||||
|
||||
[build-dependencies]
|
||||
parity-dapps-glue = "1.8"
|
||||
parity-dapps-glue = "1.9"
|
||||
|
||||
[dependencies]
|
||||
parity-dapps-glue = "1.8"
|
||||
|
||||
parity-dapps-glue = "1.9"
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
@@ -17,6 +17,5 @@
|
||||
extern crate parity_dapps_glue;
|
||||
|
||||
fn main() {
|
||||
parity_dapps_glue::js::build(env!("CARGO_MANIFEST_DIR"), "build");
|
||||
parity_dapps_glue::generate();
|
||||
}
|
||||
119
dapps/ui-deprecation/build/index.html
Normal file
119
dapps/ui-deprecation/build/index.html
Normal file
@@ -0,0 +1,119 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>Parity</title>
|
||||
<style>
|
||||
/* Copyright 2015-2018 Parity Technologies (UK) Ltd.
|
||||
/* This file is part of Parity.
|
||||
/*
|
||||
/* Parity is free software: you can redistribute it and/or modify
|
||||
/* it under the terms of the GNU General Public License as published by
|
||||
/* the Free Software Foundation, either version 3 of the License, or
|
||||
/* (at your option) any later version.
|
||||
/*
|
||||
/* Parity is distributed in the hope that it will be useful,
|
||||
/* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
/* GNU General Public License for more details.
|
||||
/*
|
||||
/* You should have received a copy of the GNU General Public License
|
||||
/* along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
:root, :root body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
background: rgb(95, 95, 95);
|
||||
color: rgba(255, 255, 255, 0.75);
|
||||
font-size: 16px;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
:root a, :root a:visited {
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
color: rgb(0, 151, 167); /* #f80 */
|
||||
}
|
||||
|
||||
:root a:hover {
|
||||
color: rgb(0, 174, 193);
|
||||
}
|
||||
|
||||
h1,h2,h3,h4,h5,h6 {
|
||||
font-weight: 300;
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
line-height: 36px;
|
||||
color: rgb(0, 151, 167);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 20px;
|
||||
line-height: 34px;
|
||||
}
|
||||
|
||||
code,kbd,pre,samp {
|
||||
font-family: 'Roboto Mono', monospace;
|
||||
}
|
||||
|
||||
.parity-navbar {
|
||||
background: rgb(65, 65, 65);
|
||||
height: 72px;
|
||||
padding: 0 1rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.parity-status {
|
||||
clear: both;
|
||||
padding: 1rem;
|
||||
margin: 1rem 0;
|
||||
text-align: right;
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.parity-box {
|
||||
margin: 1rem;
|
||||
padding: 1rem;
|
||||
background-color: rgb(48, 48, 48);
|
||||
box-sizing: border-box;
|
||||
box-shadow: rgba(0, 0, 0, 0.117647) 0px 1px 6px, rgba(0, 0, 0, 0.117647) 0px 1px 4px;
|
||||
border-radius: 2px;
|
||||
z-index: 1;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.parity-box h1,
|
||||
.parity-box h2,
|
||||
.parity-box h3,
|
||||
.parity-box h4,
|
||||
.parity-box h5,
|
||||
.parity-box h6 {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="parity-navbar">
|
||||
</div>
|
||||
<div class="parity-box">
|
||||
<h1>The Parity UI has been split off into a standalone project.</h1>
|
||||
<h3>Get the standalone Parity UI from <a href="https://github.com/Parity-JS/shell/releases">here</a></h3>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<div class="parity-status">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
@@ -19,4 +19,3 @@ include!(concat!(env!("OUT_DIR"), "/lib.rs"));
|
||||
|
||||
#[cfg(not(feature = "with-syntex"))]
|
||||
include!("lib.rs.in");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
@@ -40,10 +40,10 @@ impl WebApp for App {
|
||||
|
||||
fn info(&self) -> Info {
|
||||
Info {
|
||||
name: "Parity UI",
|
||||
name: "Parity Wallet info page",
|
||||
version: env!("CARGO_PKG_VERSION"),
|
||||
author: "Parity <admin@parity.io>",
|
||||
description: "New UI for Parity.",
|
||||
description: "Deprecation notice for Parity Wallet",
|
||||
icon_url: "icon.png",
|
||||
}
|
||||
}
|
||||
@@ -3,17 +3,18 @@ description = "Ethcore Parity UI"
|
||||
homepage = "http://parity.io"
|
||||
license = "GPL-3.0"
|
||||
name = "parity-ui"
|
||||
version = "1.8.0"
|
||||
version = "1.11.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
|
||||
[build-dependencies]
|
||||
rustc_version = "0.1"
|
||||
rustc_version = "0.2"
|
||||
|
||||
[dependencies]
|
||||
parity-ui-dev = { path = "../../js", optional = true }
|
||||
# This is managed by the js/scripts/release.sh script on CI - keep it in a single line
|
||||
parity-ui-precompiled = { git = "https://github.com/paritytech/js-precompiled.git", optional = true, branch = "beta" }
|
||||
parity-ui-dev = { git = "https://github.com/parity-js/shell.git", rev = "eecaadcb9e421bce31e91680d14a20bbd38f92a2", optional = true }
|
||||
parity-ui-old-dev = { git = "https://github.com/parity-js/dapp-wallet.git", rev = "65deb02e7c007a0fd8aab0c089c93e3fd1de6f87", optional = true }
|
||||
parity-ui-precompiled = { git = "https://github.com/js-dist-paritytech/parity-master-1-10-shell.git", rev="bd25b41cd642c6b822d820dded3aa601a29aa079", optional = true }
|
||||
parity-ui-old-precompiled = { git = "https://github.com/js-dist-paritytech/parity-master-1-10-wallet.git", rev="4b6f112412716cd05123d32eeb7fda448288a6c6", optional = true }
|
||||
|
||||
[features]
|
||||
no-precompiled-js = ["parity-ui-dev"]
|
||||
use-precompiled-js = ["parity-ui-precompiled"]
|
||||
no-precompiled-js = ["parity-ui-dev", "parity-ui-old-dev"]
|
||||
use-precompiled-js = ["parity-ui-precompiled", "parity-ui-old-precompiled"]
|
||||
|
||||
@@ -29,5 +29,18 @@ mod inner {
|
||||
pub use self::parity_ui_precompiled::*;
|
||||
}
|
||||
|
||||
#[cfg(feature = "parity-ui-old-dev")]
|
||||
pub mod old {
|
||||
extern crate parity_ui_old_dev;
|
||||
|
||||
pub use self::parity_ui_old_dev::*;
|
||||
}
|
||||
|
||||
#[cfg(feature = "parity-ui-old-precompiled")]
|
||||
pub mod old {
|
||||
extern crate parity_ui_old_precompiled;
|
||||
|
||||
pub use self::parity_ui_old_precompiled::*;
|
||||
}
|
||||
|
||||
pub use self::inner::*;
|
||||
|
||||
@@ -3,14 +3,5 @@ description = "Ethcore development/test/build tools"
|
||||
homepage = "http://parity.io"
|
||||
license = "GPL-3.0"
|
||||
name = "ethcore-devtools"
|
||||
version = "1.8.0"
|
||||
version = "1.11.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
|
||||
[dependencies]
|
||||
rand = "0.3"
|
||||
|
||||
[features]
|
||||
|
||||
[lib]
|
||||
path = "src/lib.rs"
|
||||
test = true
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
use std::thread;
|
||||
use std::time::Duration;
|
||||
use std::io::{Read, Write};
|
||||
use std::io::{self, Read, Write};
|
||||
use std::str::{self, Lines};
|
||||
use std::net::{TcpStream, SocketAddr};
|
||||
|
||||
@@ -83,9 +83,18 @@ pub fn request(address: &SocketAddr, request: &str) -> Response {
|
||||
req.set_read_timeout(Some(Duration::from_secs(2))).unwrap();
|
||||
req.write_all(request.as_bytes()).unwrap();
|
||||
|
||||
let mut response = String::new();
|
||||
let _ = req.read_to_string(&mut response);
|
||||
let mut response = Vec::new();
|
||||
loop {
|
||||
let mut chunk = [0; 32 *1024];
|
||||
match req.read(&mut chunk) {
|
||||
Err(ref err) if err.kind() == io::ErrorKind::WouldBlock => break,
|
||||
Err(err) => panic!("Unable to read response: {:?}", err),
|
||||
Ok(0) => break,
|
||||
Ok(read) => response.extend_from_slice(&chunk[..read]),
|
||||
}
|
||||
}
|
||||
|
||||
let response = String::from_utf8_lossy(&response).into_owned();
|
||||
let mut lines = response.lines();
|
||||
let status = lines.next().expect("Expected a response").to_owned();
|
||||
let headers_raw = read_block(&mut lines, false);
|
||||
|
||||
@@ -16,14 +16,4 @@
|
||||
|
||||
//! dev-tools
|
||||
|
||||
|
||||
extern crate rand;
|
||||
|
||||
mod random_path;
|
||||
mod test_socket;
|
||||
mod stop_guard;
|
||||
pub mod http_client;
|
||||
|
||||
pub use random_path::*;
|
||||
pub use test_socket::*;
|
||||
pub use stop_guard::*;
|
||||
|
||||
@@ -1,148 +0,0 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! Random path
|
||||
|
||||
use std::path::*;
|
||||
use std::fs;
|
||||
use std::env;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
use rand::random;
|
||||
|
||||
pub struct RandomTempPath {
|
||||
path: PathBuf,
|
||||
pub panic_on_drop_failure: bool,
|
||||
}
|
||||
|
||||
pub fn random_filename() -> String {
|
||||
random_str(8)
|
||||
}
|
||||
|
||||
pub fn random_str(len: usize) -> String {
|
||||
(0..len).map(|_| ((random::<f32>() * 26.0) as u8 + 97) as char).collect()
|
||||
}
|
||||
|
||||
impl RandomTempPath {
|
||||
pub fn new() -> RandomTempPath {
|
||||
let mut dir = env::temp_dir();
|
||||
dir.push(random_filename());
|
||||
RandomTempPath {
|
||||
path: dir.clone(),
|
||||
panic_on_drop_failure: true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn create_dir() -> RandomTempPath {
|
||||
let mut dir = env::temp_dir();
|
||||
dir.push(random_filename());
|
||||
fs::create_dir_all(dir.as_path()).unwrap();
|
||||
RandomTempPath {
|
||||
path: dir.clone(),
|
||||
panic_on_drop_failure: true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn as_path(&self) -> &PathBuf {
|
||||
&self.path
|
||||
}
|
||||
|
||||
pub fn as_str(&self) -> &str {
|
||||
self.path.to_str().unwrap()
|
||||
}
|
||||
|
||||
pub fn new_in(&self, name: &str) -> String {
|
||||
let mut path = self.path.clone();
|
||||
path.push(name);
|
||||
path.to_str().unwrap().to_owned()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<Path> for RandomTempPath {
|
||||
fn as_ref(&self) -> &Path {
|
||||
self.as_path()
|
||||
}
|
||||
}
|
||||
impl Deref for RandomTempPath {
|
||||
type Target = Path;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
self.as_path()
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for RandomTempPath {
|
||||
fn drop(&mut self) {
|
||||
if let Err(_) = fs::remove_dir_all(&self) {
|
||||
if let Err(e) = fs::remove_file(&self) {
|
||||
if self.panic_on_drop_failure {
|
||||
panic!("Failed to remove temp directory. Here's what prevented this from happening: ({})", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct GuardedTempResult<T> {
|
||||
pub result: Option<T>,
|
||||
pub _temp: RandomTempPath,
|
||||
}
|
||||
|
||||
impl<T> GuardedTempResult<T> {
|
||||
pub fn reference(&self) -> &T {
|
||||
self.result.as_ref().unwrap()
|
||||
}
|
||||
|
||||
pub fn reference_mut(&mut self) -> &mut T {
|
||||
self.result.as_mut().unwrap()
|
||||
}
|
||||
|
||||
pub fn take(&mut self) -> T {
|
||||
self.result.take().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Deref for GuardedTempResult<T> {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &T { self.result.as_ref().unwrap() }
|
||||
}
|
||||
|
||||
impl<T> DerefMut for GuardedTempResult<T> {
|
||||
fn deref_mut(&mut self) -> &mut T { self.result.as_mut().unwrap() }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn creates_dir() {
|
||||
let temp = RandomTempPath::create_dir();
|
||||
assert!(fs::metadata(temp.as_path()).unwrap().is_dir());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn destroys_dir() {
|
||||
let path_buf = {
|
||||
let temp = RandomTempPath::create_dir();
|
||||
assert!(fs::metadata(temp.as_path()).unwrap().is_dir());
|
||||
let path_buf = temp.as_path().to_path_buf();
|
||||
path_buf
|
||||
};
|
||||
|
||||
assert!(fs::metadata(&path_buf).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn provides_random() {
|
||||
let temp = RandomTempPath::create_dir();
|
||||
assert!(temp.as_path().to_str().is_some());
|
||||
}
|
||||
@@ -1,95 +0,0 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use std::io::*;
|
||||
use std::cmp;
|
||||
|
||||
pub struct TestSocket {
|
||||
pub read_buffer: Vec<u8>,
|
||||
pub write_buffer: Vec<u8>,
|
||||
pub cursor: usize,
|
||||
pub buf_size: usize,
|
||||
}
|
||||
|
||||
impl Default for TestSocket {
|
||||
fn default() -> Self {
|
||||
TestSocket::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl TestSocket {
|
||||
pub fn new() -> Self {
|
||||
TestSocket {
|
||||
read_buffer: vec![],
|
||||
write_buffer: vec![],
|
||||
cursor: 0,
|
||||
buf_size: 0,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_buf(buf_size: usize) -> TestSocket {
|
||||
TestSocket {
|
||||
read_buffer: vec![],
|
||||
write_buffer: vec![],
|
||||
cursor: 0,
|
||||
buf_size: buf_size,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_ready(data: Vec<u8>) -> TestSocket {
|
||||
TestSocket {
|
||||
read_buffer: data,
|
||||
write_buffer: vec![],
|
||||
cursor: 0,
|
||||
buf_size: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Read for TestSocket {
|
||||
fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
|
||||
let end_position = cmp::min(self.read_buffer.len(), self.cursor+buf.len());
|
||||
if self.cursor > end_position { return Ok(0) }
|
||||
let len = cmp::max(end_position - self.cursor, 0);
|
||||
match len {
|
||||
0 => Ok(0),
|
||||
_ => {
|
||||
for i in self.cursor..end_position {
|
||||
buf[i-self.cursor] = self.read_buffer[i];
|
||||
}
|
||||
self.cursor = end_position;
|
||||
Ok(len)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Write for TestSocket {
|
||||
fn write(&mut self, buf: &[u8]) -> Result<usize> {
|
||||
if self.buf_size == 0 || buf.len() < self.buf_size {
|
||||
self.write_buffer.extend(buf.iter().cloned());
|
||||
Ok(buf.len())
|
||||
}
|
||||
else {
|
||||
self.write_buffer.extend(buf.iter().take(self.buf_size).cloned());
|
||||
Ok(self.buf_size)
|
||||
}
|
||||
}
|
||||
|
||||
fn flush(&mut self) -> Result<()> {
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
77
docker/android/Dockerfile
Normal file
77
docker/android/Dockerfile
Normal file
@@ -0,0 +1,77 @@
|
||||
FROM ubuntu:xenial
|
||||
LABEL maintainer="Parity Technologies <devops@parity.io>"
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -yq sudo curl file build-essential wget git g++ cmake pkg-config bison flex \
|
||||
unzip lib32stdc++6 lib32z1 python autotools-dev automake autoconf libtool \
|
||||
gperf xsltproc docbook-xsl
|
||||
|
||||
# Rust & Cargo
|
||||
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
||||
ENV PATH /root/.cargo/bin:$PATH
|
||||
RUN rustup toolchain install stable
|
||||
RUN rustup target add --toolchain stable arm-linux-androideabi
|
||||
RUN rustup target add --toolchain stable armv7-linux-androideabi
|
||||
|
||||
# Android NDK and toolchain
|
||||
RUN cd /usr/local && \
|
||||
wget -q https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip && \
|
||||
unzip -q android-ndk-r16b-linux-x86_64.zip && \
|
||||
rm android-ndk-r16b-linux-x86_64.zip
|
||||
ENV NDK_HOME /usr/local/android-ndk-r16b
|
||||
RUN /usr/local/android-ndk-r16b/build/tools/make-standalone-toolchain.sh \
|
||||
--arch=arm --install-dir=/opt/ndk-standalone --stl=libc++ --platform=android-26
|
||||
ENV PATH $PATH:/opt/ndk-standalone/bin
|
||||
|
||||
# Compiling OpenSSL for Android
|
||||
RUN cd /root && \
|
||||
git clone git://git.openssl.org/openssl.git && \
|
||||
cd openssl && \
|
||||
git checkout OpenSSL_1_1_0-stable
|
||||
ENV CROSS_SYSROOT /opt/ndk-standalone/sysroot
|
||||
RUN cd /root/openssl && \
|
||||
./Configure android-armeabi --cross-compile-prefix=arm-linux-androideabi- \
|
||||
-static no-stdio no-ui \
|
||||
-I/usr/local/android-ndk-r16b/sysroot/usr/include \
|
||||
-I/usr/local/android-ndk-r16b/sysroot/usr/include/arm-linux-androideabi \
|
||||
-L/usr/local/android-ndk-r16b/sysroot/usr/lib \
|
||||
--prefix=/opt/ndk-standalone/sysroot/usr
|
||||
RUN cd /root/openssl && \
|
||||
make build_libs && \
|
||||
make install_dev
|
||||
RUN rm -rf /root/openssl
|
||||
|
||||
# Compiling libudev for Android
|
||||
# This is the most hacky part of the process, as we need to apply a patch and pass specific
|
||||
# options that the compiler environment doesn't define.
|
||||
RUN cd /root && \
|
||||
git clone https://github.com/gentoo/eudev.git
|
||||
ADD libudev.patch /root
|
||||
RUN cd /root/eudev && \
|
||||
git checkout 83d918449f22720d84a341a05e24b6d109e6d3ae && \
|
||||
./autogen.sh && \
|
||||
./configure --disable-introspection --disable-programs --disable-hwdb \
|
||||
--host=arm-linux-androideabi --prefix=/opt/ndk-standalone/sysroot/usr/ \
|
||||
--enable-shared=false CC=arm-linux-androideabi-clang \
|
||||
CFLAGS="-D LINE_MAX=2048 -D RLIMIT_NLIMITS=15 -D IPTOS_LOWCOST=2 -std=gnu99" \
|
||||
CXX=arm-linux-androideabi-clang++ && \
|
||||
git apply - < /root/libudev.patch && \
|
||||
make && \
|
||||
make install
|
||||
RUN rm -rf /root/eudev
|
||||
RUN rm /root/libudev.patch
|
||||
|
||||
# Rust-related configuration
|
||||
ADD cargo-config.toml /root/.cargo/config
|
||||
ENV ARM_LINUX_ANDROIDEABI_OPENSSL_DIR /opt/ndk-standalone/sysroot/usr
|
||||
ENV ARMV7_LINUX_ANDROIDEABI_OPENSSL_DIR /opt/ndk-standalone/sysroot/usr
|
||||
ENV CC_arm_linux_androideabi arm-linux-androideabi-clang
|
||||
ENV CC_armv7_linux_androideabi arm-linux-androideabi-clang
|
||||
ENV CXX_arm_linux_androideabi arm-linux-androideabi-clang++
|
||||
ENV CXX_armv7_linux_androideabi arm-linux-androideabi-clang++
|
||||
ENV AR_arm_linux_androideabi arm-linux-androideabi-ar
|
||||
ENV AR_armv7_linux_androideabi arm-linux-androideabi-ar
|
||||
ENV CFLAGS_arm_linux_androideabi -std=gnu11 -fPIC -D OS_ANDROID
|
||||
ENV CFLAGS_armv7_linux_androideabi -std=gnu11 -fPIC -D OS_ANDROID
|
||||
ENV CXXFLAGS_arm_linux_androideabi -std=gnu++11 -fPIC -fexceptions -frtti -static-libstdc++ -D OS_ANDROID
|
||||
ENV CXXFLAGS_armv7_linux_androideabi -std=gnu++11 -fPIC -fexceptions -frtti -static-libstdc++ -D OS_ANDROID
|
||||
9
docker/android/cargo-config.toml
Normal file
9
docker/android/cargo-config.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[target.armv7-linux-androideabi]
|
||||
linker = "arm-linux-androideabi-clang"
|
||||
ar = "arm-linux-androideabi-ar"
|
||||
rustflags = ["-C", "link-arg=-lc++_static", "-C", "link-arg=-lc++abi", "-C", "link-arg=-landroid_support"]
|
||||
|
||||
[target.arm-linux-androideabi]
|
||||
linker = "arm-linux-androideabi-clang"
|
||||
ar = "arm-linux-androideabi-ar"
|
||||
rustflags = ["-C", "link-arg=-lc++_static", "-C", "link-arg=-lc++abi", "-C", "link-arg=-landroid_support"]
|
||||
216
docker/android/libudev.patch
Normal file
216
docker/android/libudev.patch
Normal file
@@ -0,0 +1,216 @@
|
||||
diff --git a/src/collect/collect.c b/src/collect/collect.c
|
||||
index 2cf1f00..b24f26b 100644
|
||||
--- a/src/collect/collect.c
|
||||
+++ b/src/collect/collect.c
|
||||
@@ -84,7 +84,7 @@ static void usage(void)
|
||||
" invoked for each ID in <idlist>) collect returns 0, the\n"
|
||||
" number of missing IDs otherwise.\n"
|
||||
" On error a negative number is returned.\n\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
}
|
||||
|
||||
/*
|
||||
diff --git a/src/scsi_id/scsi_id.c b/src/scsi_id/scsi_id.c
|
||||
index 8b76d87..7bf3948 100644
|
||||
--- a/src/scsi_id/scsi_id.c
|
||||
+++ b/src/scsi_id/scsi_id.c
|
||||
@@ -321,7 +321,7 @@ static void help(void) {
|
||||
" -u --replace-whitespace Replace all whitespace by underscores\n"
|
||||
" -v --verbose Verbose logging\n"
|
||||
" -x --export Print values as environment keys\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
|
||||
}
|
||||
|
||||
diff --git a/src/shared/hashmap.h b/src/shared/hashmap.h
|
||||
index a03ee58..a7c2005 100644
|
||||
--- a/src/shared/hashmap.h
|
||||
+++ b/src/shared/hashmap.h
|
||||
@@ -98,10 +98,7 @@ extern const struct hash_ops uint64_hash_ops;
|
||||
#if SIZEOF_DEV_T != 8
|
||||
unsigned long devt_hash_func(const void *p, const uint8_t hash_key[HASH_KEY_SIZE]) _pure_;
|
||||
int devt_compare_func(const void *a, const void *b) _pure_;
|
||||
-extern const struct hash_ops devt_hash_ops = {
|
||||
- .hash = devt_hash_func,
|
||||
- .compare = devt_compare_func
|
||||
-};
|
||||
+extern const struct hash_ops devt_hash_ops;
|
||||
#else
|
||||
#define devt_hash_func uint64_hash_func
|
||||
#define devt_compare_func uint64_compare_func
|
||||
diff --git a/src/shared/log.c b/src/shared/log.c
|
||||
index 4a40996..1496984 100644
|
||||
--- a/src/shared/log.c
|
||||
+++ b/src/shared/log.c
|
||||
@@ -335,7 +335,7 @@ static int write_to_syslog(
|
||||
|
||||
IOVEC_SET_STRING(iovec[0], header_priority);
|
||||
IOVEC_SET_STRING(iovec[1], header_time);
|
||||
- IOVEC_SET_STRING(iovec[2], program_invocation_short_name);
|
||||
+ IOVEC_SET_STRING(iovec[2], "parity");
|
||||
IOVEC_SET_STRING(iovec[3], header_pid);
|
||||
IOVEC_SET_STRING(iovec[4], buffer);
|
||||
|
||||
@@ -383,7 +383,7 @@ static int write_to_kmsg(
|
||||
char_array_0(header_pid);
|
||||
|
||||
IOVEC_SET_STRING(iovec[0], header_priority);
|
||||
- IOVEC_SET_STRING(iovec[1], program_invocation_short_name);
|
||||
+ IOVEC_SET_STRING(iovec[1], "parity");
|
||||
IOVEC_SET_STRING(iovec[2], header_pid);
|
||||
IOVEC_SET_STRING(iovec[3], buffer);
|
||||
IOVEC_SET_STRING(iovec[4], "\n");
|
||||
diff --git a/src/udev/udevadm-control.c b/src/udev/udevadm-control.c
|
||||
index 6af7163..3271e56 100644
|
||||
--- a/src/udev/udevadm-control.c
|
||||
+++ b/src/udev/udevadm-control.c
|
||||
@@ -41,7 +41,7 @@ static void print_help(void) {
|
||||
" -p --property=KEY=VALUE Set a global property for all events\n"
|
||||
" -m --children-max=N Maximum number of children\n"
|
||||
" --timeout=SECONDS Maximum time to block for a reply\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
}
|
||||
|
||||
static int adm_control(struct udev *udev, int argc, char *argv[]) {
|
||||
diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c
|
||||
index 0aec976..a31ac02 100644
|
||||
--- a/src/udev/udevadm-info.c
|
||||
+++ b/src/udev/udevadm-info.c
|
||||
@@ -279,7 +279,7 @@ static void help(void) {
|
||||
" -P --export-prefix Export the key name with a prefix\n"
|
||||
" -e --export-db Export the content of the udev database\n"
|
||||
" -c --cleanup-db Clean up the udev database\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
}
|
||||
|
||||
static int uinfo(struct udev *udev, int argc, char *argv[]) {
|
||||
diff --git a/src/udev/udevadm-monitor.c b/src/udev/udevadm-monitor.c
|
||||
index 15ded09..b58dd08 100644
|
||||
--- a/src/udev/udevadm-monitor.c
|
||||
+++ b/src/udev/udevadm-monitor.c
|
||||
@@ -73,7 +73,7 @@ static void help(void) {
|
||||
" -u --udev Print udev events\n"
|
||||
" -s --subsystem-match=SUBSYSTEM[/DEVTYPE] Filter events by subsystem\n"
|
||||
" -t --tag-match=TAG Filter events by tag\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
}
|
||||
|
||||
static int adm_monitor(struct udev *udev, int argc, char *argv[]) {
|
||||
diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c
|
||||
index 33597bc..b36a504 100644
|
||||
--- a/src/udev/udevadm-settle.c
|
||||
+++ b/src/udev/udevadm-settle.c
|
||||
@@ -43,7 +43,7 @@ static void help(void) {
|
||||
" --version Show package version\n"
|
||||
" -t --timeout=SECONDS Maximum time to wait for events\n"
|
||||
" -E --exit-if-exists=FILE Stop waiting if file exists\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
}
|
||||
|
||||
static int adm_settle(struct udev *udev, int argc, char *argv[]) {
|
||||
diff --git a/src/udev/udevadm-test-builtin.c b/src/udev/udevadm-test-builtin.c
|
||||
index baaeca9..50ed812 100644
|
||||
--- a/src/udev/udevadm-test-builtin.c
|
||||
+++ b/src/udev/udevadm-test-builtin.c
|
||||
@@ -39,7 +39,7 @@ static void help(struct udev *udev) {
|
||||
" -h --help Print this message\n"
|
||||
" --version Print version of the program\n\n"
|
||||
"Commands:\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
|
||||
udev_builtin_list(udev);
|
||||
}
|
||||
diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c
|
||||
index 47fd924..a855412 100644
|
||||
--- a/src/udev/udevadm-test.c
|
||||
+++ b/src/udev/udevadm-test.c
|
||||
@@ -39,7 +39,7 @@ static void help(void) {
|
||||
" --version Show package version\n"
|
||||
" -a --action=ACTION Set action string\n"
|
||||
" -N --resolve-names=early|late|never When to resolve names\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
}
|
||||
|
||||
static int adm_test(struct udev *udev, int argc, char *argv[]) {
|
||||
diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c
|
||||
index 4dc756a..67787d3 100644
|
||||
--- a/src/udev/udevadm-trigger.c
|
||||
+++ b/src/udev/udevadm-trigger.c
|
||||
@@ -92,7 +92,7 @@ static void help(void) {
|
||||
" -y --sysname-match=NAME Trigger devices with this /sys path\n"
|
||||
" --name-match=NAME Trigger devices with this /dev name\n"
|
||||
" -b --parent-match=NAME Trigger devices with that parent device\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
}
|
||||
|
||||
static int adm_trigger(struct udev *udev, int argc, char *argv[]) {
|
||||
diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c
|
||||
index 3e57cf6..b03dfaa 100644
|
||||
--- a/src/udev/udevadm.c
|
||||
+++ b/src/udev/udevadm.c
|
||||
@@ -62,7 +62,7 @@ static int adm_help(struct udev *udev, int argc, char *argv[]) {
|
||||
printf("%s [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]\n\n"
|
||||
"Send control commands or test the device manager.\n\n"
|
||||
"Commands:\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(udevadm_cmds); i++)
|
||||
if (udevadm_cmds[i]->help != NULL)
|
||||
@@ -128,7 +128,7 @@ int main(int argc, char *argv[]) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
- fprintf(stderr, "%s: missing or unknown command\n", program_invocation_short_name);
|
||||
+ fprintf(stderr, "%s: missing or unknown command\n", "parity");
|
||||
rc = 2;
|
||||
out:
|
||||
mac_selinux_finish();
|
||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
||||
index cf826c6..4eec0af 100644
|
||||
--- a/src/udev/udevd.c
|
||||
+++ b/src/udev/udevd.c
|
||||
@@ -1041,7 +1041,7 @@ static void help(void) {
|
||||
" -t --event-timeout=SECONDS Seconds to wait before terminating an event\n"
|
||||
" -N --resolve-names=early|late|never\n"
|
||||
" When to resolve users and groups\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
}
|
||||
|
||||
static int parse_argv(int argc, char *argv[]) {
|
||||
diff --git a/src/v4l_id/v4l_id.c b/src/v4l_id/v4l_id.c
|
||||
index 1dce0d5..f65badf 100644
|
||||
--- a/src/v4l_id/v4l_id.c
|
||||
+++ b/src/v4l_id/v4l_id.c
|
||||
@@ -49,7 +49,7 @@ int main(int argc, char *argv[]) {
|
||||
printf("%s [-h,--help] <device file>\n\n"
|
||||
"Video4Linux device identification.\n\n"
|
||||
" -h Print this message\n"
|
||||
- , program_invocation_short_name);
|
||||
+ , "parity");
|
||||
return 0;
|
||||
case '?':
|
||||
return -EINVAL;
|
||||
diff --git a/src/shared/path-util.c b/src/shared/path-util.c
|
||||
index 0744563..7151356 100644
|
||||
--- a/src/shared/path-util.c
|
||||
+++ b/src/shared/path-util.c
|
||||
@@ -109,7 +109,7 @@ char *path_make_absolute_cwd(const char *p) {
|
||||
if (path_is_absolute(p))
|
||||
return strdup(p);
|
||||
|
||||
- cwd = get_current_dir_name();
|
||||
+ cwd = getcwd(malloc(128), 128);
|
||||
if (!cwd)
|
||||
return NULL;
|
||||
|
||||
@@ -27,20 +27,7 @@ RUN apt-get update && \
|
||||
libudev-dev \
|
||||
pkg-config \
|
||||
dpkg-dev \
|
||||
# evmjit dependencies
|
||||
zlib1g-dev \
|
||||
libedit-dev \
|
||||
libudev-dev &&\
|
||||
# cmake and llvm ppa's. then update ppa's
|
||||
add-apt-repository -y "ppa:george-edison55/cmake-3.x" && \
|
||||
add-apt-repository "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty-3.7 main" && \
|
||||
apt-get update && \
|
||||
apt-get install -y --force-yes cmake llvm-3.7-dev && \
|
||||
# install evmjit
|
||||
git clone https://github.com/debris/evmjit && \
|
||||
cd evmjit && \
|
||||
mkdir build && cd build && \
|
||||
cmake .. && make && make install && cd && \
|
||||
libudev-dev &&\
|
||||
# install rustup
|
||||
curl https://sh.rustup.rs -sSf | sh -s -- -y && \
|
||||
# rustup directory
|
||||
@@ -72,11 +59,7 @@ cd /build&&git clone https://github.com/paritytech/parity && \
|
||||
binutils \
|
||||
file \
|
||||
pkg-config \
|
||||
dpkg-dev \
|
||||
# evmjit dependencies
|
||||
zlib1g-dev \
|
||||
libedit-dev \
|
||||
cmake llvm-3.7-dev&&\
|
||||
dpkg-dev &&\
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
# setup ENTRYPOINT
|
||||
EXPOSE 8080 8545 8180
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
FROM ubuntu:14.04
|
||||
WORKDIR /build
|
||||
|
||||
# install tools and dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install -y \
|
||||
# make
|
||||
build-essential \
|
||||
# add-apt-repository
|
||||
software-properties-common \
|
||||
curl \
|
||||
wget \
|
||||
git \
|
||||
g++ \
|
||||
binutils \
|
||||
file \
|
||||
# evmjit dependencies
|
||||
zlib1g-dev \
|
||||
libedit-dev
|
||||
|
||||
# cmake and llvm ppas. then update ppas
|
||||
RUN add-apt-repository -y "ppa:george-edison55/cmake-3.x" && \
|
||||
add-apt-repository "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty-3.7 main" && \
|
||||
apt-get update && \
|
||||
apt-get install -y --force-yes cmake llvm-3.7-dev
|
||||
|
||||
# install evmjit
|
||||
RUN git clone https://github.com/debris/evmjit && \
|
||||
cd evmjit && \
|
||||
mkdir build && cd build && \
|
||||
cmake .. && make && make install && cd
|
||||
|
||||
# install rustup
|
||||
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
||||
|
||||
# rustup directory
|
||||
ENV PATH /root/.cargo/bin:$PATH
|
||||
|
||||
# show backtraces
|
||||
ENV RUST_BACKTRACE 1
|
||||
|
||||
# show tools
|
||||
RUN rustc -vV && \
|
||||
cargo -V && \
|
||||
gcc -v &&\
|
||||
g++ -v
|
||||
|
||||
# build parity
|
||||
ADD . /build/parity
|
||||
RUN cd parity && \
|
||||
cargo build --release --features ethcore/jit --verbose && \
|
||||
ls /build/parity/target/release/parity && \
|
||||
strip /build/parity/target/release/parity
|
||||
|
||||
RUN file /build/parity/target/release/parity
|
||||
|
||||
EXPOSE 8080 8545 8180
|
||||
ENTRYPOINT ["/build/parity/target/release/parity"]
|
||||
@@ -1,3 +1,4 @@
|
||||
Note: Parity 0.9 reached End-of-Life on 2016-05-02 (EOL).
|
||||
|
||||
## Parity [beta-0.9.1](https://github.com/paritytech/parity/releases/tag/beta-0.9.1) (2016-02-16)
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Note: Parity 1.0 reached End-of-Life on 2016-06-24 (EOL).
|
||||
|
||||
## Parity [v1.0.2](https://github.com/paritytech/parity/releases/tag/v1.0.2) (2016-04-11)
|
||||
|
||||
Parity 1.0.2 release improves Json RPC compatibility and fixes a number of stability issues.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Note: Parity 1.1 reached End-of-Life on 2016-08-12 (EOL).
|
||||
|
||||
## Parity [v1.1.0](https://github.com/paritytech/parity/releases/tag/v1.1.0) (2016-05-02)
|
||||
|
||||
Parity 1.1.0 introduces:
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Note: Parity 1.2 reached End-of-Life on 2016-11-07 (EOL).
|
||||
|
||||
## Parity [v1.2.4](https://github.com/paritytech/parity/releases/tag/v1.2.4) (2016-08-09)
|
||||
|
||||
Parity 1.2.4 Is a maintenance release that fixes a [few](https://github.com/paritytech/parity/pull/1888/commits) issues related to mining and peer synchronization.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Note: Parity 1.3 reached End-of-Life on 2017-01-19 (EOL).
|
||||
|
||||
## Parity [v1.3.15](https://github.com/paritytech/parity/releases/tag/v1.3.15) (2016-12-10)
|
||||
|
||||
This patch release fixes an issue with syncing on the Ropsten test network.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Note: Parity 1.4 reached End-of-Life on 2017-03-13 (EOL).
|
||||
|
||||
## Parity [v1.4.12](https://github.com/paritytech/parity/releases/tag/v1.4.12) (2017-02-22)
|
||||
|
||||
This stable release fixes an issue with block uncle validation. Parity now allows uncle headers to have timestamp set to arbitrary future value.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Note: Parity 1.5 reached End-of-Life on 2017-07-28 (EOL).
|
||||
|
||||
## Parity [v1.5.12](https://github.com/paritytech/parity/releases/tag/v1.5.12) (2017-03-27)
|
||||
|
||||
Stable release that adds support for a new warp sync snapshot format.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Note: Parity 1.6 reached End-of-Life on 2017-10-15 (EOL).
|
||||
|
||||
## Parity [v1.6.10](https://github.com/paritytech/parity/releases/tag/v1.6.10) (2017-07-25)
|
||||
|
||||
This is a hotfix release for the stable channel addressing the recent [multi-signature wallet vulnerability](https://blog.parity.io/security-alert-high-2/). Note, upgrading is not mandatory, and all future multi-sig wallets created by any version of Parity are secure.
|
||||
|
||||
832
docs/CHANGELOG-1.7.md
Normal file
832
docs/CHANGELOG-1.7.md
Normal file
@@ -0,0 +1,832 @@
|
||||
Note: Parity 1.7 reached End-of-Life on 2018-01-25 (EOL).
|
||||
|
||||
### Parity [v1.7.13](https://github.com/paritytech/parity/releases/tag/v1.7.13) (2018-01-23)
|
||||
|
||||
Parity 1.7.13 is a bug-fix release to improve stability of PoA-networks. Users on Kovan or other Aura-based networks are advised to upgrade as this release fixes an issue introduced with 1.7.12 that causes Proof-of-Authority nodes to stop synchronizing the chain.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- AuRa fix for 1.7.x series ([#7666](https://github.com/paritytech/parity/pull/7666))
|
||||
- Fix Temporarily Invalid blocks handling ([#7613](https://github.com/paritytech/parity/pull/7613))
|
||||
- Handle temporarily invalid blocks in sync.
|
||||
- Fix tests.
|
||||
- Bump rustc-serialize
|
||||
- Bump version.
|
||||
- Update .gitlab-ci.yml
|
||||
- Fix lint
|
||||
- Remove slash from gitlab ci script to fix builds
|
||||
- Start build.
|
||||
|
||||
### Parity [v1.7.12](https://github.com/paritytech/parity/releases/tag/v1.7.12) (2018-01-09)
|
||||
|
||||
Parity 1.7.12 is a bug-fix release to improve performance and stability.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Fix stable builds for rustc 1.23.0 ([#7504](https://github.com/paritytech/parity/pull/7504))
|
||||
- Missing AuRa backports ([#7499](https://github.com/paritytech/parity/pull/7499)
|
||||
- Wait for future blocks in AuRa ([#7368](https://github.com/paritytech/parity/pull/7368))
|
||||
- Mark future blocks as temporarily invalid.
|
||||
- Don't check max.
|
||||
- Advance AuRa step as far as we can and prevent invalid blocks. ([#7451](https://github.com/paritytech/parity/pull/7451))
|
||||
- Advance AuRa step as far as we can.
|
||||
- Wait for future blocks.
|
||||
- Problem: AuRa's unsafeties around step duration ([#7282](https://github.com/paritytech/parity/pull/7282))
|
||||
- Fix tests.
|
||||
- Detect different node, same-key signing in aura ([#7245](https://github.com/paritytech/parity/pull/7245))
|
||||
- Detect different node, same-key signing in aura
|
||||
- Reduce scope of warning
|
||||
- Backports ([#7496](https://github.com/paritytech/parity/pull/7496))
|
||||
- Advance AuRa step as far as we can. ([#7451](https://github.com/paritytech/parity/pull/7451))
|
||||
- Advance AuRa step as far as we can.
|
||||
- Wait for future blocks.
|
||||
- Fixed panic when io is not available for export block, closes [#7486](https://github.com/paritytech/parity/issue/7486) ([#7495](https://github.com/paritytech/parity/pull/7495))
|
||||
- Update Parity Mainnet Bootnodes ([#7476](https://github.com/paritytech/parity/pull/7476))
|
||||
- Replace the Azure HDD bootnodes with the new ones :)
|
||||
- Bump version to 1.7.12
|
||||
|
||||
### Parity [v1.7.11](https://github.com/paritytech/parity/releases/tag/v1.7.11) (2017-12-29)
|
||||
|
||||
Parity 1.7.11 changes the default behavior of JSON-RPC CORS setting, and updates bootnodes for the Kovan and Foundation networks.
|
||||
|
||||
Note: The default value of `--jsonrpc-cors` option has been altered to disallow (potentially malicious) websites from accessing the low-sensitivity RPCs (viewing exposed accounts, proposing transactions for signing). Currently domains need to be whitelisted manually. To bring back previous behaviour run with `--jsonrpc-cors all` or `--jsonrpc-cors http://example.com`.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Stable Bootnodes and Warpnodes ([#7298](https://github.com/paritytech/parity/pull/7298))
|
||||
- New warp enodes ([#7287](https://github.com/paritytech/parity/pull/7287))
|
||||
- New warp enodes
|
||||
- Added one more warp enode; replaced spaces with tabs
|
||||
- Bump stable to 1.7.11
|
||||
- Update kovan boot nodes ([#7296](https://github.com/paritytech/parity/pull/7296))
|
||||
- Fix Cargo.lock
|
||||
- Updating mainnet bootnodes.
|
||||
- Update bootnodes ([#7363](https://github.com/paritytech/parity/pull/7363))
|
||||
- Updating mainnet bootnodes.
|
||||
- Add additional parity-beta bootnodes.
|
||||
- Restore old parity bootnodes and update foudation bootnodes
|
||||
- Ethstore optimizations ([#6827](https://github.com/paritytech/parity/pull/6827)) ([#6844](https://github.com/paritytech/parity/pull/6844)) ([#7347](https://github.com/paritytech/parity/pull/7347))
|
||||
- Fix default CORS. ([#7389](https://github.com/paritytech/parity/pull/7389))
|
||||
|
||||
### Parity [v1.7.10](https://github.com/paritytech/parity/releases/tag/v1.7.10) (2017-12-11)
|
||||
|
||||
Parity 1.7.10 applies fixes for Proof-of-Authority networks and schedules the Kovan-Byzantium hard-fork.
|
||||
|
||||
- The Kovan testnet will fork on block `5067000` at `Thu Dec 14 2017 05:40:03 UTC`.
|
||||
- This enables Byzantium features on Kovan.
|
||||
- This disables uncles on Kovan for stability reasons.
|
||||
- Proof-of-Authority networks are advised to set `maximumUncleCount` to 0 in a future `maximumUncleCountTransition` for stability reasons. See the [Kovan chain spec](https://github.com/paritytech/parity/blob/master/ethcore/res/ethereum/kovan.json) for an example. New PoA networks created with Parity will have this feature enabled by default.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Backports and HF block update ([#7243](https://github.com/paritytech/parity/pull/7243))
|
||||
- Reduce max block timestamp drift to 15 seconds ([#7240](https://github.com/paritytech/parity/pull/7240))
|
||||
- Add test for block timestamp validation within allowed drift
|
||||
- Update kovan HF block number. ([#7259](https://github.com/paritytech/parity/pull/7259))
|
||||
- [stable] Backports and Kovan HF ([#7235](https://github.com/paritytech/parity/pull/7235))
|
||||
- Escape inifinite loop in estimte_gas ([#7075](https://github.com/paritytech/parity/pull/7075))
|
||||
- Disable uncles by default ([#7006](https://github.com/paritytech/parity/pull/7006))
|
||||
- Maximum uncle count transition ([#7196](https://github.com/paritytech/parity/pull/7196))
|
||||
- Enable delayed maximum_uncle_count activation.
|
||||
- Fix tests.
|
||||
- Defer kovan HF.
|
||||
- Bump version.
|
||||
- Kovan HF.
|
||||
- Update Kovan HF block.
|
||||
- Fix compilation issues.
|
||||
- Fix aura test.
|
||||
- Add missing byzantium builtins.
|
||||
- Fix tests.
|
||||
- Bump version for installers.
|
||||
- Increase allowed time drift to 10s. ([#7238](https://github.com/paritytech/parity/pull/7238))
|
||||
|
||||
### Parity [v1.7.9](https://github.com/paritytech/parity/releases/tag/v1.7.9) (2017-11-14)
|
||||
|
||||
Parity 1.7.9 removes the ability to deploy built-in multi-signature wallets.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Bump to v1.7.9 ([#7047](https://github.com/paritytech/parity/pull/7047))
|
||||
- Disallow built-in multi-sig deploy (only watch) ([#7017](https://github.com/paritytech/parity/pull/7017))
|
||||
|
||||
### Parity [v1.7.8](https://github.com/paritytech/parity/releases/tag/v1.7.8) (2017-10-26)
|
||||
|
||||
Parity 1.7.8 fixes a critical Byzantium consensus issue. Update is highly recommended.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Refactor static context check in CREATE ([#6889](https://github.com/paritytech/parity/pull/6889))
|
||||
- Bump to v1.7.8 ([#6890](https://github.com/paritytech/parity/pull/6890))
|
||||
|
||||
## Parity [v1.7.7](https://github.com/paritytech/parity/releases/tag/v1.7.7) (2017-10-15)
|
||||
|
||||
Parity 1.7.7 fixes an issue with auto-update system. Updating is recommended, but not required for Byzantium.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Fix auto-update ([#6769](https://github.com/paritytech/parity/pull/6759))
|
||||
- Bump to v1.7.7
|
||||
- Updated ethabi to fix auto-update
|
||||
- Bumped fork block number for auto-update ([#6754](https://github.com/paritytech/parity/pull/6754))
|
||||
|
||||
## Parity [v1.7.6](https://github.com/paritytech/parity/releases/tag/v1.7.6) (2017-10-13)
|
||||
|
||||
Parity 1.7.6 includes a critical consensus-relevant fix for the Byzantium hard-fork. Please upgrade your Ethereum client before block number `4_370_000`.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Fixed modexp gas calculation overflow ([#6746](https://github.com/paritytech/parity/pull/6746))
|
||||
- Fixed modexp gas calculation overflow ([#6741](https://github.com/paritytech/parity/pull/6741))
|
||||
- Bump to v1.7.6
|
||||
|
||||
## Parity [v1.7.5](https://github.com/paritytech/parity/releases/tag/v1.7.5) (2017-10-12)
|
||||
|
||||
Parity 1.7.5 includes a critical consensus-relevant fix for the Byzantium hard-fork. Please upgrade your Ethereum client before block number `4_370_000`.
|
||||
|
||||
Parity 1.7.5 is the first stable release of the 1.7 branch. With this release the support for 1.6 releases ends. Please upgrade your stable nodes to 1.7.5.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Backport stable - Fixes Badges ([#6731](https://github.com/paritytech/parity/pull/6731))
|
||||
- Fix badges not showing up ([#6730](https://github.com/paritytech/parity/pull/6730))
|
||||
- Always fetch meta data first [badges]
|
||||
- Backport ([#6726](https://github.com/paritytech/parity/pull/6726))
|
||||
- Check vouch status on appId in addition to contentHash ([#6719](https://github.com/paritytech/parity/pull/6719))
|
||||
- Check vouch status on appId in addition to contentHash
|
||||
- Simplify var expansion
|
||||
- Merge [#6725](https://github.com/paritytech/parity/pull/6725)
|
||||
- Update new token fetching
|
||||
- Working Certifications Monitoring
|
||||
- Update on Certification / Revoke
|
||||
- Fix none-fetched tokens value display
|
||||
- Fix tests
|
||||
- Add updated MethodDecoding from master
|
||||
- v1.7.5 stabilized
|
||||
- Backport ([#6724](https://github.com/paritytech/parity/pull/6724))
|
||||
- Fixed RETURNDATA out of bounds check ([#6718](https://github.com/paritytech/parity/pull/6718))
|
||||
- Prevent going offline when restoring or taking snapshot ([#6694](https://github.com/paritytech/parity/pull/6694))
|
||||
- Bump to v1.7.5
|
||||
- Trigger beta js build & release ([#6721](https://github.com/paritytech/parity/pull/6721))
|
||||
|
||||
## Parity [v1.7.4](https://github.com/paritytech/parity/releases/tag/v1.7.4) (2017-10-11)
|
||||
|
||||
Parity 1.7.4 includes a critical consensus-relevant fix for the Byzantium hard-fork. Please upgrade your Ethereum client before block number `4_370_000`.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Backport ([#6715](https://github.com/paritytech/parity/pull/6715))
|
||||
- Fix estimate gas if from is not provided. ([#6714](https://github.com/paritytech/parity/pull/6714))
|
||||
- Display vouched overlay on dapps ([#6710](https://github.com/paritytech/parity/pull/6710))
|
||||
- Add vouch overlays to dapps
|
||||
- Cleanup address
|
||||
- Only run where we have a contentHash
|
||||
- Backporting ([#6712](https://github.com/paritytech/parity/pull/6712))
|
||||
- Bump to v1.7.4
|
||||
- Fixed potential exp len overflow ([#6686](https://github.com/paritytech/parity/pull/6686))
|
||||
- Fix warp sync blockers detection ([#6691](https://github.com/paritytech/parity/pull/6691))
|
||||
- Backport ([#6713](https://github.com/paritytech/parity/pull/6713))
|
||||
- Allow signer signing display of markdown ([#6707](https://github.com/paritytech/parity/pull/6707))
|
||||
- Fix default values for address input ([#6701](https://github.com/paritytech/parity/pull/6701))
|
||||
- Fix asciiToHex for characters < 0x10 ([#6702](https://github.com/paritytech/parity/pull/6702))
|
||||
|
||||
## Parity [v1.7.3](https://github.com/paritytech/parity/releases/tag/v1.7.3) (2017-10-09)
|
||||
|
||||
Parity 1.7.3 enables the Byzantium fork for Ethereum main network on Block 4_370_000 and offers a variety of bug fixes and stability improvements. Among them:
|
||||
|
||||
- Fixed network protocol version negotiation with Geth nodes v1.7.1+.
|
||||
- Fixed `RETURNDATA` size for built-ins. (Built-ins in some cases overwrite only a portion of the output memory slice.)
|
||||
- Multisig Wallet View now loads if multiple transactions happened within one block.
|
||||
- Improved stability of snapshot-sycns (warp).
|
||||
- Revised timeout and batch size constants for bigger blocks.
|
||||
- Renamed RPC receipt `statusCode` field to `status`.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Backporting ([#6676](https://github.com/paritytech/parity/pull/6676))
|
||||
- Fix wallet view ([#6597](https://github.com/paritytech/parity/pull/6597))
|
||||
- Add safe fail for empty logs
|
||||
- Filter transactions
|
||||
- Add more logging
|
||||
- Fix Wallet Creation and wallet tx list
|
||||
- Remove logs
|
||||
- Prevent selecting twice same wallet owner
|
||||
- Fix tests
|
||||
- Remove unused props
|
||||
- Disallow pasting recovery phrases on first run ([#6602](https://github.com/paritytech/parity/pull/6602))
|
||||
- Fix disallowing paste of recovery phrase on first run, ref [#6581](https://github.com/paritytech/parity/issues/6581)
|
||||
- Allow the leader of CATS pasting recovery phrases.
|
||||
- Updated systemd files for linux ([#6592](https://github.com/paritytech/parity/pull/6592))
|
||||
- Previous version put $BASE directory in root directory.
|
||||
- This version clearly explains how to run as root or as specific user.
|
||||
- Additional configuration:
|
||||
- send SIGHUP for clean exit,
|
||||
- restart on fail.
|
||||
- Tested on Ubuntu 16.04.3 LTS with 4.10.0-33-generic x86_64 kernel
|
||||
- Don't expose port 80 for parity anymore ([#6633](https://github.com/paritytech/parity/pull/6633))
|
||||
- Backporting ([#6675](https://github.com/paritytech/parity/pull/6675))
|
||||
- Required validators >= num owners ([#6551](https://github.com/paritytech/parity/pull/6551))
|
||||
- Debounce sync status. ([#6572](https://github.com/paritytech/parity/pull/6572))
|
||||
- Fixed network protocol version negotiation ([#6649](https://github.com/paritytech/parity/pull/6649))
|
||||
- Renamed RPC receipt statusCode field to status ([#6650](https://github.com/paritytech/parity/pull/6650))
|
||||
- Fixed RETURNDATA size for built-ins ([#6652](https://github.com/paritytech/parity/pull/6652))
|
||||
- Byzantium fork block number ([#6661](https://github.com/paritytech/parity/pull/6661))
|
||||
- Refreshing block number on status view ([#6610](https://github.com/paritytech/parity/pull/6610))
|
||||
- Tweaked block download timeouts ([#6595](https://github.com/paritytech/parity/pull/6595))
|
||||
- Backports ([#6563](https://github.com/paritytech/parity/pull/6563))
|
||||
- Sync progress and error handling fixes ([#6560](https://github.com/paritytech/parity/pull/6560))
|
||||
- Fixed receipt serialization and RPC ([#6555](https://github.com/paritytech/parity/pull/6555))
|
||||
- Bump to v1.7.3
|
||||
|
||||
## Parity [v1.7.2](https://github.com/paritytech/parity/releases/tag/v1.7.2) (2017-09-18)
|
||||
|
||||
Parity 1.7.2 is a bug-fix release to improve performance and stability. Among others, it addresses the following:
|
||||
|
||||
- Byzantium fork support for the Ropsten and Foundation networks.
|
||||
- Added support for the ConsenSys and Gnosis multi-signature wallets.
|
||||
- Significantly increased token registry and token balance lookup performance.
|
||||
- Fixed issues with the health status indicator in the wallet.
|
||||
- Tweaked warp-sync to quickly catch up with chains fallen back more than 10,000 blocks.
|
||||
- Fixes to the Chrome extension and macOS installer upgrades.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Fix output from eth_call. ([#6538](https://github.com/paritytech/parity/pull/6538))
|
||||
- Ropsten fork ([#6532](https://github.com/paritytech/parity/pull/6532))
|
||||
- Byzantium updates ([#6529](https://github.com/paritytech/parity/pull/6529))
|
||||
- Fix modexp bug: return 0 if base=0 ([#6424](https://github.com/paritytech/parity/pull/6424))
|
||||
- Running state test using parity-evm ([#6355](https://github.com/paritytech/parity/pull/6355))
|
||||
- Initial version of state tests.
|
||||
- Refactor state to support tracing.
|
||||
- Unify TransactResult.
|
||||
- Add test.
|
||||
- Byzantium updates ([#5855](https://github.com/paritytech/parity/pull/5855))
|
||||
- EIP-211 updates
|
||||
- Benchmarks
|
||||
- Blockhash instruction gas cost updated
|
||||
- More benches
|
||||
- EIP-684
|
||||
- EIP-649
|
||||
- EIP-658
|
||||
- Updated some tests
|
||||
- Modexp fixes
|
||||
- STATICCALL fixes
|
||||
- Pairing fixes
|
||||
- More STATICALL fixes
|
||||
- Use paritytech/bn
|
||||
- Fixed REVERTing of contract creation
|
||||
- Fixed more tests
|
||||
- Fixed more tests
|
||||
- Blockchain tests
|
||||
- Enable previously broken tests
|
||||
- Transition test
|
||||
- Updated tests
|
||||
- Fixed modexp reading huge numbers
|
||||
- Enabled max_code_size test
|
||||
- Review fixes
|
||||
- Updated pairing pricing
|
||||
- Missing commas (style)
|
||||
- Update test.rs
|
||||
- Small improvements
|
||||
- Eip161abc
|
||||
- Fix extension detection ([#6452](https://github.com/paritytech/parity/pull/6452)) ([#6524](https://github.com/paritytech/parity/pull/6524))
|
||||
- Fix extension detection.
|
||||
- Fix mobx quirks.
|
||||
- Update submodule.
|
||||
- Fix detecting hardware wallets. ([#6509](https://github.com/paritytech/parity/pull/6509))
|
||||
- Allow hardware device reads without lock. ([#6517](https://github.com/paritytech/parity/pull/6517))
|
||||
- Backports [#6497](https://github.com/paritytech/parity/pull/6497)
|
||||
- Fix slow balances ([#6471](https://github.com/paritytech/parity/pull/6471))
|
||||
- Update token updates
|
||||
- Update token info fetching
|
||||
- Update logger
|
||||
- Minor fixes to updates and notifications for balances
|
||||
- Use Pubsub
|
||||
- Fix timeout.
|
||||
- Use pubsub for status.
|
||||
- Fix signer subscription.
|
||||
- Process tokens in chunks.
|
||||
- Fix tokens loaded by chunks
|
||||
- Dispatch tokens asap
|
||||
- Fix chunks processing.
|
||||
- Better filter options
|
||||
- Parallel log fetching.
|
||||
- Fix signer polling.
|
||||
- Fix initial block query.
|
||||
- Token balances updates : the right(er) way
|
||||
- Better tokens info fetching
|
||||
- Fixes in token data fetching
|
||||
- Only fetch what's needed (tokens)
|
||||
- Fix linting issues
|
||||
- Update wasm-tests.
|
||||
- Fixing balances fetching
|
||||
- Fix requests tracking in UI
|
||||
- Fix request watching
|
||||
- Update the Logger
|
||||
- PR Grumbles Fixes
|
||||
- Eth_call returns output of contract creations ([#6420](https://github.com/paritytech/parity/pull/6420))
|
||||
- Eth_call returns output of contract creations
|
||||
- Fix parameters order.
|
||||
- Save outputs for light client as well.
|
||||
- Don't accept transactions above block gas limit.
|
||||
- Expose health status over RPC ([#6274](https://github.com/paritytech/parity/pull/6274))
|
||||
- Node-health to a separate crate.
|
||||
- Initialize node_health outside of dapps.
|
||||
- Expose health over RPC.
|
||||
- Bring back 412 and fix JS.
|
||||
- Add health to workspace and tests.
|
||||
- Fix compilation without default features.
|
||||
- Fix borked merge.
|
||||
- Revert to generics to avoid virtual calls.
|
||||
- Fix node-health tests.
|
||||
- Add missing trailing comma.
|
||||
- Fixing/removing failing JS tests.
|
||||
- Do not activate genesis epoch in immediate transition validator contract ([#6349](https://github.com/paritytech/parity/pull/6349))
|
||||
- Fix memory tracing.
|
||||
- Add test to cover that.
|
||||
- Ensure balances of constructor accounts are kept
|
||||
- Test balance of spec-constructed account is kept
|
||||
- Fix warning spam. [#6369](https://github.com/paritytech/parity/pull/6369)
|
||||
- Bump to 1.7.2
|
||||
- Fix eth_call [#6366](https://github.com/paritytech/parity/pull/6366)
|
||||
- Backporting [#6352](https://github.com/paritytech/parity/pull/6352)
|
||||
- Better check the created accounts before showing Startup Wizard [#6331](https://github.com/paritytech/parity/pull/6331)
|
||||
- Tweaked snapshot params [#6344](https://github.com/paritytech/parity/pull/6344)
|
||||
- Increase default gas limit for eth_call [#6337](https://github.com/paritytech/parity/pull/6337)
|
||||
- Fix balance increase.
|
||||
- Cap gas limit for dapp-originating requests.
|
||||
- Backports [#6333](https://github.com/paritytech/parity/pull/6333)
|
||||
- Overflow check in addition
|
||||
- Unexpose methods on UI RPC. [#6295](https://github.com/paritytech/parity/pull/6295)
|
||||
- Add more descriptive error when signing/decrypting using hw wallet.
|
||||
- Format instant change proofs correctly
|
||||
- Propagate stratum submit share error upstream [#6260](https://github.com/paritytech/parity/pull/6260)
|
||||
- Updated jsonrpc [#6264](https://github.com/paritytech/parity/pull/6264)
|
||||
- Using multiple NTP servers [#6173](https://github.com/paritytech/parity/pull/6173)
|
||||
- Small improvements to time estimation.
|
||||
- Allow multiple NTP servers to be used.
|
||||
- Removing boxing.
|
||||
- Update list of servers and add reference.
|
||||
- Fix dapps CSP when UI is exposed externally [#6178](https://github.com/paritytech/parity/pull/6178)
|
||||
- Allow embeding on any page when ui-hosts=all and fix dev_ui
|
||||
- Fix cache path when using --base-path [#6212](https://github.com/paritytech/parity/pull/6212)
|
||||
- Bump to v1.7.1
|
||||
- UI backports [#6332](https://github.com/paritytech/parity/pull/6332)
|
||||
- Time should not contribue to overall status. [#6276](https://github.com/paritytech/parity/pull/6276)
|
||||
- Add warning to web browser and fix links. [#6232](https://github.com/paritytech/parity/pull/6232)
|
||||
- Extension fixes [#6284](https://github.com/paritytech/parity/pull/6284)
|
||||
- Fix token symbols in extension.
|
||||
- Allow connections from firefox extension.
|
||||
- Add support for ConsenSys multisig wallet [#6153](https://github.com/paritytech/parity/pull/6153)
|
||||
- First draft of ConsenSys wallet
|
||||
- Fix transfer store // WIP Consensys Wallet
|
||||
- Rename walletABI JSON file
|
||||
- Fix wrong daylimit in wallet modal
|
||||
- Confirm/Revoke ConsensysWallet txs
|
||||
- Change of settings for the Multisig Wallet
|
||||
- Update README for beta [#6270](https://github.com/paritytech/parity/pull/6270)
|
||||
- Fixed macOS installer upgrade [#6221](https://github.com/paritytech/parity/pull/6221)
|
||||
|
||||
## Parity [v1.7.0](https://github.com/paritytech/parity/releases/tag/v1.7.0) (2017-07-28)
|
||||
|
||||
Parity 1.7.0 is a major release introducing several important features:
|
||||
|
||||
- **Experimental [Light client](https://github.com/paritytech/parity/wiki/The-Parity-Light-Protocol-(PIP)) support**. Start Parity with `--light` to enable light mode. Please, note: The wallet UI integration for the light client is not included, yet.
|
||||
- **Experimental web wallet**. A hosted version of Parity that keeps the keys and signs transactions using your browser storage. Try it at https://wallet.parity.io or run your own with `--public-node`.
|
||||
- **WASM contract support**. Private networks can run contracts compiled into WASM bytecode. _More information and documentation to follow_.
|
||||
- **DApps and RPC server merge**. DApp and RPC are now available through a single API endpoint. DApp server related settings are deprecated.
|
||||
- **Export accounts from the wallet**. Backing up your keys can now simply be managed through the wallet interface.
|
||||
- **PoA/Kovan validator set contract**. The PoA network validator-set management via smart contract is now supported by warp and, in the near future, light sync.
|
||||
- **PubSub API**. https://github.com/paritytech/parity/wiki/JSONRPC-Parity-Pub-Sub-module
|
||||
- **Signer apps for IOS and Android**.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Backports [#6163](https://github.com/paritytech/parity/pull/6163)
|
||||
- Light client improvements ([#6156](https://github.com/paritytech/parity/pull/6156))
|
||||
- No seal checking
|
||||
- Import command and --no-seal-check for light client
|
||||
- Fix eth_call
|
||||
- Tweak registry dapps lookup
|
||||
- Ignore failed requests to non-server peers
|
||||
- Fix connecting to wildcard addresses. ([#6167](https://github.com/paritytech/parity/pull/6167))
|
||||
- Don't display an overlay in case the time sync check fails. ([#6164](https://github.com/paritytech/parity/pull/6164))
|
||||
- Small improvements to time estimation.
|
||||
- Temporarily disable NTP time check by default.
|
||||
- Light client fixes ([#6148](https://github.com/paritytech/parity/pull/6148)) [#6151](https://github.com/paritytech/parity/pull/6151)
|
||||
- Light client fixes
|
||||
- Fix memory-lru-cache
|
||||
- Clear pending reqs on disconnect
|
||||
- Filter tokens logs from current block, not genesis ([#6128](https://github.com/paritytech/parity/pull/6128)) [#6141](https://github.com/paritytech/parity/pull/6141)
|
||||
- Fix QR scanner returning null on confirm [#6122](https://github.com/paritytech/parity/pull/6122)
|
||||
- Check QR before lowercase ([#6119](https://github.com/paritytech/parity/pull/6119)) [#6120](https://github.com/paritytech/parity/pull/6120)
|
||||
- Remove chunk to restore from pending set only upon successful import [#6117](https://github.com/paritytech/parity/pull/6117)
|
||||
- Fixed node address detection on incoming connection [#6094](https://github.com/paritytech/parity/pull/6094)
|
||||
- Place RETURNDATA behind block number gate [#6095](https://github.com/paritytech/parity/pull/6095)
|
||||
- Update wallet library binaries [#6108](https://github.com/paritytech/parity/pull/6108)
|
||||
- Backported wallet fix [#6105](https://github.com/paritytech/parity/pull/6105)
|
||||
- Fix initialisation bug. ([#6102](https://github.com/paritytech/parity/pull/6102))
|
||||
- Update wallet library modifiers ([#6103](https://github.com/paritytech/parity/pull/6103))
|
||||
- Place RETURNDATA behind block number gate [#6095](https://github.com/paritytech/parity/pull/6095)
|
||||
- Fixed node address detection on incoming connection [#6094](https://github.com/paritytech/parity/pull/6094)
|
||||
- Bump snap version and tweak importing detection logic ([#6079](https://github.com/paritytech/parity/pull/6079)) [#6081](https://github.com/paritytech/parity/pull/6081)
|
||||
- bump last tick just before printing info and restore sync detection
|
||||
- bump kovan snapshot version
|
||||
- Fixed sync tests
|
||||
- Fixed rpc tests
|
||||
- Acquire client report under lock in informant [#6071](https://github.com/paritytech/parity/pull/6071)
|
||||
- Show busy indicator on Address forget [#6069](https://github.com/paritytech/parity/pull/6069)
|
||||
- Add CSP for worker-src ([#6059](https://github.com/paritytech/parity/pull/6059)) [#6064](https://github.com/paritytech/parity/pull/6064)
|
||||
- Specify worker-src seperately, add blob
|
||||
- Upgrade react-qr-scan to latest version
|
||||
- Set release channel to beta
|
||||
- Limit transaction queue memory & limit future queue [#6038](https://github.com/paritytech/parity/pull/6038)
|
||||
- Fix CI build issue [#6050](https://github.com/paritytech/parity/pull/6050)
|
||||
- New contract PoA sync fixes [#5991](https://github.com/paritytech/parity/pull/5991)
|
||||
- Fixed link to Multisig Contract Wallet on master [#5984](https://github.com/paritytech/parity/pull/5984)
|
||||
- Ethcore crate split part 1 [#6041](https://github.com/paritytech/parity/pull/6041)
|
||||
- Fix status icon [#6039](https://github.com/paritytech/parity/pull/6039)
|
||||
- Errors & warnings for inappropriate RPCs [#6029](https://github.com/paritytech/parity/pull/6029)
|
||||
- Add missing CSP for web3.site [#5992](https://github.com/paritytech/parity/pull/5992)
|
||||
- Remove cargo install --git from README.md [#6037](https://github.com/paritytech/parity/pull/6037)
|
||||
- Node Health warnings [#5951](https://github.com/paritytech/parity/pull/5951)
|
||||
- RPC cpu pool [#6023](https://github.com/paritytech/parity/pull/6023)
|
||||
- Use crates.io dependencies for parity-wasm [#6036](https://github.com/paritytech/parity/pull/6036)
|
||||
- Add test for loading the chain specs [#6028](https://github.com/paritytech/parity/pull/6028)
|
||||
- Whitelist APIs for generic Pub-Sub [#5840](https://github.com/paritytech/parity/pull/5840)
|
||||
- WASM contracts MVP [#5679](https://github.com/paritytech/parity/pull/5679)
|
||||
- Fix valid QR scan not advancing [#6033](https://github.com/paritytech/parity/pull/6033)
|
||||
- --reseal-on-uncle [#5940](https://github.com/paritytech/parity/pull/5940)
|
||||
- Support comments in reserved peers file ([#6004](https://github.com/paritytech/parity/pull/6004)) [#6012](https://github.com/paritytech/parity/pull/6012)
|
||||
- Add new md tnc [#5937](https://github.com/paritytech/parity/pull/5937)
|
||||
- Fix output of parity-evm in case of bad instruction [#5955](https://github.com/paritytech/parity/pull/5955)
|
||||
- Don't send notifications to unsubscribed clients of PubSub [#5960](https://github.com/paritytech/parity/pull/5960)
|
||||
- Proper light client informant and more verification of imported headers [#5897](https://github.com/paritytech/parity/pull/5897)
|
||||
- New Kovan bootnodes [#6017](https://github.com/paritytech/parity/pull/6017)
|
||||
- Use standard paths for Ethash cache [#5881](https://github.com/paritytech/parity/pull/5881)
|
||||
- Defer code hash calculation. [#5959](https://github.com/paritytech/parity/pull/5959)
|
||||
- Fix first run wizard. [#6000](https://github.com/paritytech/parity/pull/6000)
|
||||
- migration to serde 1.0 [#5996](https://github.com/paritytech/parity/pull/5996)
|
||||
- SecretStore: generating signatures [#5764](https://github.com/paritytech/parity/pull/5764)
|
||||
- bigint upgraded to version 3.0 [#5986](https://github.com/paritytech/parity/pull/5986)
|
||||
- config: don't allow dev chain with force sealing option [#5965](https://github.com/paritytech/parity/pull/5965)
|
||||
- Update lockfile for miniz-sys and gcc [#5969](https://github.com/paritytech/parity/pull/5969)
|
||||
- Clean up function naming in RPC error module [#5995](https://github.com/paritytech/parity/pull/5995)
|
||||
- Fix underflow in gas calculation [#5975](https://github.com/paritytech/parity/pull/5975)
|
||||
- PubSub for parity-js [#5830](https://github.com/paritytech/parity/pull/5830)
|
||||
- Report whether a peer was kept from `Handler::on_connect` [#5958](https://github.com/paritytech/parity/pull/5958)
|
||||
- Implement skeleton for transaction index and epoch transition proof PIP messages [#5908](https://github.com/paritytech/parity/pull/5908)
|
||||
- TransactionQueue improvements [#5917](https://github.com/paritytech/parity/pull/5917)
|
||||
- constant time HMAC comparison and clarify docs in ethkey [#5952](https://github.com/paritytech/parity/pull/5952)
|
||||
- Avoid pre-computing jump destinations [#5954](https://github.com/paritytech/parity/pull/5954)
|
||||
- Upgrade elastic array [#5949](https://github.com/paritytech/parity/pull/5949)
|
||||
- PoA: Wait for transition finality before applying [#5774](https://github.com/paritytech/parity/pull/5774)
|
||||
- Logs Pub-Sub [#5705](https://github.com/paritytech/parity/pull/5705)
|
||||
- Add the command to install the parity snap [#5945](https://github.com/paritytech/parity/pull/5945)
|
||||
- Reduce unnecessary allocations [#5944](https://github.com/paritytech/parity/pull/5944)
|
||||
- Clarify confusing messages. [#5935](https://github.com/paritytech/parity/pull/5935)
|
||||
- Content Security Policy [#5790](https://github.com/paritytech/parity/pull/5790)
|
||||
- CLI: Export error message and less verbose peer counter. [#5870](https://github.com/paritytech/parity/pull/5870)
|
||||
- network: make it more explicit about StreamToken and TimerToken [#5939](https://github.com/paritytech/parity/pull/5939)
|
||||
- sync: make it more idiomatic rust [#5938](https://github.com/paritytech/parity/pull/5938)
|
||||
- Prioritize accounts over address book [#5909](https://github.com/paritytech/parity/pull/5909)
|
||||
- Fixing failing compilation of RPC test on master. [#5916](https://github.com/paritytech/parity/pull/5916)
|
||||
- Empty local middleware, until explicitly requested [#5912](https://github.com/paritytech/parity/pull/5912)
|
||||
- Cancel propagated TX [#5899](https://github.com/paritytech/parity/pull/5899)
|
||||
- fix minor race condition in aura seal generation [#5910](https://github.com/paritytech/parity/pull/5910)
|
||||
- Docs for Pub-Sub, optional parameter for parity_subscribe [#5833](https://github.com/paritytech/parity/pull/5833)
|
||||
- Fix gas editor doubling-up on gas [#5820](https://github.com/paritytech/parity/pull/5820)
|
||||
- Information about used paths added to general output block [#5904](https://github.com/paritytech/parity/pull/5904)
|
||||
- Domain-locked web tokens. [#5894](https://github.com/paritytech/parity/pull/5894)
|
||||
- Removed panic handlers [#5895](https://github.com/paritytech/parity/pull/5895)
|
||||
- Latest changes from Rust RocksDB binding merged [#5905](https://github.com/paritytech/parity/pull/5905)
|
||||
- Adjust keyethereum/secp256 aliasses [#5903](https://github.com/paritytech/parity/pull/5903)
|
||||
- Keyethereum fs dependency [#5902](https://github.com/paritytech/parity/pull/5902)
|
||||
- Ethereum Classic Monetary Policy [#5741](https://github.com/paritytech/parity/pull/5741)
|
||||
- Initial token should allow full access. [#5873](https://github.com/paritytech/parity/pull/5873)
|
||||
- Fixed account selection for Dapps on public node [#5856](https://github.com/paritytech/parity/pull/5856)
|
||||
- blacklist bad snapshot manifest hashes upon failure [#5874](https://github.com/paritytech/parity/pull/5874)
|
||||
- Fix wrongly called timeouts [#5838](https://github.com/paritytech/parity/pull/5838)
|
||||
- ArchiveDB and other small fixes [#5867](https://github.com/paritytech/parity/pull/5867)
|
||||
- convert try!() to ? [#5866](https://github.com/paritytech/parity/pull/5866)
|
||||
- Make config file optional in systemd [#5847](https://github.com/paritytech/parity/pull/5847)
|
||||
- EIP-116 (214), [#4833](https://github.com/paritytech/parity/issues/4833) [#4851](https://github.com/paritytech/parity/pull/4851)
|
||||
- all executables are workspace members [#5865](https://github.com/paritytech/parity/pull/5865)
|
||||
- minor optimizations of the modexp builtin [#5860](https://github.com/paritytech/parity/pull/5860)
|
||||
- three small commits for HashDB and MemoryDB [#5766](https://github.com/paritytech/parity/pull/5766)
|
||||
- use rust 1.18's retain to boost the purge performance [#5801](https://github.com/paritytech/parity/pull/5801)
|
||||
- Allow IPFS server to accept POST requests [#5858](https://github.com/paritytech/parity/pull/5858)
|
||||
- Dutch i18n from [#5802](https://github.com/paritytech/parity/issues/5802) for master [#5836](https://github.com/paritytech/parity/pull/5836)
|
||||
- Typos in token deploy dapp ui [#5851](https://github.com/paritytech/parity/pull/5851)
|
||||
- A CLI flag to allow fast transaction signing when account is unlocked. [#5778](https://github.com/paritytech/parity/pull/5778)
|
||||
- Removing `additional` field from EVM instructions [#5821](https://github.com/paritytech/parity/pull/5821)
|
||||
- Don't fail on wrong log decoding [#5813](https://github.com/paritytech/parity/pull/5813)
|
||||
- Use randomized subscription ids for PubSub [#5756](https://github.com/paritytech/parity/pull/5756)
|
||||
- Fixed mem write for empty slice [#5827](https://github.com/paritytech/parity/pull/5827)
|
||||
- Fix party technologies [#5810](https://github.com/paritytech/parity/pull/5810)
|
||||
- Revert "Fixed mem write for empty slice" [#5826](https://github.com/paritytech/parity/pull/5826)
|
||||
- Fixed mem write for empty slice [#5825](https://github.com/paritytech/parity/pull/5825)
|
||||
- Fix JS tests [#5822](https://github.com/paritytech/parity/pull/5822)
|
||||
- Bump native-tls and openssl crates. [#5817](https://github.com/paritytech/parity/pull/5817)
|
||||
- Public node using WASM [#5734](https://github.com/paritytech/parity/pull/5734)
|
||||
- enforce block signer == author field in PoA [#5808](https://github.com/paritytech/parity/pull/5808)
|
||||
- Fix stack display in evmbin. [#5733](https://github.com/paritytech/parity/pull/5733)
|
||||
- Disable UI if it's not compiled in. [#5773](https://github.com/paritytech/parity/pull/5773)
|
||||
- Require phrase confirmation. [#5731](https://github.com/paritytech/parity/pull/5731)
|
||||
- Duration limit made optional for EthashParams [#5777](https://github.com/paritytech/parity/pull/5777)
|
||||
- Update Changelog for 1.6.8 [#5798](https://github.com/paritytech/parity/pull/5798)
|
||||
- Replace Ethcore comany name in T&C and some other places [#5796](https://github.com/paritytech/parity/pull/5796)
|
||||
- PubSub for IPC. [#5800](https://github.com/paritytech/parity/pull/5800)
|
||||
- Fix terminology distributed -> decentralized applications [#5797](https://github.com/paritytech/parity/pull/5797)
|
||||
- Disable compression for RLP strings [#5786](https://github.com/paritytech/parity/pull/5786)
|
||||
- update the source for the snapcraft package [#5781](https://github.com/paritytech/parity/pull/5781)
|
||||
- Fixed default UI port for mac installer [#5782](https://github.com/paritytech/parity/pull/5782)
|
||||
- Block invalid account name creation [#5784](https://github.com/paritytech/parity/pull/5784)
|
||||
- Update Cid/multihash/ring/tinykeccak [#5785](https://github.com/paritytech/parity/pull/5785)
|
||||
- use NULL_RLP, remove NULL_RLP_STATIC [#5742](https://github.com/paritytech/parity/pull/5742)
|
||||
- Blacklist empty phrase account. [#5730](https://github.com/paritytech/parity/pull/5730)
|
||||
- EIP-211 RETURNDATACOPY and RETURNDATASIZE [#5678](https://github.com/paritytech/parity/pull/5678)
|
||||
- Bump mio [#5763](https://github.com/paritytech/parity/pull/5763)
|
||||
- Fixing UI issues after UI server refactor [#5710](https://github.com/paritytech/parity/pull/5710)
|
||||
- Fix WS server expose issue. [#5728](https://github.com/paritytech/parity/pull/5728)
|
||||
- Fix local transactions without condition. [#5716](https://github.com/paritytech/parity/pull/5716)
|
||||
- Bump parity-wordlist. [#5748](https://github.com/paritytech/parity/pull/5748)
|
||||
- two small changes in evm [#5700](https://github.com/paritytech/parity/pull/5700)
|
||||
- Evmbin: JSON format printing pre-state. [#5712](https://github.com/paritytech/parity/pull/5712)
|
||||
- Recover from empty phrase in dev mode [#5698](https://github.com/paritytech/parity/pull/5698)
|
||||
- EIP-210 BLOCKHASH changes [#5505](https://github.com/paritytech/parity/pull/5505)
|
||||
- fixes typo [#5708](https://github.com/paritytech/parity/pull/5708)
|
||||
- Bump rocksdb [#5707](https://github.com/paritytech/parity/pull/5707)
|
||||
- Fixed --datadir option [#5697](https://github.com/paritytech/parity/pull/5697)
|
||||
- rpc -> weak to arc [#5688](https://github.com/paritytech/parity/pull/5688)
|
||||
- typo fix [#5699](https://github.com/paritytech/parity/pull/5699)
|
||||
- Revamping parity-evmbin [#5696](https://github.com/paritytech/parity/pull/5696)
|
||||
- Update dependencies and bigint api [#5685](https://github.com/paritytech/parity/pull/5685)
|
||||
- UI server refactoring [#5580](https://github.com/paritytech/parity/pull/5580)
|
||||
- Fix from/into electrum in ethkey [#5686](https://github.com/paritytech/parity/pull/5686)
|
||||
- Add unit tests [#5668](https://github.com/paritytech/parity/pull/5668)
|
||||
- Guanqun add unit tests [#5671](https://github.com/paritytech/parity/pull/5671)
|
||||
- Parity-PubSub as a separate API. [#5676](https://github.com/paritytech/parity/pull/5676)
|
||||
- EIP-140 REVERT opcode [#5477](https://github.com/paritytech/parity/pull/5477)
|
||||
- Update CHANGELOG for 1.6.7 [#5683](https://github.com/paritytech/parity/pull/5683)
|
||||
- Updated docs slightly. [#5674](https://github.com/paritytech/parity/pull/5674)
|
||||
- Fix build [#5684](https://github.com/paritytech/parity/pull/5684)
|
||||
- Back-references for the on-demand service [#5573](https://github.com/paritytech/parity/pull/5573)
|
||||
- Dynamically adjust PIP request costs based on gathered data [#5603](https://github.com/paritytech/parity/pull/5603)
|
||||
- use cargo workspace [#5601](https://github.com/paritytech/parity/pull/5601)
|
||||
- Latest headers Pub-Sub [#5655](https://github.com/paritytech/parity/pull/5655)
|
||||
- improved dockerfile builds [#5659](https://github.com/paritytech/parity/pull/5659)
|
||||
- Adding CLI options: port shift and unsafe expose. [#5677](https://github.com/paritytech/parity/pull/5677)
|
||||
- Report missing author in Aura [#5583](https://github.com/paritytech/parity/pull/5583)
|
||||
- typo fix [#5669](https://github.com/paritytech/parity/pull/5669)
|
||||
- Remove public middleware (temporary) [#5665](https://github.com/paritytech/parity/pull/5665)
|
||||
- Remove additional polyfill [#5663](https://github.com/paritytech/parity/pull/5663)
|
||||
- Importing accounts from files. [#5644](https://github.com/paritytech/parity/pull/5644)
|
||||
- remove the deprecated options in rustfmt.toml [#5616](https://github.com/paritytech/parity/pull/5616)
|
||||
- Update the Console dapp [#5602](https://github.com/paritytech/parity/pull/5602)
|
||||
- Create an account for chain=dev [#5612](https://github.com/paritytech/parity/pull/5612)
|
||||
- Use babel-runtime as opposed to babel-polyfill [#5662](https://github.com/paritytech/parity/pull/5662)
|
||||
- Connection dialog timestamp info [#5554](https://github.com/paritytech/parity/pull/5554)
|
||||
- use copy_from_slice instead of for loop [#5647](https://github.com/paritytech/parity/pull/5647)
|
||||
- Light friendly dapps [#5634](https://github.com/paritytech/parity/pull/5634)
|
||||
- Add Recover button to Accounts and warnings [#5645](https://github.com/paritytech/parity/pull/5645)
|
||||
- Update eth_sign docs. [#5631](https://github.com/paritytech/parity/pull/5631)
|
||||
- Proper signer Pub-Sub for pending requests. [#5594](https://github.com/paritytech/parity/pull/5594)
|
||||
- Bump bigint to 1.0.5 [#5641](https://github.com/paritytech/parity/pull/5641)
|
||||
- PoA warp implementation [#5488](https://github.com/paritytech/parity/pull/5488)
|
||||
- Improve on-demand dispatch and add support for batch requests [#5419](https://github.com/paritytech/parity/pull/5419)
|
||||
- Use default account for sending transactions [#5588](https://github.com/paritytech/parity/pull/5588)
|
||||
- Add peer management to the Status tab [#5566](https://github.com/paritytech/parity/pull/5566)
|
||||
- Add monotonic step transition [#5587](https://github.com/paritytech/parity/pull/5587)
|
||||
- Decrypting for external accounts. [#5581](https://github.com/paritytech/parity/pull/5581)
|
||||
- only enable warp sync when engine supports it [#5595](https://github.com/paritytech/parity/pull/5595)
|
||||
- fix the doc of installing rust [#5586](https://github.com/paritytech/parity/pull/5586)
|
||||
- Small fixes [#5584](https://github.com/paritytech/parity/pull/5584)
|
||||
- SecretStore: remove session on master node [#5545](https://github.com/paritytech/parity/pull/5545)
|
||||
- run-clean [#5607](https://github.com/paritytech/parity/pull/5607)
|
||||
- relicense RLP to MIT/Apache2 [#5591](https://github.com/paritytech/parity/pull/5591)
|
||||
- Fix eth_sign signature encoding. [#5597](https://github.com/paritytech/parity/pull/5597)
|
||||
- Check pending request on Node local transactions [#5564](https://github.com/paritytech/parity/pull/5564)
|
||||
- Add tooltips on ActionBar [#5562](https://github.com/paritytech/parity/pull/5562)
|
||||
- Can't deploy without compiling Contract [#5593](https://github.com/paritytech/parity/pull/5593)
|
||||
- Add a warning when node is syncing [#5565](https://github.com/paritytech/parity/pull/5565)
|
||||
- Update registry middleware [#5585](https://github.com/paritytech/parity/pull/5585)
|
||||
- Set block condition to BigNumber in MethodDecoding [#5592](https://github.com/paritytech/parity/pull/5592)
|
||||
- Load the sources immediately in Contract Dev [#5575](https://github.com/paritytech/parity/pull/5575)
|
||||
- Remove formal verification messages in Dev Contract [#5574](https://github.com/paritytech/parity/pull/5574)
|
||||
- Fix event params decoding when no names for parameters [#5567](https://github.com/paritytech/parity/pull/5567)
|
||||
- Do not convert to Dates twice [#5563](https://github.com/paritytech/parity/pull/5563)
|
||||
- Fix Multisig wallet settings [#5560](https://github.com/paritytech/parity/pull/5560)
|
||||
- Typo [#5547](https://github.com/paritytech/parity/pull/5547)
|
||||
- Generic PubSub implementation [#5456](https://github.com/paritytech/parity/pull/5456)
|
||||
- Fix CI paths. [#5570](https://github.com/paritytech/parity/pull/5570)
|
||||
- reorg into blocks before minimum history [#5558](https://github.com/paritytech/parity/pull/5558)
|
||||
- EIP-86 update [#5506](https://github.com/paritytech/parity/pull/5506)
|
||||
- Secretstore RPCs + integration [#5439](https://github.com/paritytech/parity/pull/5439)
|
||||
- Fixes Parity Bar position [#5557](https://github.com/paritytech/parity/pull/5557)
|
||||
- Fixes invalid log in BadgeReg events [#5556](https://github.com/paritytech/parity/pull/5556)
|
||||
- Fix issues in Contract Development view [#5555](https://github.com/paritytech/parity/pull/5555)
|
||||
- Added missing methods [#5542](https://github.com/paritytech/parity/pull/5542)
|
||||
- option to disable persistent txqueue [#5544](https://github.com/paritytech/parity/pull/5544)
|
||||
- Bump jsonrpc [#5552](https://github.com/paritytech/parity/pull/5552)
|
||||
- Retrieve block headers only for header-only info [#5480](https://github.com/paritytech/parity/pull/5480)
|
||||
- add snap to CI [#5519](https://github.com/paritytech/parity/pull/5519)
|
||||
- Pass additional data when reporting [#5527](https://github.com/paritytech/parity/pull/5527)
|
||||
- Calculate post-constructors state root in spec at load time [#5523](https://github.com/paritytech/parity/pull/5523)
|
||||
- Fix utf8 decoding [#5533](https://github.com/paritytech/parity/pull/5533)
|
||||
- Add CHANGELOG.md [#5513](https://github.com/paritytech/parity/pull/5513)
|
||||
- Change all occurrences of ethcore.io into parity.io [#5528](https://github.com/paritytech/parity/pull/5528)
|
||||
- Memory usage optimization [#5526](https://github.com/paritytech/parity/pull/5526)
|
||||
- Compose transaction RPC. [#5524](https://github.com/paritytech/parity/pull/5524)
|
||||
- Support external eth_sign [#5481](https://github.com/paritytech/parity/pull/5481)
|
||||
- Treat block numbers as strings, not BigNums. [#5449](https://github.com/paritytech/parity/pull/5449)
|
||||
- npm cleanups [#5512](https://github.com/paritytech/parity/pull/5512)
|
||||
- Export acc js [#4973](https://github.com/paritytech/parity/pull/4973)
|
||||
- YARN [#5395](https://github.com/paritytech/parity/pull/5395)
|
||||
- Fix linting issues [#5511](https://github.com/paritytech/parity/pull/5511)
|
||||
- Chinese Translation [#5460](https://github.com/paritytech/parity/pull/5460)
|
||||
- Fixing secretstore TODOs - part 2 [#5416](https://github.com/paritytech/parity/pull/5416)
|
||||
- fix json format of state snapshot [#5504](https://github.com/paritytech/parity/pull/5504)
|
||||
- Bump jsonrpc version [#5489](https://github.com/paritytech/parity/pull/5489)
|
||||
- Groundwork for generalized warp sync [#5454](https://github.com/paritytech/parity/pull/5454)
|
||||
- Add the packaging metadata to build the parity snap [#5496](https://github.com/paritytech/parity/pull/5496)
|
||||
- Cancel tx JS [#4958](https://github.com/paritytech/parity/pull/4958)
|
||||
- EIP-212 (bn128 curve pairing) [#5307](https://github.com/paritytech/parity/pull/5307)
|
||||
- fix panickers in tree-route [#5479](https://github.com/paritytech/parity/pull/5479)
|
||||
- Update links to etherscan.io [#5455](https://github.com/paritytech/parity/pull/5455)
|
||||
- Refresh UI on nodeKind changes, e.g. personal -> public [#5312](https://github.com/paritytech/parity/pull/5312)
|
||||
- Correct contract address for EIP-86 [#5473](https://github.com/paritytech/parity/pull/5473)
|
||||
- Force two decimals for USD conversion rate [#5471](https://github.com/paritytech/parity/pull/5471)
|
||||
- Refactoring of Tokens & Balances [#5372](https://github.com/paritytech/parity/pull/5372)
|
||||
- Background-repeat round [#5475](https://github.com/paritytech/parity/pull/5475)
|
||||
- nl i18n updated [#5461](https://github.com/paritytech/parity/pull/5461)
|
||||
- Show ETH value (even 0) if ETH transfer in transaction list [#5406](https://github.com/paritytech/parity/pull/5406)
|
||||
- Store the pending requests per network version [#5405](https://github.com/paritytech/parity/pull/5405)
|
||||
- Use in-memory database for tests [#5451](https://github.com/paritytech/parity/pull/5451)
|
||||
- WebSockets RPC server [#5425](https://github.com/paritytech/parity/pull/5425)
|
||||
- Added missing docs [#5452](https://github.com/paritytech/parity/pull/5452)
|
||||
- Tests and tweaks for public node middleware [#5417](https://github.com/paritytech/parity/pull/5417)
|
||||
- Fix removal of hash-mismatched files. [#5440](https://github.com/paritytech/parity/pull/5440)
|
||||
- parity_getBlockHeaderByNumber and LightFetch utility [#5383](https://github.com/paritytech/parity/pull/5383)
|
||||
- New state tests [#5418](https://github.com/paritytech/parity/pull/5418)
|
||||
- Fix buffer length for QR code gen. [#5447](https://github.com/paritytech/parity/pull/5447)
|
||||
- Add raw hash signing [#5423](https://github.com/paritytech/parity/pull/5423)
|
||||
- Filters and block RPCs for the light client [#5320](https://github.com/paritytech/parity/pull/5320)
|
||||
- Work around mismatch for QR checksum [#5374](https://github.com/paritytech/parity/pull/5374)
|
||||
- easy to use conversion from and to string for ethstore::Crypto [#5437](https://github.com/paritytech/parity/pull/5437)
|
||||
- Tendermint fixes [#5415](https://github.com/paritytech/parity/pull/5415)
|
||||
- Adrianbrink lightclientcache branch. [#5428](https://github.com/paritytech/parity/pull/5428)
|
||||
- Add caching to HeaderChain struct [#5403](https://github.com/paritytech/parity/pull/5403)
|
||||
- Add decryption to the UI (in the Signer) [#5422](https://github.com/paritytech/parity/pull/5422)
|
||||
- Add CIDv0 RPC [#5414](https://github.com/paritytech/parity/pull/5414)
|
||||
- Updating documentation for RPCs [#5392](https://github.com/paritytech/parity/pull/5392)
|
||||
- Fixing secretstore TODOs - part 1 [#5386](https://github.com/paritytech/parity/pull/5386)
|
||||
- Fixing disappearing content. [#5399](https://github.com/paritytech/parity/pull/5399)
|
||||
- Snapshot chunks packed by size [#5318](https://github.com/paritytech/parity/pull/5318)
|
||||
- APIs wildcards and simple arithmetic. [#5402](https://github.com/paritytech/parity/pull/5402)
|
||||
- Fixing compilation without dapps. [#5410](https://github.com/paritytech/parity/pull/5410)
|
||||
- Don't use port 8080 anymore [#5397](https://github.com/paritytech/parity/pull/5397)
|
||||
- Quick'n'dirty CLI for the light client [#5002](https://github.com/paritytech/parity/pull/5002)
|
||||
- set gas limit before proving transactions [#5401](https://github.com/paritytech/parity/pull/5401)
|
||||
- Public node: perf and fixes [#5390](https://github.com/paritytech/parity/pull/5390)
|
||||
- Straight download path in the readme [#5393](https://github.com/paritytech/parity/pull/5393)
|
||||
- On-chain ACL checker for secretstore [#5015](https://github.com/paritytech/parity/pull/5015)
|
||||
- Allow empty-encoded values from QR encoding [#5385](https://github.com/paritytech/parity/pull/5385)
|
||||
- Update npm build for new inclusions [#5381](https://github.com/paritytech/parity/pull/5381)
|
||||
- Fix for Ubuntu Dockerfile [#5356](https://github.com/paritytech/parity/pull/5356)
|
||||
- Secretstore over network [#4974](https://github.com/paritytech/parity/pull/4974)
|
||||
- Dapps and RPC server merge [#5365](https://github.com/paritytech/parity/pull/5365)
|
||||
- trigger js build release [#5379](https://github.com/paritytech/parity/pull/5379)
|
||||
- Update expanse json with fork at block 600000 [#5351](https://github.com/paritytech/parity/pull/5351)
|
||||
- Futures-based native wrappers for contract ABIs [#5341](https://github.com/paritytech/parity/pull/5341)
|
||||
- Kovan warp sync fixed [#5337](https://github.com/paritytech/parity/pull/5337)
|
||||
- Aura eip155 validation transition [#5362](https://github.com/paritytech/parity/pull/5362)
|
||||
- Shared wordlist for brain wallets [#5331](https://github.com/paritytech/parity/pull/5331)
|
||||
- Allow signing via Qr [#4881](https://github.com/paritytech/parity/pull/4881)
|
||||
- Allow entry of url or hash for DappReg meta [#5360](https://github.com/paritytech/parity/pull/5360)
|
||||
- Adjust tx overlay colours [#5353](https://github.com/paritytech/parity/pull/5353)
|
||||
- Add ability to disallow API subscriptions [#5366](https://github.com/paritytech/parity/pull/5366)
|
||||
- EIP-213 (bn128 curve operations) [#4999](https://github.com/paritytech/parity/pull/4999)
|
||||
- Fix analize output file name [#5357](https://github.com/paritytech/parity/pull/5357)
|
||||
- Add default eip155 validation [#5346](https://github.com/paritytech/parity/pull/5346)
|
||||
- Add new seed nodes for Classic chain [#5345](https://github.com/paritytech/parity/pull/5345)
|
||||
- Shared wordlist for frontend [#5336](https://github.com/paritytech/parity/pull/5336)
|
||||
- fix rpc tests [#5338](https://github.com/paritytech/parity/pull/5338)
|
||||
- Public node with accounts and signing in Frontend [#5304](https://github.com/paritytech/parity/pull/5304)
|
||||
- Rename Status/Status -> Status/NodeStatus [#5332](https://github.com/paritytech/parity/pull/5332)
|
||||
- Updating paths to repos. [#5330](https://github.com/paritytech/parity/pull/5330)
|
||||
- Separate status for canceled local transactions. [#5319](https://github.com/paritytech/parity/pull/5319)
|
||||
- Cleanup the Status View [#5317](https://github.com/paritytech/parity/pull/5317)
|
||||
- Update UI minimised requests [#5324](https://github.com/paritytech/parity/pull/5324)
|
||||
- Order signer transactions FIFO [#5321](https://github.com/paritytech/parity/pull/5321)
|
||||
- updating dependencies [#5028](https://github.com/paritytech/parity/pull/5028)
|
||||
- Minimise transactions progress [#4942](https://github.com/paritytech/parity/pull/4942)
|
||||
- Fix eth_sign showing as wallet account [#5309](https://github.com/paritytech/parity/pull/5309)
|
||||
- Ropsten revival [#5302](https://github.com/paritytech/parity/pull/5302)
|
||||
- Strict validation transitions [#4988](https://github.com/paritytech/parity/pull/4988)
|
||||
- Fix default list sorting [#5303](https://github.com/paritytech/parity/pull/5303)
|
||||
- Use unique owners for multisig wallets [#5298](https://github.com/paritytech/parity/pull/5298)
|
||||
- Copy all existing i18n strings into zh (as-is translation aid) [#5305](https://github.com/paritytech/parity/pull/5305)
|
||||
- Fix booleans in Typedinput [#5295](https://github.com/paritytech/parity/pull/5295)
|
||||
- node kind RPC [#5025](https://github.com/paritytech/parity/pull/5025)
|
||||
- Fix the use of MobX in playground [#5294](https://github.com/paritytech/parity/pull/5294)
|
||||
- Fine grained snapshot chunking [#5019](https://github.com/paritytech/parity/pull/5019)
|
||||
- Add lint:i18n to find missing & extra keys [#5290](https://github.com/paritytech/parity/pull/5290)
|
||||
- Scaffolding for zh translations, including first-round by @btceth [#5289](https://github.com/paritytech/parity/pull/5289)
|
||||
- JS package bumps [#5287](https://github.com/paritytech/parity/pull/5287)
|
||||
- Auto-extract new i18n strings (update) [#5288](https://github.com/paritytech/parity/pull/5288)
|
||||
- eip100b [#5027](https://github.com/paritytech/parity/pull/5027)
|
||||
- Set earliest era in snapshot restoration [#5021](https://github.com/paritytech/parity/pull/5021)
|
||||
- Avoid clogging up tmp when updater dir has bad permissions. [#5024](https://github.com/paritytech/parity/pull/5024)
|
||||
- Resilient warp sync [#5018](https://github.com/paritytech/parity/pull/5018)
|
||||
- Create webpack analysis files (size) [#5009](https://github.com/paritytech/parity/pull/5009)
|
||||
- Dispatch an open event on drag of Parity Bar [#4987](https://github.com/paritytech/parity/pull/4987)
|
||||
- Various installer and tray apps fixes [#4970](https://github.com/paritytech/parity/pull/4970)
|
||||
- Export account RPC [#4967](https://github.com/paritytech/parity/pull/4967)
|
||||
- Switching ValidatorSet [#4961](https://github.com/paritytech/parity/pull/4961)
|
||||
- Implement PIP messages, request builder, and handlers [#4945](https://github.com/paritytech/parity/pull/4945)
|
||||
- auto lint [#5003](https://github.com/paritytech/parity/pull/5003)
|
||||
- Fix FireFox overflows [#5000](https://github.com/paritytech/parity/pull/5000)
|
||||
- Show busy indicator, focus first field in password change [#4997](https://github.com/paritytech/parity/pull/4997)
|
||||
- Consistent store naming in the Signer components [#4996](https://github.com/paritytech/parity/pull/4996)
|
||||
- second (and last) part of rlp refactor [#4901](https://github.com/paritytech/parity/pull/4901)
|
||||
- Double click to select account creation type [#4986](https://github.com/paritytech/parity/pull/4986)
|
||||
- Fixes to the Registry dapp [#4984](https://github.com/paritytech/parity/pull/4984)
|
||||
- Extend api.util [#4979](https://github.com/paritytech/parity/pull/4979)
|
||||
- Updating JSON-RPC crates [#4934](https://github.com/paritytech/parity/pull/4934)
|
||||
- splitting part of util into smaller crates [#4956](https://github.com/paritytech/parity/pull/4956)
|
||||
- Updating syntex et al [#4983](https://github.com/paritytech/parity/pull/4983)
|
||||
- EIP198 and built-in activation [#4926](https://github.com/paritytech/parity/pull/4926)
|
||||
- Fix MethodDecoding for Arrays [#4977](https://github.com/paritytech/parity/pull/4977)
|
||||
- Try to fix WS race condition connection [#4976](https://github.com/paritytech/parity/pull/4976)
|
||||
- eth_sign where account === undefined [#4964](https://github.com/paritytech/parity/pull/4964)
|
||||
- Fix references to api outside of `parity.js` [#4981](https://github.com/paritytech/parity/pull/4981)
|
||||
- Fix Password Dialog form overflow [#4968](https://github.com/paritytech/parity/pull/4968)
|
||||
- Changing Mutex into RwLock for transaction queue [#4951](https://github.com/paritytech/parity/pull/4951)
|
||||
- Disable max seal period for external sealing [#4927](https://github.com/paritytech/parity/pull/4927)
|
||||
- Attach hardware wallets already in addressbook [#4912](https://github.com/paritytech/parity/pull/4912)
|
||||
- rlp serialization refactor [#4873](https://github.com/paritytech/parity/pull/4873)
|
||||
- Bump nanomsg [#4965](https://github.com/paritytech/parity/pull/4965)
|
||||
- Fixed multi-chunk ledger transactions on windows [#4960](https://github.com/paritytech/parity/pull/4960)
|
||||
- Fix outputs in Contract Constant Queries [#4953](https://github.com/paritytech/parity/pull/4953)
|
||||
- systemd: Start parity after network.target [#4952](https://github.com/paritytech/parity/pull/4952)
|
||||
- Remove transaction RPC [#4949](https://github.com/paritytech/parity/pull/4949)
|
||||
- Swap out ethcore.io url for parity.io [#4947](https://github.com/paritytech/parity/pull/4947)
|
||||
- Don't remove confirmed requests to early. [#4933](https://github.com/paritytech/parity/pull/4933)
|
||||
- Ensure sealing work enabled in miner once subscribers added [#4930](https://github.com/paritytech/parity/pull/4930)
|
||||
- Add z-index to small modals as well [#4923](https://github.com/paritytech/parity/pull/4923)
|
||||
- Bump nanomsg [#4946](https://github.com/paritytech/parity/pull/4946)
|
||||
- Bumping multihash and libc [#4943](https://github.com/paritytech/parity/pull/4943)
|
||||
- Edit ETH value, gas and gas price in Contract Deployment [#4919](https://github.com/paritytech/parity/pull/4919)
|
||||
- Add ability to configure Secure API [#4922](https://github.com/paritytech/parity/pull/4922)
|
||||
- Add Token image from URL [#4916](https://github.com/paritytech/parity/pull/4916)
|
||||
- Use the registry fee in Token Deployment dapp [#4915](https://github.com/paritytech/parity/pull/4915)
|
||||
- Add reseal max period [#4903](https://github.com/paritytech/parity/pull/4903)
|
||||
- Detect rust compiler version in Parity build script, closes 4742 [#4907](https://github.com/paritytech/parity/pull/4907)
|
||||
- Add Vaults logic to First Run [#4914](https://github.com/paritytech/parity/pull/4914)
|
||||
- Updated gcc and rayon crates to remove outdated num_cpus dependency [#4909](https://github.com/paritytech/parity/pull/4909)
|
||||
- Renaming evm binary to avoid conflicts. [#4899](https://github.com/paritytech/parity/pull/4899)
|
||||
- Better error handling for traces RPC [#4849](https://github.com/paritytech/parity/pull/4849)
|
||||
- Safari SectionList fix [#4895](https://github.com/paritytech/parity/pull/4895)
|
||||
- Safari Dialog scrolling fix [#4893](https://github.com/paritytech/parity/pull/4893)
|
||||
- Spelling :) [#4900](https://github.com/paritytech/parity/pull/4900)
|
||||
- Additional kovan params [#4892](https://github.com/paritytech/parity/pull/4892)
|
||||
- trigger js-precompiled build [#4898](https://github.com/paritytech/parity/pull/4898)
|
||||
- Recalculate receipt roots in close_and_lock [#4884](https://github.com/paritytech/parity/pull/4884)
|
||||
- Reload UI on network switch [#4864](https://github.com/paritytech/parity/pull/4864)
|
||||
- Update parity-ui-precompiled with branch [#4850](https://github.com/paritytech/parity/pull/4850)
|
||||
- OSX Installer is no longer experimental [#4882](https://github.com/paritytech/parity/pull/4882)
|
||||
- Chain-selection from UI [#4859](https://github.com/paritytech/parity/pull/4859)
|
||||
- removed redundant (and unused) FromJson trait [#4871](https://github.com/paritytech/parity/pull/4871)
|
||||
- fix typos and grammar [#4880](https://github.com/paritytech/parity/pull/4880)
|
||||
- Remove old experimental remote-db code [#4872](https://github.com/paritytech/parity/pull/4872)
|
||||
- removed redundant FixedHash trait, fixes [#4029](https://github.com/paritytech/parity/issues/4029) [#4866](https://github.com/paritytech/parity/pull/4866)
|
||||
- Reference JSON-RPC more changes-friendly [#4870](https://github.com/paritytech/parity/pull/4870)
|
||||
- Better handling of Solidity compliation [#4860](https://github.com/paritytech/parity/pull/4860)
|
||||
- Go through contract links in Transaction List display [#4863](https://github.com/paritytech/parity/pull/4863)
|
||||
- Fix Gas Price Selector Tooltips [#4865](https://github.com/paritytech/parity/pull/4865)
|
||||
- Fix auto-updater [#4867](https://github.com/paritytech/parity/pull/4867)
|
||||
- Make the UI work offline [#4861](https://github.com/paritytech/parity/pull/4861)
|
||||
- Subscribe to accounts info in Signer / ParityBar [#4856](https://github.com/paritytech/parity/pull/4856)
|
||||
- Don't link libsnappy explicitly [#4841](https://github.com/paritytech/parity/pull/4841)
|
||||
- Fix paste in Inputs [#4854](https://github.com/paritytech/parity/pull/4854)
|
||||
- Extract i18n from shared UI components [#4834](https://github.com/paritytech/parity/pull/4834)
|
||||
- Fix paste in Inputs [#4844](https://github.com/paritytech/parity/pull/4844)
|
||||
- Pull contract deployment title from available steps [#4848](https://github.com/paritytech/parity/pull/4848)
|
||||
- Supress USB error message [#4839](https://github.com/paritytech/parity/pull/4839)
|
||||
- Fix getTransactionCount in --geth mode [#4837](https://github.com/paritytech/parity/pull/4837)
|
||||
- CI: test coverage (for core and js) [#4832](https://github.com/paritytech/parity/pull/4832)
|
||||
- Lowering threshold for transactions above gas limit [#4831](https://github.com/paritytech/parity/pull/4831)
|
||||
- Fix TxViewer when no `to` (contract deployment) [#4847](https://github.com/paritytech/parity/pull/4847)
|
||||
- Fix method decoding [#4845](https://github.com/paritytech/parity/pull/4845)
|
||||
- Add React Hot Reload to dapps + TokenDeploy fix [#4846](https://github.com/paritytech/parity/pull/4846)
|
||||
- Dapps show multiple times in some cases [#4843](https://github.com/paritytech/parity/pull/4843)
|
||||
- Fixes to the Registry dapp [#4838](https://github.com/paritytech/parity/pull/4838)
|
||||
- Show token icons on list summary pages [#4826](https://github.com/paritytech/parity/pull/4826)
|
||||
- Calibrate step before rejection [#4800](https://github.com/paritytech/parity/pull/4800)
|
||||
- Add replay protection [#4808](https://github.com/paritytech/parity/pull/4808)
|
||||
- Better icon on windows [#4804](https://github.com/paritytech/parity/pull/4804)
|
||||
- Better logic for contract deployments detection [#4821](https://github.com/paritytech/parity/pull/4821)
|
||||
- Fix wrong default values for contract queries inputs [#4819](https://github.com/paritytech/parity/pull/4819)
|
||||
- Adjust selection colours/display [#4811](https://github.com/paritytech/parity/pull/4811)
|
||||
- Update the Wallet Library Registry key [#4817](https://github.com/paritytech/parity/pull/4817)
|
||||
- Update Wallet to new Wallet Code [#4805](https://github.com/paritytech/parity/pull/4805)
|
||||
578
docs/CHANGELOG-1.8.md
Normal file
578
docs/CHANGELOG-1.8.md
Normal file
@@ -0,0 +1,578 @@
|
||||
Note: Parity 1.8 reached End-of-Life on 2018-03-22 (EOL).
|
||||
|
||||
## Parity [v1.8.11](https://github.com/paritytech/parity/releases/tag/v1.8.11) (2018-03-01)
|
||||
|
||||
Parity 1.8.11 is a bug-fix release to improve performance and stability.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Bump stable to 1.8.11 ([#8010](https://github.com/paritytech/parity/pull/8010))
|
||||
- Stable Backports ([#8008](https://github.com/paritytech/parity/pull/8008))
|
||||
- Reject too large packets in snapshot sync. ([#7977](https://github.com/paritytech/parity/pull/7977))
|
||||
- Increase max download limit to 128MB ([#7965](https://github.com/paritytech/parity/pull/7965))
|
||||
- Calculate proper keccak256/sha3 using parity. ([#7953](https://github.com/paritytech/parity/pull/7953))
|
||||
- Bump WebSockets ([#7952](https://github.com/paritytech/parity/pull/7952))
|
||||
|
||||
## Parity [v1.8.10](https://github.com/paritytech/parity/releases/tag/v1.8.10) (2018-02-20)
|
||||
|
||||
Parity 1.8.10 is a bug-fix release to improve performance and stability.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Bump react-qr-reader ([#7941)](https://github.com/paritytech/parity/pull/7941))
|
||||
- Bump react-qr-reader
|
||||
- Explicit add webrtc-adapter, non-napa qrcode-generator
|
||||
- Fix feature=final ([#7914)](https://github.com/paritytech/parity/pull/7914))
|
||||
- Fix snap build stable ([#7897)](https://github.com/paritytech/parity/pull/7897))
|
||||
- Backport core PRs to stable ([#7892)](https://github.com/paritytech/parity/pull/7892))
|
||||
- Update back-references more aggressively after answering from cache ([#7578)](https://github.com/paritytech/parity/pull/7578))
|
||||
- Store updater metadata in a single place ([#7832)](https://github.com/paritytech/parity/pull/7832))
|
||||
- Flush keyfiles. Resolves [#7632](https://github.com/paritytech/parity/issues/7632) ([#7868)](https://github.com/paritytech/parity/pull/7868))
|
||||
- Fix wallet import ([#7873)](https://github.com/paritytech/parity/pull/7873))
|
||||
- Backport Master CI PRs to Stable ([#7889)](https://github.com/paritytech/parity/pull/7889))
|
||||
- Add binary identifiers and sha256sum to builds ([#7830)](https://github.com/paritytech/parity/pull/7830))
|
||||
- Fix checksums and auto-update push ([#7846)](https://github.com/paritytech/parity/pull/7846))
|
||||
- Update gitlab-build.sh ([#7855)](https://github.com/paritytech/parity/pull/7855))
|
||||
- Fix installer binary names for macos and windows ([#7881)](https://github.com/paritytech/parity/pull/7881))
|
||||
- Update gitlab-test.sh ([#7883)](https://github.com/paritytech/parity/pull/7883))
|
||||
- Fix snapcraft nightly ([#7884)](https://github.com/paritytech/parity/pull/7884))
|
||||
- Bump stable to 1.8.10
|
||||
- Make track stable
|
||||
|
||||
## Parity [v1.8.9](https://github.com/paritytech/parity/releases/tag/v1.8.9) (2018-02-02)
|
||||
|
||||
Parity 1.8.9 is a bug-fix release to improve performance and stability. It restores ERC-20 token balances and adds additional bootnodes for the Ropsten test network.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Update gitlab-build.sh
|
||||
- Backports stable ([#7779](https://github.com/paritytech/parity/pull/7779))
|
||||
- Bump stable to 1.8.9
|
||||
- Update ropsten.json ([#7776](https://github.com/paritytech/parity/pull/7776))
|
||||
- Fix tokenAddress reference ([#7777](https://github.com/paritytech/parity/pull/7777))
|
||||
- Snapcraft push stable
|
||||
|
||||
## Parity [v1.8.8](https://github.com/paritytech/parity/releases/tag/v1.8.8) (2018-02-01)
|
||||
|
||||
Parity 1.8.8 is a bug-fix release to improve performance and stability. It restores ERC-20 token balances, improves networking, fixes database corruptions on client shutdown, and fixes issues with the `--password` command-line flag. Happy syncing!
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Gitlab stable ([#7768](https://github.com/paritytech/parity/pull/7768))
|
||||
- Fix snapcraft build for stable
|
||||
- Initial support push snap packages to snapcraft.io
|
||||
- Edge-devel
|
||||
- Snapcraft push ans fix build ([#7767](https://github.com/paritytech/parity/pull/7767))
|
||||
- Fix snapcraft build for stable
|
||||
- Initial support push snap packages to snapcraft.io
|
||||
- Edge-devel
|
||||
- Remove snapcraft.yml from scripts
|
||||
- Resolve conflicts
|
||||
- Token filter balances (throttle) ([#7755](https://github.com/paritytech/parity/pull/7755))
|
||||
- Fix snapcraft build (stable) ([#7763](https://github.com/paritytech/parity/pull/7763))
|
||||
- Fix snapcraft build for stable
|
||||
- Fix snapcraft build (stable)
|
||||
- [Stable] Backports ([#7758](https://github.com/paritytech/parity/pull/7758))
|
||||
- Filter-out nodes.json ([#7716](https://github.com/paritytech/parity/pull/7716))
|
||||
- Filter-out nodes.json
|
||||
- Network: sort node table nodes by failure ratio
|
||||
- Network: fix node table tests
|
||||
- Network: fit node failure percentage into buckets of 5%
|
||||
- Network: consider number of attempts in sorting of node table
|
||||
- Network: fix node table grumbles
|
||||
- Fix client not being dropped on shutdown ([#7695](https://github.com/paritytech/parity/pull/7695))
|
||||
- Parity: wait for client to drop on shutdown
|
||||
- Parity: fix grumbles in shutdown wait
|
||||
- Parity: increase shutdown timeouts
|
||||
- Wrap --help output to 120 characters ([#7626](https://github.com/paritytech/parity/pull/7626))
|
||||
- Update Clap dependency and remove workarounds
|
||||
- WIP
|
||||
- Remove line breaks in help messages for now
|
||||
- Multiple values can only be separated by commas (closes [#7428](https://github.com/paritytech/parity/issues/7428))
|
||||
- Grumbles; refactor repeating code; add constant
|
||||
- Use a single Wrapper rather than allocate a new one for each call
|
||||
- Wrap --help to 120 characters rather than 100 characters
|
||||
- Use explicit branch name in push ([#7757](https://github.com/paritytech/parity/pull/7757))
|
||||
- Bump stable to 1.8.8 ([#7752](https://github.com/paritytech/parity/pull/7752))
|
||||
- Fix js-release in stable ([#7682](https://github.com/paritytech/parity/pull/7682))
|
||||
- Update Info.plist
|
||||
- Fix conditions in gitlab-test ([#7675](https://github.com/paritytech/parity/pull/7675))
|
||||
- Remove cargo cache
|
||||
|
||||
## Parity [v1.8.7](https://github.com/paritytech/parity/releases/tag/v1.8.7) (2018-01-24)
|
||||
|
||||
Parity 1.8.7 is the first stable release of the 1.8 channel. It includes various bug and stability fixes. Users on Kovan or other Aura-based networks are advised to upgrade as this release fixes an issue introduced with 1.8.6 and 1.7.12 that causes Proof-of-Authority nodes to stop synchronizing the chain.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Bump stable version ([#7665](https://github.com/paritytech/parity/pull/7665))
|
||||
- Bump stable to 1.8.7
|
||||
- Backports to stable ([#7661](https://github.com/paritytech/parity/pull/7661))
|
||||
- Fixed delegatecall's from/to ([#7568](https://github.com/paritytech/parity/pull/7568))
|
||||
- Fixed delegatecall's from/to, closes [#7166](https://github.com/paritytech/parity/issues/7166)
|
||||
- Added tests for delegatecall traces, [#7167](https://github.com/paritytech/parity/issues/7167)
|
||||
- Fix Temporarily Invalid blocks handling ([#7613](https://github.com/paritytech/parity/pull/7613))
|
||||
- Handle temporarily invalid blocks in sync.
|
||||
- Fix tests.
|
||||
- Improve handling of RocksDB corruption ([#7630](https://github.com/paritytech/parity/pull/7630))
|
||||
- Kvdb-rocksdb: update rust-rocksdb version
|
||||
- Kvdb-rocksdb: mark corruptions and attempt repair on db open
|
||||
- Kvdb-rocksdb: better corruption detection on open
|
||||
- Kvdb-rocksdb: add corruption_file_name const
|
||||
- Kvdb-rocksdb: rename mark_corruption to check_for_corruption
|
||||
- Add docker build for stable and cargo cache ([#7672](https://github.com/paritytech/parity/pull/7672))
|
||||
- Fix snapcraft build for stable ([#7669](https://github.com/paritytech/parity/pull/7669))
|
||||
- Update .gitlab-ci.yml ([#7599](https://github.com/paritytech/parity/pull/7599))
|
||||
- Fix cache:key
|
||||
- Make 1.8 stable ([#7532](https://github.com/paritytech/parity/pull/7532))
|
||||
- Bump 1.8 to stable
|
||||
- Make js-precompiled stable
|
||||
|
||||
## Parity [v1.8.6](https://github.com/paritytech/parity/releases/tag/v1.8.6) (2018-01-10)
|
||||
|
||||
Parity 1.8.6 fixes a critical issue with the database eventually filling up user's disks. Upgrading is highly recommended as it will significantly improve your user experience. As a bonus, this release should enable users with slower hard-disk drives to catch up with the latest block again. Also, warp-sync performance was significantly improved. Please note, that the initial database compaction after upgrading might temporarily reduce the node's performance.
|
||||
|
||||
In addition to our gas price histogram, this version now allows you to dynamically set the default gas price as percentile from the last 100 blocks (it defaults to median: `50`).
|
||||
|
||||
--gas-price-percentile=[PCT] Set PCT percentile gas price value from
|
||||
last 100 blocks as default gas price
|
||||
when sending transactions.
|
||||
|
||||
Last but not least, this release also fixes consensus issues with the Expanse chain enabling Byzantium. If you run Parity configured for Expanse, you might have to resync your chain after the upgrade.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- RocksDB fix ([#7508](https://github.com/paritytech/parity/pull/7508))
|
||||
- Kvdb: update rust-rocksdb version
|
||||
- Backports to beta ([#7434](https://github.com/paritytech/parity/pull/7434))
|
||||
- Wait for future blocks in AuRa ([#7368](https://github.com/paritytech/parity/pull/7368))
|
||||
- Mark future blocks as temporarily invalid.
|
||||
- Don't check max.
|
||||
- Fix tracing failed calls. ([#7412](https://github.com/paritytech/parity/pull/7412))
|
||||
- Problem: sending any Whisper message fails ([#7421](https://github.com/paritytech/parity/pull/7421))
|
||||
- Strict config parsing ([#7433](https://github.com/paritytech/parity/pull/7433))
|
||||
- Problem: AuRa's unsafeties around step duration ([#7282](https://github.com/paritytech/parity/pull/7282))
|
||||
- Remove expanse chain ([#7437](https://github.com/paritytech/parity/pull/7437))
|
||||
- Remove expanse from available chains
|
||||
- Remove all EXP references from old wallet
|
||||
- Fix tests
|
||||
- Remove expanse chain ([#7437](https://github.com/paritytech/parity/pull/7437))
|
||||
- Expanse Byzantium update w/ correct metropolis difficulty increment divisor ([#7463](https://github.com/paritytech/parity/pull/7463))
|
||||
- Byzantium Update for Expanse
|
||||
- Expip2 changes - update duration limit
|
||||
- Fix missing EXPIP-2 fields
|
||||
- Format numbers as hex
|
||||
- Fix compilation errors
|
||||
- Group expanse chain spec fields together
|
||||
- Set metropolisDifficultyIncrementDivisor for Expanse
|
||||
- Revert #7437
|
||||
- Add Expanse block 900_000 hash checkpoint
|
||||
- Advance AuRa step as far as we can and prevent invalid blocks. ([#7451](https://github.com/paritytech/parity/pull/7451))
|
||||
- Advance AuRa step as far as we can.
|
||||
- Wait for future blocks.
|
||||
- Fixed panic when io is not available for export block, closes [#7486](https://github.com/paritytech/parity/issues/7486) ([#7495](https://github.com/paritytech/parity/pull/7495))
|
||||
- Update Parity Mainnet Bootnodes ([#7476](https://github.com/paritytech/parity/pull/7476))
|
||||
- Replace the Azure HDD bootnodes with the new ones :)
|
||||
- Expose default gas price percentile configuration in CLI ([#7497](https://github.com/paritytech/parity/pull/7497))
|
||||
- Expose gas price percentile.
|
||||
- Fix light eth_call.
|
||||
- Fix gas_price in light client
|
||||
- Backport nonces reservations ([#7439](https://github.com/paritytech/parity/pull/7439))
|
||||
- Reserve nonces for signing ([#6834](https://github.com/paritytech/parity/pull/6834))
|
||||
- Nonce future - reserve and dispatch
|
||||
- Single thread nonce tests
|
||||
- Track status of reserved nonces.
|
||||
- Initialization of nonce reservations.
|
||||
- Prospective Signer
|
||||
- Fix cli tests.
|
||||
- Fix nonce reservation ([#7025](https://github.com/paritytech/parity/pull/7025))
|
||||
- Use nonce reservation per address
|
||||
- Create hashmap in RPC Apis
|
||||
- Garbage collect hashmap entries.
|
||||
- HashMap::retain
|
||||
- Bump beta to 1.8.6 ([#7442](https://github.com/paritytech/parity/pull/7442))
|
||||
- KVDB backports ([#7438](https://github.com/paritytech/parity/pull/7438))
|
||||
- Separated kvdb into 3 crates: kvdb, kvdb-memorydb && kvdb-rocksdb ([#6720](https://github.com/paritytech/parity/pull/6720))
|
||||
- Separated kvdb into 3 crates: kvdb, kvdb-memorydb && kvdb-rocksdb, ref [#6693](https://github.com/paritytech/parity/issues/6693)
|
||||
- Fixed kvdb-memorydb && kvdb-rocksdb authors
|
||||
- Fixed wrong kvdb import in json_tests
|
||||
- Util tests use kvdb_memorydb instead of kvdb_rocksdb, closes [#6739](https://github.com/paritytech/parity/issues/6739)
|
||||
- Renamed kvdb_memorydb::in_memory -> kvdb_memorydb::create
|
||||
- Docs
|
||||
- Removed redundant mut from kvdb-memorydb
|
||||
- Upgrade to RocksDB 5.8.8 and tune settings to reduce space amplification ([#7348](https://github.com/paritytech/parity/pull/7348))
|
||||
- kvdb-rocksdb: update to RocksDB 5.8.8
|
||||
- kvdb-rocksdb: tune RocksDB options
|
||||
- Switch to level-style compaction
|
||||
- Increase default block size (16K), and use bigger blocks for HDDs (64K)
|
||||
- Increase default file size base (64MB SSDs, 256MB HDDs)
|
||||
- Create a single block cache shared across all column families
|
||||
- Tune compaction settings using RocksDB helper functions, taking into account
|
||||
- Memory budget spread across all columns
|
||||
- Configure backgrounds jobs based on the number of CPUs
|
||||
- Set some default recommended settings
|
||||
- ethcore: remove unused config blockchain.db_cache_size
|
||||
- parity: increase default value for db_cache_size
|
||||
- kvdb-rocksdb: enable compression on all levels
|
||||
- kvdb-rocksdb: set global db_write_bufer_size
|
||||
- kvdb-rocksdb: reduce db_write_bufer_size to force earlier flushing
|
||||
- kvdb-rocksdb: use master branch for rust-rocksdb dependency
|
||||
|
||||
## Parity [v1.8.5](https://github.com/paritytech/parity/releases/tag/v1.8.5) (2017-12-29)
|
||||
|
||||
Parity 1.8.5 changes the default behavior of JSON-RPC CORS setting, detects same-key engine signers in Aura networks, and updates bootnodes for the Kovan and Foundation networks.
|
||||
|
||||
Note: The default value of `--jsonrpc-cors` option has been altered to disallow (potentially malicious) websites from accessing the low-sensitivity RPCs (viewing exposed accounts, proposing transactions for signing). Currently domains need to be whitelisted manually. To bring back previous behaviour run with `--jsonrpc-cors all` or `--jsonrpc-cors http://example.com`.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Beta Backports ([#7297](https://github.com/paritytech/parity/pull/7297))
|
||||
- New warp enodes ([#7287](https://github.com/paritytech/parity/pull/7287))
|
||||
- New warp enodes
|
||||
- Added one more warp enode; replaced spaces with tabs
|
||||
- Bump beta to 1.8.5
|
||||
- Update kovan boot nodes
|
||||
- Detect different node, same-key signing in aura ([#7245](https://github.com/paritytech/parity/pull/7245))
|
||||
- Detect different node, same-key signing in aura
|
||||
- Reduce scope of warning
|
||||
- Fix Cargo.lock
|
||||
- Updating mainnet bootnodes.
|
||||
- Update bootnodes ([#7363](https://github.com/paritytech/parity/pull/7363))
|
||||
- Updating mainnet bootnodes.
|
||||
- Add additional parity-beta bootnodes.
|
||||
- Restore old parity bootnodes and update foudation bootnodes
|
||||
- Fix default CORS. ([#7388](https://github.com/paritytech/parity/pull/7388))
|
||||
|
||||
## Parity [v1.8.4](https://github.com/paritytech/parity/releases/tag/v1.8.4) (2017-12-12)
|
||||
|
||||
Parity 1.8.4 applies fixes for Proof-of-Authority networks and schedules the Kovan-Byzantium hard-fork.
|
||||
|
||||
- The Kovan testnet will fork on block `5067000` at `Thu Dec 14 2017 05:40:03 UTC`.
|
||||
- This enables Byzantium features on Kovan.
|
||||
- This disables uncles on Kovan for stability reasons.
|
||||
- Proof-of-Authority networks are advised to set `maximumUncleCount` to 0 in a future `maximumUncleCountTransition` for stability reasons.
|
||||
- See the [Kovan chain spec](https://github.com/paritytech/parity/blob/master/ethcore/res/ethereum/kovan.json) for an example.
|
||||
- New PoA networks created with Parity will have this feature enabled by default.
|
||||
|
||||
Furthermore, this release includes the ECIP-1039 Monetary policy rounding specification for Ethereum Classic, reduces the maximum Ethash-block timestamp drift to 15 seconds, and fixes various bugs for WASM and the RPC APIs.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Beta Backports and HF block update ([#7244](https://github.com/paritytech/parity/pull/7244))
|
||||
- Reduce max block timestamp drift to 15 seconds ([#7240](https://github.com/paritytech/parity/pull/7240))
|
||||
- Add test for block timestamp validation within allowed drift
|
||||
- Update kovan HF block number.
|
||||
- Beta Kovan HF ([#7234](https://github.com/paritytech/parity/pull/7234))
|
||||
- Kovan HF.
|
||||
- Bump version.
|
||||
- Fix aura difficulty race ([#7198](https://github.com/paritytech/parity/pull/7198))
|
||||
- Fix test key
|
||||
- Extract out score calculation
|
||||
- Fix build
|
||||
- Update kovan HF block number.
|
||||
- Add missing byzantium builtins.
|
||||
- Bump installers versions.
|
||||
- Increase allowed time drift to 10s. ([#7238](https://github.com/paritytech/parity/pull/7238))
|
||||
- Beta Backports ([#7197](https://github.com/paritytech/parity/pull/7197))
|
||||
- Maximum uncle count transition ([#7196](https://github.com/paritytech/parity/pull/7196))
|
||||
- Enable delayed maximum_uncle_count activation.
|
||||
- Fix tests.
|
||||
- Defer kovan HF.
|
||||
- Disable uncles by default ([#7006](https://github.com/paritytech/parity/pull/7006))
|
||||
- Escape inifinite loop in estimte_gas ([#7075](https://github.com/paritytech/parity/pull/7075))
|
||||
- ECIP-1039: Monetary policy rounding specification ([#7067](https://github.com/paritytech/parity/pull/7067))
|
||||
- WASM Remove blockhash error ([#7121](https://github.com/paritytech/parity/pull/7121))
|
||||
- Remove blockhash error
|
||||
- Update tests.
|
||||
- WASM storage_read and storage_write don't return anything ([#7110](https://github.com/paritytech/parity/pull/7110))
|
||||
- WASM parse payload from panics ([#7097](https://github.com/paritytech/parity/pull/7097))
|
||||
- Fix no-default-features. ([#7096](https://github.com/paritytech/parity/pull/7096))
|
||||
|
||||
## Parity [v1.8.3](https://github.com/paritytech/parity/releases/tag/v1.8.3) (2017-11-15)
|
||||
|
||||
Parity 1.8.3 contains several bug-fixes and removes the ability to deploy built-in multi-signature wallets.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Backports to beta ([#7043](https://github.com/paritytech/parity/pull/7043))
|
||||
- pwasm-std update ([#7018](https://github.com/paritytech/parity/pull/7018))
|
||||
- Version 1.8.3
|
||||
- Make CLI arguments parsing more backwards compatible ([#7004](https://github.com/paritytech/parity/pull/7004))
|
||||
- Skip nonce check for gas estimation ([#6997](https://github.com/paritytech/parity/pull/6997))
|
||||
- Events in WASM runtime ([#6967](https://github.com/paritytech/parity/pull/6967))
|
||||
- Return decoded seal fields. ([#6932](https://github.com/paritytech/parity/pull/6932))
|
||||
- Fix serialization of status in transaction receipts. ([#6926](https://github.com/paritytech/parity/pull/6926))
|
||||
- Windows fixes ([#6921](https://github.com/paritytech/parity/pull/6921))
|
||||
- Disallow built-in multi-sig deploy (only watch) ([#7014](https://github.com/paritytech/parity/pull/7014))
|
||||
- Add hint in ActionParams for splitting code/data ([#6968](https://github.com/paritytech/parity/pull/6968))
|
||||
- Action params and embedded params handling
|
||||
- Fix name-spaces
|
||||
|
||||
## Parity [v1.8.2](https://github.com/paritytech/parity/releases/tag/v1.8.2) (2017-10-26)
|
||||
|
||||
Parity 1.8.2 fixes an important potential consensus issue and a few additional minor issues:
|
||||
|
||||
- `blockNumber` transaction field is now returned correctly in RPC calls.
|
||||
- Possible crash when `--force-sealing` option is used.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Beta Backports ([#6891](https://github.com/paritytech/parity/pull/6891))
|
||||
- Bump to v1.8.2
|
||||
- Refactor static context check in CREATE. ([#6886](https://github.com/paritytech/parity/pull/6886))
|
||||
- Refactor static context check in CREATE.
|
||||
- Fix wasm.
|
||||
- Fix serialization of non-localized transactions ([#6868](https://github.com/paritytech/parity/pull/6868))
|
||||
- Fix serialization of non-localized transactions.
|
||||
- Return proper SignedTransactions representation.
|
||||
- Allow force sealing and reseal=0 for non-dev chains. ([#6878](https://github.com/paritytech/parity/pull/6878))
|
||||
|
||||
## Parity [v1.8.1](https://github.com/paritytech/parity/releases/tag/v1.8.1) (2017-10-20)
|
||||
|
||||
Parity 1.8.1 fixes several bugs with token balances, tweaks snapshot-sync, improves the performance of nodes with huge amounts of accounts and changes the Trezor account derivation path.
|
||||
|
||||
**Important Note**: The **Trezor** account derivation path was changed in this release ([#6815](https://github.com/paritytech/parity/pull/6815)) to always use the first account (`m/44'/60'/0'/0/0` instead of `m/44'/60'/0'/0`). This way we enable compatibility with other Ethereum wallets supporting Trezor hardware-wallets. However, **action is required** before upgrading, if you have funds on your Parity Trezor wallet. If you already upgraded to 1.8.1, please downgrade to 1.8.0 first to recover the funds with the following steps:
|
||||
|
||||
1. Make sure you have 1.8.0-beta and your Trezor plugged in.
|
||||
2. Create a new standard Parity account. Make sure you have backups of the recovery phrase and don't forget the password.
|
||||
3. Move your funds from the Trezor hardware-wallet account to the freshly generated Parity account.
|
||||
4. Upgrade to 1.8.1-beta and plug in your Trezor.
|
||||
5. Move your funds from your Parity account to the new Trezor account.
|
||||
6. Keep using Parity as normal.
|
||||
|
||||
If you don't want to downgrade or move your funds off your Trezor-device, you can also use the official Trezor application or other wallets allowing to select the derivation path to access the funds.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Add ECIP1017 to Morden config ([#6845](https://github.com/paritytech/parity/pull/6845))
|
||||
- Ethstore optimizations ([#6844](https://github.com/paritytech/parity/pull/6844))
|
||||
- Bumb to v1.8.1 ([#6843](https://github.com/paritytech/parity/pull/6843))
|
||||
- Backport ([#6837](https://github.com/paritytech/parity/pull/6837))
|
||||
- Tweaked snapshot sync threshold ([#6829](https://github.com/paritytech/parity/pull/6829))
|
||||
- Change keypath derivation logic ([#6815](https://github.com/paritytech/parity/pull/6815))
|
||||
- Refresh cached tokens based on registry info & random balances ([#6824](https://github.com/paritytech/parity/pull/6824))
|
||||
- Refresh cached tokens based on registry info & random balances ([#6818](https://github.com/paritytech/parity/pull/6818))
|
||||
- Don't display errored token images
|
||||
|
||||
## Parity [v1.8.0](https://github.com/paritytech/parity/releases/tag/v1.8.0) (2017-10-15)
|
||||
|
||||
We are happy to announce our newest Parity 1.8 release. Among others, it enables the following features:
|
||||
|
||||
- Full Whisper v6 integration
|
||||
- Trezor hardware-wallet support
|
||||
- WASM contract support
|
||||
- PICOPS KYC-certified accounts and vouching for community-dapps
|
||||
- Light client compatibility for Proof-of-Authority networks
|
||||
- Transaction permissioning and permissioned p2p-connections
|
||||
- Full Byzantium-fork compatibility
|
||||
- Full Musicoin MCIP-3 UBI-fork compatibility
|
||||
|
||||
Further, users upgrading from 1.7 should acknowledge the following changes:
|
||||
|
||||
- The chain-engine was further abstracted and chain-specs need to be upgraded. [#6134](https://github.com/paritytech/parity/pull/6134) [#6591](https://github.com/paritytech/parity/pull/6591)
|
||||
- `network_id` was renamed to `chain_id` where applicable. [#6345](https://github.com/paritytech/parity/pull/6345)
|
||||
- `trace_filter` RPC method now comes with pagination. [#6312](https://github.com/paritytech/parity/pull/6312)
|
||||
- Added tracing of rewards on closing blocks. [#6194](https://github.com/paritytech/parity/pull/6194)
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Updated ethabi to fix auto-update ([#6771](https://github.com/paritytech/parity/pull/6771))
|
||||
- Fixed kovan chain validation ([#6760](https://github.com/paritytech/parity/pull/6760))
|
||||
- Fixed kovan chain validation
|
||||
- Fork detection
|
||||
- Fixed typo
|
||||
- Bumped fork block number for auto-update ([#6755](https://github.com/paritytech/parity/pull/6755))
|
||||
- CLI: Reject invalid argument values rather than ignore them ([#6747](https://github.com/paritytech/parity/pull/6747))
|
||||
- Fixed modexp gas calculation overflow ([#6745](https://github.com/paritytech/parity/pull/6745))
|
||||
- Backport beta - Fixes Badges ([#6732](https://github.com/paritytech/parity/pull/6732))
|
||||
- Fix badges not showing up ([#6730](https://github.com/paritytech/parity/pull/6730))
|
||||
- Always fetch meta data first [badges]
|
||||
- Bump to v1.8.0 in beta
|
||||
- Fix tokens and badges ([#6725](https://github.com/paritytech/parity/pull/6725))
|
||||
- Update new token fetching
|
||||
- Working Certifications Monitoring
|
||||
- Update on Certification / Revoke
|
||||
- Fix none-fetched tokens value display
|
||||
- Fix tests
|
||||
- Check vouch status on appId in addition to contentHash ([#6719](https://github.com/paritytech/parity/pull/6719))
|
||||
- Check vouch status on appId in addition to contentHash
|
||||
- Simplify var expansion
|
||||
- Prevent going offline when restoring or taking a snapshot [#6694](https://github.com/paritytech/parity/pull/6694)
|
||||
- Graceful exit when invalid CLI flags are passed (#6485) [#6711](https://github.com/paritytech/parity/pull/6711)
|
||||
- Fixed RETURNDATA out of bounds check [#6718](https://github.com/paritytech/parity/pull/6718)
|
||||
- Display vouched overlay on dapps [#6710](https://github.com/paritytech/parity/pull/6710)
|
||||
- Fix gas estimation if `from` is not provided. [#6714](https://github.com/paritytech/parity/pull/6714)
|
||||
- Emulate signer pubsub on public node [#6708](https://github.com/paritytech/parity/pull/6708)
|
||||
- Removes dependency on rustc_serialize (#5988) [#6705](https://github.com/paritytech/parity/pull/6705)
|
||||
- Fixed potential modexp exp len overflow [#6686](https://github.com/paritytech/parity/pull/6686)
|
||||
- Fix asciiToHex for characters < 0x10 [#6702](https://github.com/paritytech/parity/pull/6702)
|
||||
- Fix address input [#6701](https://github.com/paritytech/parity/pull/6701)
|
||||
- Allow signer signing display of markdown [#6707](https://github.com/paritytech/parity/pull/6707)
|
||||
- Fixed build warnings [#6664](https://github.com/paritytech/parity/pull/6664)
|
||||
- Fix warp sync blockers detection [#6691](https://github.com/paritytech/parity/pull/6691)
|
||||
- Difficulty tests [#6687](https://github.com/paritytech/parity/pull/6687)
|
||||
- Separate migrations from util [#6690](https://github.com/paritytech/parity/pull/6690)
|
||||
- Changelog for 1.7.3 [#6678](https://github.com/paritytech/parity/pull/6678)
|
||||
- WASM gas schedule [#6638](https://github.com/paritytech/parity/pull/6638)
|
||||
- Fix wallet view [#6597](https://github.com/paritytech/parity/pull/6597)
|
||||
- Byzantium fork block number [#6660](https://github.com/paritytech/parity/pull/6660)
|
||||
- Fixed RETURNDATA size for built-ins [#6652](https://github.com/paritytech/parity/pull/6652)
|
||||
- Light Client: fetch transactions/receipts by transaction hash [#6641](https://github.com/paritytech/parity/pull/6641)
|
||||
- Add Musicoin and MCIP-3 UBI hardfork. [#6621](https://github.com/paritytech/parity/pull/6621)
|
||||
- fix 1.8 backcompat: revert to manual encoding/decoding of transition proofs [#6665](https://github.com/paritytech/parity/pull/6665)
|
||||
- Tweaked block download timeouts (#6595) [#6655](https://github.com/paritytech/parity/pull/6655)
|
||||
- Renamed RPC receipt statusCode field to status [#6650](https://github.com/paritytech/parity/pull/6650)
|
||||
- SecretStore: session level timeout [#6631](https://github.com/paritytech/parity/pull/6631)
|
||||
- SecretStore: ShareRemove of 'isolated' nodes [#6630](https://github.com/paritytech/parity/pull/6630)
|
||||
- SecretStore: exclusive sessions [#6624](https://github.com/paritytech/parity/pull/6624)
|
||||
- Fixed network protocol version negotiation [#6649](https://github.com/paritytech/parity/pull/6649)
|
||||
- Updated systemd files for linux (Resolves #6592) [#6598](https://github.com/paritytech/parity/pull/6598)
|
||||
- move additional_params to machine, fixes registry on non-ethash chains [#6646](https://github.com/paritytech/parity/pull/6646)
|
||||
- Fix Token Transfer in transaction list [#6589](https://github.com/paritytech/parity/pull/6589)
|
||||
- Update jsonrpc dependencies and rewrite dapps to futures. [#6522](https://github.com/paritytech/parity/pull/6522)
|
||||
- Balance queries implemented in WASM runtime [#6639](https://github.com/paritytech/parity/pull/6639)
|
||||
- Don't expose port 80 for parity anymore [#6633](https://github.com/paritytech/parity/pull/6633)
|
||||
- WASM Runtime refactoring [#6596](https://github.com/paritytech/parity/pull/6596)
|
||||
- Fix compilation [#6625](https://github.com/paritytech/parity/pull/6625)
|
||||
- Downgrade futures to suppress warnings. [#6620](https://github.com/paritytech/parity/pull/6620)
|
||||
- Add pagination for trace_filter rpc method [#6312](https://github.com/paritytech/parity/pull/6312)
|
||||
- Disallow pasting recovery phrases on first run [#6602](https://github.com/paritytech/parity/pull/6602)
|
||||
- fix typo: Unkown => Unknown [#6559](https://github.com/paritytech/parity/pull/6559)
|
||||
- SecretStore: administrative sessions prototypes [#6605](https://github.com/paritytech/parity/pull/6605)
|
||||
- fix parity.io link 404 [#6617](https://github.com/paritytech/parity/pull/6617)
|
||||
- SecretStore: add node to existing session poc + discussion [#6480](https://github.com/paritytech/parity/pull/6480)
|
||||
- Generalize engine trait [#6591](https://github.com/paritytech/parity/pull/6591)
|
||||
- Add RPC eth_chainId for querying the current blockchain chain ID [#6329](https://github.com/paritytech/parity/pull/6329)
|
||||
- Debounce sync status. [#6572](https://github.com/paritytech/parity/pull/6572)
|
||||
- [Public Node] Disable tx scheduling and hardware wallets [#6588](https://github.com/paritytech/parity/pull/6588)
|
||||
- Use memmap for dag cache [#6193](https://github.com/paritytech/parity/pull/6193)
|
||||
- Rename Requests to Batch [#6582](https://github.com/paritytech/parity/pull/6582)
|
||||
- Use host as ws/dapps url if present. [#6566](https://github.com/paritytech/parity/pull/6566)
|
||||
- Sync progress and error handling fixes [#6560](https://github.com/paritytech/parity/pull/6560)
|
||||
- Fixed receipt serialization and RPC [#6555](https://github.com/paritytech/parity/pull/6555)
|
||||
- Fix number of confirmations for transaction [#6552](https://github.com/paritytech/parity/pull/6552)
|
||||
- Fix #6540 [#6556](https://github.com/paritytech/parity/pull/6556)
|
||||
- Fix failing hardware tests [#6553](https://github.com/paritytech/parity/pull/6553)
|
||||
- Required validators >= num owners in Wallet Creation [#6551](https://github.com/paritytech/parity/pull/6551)
|
||||
- Random cleanups / improvements to a state [#6472](https://github.com/paritytech/parity/pull/6472)
|
||||
- Changelog for 1.7.2 [#6363](https://github.com/paritytech/parity/pull/6363)
|
||||
- Ropsten fork [#6533](https://github.com/paritytech/parity/pull/6533)
|
||||
- Byzantium updates [#5855](https://github.com/paritytech/parity/pull/5855)
|
||||
- Fix extension detection [#6452](https://github.com/paritytech/parity/pull/6452)
|
||||
- Downgrade futures to supress warnings [#6521](https://github.com/paritytech/parity/pull/6521)
|
||||
- separate trie from util and make its dependencies into libs [#6478](https://github.com/paritytech/parity/pull/6478)
|
||||
- WASM sha3 test [#6512](https://github.com/paritytech/parity/pull/6512)
|
||||
- Fix broken JavaScript tests [#6498](https://github.com/paritytech/parity/pull/6498)
|
||||
- SecretStore: use random key to encrypt channel + session-level nonce [#6470](https://github.com/paritytech/parity/pull/6470)
|
||||
- Trezor Support [#6403](https://github.com/paritytech/parity/pull/6403)
|
||||
- Fix compiler warning [#6491](https://github.com/paritytech/parity/pull/6491)
|
||||
- Fix typo [#6505](https://github.com/paritytech/parity/pull/6505)
|
||||
- WASM: added math overflow test [#6474](https://github.com/paritytech/parity/pull/6474)
|
||||
- Fix slow balances [#6471](https://github.com/paritytech/parity/pull/6471)
|
||||
- WASM runtime update [#6467](https://github.com/paritytech/parity/pull/6467)
|
||||
- Compatibility with whisper v6 [#6179](https://github.com/paritytech/parity/pull/6179)
|
||||
- light-poa round 2: allow optional casting of engine client to full client [#6468](https://github.com/paritytech/parity/pull/6468)
|
||||
- Moved attributes under docs [#6475](https://github.com/paritytech/parity/pull/6475)
|
||||
- cleanup util dependencies [#6464](https://github.com/paritytech/parity/pull/6464)
|
||||
- removed redundant earlymergedb trace guards [#6463](https://github.com/paritytech/parity/pull/6463)
|
||||
- UtilError utilizes error_chain! [#6461](https://github.com/paritytech/parity/pull/6461)
|
||||
- fixed master [#6465](https://github.com/paritytech/parity/pull/6465)
|
||||
- Refactor and port CLI from Docopt to Clap (#2066) [#6356](https://github.com/paritytech/parity/pull/6356)
|
||||
- Add language selector in production [#6317](https://github.com/paritytech/parity/pull/6317)
|
||||
- eth_call returns output of contract creations [#6420](https://github.com/paritytech/parity/pull/6420)
|
||||
- Refactor: Don't reexport bigint from util [#6459](https://github.com/paritytech/parity/pull/6459)
|
||||
- Transaction permissioning [#6441](https://github.com/paritytech/parity/pull/6441)
|
||||
- Added missing SecretStore tests - signing session [#6411](https://github.com/paritytech/parity/pull/6411)
|
||||
- Light-client sync for contract-based PoA [#6370](https://github.com/paritytech/parity/pull/6370)
|
||||
- triehash is separated from util [#6428](https://github.com/paritytech/parity/pull/6428)
|
||||
- remove re-export of parking_lot in util [#6435](https://github.com/paritytech/parity/pull/6435)
|
||||
- fix modexp bug: return 0 if base is zero [#6424](https://github.com/paritytech/parity/pull/6424)
|
||||
- separate semantic_version from util [#6438](https://github.com/paritytech/parity/pull/6438)
|
||||
- move timer.rs to ethcore [#6437](https://github.com/paritytech/parity/pull/6437)
|
||||
- remove re-export of ansi_term in util [#6433](https://github.com/paritytech/parity/pull/6433)
|
||||
- Pub sub blocks [#6139](https://github.com/paritytech/parity/pull/6139)
|
||||
- replace trait Hashable with fn keccak [#6423](https://github.com/paritytech/parity/pull/6423)
|
||||
- add more hash backward compatibility test for bloom [#6425](https://github.com/paritytech/parity/pull/6425)
|
||||
- remove the redundant hasher in Bloom [#6404](https://github.com/paritytech/parity/pull/6404)
|
||||
- Remove re-export of HeapSizeOf in util (part of #6418) [#6419](https://github.com/paritytech/parity/pull/6419)
|
||||
- Rewards on closing blocks [#6194](https://github.com/paritytech/parity/pull/6194)
|
||||
- ensure balances of constructor accounts are kept [#6413](https://github.com/paritytech/parity/pull/6413)
|
||||
- removed recursion from triedbmut::lookup [#6394](https://github.com/paritytech/parity/pull/6394)
|
||||
- do not activate genesis epoch in immediate transition validator contract [#6349](https://github.com/paritytech/parity/pull/6349)
|
||||
- Use git for the snap version [#6271](https://github.com/paritytech/parity/pull/6271)
|
||||
- Permissioned p2p connections [#6359](https://github.com/paritytech/parity/pull/6359)
|
||||
- Don't accept transactions above block gas limit. [#6408](https://github.com/paritytech/parity/pull/6408)
|
||||
- Fix memory tracing. [#6399](https://github.com/paritytech/parity/pull/6399)
|
||||
- earlydb optimizations [#6393](https://github.com/paritytech/parity/pull/6393)
|
||||
- Optimized PlainHasher hashing. Trie insertions are >15 faster [#6321](https://github.com/paritytech/parity/pull/6321)
|
||||
- Trie optimizations [#6389](https://github.com/paritytech/parity/pull/6389)
|
||||
- small optimizations for triehash [#6392](https://github.com/paritytech/parity/pull/6392)
|
||||
- Bring back IPFS tests. [#6398](https://github.com/paritytech/parity/pull/6398)
|
||||
- Running state test using parity-evm [#6355](https://github.com/paritytech/parity/pull/6355)
|
||||
- Wasm math tests extended [#6354](https://github.com/paritytech/parity/pull/6354)
|
||||
- Expose health status over RPC [#6274](https://github.com/paritytech/parity/pull/6274)
|
||||
- fix bloom bitvecjournal storage allocation [#6390](https://github.com/paritytech/parity/pull/6390)
|
||||
- fixed pending block panic [#6391](https://github.com/paritytech/parity/pull/6391)
|
||||
- Infoline less opaque for UI/visibility [#6364](https://github.com/paritytech/parity/pull/6364)
|
||||
- Fix eth_call. [#6365](https://github.com/paritytech/parity/pull/6365)
|
||||
- updated bigint [#6341](https://github.com/paritytech/parity/pull/6341)
|
||||
- Optimize trie iter by avoiding redundant copying [#6347](https://github.com/paritytech/parity/pull/6347)
|
||||
- Only keep a single rocksdb debug log file [#6346](https://github.com/paritytech/parity/pull/6346)
|
||||
- Tweaked snapshot params [#6344](https://github.com/paritytech/parity/pull/6344)
|
||||
- Rename network_id to chain_id where applicable. [#6345](https://github.com/paritytech/parity/pull/6345)
|
||||
- Itertools are no longer reexported from util, optimized triedb iter [#6322](https://github.com/paritytech/parity/pull/6322)
|
||||
- Better check the created accounts before showing Startup Wizard [#6331](https://github.com/paritytech/parity/pull/6331)
|
||||
- Better error messages for invalid types in RPC [#6311](https://github.com/paritytech/parity/pull/6311)
|
||||
- fix panic in parity-evm json tracer [#6338](https://github.com/paritytech/parity/pull/6338)
|
||||
- WASM math test [#6305](https://github.com/paritytech/parity/pull/6305)
|
||||
- rlp_derive [#6125](https://github.com/paritytech/parity/pull/6125)
|
||||
- Fix --chain parsing in parity-evm. [#6314](https://github.com/paritytech/parity/pull/6314)
|
||||
- Unexpose RPC methods on :8180 [#6295](https://github.com/paritytech/parity/pull/6295)
|
||||
- Ignore errors from dappsUrl when starting UI. [#6296](https://github.com/paritytech/parity/pull/6296)
|
||||
- updated bigint with optimized mul and from_big_indian [#6323](https://github.com/paritytech/parity/pull/6323)
|
||||
- SecretStore: bunch of fixes and improvements [#6168](https://github.com/paritytech/parity/pull/6168)
|
||||
- Master requires rust 1.19 [#6308](https://github.com/paritytech/parity/pull/6308)
|
||||
- Add more descriptive error when signing/decrypting using hw wallet. [#6302](https://github.com/paritytech/parity/pull/6302)
|
||||
- Increase default gas limit for eth_call. [#6299](https://github.com/paritytech/parity/pull/6299)
|
||||
- rust-toolchain file on master [#6266](https://github.com/paritytech/parity/pull/6266)
|
||||
- Migrate wasm-tests to updated runtime [#6278](https://github.com/paritytech/parity/pull/6278)
|
||||
- Extension fixes [#6284](https://github.com/paritytech/parity/pull/6284)
|
||||
- Fix a hash displayed in tooltip when signing arbitrary data [#6283](https://github.com/paritytech/parity/pull/6283)
|
||||
- Time should not contribue to overall status. [#6276](https://github.com/paritytech/parity/pull/6276)
|
||||
- Add --to and --gas-price to evmbin [#6277](https://github.com/paritytech/parity/pull/6277)
|
||||
- Fix dapps CSP when UI is exposed externally [#6178](https://github.com/paritytech/parity/pull/6178)
|
||||
- Add warning to web browser and fix links. [#6232](https://github.com/paritytech/parity/pull/6232)
|
||||
- Update Settings/Proxy view to match entries in proxy.pac [#4771](https://github.com/paritytech/parity/pull/4771)
|
||||
- Dapp refresh [#5752](https://github.com/paritytech/parity/pull/5752)
|
||||
- Add support for ConsenSys multisig wallet [#6153](https://github.com/paritytech/parity/pull/6153)
|
||||
- updated jsonrpc [#6264](https://github.com/paritytech/parity/pull/6264)
|
||||
- SecretStore: encrypt messages using private key from key store [#6146](https://github.com/paritytech/parity/pull/6146)
|
||||
- Wasm storage read test [#6255](https://github.com/paritytech/parity/pull/6255)
|
||||
- propagate stratum submit share error upstream [#6260](https://github.com/paritytech/parity/pull/6260)
|
||||
- Using multiple NTP servers [#6173](https://github.com/paritytech/parity/pull/6173)
|
||||
- Add GitHub issue templates. [#6259](https://github.com/paritytech/parity/pull/6259)
|
||||
- format instant change proofs correctly [#6241](https://github.com/paritytech/parity/pull/6241)
|
||||
- price-info does not depend on util [#6231](https://github.com/paritytech/parity/pull/6231)
|
||||
- native-contracts crate does not depend on util any more [#6233](https://github.com/paritytech/parity/pull/6233)
|
||||
- Bump master to 1.8.0 [#6256](https://github.com/paritytech/parity/pull/6256)
|
||||
- SecretStore: do not cache ACL contract + on-chain key servers configuration [#6107](https://github.com/paritytech/parity/pull/6107)
|
||||
- Fix the README badges [#6229](https://github.com/paritytech/parity/pull/6229)
|
||||
- updated tiny-keccak to 1.3 [#6248](https://github.com/paritytech/parity/pull/6248)
|
||||
- Small grammatical error [#6244](https://github.com/paritytech/parity/pull/6244)
|
||||
- Multi-call RPC [#6195](https://github.com/paritytech/parity/pull/6195)
|
||||
- InstantSeal fix [#6223](https://github.com/paritytech/parity/pull/6223)
|
||||
- Untrusted RLP length overflow check [#6227](https://github.com/paritytech/parity/pull/6227)
|
||||
- Chainspec validation [#6197](https://github.com/paritytech/parity/pull/6197)
|
||||
- Fix cache path when using --base-path [#6212](https://github.com/paritytech/parity/pull/6212)
|
||||
- removed std reexports from util && fixed broken tests [#6187](https://github.com/paritytech/parity/pull/6187)
|
||||
- WASM MVP continued [#6132](https://github.com/paritytech/parity/pull/6132)
|
||||
- Decouple virtual machines [#6184](https://github.com/paritytech/parity/pull/6184)
|
||||
- Realloc test added [#6177](https://github.com/paritytech/parity/pull/6177)
|
||||
- Re-enable wallets, fixed forgetting accounts [#6196](https://github.com/paritytech/parity/pull/6196)
|
||||
- Move more params to the common section. [#6134](https://github.com/paritytech/parity/pull/6134)
|
||||
- Whisper js [#6161](https://github.com/paritytech/parity/pull/6161)
|
||||
- typo in uninstaller [#6185](https://github.com/paritytech/parity/pull/6185)
|
||||
- fix #6052. honor --no-color for signer command [#6100](https://github.com/paritytech/parity/pull/6100)
|
||||
- Refactor --allow-ips to handle custom ip-ranges [#6144](https://github.com/paritytech/parity/pull/6144)
|
||||
- Update Changelog for 1.6.10 and 1.7.0 [#6183](https://github.com/paritytech/parity/pull/6183)
|
||||
- Fix unsoundness in ethash's unsafe code [#6140](https://github.com/paritytech/parity/pull/6140)
|
||||
531
docs/CHANGELOG-1.9.md
Normal file
531
docs/CHANGELOG-1.9.md
Normal file
@@ -0,0 +1,531 @@
|
||||
## Parity [v1.9.7](https://github.com/paritytech/parity/releases/tag/v1.9.7) (2018-04-23)
|
||||
|
||||
Parity 1.9.7 is a bug-fix release to improve performance and stability.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Update Parity stable to 1.9.7 + Backports ([#8456](https://github.com/paritytech/parity/pull/8456))
|
||||
- Update Parity stable to 1.9.7
|
||||
- Allow 32-bit pipelines to fail ([#8454](https://github.com/paritytech/parity/pull/8454))
|
||||
- Disable 32-bit targets for Gitlab
|
||||
- Rename Linux pipelines
|
||||
- Update wasmi ([#8452](https://github.com/paritytech/parity/pull/8452))
|
||||
- Revert Cargo lock update from master
|
||||
- Fix Cargo.lock
|
||||
- Backports ([#8449](https://github.com/paritytech/parity/pull/8449))
|
||||
- Use forked app_dirs crate for reverted Windows dir behavior ([#8438](https://github.com/paritytech/parity/pull/8438))
|
||||
- Remove unused app_dirs dependency in CLI
|
||||
- Use forked app_dirs crate for reverted Windows dir behavior
|
||||
- Remove Tendermint extra_info due to seal inconsistencies ([#8367](https://github.com/paritytech/parity/pull/8367))
|
||||
- Improve VM executor stack size estimation rules ([#8439](https://github.com/paritytech/parity/pull/8439))
|
||||
- Improve VM executor stack size estimation rules
|
||||
- Typo: docs add "(Debug build)" comment
|
||||
- Fix an off by one typo and set minimal stack size
|
||||
- Use saturating_sub to avoid potential overflow
|
||||
- Upgrade crossbeam to 0.3
|
||||
|
||||
## Parity [v1.9.6](https://github.com/paritytech/parity/releases/tag/v1.9.6) (2018-04-16)
|
||||
|
||||
Parity 1.9.6 is a bug-fix release to improve performance and stability.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Bump app_dirs, fixes [#8315](https://github.com/paritytech/parity/issues/8315) ([#8355](https://github.com/paritytech/parity/pull/8355))
|
||||
- Fix Cargo lock
|
||||
- Backports ([#8352](https://github.com/paritytech/parity/pull/8352))
|
||||
- Update musicoin spec in line with gmc v2.6.2 ([#8242](https://github.com/paritytech/parity/pull/8242))
|
||||
- Supress TemporaryInvalid verification failures. ([#8256](https://github.com/paritytech/parity/pull/8256))
|
||||
- Include suicided accounts in state diff ([#8297](https://github.com/paritytech/parity/pull/8297))
|
||||
- Include suicided accounts in state diff
|
||||
- Shorten form match -> if let
|
||||
- Test suicide trace diff in State
|
||||
- Replace_home for password_files, reserved_peers and log_file ([#8324](https://github.com/paritytech/parity/pull/8324))
|
||||
- Replace_home for password_files, reserved_peers and log_file
|
||||
- Typo: arg_log_file is Option
|
||||
- Bump version in util/version
|
||||
- Bump stable to 1.9.6 ([#8348](https://github.com/paritytech/parity/pull/8348))
|
||||
- WASM libraries bump ([#8219](https://github.com/paritytech/parity/pull/8219))
|
||||
- Bump wasm libs ([#8171](https://github.com/paritytech/parity/pull/8171))
|
||||
- Bump wasmi version ([#8209](https://github.com/paritytech/parity/pull/8209))
|
||||
- Updated jsonrpc to include latest backports (1.9) ([#8182](https://github.com/paritytech/parity/pull/8182))
|
||||
- Updated jsonrpc to include latest backports (1.9)
|
||||
- Update dependencies.
|
||||
|
||||
## Parity [v1.9.5](https://github.com/paritytech/parity/releases/tag/v1.9.5) (2018-03-21)
|
||||
|
||||
Parity 1.9.5 is a bug-fix release to improve performance and stability. This release marks the 1.9 track _stable_.
|
||||
|
||||
We are excited to announce support for **Wasm Smart Contracts on Kovan network**. The hard-fork to activate the Wasm-VM will take place on block `6600000`.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Do a meaningful commit that does not contain the words "ci" or "skip"
|
||||
- Triggering build for stable.
|
||||
- Postpone Kovan hard fork ([#8137](https://github.com/paritytech/parity/pull/8137)) ([#8152](https://github.com/paritytech/parity/pull/8152))
|
||||
- Postpone Kovan hard fork ([#8137](https://github.com/paritytech/parity/pull/8137))
|
||||
- ethcore: postpone Kovan hard fork
|
||||
- util: update version fork metadata
|
||||
- WASM libraries bump ([#7970](https://github.com/paritytech/parity/pull/7970))
|
||||
- update wasmi, parity-wasm, wasm-utils to latest version
|
||||
- Update to new wasmi & error handling
|
||||
- also utilize new stack limiter
|
||||
- fix typo
|
||||
- replace dependency url
|
||||
- Cargo.lock update
|
||||
- Fix scripts. Force JS rebuild. ([#8144](https://github.com/paritytech/parity/pull/8144))
|
||||
- Stable Backports ([#8133](https://github.com/paritytech/parity/pull/8133))
|
||||
- updater: apply exponential backoff after download failure ([#8059](https://github.com/paritytech/parity/pull/8059))
|
||||
- updater: apply exponential backoff after download failure
|
||||
- updater: reset backoff on new release
|
||||
- Limit incoming connections. ([#8060](https://github.com/paritytech/parity/pull/8060))
|
||||
- Limit ingress connections
|
||||
- Optimized handshakes logging
|
||||
- Max code size on Kovan ([#8067](https://github.com/paritytech/parity/pull/8067))
|
||||
- Enable code size limit on kovan
|
||||
- Fix formatting.
|
||||
- add some dos protection ([#8084](https://github.com/paritytech/parity/pull/8084))
|
||||
- more dos protection ([#8104](https://github.com/paritytech/parity/pull/8104))
|
||||
- Const time comparison ([#8113](https://github.com/paritytech/parity/pull/8113))
|
||||
- Use `subtle::slices_equal` for constant time comparison.
|
||||
- Also update the existing version of subtle in `ethcrypto` from
|
||||
- 0.1 to 0.5
|
||||
- Test specifically for InvalidPassword error.
|
||||
- revert removing blooms ([#8066](https://github.com/paritytech/parity/pull/8066))
|
||||
- Revert "fix traces, removed bloomchain crate, closes [#7228](https://github.com/paritytech/parity/pull/7228), closes [#7167](https://github.com/paritytech/parity/pull/7167)"
|
||||
- Revert "fixed broken logs ([#7934](https://github.com/paritytech/parity/pull/7934))"
|
||||
- fixed broken logs
|
||||
- bring back old lock order
|
||||
- remove migration v13
|
||||
- revert CURRENT_VERSION to 12 in migration.rs
|
||||
- Fix compilation.
|
||||
- Check one step deeper if we're on release track branches
|
||||
- add missing pr
|
||||
- Fix blooms?
|
||||
- Fix tests compiilation.
|
||||
- Fix size.
|
||||
- Check one step deeper if we're on release track branches ([#8134](https://github.com/paritytech/parity/pull/8134)) ([#8140](https://github.com/paritytech/parity/pull/8140))
|
||||
- Trigger js build. ([#8121](https://github.com/paritytech/parity/pull/8121))
|
||||
- Stable backports ([#8055](https://github.com/paritytech/parity/pull/8055))
|
||||
- CI: Fix cargo cache ([#7968](https://github.com/paritytech/parity/pull/7968))
|
||||
- Fix cache
|
||||
Blocking waiting for file lock on the registry index
|
||||
- Only clean locked cargo cache on windows
|
||||
- fixed ethstore sign ([#8026](https://github.com/paritytech/parity/pull/8026))
|
||||
- fix cache & snapcraft CI build ([#8052](https://github.com/paritytech/parity/pull/8052))
|
||||
- Add MCIP-6 Byzyantium transition to Musicoin spec ([#7841](https://github.com/paritytech/parity/pull/7841))
|
||||
- Add test chain spec for musicoin byzantium testnet
|
||||
- Add MCIP-6 Byzyantium transition to Musicoin spec
|
||||
- Update mcip6_byz.json
|
||||
- ethcore: update musicoin byzantium block number
|
||||
- ethcore: update musicoin bootnodes
|
||||
- Update musicoin.json
|
||||
- More bootnodes.
|
||||
- Optimize JS build ([#8093](https://github.com/paritytech/parity/pull/8093))
|
||||
- Extract common chunks plugin.
|
||||
- Fix common CSS.
|
||||
- Fix js push for stable.
|
||||
- Remove arguments to getPlugins.
|
||||
- Stable Backports ([#8058](https://github.com/paritytech/parity/pull/8058))
|
||||
- fixed parsing ethash seals and verify_block_undordered ([#8031](https://github.com/paritytech/parity/pull/8031))
|
||||
- fix for verify_block_basic crashing on invalid transaction rlp ([#8032](https://github.com/paritytech/parity/pull/8032))
|
||||
- Make 1.9 stable ([#8023](https://github.com/paritytech/parity/pull/8023))
|
||||
- Make 1.9 stable
|
||||
- Bump stable to 1.9.5
|
||||
- Fix gitlab builds
|
||||
|
||||
## Parity [v1.9.4](https://github.com/paritytech/parity/releases/tag/v1.9.4) (2018-03-01)
|
||||
|
||||
Parity 1.9.4 is a bug-fix release to improve performance and stability.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Bump beta to 1.9.4 ([#8016](https://github.com/paritytech/parity/pull/8016))
|
||||
- Beta Backports ([#8011](https://github.com/paritytech/parity/pull/8011))
|
||||
- Fix traces, removed bloomchain crate ([#7979](https://github.com/paritytech/parity/pull/7979))
|
||||
- Reject too large packets in snapshot sync. ([#7977](https://github.com/paritytech/parity/pull/7977))
|
||||
- Fixed broken logs ([#7934](https://github.com/paritytech/parity/pull/7934))
|
||||
- Increase max download limit to 128MB ([#7965](https://github.com/paritytech/parity/pull/7965))
|
||||
- Calculate proper keccak256/sha3 using parity. ([#7953](https://github.com/paritytech/parity/pull/7953))
|
||||
- Bump WebSockets ([#7952](https://github.com/paritytech/parity/pull/7952))
|
||||
- Hardware-wallet/usb-subscribe-refactor ([#7860](https://github.com/paritytech/parity/pull/7860))
|
||||
- Make block generator easier to use ([#7888](https://github.com/paritytech/parity/pull/7888))
|
||||
|
||||
## Parity [v1.9.3](https://github.com/paritytech/parity/releases/tag/v1.9.3) (2018-02-20)
|
||||
|
||||
Parity 1.9.3 is a bug-fix release to improve performance and stability.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Backports ([#7945](https://github.com/paritytech/parity/pull/7945))
|
||||
- ECIP 1041 - Remove Difficulty Bomb ([#7905](https://github.com/paritytech/parity/pull/7905))
|
||||
- spec: Validate required divisor fields are not 0 ([#7933](https://github.com/paritytech/parity/pull/7933))
|
||||
- Kovan WASM fork code ([#7849](https://github.com/paritytech/parity/pull/7849))
|
||||
- Gitlab Cargo Cache ([#7944](https://github.com/paritytech/parity/pull/7944))
|
||||
- Bump react-qr-reader ([#7943](https://github.com/paritytech/parity/pull/7943))
|
||||
- Update react-qr-reader
|
||||
- Explicit webrtc-adapter dependency (package-lock workaround)
|
||||
- Iframe with allow (QR, new Chrome policy)
|
||||
- Backport of [#7844](https://github.com/paritytech/parity/pull/7844) and [#7917](https://github.com/paritytech/parity/pull/7917) to beta ([#7940](https://github.com/paritytech/parity/pull/7940))
|
||||
- Randomize the peer we dispatch to
|
||||
- Fix a division by zero in light client RPC handler
|
||||
- Wallet allowJsEval: true ([#7913](https://github.com/paritytech/parity/pull/7913))
|
||||
- Wallet allowJsEval: true
|
||||
- Fix unsafe wallet.
|
||||
- Enable unsafe-eval for all dapps.
|
||||
- Fix CSP for dapps that require eval. ([#7867](https://github.com/paritytech/parity/pull/7867)) ([#7903](https://github.com/paritytech/parity/pull/7903))
|
||||
- Add allowJsEval to manifest.
|
||||
- Enable 'unsafe-eval' if requested in manifest.
|
||||
- Fix snap build beta ([#7895](https://github.com/paritytech/parity/pull/7895))
|
||||
- Fix snapcraft grade to stable ([#7894](https://github.com/paritytech/parity/pull/7894))
|
||||
- Backport Master CI PRs to Beta ([#7890](https://github.com/paritytech/parity/pull/7890))
|
||||
- Add binary identifiers and sha256sum to builds ([#7830](https://github.com/paritytech/parity/pull/7830))
|
||||
- Fix checksums and auto-update push ([#7846](https://github.com/paritytech/parity/pull/7846))
|
||||
- Update gitlab-build.sh ([#7855](https://github.com/paritytech/parity/pull/7855))
|
||||
- Fix installer binary names for macos and windows ([#7881](https://github.com/paritytech/parity/pull/7881))
|
||||
- Update gitlab-test.sh ([#7883](https://github.com/paritytech/parity/pull/7883))
|
||||
- Fix snapcraft nightly ([#7884](https://github.com/paritytech/parity/pull/7884))
|
||||
- Backport Core PRs to beta ([#7891](https://github.com/paritytech/parity/pull/7891))
|
||||
- Update back-references more aggressively after answering from cache ([#7578](https://github.com/paritytech/parity/pull/7578))
|
||||
- Updated WASM Runtime & new interpreter (wasmi) ([#7796](https://github.com/paritytech/parity/pull/7796))
|
||||
- Adjust storage update evm-style ([#7812](https://github.com/paritytech/parity/pull/7812))
|
||||
- Add new EF ropstens nodes ([#7824](https://github.com/paritytech/parity/pull/7824))
|
||||
- Store updater metadata in a single place ([#7832](https://github.com/paritytech/parity/pull/7832))
|
||||
- WASM: Disable internal memory ([#7842](https://github.com/paritytech/parity/pull/7842))
|
||||
- Add a timeout for light client sync requests ([#7848](https://github.com/paritytech/parity/pull/7848))
|
||||
- Flush keyfiles. Resolves [#7632](https://github.com/paritytech/parity/issues/7632) ([#7868](https://github.com/paritytech/parity/pull/7868))
|
||||
- Fix wallet import ([#7873](https://github.com/paritytech/parity/pull/7873))
|
||||
|
||||
## Parity [v1.9.2](https://github.com/paritytech/parity/releases/tag/v1.9.2) (2018-02-02)
|
||||
|
||||
Parity 1.9.2 is a bug-fix release to improve performance and stability. It adds additional bootnodes for the Ropsten test network.
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Backports beta ([#7780](https://github.com/paritytech/parity/pull/7780))
|
||||
- Bump beta to 1.9.2
|
||||
- Update ropsten.json ([#7776](https://github.com/paritytech/parity/pull/7776))
|
||||
- Snapcraft push beta
|
||||
|
||||
## Parity [v1.9.1](https://github.com/paritytech/parity/releases/tag/v1.9.1) (2018-02-01)
|
||||
|
||||
Parity 1.9.1 is a bug-fix release to improve performance and stability. It restores ERC-20 token balances, improves networking, fixes database corruptions on client shutdown, and fixes issues with the `--password` command-line flag. Happy syncing, fellow Ethereans!
|
||||
|
||||
In addition, this stabilizes Kovan and other Proof-of-Authority networks. If you run a network with AuRa engine, updating is highly encouraged!
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Beta Backports ([#7756](https://github.com/paritytech/parity/pull/7756))
|
||||
- Filter-out nodes.json ([#7716](https://github.com/paritytech/parity/pull/7716))
|
||||
- Filter-out nodes.json
|
||||
- network: sort node table nodes by failure ratio
|
||||
- network: fix node table tests
|
||||
- network: fit node failure percentage into buckets of 5%
|
||||
- network: consider number of attempts in sorting of node table
|
||||
- network: fix node table grumbles
|
||||
- Fix client not being dropped on shutdown ([#7695](https://github.com/paritytech/parity/pull/7695))
|
||||
- parity: wait for client to drop on shutdown
|
||||
- parity: fix grumbles in shutdown wait
|
||||
- parity: increase shutdown timeouts
|
||||
- Wrap --help output to 120 characters ([#7626](https://github.com/paritytech/parity/pull/7626))
|
||||
- Update Clap dependency and remove workarounds
|
||||
- WIP
|
||||
- Remove line breaks in help messages for now
|
||||
- Multiple values can only be separated by commas (closes [#7428](https://github.com/paritytech/parity/issues/7428))
|
||||
- Grumbles; refactor repeating code; add constant
|
||||
- Use a single Wrapper rather than allocate a new one for each call
|
||||
- Wrap --help to 120 characters rather than 100 characte
|
||||
- Token filter balances (throttle) ([#7742](https://github.com/paritytech/parity/pull/7742))
|
||||
- Token filter balances (throttle)
|
||||
- Cleanups
|
||||
- Remove unused uniq
|
||||
- Update @parity/shared to 2.2.23
|
||||
- Remove unused code paths
|
||||
- Bump beta to 1.9.1 ([#7751](https://github.com/paritytech/parity/pull/7751))
|
||||
- Explicitly add branch name ([#7754](https://github.com/paritytech/parity/pull/7754))
|
||||
- Explicitly add branch name
|
||||
- Fix cargo update branch to beta
|
||||
- Revert revert revert ([#7715](https://github.com/paritytech/parity/pull/7715))
|
||||
- This reverts commit 568dc33.
|
||||
|
||||
## Parity [v1.9.0](https://github.com/paritytech/parity/releases/tag/v1.9.0) "Velocity" (2018-01-25)
|
||||
|
||||
We are happy to announce our newest Parity 1.9 release. Among others, it enables the following features:
|
||||
|
||||
- It integrates the fully reworked Parity Wallet and DApps browser (a.k.a. "UI 2.0", [#6819](https://github.com/paritytech/parity/pull/6819)).
|
||||
- It enables devp2p snappy compression ([#6683](https://github.com/paritytech/parity/pull/6683)).
|
||||
- AuRa Proof-of-Authority chains now disable uncles by default ([#7006](https://github.com/paritytech/parity/pull/7006)). Existing PoA chains can go through a "maximum uncle count transition" to achieve more stability ([#7196](https://github.com/paritytech/parity/pull/7196)).
|
||||
- Added Expanse's Byzantium hard-fork ([#7463](https://github.com/paritytech/parity/pull/7463)).
|
||||
- Added support for Ellaism chain ([#7222](https://github.com/paritytech/parity/pull/7222)).
|
||||
|
||||
Further, users upgrading from 1.8 should acknowledge the following changes:
|
||||
|
||||
- Fixed DELEGATECALL's from/to field ([#7568](https://github.com/paritytech/parity/pull/7568)).
|
||||
- Set zero nonce and gas price for calls by default ([#6954](https://github.com/paritytech/parity/pull/6954)).
|
||||
- Create pending blocks with all transactions from the queue ([#6942](https://github.com/paritytech/parity/pull/6942)).
|
||||
- Remove RPC parameter leniency now that Mist formats correctly ([#6651](https://github.com/paritytech/parity/pull/6651)). Parity stops accepting decimal-formatted block numbers and stops parsing the empty string as empty bytes.
|
||||
- Public nodes do not support the user interface anymore. If you are running a public node, please stay on the 1.8 branch of the stable releases.
|
||||
|
||||
Additional noteworthy changes:
|
||||
|
||||
- `ethstore` and `ethkey` have been significantly improved ([#6961](https://github.com/paritytech/parity/pull/6961)):
|
||||
- `ethstore` now supports brute forcing pre-sale wallets given a password list for recovery.
|
||||
- `ethkey` now supports multi-threaded generation of prefix-matching addresses.
|
||||
- `ethkey` now supports prefix-matching brain wallets.
|
||||
- `ethkey` now supports brain-wallets recovery-phrases lookup. This helps to find a correct phrase if you know the address you want to get yet you made a typo backing the phrase up, or forgot a word.
|
||||
|
||||
Read more about Parity 1.9 in our [blog post](http://paritytech.io/velocity-the-fastest-parity-released/).
|
||||
|
||||
The full list of included changes:
|
||||
|
||||
- Add scroll when when too many accounts ([#7677](https://github.com/paritytech/parity/pull/7677)) ([#7679](https://github.com/paritytech/parity/pull/7679))
|
||||
- Update installer.nsi
|
||||
- Fix conditions in gitlab-test ([#7676](https://github.com/paritytech/parity/pull/7676))
|
||||
- Fix conditions in gitlab-test
|
||||
- Update gitlab-test.sh
|
||||
- Remove cargo cache
|
||||
- Backports to beta ([#7660](https://github.com/paritytech/parity/pull/7660))
|
||||
- Improve handling of RocksDB corruption ([#7630](https://github.com/paritytech/parity/pull/7630))
|
||||
- Kvdb-rocksdb: update rust-rocksdb version
|
||||
- Kvdb-rocksdb: mark corruptions and attempt repair on db open
|
||||
- Kvdb-rocksdb: better corruption detection on open
|
||||
- Kvdb-rocksdb: add corruption_file_name const
|
||||
- Kvdb-rocksdb: rename mark_corruption to check_for_corruption
|
||||
- Hardening of CSP ([#7621](https://github.com/paritytech/parity/pull/7621))
|
||||
- Fixed delegatecall's from/to ([#7568](https://github.com/paritytech/parity/pull/7568))
|
||||
- Fixed delegatecall's from/to, closes [#7166](https://github.com/paritytech/parity/issues/7166)
|
||||
- Added tests for delegatecall traces, [#7167](https://github.com/paritytech/parity/issues/7167)
|
||||
- Light client RPCs ([#7603](https://github.com/paritytech/parity/pull/7603))
|
||||
- Implement registrar.
|
||||
- Implement eth_getCode
|
||||
- Don't wait for providers.
|
||||
- Don't wait for providers.
|
||||
- Fix linting and wasm tests.
|
||||
- Problem: AttachedProtocols don't get registered ([#7610](https://github.com/paritytech/parity/pull/7610))
|
||||
- Fix Temporarily Invalid blocks handling ([#7613](https://github.com/paritytech/parity/pull/7613))
|
||||
- Handle temporarily invalid blocks in sync.
|
||||
- Fix tests.
|
||||
- Add docker build for beta ([#7671](https://github.com/paritytech/parity/pull/7671))
|
||||
- Add docker build for beta
|
||||
- Add cargo cache
|
||||
- Fix snapcraft build for beta ([#7670](https://github.com/paritytech/parity/pull/7670))
|
||||
- Update Parity.pkgproj
|
||||
- update gitlab build from master
|
||||
- Update references to dapp sources ([#7634](https://github.com/paritytech/parity/pull/7634)) ([#7636](https://github.com/paritytech/parity/pull/7636))
|
||||
- Update tokenreg ([#7618](https://github.com/paritytech/parity/pull/7618)) ([#7619](https://github.com/paritytech/parity/pull/7619))
|
||||
- Fix cache:key ([#7598](https://github.com/paritytech/parity/pull/7598))
|
||||
- Make 1.9 beta ([#7533](https://github.com/paritytech/parity/pull/7533))
|
||||
- Trigger js-precompiled ([#7535](https://github.com/paritytech/parity/pull/7535))
|
||||
- RocksDB fix ([#7512](https://github.com/paritytech/parity/pull/7512))
|
||||
- Update js-api ([#7510](https://github.com/paritytech/parity/pull/7510))
|
||||
- Expose default gas price percentile configuration in CLI ([#7497](https://github.com/paritytech/parity/pull/7497))
|
||||
- Use https connection ([#7503](https://github.com/paritytech/parity/pull/7503))
|
||||
- More thorough changes detection ([#7472](https://github.com/paritytech/parity/pull/7472))
|
||||
- Fix small layout issues ([#7500](https://github.com/paritytech/parity/pull/7500))
|
||||
- Show all accounts on Topbar ([#7498](https://github.com/paritytech/parity/pull/7498))
|
||||
- Update Parity Mainnet Bootnodes ([#7476](https://github.com/paritytech/parity/pull/7476))
|
||||
- Fixed panic when io is not available for export block ([#7495](https://github.com/paritytech/parity/pull/7495))
|
||||
- Advance AuRa step as far as we can and prevent invalid blocks. ([#7451](https://github.com/paritytech/parity/pull/7451))
|
||||
- Update package-lock in js-old ([#7494](https://github.com/paritytech/parity/pull/7494))
|
||||
- Update issue template and readme ([#7450](https://github.com/paritytech/parity/pull/7450))
|
||||
- Update package-lock.json pinned versions ([#7492](https://github.com/paritytech/parity/pull/7492))
|
||||
- Explicit pre-precompiled push checkout ([#7474](https://github.com/paritytech/parity/pull/7474))
|
||||
- Trigger js-precompiled ([#7473](https://github.com/paritytech/parity/pull/7473))
|
||||
- Expanse Byzantium update w/ correct metropolis difficulty increment divisor ([#7463](https://github.com/paritytech/parity/pull/7463))
|
||||
- Updated icons ([#7469](https://github.com/paritytech/parity/pull/7469))
|
||||
- Cleanup certifications ([#7454](https://github.com/paritytech/parity/pull/7454))
|
||||
- Fix css lint (updated stylelint) ([#7471](https://github.com/paritytech/parity/pull/7471))
|
||||
- Upgrade markdown-loader & marked ([#7467](https://github.com/paritytech/parity/pull/7467))
|
||||
- Remove JS test for removed code ([#7461](https://github.com/paritytech/parity/pull/7461))
|
||||
- Pull in dapp-status ([#7457](https://github.com/paritytech/parity/pull/7457))
|
||||
- Bump openssl crate ([#7455](https://github.com/paritytech/parity/pull/7455))
|
||||
- Signer updates from global Redux state ([#7452](https://github.com/paritytech/parity/pull/7452))
|
||||
- Remove expanse chain ([#7437](https://github.com/paritytech/parity/pull/7437))
|
||||
- Store tokens with repeatable id ([#7435](https://github.com/paritytech/parity/pull/7435))
|
||||
- Strict config parsing ([#7433](https://github.com/paritytech/parity/pull/7433))
|
||||
- Upgrade to RocksDB 5.8.8 and tune settings to reduce space amplification ([#7348](https://github.com/paritytech/parity/pull/7348))
|
||||
- Fix status layout ([#7432](https://github.com/paritytech/parity/pull/7432))
|
||||
- Fix tracing failed calls. ([#7412](https://github.com/paritytech/parity/pull/7412))
|
||||
- Problem: sending any Whisper message fails ([#7421](https://github.com/paritytech/parity/pull/7421))
|
||||
- Wait for future blocks in AuRa ([#7368](https://github.com/paritytech/parity/pull/7368))
|
||||
- Fix final feature. ([#7426](https://github.com/paritytech/parity/pull/7426))
|
||||
- Use RwLock for state DB ([#7425](https://github.com/paritytech/parity/pull/7425))
|
||||
- Update branding on UI ([#7370](https://github.com/paritytech/parity/pull/7370))
|
||||
- Changelog for 1.8.5 and 1.7.11 ([#7401](https://github.com/paritytech/parity/pull/7401))
|
||||
- Added checking tx-type using transactions permission contract for miners ([#7359](https://github.com/paritytech/parity/pull/7359))
|
||||
- Standalone dir crate, replaces [#7383](https://github.com/paritytech/parity/issues/7383) ([#7409](https://github.com/paritytech/parity/pull/7409))
|
||||
- SecretStore: secretstore_signRawHash method ([#7336](https://github.com/paritytech/parity/pull/7336))
|
||||
- SecretStore: return error 404 when there's no key shares for given key on all nodes ([#7331](https://github.com/paritytech/parity/pull/7331))
|
||||
- SecretStore: PoA integration initial version ([#7101](https://github.com/paritytech/parity/pull/7101))
|
||||
- Update bootnodes ([#7363](https://github.com/paritytech/parity/pull/7363))
|
||||
- Fix default CORS settings. ([#7387](https://github.com/paritytech/parity/pull/7387))
|
||||
- Fix version ([#7390](https://github.com/paritytech/parity/pull/7390))
|
||||
- Wasm runtime update ([#7356](https://github.com/paritytech/parity/pull/7356))
|
||||
- Parity-version pr reopen ([#7136](https://github.com/paritytech/parity/pull/7136))
|
||||
- Get rid of clippy remainings. ([#7355](https://github.com/paritytech/parity/pull/7355))
|
||||
- Avoid using ok_or with allocated argument ([#7357](https://github.com/paritytech/parity/pull/7357))
|
||||
- Make accounts refresh time configurable. ([#7345](https://github.com/paritytech/parity/pull/7345))
|
||||
- Enable traces for DEV chain ([#7327](https://github.com/paritytech/parity/pull/7327))
|
||||
- Problem: AuRa's unsafeties around step duration ([#7282](https://github.com/paritytech/parity/pull/7282))
|
||||
- Problem: Cargo.toml file contains [project] key ([#7346](https://github.com/paritytech/parity/pull/7346))
|
||||
- Fix broken flex modal layouts ([#7343](https://github.com/paritytech/parity/pull/7343))
|
||||
- Fix dappIcon & Fix Signer Pending ([#7338](https://github.com/paritytech/parity/pull/7338))
|
||||
- Fix wallet token/badge icons not showing up ([#7333](https://github.com/paritytech/parity/pull/7333))
|
||||
- Add Ellaism coin in chain config ([#7222](https://github.com/paritytech/parity/pull/7222))
|
||||
- Update bootnodes ([#7296](https://github.com/paritytech/parity/pull/7296))
|
||||
- Adds `personal_signTransaction` RPC method ([#6991](https://github.com/paritytech/parity/pull/6991))
|
||||
- Fix double initialization of embeded providers. ([#7326](https://github.com/paritytech/parity/pull/7326))
|
||||
- Transaction Pool re-implementation ([#6994](https://github.com/paritytech/parity/pull/6994))
|
||||
- UI package bump ([#7318](https://github.com/paritytech/parity/pull/7318))
|
||||
- Test framework and basic test for whisper ([#7011](https://github.com/paritytech/parity/pull/7011))
|
||||
- CI js-precompiled trigger ([#7316](https://github.com/paritytech/parity/pull/7316))
|
||||
- Fix inject.js & Signer store duplication ([#7299](https://github.com/paritytech/parity/pull/7299))
|
||||
- Detect different node, same-key signing in aura ([#7245](https://github.com/paritytech/parity/pull/7245))
|
||||
- New warp enodes ([#7287](https://github.com/paritytech/parity/pull/7287))
|
||||
- CSS fixes for v1 ([#7285](https://github.com/paritytech/parity/pull/7285))
|
||||
- Wallet subscriptions & refresh ([#7283](https://github.com/paritytech/parity/pull/7283))
|
||||
- Update inject web3 dependencies ([#7286](https://github.com/paritytech/parity/pull/7286))
|
||||
- Some padding around dapp image ([#7276](https://github.com/paritytech/parity/pull/7276))
|
||||
- Expand available middleware methods ([#7275](https://github.com/paritytech/parity/pull/7275))
|
||||
- Inject parity script to all dapps // Expand dapps to any ZIP file ([#7260](https://github.com/paritytech/parity/pull/7260))
|
||||
- New Homepage ([#7266](https://github.com/paritytech/parity/pull/7266))
|
||||
- Update kovan HF block number. ([#7259](https://github.com/paritytech/parity/pull/7259))
|
||||
- CHANGELOG for 1.7.10 and 1.8.4 ([#7265](https://github.com/paritytech/parity/pull/7265))
|
||||
- Remove extraneous id hashing ([#7269](https://github.com/paritytech/parity/pull/7269))
|
||||
- Simplify status + content display overlaps/page fixing ([#7264](https://github.com/paritytech/parity/pull/7264))
|
||||
- UI redirect to 127.0.0.1 when localhost requested ([#7236](https://github.com/paritytech/parity/pull/7236))
|
||||
- Usability improvements to security token Dialog [#7112](https://github.com/paritytech/parity/issues/7112) ([#7134](https://github.com/paritytech/parity/pull/7134))
|
||||
- Don't display unneeded notifications ([#7237](https://github.com/paritytech/parity/pull/7237))
|
||||
- Reduce max block timestamp drift to 15 seconds ([#7240](https://github.com/paritytech/parity/pull/7240))
|
||||
- Increase allowed time drift to 10s. ([#7238](https://github.com/paritytech/parity/pull/7238))
|
||||
- Improve building from source ([#7239](https://github.com/paritytech/parity/pull/7239))
|
||||
- Fix/Update method permissions ([#7233](https://github.com/paritytech/parity/pull/7233))
|
||||
- Fix aura difficulty race ([#7198](https://github.com/paritytech/parity/pull/7198))
|
||||
- Dependency updates ([#7226](https://github.com/paritytech/parity/pull/7226))
|
||||
- Display all dapps (shell) & wallet tabs (v1) by default ([#7213](https://github.com/paritytech/parity/pull/7213))
|
||||
- Rework dapps list ([#7206](https://github.com/paritytech/parity/pull/7206))
|
||||
- Add contributing guidelines and code of conduct. ([#7157](https://github.com/paritytech/parity/pull/7157))
|
||||
- Make Signing Requests more visible ([#7204](https://github.com/paritytech/parity/pull/7204))
|
||||
- Send each log as a separate notification ([#7175](https://github.com/paritytech/parity/pull/7175))
|
||||
- Deleting a mistake comment in calc difficulty ([#7154](https://github.com/paritytech/parity/pull/7154))
|
||||
- Maximum uncle count transition ([#7196](https://github.com/paritytech/parity/pull/7196))
|
||||
- Update FirstRun for UI-2 ([#7195](https://github.com/paritytech/parity/pull/7195))
|
||||
- Update mocha import stubs ([#7191](https://github.com/paritytech/parity/pull/7191))
|
||||
- Escape inifinite loop in estimte_gas ([#7075](https://github.com/paritytech/parity/pull/7075))
|
||||
- New account selector UI in top bar ([#7179](https://github.com/paritytech/parity/pull/7179))
|
||||
- Removed ethcore-util dependency from ethcore-network ([#7180](https://github.com/paritytech/parity/pull/7180))
|
||||
- WASM test runner utility upgrade ([#7147](https://github.com/paritytech/parity/pull/7147))
|
||||
- React 16 ([#7174](https://github.com/paritytech/parity/pull/7174))
|
||||
- Assorted improvements for ethstore and ethkey ([#6961](https://github.com/paritytech/parity/pull/6961))
|
||||
- Delete unused package.json (dist bundles) ([#7173](https://github.com/paritytech/parity/pull/7173))
|
||||
- Remove *.css.map & *.js.map ([#7168](https://github.com/paritytech/parity/pull/7168))
|
||||
- Use git flag to remove old js artifacts ([#7165](https://github.com/paritytech/parity/pull/7165))
|
||||
- Cleanup JS build artifacts ([#7164](https://github.com/paritytech/parity/pull/7164))
|
||||
- Fixes typo in user config path ([#7159](https://github.com/paritytech/parity/pull/7159))
|
||||
- Pull in new dapp-{methods,visible} dapps ([#7150](https://github.com/paritytech/parity/pull/7150))
|
||||
- WASM test runner utility ([#7142](https://github.com/paritytech/parity/pull/7142))
|
||||
- WASM Remove blockhash error ([#7121](https://github.com/paritytech/parity/pull/7121))
|
||||
- ECIP-1039: Monetary policy rounding specification ([#7067](https://github.com/paritytech/parity/pull/7067))
|
||||
- Fixed `RotatingLogger` after migrating to new arrayvec ([#7129](https://github.com/paritytech/parity/pull/7129))
|
||||
- Push to correct shell branch ([#7135](https://github.com/paritytech/parity/pull/7135))
|
||||
- Update js-precompiled ref, trigger JS build ([#7132](https://github.com/paritytech/parity/pull/7132))
|
||||
- Fixed build && test ([#7128](https://github.com/paritytech/parity/pull/7128))
|
||||
- Update packages, pull in compiled-only repos ([#7125](https://github.com/paritytech/parity/pull/7125))
|
||||
- Cleanup top bar, add Home icon for navigation ([#7118](https://github.com/paritytech/parity/pull/7118))
|
||||
- WASM storage_read and storage_write don't return anything ([#7110](https://github.com/paritytech/parity/pull/7110))
|
||||
- Local dapp development URL ([#7100](https://github.com/paritytech/parity/pull/7100))
|
||||
- Remove unused and duplicated files in js-old ([#7082](https://github.com/paritytech/parity/pull/7082))
|
||||
- Optimize & group dapp requests ([#7083](https://github.com/paritytech/parity/pull/7083))
|
||||
- WASM parse payload from panics ([#7097](https://github.com/paritytech/parity/pull/7097))
|
||||
- Fix no-default-features. ([#7096](https://github.com/paritytech/parity/pull/7096))
|
||||
- Updated eth-secp256k1 ([#7090](https://github.com/paritytech/parity/pull/7090))
|
||||
- Improve Github Issue Template ([#7099](https://github.com/paritytech/parity/pull/7099))
|
||||
- Changes necessary to upload crates to crates.io ([#7020](https://github.com/paritytech/parity/pull/7020))
|
||||
- Reopened 6860 - iterate over both buffered and unbuffered database entries ([#7048](https://github.com/paritytech/parity/pull/7048))
|
||||
- SecretStore: servers set change session api ([#6925](https://github.com/paritytech/parity/pull/6925))
|
||||
- Disable uncles by default ([#7006](https://github.com/paritytech/parity/pull/7006))
|
||||
- Squashed ethcore-network changes which introduce error-chain ([#7040](https://github.com/paritytech/parity/pull/7040))
|
||||
- Removed redundant imports ([#7057](https://github.com/paritytech/parity/pull/7057))
|
||||
- CHANGELOG for 1.7.8, 1.7.9, 1.8.2, and 1.8.3 ([#7055](https://github.com/paritytech/parity/pull/7055))
|
||||
- Properly display Signer errors (Snackbar display popup) ([#7053](https://github.com/paritytech/parity/pull/7053))
|
||||
- Add the desktop file for the snap ([#7059](https://github.com/paritytech/parity/pull/7059))
|
||||
- Small performance gain in allocations ([#7054](https://github.com/paritytech/parity/pull/7054))
|
||||
- Bump JSON-RPC version ([#7051](https://github.com/paritytech/parity/pull/7051))
|
||||
- Fix nonce reservation ([#7025](https://github.com/paritytech/parity/pull/7025))
|
||||
- Fixed ethstore-cli output ([#7052](https://github.com/paritytech/parity/pull/7052))
|
||||
- Add mui for embed compilation ([#7049](https://github.com/paritytech/parity/pull/7049))
|
||||
- Update the snap metadata to keep working strictly confined ([#6993](https://github.com/paritytech/parity/pull/6993))
|
||||
- Remove unused js packages (dapp cleanups) ([#7046](https://github.com/paritytech/parity/pull/7046))
|
||||
- Gitlog location update ([#7042](https://github.com/paritytech/parity/pull/7042))
|
||||
- Move git logging to .git-release.log ([#7041](https://github.com/paritytech/parity/pull/7041))
|
||||
- Start from rust root in release update step ([#7039](https://github.com/paritytech/parity/pull/7039))
|
||||
- Complete token merge, remove unused files ([#7037](https://github.com/paritytech/parity/pull/7037))
|
||||
- Add missing cargo-push.sh shell variable ([#7036](https://github.com/paritytech/parity/pull/7036))
|
||||
- Fix npm start script ([#7034](https://github.com/paritytech/parity/pull/7034))
|
||||
- Update executable flags on release scripts ([#7035](https://github.com/paritytech/parity/pull/7035))
|
||||
- Fix v1 precompiled ([#7033](https://github.com/paritytech/parity/pull/7033))
|
||||
- Push precompiled to correct branch (v1) ([#7031](https://github.com/paritytech/parity/pull/7031))
|
||||
- Update v1 Wallet Dapp ([#6935](https://github.com/paritytech/parity/pull/6935))
|
||||
- WASM tests update ([#7018](https://github.com/paritytech/parity/pull/7018))
|
||||
- Events in WASM runtime ([#6967](https://github.com/paritytech/parity/pull/6967))
|
||||
- Adds validate_node_url() and refactors boot node check ([#6907](https://github.com/paritytech/parity/pull/6907)) ([#6970](https://github.com/paritytech/parity/pull/6970))
|
||||
- Fix windows build (with ui rebuild) ([#7016](https://github.com/paritytech/parity/pull/7016))
|
||||
- Make CLI arguments parsing more backwards compatible ([#7004](https://github.com/paritytech/parity/pull/7004))
|
||||
- Fixes for parity-extension ([#6990](https://github.com/paritytech/parity/pull/6990))
|
||||
- Update ethcore-bigint ([#6992](https://github.com/paritytech/parity/pull/6992))
|
||||
- Get local transactions by hash in the light client ([#6874](https://github.com/paritytech/parity/pull/6874))
|
||||
- Warn when blacklisted account present in store ([#6875](https://github.com/paritytech/parity/pull/6875))
|
||||
- Skip nonce check for gas estimation ([#6997](https://github.com/paritytech/parity/pull/6997))
|
||||
- Creating pending block with all transactions from the queue ([#6942](https://github.com/paritytech/parity/pull/6942))
|
||||
- Removes `MAX_TX_TO_IMPORT` from `ChainSync` ([#6976](https://github.com/paritytech/parity/pull/6976))
|
||||
- SecretStore: versioned keys ([#6910](https://github.com/paritytech/parity/pull/6910))
|
||||
- Removes `FUTURE_QUEUE_LIMITS_SHIFT` ([#6962](https://github.com/paritytech/parity/pull/6962))
|
||||
- Set zero nonce and gas price for calls by default ([#6954](https://github.com/paritytech/parity/pull/6954))
|
||||
- Add hint in ActionParams for splitting code/data ([#6957](https://github.com/paritytech/parity/pull/6957))
|
||||
- Return decoded seal fields. ([#6932](https://github.com/paritytech/parity/pull/6932))
|
||||
- Fix serialization of status in transaction receipts. ([#6926](https://github.com/paritytech/parity/pull/6926))
|
||||
- Reserve nonces for signing ([#6834](https://github.com/paritytech/parity/pull/6834))
|
||||
- Windows fixes ([#6921](https://github.com/paritytech/parity/pull/6921))
|
||||
- Don't add {css,js}.map from dapps ([#6931](https://github.com/paritytech/parity/pull/6931))
|
||||
- Fix JSON tracing for sub-calls. ([#6842](https://github.com/paritytech/parity/pull/6842))
|
||||
- Shell updates (bonds, updated Dapps) ([#6897](https://github.com/paritytech/parity/pull/6897))
|
||||
- Fix [#6228](https://github.com/paritytech/parity/issues/6228): do not display eth price in cli for etc ([#6877](https://github.com/paritytech/parity/pull/6877))
|
||||
- Fix mining help ([#6885](https://github.com/paritytech/parity/pull/6885))
|
||||
- Refactor static context check in CREATE. ([#6886](https://github.com/paritytech/parity/pull/6886))
|
||||
- Cleanup some configuration options ([#6878](https://github.com/paritytech/parity/pull/6878))
|
||||
- Fix serialization of non-localized transactions ([#6868](https://github.com/paritytech/parity/pull/6868))
|
||||
- Updated ntp to version 0.3 ([#6854](https://github.com/paritytech/parity/pull/6854))
|
||||
- Align README with 1.8 and prepare CHANGELOG with 1.8.1 ([#6833](https://github.com/paritytech/parity/pull/6833))
|
||||
- Return error on timed unlock ([#6777](https://github.com/paritytech/parity/pull/6777))
|
||||
- Fix dapps tests in master ([#6866](https://github.com/paritytech/parity/pull/6866))
|
||||
- Ethstore optimizations ([#6827](https://github.com/paritytech/parity/pull/6827))
|
||||
- Add ECIP1017 to Morden config ([#6810](https://github.com/paritytech/parity/pull/6810))
|
||||
- Remove all package publishing to npm ([#6838](https://github.com/paritytech/parity/pull/6838))
|
||||
- Util crates use tempdir crate instead of devtools to create temp path ([#6807](https://github.com/paritytech/parity/pull/6807))
|
||||
- Trigger js build ([#6836](https://github.com/paritytech/parity/pull/6836))
|
||||
- Clean-up scripts. ([#6832](https://github.com/paritytech/parity/pull/6832))
|
||||
- Tweaked snapshot sync threshold ([#6829](https://github.com/paritytech/parity/pull/6829))
|
||||
- Integrate UI 2 ([#6819](https://github.com/paritytech/parity/pull/6819))
|
||||
- Refresh cached tokens based on registry info & random balances ([#6818](https://github.com/paritytech/parity/pull/6818))
|
||||
- Change keypath derivation logic ([#6815](https://github.com/paritytech/parity/pull/6815))
|
||||
- Refactors journaldb as a separate crate ([#6801](https://github.com/paritytech/parity/pull/6801))
|
||||
- Trigger UI build. ([#6817](https://github.com/paritytech/parity/pull/6817))
|
||||
- Bumped more crate versions ([#6809](https://github.com/paritytech/parity/pull/6809))
|
||||
- Fix RPC compilation warnings. ([#6808](https://github.com/paritytech/parity/pull/6808))
|
||||
- Remove internal ipc ([#6795](https://github.com/paritytech/parity/pull/6795))
|
||||
- Consistent KeyValueDB errors ([#6792](https://github.com/paritytech/parity/pull/6792))
|
||||
- Squash remaining warnings ([#6789](https://github.com/paritytech/parity/pull/6789))
|
||||
- Forward-port [#6754](https://github.com/paritytech/parity/issues/6754) [#6755](https://github.com/paritytech/parity/issues/6755) ([#6785](https://github.com/paritytech/parity/pull/6785))
|
||||
- Removed duplicated versions of clippy ([#6776](https://github.com/paritytech/parity/pull/6776))
|
||||
- Updated ethabi to version 4.0 ([#6742](https://github.com/paritytech/parity/pull/6742))
|
||||
- Updated rpc_cli and parity to rpassword 1.0 ([#6774](https://github.com/paritytech/parity/pull/6774))
|
||||
- Fix sign data typo ([#6750](https://github.com/paritytech/parity/pull/6750))
|
||||
- Refactoring/cache 6693 ([#6772](https://github.com/paritytech/parity/pull/6772))
|
||||
- Fix CHANGLOG for 1.8.0 ([#6751](https://github.com/paritytech/parity/pull/6751))
|
||||
- Removes redundant `mut` in service.rs.in ([#6775](https://github.com/paritytech/parity/pull/6775))
|
||||
- Remove redundant `mut` ([#6773](https://github.com/paritytech/parity/pull/6773))
|
||||
- Fixed kovan chain validation ([#6758](https://github.com/paritytech/parity/pull/6758))
|
||||
- Removed redundant evm deps ([#6757](https://github.com/paritytech/parity/pull/6757))
|
||||
- Fixed modexp gas calculation overflow ([#6741](https://github.com/paritytech/parity/pull/6741))
|
||||
- Use cc 1.0 instead of gcc ([#6733](https://github.com/paritytech/parity/pull/6733))
|
||||
- Version bump to 1.9.0 ([#6727](https://github.com/paritytech/parity/pull/6727))
|
||||
- Fix badges not showing up ([#6730](https://github.com/paritytech/parity/pull/6730))
|
||||
@@ -1,18 +1,21 @@
|
||||
[package]
|
||||
name = "ethash"
|
||||
version = "1.8.0"
|
||||
version = "1.11.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
|
||||
[lib]
|
||||
|
||||
[dependencies]
|
||||
log = "0.3"
|
||||
hash = { path = "../util/hash" }
|
||||
keccak-hash = { path = "../util/hash" }
|
||||
primal = "0.2.3"
|
||||
parking_lot = "0.4"
|
||||
parking_lot = "0.5"
|
||||
crunchy = "0.1.0"
|
||||
memmap = "0.5.2"
|
||||
memmap = "0.6"
|
||||
either = "1.0.0"
|
||||
|
||||
[dev-dependencies]
|
||||
tempdir = "0.3"
|
||||
|
||||
[features]
|
||||
benches = []
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
use compute::Light;
|
||||
use either::Either;
|
||||
use keccak::{H256, keccak_512};
|
||||
use memmap::{Mmap, Protection};
|
||||
use memmap::MmapMut;
|
||||
use parking_lot::Mutex;
|
||||
use seed_compute::SeedHashCompute;
|
||||
|
||||
@@ -30,7 +30,7 @@ use std::path::{Path, PathBuf};
|
||||
use std::slice;
|
||||
use std::sync::Arc;
|
||||
|
||||
type Cache = Either<Vec<Node>, Mmap>;
|
||||
type Cache = Either<Vec<Node>, MmapMut>;
|
||||
|
||||
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
|
||||
pub enum OptimizeFor {
|
||||
@@ -181,7 +181,7 @@ impl NodeCache {
|
||||
}
|
||||
}
|
||||
|
||||
fn make_memmapped_cache(path: &Path, num_nodes: usize, ident: &H256) -> io::Result<Mmap> {
|
||||
fn make_memmapped_cache(path: &Path, num_nodes: usize, ident: &H256) -> io::Result<MmapMut> {
|
||||
use std::fs::OpenOptions;
|
||||
|
||||
let file = OpenOptions::new()
|
||||
@@ -191,9 +191,9 @@ fn make_memmapped_cache(path: &Path, num_nodes: usize, ident: &H256) -> io::Resu
|
||||
.open(&path)?;
|
||||
file.set_len((num_nodes * NODE_BYTES) as _)?;
|
||||
|
||||
let mut memmap = Mmap::open(&file, Protection::ReadWrite)?;
|
||||
let mut memmap = unsafe { MmapMut::map_mut(&file)? };
|
||||
|
||||
unsafe { initialize_memory(memmap.mut_ptr() as *mut Node, num_nodes, ident) };
|
||||
unsafe { initialize_memory(memmap.as_mut_ptr() as *mut Node, num_nodes, ident) };
|
||||
|
||||
Ok(memmap)
|
||||
}
|
||||
@@ -241,7 +241,10 @@ fn consume_cache(cache: &mut Cache, path: &Path) -> io::Result<()> {
|
||||
fn cache_from_path(path: &Path, optimize_for: OptimizeFor) -> io::Result<Cache> {
|
||||
let memmap = match optimize_for {
|
||||
OptimizeFor::Cpu => None,
|
||||
OptimizeFor::Memory => Mmap::open_path(path, Protection::ReadWrite).ok(),
|
||||
OptimizeFor::Memory => {
|
||||
let file = fs::OpenOptions::new().read(true).write(true).create(true).open(path)?;
|
||||
unsafe { MmapMut::map_mut(&file).ok() }
|
||||
},
|
||||
};
|
||||
|
||||
memmap.map(Either::Right).ok_or(()).or_else(|_| {
|
||||
@@ -287,7 +290,7 @@ impl AsRef<[Node]> for NodeCache {
|
||||
match self.cache {
|
||||
Either::Left(ref vec) => vec,
|
||||
Either::Right(ref mmap) => unsafe {
|
||||
let bytes = mmap.ptr();
|
||||
let bytes = mmap.as_ptr();
|
||||
// This isn't a safety issue, so we can keep this a debug lint. We don't care about
|
||||
// people manually messing with the files unless it can cause unsafety, but if we're
|
||||
// generating incorrect files then we want to catch that in CI.
|
||||
|
||||
@@ -315,6 +315,7 @@ fn calculate_dag_item(node_index: u32, cache: &[Node]) -> Node {
|
||||
mod test {
|
||||
use super::*;
|
||||
use std::fs;
|
||||
use tempdir::TempDir;
|
||||
|
||||
#[test]
|
||||
fn test_get_cache_size() {
|
||||
@@ -386,8 +387,10 @@ mod test {
|
||||
0xe9, 0x7e, 0x53, 0x84,
|
||||
];
|
||||
let nonce = 0xd7b3ac70a301a249;
|
||||
|
||||
let tempdir = TempDir::new("").unwrap();
|
||||
// difficulty = 0x085657254bd9u64;
|
||||
let light = NodeCacheBuilder::new(None).light(&::std::env::temp_dir(), 486382);
|
||||
let light = NodeCacheBuilder::new(None).light(tempdir.path(), 486382);
|
||||
let result = light_compute(&light, &hash, nonce);
|
||||
assert_eq!(result.mix_hash[..], mix_hash[..]);
|
||||
assert_eq!(result.value[..], boundary[..]);
|
||||
@@ -395,18 +398,18 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn test_drop_old_data() {
|
||||
let path = ::std::env::temp_dir();
|
||||
let tempdir = TempDir::new("").unwrap();
|
||||
let builder = NodeCacheBuilder::new(None);
|
||||
let first = builder.light(&path, 0).to_file().unwrap().to_owned();
|
||||
let first = builder.light(tempdir.path(), 0).to_file().unwrap().to_owned();
|
||||
|
||||
let second = builder.light(&path, ETHASH_EPOCH_LENGTH).to_file().unwrap().to_owned();
|
||||
let second = builder.light(tempdir.path(), ETHASH_EPOCH_LENGTH).to_file().unwrap().to_owned();
|
||||
assert!(fs::metadata(&first).is_ok());
|
||||
|
||||
let _ = builder.light(&path, ETHASH_EPOCH_LENGTH * 2).to_file();
|
||||
let _ = builder.light(tempdir.path(), ETHASH_EPOCH_LENGTH * 2).to_file();
|
||||
assert!(fs::metadata(&first).is_err());
|
||||
assert!(fs::metadata(&second).is_ok());
|
||||
|
||||
let _ = builder.light(&path, ETHASH_EPOCH_LENGTH * 3).to_file();
|
||||
let _ = builder.light(tempdir.path(), ETHASH_EPOCH_LENGTH * 3).to_file();
|
||||
assert!(fs::metadata(&second).is_err());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
extern crate hash;
|
||||
extern crate keccak_hash as hash;
|
||||
|
||||
pub type H256 = [u8; 32];
|
||||
|
||||
|
||||
@@ -26,6 +26,9 @@ extern crate crunchy;
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate tempdir;
|
||||
|
||||
mod compute;
|
||||
mod seed_compute;
|
||||
mod cache;
|
||||
@@ -105,16 +108,14 @@ impl EthashManager {
|
||||
};
|
||||
match light {
|
||||
None => {
|
||||
let light = match Light::from_file_with_builder(
|
||||
&self.nodecache_builder,
|
||||
let light = match self.nodecache_builder.light_from_file(
|
||||
&self.cache_dir,
|
||||
block_number,
|
||||
) {
|
||||
Ok(light) => Arc::new(light),
|
||||
Err(e) => {
|
||||
debug!("Light cache file not found for {}:{}", block_number, e);
|
||||
let mut light = Light::new_with_builder(
|
||||
&self.nodecache_builder,
|
||||
let mut light = self.nodecache_builder.light(
|
||||
&self.cache_dir,
|
||||
block_number,
|
||||
);
|
||||
@@ -137,7 +138,10 @@ impl EthashManager {
|
||||
|
||||
#[test]
|
||||
fn test_lru() {
|
||||
let ethash = EthashManager::new(&::std::env::temp_dir(), None);
|
||||
use tempdir::TempDir;
|
||||
|
||||
let tempdir = TempDir::new("").unwrap();
|
||||
let ethash = EthashManager::new(tempdir.path(), None);
|
||||
let hash = [0u8; 32];
|
||||
ethash.compute_light(1, &hash, 1);
|
||||
ethash.compute_light(50000, &hash, 1);
|
||||
@@ -169,7 +173,7 @@ mod benchmarks {
|
||||
use std::env;
|
||||
|
||||
let builder = NodeCacheBuilder::new(OptimizeFor::Memory);
|
||||
let light = Light::new_with_builder(&builder, &env::temp_dir(), 486382);
|
||||
let light = builder.light(&env::temp_dir(), 486382);
|
||||
|
||||
b.iter(|| light_compute(&light, &HASH, NONCE));
|
||||
}
|
||||
@@ -178,7 +182,8 @@ mod benchmarks {
|
||||
fn bench_light_compute_memory(b: &mut Bencher) {
|
||||
use std::env;
|
||||
|
||||
let light = Light::new(&env::temp_dir(), 486382);
|
||||
let builder = NodeCacheBuilder::new(OptimizeFor::Cpu);
|
||||
let light = builder.light(&env::temp_dir(), 486382);
|
||||
|
||||
b.iter(|| light_compute(&light, &HASH, NONCE));
|
||||
}
|
||||
@@ -190,7 +195,7 @@ mod benchmarks {
|
||||
|
||||
b.iter(|| {
|
||||
let builder = NodeCacheBuilder::new(OptimizeFor::Memory);
|
||||
let light = Light::new_with_builder(&builder, &env::temp_dir(), 486382);
|
||||
let light = builder.light(&env::temp_dir(), 486382);
|
||||
light_compute(&light, &HASH, NONCE);
|
||||
});
|
||||
}
|
||||
@@ -199,8 +204,10 @@ mod benchmarks {
|
||||
#[ignore]
|
||||
fn bench_light_new_round_trip_memory(b: &mut Bencher) {
|
||||
use std::env;
|
||||
|
||||
b.iter(|| {
|
||||
let light = Light::new(&env::temp_dir(), 486382);
|
||||
let builder = NodeCacheBuilder::new(OptimizeFor::Cpu);
|
||||
let light = builder.light(&env::temp_dir(), 486382);
|
||||
light_compute(&light, &HASH, NONCE);
|
||||
});
|
||||
}
|
||||
@@ -212,12 +219,14 @@ mod benchmarks {
|
||||
let dir = env::temp_dir();
|
||||
let height = 486382;
|
||||
{
|
||||
let mut dummy = Light::new(&dir, height);
|
||||
let builder = NodeCacheBuilder::new(OptimizeFor::Cpu);
|
||||
let mut dummy = builder.light(&dir, height);
|
||||
dummy.to_file().unwrap();
|
||||
}
|
||||
|
||||
b.iter(|| {
|
||||
let light = Light::from_file(&dir, 486382).unwrap();
|
||||
let builder = NodeCacheBuilder::new(OptimizeFor::Cpu);
|
||||
let light = builder.light_from_file(&dir, 486382).unwrap();
|
||||
light_compute(&light, &HASH, NONCE);
|
||||
});
|
||||
}
|
||||
@@ -228,15 +237,16 @@ mod benchmarks {
|
||||
|
||||
let dir = env::temp_dir();
|
||||
let height = 486382;
|
||||
|
||||
{
|
||||
let builder = NodeCacheBuilder::new(OptimizeFor::Memory);
|
||||
let mut dummy = Light::new_with_builder(&builder, &dir, height);
|
||||
let mut dummy = builder.light(&dir, height);
|
||||
dummy.to_file().unwrap();
|
||||
}
|
||||
|
||||
b.iter(|| {
|
||||
let builder = NodeCacheBuilder::new(OptimizeFor::Memory);
|
||||
let light = Light::from_file_with_builder(&builder, &dir, 486382).unwrap();
|
||||
let light = builder.light_from_file(&dir, 486382).unwrap();
|
||||
light_compute(&light, &HASH, NONCE);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3,91 +3,89 @@ description = "Ethcore library"
|
||||
homepage = "http://parity.io"
|
||||
license = "GPL-3.0"
|
||||
name = "ethcore"
|
||||
version = "1.8.0"
|
||||
version = "1.11.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
build = "build.rs"
|
||||
|
||||
[build-dependencies]
|
||||
"ethcore-ipc-codegen" = { path = "../ipc/codegen" }
|
||||
|
||||
[dependencies]
|
||||
ansi_term = "0.9"
|
||||
bloomchain = "0.1"
|
||||
bn = { git = "https://github.com/paritytech/bn" }
|
||||
ansi_term = "0.10"
|
||||
bloomchain = { path = "../util/bloomchain" }
|
||||
bn = { git = "https://github.com/paritytech/bn", default-features = false }
|
||||
byteorder = "1.0"
|
||||
clippy = { version = "0.0.103", optional = true}
|
||||
common-types = { path = "types" }
|
||||
crossbeam = "0.2.9"
|
||||
crossbeam = "0.3"
|
||||
ethash = { path = "../ethash" }
|
||||
ethcore-bloom-journal = { path = "../util/bloom" }
|
||||
ethcore-bytes = { path = "../util/bytes" }
|
||||
fetch = { path = "../util/fetch" }
|
||||
hashdb = { path = "../util/hashdb" }
|
||||
memorydb = { path = "../util/memorydb" }
|
||||
patricia_trie = { path = "../util/patricia_trie" }
|
||||
ethcore-devtools = { path = "../devtools" }
|
||||
patricia-trie = { path = "../util/patricia_trie" }
|
||||
error-chain = { version = "0.11", default-features = false }
|
||||
ethcore-io = { path = "../util/io" }
|
||||
ethcore-ipc = { path = "../ipc/rpc" }
|
||||
ethcore-ipc-nano = { path = "../ipc/nano" }
|
||||
ethcore-logger = { path = "../logger" }
|
||||
ethcore-stratum = { path = "../stratum" }
|
||||
ethcore-util = { path = "../util" }
|
||||
ethcore-bigint = { path = "../util/bigint" }
|
||||
ethcore-miner = { path = "../miner" }
|
||||
ethcore-stratum = { path = "./stratum" }
|
||||
ethcore-transaction = { path = "./transaction" }
|
||||
ethereum-types = "0.3"
|
||||
memory-cache = { path = "../util/memory_cache" }
|
||||
ethabi = "5.1"
|
||||
ethabi-derive = "5.0"
|
||||
ethabi-contract = "5.0"
|
||||
ethjson = { path = "../json" }
|
||||
ethkey = { path = "../ethkey" }
|
||||
ethstore = { path = "../ethstore" }
|
||||
evm = { path = "evm" }
|
||||
futures = "0.1"
|
||||
hardware-wallet = { path = "../hw" }
|
||||
heapsize = "0.4"
|
||||
hyper = { git = "https://github.com/paritytech/hyper", default-features = false }
|
||||
itertools = "0.5"
|
||||
lazy_static = "0.2"
|
||||
linked-hash-map = "0.5"
|
||||
lazy_static = "1.0"
|
||||
log = "0.3"
|
||||
lru-cache = "0.1"
|
||||
native-contracts = { path = "native_contracts" }
|
||||
num = "0.1"
|
||||
num = { version = "0.1", default-features = false, features = ["bigint"] }
|
||||
num_cpus = "1.2"
|
||||
parity-machine = { path = "../machine" }
|
||||
parking_lot = "0.4"
|
||||
price-info = { path = "../price-info" }
|
||||
rayon = "0.8"
|
||||
rand = "0.3"
|
||||
parking_lot = "0.5"
|
||||
rayon = "1.0"
|
||||
rand = "0.4"
|
||||
rlp = { path = "../util/rlp" }
|
||||
rlp_compress = { path = "../util/rlp_compress" }
|
||||
rlp_derive = { path = "../util/rlp_derive" }
|
||||
kvdb = { path = "../util/kvdb" }
|
||||
kvdb-rocksdb = { path = "../util/kvdb-rocksdb" }
|
||||
kvdb-memorydb = { path = "../util/kvdb-memorydb" }
|
||||
util-error = { path = "../util/error" }
|
||||
snappy = { path = "../util/snappy" }
|
||||
migration = { path = "../util/migration" }
|
||||
snappy = { git = "https://github.com/paritytech/rust-snappy" }
|
||||
stop-guard = { path = "../util/stop-guard" }
|
||||
macros = { path = "../util/macros" }
|
||||
rust-crypto = "0.2.34"
|
||||
rustc-hex = "1.0"
|
||||
stats = { path = "../util/stats" }
|
||||
time = "0.1"
|
||||
transient-hashmap = "0.4"
|
||||
trace-time = { path = "../util/trace-time" }
|
||||
using_queue = { path = "../util/using_queue" }
|
||||
table = { path = "../util/table" }
|
||||
bloomable = { path = "../util/bloomable" }
|
||||
vm = { path = "vm" }
|
||||
wasm = { path = "wasm" }
|
||||
hash = { path = "../util/hash" }
|
||||
keccak-hash = { path = "../util/hash" }
|
||||
triehash = { path = "../util/triehash" }
|
||||
semantic_version = { path = "../util/semantic_version" }
|
||||
unexpected = { path = "../util/unexpected" }
|
||||
journaldb = { path = "../util/journaldb" }
|
||||
|
||||
[dev-dependencies]
|
||||
native-contracts = { path = "native_contracts", features = ["test_contracts"] }
|
||||
tempdir = "0.3"
|
||||
trie-standardmap = { path = "../util/trie-standardmap" }
|
||||
kvdb-rocksdb = { path = "../util/kvdb-rocksdb" }
|
||||
|
||||
[features]
|
||||
jit = ["evm/jit"]
|
||||
# Display EVM debug traces.
|
||||
evm-debug = ["slow-blocks"]
|
||||
# Display EVM debug traces when running tests.
|
||||
evm-debug-tests = ["evm-debug", "evm/evm-debug-tests"]
|
||||
slow-blocks = [] # Use SLOW_TX_DURATION="50" (compile time!) to track transactions over 50ms
|
||||
json-tests = []
|
||||
# Measure time of transaction execution.
|
||||
# Whenever the transaction execution time (in millis) exceeds the value of
|
||||
# SLOW_TX_DURATION env variable (provided compile time!)
|
||||
# EVM debug traces are printed.
|
||||
slow-blocks = []
|
||||
# Run JSON consensus tests.
|
||||
json-tests = ["ethcore-transaction/json-tests"]
|
||||
# Run memory/cpu heavy tests.
|
||||
test-heavy = []
|
||||
dev = ["clippy"]
|
||||
default = []
|
||||
# Compile benches
|
||||
benches = []
|
||||
ipc = []
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
extern crate ethcore_ipc_codegen;
|
||||
|
||||
fn main() {
|
||||
ethcore_ipc_codegen::derive_ipc_cond("src/client/traits.rs", cfg!(feature="ipc")).unwrap();
|
||||
ethcore_ipc_codegen::derive_ipc_cond("src/snapshot/snapshot_service_trait.rs", cfg!(feature="ipc")).unwrap();
|
||||
ethcore_ipc_codegen::derive_ipc_cond("src/client/chain_notify.rs", cfg!(feature="ipc")).unwrap();
|
||||
}
|
||||
16
ethcore/crypto/Cargo.toml
Normal file
16
ethcore/crypto/Cargo.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[package]
|
||||
name = "ethcore-crypto"
|
||||
version = "0.1.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
|
||||
[dependencies]
|
||||
rust-crypto = "0.2.36"
|
||||
tiny-keccak = "1.3"
|
||||
eth-secp256k1 = { git = "https://github.com/paritytech/rust-secp256k1", optional = true }
|
||||
ethkey = { path = "../../ethkey", optional = true }
|
||||
ethereum-types = "0.3"
|
||||
subtle = "0.5"
|
||||
|
||||
[features]
|
||||
default = ["secp256k1"]
|
||||
secp256k1 = ["eth-secp256k1", "ethkey"]
|
||||
5
ethcore/crypto/README.md
Normal file
5
ethcore/crypto/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Ethcrypto
|
||||
|
||||
General cryptographic utilities for Ethereum.
|
||||
|
||||
By default, this library is compiled with the `secp256k1` feature, which provides ECDH and ECIES capability on that curve. It can be compiled without to avoid a dependency on the `libsecp256k1` library.
|
||||
@@ -17,18 +17,23 @@
|
||||
//! Crypto utils used ethstore and network.
|
||||
|
||||
extern crate crypto as rcrypto;
|
||||
extern crate ethcore_bigint as bigint;
|
||||
extern crate ethkey;
|
||||
extern crate secp256k1;
|
||||
extern crate ethereum_types;
|
||||
extern crate subtle;
|
||||
extern crate tiny_keccak;
|
||||
|
||||
#[cfg(feature = "secp256k1")]
|
||||
extern crate secp256k1;
|
||||
#[cfg(feature = "secp256k1")]
|
||||
extern crate ethkey;
|
||||
|
||||
use std::fmt;
|
||||
use tiny_keccak::Keccak;
|
||||
use rcrypto::pbkdf2::pbkdf2;
|
||||
use rcrypto::scrypt::{scrypt, ScryptParams};
|
||||
use rcrypto::sha2::Sha256;
|
||||
use rcrypto::hmac::Hmac;
|
||||
|
||||
#[cfg(feature = "secp256k1")]
|
||||
use secp256k1::Error as SecpError;
|
||||
|
||||
pub const KEY_LENGTH: usize = 32;
|
||||
@@ -59,6 +64,7 @@ impl fmt::Display for ScryptError {
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub enum Error {
|
||||
#[cfg(feature = "secp256k1")]
|
||||
Secp(SecpError),
|
||||
Scrypt(ScryptError),
|
||||
InvalidMessage,
|
||||
@@ -73,6 +79,7 @@ impl From<ScryptError> for Error {
|
||||
impl fmt::Display for Error {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
||||
let s = match *self {
|
||||
#[cfg(feature = "secp256k1")]
|
||||
Error::Secp(ref err) => err.to_string(),
|
||||
Error::Scrypt(ref err) => err.to_string(),
|
||||
Error::InvalidMessage => "Invalid message".into(),
|
||||
@@ -88,6 +95,7 @@ impl Into<String> for Error {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "secp256k1")]
|
||||
impl From<SecpError> for Error {
|
||||
fn from(e: SecpError) -> Self {
|
||||
Error::Secp(e)
|
||||
@@ -174,7 +182,7 @@ pub mod aes {
|
||||
}
|
||||
|
||||
/// ECDH functions
|
||||
#[cfg_attr(feature="dev", allow(similar_names))]
|
||||
#[cfg(feature = "secp256k1")]
|
||||
pub mod ecdh {
|
||||
use secp256k1::{ecdh, key, Error as SecpError};
|
||||
use ethkey::{Secret, Public, SECP256K1};
|
||||
@@ -199,15 +207,15 @@ pub mod ecdh {
|
||||
}
|
||||
|
||||
/// ECIES function
|
||||
#[cfg_attr(feature="dev", allow(similar_names))]
|
||||
#[cfg(feature = "secp256k1")]
|
||||
pub mod ecies {
|
||||
use rcrypto::digest::Digest;
|
||||
use rcrypto::sha2::Sha256;
|
||||
use rcrypto::hmac::Hmac;
|
||||
use rcrypto::mac::Mac;
|
||||
use bigint::hash::H128;
|
||||
use ethereum_types::H128;
|
||||
use ethkey::{Random, Generator, Public, Secret};
|
||||
use {Error, ecdh, aes, Keccak256};
|
||||
use {Error, ecdh, aes};
|
||||
|
||||
/// Encrypt a message with a public key, writing an HMAC covering both
|
||||
/// the plaintext and authenticated data.
|
||||
@@ -227,7 +235,7 @@ pub mod ecies {
|
||||
hasher.result(&mut mkey);
|
||||
let ekey = &key[0..16];
|
||||
|
||||
let mut msg = vec![0u8; (1 + 64 + 16 + plain.len() + 32)];
|
||||
let mut msg = vec![0u8; 1 + 64 + 16 + plain.len() + 32];
|
||||
msg[0] = 0x04u8;
|
||||
{
|
||||
let msgd = &mut msg[1..];
|
||||
@@ -249,33 +257,6 @@ pub mod ecies {
|
||||
Ok(msg)
|
||||
}
|
||||
|
||||
/// Encrypt a message with a public key and no HMAC
|
||||
pub fn encrypt_single_message(public: &Public, plain: &[u8]) -> Result<Vec<u8>, Error> {
|
||||
let r = Random.generate()
|
||||
.expect("context known to have key-generation capabilities");
|
||||
|
||||
let z = ecdh::agree(r.secret(), public)?;
|
||||
let mut key = [0u8; 32];
|
||||
let mut mkey = [0u8; 32];
|
||||
kdf(&z, &[0u8; 0], &mut key);
|
||||
let mut hasher = Sha256::new();
|
||||
let mkey_material = &key[16..32];
|
||||
hasher.input(mkey_material);
|
||||
hasher.result(&mut mkey);
|
||||
let ekey = &key[0..16];
|
||||
|
||||
let mut msgd = vec![0u8; (64 + plain.len())];
|
||||
{
|
||||
r.public().copy_to(&mut msgd[0..64]);
|
||||
let iv = H128::from_slice(&z.keccak256()[0..16]);
|
||||
{
|
||||
let cipher = &mut msgd[64..(64 + plain.len())];
|
||||
aes::encrypt(ekey, &iv, plain, cipher);
|
||||
}
|
||||
}
|
||||
Ok(msgd)
|
||||
}
|
||||
|
||||
/// Decrypt a message with a secret key, checking HMAC for ciphertext
|
||||
/// and authenticated data validity.
|
||||
pub fn decrypt(secret: &Secret, auth_data: &[u8], encrypted: &[u8]) -> Result<Vec<u8>, Error> {
|
||||
@@ -310,7 +291,7 @@ pub mod ecies {
|
||||
hmac.raw_result(&mut mac);
|
||||
|
||||
// constant time compare to avoid timing attack.
|
||||
if ::subtle::arrays_equal(&mac[..], msg_mac) != 1 {
|
||||
if ::subtle::slices_equal(&mac[..], msg_mac) != 1 {
|
||||
return Err(Error::InvalidMessage);
|
||||
}
|
||||
|
||||
@@ -319,33 +300,6 @@ pub mod ecies {
|
||||
Ok(msg)
|
||||
}
|
||||
|
||||
/// Decrypt single message with a secret key and no HMAC.
|
||||
pub fn decrypt_single_message(secret: &Secret, encrypted: &[u8]) -> Result<Vec<u8>, Error> {
|
||||
let meta_len = 64;
|
||||
if encrypted.len() < meta_len {
|
||||
return Err(Error::InvalidMessage); //invalid message: publickey
|
||||
}
|
||||
|
||||
let e = encrypted;
|
||||
let p = Public::from_slice(&e[0..64]);
|
||||
let z = ecdh::agree(secret, &p)?;
|
||||
let mut key = [0u8; 32];
|
||||
kdf(&z, &[0u8; 0], &mut key);
|
||||
let ekey = &key[0..16];
|
||||
let mkey_material = &key[16..32];
|
||||
let mut hasher = Sha256::new();
|
||||
let mut mkey = [0u8; 32];
|
||||
hasher.input(mkey_material);
|
||||
hasher.result(&mut mkey);
|
||||
|
||||
let clen = encrypted.len() - meta_len;
|
||||
let cipher = &e[64..(64+clen)];
|
||||
let mut msg = vec![0u8; clen];
|
||||
let iv = H128::from_slice(&z.keccak256()[0..16]);
|
||||
aes::decrypt(ekey, &iv, cipher, &mut msg[..]);
|
||||
Ok(msg)
|
||||
}
|
||||
|
||||
fn kdf(secret: &Secret, s1: &[u8], dest: &mut [u8]) {
|
||||
let mut hasher = Sha256::new();
|
||||
// SEC/ISO/Shoup specify counter size SHOULD be equivalent
|
||||
@@ -386,15 +340,5 @@ mod tests {
|
||||
let decrypted = ecies::decrypt(kp.secret(), shared, &encrypted).unwrap();
|
||||
assert_eq!(decrypted[..message.len()], message[..]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ecies_shared_single() {
|
||||
let kp = Random.generate().unwrap();
|
||||
let message = b"So many books, so little time";
|
||||
let encrypted = ecies::encrypt_single_message(kp.public(), message).unwrap();
|
||||
assert!(encrypted[..] != message[..]);
|
||||
let decrypted = ecies::decrypt_single_message(kp.secret(), &encrypted).unwrap();
|
||||
assert_eq!(decrypted[..message.len()], message[..]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,26 +5,18 @@ authors = ["Parity Technologies <admin@parity.io>"]
|
||||
|
||||
[dependencies]
|
||||
bit-set = "0.4"
|
||||
byteorder = "1.0"
|
||||
common-types = { path = "../types" }
|
||||
ethcore-util = { path = "../../util" }
|
||||
ethcore-bigint = { path = "../../util/bigint" }
|
||||
evmjit = { path = "../../evmjit", optional = true }
|
||||
ethjson = { path = "../../json" }
|
||||
ethereum-types = "0.3"
|
||||
heapsize = "0.4"
|
||||
lazy_static = "0.2"
|
||||
lazy_static = "1.0"
|
||||
log = "0.3"
|
||||
rlp = { path = "../../util/rlp" }
|
||||
vm = { path = "../vm" }
|
||||
ethcore-logger = { path = "../../logger" }
|
||||
wasm-utils = { git = "https://github.com/paritytech/wasm-utils" }
|
||||
hash = { path = "../../util/hash" }
|
||||
parking_lot = "0.4"
|
||||
keccak-hash = { path = "../../util/hash" }
|
||||
parking_lot = "0.5"
|
||||
memory-cache = { path = "../../util/memory_cache" }
|
||||
|
||||
[dev-dependencies]
|
||||
rustc-hex = "1.0"
|
||||
|
||||
[features]
|
||||
jit = ["evmjit"]
|
||||
evm-debug = []
|
||||
evm-debug-tests = ["evm-debug"]
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
//! Evm interface.
|
||||
|
||||
use std::{ops, cmp, fmt};
|
||||
use bigint::prelude::{U128, U256, U512};
|
||||
use ethereum_types::{U128, U256, U512};
|
||||
use vm::{Ext, Result, ReturnData, GasLeft, Error};
|
||||
|
||||
/// Finalization result. Gas Left: either it is a known value, or it needs to be computed by processing
|
||||
@@ -149,7 +149,7 @@ impl CostType for usize {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use bigint::prelude::U256;
|
||||
use ethereum_types::U256;
|
||||
use super::CostType;
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
//!
|
||||
use std::sync::Arc;
|
||||
use vm::Vm;
|
||||
use bigint::prelude::U256;
|
||||
use ethereum_types::U256;
|
||||
use super::interpreter::SharedCache;
|
||||
use super::vmtype::VMType;
|
||||
|
||||
@@ -32,24 +32,7 @@ pub struct Factory {
|
||||
impl Factory {
|
||||
/// Create fresh instance of VM
|
||||
/// Might choose implementation depending on supplied gas.
|
||||
#[cfg(feature = "jit")]
|
||||
pub fn create(&self, gas: U256) -> Box<Vm> {
|
||||
match self.evm {
|
||||
VMType::Jit => {
|
||||
Box::new(super::jit::JitEvm::default())
|
||||
},
|
||||
VMType::Interpreter => if Self::can_fit_in_usize(gas) {
|
||||
Box::new(super::interpreter::Interpreter::<usize>::new(self.evm_cache.clone()))
|
||||
} else {
|
||||
Box::new(super::interpreter::Interpreter::<U256>::new(self.evm_cache.clone()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Create fresh instance of VM
|
||||
/// Might choose implementation depending on supplied gas.
|
||||
#[cfg(not(feature = "jit"))]
|
||||
pub fn create(&self, gas: U256) -> Box<Vm> {
|
||||
pub fn create(&self, gas: &U256) -> Box<Vm> {
|
||||
match self.evm {
|
||||
VMType::Interpreter => if Self::can_fit_in_usize(gas) {
|
||||
Box::new(super::interpreter::Interpreter::<usize>::new(self.evm_cache.clone()))
|
||||
@@ -68,23 +51,13 @@ impl Factory {
|
||||
}
|
||||
}
|
||||
|
||||
fn can_fit_in_usize(gas: U256) -> bool {
|
||||
gas == U256::from(gas.low_u64() as usize)
|
||||
fn can_fit_in_usize(gas: &U256) -> bool {
|
||||
gas == &U256::from(gas.low_u64() as usize)
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Factory {
|
||||
/// Returns jitvm factory
|
||||
#[cfg(all(feature = "jit", not(test)))]
|
||||
fn default() -> Factory {
|
||||
Factory {
|
||||
evm: VMType::Jit,
|
||||
evm_cache: Arc::new(SharedCache::default()),
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns native rust evm factory
|
||||
#[cfg(any(not(feature = "jit"), test))]
|
||||
fn default() -> Factory {
|
||||
Factory {
|
||||
evm: VMType::Interpreter,
|
||||
@@ -95,30 +68,13 @@ impl Default for Factory {
|
||||
|
||||
#[test]
|
||||
fn test_create_vm() {
|
||||
let _vm = Factory::default().create(U256::zero());
|
||||
let _vm = Factory::default().create(&U256::zero());
|
||||
}
|
||||
|
||||
/// Create tests by injecting different VM factories
|
||||
#[macro_export]
|
||||
macro_rules! evm_test(
|
||||
(ignorejit => $name_test: ident: $name_jit: ident, $name_int: ident) => {
|
||||
#[test]
|
||||
#[ignore]
|
||||
#[cfg(feature = "jit")]
|
||||
fn $name_jit() {
|
||||
$name_test(Factory::new(VMType::Jit, 1024 * 32));
|
||||
}
|
||||
#[test]
|
||||
fn $name_int() {
|
||||
$name_test(Factory::new(VMType::Interpreter, 1024 * 32));
|
||||
}
|
||||
};
|
||||
($name_test: ident: $name_jit: ident, $name_int: ident) => {
|
||||
#[test]
|
||||
#[cfg(feature = "jit")]
|
||||
fn $name_jit() {
|
||||
$name_test(Factory::new(VMType::Jit, 1024 * 32));
|
||||
}
|
||||
($name_test: ident: $name_int: ident) => {
|
||||
#[test]
|
||||
fn $name_int() {
|
||||
$name_test(Factory::new(VMType::Interpreter, 1024 * 32));
|
||||
@@ -129,14 +85,7 @@ macro_rules! evm_test(
|
||||
/// Create ignored tests by injecting different VM factories
|
||||
#[macro_export]
|
||||
macro_rules! evm_test_ignore(
|
||||
($name_test: ident: $name_jit: ident, $name_int: ident) => {
|
||||
#[test]
|
||||
#[ignore]
|
||||
#[cfg(feature = "jit")]
|
||||
#[cfg(feature = "ignored-tests")]
|
||||
fn $name_jit() {
|
||||
$name_test(Factory::new(VMType::Jit, 1024 * 32));
|
||||
}
|
||||
($name_test: ident: $name_int: ident) => {
|
||||
#[test]
|
||||
#[ignore]
|
||||
#[cfg(feature = "ignored-tests")]
|
||||
|
||||
@@ -81,7 +81,7 @@ fn test_get_swap_position() {
|
||||
assert_eq!(get_swap_position(SWAP10), 10);
|
||||
}
|
||||
|
||||
/// Returns number of topcis to take from stack
|
||||
/// Returns number of topics to take from stack
|
||||
/// LOG0 -> 0
|
||||
pub fn get_log_topics (i: Instruction) -> usize {
|
||||
assert!(i >= LOG0 && i <= LOG4);
|
||||
|
||||
@@ -15,8 +15,7 @@
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use std::cmp;
|
||||
use bigint::prelude::U256;
|
||||
use bigint::hash::H256;
|
||||
use ethereum_types::{U256, H256};
|
||||
use super::u256_to_address;
|
||||
|
||||
use {evm, vm};
|
||||
@@ -32,7 +31,6 @@ macro_rules! overflowing {
|
||||
}}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature="dev", allow(enum_variant_names))]
|
||||
enum Request<Cost: ::evm::CostType> {
|
||||
Gas(Cost),
|
||||
GasMem(Cost, Cost),
|
||||
@@ -101,7 +99,6 @@ impl<Gas: evm::CostType> Gasometer<Gas> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature="dev", allow(cyclomatic_complexity))]
|
||||
/// Determine how much gas is used by the given instruction, given the machine's state.
|
||||
///
|
||||
/// We guarantee that the final element of the returned tuple (`provided`) will be `Some`
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use bigint::prelude::U256;
|
||||
use ethereum_types::U256;
|
||||
use vm::ReturnData;
|
||||
|
||||
const MAX_RETURN_WASTE_BYTES: usize = 16384;
|
||||
@@ -134,7 +134,7 @@ impl Memory for Vec<u8> {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use bigint::prelude::U256;
|
||||
use ethereum_types::U256;
|
||||
use super::Memory;
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -27,8 +27,7 @@ use std::marker::PhantomData;
|
||||
use std::{cmp, mem};
|
||||
use std::sync::Arc;
|
||||
use hash::keccak;
|
||||
use bigint::prelude::{U256, U512};
|
||||
use bigint::hash::H256;
|
||||
use ethereum_types::{U256, U512, H256, Address};
|
||||
|
||||
use vm::{
|
||||
self, ActionParams, ActionValue, CallType, MessageCallResult,
|
||||
@@ -45,8 +44,6 @@ pub use self::shared_cache::SharedCache;
|
||||
|
||||
use bit_set::BitSet;
|
||||
|
||||
use util::*;
|
||||
|
||||
type ProgramCounter = usize;
|
||||
|
||||
const ONE: U256 = U256([1, 0, 0, 0]);
|
||||
@@ -66,7 +63,6 @@ struct CodeReader<'a> {
|
||||
code: &'a [u8]
|
||||
}
|
||||
|
||||
#[cfg_attr(feature="dev", allow(len_without_is_empty))]
|
||||
impl<'a> CodeReader<'a> {
|
||||
|
||||
/// Create new code reader - starting at position 0.
|
||||
@@ -136,7 +132,9 @@ impl<Cost: CostType> vm::Vm for Interpreter<Cost> {
|
||||
reader.position += 1;
|
||||
|
||||
// TODO: make compile-time removable if too much of a performance hit.
|
||||
do_trace = do_trace && ext.trace_next_instruction(reader.position - 1, instruction);
|
||||
do_trace = do_trace && ext.trace_next_instruction(
|
||||
reader.position - 1, instruction, gasometer.current_gas.as_u256(),
|
||||
);
|
||||
|
||||
let info = &infos[instruction as usize];
|
||||
self.verify_instruction(ext, instruction, info, &stack)?;
|
||||
@@ -287,7 +285,6 @@ impl<Cost: CostType> Interpreter<Cost> {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature="dev", allow(too_many_arguments))]
|
||||
fn exec_instruction(
|
||||
&mut self,
|
||||
gas: Cost,
|
||||
@@ -916,8 +913,13 @@ mod tests {
|
||||
use rustc_hex::FromHex;
|
||||
use vmtype::VMType;
|
||||
use factory::Factory;
|
||||
use vm::{ActionParams, ActionValue};
|
||||
use vm::{Vm, ActionParams, ActionValue};
|
||||
use vm::tests::{FakeExt, test_finalize};
|
||||
use ethereum_types::U256;
|
||||
|
||||
fn interpreter(gas: &U256) -> Box<Vm> {
|
||||
Factory::new(VMType::Interpreter, 1).create(gas)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_not_fail_on_tracing_mem() {
|
||||
@@ -934,7 +936,7 @@ mod tests {
|
||||
ext.tracing = true;
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = Factory::new(VMType::Interpreter, 1).create(params.gas);
|
||||
let mut vm = interpreter(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -956,7 +958,7 @@ mod tests {
|
||||
ext.tracing = true;
|
||||
|
||||
let err = {
|
||||
let mut vm = Factory::new(VMType::Interpreter, 1).create(params.gas);
|
||||
let mut vm = interpreter(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).err().unwrap()
|
||||
};
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
use std::sync::Arc;
|
||||
use hash::KECCAK_EMPTY;
|
||||
use heapsize::HeapSizeOf;
|
||||
use bigint::hash::H256;
|
||||
use ethereum_types::H256;
|
||||
use parking_lot::Mutex;
|
||||
use util::cache::MemoryLruCache;
|
||||
use memory_cache::MemoryLruCache;
|
||||
use bit_set::BitSet;
|
||||
use super::super::instructions;
|
||||
|
||||
|
||||
@@ -1,414 +0,0 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! Just in time compiler execution environment.
|
||||
use bigint::prelude::U256;
|
||||
use bigint::hash::H256;
|
||||
use util::*;
|
||||
use evmjit;
|
||||
use evm::{self, GasLeft};
|
||||
use evm::CallType;
|
||||
use vm::{self, Vm};
|
||||
|
||||
/// Should be used to convert jit types to ethcore
|
||||
trait FromJit<T>: Sized {
|
||||
fn from_jit(input: T) -> Self;
|
||||
}
|
||||
|
||||
/// Should be used to covert ethcore types to jit
|
||||
trait IntoJit<T> {
|
||||
fn into_jit(self) -> T;
|
||||
}
|
||||
|
||||
impl<'a> FromJit<&'a evmjit::I256> for U256 {
|
||||
fn from_jit(input: &'a evmjit::I256) -> Self {
|
||||
unsafe {
|
||||
let mut res: U256 = mem::uninitialized();
|
||||
ptr::copy(input.words.as_ptr(), res.0.as_mut_ptr(), 4);
|
||||
res
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromJit<&'a evmjit::I256> for H256 {
|
||||
fn from_jit(input: &'a evmjit::I256) -> Self {
|
||||
let u = U256::from_jit(input);
|
||||
H256::from(&u)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromJit<&'a evmjit::I256> for Address {
|
||||
fn from_jit(input: &'a evmjit::I256) -> Self {
|
||||
Address::from(H256::from_jit(input))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromJit<&'a evmjit::H256> for H256 {
|
||||
fn from_jit(input: &'a evmjit::H256) -> Self {
|
||||
H256::from_jit(&evmjit::I256::from(input.clone()))
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> FromJit<&'a evmjit::H256> for Address {
|
||||
fn from_jit(input: &'a evmjit::H256) -> Self {
|
||||
Address::from(H256::from_jit(input))
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoJit<evmjit::I256> for U256 {
|
||||
fn into_jit(self) -> evmjit::I256 {
|
||||
unsafe {
|
||||
let mut res: evmjit::I256 = mem::uninitialized();
|
||||
ptr::copy(self.0.as_ptr(), res.words.as_mut_ptr(), 4);
|
||||
res
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoJit<evmjit::I256> for H256 {
|
||||
fn into_jit(self) -> evmjit::I256 {
|
||||
let mut ret = [0; 4];
|
||||
let len = self.len();
|
||||
for i in 0..len {
|
||||
let rev = len - 1 - i;
|
||||
let pos = rev / 8;
|
||||
ret[pos] += (self[i] as u64) << ((rev % 8) * 8);
|
||||
}
|
||||
evmjit::I256 { words: ret }
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoJit<evmjit::H256> for H256 {
|
||||
fn into_jit(self) -> evmjit::H256 {
|
||||
let i: evmjit::I256 = self.into_jit();
|
||||
From::from(i)
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoJit<evmjit::I256> for Address {
|
||||
fn into_jit(self) -> evmjit::I256 {
|
||||
H256::from(self).into_jit()
|
||||
}
|
||||
}
|
||||
|
||||
impl IntoJit<evmjit::H256> for Address {
|
||||
fn into_jit(self) -> evmjit::H256 {
|
||||
H256::from(self).into_jit()
|
||||
}
|
||||
}
|
||||
|
||||
/// Externalities adapter. Maps callbacks from evmjit to externalities trait.
|
||||
///
|
||||
/// Evmjit doesn't have to know about children execution failures.
|
||||
/// This adapter 'catches' them and moves upstream.
|
||||
struct ExtAdapter<'a> {
|
||||
ext: &'a mut evm::Ext,
|
||||
address: Address
|
||||
}
|
||||
|
||||
impl<'a> ExtAdapter<'a> {
|
||||
fn new(ext: &'a mut evm::Ext, address: Address) -> Self {
|
||||
ExtAdapter {
|
||||
ext: ext,
|
||||
address: address
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> evmjit::Ext for ExtAdapter<'a> {
|
||||
fn sload(&self, key: *const evmjit::I256, out_value: *mut evmjit::I256) {
|
||||
unsafe {
|
||||
let i = H256::from_jit(&*key);
|
||||
let o = self.ext.storage_at(&i);
|
||||
*out_value = o.into_jit();
|
||||
}
|
||||
}
|
||||
|
||||
fn sstore(&mut self, key: *const evmjit::I256, value: *const evmjit::I256) {
|
||||
let key = unsafe { H256::from_jit(&*key) };
|
||||
let value = unsafe { H256::from_jit(&*value) };
|
||||
let old_value = self.ext.storage_at(&key);
|
||||
// if SSTORE nonzero -> zero, increment refund count
|
||||
if !old_value.is_zero() && value.is_zero() {
|
||||
self.ext.inc_sstore_clears();
|
||||
}
|
||||
self.ext.set_storage(key, value);
|
||||
}
|
||||
|
||||
fn balance(&self, address: *const evmjit::H256, out_value: *mut evmjit::I256) {
|
||||
unsafe {
|
||||
let a = Address::from_jit(&*address);
|
||||
let o = self.ext.balance(&a);
|
||||
*out_value = o.into_jit();
|
||||
}
|
||||
}
|
||||
|
||||
fn blockhash(&self, number: *const evmjit::I256, out_hash: *mut evmjit::H256) {
|
||||
unsafe {
|
||||
let n = U256::from_jit(&*number);
|
||||
let o = self.ext.blockhash(&n);
|
||||
*out_hash = o.into_jit();
|
||||
}
|
||||
}
|
||||
|
||||
fn create(&mut self,
|
||||
io_gas: *mut u64,
|
||||
value: *const evmjit::I256,
|
||||
init_beg: *const u8,
|
||||
init_size: u64,
|
||||
address: *mut evmjit::H256) {
|
||||
|
||||
let gas = unsafe { U256::from(*io_gas) };
|
||||
let value = unsafe { U256::from_jit(&*value) };
|
||||
let code = unsafe { slice::from_raw_parts(init_beg, init_size as usize) };
|
||||
|
||||
// check if balance is sufficient and we are not too deep
|
||||
if self.ext.balance(&self.address) >= value && self.ext.depth() < self.ext.schedule().max_depth {
|
||||
match self.ext.create(&gas, &value, code) {
|
||||
evm::ContractCreateResult::Created(new_address, gas_left) => unsafe {
|
||||
*address = new_address.into_jit();
|
||||
*io_gas = gas_left.low_u64();
|
||||
},
|
||||
evm::ContractCreateResult::Failed => unsafe {
|
||||
*address = Address::new().into_jit();
|
||||
*io_gas = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
unsafe { *address = Address::new().into_jit(); }
|
||||
}
|
||||
}
|
||||
|
||||
fn call(&mut self,
|
||||
io_gas: *mut u64,
|
||||
call_gas: u64,
|
||||
sender_address: *const evmjit::H256,
|
||||
receive_address: *const evmjit::H256,
|
||||
code_address: *const evmjit::H256,
|
||||
transfer_value: *const evmjit::I256,
|
||||
// We are ignoring apparent value - it's handled in externalities.
|
||||
_apparent_value: *const evmjit::I256,
|
||||
in_beg: *const u8,
|
||||
in_size: u64,
|
||||
out_beg: *mut u8,
|
||||
out_size: u64) -> bool {
|
||||
|
||||
let mut gas = unsafe { U256::from(*io_gas) };
|
||||
let mut call_gas = U256::from(call_gas);
|
||||
let mut gas_cost = call_gas;
|
||||
let sender_address = unsafe { Address::from_jit(&*sender_address) };
|
||||
let receive_address = unsafe { Address::from_jit(&*receive_address) };
|
||||
let code_address = unsafe { Address::from_jit(&*code_address) };
|
||||
let transfer_value = unsafe { U256::from_jit(&*transfer_value) };
|
||||
|
||||
// receive address and code address are the same in normal calls
|
||||
let is_callcode = receive_address != code_address;
|
||||
let is_delegatecall = is_callcode && sender_address != receive_address;
|
||||
|
||||
let value = if is_delegatecall { None } else { Some(transfer_value) };
|
||||
|
||||
if !is_callcode && !self.ext.exists(&code_address) {
|
||||
gas_cost = gas_cost + U256::from(self.ext.schedule().call_new_account_gas);
|
||||
}
|
||||
|
||||
if transfer_value > U256::zero() {
|
||||
assert!(self.ext.schedule().call_value_transfer_gas > self.ext.schedule().call_stipend, "overflow possible");
|
||||
gas_cost = gas_cost + U256::from(self.ext.schedule().call_value_transfer_gas);
|
||||
call_gas = call_gas + U256::from(self.ext.schedule().call_stipend);
|
||||
}
|
||||
|
||||
if gas_cost > gas {
|
||||
unsafe {
|
||||
*io_gas = -1i64 as u64;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
gas = gas - gas_cost;
|
||||
|
||||
// check if balance is sufficient and we are not too deep
|
||||
if self.ext.balance(&self.address) < transfer_value || self.ext.depth() >= self.ext.schedule().max_depth {
|
||||
unsafe {
|
||||
*io_gas = (gas + call_gas).low_u64();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
let call_type = match (is_callcode, is_delegatecall) {
|
||||
(_, true) => CallType::DelegateCall,
|
||||
(true, false) => CallType::CallCode,
|
||||
(false, false) => CallType::Call,
|
||||
};
|
||||
|
||||
match self.ext.call(
|
||||
&call_gas,
|
||||
&sender_address,
|
||||
&receive_address,
|
||||
value,
|
||||
unsafe { slice::from_raw_parts(in_beg, in_size as usize) },
|
||||
&code_address,
|
||||
unsafe { slice::from_raw_parts_mut(out_beg, out_size as usize) },
|
||||
call_type,
|
||||
) {
|
||||
evm::MessageCallResult::Success(gas_left) => unsafe {
|
||||
*io_gas = (gas + gas_left).low_u64();
|
||||
true
|
||||
},
|
||||
evm::MessageCallResult::Failed => unsafe {
|
||||
*io_gas = gas.low_u64();
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn log(&mut self,
|
||||
beg: *const u8,
|
||||
size: u64,
|
||||
topic1: *const evmjit::H256,
|
||||
topic2: *const evmjit::H256,
|
||||
topic3: *const evmjit::H256,
|
||||
topic4: *const evmjit::H256) {
|
||||
|
||||
unsafe {
|
||||
let mut topics = vec![];
|
||||
if !topic1.is_null() {
|
||||
topics.push(H256::from_jit(&*topic1));
|
||||
}
|
||||
|
||||
if !topic2.is_null() {
|
||||
topics.push(H256::from_jit(&*topic2));
|
||||
}
|
||||
|
||||
if !topic3.is_null() {
|
||||
topics.push(H256::from_jit(&*topic3));
|
||||
}
|
||||
|
||||
if !topic4.is_null() {
|
||||
topics.push(H256::from_jit(&*topic4));
|
||||
}
|
||||
|
||||
let bytes_ref: &[u8] = slice::from_raw_parts(beg, size as usize);
|
||||
self.ext.log(topics, bytes_ref);
|
||||
}
|
||||
}
|
||||
|
||||
fn extcode(&self, address: *const evmjit::H256, size: *mut u64) -> *const u8 {
|
||||
unsafe {
|
||||
let code = self.ext.extcode(&Address::from_jit(&*address));
|
||||
*size = code.len() as u64;
|
||||
let ptr = code.as_ptr();
|
||||
mem::forget(code);
|
||||
ptr
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct JitEvm {
|
||||
context: Option<evmjit::ContextHandle>,
|
||||
}
|
||||
|
||||
impl vm::Vm for JitEvm {
|
||||
fn exec(&mut self, params: ActionParams, ext: &mut evm::Ext) -> evm::Result<GasLeft> {
|
||||
// Dirty hack. This is unsafe, but we interact with ffi, so it's justified.
|
||||
let ext_adapter: ExtAdapter<'static> = unsafe { ::std::mem::transmute(ExtAdapter::new(ext, params.address.clone())) };
|
||||
let mut ext_handle = evmjit::ExtHandle::new(ext_adapter);
|
||||
assert!(params.gas <= U256::from(i64::max_value() as u64), "evmjit max gas is 2 ^ 63");
|
||||
assert!(params.gas_price <= U256::from(i64::max_value() as u64), "evmjit max gas is 2 ^ 63");
|
||||
|
||||
let call_data = params.data.unwrap_or_else(Vec::new);
|
||||
let code = params.code.unwrap_or_else(Vec::new);
|
||||
|
||||
let mut data = evmjit::RuntimeDataHandle::new();
|
||||
data.gas = params.gas.low_u64() as i64;
|
||||
data.gas_price = params.gas_price.low_u64() as i64;
|
||||
data.call_data = call_data.as_ptr();
|
||||
data.call_data_size = call_data.len() as u64;
|
||||
mem::forget(call_data);
|
||||
data.code = code.as_ptr();
|
||||
data.code_size = code.len() as u64;
|
||||
data.code_hash = code.sha3().into_jit();
|
||||
mem::forget(code);
|
||||
data.address = params.address.into_jit();
|
||||
data.caller = params.sender.into_jit();
|
||||
data.origin = params.origin.into_jit();
|
||||
data.transfer_value = match params.value {
|
||||
ActionValue::Transfer(val) => val.into_jit(),
|
||||
ActionValue::Apparent(val) => val.into_jit()
|
||||
};
|
||||
data.apparent_value = data.transfer_value;
|
||||
|
||||
let mut schedule = evmjit::ScheduleHandle::new();
|
||||
schedule.have_delegate_call = ext.schedule().have_delegate_call;
|
||||
|
||||
data.author = ext.env_info().author.clone().into_jit();
|
||||
data.difficulty = ext.env_info().difficulty.into_jit();
|
||||
data.gas_limit = ext.env_info().gas_limit.into_jit();
|
||||
data.number = ext.env_info().number;
|
||||
// don't really know why jit timestamp is int..
|
||||
data.timestamp = ext.env_info().timestamp as i64;
|
||||
|
||||
self.context = Some(unsafe { evmjit::ContextHandle::new(data, schedule, &mut ext_handle) });
|
||||
let mut context = self.context.as_mut().expect("context handle set on the prior line; qed");
|
||||
let res = context.exec();
|
||||
|
||||
match res {
|
||||
evmjit::ReturnCode::Stop => Ok(GasLeft::Known(U256::from(context.gas_left()))),
|
||||
evmjit::ReturnCode::Return =>
|
||||
Ok(GasLeft::NeedsReturn(U256::from(context.gas_left()), context.output_data())),
|
||||
evmjit::ReturnCode::Suicide => {
|
||||
ext.suicide(&Address::from_jit(&context.suicide_refund_address()));
|
||||
Ok(GasLeft::Known(U256::from(context.gas_left())))
|
||||
},
|
||||
evmjit::ReturnCode::OutOfGas => Err(vm::Error::OutOfGas),
|
||||
_err => Err(vm::Error::Internal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_to_and_from_u256() {
|
||||
let u = U256::from_str("d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3").unwrap();
|
||||
let j = u.into_jit();
|
||||
let u2 = U256::from_jit(&j);
|
||||
assert_eq!(u, u2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_to_and_from_h256() {
|
||||
let h = H256::from_str("d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3").unwrap();
|
||||
let j: ::evmjit::I256 = h.clone().into_jit();
|
||||
let h2 = H256::from_jit(&j);
|
||||
|
||||
assert_eq!(h, h2);
|
||||
|
||||
let j: ::evmjit::H256 = h.clone().into_jit();
|
||||
let h2 = H256::from_jit(&j);
|
||||
assert_eq!(h, h2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_to_and_from_address() {
|
||||
let a = Address::from_str("2adc25665018aa1fe0e6bc666dac8fc2697ff9ba").unwrap();
|
||||
let j: ::evmjit::I256 = a.clone().into_jit();
|
||||
let a2 = Address::from_jit(&j);
|
||||
|
||||
assert_eq!(a, a2);
|
||||
|
||||
let j: ::evmjit::H256 = a.clone().into_jit();
|
||||
let a2 = Address::from_jit(&j);
|
||||
assert_eq!(a, a2);
|
||||
}
|
||||
@@ -16,19 +16,13 @@
|
||||
|
||||
//! Ethereum virtual machine.
|
||||
|
||||
extern crate byteorder;
|
||||
extern crate bit_set;
|
||||
extern crate common_types as types;
|
||||
extern crate ethcore_util as util;
|
||||
extern crate ethcore_bigint as bigint;
|
||||
extern crate ethjson;
|
||||
extern crate rlp;
|
||||
extern crate ethereum_types;
|
||||
extern crate parking_lot;
|
||||
extern crate wasm_utils;
|
||||
extern crate ethcore_logger;
|
||||
extern crate heapsize;
|
||||
extern crate vm;
|
||||
extern crate hash;
|
||||
extern crate keccak_hash as hash;
|
||||
extern crate memory_cache;
|
||||
|
||||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
@@ -36,9 +30,6 @@ extern crate lazy_static;
|
||||
#[cfg_attr(feature = "evm-debug", macro_use)]
|
||||
extern crate log;
|
||||
|
||||
#[cfg(feature = "jit")]
|
||||
extern crate evmjit;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate rustc_hex;
|
||||
|
||||
@@ -50,9 +41,6 @@ pub mod factory;
|
||||
mod vmtype;
|
||||
mod instructions;
|
||||
|
||||
#[cfg(feature = "jit" )]
|
||||
mod jit;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
#[cfg(all(feature="benches", test))]
|
||||
|
||||
@@ -20,17 +20,15 @@ use std::hash::Hash;
|
||||
use std::sync::Arc;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use rustc_hex::FromHex;
|
||||
use bigint::prelude::U256;
|
||||
use bigint::hash::H256;
|
||||
use util::*;
|
||||
use ethereum_types::{U256, H256, Address};
|
||||
use vm::{self, ActionParams, ActionValue};
|
||||
use vm::tests::{FakeExt, FakeCall, FakeCallType, test_finalize};
|
||||
use factory::Factory;
|
||||
use vmtype::VMType;
|
||||
|
||||
evm_test!{test_add: test_add_jit, test_add_int}
|
||||
evm_test!{test_add: test_add_int}
|
||||
fn test_add(factory: super::Factory) {
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let code = "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600055".from_hex().unwrap();
|
||||
|
||||
let mut params = ActionParams::default();
|
||||
@@ -40,7 +38,7 @@ fn test_add(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -48,7 +46,7 @@ fn test_add(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe");
|
||||
}
|
||||
|
||||
evm_test!{test_sha3: test_sha3_jit, test_sha3_int}
|
||||
evm_test!{test_sha3: test_sha3_int}
|
||||
fn test_sha3(factory: super::Factory) {
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let code = "6000600020600055".from_hex().unwrap();
|
||||
@@ -60,7 +58,7 @@ fn test_sha3(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -68,7 +66,7 @@ fn test_sha3(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470");
|
||||
}
|
||||
|
||||
evm_test!{test_address: test_address_jit, test_address_int}
|
||||
evm_test!{test_address: test_address_int}
|
||||
fn test_address(factory: super::Factory) {
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let code = "30600055".from_hex().unwrap();
|
||||
@@ -80,7 +78,7 @@ fn test_address(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -88,7 +86,7 @@ fn test_address(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6");
|
||||
}
|
||||
|
||||
evm_test!{test_origin: test_origin_jit, test_origin_int}
|
||||
evm_test!{test_origin: test_origin_int}
|
||||
fn test_origin(factory: super::Factory) {
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let origin = Address::from_str("cd1722f2947def4cf144679da39c4c32bdc35681").unwrap();
|
||||
@@ -102,7 +100,7 @@ fn test_origin(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -110,7 +108,7 @@ fn test_origin(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "000000000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681");
|
||||
}
|
||||
|
||||
evm_test!{test_sender: test_sender_jit, test_sender_int}
|
||||
evm_test!{test_sender: test_sender_int}
|
||||
fn test_sender(factory: super::Factory) {
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let sender = Address::from_str("cd1722f2947def4cf144679da39c4c32bdc35681").unwrap();
|
||||
@@ -124,7 +122,7 @@ fn test_sender(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -132,7 +130,7 @@ fn test_sender(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "000000000000000000000000cd1722f2947def4cf144679da39c4c32bdc35681");
|
||||
}
|
||||
|
||||
evm_test!{test_extcodecopy: test_extcodecopy_jit, test_extcodecopy_int}
|
||||
evm_test!{test_extcodecopy: test_extcodecopy_int}
|
||||
fn test_extcodecopy(factory: super::Factory) {
|
||||
// 33 - sender
|
||||
// 3b - extcodesize
|
||||
@@ -159,7 +157,7 @@ fn test_extcodecopy(factory: super::Factory) {
|
||||
ext.codes.insert(sender, Arc::new(sender_code));
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -167,7 +165,7 @@ fn test_extcodecopy(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "6005600055000000000000000000000000000000000000000000000000000000");
|
||||
}
|
||||
|
||||
evm_test!{test_log_empty: test_log_empty_jit, test_log_empty_int}
|
||||
evm_test!{test_log_empty: test_log_empty_int}
|
||||
fn test_log_empty(factory: super::Factory) {
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let code = "60006000a0".from_hex().unwrap();
|
||||
@@ -179,7 +177,7 @@ fn test_log_empty(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -189,7 +187,7 @@ fn test_log_empty(factory: super::Factory) {
|
||||
assert!(ext.logs[0].data.is_empty());
|
||||
}
|
||||
|
||||
evm_test!{test_log_sender: test_log_sender_jit, test_log_sender_int}
|
||||
evm_test!{test_log_sender: test_log_sender_int}
|
||||
fn test_log_sender(factory: super::Factory) {
|
||||
// 60 ff - push ff
|
||||
// 60 00 - push 00
|
||||
@@ -211,7 +209,7 @@ fn test_log_sender(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -222,7 +220,7 @@ fn test_log_sender(factory: super::Factory) {
|
||||
assert_eq!(ext.logs[0].data, "ff00000000000000000000000000000000000000000000000000000000000000".from_hex().unwrap());
|
||||
}
|
||||
|
||||
evm_test!{test_blockhash: test_blockhash_jit, test_blockhash_int}
|
||||
evm_test!{test_blockhash: test_blockhash_int}
|
||||
fn test_blockhash(factory: super::Factory) {
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let code = "600040600055".from_hex().unwrap();
|
||||
@@ -236,7 +234,7 @@ fn test_blockhash(factory: super::Factory) {
|
||||
ext.blockhashes.insert(U256::zero(), blockhash.clone());
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -244,7 +242,7 @@ fn test_blockhash(factory: super::Factory) {
|
||||
assert_eq!(ext.store.get(&H256::new()).unwrap(), &blockhash);
|
||||
}
|
||||
|
||||
evm_test!{test_calldataload: test_calldataload_jit, test_calldataload_int}
|
||||
evm_test!{test_calldataload: test_calldataload_int}
|
||||
fn test_calldataload(factory: super::Factory) {
|
||||
let address = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let code = "600135600055".from_hex().unwrap();
|
||||
@@ -258,7 +256,7 @@ fn test_calldataload(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -267,7 +265,7 @@ fn test_calldataload(factory: super::Factory) {
|
||||
|
||||
}
|
||||
|
||||
evm_test!{test_author: test_author_jit, test_author_int}
|
||||
evm_test!{test_author: test_author_int}
|
||||
fn test_author(factory: super::Factory) {
|
||||
let author = Address::from_str("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6").unwrap();
|
||||
let code = "41600055".from_hex().unwrap();
|
||||
@@ -279,7 +277,7 @@ fn test_author(factory: super::Factory) {
|
||||
ext.info.author = author;
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -287,7 +285,7 @@ fn test_author(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "0000000000000000000000000f572e5295c57f15886f9b263e2f6d2d6c7b5ec6");
|
||||
}
|
||||
|
||||
evm_test!{test_timestamp: test_timestamp_jit, test_timestamp_int}
|
||||
evm_test!{test_timestamp: test_timestamp_int}
|
||||
fn test_timestamp(factory: super::Factory) {
|
||||
let timestamp = 0x1234;
|
||||
let code = "42600055".from_hex().unwrap();
|
||||
@@ -299,7 +297,7 @@ fn test_timestamp(factory: super::Factory) {
|
||||
ext.info.timestamp = timestamp;
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -307,7 +305,7 @@ fn test_timestamp(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "0000000000000000000000000000000000000000000000000000000000001234");
|
||||
}
|
||||
|
||||
evm_test!{test_number: test_number_jit, test_number_int}
|
||||
evm_test!{test_number: test_number_int}
|
||||
fn test_number(factory: super::Factory) {
|
||||
let number = 0x1234;
|
||||
let code = "43600055".from_hex().unwrap();
|
||||
@@ -319,7 +317,7 @@ fn test_number(factory: super::Factory) {
|
||||
ext.info.number = number;
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -327,7 +325,7 @@ fn test_number(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "0000000000000000000000000000000000000000000000000000000000001234");
|
||||
}
|
||||
|
||||
evm_test!{test_difficulty: test_difficulty_jit, test_difficulty_int}
|
||||
evm_test!{test_difficulty: test_difficulty_int}
|
||||
fn test_difficulty(factory: super::Factory) {
|
||||
let difficulty = U256::from(0x1234);
|
||||
let code = "44600055".from_hex().unwrap();
|
||||
@@ -339,7 +337,7 @@ fn test_difficulty(factory: super::Factory) {
|
||||
ext.info.difficulty = difficulty;
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -347,7 +345,7 @@ fn test_difficulty(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "0000000000000000000000000000000000000000000000000000000000001234");
|
||||
}
|
||||
|
||||
evm_test!{test_gas_limit: test_gas_limit_jit, test_gas_limit_int}
|
||||
evm_test!{test_gas_limit: test_gas_limit_int}
|
||||
fn test_gas_limit(factory: super::Factory) {
|
||||
let gas_limit = U256::from(0x1234);
|
||||
let code = "45600055".from_hex().unwrap();
|
||||
@@ -359,7 +357,7 @@ fn test_gas_limit(factory: super::Factory) {
|
||||
ext.info.gas_limit = gas_limit;
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -367,7 +365,7 @@ fn test_gas_limit(factory: super::Factory) {
|
||||
assert_store(&ext, 0, "0000000000000000000000000000000000000000000000000000000000001234");
|
||||
}
|
||||
|
||||
evm_test!{test_mul: test_mul_jit, test_mul_int}
|
||||
evm_test!{test_mul: test_mul_int}
|
||||
fn test_mul(factory: super::Factory) {
|
||||
let code = "65012365124623626543219002600055".from_hex().unwrap();
|
||||
|
||||
@@ -377,7 +375,7 @@ fn test_mul(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -385,7 +383,7 @@ fn test_mul(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(79_983));
|
||||
}
|
||||
|
||||
evm_test!{test_sub: test_sub_jit, test_sub_int}
|
||||
evm_test!{test_sub: test_sub_int}
|
||||
fn test_sub(factory: super::Factory) {
|
||||
let code = "65012365124623626543219003600055".from_hex().unwrap();
|
||||
|
||||
@@ -395,7 +393,7 @@ fn test_sub(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -403,7 +401,7 @@ fn test_sub(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(79_985));
|
||||
}
|
||||
|
||||
evm_test!{test_div: test_div_jit, test_div_int}
|
||||
evm_test!{test_div: test_div_int}
|
||||
fn test_div(factory: super::Factory) {
|
||||
let code = "65012365124623626543219004600055".from_hex().unwrap();
|
||||
|
||||
@@ -413,7 +411,7 @@ fn test_div(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -421,7 +419,7 @@ fn test_div(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(79_983));
|
||||
}
|
||||
|
||||
evm_test!{test_div_zero: test_div_zero_jit, test_div_zero_int}
|
||||
evm_test!{test_div_zero: test_div_zero_int}
|
||||
fn test_div_zero(factory: super::Factory) {
|
||||
let code = "6501236512462360009004600055".from_hex().unwrap();
|
||||
|
||||
@@ -431,7 +429,7 @@ fn test_div_zero(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -439,7 +437,7 @@ fn test_div_zero(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(94_983));
|
||||
}
|
||||
|
||||
evm_test!{test_mod: test_mod_jit, test_mod_int}
|
||||
evm_test!{test_mod: test_mod_int}
|
||||
fn test_mod(factory: super::Factory) {
|
||||
let code = "650123651246236265432290066000556501236512462360009006600155".from_hex().unwrap();
|
||||
|
||||
@@ -449,7 +447,7 @@ fn test_mod(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -458,7 +456,7 @@ fn test_mod(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(74_966));
|
||||
}
|
||||
|
||||
evm_test!{test_smod: test_smod_jit, test_smod_int}
|
||||
evm_test!{test_smod: test_smod_int}
|
||||
fn test_smod(factory: super::Factory) {
|
||||
let code = "650123651246236265432290076000556501236512462360009007600155".from_hex().unwrap();
|
||||
|
||||
@@ -468,7 +466,7 @@ fn test_smod(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -477,7 +475,7 @@ fn test_smod(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(74_966));
|
||||
}
|
||||
|
||||
evm_test!{test_sdiv: test_sdiv_jit, test_sdiv_int}
|
||||
evm_test!{test_sdiv: test_sdiv_int}
|
||||
fn test_sdiv(factory: super::Factory) {
|
||||
let code = "650123651246236265432290056000556501236512462360009005600155".from_hex().unwrap();
|
||||
|
||||
@@ -487,7 +485,7 @@ fn test_sdiv(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -496,7 +494,7 @@ fn test_sdiv(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(74_966));
|
||||
}
|
||||
|
||||
evm_test!{test_exp: test_exp_jit, test_exp_int}
|
||||
evm_test!{test_exp: test_exp_int}
|
||||
fn test_exp(factory: super::Factory) {
|
||||
let code = "6016650123651246230a6000556001650123651246230a6001556000650123651246230a600255".from_hex().unwrap();
|
||||
|
||||
@@ -506,7 +504,7 @@ fn test_exp(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -516,7 +514,7 @@ fn test_exp(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(39_923));
|
||||
}
|
||||
|
||||
evm_test!{test_comparison: test_comparison_jit, test_comparison_int}
|
||||
evm_test!{test_comparison: test_comparison_int}
|
||||
fn test_comparison(factory: super::Factory) {
|
||||
let code = "601665012365124623818181811060005511600155146002556415235412358014600355".from_hex().unwrap();
|
||||
|
||||
@@ -526,7 +524,7 @@ fn test_comparison(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -537,7 +535,7 @@ fn test_comparison(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(49_952));
|
||||
}
|
||||
|
||||
evm_test!{test_signed_comparison: test_signed_comparison_jit, test_signed_comparison_int}
|
||||
evm_test!{test_signed_comparison: test_signed_comparison_int}
|
||||
fn test_signed_comparison(factory: super::Factory) {
|
||||
let code = "60106000036010818112600055136001556010601060000381811260025513600355".from_hex().unwrap();
|
||||
|
||||
@@ -547,7 +545,7 @@ fn test_signed_comparison(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -558,7 +556,7 @@ fn test_signed_comparison(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(49_940));
|
||||
}
|
||||
|
||||
evm_test!{test_bitops: test_bitops_jit, test_bitops_int}
|
||||
evm_test!{test_bitops: test_bitops_int}
|
||||
fn test_bitops(factory: super::Factory) {
|
||||
let code = "60ff610ff08181818116600055176001551860025560008015600355198015600455600555".from_hex().unwrap();
|
||||
|
||||
@@ -568,7 +566,7 @@ fn test_bitops(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -581,7 +579,7 @@ fn test_bitops(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(44_937));
|
||||
}
|
||||
|
||||
evm_test!{test_addmod_mulmod: test_addmod_mulmod_jit, test_addmod_mulmod_int}
|
||||
evm_test!{test_addmod_mulmod: test_addmod_mulmod_int}
|
||||
fn test_addmod_mulmod(factory: super::Factory) {
|
||||
let code = "60ff60f060108282820860005509600155600060f0601082828208196002550919600355".from_hex().unwrap();
|
||||
|
||||
@@ -591,7 +589,7 @@ fn test_addmod_mulmod(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -602,7 +600,7 @@ fn test_addmod_mulmod(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(19_914));
|
||||
}
|
||||
|
||||
evm_test!{test_byte: test_byte_jit, test_byte_int}
|
||||
evm_test!{test_byte: test_byte_int}
|
||||
fn test_byte(factory: super::Factory) {
|
||||
let code = "60f061ffff1a600055610fff601f1a600155".from_hex().unwrap();
|
||||
|
||||
@@ -612,7 +610,7 @@ fn test_byte(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -621,7 +619,7 @@ fn test_byte(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(74_976));
|
||||
}
|
||||
|
||||
evm_test!{test_signextend: test_signextend_jit, test_signextend_int}
|
||||
evm_test!{test_signextend: test_signextend_int}
|
||||
fn test_signextend(factory: super::Factory) {
|
||||
let code = "610fff60020b60005560ff60200b600155".from_hex().unwrap();
|
||||
|
||||
@@ -631,7 +629,7 @@ fn test_signextend(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -651,7 +649,7 @@ fn test_badinstruction_int() {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let err = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap_err()
|
||||
};
|
||||
|
||||
@@ -661,7 +659,7 @@ fn test_badinstruction_int() {
|
||||
}
|
||||
}
|
||||
|
||||
evm_test!{test_pop: test_pop_jit, test_pop_int}
|
||||
evm_test!{test_pop: test_pop_int}
|
||||
fn test_pop(factory: super::Factory) {
|
||||
let code = "60f060aa50600055".from_hex().unwrap();
|
||||
|
||||
@@ -671,7 +669,7 @@ fn test_pop(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -679,7 +677,7 @@ fn test_pop(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(79_989));
|
||||
}
|
||||
|
||||
evm_test!{test_extops: test_extops_jit, test_extops_int}
|
||||
evm_test!{test_extops: test_extops_int}
|
||||
fn test_extops(factory: super::Factory) {
|
||||
let code = "5a6001555836553a600255386003553460045560016001526016590454600555".from_hex().unwrap();
|
||||
|
||||
@@ -691,7 +689,7 @@ fn test_extops(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -704,7 +702,7 @@ fn test_extops(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(29_898));
|
||||
}
|
||||
|
||||
evm_test!{test_jumps: test_jumps_jit, test_jumps_int}
|
||||
evm_test!{test_jumps: test_jumps_int}
|
||||
fn test_jumps(factory: super::Factory) {
|
||||
let code = "600160015560066000555b60016000540380806000551560245760015402600155600a565b".from_hex().unwrap();
|
||||
|
||||
@@ -714,7 +712,7 @@ fn test_jumps(factory: super::Factory) {
|
||||
let mut ext = FakeExt::new();
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -724,7 +722,7 @@ fn test_jumps(factory: super::Factory) {
|
||||
assert_eq!(gas_left, U256::from(54_117));
|
||||
}
|
||||
|
||||
evm_test!{test_calls: test_calls_jit, test_calls_int}
|
||||
evm_test!{test_calls: test_calls_int}
|
||||
fn test_calls(factory: super::Factory) {
|
||||
let code = "600054602d57600160005560006000600060006050610998610100f160006000600060006050610998610100f25b".from_hex().unwrap();
|
||||
|
||||
@@ -742,7 +740,7 @@ fn test_calls(factory: super::Factory) {
|
||||
};
|
||||
|
||||
let gas_left = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap()
|
||||
};
|
||||
|
||||
@@ -768,7 +766,7 @@ fn test_calls(factory: super::Factory) {
|
||||
assert_eq!(ext.calls.len(), 2);
|
||||
}
|
||||
|
||||
evm_test!{test_create_in_staticcall: test_create_in_staticcall_jit, test_create_in_staticcall_int}
|
||||
evm_test!{test_create_in_staticcall: test_create_in_staticcall_int}
|
||||
fn test_create_in_staticcall(factory: super::Factory) {
|
||||
let code = "600060006064f000".from_hex().unwrap();
|
||||
|
||||
@@ -781,7 +779,7 @@ fn test_create_in_staticcall(factory: super::Factory) {
|
||||
ext.is_static = true;
|
||||
|
||||
let err = {
|
||||
let mut vm = factory.create(params.gas);
|
||||
let mut vm = factory.create(¶ms.gas);
|
||||
test_finalize(vm.exec(params, &mut ext)).unwrap_err()
|
||||
};
|
||||
|
||||
|
||||
@@ -19,22 +19,11 @@ use std::fmt;
|
||||
/// Type of EVM to use.
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub enum VMType {
|
||||
/// JIT EVM
|
||||
#[cfg(feature = "jit")]
|
||||
Jit,
|
||||
/// RUST EVM
|
||||
Interpreter
|
||||
}
|
||||
|
||||
impl fmt::Display for VMType {
|
||||
#[cfg(feature="jit")]
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{}", match *self {
|
||||
VMType::Jit => "JIT",
|
||||
VMType::Interpreter => "INT"
|
||||
})
|
||||
}
|
||||
#[cfg(not(feature="jit"))]
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{}", match *self {
|
||||
VMType::Interpreter => "INT"
|
||||
@@ -49,27 +38,8 @@ impl Default for VMType {
|
||||
}
|
||||
|
||||
impl VMType {
|
||||
/// Return all possible VMs (JIT, Interpreter)
|
||||
#[cfg(feature = "jit")]
|
||||
pub fn all() -> Vec<VMType> {
|
||||
vec![VMType::Jit, VMType::Interpreter]
|
||||
}
|
||||
|
||||
/// Return all possible VMs (Interpreter)
|
||||
#[cfg(not(feature = "jit"))]
|
||||
pub fn all() -> Vec<VMType> {
|
||||
vec![VMType::Interpreter]
|
||||
}
|
||||
|
||||
/// Return new jit if it's possible
|
||||
#[cfg(not(feature = "jit"))]
|
||||
pub fn jit() -> Option<Self> {
|
||||
None
|
||||
}
|
||||
|
||||
/// Return new jit if it's possible
|
||||
#[cfg(feature = "jit")]
|
||||
pub fn jit() -> Option<Self> {
|
||||
Some(VMType::Jit)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,46 +3,43 @@ description = "Parity Light Client Implementation"
|
||||
homepage = "http://parity.io"
|
||||
license = "GPL-3.0"
|
||||
name = "ethcore-light"
|
||||
version = "1.8.0"
|
||||
version = "1.11.0"
|
||||
authors = ["Parity Technologies <admin@parity.io>"]
|
||||
build = "build.rs"
|
||||
|
||||
[build-dependencies]
|
||||
"ethcore-ipc-codegen" = { path = "../../ipc/codegen", optional = true }
|
||||
|
||||
[dependencies]
|
||||
log = "0.3"
|
||||
ethcore = { path = ".."}
|
||||
ethcore-util = { path = "../../util" }
|
||||
ethcore-bigint = { path = "../../util/bigint" }
|
||||
ethcore-bytes = { path = "../../util/bytes" }
|
||||
ethcore-transaction = { path = "../transaction" }
|
||||
ethereum-types = "0.3"
|
||||
memorydb = { path = "../../util/memorydb" }
|
||||
patricia_trie = { path = "../../util/patricia_trie" }
|
||||
patricia-trie = { path = "../../util/patricia_trie" }
|
||||
ethcore-network = { path = "../../util/network" }
|
||||
ethcore-io = { path = "../../util/io" }
|
||||
ethcore-ipc = { path = "../../ipc/rpc", optional = true }
|
||||
ethcore-devtools = { path = "../../devtools" }
|
||||
evm = { path = "../evm" }
|
||||
hashdb = { path = "../../util/hashdb" }
|
||||
heapsize = "0.4"
|
||||
vm = { path = "../vm" }
|
||||
plain_hasher = { path = "../../util/plain_hasher" }
|
||||
rlp = { path = "../../util/rlp" }
|
||||
rlp_derive = { path = "../../util/rlp_derive" }
|
||||
time = "0.1"
|
||||
smallvec = "0.4"
|
||||
futures = "0.1"
|
||||
rand = "0.3"
|
||||
rand = "0.4"
|
||||
itertools = "0.5"
|
||||
bincode = "0.8.0"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
parking_lot = "0.4"
|
||||
parking_lot = "0.5"
|
||||
stats = { path = "../../util/stats" }
|
||||
hash = { path = "../../util/hash" }
|
||||
keccak-hash = { path = "../../util/hash" }
|
||||
triehash = { path = "../../util/triehash" }
|
||||
kvdb = { path = "../../util/kvdb" }
|
||||
kvdb-rocksdb = { path = "../../util/kvdb-rocksdb" }
|
||||
memory-cache = { path = "../../util/memory_cache" }
|
||||
error-chain = { version = "0.11", default-features = false }
|
||||
|
||||
[dev-dependencies]
|
||||
kvdb-memorydb = { path = "../../util/kvdb-memorydb" }
|
||||
tempdir = "0.3"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
ipc = ["ethcore-ipc", "ethcore-ipc-codegen"]
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
// Copyright 2015-2017 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity.
|
||||
|
||||
// Parity is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#[cfg(feature = "ipc")]
|
||||
extern crate ethcore_ipc_codegen;
|
||||
|
||||
#[cfg(feature = "ipc")]
|
||||
fn main() {
|
||||
ethcore_ipc_codegen::derive_binary("src/types/mod.rs.in").unwrap();
|
||||
ethcore_ipc_codegen::derive_ipc_cond("src/provider.rs", true).unwrap();
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "ipc"))]
|
||||
fn main() { }
|
||||
@@ -25,11 +25,10 @@ use ethcore::header::BlockNumber;
|
||||
use ethcore::receipt::Receipt;
|
||||
|
||||
use stats::Corpus;
|
||||
use time::{SteadyTime, Duration};
|
||||
use std::time::{Instant, Duration};
|
||||
use heapsize::HeapSizeOf;
|
||||
use bigint::prelude::U256;
|
||||
use bigint::hash::H256;
|
||||
use util::cache::MemoryLruCache;
|
||||
use ethereum_types::{H256, U256};
|
||||
use memory_cache::MemoryLruCache;
|
||||
|
||||
/// Configuration for how much data to cache.
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
@@ -70,7 +69,7 @@ pub struct Cache {
|
||||
bodies: MemoryLruCache<H256, encoded::Body>,
|
||||
receipts: MemoryLruCache<H256, Vec<Receipt>>,
|
||||
chain_score: MemoryLruCache<H256, U256>,
|
||||
corpus: Option<(Corpus<U256>, SteadyTime)>,
|
||||
corpus: Option<(Corpus<U256>, Instant)>,
|
||||
corpus_expiration: Duration,
|
||||
}
|
||||
|
||||
@@ -140,7 +139,7 @@ impl Cache {
|
||||
|
||||
/// Get gas price corpus, if recent enough.
|
||||
pub fn gas_price_corpus(&self) -> Option<Corpus<U256>> {
|
||||
let now = SteadyTime::now();
|
||||
let now = Instant::now();
|
||||
|
||||
self.corpus.as_ref().and_then(|&(ref corpus, ref tm)| {
|
||||
if *tm + self.corpus_expiration >= now {
|
||||
@@ -153,7 +152,7 @@ impl Cache {
|
||||
|
||||
/// Set the cached gas price corpus.
|
||||
pub fn set_gas_price_corpus(&mut self, corpus: Corpus<U256>) {
|
||||
self.corpus = Some((corpus, SteadyTime::now()))
|
||||
self.corpus = Some((corpus, Instant::now()))
|
||||
}
|
||||
|
||||
/// Get the memory used.
|
||||
@@ -176,18 +175,18 @@ impl HeapSizeOf for Cache {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::Cache;
|
||||
use time::Duration;
|
||||
use std::time::Duration;
|
||||
|
||||
#[test]
|
||||
fn corpus_inaccessible() {
|
||||
let mut cache = Cache::new(Default::default(), Duration::hours(5));
|
||||
let mut cache = Cache::new(Default::default(), Duration::from_secs(5 * 3600));
|
||||
|
||||
cache.set_gas_price_corpus(vec![].into());
|
||||
assert_eq!(cache.gas_price_corpus(), Some(vec![].into()));
|
||||
|
||||
{
|
||||
let corpus_time = &mut cache.corpus.as_mut().unwrap().1;
|
||||
*corpus_time = *corpus_time - Duration::hours(6);
|
||||
*corpus_time = *corpus_time - Duration::from_secs(6 * 3600);
|
||||
}
|
||||
assert!(cache.gas_price_corpus().is_none());
|
||||
}
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
//! we discarded.
|
||||
|
||||
use ethcore::ids::BlockId;
|
||||
use bigint::prelude::U256;
|
||||
use bigint::hash::H256;
|
||||
use util::{HashDB, MemoryDB};
|
||||
use ethereum_types::{H256, U256};
|
||||
use hashdb::HashDB;
|
||||
use memorydb::MemoryDB;
|
||||
use bytes::Bytes;
|
||||
use trie::{self, TrieMut, TrieDBMut, Trie, TrieDB, Recorder};
|
||||
use rlp::{RlpStream, UntrustedRlp};
|
||||
use rlp::{RlpStream, Rlp};
|
||||
|
||||
// encode a key.
|
||||
macro_rules! key {
|
||||
@@ -150,7 +150,7 @@ pub fn check_proof(proof: &[Bytes], num: u64, root: H256) -> Option<(H256, U256)
|
||||
let res = match TrieDB::new(&db, &root) {
|
||||
Err(_) => return None,
|
||||
Ok(trie) => trie.get_with(&key!(num), |val: &[u8]| {
|
||||
let rlp = UntrustedRlp::new(val);
|
||||
let rlp = Rlp::new(val);
|
||||
rlp.val_at::<H256>(0)
|
||||
.and_then(|h| rlp.val_at::<U256>(1).map(|td| (h, td)))
|
||||
.ok()
|
||||
|
||||
@@ -24,7 +24,7 @@ use ethcore::machine::EthereumMachine;
|
||||
use ethcore::header::Header;
|
||||
use ethcore::receipt::Receipt;
|
||||
use futures::future::IntoFuture;
|
||||
use bigint::hash::H256;
|
||||
use ethereum_types::H256;
|
||||
|
||||
/// Provides full chain data.
|
||||
pub trait ChainDataFetcher: Send + Sync + 'static {
|
||||
|
||||
@@ -31,20 +31,20 @@ use std::sync::Arc;
|
||||
use cht;
|
||||
|
||||
use ethcore::block_status::BlockStatus;
|
||||
use ethcore::error::{BlockImportError, BlockError};
|
||||
use ethcore::error::{Error, ErrorKind, BlockImportError, BlockImportErrorKind, BlockError};
|
||||
use ethcore::encoded;
|
||||
use ethcore::header::Header;
|
||||
use ethcore::ids::BlockId;
|
||||
use ethcore::spec::Spec;
|
||||
use ethcore::spec::{Spec, SpecHardcodedSync};
|
||||
use ethcore::engines::epoch::{
|
||||
Transition as EpochTransition,
|
||||
PendingTransition as PendingEpochTransition
|
||||
};
|
||||
|
||||
use rlp::{Encodable, Decodable, DecoderError, RlpStream, Rlp, UntrustedRlp};
|
||||
use rlp::{Encodable, Decodable, DecoderError, RlpStream, Rlp};
|
||||
use heapsize::HeapSizeOf;
|
||||
use bigint::prelude::U256;
|
||||
use bigint::hash::{H256, H256FastMap, H264};
|
||||
use ethereum_types::{H256, H264, U256};
|
||||
use plain_hasher::H256FastMap;
|
||||
use kvdb::{DBTransaction, KeyValueDB};
|
||||
|
||||
use cache::Cache;
|
||||
@@ -74,6 +74,22 @@ pub struct BlockDescriptor {
|
||||
pub total_difficulty: U256,
|
||||
}
|
||||
|
||||
// best block data
|
||||
#[derive(RlpEncodable, RlpDecodable)]
|
||||
struct BestAndLatest {
|
||||
best_num: u64,
|
||||
latest_num: u64
|
||||
}
|
||||
|
||||
impl BestAndLatest {
|
||||
fn new(best_num: u64, latest_num: u64) -> Self {
|
||||
BestAndLatest {
|
||||
best_num,
|
||||
latest_num,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// candidate block description.
|
||||
struct Candidate {
|
||||
hash: H256,
|
||||
@@ -109,7 +125,7 @@ impl Encodable for Entry {
|
||||
}
|
||||
|
||||
impl Decodable for Entry {
|
||||
fn decode(rlp: &UntrustedRlp) -> Result<Self, DecoderError> {
|
||||
fn decode(rlp: &Rlp) -> Result<Self, DecoderError> {
|
||||
let mut candidates = SmallVec::<[Candidate; 3]>::new();
|
||||
|
||||
for item in rlp.iter() {
|
||||
@@ -170,7 +186,7 @@ fn encode_canonical_transition(header: &Header, proof: &[u8]) -> Vec<u8> {
|
||||
|
||||
// decode last canonical transition entry.
|
||||
fn decode_canonical_transition(t: &[u8]) -> Result<(Header, &[u8]), DecoderError> {
|
||||
let rlp = UntrustedRlp::new(t);
|
||||
let rlp = Rlp::new(t);
|
||||
|
||||
Ok((rlp.val_at(0)?, rlp.at(1)?.data()?))
|
||||
}
|
||||
@@ -180,6 +196,12 @@ pub struct PendingChanges {
|
||||
best_block: Option<BlockDescriptor>, // new best block.
|
||||
}
|
||||
|
||||
/// Whether or not the hardcoded sync feature is allowed.
|
||||
pub enum HardcodedSync {
|
||||
Allow,
|
||||
Deny,
|
||||
}
|
||||
|
||||
/// Header chain. See module docs for more details.
|
||||
pub struct HeaderChain {
|
||||
genesis_header: encoded::Header, // special-case the genesis.
|
||||
@@ -198,19 +220,17 @@ impl HeaderChain {
|
||||
col: Option<u32>,
|
||||
spec: &Spec,
|
||||
cache: Arc<Mutex<Cache>>,
|
||||
) -> Result<Self, String> {
|
||||
allow_hs: HardcodedSync,
|
||||
) -> Result<Self, Error> {
|
||||
let mut live_epoch_proofs = ::std::collections::HashMap::default();
|
||||
|
||||
let genesis = ::rlp::encode(&spec.genesis_header()).into_vec();
|
||||
let decoded_header = spec.genesis_header();
|
||||
|
||||
let chain = if let Some(current) = db.get(col, CURRENT_KEY)? {
|
||||
let (best_number, highest_number) = {
|
||||
let rlp = Rlp::new(¤t);
|
||||
(rlp.val_at(0), rlp.val_at(1))
|
||||
};
|
||||
let curr : BestAndLatest = ::rlp::decode(¤t);
|
||||
|
||||
let mut cur_number = highest_number;
|
||||
let mut cur_number = curr.latest_num;
|
||||
let mut candidates = BTreeMap::new();
|
||||
|
||||
// load all era entries, referenced headers within them,
|
||||
@@ -238,15 +258,15 @@ impl HeaderChain {
|
||||
|
||||
// fill best block block descriptor.
|
||||
let best_block = {
|
||||
let era = match candidates.get(&best_number) {
|
||||
let era = match candidates.get(&curr.best_num) {
|
||||
Some(era) => era,
|
||||
None => return Err(format!("Database corrupt: highest block referenced but no data.")),
|
||||
None => bail!(ErrorKind::Database("Database corrupt: highest block referenced but no data.".into())),
|
||||
};
|
||||
|
||||
let best = &era.candidates[0];
|
||||
BlockDescriptor {
|
||||
hash: best.hash,
|
||||
number: best_number,
|
||||
number: curr.best_num,
|
||||
total_difficulty: best.total_difficulty,
|
||||
}
|
||||
};
|
||||
@@ -260,8 +280,9 @@ impl HeaderChain {
|
||||
col: col,
|
||||
cache: cache,
|
||||
}
|
||||
|
||||
} else {
|
||||
HeaderChain {
|
||||
let chain = HeaderChain {
|
||||
genesis_header: encoded::Header::new(genesis),
|
||||
best_block: RwLock::new(BlockDescriptor {
|
||||
hash: decoded_header.hash(),
|
||||
@@ -270,10 +291,43 @@ impl HeaderChain {
|
||||
}),
|
||||
candidates: RwLock::new(BTreeMap::new()),
|
||||
live_epoch_proofs: RwLock::new(live_epoch_proofs),
|
||||
db: db,
|
||||
db: db.clone(),
|
||||
col: col,
|
||||
cache: cache,
|
||||
};
|
||||
|
||||
// insert the hardcoded sync into the database.
|
||||
if let (&Some(ref hardcoded_sync), HardcodedSync::Allow) = (&spec.hardcoded_sync, allow_hs) {
|
||||
let mut batch = db.transaction();
|
||||
|
||||
// insert the hardcoded CHT roots into the database.
|
||||
for (cht_num, cht_root) in hardcoded_sync.chts.iter().enumerate() {
|
||||
batch.put(col, cht_key(cht_num as u64).as_bytes(), &::rlp::encode(cht_root));
|
||||
}
|
||||
|
||||
let decoded_header = hardcoded_sync.header.decode();
|
||||
let decoded_header_num = decoded_header.number();
|
||||
|
||||
// write the block in the DB.
|
||||
info!(target: "chain", "Inserting hardcoded block #{} in chain",
|
||||
decoded_header_num);
|
||||
let pending = chain.insert_with_td(&mut batch, decoded_header,
|
||||
hardcoded_sync.total_difficulty, None)?;
|
||||
|
||||
// check that we have enough hardcoded CHT roots. avoids panicking later.
|
||||
let cht_num = cht::block_to_cht_number(decoded_header_num - 1)
|
||||
.expect("specs provided a hardcoded block with height 0");
|
||||
if cht_num >= hardcoded_sync.chts.len() as u64 {
|
||||
warn!(target: "chain", "specs didn't provide enough CHT roots for its \
|
||||
hardcoded block ; falling back to non-hardcoded sync \
|
||||
mode");
|
||||
} else {
|
||||
db.write_buffered(batch);
|
||||
chain.apply_pending(pending);
|
||||
}
|
||||
}
|
||||
|
||||
chain
|
||||
};
|
||||
|
||||
// instantiate genesis epoch data if it doesn't exist.
|
||||
@@ -304,6 +358,29 @@ impl HeaderChain {
|
||||
transaction: &mut DBTransaction,
|
||||
header: Header,
|
||||
transition_proof: Option<Vec<u8>>,
|
||||
) -> Result<PendingChanges, BlockImportError> {
|
||||
self.insert_inner(transaction, header, None, transition_proof)
|
||||
}
|
||||
|
||||
/// Insert a pre-verified header, with a known total difficulty. Similary to `insert`.
|
||||
///
|
||||
/// This blindly trusts that the data given to it is sensible.
|
||||
pub fn insert_with_td(
|
||||
&self,
|
||||
transaction: &mut DBTransaction,
|
||||
header: Header,
|
||||
total_difficulty: U256,
|
||||
transition_proof: Option<Vec<u8>>,
|
||||
) -> Result<PendingChanges, BlockImportError> {
|
||||
self.insert_inner(transaction, header, Some(total_difficulty), transition_proof)
|
||||
}
|
||||
|
||||
fn insert_inner(
|
||||
&self,
|
||||
transaction: &mut DBTransaction,
|
||||
header: Header,
|
||||
total_difficulty: Option<U256>,
|
||||
transition_proof: Option<Vec<u8>>,
|
||||
) -> Result<PendingChanges, BlockImportError> {
|
||||
let hash = header.hash();
|
||||
let number = header.number();
|
||||
@@ -321,19 +398,24 @@ impl HeaderChain {
|
||||
// hold candidates the whole time to guard import order.
|
||||
let mut candidates = self.candidates.write();
|
||||
|
||||
// find parent details.
|
||||
let parent_td =
|
||||
if number == 1 {
|
||||
self.genesis_header.difficulty()
|
||||
} else {
|
||||
candidates.get(&(number - 1))
|
||||
.and_then(|entry| entry.candidates.iter().find(|c| c.hash == parent_hash))
|
||||
.map(|c| c.total_difficulty)
|
||||
.ok_or_else(|| BlockError::UnknownParent(parent_hash))
|
||||
.map_err(BlockImportError::Block)?
|
||||
};
|
||||
// find total difficulty.
|
||||
let total_difficulty = match total_difficulty {
|
||||
Some(td) => td,
|
||||
None => {
|
||||
let parent_td =
|
||||
if number == 1 {
|
||||
self.genesis_header.difficulty()
|
||||
} else {
|
||||
candidates.get(&(number - 1))
|
||||
.and_then(|entry| entry.candidates.iter().find(|c| c.hash == parent_hash))
|
||||
.map(|c| c.total_difficulty)
|
||||
.ok_or_else(|| BlockError::UnknownParent(parent_hash))
|
||||
.map_err(BlockImportErrorKind::Block)?
|
||||
};
|
||||
|
||||
let total_difficulty = parent_td + *header.difficulty();
|
||||
parent_td + *header.difficulty()
|
||||
},
|
||||
};
|
||||
|
||||
// insert headers and candidates entries and write era to disk.
|
||||
{
|
||||
@@ -472,13 +554,71 @@ impl HeaderChain {
|
||||
// write the best and latest eras to the database.
|
||||
{
|
||||
let latest_num = *candidates.iter().rev().next().expect("at least one era just inserted; qed").0;
|
||||
let mut stream = RlpStream::new_list(2);
|
||||
stream.append(&best_num).append(&latest_num);
|
||||
transaction.put(self.col, CURRENT_KEY, &stream.out())
|
||||
let curr = BestAndLatest::new(best_num, latest_num);
|
||||
transaction.put(self.col, CURRENT_KEY, &::rlp::encode(&curr))
|
||||
}
|
||||
Ok(pending)
|
||||
}
|
||||
|
||||
/// Generates the specifications for hardcoded sync. This is typically only called manually
|
||||
/// from time to time by a Parity developer in order to update the chain specifications.
|
||||
///
|
||||
/// Returns `None` if we are at the genesis block, or if an error happens .
|
||||
pub fn read_hardcoded_sync(&self) -> Result<Option<SpecHardcodedSync>, Error> {
|
||||
let mut chts = Vec::new();
|
||||
let mut cht_num = 0;
|
||||
|
||||
loop {
|
||||
let cht = match self.cht_root(cht_num) {
|
||||
Some(cht) => cht,
|
||||
None if cht_num != 0 => {
|
||||
// end of the iteration
|
||||
let h_num = 1 + cht_num as u64 * cht::SIZE;
|
||||
let header = if let Some(header) = self.block_header(BlockId::Number(h_num)) {
|
||||
header
|
||||
} else {
|
||||
let msg = format!("header of block #{} not found in DB ; database in an \
|
||||
inconsistent state", h_num);
|
||||
bail!(ErrorKind::Database(msg.into()));
|
||||
};
|
||||
|
||||
let decoded = header.decode();
|
||||
|
||||
let entry: Entry = {
|
||||
let bytes = self.db.get(self.col, era_key(h_num).as_bytes())?
|
||||
.ok_or_else(|| {
|
||||
let msg = format!("entry for era #{} not found in DB ; database \
|
||||
in an inconsistent state", h_num);
|
||||
ErrorKind::Database(msg.into())
|
||||
})?;
|
||||
::rlp::decode(&bytes)
|
||||
};
|
||||
|
||||
let total_difficulty = entry.candidates.iter()
|
||||
.find(|c| c.hash == decoded.hash())
|
||||
.ok_or_else(|| {
|
||||
let msg = "no candidate matching block found in DB ; database in an \
|
||||
inconsistent state";
|
||||
ErrorKind::Database(msg.into())
|
||||
})?
|
||||
.total_difficulty;
|
||||
|
||||
break Ok(Some(SpecHardcodedSync {
|
||||
header: header,
|
||||
total_difficulty: total_difficulty,
|
||||
chts: chts,
|
||||
}));
|
||||
},
|
||||
None => {
|
||||
break Ok(None);
|
||||
},
|
||||
};
|
||||
|
||||
chts.push(cht);
|
||||
cht_num += 1;
|
||||
}
|
||||
}
|
||||
|
||||
/// Apply pending changes from a previous `insert` operation.
|
||||
/// Must be done before the next `insert` call.
|
||||
pub fn apply_pending(&self, pending: PendingChanges) {
|
||||
@@ -497,7 +637,7 @@ impl HeaderChain {
|
||||
if self.best_block.read().number < num { return None }
|
||||
self.candidates.read().get(&num).map(|entry| entry.canonical_hash)
|
||||
}
|
||||
BlockId::Latest | BlockId::Pending => {
|
||||
BlockId::Latest => {
|
||||
Some(self.best_block.read().hash)
|
||||
}
|
||||
}
|
||||
@@ -539,7 +679,7 @@ impl HeaderChain {
|
||||
self.candidates.read().get(&num).map(|entry| entry.canonical_hash)
|
||||
.and_then(load_from_db)
|
||||
}
|
||||
BlockId::Latest | BlockId::Pending => {
|
||||
BlockId::Latest => {
|
||||
// hold candidates hear to prevent deletion of the header
|
||||
// as we read it.
|
||||
let _candidates = self.candidates.read();
|
||||
@@ -575,7 +715,7 @@ impl HeaderChain {
|
||||
if self.best_block.read().number < num { return None }
|
||||
candidates.get(&num).map(|era| era.candidates[0].total_difficulty)
|
||||
}
|
||||
BlockId::Latest | BlockId::Pending => Some(self.best_block.read().total_difficulty)
|
||||
BlockId::Latest => Some(self.best_block.read().total_difficulty)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -721,9 +861,10 @@ impl<'a> Iterator for AncestryIter<'a> {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::HeaderChain;
|
||||
use super::{HeaderChain, HardcodedSync};
|
||||
use std::sync::Arc;
|
||||
|
||||
use ethereum_types::U256;
|
||||
use ethcore::ids::BlockId;
|
||||
use ethcore::header::Header;
|
||||
use ethcore::spec::Spec;
|
||||
@@ -731,7 +872,7 @@ mod tests {
|
||||
use kvdb::KeyValueDB;
|
||||
use kvdb_memorydb;
|
||||
|
||||
use time::Duration;
|
||||
use std::time::Duration;
|
||||
use parking_lot::Mutex;
|
||||
|
||||
fn make_db() -> Arc<KeyValueDB> {
|
||||
@@ -744,9 +885,9 @@ mod tests {
|
||||
let genesis_header = spec.genesis_header();
|
||||
let db = make_db();
|
||||
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::hours(6))));
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache, HardcodedSync::Allow).unwrap();
|
||||
|
||||
let mut parent_hash = genesis_header.hash();
|
||||
let mut rolling_timestamp = genesis_header.timestamp();
|
||||
@@ -755,7 +896,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * i.into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * i as u32);
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -777,9 +918,9 @@ mod tests {
|
||||
let spec = Spec::new_test();
|
||||
let genesis_header = spec.genesis_header();
|
||||
let db = make_db();
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::hours(6))));
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache, HardcodedSync::Allow).unwrap();
|
||||
|
||||
let mut parent_hash = genesis_header.hash();
|
||||
let mut rolling_timestamp = genesis_header.timestamp();
|
||||
@@ -788,7 +929,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * i.into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * i as u32);
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -807,7 +948,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * i.into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * i as u32);
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -831,7 +972,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * (i * i).into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * U256::from(i * i));
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -859,13 +1000,12 @@ mod tests {
|
||||
fn earliest_is_latest() {
|
||||
let spec = Spec::new_test();
|
||||
let db = make_db();
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::hours(6))));
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache, HardcodedSync::Allow).unwrap();
|
||||
|
||||
assert!(chain.block_header(BlockId::Earliest).is_some());
|
||||
assert!(chain.block_header(BlockId::Latest).is_some());
|
||||
assert!(chain.block_header(BlockId::Pending).is_some());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -873,10 +1013,11 @@ mod tests {
|
||||
let spec = Spec::new_test();
|
||||
let genesis_header = spec.genesis_header();
|
||||
let db = make_db();
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::hours(6))));
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
{
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone()).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone(),
|
||||
HardcodedSync::Allow).unwrap();
|
||||
let mut parent_hash = genesis_header.hash();
|
||||
let mut rolling_timestamp = genesis_header.timestamp();
|
||||
for i in 1..10000 {
|
||||
@@ -884,7 +1025,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * i.into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * i as u32);
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -896,7 +1037,8 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone()).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone(),
|
||||
HardcodedSync::Allow).unwrap();
|
||||
assert!(chain.block_header(BlockId::Number(10)).is_none());
|
||||
assert!(chain.block_header(BlockId::Number(9000)).is_some());
|
||||
assert!(chain.cht_root(2).is_some());
|
||||
@@ -909,10 +1051,11 @@ mod tests {
|
||||
let spec = Spec::new_test();
|
||||
let genesis_header = spec.genesis_header();
|
||||
let db = make_db();
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::hours(6))));
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
{
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone()).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone(),
|
||||
HardcodedSync::Allow).unwrap();
|
||||
let mut parent_hash = genesis_header.hash();
|
||||
let mut rolling_timestamp = genesis_header.timestamp();
|
||||
|
||||
@@ -922,7 +1065,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * i.into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * i as u32);
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -939,7 +1082,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * i.into() * 1000.into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * U256::from(i as u32 * 1000u32));
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -954,7 +1097,8 @@ mod tests {
|
||||
}
|
||||
|
||||
// after restoration, non-canonical eras should still be loaded.
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone()).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone(),
|
||||
HardcodedSync::Allow).unwrap();
|
||||
assert_eq!(chain.block_header(BlockId::Latest).unwrap().number(), 10);
|
||||
assert!(chain.candidates.read().get(&100).is_some())
|
||||
}
|
||||
@@ -964,9 +1108,10 @@ mod tests {
|
||||
let spec = Spec::new_test();
|
||||
let genesis_header = spec.genesis_header();
|
||||
let db = make_db();
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::hours(6))));
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone()).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache.clone(),
|
||||
HardcodedSync::Allow).unwrap();
|
||||
|
||||
assert!(chain.block_header(BlockId::Earliest).is_some());
|
||||
assert!(chain.block_header(BlockId::Number(0)).is_some());
|
||||
@@ -978,9 +1123,9 @@ mod tests {
|
||||
let spec = Spec::new_test();
|
||||
let genesis_header = spec.genesis_header();
|
||||
let db = make_db();
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::hours(6))));
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache).unwrap();
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache, HardcodedSync::Allow).unwrap();
|
||||
|
||||
let mut parent_hash = genesis_header.hash();
|
||||
let mut rolling_timestamp = genesis_header.timestamp();
|
||||
@@ -989,7 +1134,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * i.into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * i as u32);
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -1023,7 +1168,7 @@ mod tests {
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
header.set_difficulty(*genesis_header.difficulty() * i.into());
|
||||
header.set_difficulty(*genesis_header.difficulty() * i as u32);
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
@@ -1038,4 +1183,45 @@ mod tests {
|
||||
assert!(chain.live_epoch_proofs.read().is_empty());
|
||||
assert_eq!(chain.epoch_transition_for(parent_hash).unwrap().1, vec![1, 2, 3, 4]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hardcoded_sync_gen() {
|
||||
let spec = Spec::new_test();
|
||||
let genesis_header = spec.genesis_header();
|
||||
let db = make_db();
|
||||
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
let chain = HeaderChain::new(db.clone(), None, &spec, cache, HardcodedSync::Allow).unwrap();
|
||||
|
||||
let mut parent_hash = genesis_header.hash();
|
||||
let mut rolling_timestamp = genesis_header.timestamp();
|
||||
let mut total_difficulty = *genesis_header.difficulty();
|
||||
let h_num = 3 * ::cht::SIZE + 1;
|
||||
for i in 1..10000 {
|
||||
let mut header = Header::new();
|
||||
header.set_parent_hash(parent_hash);
|
||||
header.set_number(i);
|
||||
header.set_timestamp(rolling_timestamp);
|
||||
let diff = *genesis_header.difficulty() * i as u32;
|
||||
header.set_difficulty(diff);
|
||||
if i <= h_num {
|
||||
total_difficulty = total_difficulty + diff;
|
||||
}
|
||||
parent_hash = header.hash();
|
||||
|
||||
let mut tx = db.transaction();
|
||||
let pending = chain.insert(&mut tx, header, None).unwrap();
|
||||
db.write(tx).unwrap();
|
||||
chain.apply_pending(pending);
|
||||
|
||||
rolling_timestamp += 10;
|
||||
}
|
||||
|
||||
let hardcoded_sync = chain.read_hardcoded_sync().unwrap().unwrap();
|
||||
assert_eq!(hardcoded_sync.chts.len(), 3);
|
||||
assert_eq!(hardcoded_sync.total_difficulty, total_difficulty);
|
||||
let decoded: Header = hardcoded_sync.header.decode();
|
||||
assert_eq!(decoded.number(), h_num);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,28 +19,25 @@
|
||||
use std::sync::{Weak, Arc};
|
||||
|
||||
use ethcore::block_status::BlockStatus;
|
||||
use ethcore::client::{ClientReport, EnvInfo};
|
||||
use ethcore::client::{ClientReport, EnvInfo, ClientIoMessage};
|
||||
use ethcore::engines::{epoch, EthEngine, EpochChange, EpochTransition, Proof};
|
||||
use ethcore::machine::EthereumMachine;
|
||||
use ethcore::error::BlockImportError;
|
||||
use ethcore::error::{Error, BlockImportError};
|
||||
use ethcore::ids::BlockId;
|
||||
use ethcore::header::{BlockNumber, Header};
|
||||
use ethcore::verification::queue::{self, HeaderQueue};
|
||||
use ethcore::blockchain_info::BlockChainInfo;
|
||||
use ethcore::spec::Spec;
|
||||
use ethcore::service::ClientIoMessage;
|
||||
use ethcore::spec::{Spec, SpecHardcodedSync};
|
||||
use ethcore::encoded;
|
||||
use io::IoChannel;
|
||||
use parking_lot::{Mutex, RwLock};
|
||||
use bigint::prelude::U256;
|
||||
use bigint::hash::H256;
|
||||
use ethereum_types::{H256, U256};
|
||||
use futures::{IntoFuture, Future};
|
||||
|
||||
use kvdb::KeyValueDB;
|
||||
use kvdb_rocksdb::CompactionProfile;
|
||||
|
||||
use self::fetch::ChainDataFetcher;
|
||||
use self::header_chain::{AncestryIter, HeaderChain};
|
||||
use self::header_chain::{AncestryIter, HeaderChain, HardcodedSync};
|
||||
|
||||
use cache::Cache;
|
||||
|
||||
@@ -58,16 +55,12 @@ pub struct Config {
|
||||
pub queue: queue::Config,
|
||||
/// Chain column in database.
|
||||
pub chain_column: Option<u32>,
|
||||
/// Database cache size. `None` => rocksdb default.
|
||||
pub db_cache_size: Option<usize>,
|
||||
/// State db compaction profile
|
||||
pub db_compaction: CompactionProfile,
|
||||
/// Should db have WAL enabled?
|
||||
pub db_wal: bool,
|
||||
/// Should it do full verification of blocks?
|
||||
pub verify_full: bool,
|
||||
/// Should it check the seal of blocks?
|
||||
pub check_seal: bool,
|
||||
/// Disable hardcoded sync.
|
||||
pub no_hardcoded_sync: bool,
|
||||
}
|
||||
|
||||
impl Default for Config {
|
||||
@@ -75,11 +68,9 @@ impl Default for Config {
|
||||
Config {
|
||||
queue: Default::default(),
|
||||
chain_column: None,
|
||||
db_cache_size: None,
|
||||
db_compaction: CompactionProfile::default(),
|
||||
db_wal: true,
|
||||
verify_full: true,
|
||||
check_seal: true,
|
||||
no_hardcoded_sync: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -187,11 +178,14 @@ impl<T: ChainDataFetcher> Client<T> {
|
||||
fetcher: T,
|
||||
io_channel: IoChannel<ClientIoMessage>,
|
||||
cache: Arc<Mutex<Cache>>
|
||||
) -> Result<Self, String> {
|
||||
) -> Result<Self, Error> {
|
||||
Ok(Client {
|
||||
queue: HeaderQueue::new(config.queue, spec.engine.clone(), io_channel, config.check_seal),
|
||||
engine: spec.engine.clone(),
|
||||
chain: HeaderChain::new(db.clone(), chain_col, &spec, cache)?,
|
||||
chain: {
|
||||
let hs_cfg = if config.no_hardcoded_sync { HardcodedSync::Deny } else { HardcodedSync::Allow };
|
||||
HeaderChain::new(db.clone(), chain_col, &spec, cache, hs_cfg)?
|
||||
},
|
||||
report: RwLock::new(ClientReport::default()),
|
||||
import_lock: Mutex::new(()),
|
||||
db: db,
|
||||
@@ -201,33 +195,19 @@ impl<T: ChainDataFetcher> Client<T> {
|
||||
})
|
||||
}
|
||||
|
||||
/// Generates the specifications for hardcoded sync. This is typically only called manually
|
||||
/// from time to time by a Parity developer in order to update the chain specifications.
|
||||
///
|
||||
/// Returns `None` if we are at the genesis block.
|
||||
pub fn read_hardcoded_sync(&self) -> Result<Option<SpecHardcodedSync>, Error> {
|
||||
self.chain.read_hardcoded_sync()
|
||||
}
|
||||
|
||||
/// Adds a new `LightChainNotify` listener.
|
||||
pub fn add_listener(&self, listener: Weak<LightChainNotify>) {
|
||||
self.listeners.write().push(listener);
|
||||
}
|
||||
|
||||
/// Create a new `Client` backed purely in-memory.
|
||||
/// This will ignore all database options in the configuration.
|
||||
pub fn in_memory(
|
||||
config: Config,
|
||||
spec: &Spec,
|
||||
fetcher: T,
|
||||
io_channel: IoChannel<ClientIoMessage>,
|
||||
cache: Arc<Mutex<Cache>>
|
||||
) -> Self {
|
||||
let db = ::kvdb_memorydb::create(0);
|
||||
|
||||
Client::new(
|
||||
config,
|
||||
Arc::new(db),
|
||||
None,
|
||||
spec,
|
||||
fetcher,
|
||||
io_channel,
|
||||
cache
|
||||
).expect("New DB creation infallible; qed")
|
||||
}
|
||||
|
||||
/// Import a header to the queue for additional verification.
|
||||
pub fn import_header(&self, header: Header) -> Result<H256, BlockImportError> {
|
||||
self.queue.import(header).map_err(Into::into)
|
||||
@@ -607,6 +587,12 @@ impl<T: ChainDataFetcher> LightChainClient for Client<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: ChainDataFetcher> ::ethcore::client::ChainInfo for Client<T> {
|
||||
fn chain_info(&self) -> BlockChainInfo {
|
||||
Client::chain_info(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: ChainDataFetcher> ::ethcore::client::EngineClient for Client<T> {
|
||||
fn update_sealing(&self) { }
|
||||
fn submit_seal(&self, _block_hash: H256, _seal: Vec<Vec<u8>>) { }
|
||||
@@ -620,10 +606,6 @@ impl<T: ChainDataFetcher> ::ethcore::client::EngineClient for Client<T> {
|
||||
})
|
||||
}
|
||||
|
||||
fn chain_info(&self) -> BlockChainInfo {
|
||||
Client::chain_info(self)
|
||||
}
|
||||
|
||||
fn as_full_client(&self) -> Option<&::ethcore::client::BlockChainClient> {
|
||||
None
|
||||
}
|
||||
@@ -631,4 +613,8 @@ impl<T: ChainDataFetcher> ::ethcore::client::EngineClient for Client<T> {
|
||||
fn block_number(&self, id: BlockId) -> Option<BlockNumber> {
|
||||
self.block_header(id).map(|hdr| hdr.number())
|
||||
}
|
||||
|
||||
fn block_header(&self, id: BlockId) -> Option<encoded::Header> {
|
||||
Client::block_header(self, id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,33 +18,40 @@
|
||||
//! Just handles block import messages and passes them to the client.
|
||||
|
||||
use std::fmt;
|
||||
use std::path::Path;
|
||||
use std::sync::Arc;
|
||||
|
||||
use ethcore::client::ClientIoMessage;
|
||||
use ethcore::db;
|
||||
use ethcore::service::ClientIoMessage;
|
||||
use ethcore::error::Error as CoreError;
|
||||
use ethcore::spec::Spec;
|
||||
use io::{IoContext, IoError, IoHandler, IoService};
|
||||
use kvdb_rocksdb::{Database, DatabaseConfig};
|
||||
use kvdb::KeyValueDB;
|
||||
|
||||
use cache::Cache;
|
||||
use parking_lot::Mutex;
|
||||
|
||||
use super::{ChainDataFetcher, Client, Config as ClientConfig};
|
||||
use super::{ChainDataFetcher, LightChainNotify, Client, Config as ClientConfig};
|
||||
|
||||
/// Errors on service initialization.
|
||||
#[derive(Debug)]
|
||||
pub enum Error {
|
||||
/// Database error.
|
||||
Database(String),
|
||||
/// Core error.
|
||||
Core(CoreError),
|
||||
/// I/O service error.
|
||||
Io(IoError),
|
||||
}
|
||||
|
||||
impl From<CoreError> for Error {
|
||||
#[inline]
|
||||
fn from(err: CoreError) -> Error {
|
||||
Error::Core(err)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Error {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match *self {
|
||||
Error::Database(ref msg) => write!(f, "Database error: {}", msg),
|
||||
Error::Core(ref msg) => write!(f, "Core error: {}", msg),
|
||||
Error::Io(ref err) => write!(f, "I/O service error: {}", err),
|
||||
}
|
||||
}
|
||||
@@ -58,19 +65,7 @@ pub struct Service<T> {
|
||||
|
||||
impl<T: ChainDataFetcher> Service<T> {
|
||||
/// Start the service: initialize I/O workers and client itself.
|
||||
pub fn start(config: ClientConfig, spec: &Spec, fetcher: T, path: &Path, cache: Arc<Mutex<Cache>>) -> Result<Self, Error> {
|
||||
|
||||
// initialize database.
|
||||
let mut db_config = DatabaseConfig::with_columns(db::NUM_COLUMNS);
|
||||
|
||||
db_config.memory_budget = config.db_cache_size;
|
||||
db_config.compaction = config.db_compaction;
|
||||
db_config.wal = config.db_wal;
|
||||
|
||||
let db = Arc::new(Database::open(
|
||||
&db_config,
|
||||
&path.to_str().expect("DB path could not be converted to string.")
|
||||
).map_err(Error::Database)?);
|
||||
pub fn start(config: ClientConfig, spec: &Spec, fetcher: T, db: Arc<KeyValueDB>, cache: Arc<Mutex<Cache>>) -> Result<Self, Error> {
|
||||
|
||||
let io_service = IoService::<ClientIoMessage>::start().map_err(Error::Io)?;
|
||||
let client = Arc::new(Client::new(config,
|
||||
@@ -80,7 +75,7 @@ impl<T: ChainDataFetcher> Service<T> {
|
||||
fetcher,
|
||||
io_service.channel(),
|
||||
cache,
|
||||
).map_err(Error::Database)?);
|
||||
)?);
|
||||
|
||||
io_service.register_handler(Arc::new(ImportBlocks(client.clone()))).map_err(Error::Io)?;
|
||||
spec.engine.register_client(Arc::downgrade(&client) as _);
|
||||
@@ -91,6 +86,11 @@ impl<T: ChainDataFetcher> Service<T> {
|
||||
})
|
||||
}
|
||||
|
||||
/// Set the actor to be notified on certain chain events
|
||||
pub fn add_notify(&self, notify: Arc<LightChainNotify>) {
|
||||
self.client.add_listener(Arc::downgrade(¬ify));
|
||||
}
|
||||
|
||||
/// Register an I/O handler on the service.
|
||||
pub fn register_handler(&self, handler: Arc<IoHandler<ClientIoMessage> + Send>) -> Result<(), IoError> {
|
||||
self.io_service.register_handler(handler)
|
||||
@@ -115,21 +115,22 @@ impl<T: ChainDataFetcher> IoHandler<ClientIoMessage> for ImportBlocks<T> {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::Service;
|
||||
use devtools::RandomTempPath;
|
||||
use ethcore::spec::Spec;
|
||||
|
||||
use std::sync::Arc;
|
||||
use cache::Cache;
|
||||
use client::fetch;
|
||||
use time::Duration;
|
||||
use std::time::Duration;
|
||||
use parking_lot::Mutex;
|
||||
use kvdb_memorydb;
|
||||
use ethcore::db::NUM_COLUMNS;
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let db = Arc::new(kvdb_memorydb::create(NUM_COLUMNS.unwrap_or(0)));
|
||||
let spec = Spec::new_test();
|
||||
let temp_path = RandomTempPath::new();
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::hours(6))));
|
||||
let cache = Arc::new(Mutex::new(Cache::new(Default::default(), Duration::from_secs(6 * 3600))));
|
||||
|
||||
Service::start(Default::default(), &spec, fetch::unavailable(), temp_path.as_path(), cache).unwrap();
|
||||
Service::start(Default::default(), &spec, fetch::unavailable(), db, cache).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,21 +38,8 @@ pub mod net;
|
||||
pub mod on_demand;
|
||||
pub mod transaction_queue;
|
||||
pub mod cache;
|
||||
|
||||
#[cfg(not(feature = "ipc"))]
|
||||
pub mod provider;
|
||||
|
||||
#[cfg(feature = "ipc")]
|
||||
pub mod provider {
|
||||
#![allow(dead_code, unused_assignments, unused_variables, missing_docs)] // codegen issues
|
||||
include!(concat!(env!("OUT_DIR"), "/provider.rs"));
|
||||
}
|
||||
|
||||
#[cfg(feature = "ipc")]
|
||||
pub mod remote {
|
||||
pub use provider::LightProviderClient;
|
||||
}
|
||||
|
||||
mod types;
|
||||
|
||||
pub use self::cache::Cache;
|
||||
@@ -69,16 +56,17 @@ extern crate log;
|
||||
extern crate bincode;
|
||||
extern crate ethcore_io as io;
|
||||
extern crate ethcore_network as network;
|
||||
extern crate ethcore_util as util;
|
||||
extern crate ethcore_bigint as bigint;
|
||||
extern crate ethcore_bytes as bytes;
|
||||
extern crate ethcore_transaction as transaction;
|
||||
extern crate ethereum_types;
|
||||
extern crate ethcore;
|
||||
extern crate evm;
|
||||
extern crate hashdb;
|
||||
extern crate heapsize;
|
||||
extern crate futures;
|
||||
extern crate itertools;
|
||||
extern crate memorydb;
|
||||
extern crate patricia_trie as trie;
|
||||
extern crate plain_hasher;
|
||||
extern crate rand;
|
||||
extern crate rlp;
|
||||
extern crate parking_lot;
|
||||
@@ -87,16 +75,15 @@ extern crate rlp_derive;
|
||||
extern crate serde;
|
||||
extern crate smallvec;
|
||||
extern crate stats;
|
||||
extern crate time;
|
||||
extern crate vm;
|
||||
extern crate hash;
|
||||
extern crate keccak_hash as hash;
|
||||
extern crate triehash;
|
||||
extern crate kvdb;
|
||||
extern crate kvdb_memorydb;
|
||||
extern crate kvdb_rocksdb;
|
||||
|
||||
#[cfg(feature = "ipc")]
|
||||
extern crate ethcore_ipc as ipc;
|
||||
extern crate memory_cache;
|
||||
#[macro_use]
|
||||
extern crate error_chain;
|
||||
|
||||
#[cfg(test)]
|
||||
extern crate ethcore_devtools as devtools;
|
||||
extern crate kvdb_memorydb;
|
||||
#[cfg(test)]
|
||||
extern crate tempdir;
|
||||
|
||||
@@ -47,7 +47,7 @@ pub trait IoContext {
|
||||
}
|
||||
|
||||
|
||||
impl<'a> IoContext for NetworkContext<'a> {
|
||||
impl<T> IoContext for T where T: ?Sized + NetworkContext {
|
||||
fn send(&self, peer: PeerId, packet_id: u8, packet_body: Vec<u8>) {
|
||||
if let Err(e) = self.send(peer, packet_id, packet_body) {
|
||||
debug!(target: "pip", "Error sending packet to peer {}: {}", peer, e);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user