Compare commits
3202 Commits
@0x/json-s
...
@0x/assert
Author | SHA1 | Date | |
---|---|---|---|
|
7b583cecb2 | ||
|
f3d9520db2 | ||
|
9de4bf1225 | ||
|
52e287fc7d | ||
|
e6683e46cc | ||
|
4febabd3e7 | ||
|
4b4bfee1bc | ||
|
09a5b6e7a3 | ||
|
703aa38a17 | ||
|
b2f35057a5 | ||
|
a3198b7df8 | ||
|
db900d180c | ||
|
3d2ed57c08 | ||
|
d0b0c4a917 | ||
|
74293d5bc8 | ||
|
50cad8d260 | ||
|
995a2ef8a0 | ||
|
1d3fff32a2 | ||
|
069c9fd4a6 | ||
|
4f3cab4213 | ||
|
42c13ecafa | ||
|
70158c3a99 | ||
|
ae8d2ae2cb | ||
|
79adf5cec6 | ||
|
26d44a5392 | ||
|
149f8bc9b3 | ||
|
78bdc2d6b4 | ||
|
c9facdf825 | ||
|
4986a2f940 | ||
|
9fd372da51 | ||
|
68194fde0a | ||
|
155e73dc70 | ||
|
76a1ff7c40 | ||
|
da357f7599 | ||
|
4efe941937 | ||
|
612d2dbde1 | ||
|
0c9369bf04 | ||
|
94043380bb | ||
|
96e880d170 | ||
|
3d8caa4694 | ||
|
4996ae8d9d | ||
|
7b4a0d4f8a | ||
|
c2ad95fd94 | ||
|
5ad2e9d6b6 | ||
|
8bac655dc1 | ||
|
e29f130285 | ||
|
f9d4afd713 | ||
|
d6b6f1e7d9 | ||
|
ea5e78b217 | ||
|
c9a7ef18dc | ||
|
e23f90e41c | ||
|
e1244648e0 | ||
|
8d72e253c8 | ||
|
33ed6a7c06 | ||
|
c82a4a5760 | ||
|
445a629016 | ||
|
be7daae91a | ||
|
ba645692b0 | ||
|
08f541535b | ||
|
3520d2584e | ||
|
141ac0ca0b | ||
|
0c12128f64 | ||
|
1e939591ae | ||
|
25e42c0ad4 | ||
|
1c032a103d | ||
|
e0022cd98c | ||
|
68dbf8b2a7 | ||
|
a9ca1f3174 | ||
|
bcff25c996 | ||
|
e272f8e1d9 | ||
|
5b06595a6b | ||
|
44aafe4d78 | ||
|
92cbff67d1 | ||
|
2166f57750 | ||
|
726a52f3ee | ||
|
64424deb41 | ||
|
69025da2dc | ||
|
09cb3b7d50 | ||
|
8566bb551b | ||
|
f631c2da06 | ||
|
19064f8cbb | ||
|
de36670bdc | ||
|
e8d68dc07f | ||
|
f81149ac2b | ||
|
ef928aff31 | ||
|
6f090a2fda | ||
|
c690364ec6 | ||
|
cc48433575 | ||
|
fe1ef930ad | ||
|
8ce885089e | ||
|
3e910c0e03 | ||
|
7c47c52fac | ||
|
744fa22f01 | ||
|
b3f996595f | ||
|
148f12a753 | ||
|
aedd6503d1 | ||
|
c3ecbd3063 | ||
|
3297b5ea34 | ||
|
19f929761b | ||
|
d8890a03bb | ||
|
4a6bdfae23 | ||
|
7015fc4dbc | ||
|
ab4d4a69ec | ||
|
efbfd08aa0 | ||
|
f9c29c3e74 | ||
|
0758f231e2 | ||
|
9fa8619590 | ||
|
174daa97c3 | ||
|
43de20930b | ||
|
4a4c26a2e3 | ||
|
e2fe907de0 | ||
|
f9986a6342 | ||
|
8d367a09fe | ||
|
7e60138e9d | ||
|
e5c4390489 | ||
|
dabcd2cf47 | ||
|
61910f264c | ||
|
ddb0e29253 | ||
|
9d9ab2f1ee | ||
|
ce65ac0c1c | ||
|
98203bcc8c | ||
|
bee48d1d43 | ||
|
ebbb4df227 | ||
|
da7c969eeb | ||
|
310d981990 | ||
|
6275b7ba3b | ||
|
b22a6b4e09 | ||
|
b5fd3c72a0 | ||
|
bf65332763 | ||
|
3973dec994 | ||
|
c8212f1d4d | ||
|
e6fe728bcb | ||
|
bef30e4209 | ||
|
6c7f4c13fa | ||
|
662049914a | ||
|
d7a5190d52 | ||
|
2b64661c61 | ||
|
9c29eecc30 | ||
|
25b58108bc | ||
|
fbde36d27b | ||
|
02b7a43909 | ||
|
e1e531a2a4 | ||
|
f6edf27856 | ||
|
277e09d061 | ||
|
1c9fb5f65f | ||
|
c29539aaf2 | ||
|
4143baa27a | ||
|
5816279d68 | ||
|
0d877a8076 | ||
|
7b266bc762 | ||
|
0e6aea856f | ||
|
e31d17ef79 | ||
|
7b2a9ba698 | ||
|
87d08b0af6 | ||
|
e68c5d5517 | ||
|
c09825660c | ||
|
293e937291 | ||
|
fe2f97dabd | ||
|
0b23aaca26 | ||
|
d92dc47df8 | ||
|
8b69d918a9 | ||
|
3b79754b7a | ||
|
92ec4f5772 | ||
|
8528660f50 | ||
|
edd4370cdb | ||
|
69aa1c2e91 | ||
|
fcdd0de9ee | ||
|
4c5bde1b54 | ||
|
83f77a2d56 | ||
|
cdac2d210e | ||
|
737941e8c7 | ||
|
a873872cc7 | ||
|
56b8fd2074 | ||
|
b2ea4f6aaf | ||
|
ca5b024e03 | ||
|
92f5ad4f15 | ||
|
ff8250cd35 | ||
|
466ec6b22a | ||
|
beaf0a4a8a | ||
|
6871f36dad | ||
|
a587718443 | ||
|
444250520a | ||
|
bd5850f390 | ||
|
ce1c2eeab7 | ||
|
b08d6c3b4d | ||
|
f269bc28cf | ||
|
af63934d2c | ||
|
39816bef8f | ||
|
600b44c962 | ||
|
7a2b312d64 | ||
|
7d166dc7da | ||
|
0720b8487c | ||
|
4404f92b38 | ||
|
0a27979464 | ||
|
a3cb722469 | ||
|
2cca2d70d7 | ||
|
17f313658d | ||
|
d304c062eb | ||
|
3eef888e25 | ||
|
20eab4257a | ||
|
665dd0813e | ||
|
e84232cce8 | ||
|
de78d6a8ad | ||
|
a085654aba | ||
|
61c88455f4 | ||
|
a084bbbed8 | ||
|
eb393f0a66 | ||
|
c3afc13dd6 | ||
|
08b865d25b | ||
|
9932240a4d | ||
|
f570f80674 | ||
|
dbae6ec165 | ||
|
7c37d10d1f | ||
|
ae147e615a | ||
|
18084588ea | ||
|
64d99dc07c | ||
|
91b57793c2 | ||
|
63a63543be | ||
|
75a4bbc5f2 | ||
|
c2ec4174b7 | ||
|
7ea274b731 | ||
|
d9675ad6d3 | ||
|
a8e32d8c87 | ||
|
16a2cf7be6 | ||
|
b4621f6a69 | ||
|
c859788fde | ||
|
1c25d8e997 | ||
|
fc89b97818 | ||
|
b0817854e8 | ||
|
1907ecc02e | ||
|
cf2dee60dc | ||
|
80aa2884a3 | ||
|
3a28eb1c6a | ||
|
82a44559f6 | ||
|
892be49b98 | ||
|
1cbc03ae43 | ||
|
1c9a49cd08 | ||
|
4f53335db0 | ||
|
0b87aec9c6 | ||
|
6892f929fb | ||
|
f39c03191c | ||
|
05adb38a09 | ||
|
f73c68ee61 | ||
|
33f3405226 | ||
|
86caa4a0bb | ||
|
6d832deb62 | ||
|
0b6c9c8468 | ||
|
d1fd4421be | ||
|
b06f8239e1 | ||
|
7991de9ed0 | ||
|
e9a82905e3 | ||
|
f8684d6a77 | ||
|
e4551c8f60 | ||
|
2f1454e90e | ||
|
b89f986949 | ||
|
285fb3dead | ||
|
923234eed1 | ||
|
affd617054 | ||
|
84163517c6 | ||
|
83b46cbf71 | ||
|
4689309857 | ||
|
02543fdd0c | ||
|
1f7179b178 | ||
|
e14f1646d6 | ||
|
caba2faa92 | ||
|
ed3b89f005 | ||
|
1c279f97ce | ||
|
b41bcd80ef | ||
|
45d70dd30b | ||
|
4b9648c7c9 | ||
|
092a851bb3 | ||
|
bd71f4a480 | ||
|
bf183af9a4 | ||
|
2b8f0d887a | ||
|
2581bc93e5 | ||
|
8b62783f48 | ||
|
2345a3bdfe | ||
|
ab5cd8f938 | ||
|
b108b1119a | ||
|
b5420fde52 | ||
|
dc58c60841 | ||
|
043fb3f460 | ||
|
34cce04c43 | ||
|
6aae0c5b78 | ||
|
c15406173a | ||
|
e3b3f82c8c | ||
|
007a2d7deb | ||
|
5da40ab45e | ||
|
54a1fd87db | ||
|
797d7c7878 | ||
|
507c47c42c | ||
|
7fcdfe5de5 | ||
|
22b1c48c89 | ||
|
2197a531e3 | ||
|
4799b68972 | ||
|
500d8fc86b | ||
|
89c5d657a7 | ||
|
bc44774116 | ||
|
8a8a5332d7 | ||
|
943c378309 | ||
|
8d3bbb8213 | ||
|
a5e7ce9e1a | ||
|
64a78149aa | ||
|
cf3787edbb | ||
|
89429c54a7 | ||
|
dbaed69d77 | ||
|
faee751395 | ||
|
742e5e039d | ||
|
98579300c1 | ||
|
96ff5eef64 | ||
|
7f5a2c972b | ||
|
dad6404c7f | ||
|
6dcf40f570 | ||
|
43b0422804 | ||
|
55ce0d9d17 | ||
|
895460aea3 | ||
|
7956127b29 | ||
|
6fb2721294 | ||
|
ebb10e6604 | ||
|
db878f4a7b | ||
|
bb992458a3 | ||
|
66add14ca5 | ||
|
0b38513c3f | ||
|
d9ac5b611a | ||
|
e1b99b5e2f | ||
|
7af0818dff | ||
|
296b3d6311 | ||
|
4d03c3035c | ||
|
27c4d2522b | ||
|
4dbd3ea902 | ||
|
2cf57a48dd | ||
|
a091b2c19d | ||
|
89e398fa39 | ||
|
1192314510 | ||
|
583e690b7a | ||
|
a516b00a03 | ||
|
841ad8757c | ||
|
127bd4bf9d | ||
|
a8c3b4126e | ||
|
2360b8282f | ||
|
0dade8624c | ||
|
a9fad77eb4 | ||
|
a5b7a35160 | ||
|
53fc860d61 | ||
|
dc20429bca | ||
|
749312c0e8 | ||
|
ffd14ab2f2 | ||
|
bf332d578c | ||
|
6c22594882 | ||
|
b8e3829fdb | ||
|
c317a69e7e | ||
|
4c60d59123 | ||
|
cee2954245 | ||
|
a8d9263062 | ||
|
7ae9e79235 | ||
|
15c9479ebe | ||
|
03dea585b4 | ||
|
d7df402c42 | ||
|
052ed21e9c | ||
|
36504646f9 | ||
|
60cdbbccae | ||
|
420333e3c3 | ||
|
b639843115 | ||
|
7a114a6ef1 | ||
|
686f27a96f | ||
|
6487fae113 | ||
|
87c287a5e2 | ||
|
e39ef60775 | ||
|
fb3605026e | ||
|
241be6de30 | ||
|
589b535b91 | ||
|
eb6b07e804 | ||
|
5b8c9122a2 | ||
|
08d0ff48c3 | ||
|
aa5af04447 | ||
|
39786c3ad5 | ||
|
5b7eff217e | ||
|
0a6ead90d9 | ||
|
7f2727236d | ||
|
d6644ed035 | ||
|
a2eede2ec9 | ||
|
2fa4ed1fb7 | ||
|
3733a29ee2 | ||
|
62b5eef4a0 | ||
|
377d6367e0 | ||
|
a3b364dbdf | ||
|
ea14913b41 | ||
|
5dd55491b8 | ||
|
28aa12691e | ||
|
5868c91cfb | ||
|
fd034cc1e4 | ||
|
c1bf2754a8 | ||
|
c388e6d2b8 | ||
|
622fa951ca | ||
|
d00dd07435 | ||
|
27fc640a9e | ||
|
4689f20b86 | ||
|
de927d7207 | ||
|
93121892d6 | ||
|
16fc2c3776 | ||
|
c3a7cbc57d | ||
|
0cfeea7c8c | ||
|
82f29c395a | ||
|
e2df4b355b | ||
|
03248244ff | ||
|
74ed0f4134 | ||
|
f05d2906e8 | ||
|
5e39eae84e | ||
|
0ea8669552 | ||
|
2c974b5f3f | ||
|
1631031fa7 | ||
|
0bcb81d3a9 | ||
|
f412c36e23 | ||
|
eae255b0ff | ||
|
1f0f2076a9 | ||
|
0ac36cef28 | ||
|
04db7f0fae | ||
|
e39ae0350b | ||
|
d0a0673694 | ||
|
3c62815fe3 | ||
|
37b6858869 | ||
|
641685a41e | ||
|
7ad23ef6dc | ||
|
5f2a7cb78f | ||
|
edb989fbf3 | ||
|
ff0093460d | ||
|
a00e416a19 | ||
|
77a2ca1ddc | ||
|
61a3368826 | ||
|
55e3774480 | ||
|
c6ab380685 | ||
|
d6467d707f | ||
|
0893614859 | ||
|
dc940d692f | ||
|
e83a108c52 | ||
|
bbd4828340 | ||
|
6de3a33f36 | ||
|
06139cbfe5 | ||
|
cb1bfa0f97 | ||
|
b249a50d8f | ||
|
0432212a34 | ||
|
7203ca90cf | ||
|
5da748a062 | ||
|
09afee55ed | ||
|
43b648e7dc | ||
|
89fcbec43b | ||
|
c850046ea0 | ||
|
7dda953bc9 | ||
|
b8f3fa9c8c | ||
|
42e04012df | ||
|
17f0878707 | ||
|
e4bb6a4652 | ||
|
3cdb85606a | ||
|
fd37e88bdb | ||
|
24564b986d | ||
|
a91bc415ed | ||
|
ccdb81ac40 | ||
|
d7f9e3f0a0 | ||
|
5720589515 | ||
|
70508f52a1 | ||
|
b90c3196a3 | ||
|
1dda10b4f3 | ||
|
0fba0b1a1b | ||
|
df4f3d9eac | ||
|
de4916ccb8 | ||
|
b797a45d4a | ||
|
eeb07d76fc | ||
|
0abace337c | ||
|
c6ff77bdd8 | ||
|
492e0ae345 | ||
|
8549252a2c | ||
|
aae32037da | ||
|
46359c098b | ||
|
fc71d87d2b | ||
|
67dfe6030c | ||
|
19e93440b3 | ||
|
0cb5209266 | ||
|
1553b366da | ||
|
d957cd5344 | ||
|
354f7053dc | ||
|
4d5fcf8985 | ||
|
80f1fe1373 | ||
|
571bc736e5 | ||
|
99016cc5a6 | ||
|
71c9b2f718 | ||
|
79863d830e | ||
|
59ec243c26 | ||
|
5e8da70eae | ||
|
99b6ca5b4f | ||
|
4e4de07e69 | ||
|
1b65efb38c | ||
|
ed0e6181bd | ||
|
f1a7efc97e | ||
|
442de09bbe | ||
|
76dde294f1 | ||
|
4dded13259 | ||
|
c82393d763 | ||
|
2111ea159e | ||
|
c1150824dc | ||
|
edb3a61387 | ||
|
89f67b9bec | ||
|
9131ca1562 | ||
|
92d45a19d1 | ||
|
65af195054 | ||
|
9f47f90c6e | ||
|
472f89bd3d | ||
|
c62d862967 | ||
|
1ceb3c9664 | ||
|
4252a760f0 | ||
|
5721b25c3a | ||
|
586a8ba8e7 | ||
|
1ddf1087dd | ||
|
72a56db5ab | ||
|
646e856b51 | ||
|
e62e61bf71 | ||
|
a3eab71908 | ||
|
dbbd0c5c92 | ||
|
dc6d6024dc | ||
|
9d5d0dbe14 | ||
|
febf3489ba | ||
|
cfb200e793 | ||
|
2b7875571d | ||
|
0a1701eac9 | ||
|
bcd20081d3 | ||
|
f17fe381bf | ||
|
26977f6408 | ||
|
c8c8219c05 | ||
|
92150b78fc | ||
|
e144ebbb93 | ||
|
c31f527116 | ||
|
e68c67a01d | ||
|
ea781b8850 | ||
|
ba7c8d9244 | ||
|
a67b34700e | ||
|
abdf91c691 | ||
|
9b540fd8e5 | ||
|
5ec1ae5f7f | ||
|
bed5b275e4 | ||
|
56af9b2aab | ||
|
01e7850cd3 | ||
|
b399aa25aa | ||
|
0a84ee7488 | ||
|
7c7085c932 | ||
|
bbe9862aa6 | ||
|
7e12ae1bfc | ||
|
080c6d3146 | ||
|
2effc3e267 | ||
|
970e670467 | ||
|
36240de897 | ||
|
e4e1c82ad2 | ||
|
9b521aeef5 | ||
|
1fa93fc8ce | ||
|
12177270df | ||
|
d20ed2247f | ||
|
f7fd9789ba | ||
|
75ba724c28 | ||
|
bc3093e635 | ||
|
5d3d596909 | ||
|
5b4d4d5537 | ||
|
521679c87c | ||
|
2a9e03b61e | ||
|
fb003903c7 | ||
|
fbfb6eb45e | ||
|
58be23ac97 | ||
|
90fcf59a32 | ||
|
e74b24bbdb | ||
|
6b5b8fe8e0 | ||
|
0a5ecec3e2 | ||
|
b6f4c5c7da | ||
|
a6ec2a8c54 | ||
|
2fa8b8d1d0 | ||
|
b786836db6 | ||
|
8e5f0f9c5c | ||
|
99e32869e6 | ||
|
04729c44b4 | ||
|
2a2260de45 | ||
|
a7c3996627 | ||
|
6dbcdad1ff | ||
|
f94bdc496a | ||
|
97369c969c | ||
|
72e68c43e3 | ||
|
473537e6e7 | ||
|
ca3e0b26c6 | ||
|
2716374b25 | ||
|
ace968a4fc | ||
|
e6f3693813 | ||
|
531ed54961 | ||
|
5eb316f5d8 | ||
|
97e21106e5 | ||
|
6e4cb0246c | ||
|
125a940560 | ||
|
a7f847bf3e | ||
|
b3978b641c | ||
|
94dc272335 | ||
|
d456710441 | ||
|
e886ef8c4b | ||
|
86a9375d04 | ||
|
f832e035da | ||
|
5656605355 | ||
|
5c4a992b87 | ||
|
0abf1c71f6 | ||
|
85be2fbf19 | ||
|
69de1d05ef | ||
|
237014e823 | ||
|
85a8c6160f | ||
|
e2535027e9 | ||
|
87d157b805 | ||
|
56d48758d3 | ||
|
abfb358250 | ||
|
657b698e1e | ||
|
8ddf925a8f | ||
|
c8eaa63cce | ||
|
b2edd84b0e | ||
|
bc27ee0deb | ||
|
c5632490f2 | ||
|
89ea7b2a2d | ||
|
b3bcd726b8 | ||
|
293dadc22a | ||
|
040b402b6d | ||
|
5c24596d81 | ||
|
552007cafb | ||
|
d2ef88f638 | ||
|
bce7ae78bc | ||
|
90ee70db23 | ||
|
84c8b83694 | ||
|
112724d881 | ||
|
e2510ed28f | ||
|
768e1d541c | ||
|
a650d695ce | ||
|
0eef07307e | ||
|
d69b3a0244 | ||
|
fa5acd07b0 | ||
|
fa612fe173 | ||
|
e10b30886f | ||
|
441b5ac6f1 | ||
|
96a8762704 | ||
|
09eac39040 | ||
|
b96236cdb3 | ||
|
f6525efe95 | ||
|
9728267eac | ||
|
f097259266 | ||
|
38346a9aae | ||
|
ca0ab38521 | ||
|
d2a4fd5706 | ||
|
afe200c4e1 | ||
|
00f5b94d0a | ||
|
1de92659ee | ||
|
25722d8154 | ||
|
bb4ce9b3ad | ||
|
b524ac7af2 | ||
|
dea6f35b04 | ||
|
f3a2e3b6f3 | ||
|
f91781a060 | ||
|
22fd23643c | ||
|
a1266a3341 | ||
|
34ff7fae9c | ||
|
d45c13bfa8 | ||
|
dccca95c2c | ||
|
fc684ad063 | ||
|
6a0f5f39ee | ||
|
4417c76b13 | ||
|
8799f9bb90 | ||
|
6d673ac942 | ||
|
8d6219296a | ||
|
cb9ec18f96 | ||
|
1883f4d272 | ||
|
93b9c251ed | ||
|
3ad72d96f4 | ||
|
4f977aa51d | ||
|
a2df428afb | ||
|
e45a0ffdbf | ||
|
51355209a2 | ||
|
4b0d01ad72 | ||
|
a655f4b193 | ||
|
7af2c751dc | ||
|
d882133e44 | ||
|
7e7880aea0 | ||
|
18f028fb08 | ||
|
14c97b3ec3 | ||
|
58a382d9b6 | ||
|
2be9b1ff08 | ||
|
1cdd82178f | ||
|
dbf1de2e69 | ||
|
ba986432ec | ||
|
3bb147b0f1 | ||
|
0556defa58 | ||
|
4217d0cd7d | ||
|
5863a29a91 | ||
|
df0de07184 | ||
|
28a5ed6a9a | ||
|
c040ad0850 | ||
|
8007ef6c0b | ||
|
a332c5e5c2 | ||
|
bab7569ed9 | ||
|
16bd0ce7ec | ||
|
61a906e9e7 | ||
|
8c9d48477d | ||
|
9f68ac7bbe | ||
|
4e341582ae | ||
|
37a1271af2 | ||
|
743c4c36eb | ||
|
3f7bd24250 | ||
|
33e41dd500 | ||
|
989b5b0a98 | ||
|
a4ab038aa8 | ||
|
e81f92bffa | ||
|
003075a8a5 | ||
|
b4aca370de | ||
|
c854c99f20 | ||
|
0e0e05e0e0 | ||
|
88595718c3 | ||
|
f104d91595 | ||
|
07c1a0121f | ||
|
67521da5c1 | ||
|
9bd71aeeff | ||
|
59d7efa78a | ||
|
102b7154e0 | ||
|
abbb6793cc | ||
|
7b117081d3 | ||
|
342ecae34d | ||
|
b40551e2df | ||
|
ffa57c3703 | ||
|
630ecb98e1 | ||
|
ae27695d25 | ||
|
45d8b522f4 | ||
|
aa5c2c249d | ||
|
1ae9eedf9f | ||
|
622b9f662e | ||
|
e295eeb893 | ||
|
67df5a433d | ||
|
18e55830b5 | ||
|
7664f6a4fd | ||
|
cf553f2afe | ||
|
6cc0e6d55c | ||
|
a6628cd363 | ||
|
6271133350 | ||
|
55589698cf | ||
|
ee0a226c43 | ||
|
d760b355ec | ||
|
4c9bdcd787 | ||
|
b7a8c871d2 | ||
|
230236d4d7 | ||
|
2372925347 | ||
|
df48539d41 | ||
|
90a1947c88 | ||
|
44d9cc53b8 | ||
|
293e099cb3 | ||
|
e34aa4d859 | ||
|
50110b3725 | ||
|
e5815538e4 | ||
|
4fbc544b16 | ||
|
0aa7cbac92 | ||
|
8b24b7c57c | ||
|
ed4573fe2c | ||
|
7468be8f17 | ||
|
0dcada8e06 | ||
|
b255edc577 | ||
|
4ac1db1247 | ||
|
2c24cff950 | ||
|
2107285a00 | ||
|
095cec4342 | ||
|
53529439c5 | ||
|
3cf9cf98dc | ||
|
43cc7b6626 | ||
|
5defa94902 | ||
|
e0116da559 | ||
|
c385627030 | ||
|
031eb8d6a0 | ||
|
c5f85a365b | ||
|
a6fa15c94a | ||
|
14767f1a51 | ||
|
d34d8cac5d | ||
|
1e0aa55368 | ||
|
bb691aa4ed | ||
|
64e84a3510 | ||
|
62f5c58d83 | ||
|
4cf3172c90 | ||
|
8452c05952 | ||
|
8925317c95 | ||
|
248a3998cf | ||
|
be3142a96a | ||
|
4626921bb6 | ||
|
2593f1b8d7 | ||
|
4e80c395b1 | ||
|
1f59c99532 | ||
|
a77e5a1a12 | ||
|
35f7dd71e9 | ||
|
c4036d7d0f | ||
|
6e0d622a15 | ||
|
0e8f0d1d53 | ||
|
c126d01fe3 | ||
|
6d66476d35 | ||
|
039b95c8c1 | ||
|
30ccddf0d5 | ||
|
024e503657 | ||
|
37e5a8a8b7 | ||
|
592c171557 | ||
|
9df0ae90bc | ||
|
33e06fdf40 | ||
|
cce07acf9a | ||
|
d32f77ebb9 | ||
|
35cb769456 | ||
|
9fdd6e56a7 | ||
|
2a0ba501e0 | ||
|
90d4a2b590 | ||
|
f7581d60da | ||
|
2cc03216bd | ||
|
cd4e679db7 | ||
|
28713bdb38 | ||
|
c0b469fdd9 | ||
|
47db165afc | ||
|
f95401ad33 | ||
|
5209729eb1 | ||
|
31bbb0696c | ||
|
6ab8415198 | ||
|
5a6b538a13 | ||
|
42e63b32e3 | ||
|
072c80f475 | ||
|
fb623cf63b | ||
|
5e4defefb0 | ||
|
8d76053210 | ||
|
b7d8362fb1 | ||
|
73e8563413 | ||
|
312d864936 | ||
|
67caa377a4 | ||
|
8234bd5409 | ||
|
3b8598b54b | ||
|
934d3b5d79 | ||
|
5932589776 | ||
|
19e65965c8 | ||
|
8490c31fb7 | ||
|
f242c4206f | ||
|
88240f6401 | ||
|
7065a098e3 | ||
|
6fc80cd776 | ||
|
4611c65aa3 | ||
|
d6866a6dae | ||
|
68be8ef861 | ||
|
0c298b7be4 | ||
|
6eb8256555 | ||
|
240e3558fa | ||
|
8988650c8b | ||
|
28bad6567b | ||
|
1be948bd55 | ||
|
c2b355c25e | ||
|
d12e881e62 | ||
|
85edc297f6 | ||
|
96d89ddade | ||
|
5b4b4123e5 | ||
|
2a577e0475 | ||
|
6382f98608 | ||
|
a12b9e82f6 | ||
|
5d0e715d9a | ||
|
896c8d17c1 | ||
|
ee4185ab46 | ||
|
7661cfc85e | ||
|
f510f9df99 | ||
|
7cafe396de | ||
|
6bb2ef9238 | ||
|
737d1dc54d | ||
|
aa9aa1f58a | ||
|
9b4d1a1e38 | ||
|
c6815bddac | ||
|
2e2e157fc8 | ||
|
6639201fdb | ||
|
57ac2f28a4 | ||
|
8c5ff663a9 | ||
|
67422db4bd | ||
|
219902a169 | ||
|
ab10119c5a | ||
|
5981823ac1 | ||
|
69054d85e8 | ||
|
3e596f6a8c | ||
|
c3884dfa32 | ||
|
a3d93d17cd | ||
|
c6c45095a8 | ||
|
7d5388edee | ||
|
51b1cab72a | ||
|
e3dcb7107b | ||
|
f7ceb4cf58 | ||
|
e53f28c570 | ||
|
5c083ba16b | ||
|
4d5bfb5cc2 | ||
|
2adeed38d8 | ||
|
21a193e516 | ||
|
926fcb296f | ||
|
f6f441cbe6 | ||
|
b9fa158092 | ||
|
210840444d | ||
|
d92e143a7e | ||
|
087469f1f3 | ||
|
b6c8126589 | ||
|
8570616d97 | ||
|
373ebdbe38 | ||
|
a1410409ff | ||
|
32eab3acff | ||
|
d9b5884834 | ||
|
76a4468b85 | ||
|
361dc29338 | ||
|
dbdd2fb7d0 | ||
|
b07892bb48 | ||
|
6d45beccad | ||
|
f0581285d0 | ||
|
04d4e797aa | ||
|
ceddc01985 | ||
|
1955c846f2 | ||
|
1efde6f59b | ||
|
6af0cf87e1 | ||
|
101fd78cb2 | ||
|
91d432aa56 | ||
|
dde2baf204 | ||
|
96cb278cae | ||
|
51777ed61d | ||
|
2b4c557a3f | ||
|
84321c41f3 | ||
|
f9dfecaf13 | ||
|
d1f73da675 | ||
|
94c7bf47db | ||
|
4e8d653f1f | ||
|
c5b63ca441 | ||
|
ea668d1376 | ||
|
086c70bcdc | ||
|
461c7efc26 | ||
|
c145349af0 | ||
|
df445eb53c | ||
|
eadad19cb5 | ||
|
d410c44b07 | ||
|
9fa9a30c4d | ||
|
bdc8f9aa2a | ||
|
6db28c5300 | ||
|
0dc9fc4ef7 | ||
|
41ec26c927 | ||
|
51def6ee6b | ||
|
377b87071a | ||
|
1782418f92 | ||
|
f3f78f63ec | ||
|
a2cb815454 | ||
|
ef200b1ce6 | ||
|
f6c173a97e | ||
|
ef403108fb | ||
|
8a06dccbbf | ||
|
4590d07e7f | ||
|
ba89429aec | ||
|
ee38031696 | ||
|
8948029dd7 | ||
|
e78ddd4d5a | ||
|
f179dc3ca7 | ||
|
166a6c85fd | ||
|
c7c07a7c01 | ||
|
f083cafcc7 | ||
|
fab3a90d5a | ||
|
a04c54b4d8 | ||
|
388c7afb50 | ||
|
51f2711796 | ||
|
907aa7a844 | ||
|
9695be13c3 | ||
|
f452fc5bc7 | ||
|
106df4cdaf | ||
|
ed6d83c0a7 | ||
|
66480ccb1e | ||
|
7a10f03496 | ||
|
64c168eafc | ||
|
44e516ac65 | ||
|
d018f6d9cc | ||
|
d5e15b05fb | ||
|
59fad5845c | ||
|
545101f7a5 | ||
|
2abd8fe4ee | ||
|
3c578cfda9 | ||
|
6878705676 | ||
|
597b2f38f5 | ||
|
9697d66b66 | ||
|
8906c30f37 | ||
|
9cd859a68a | ||
|
33c6e40b70 | ||
|
5744a7f61b | ||
|
f9a6c45a03 | ||
|
f8e84260b5 | ||
|
5a45bc5e7b | ||
|
80f03ef987 | ||
|
e48887bc6f | ||
|
52272cd290 | ||
|
ac1786585e | ||
|
f4a95c295c | ||
|
142d29ba57 | ||
|
d84c740274 | ||
|
1c413e632b | ||
|
9a1d2c055e | ||
|
803086da57 | ||
|
2a242e357f | ||
|
1647400a49 | ||
|
41a8dd3e28 | ||
|
81690d1ce5 | ||
|
f846e2f6e0 | ||
|
bfc8a3ccee | ||
|
daf334a588 | ||
|
4d0c59649e | ||
|
a1737f8d93 | ||
|
455f244ec5 | ||
|
6f7e27bd7f | ||
|
ea57367473 | ||
|
088c471b78 | ||
|
9fda63cf74 | ||
|
4cf900631c | ||
|
fed79b2fde | ||
|
d2e29fb081 | ||
|
b4b1d54e49 | ||
|
a852a4077d | ||
|
1c0bf710a4 | ||
|
f4e9103b6f | ||
|
f8e95ae483 | ||
|
70df5a0a17 | ||
|
79dac62646 | ||
|
5bd185e831 | ||
|
687749460d | ||
|
193cd67d6b | ||
|
8d54772389 | ||
|
0f8acedf02 | ||
|
ddf3bb7c04 | ||
|
3a8f3e01b6 | ||
|
167a3fbc11 | ||
|
f9d436cd21 | ||
|
2e7d363f2c | ||
|
1534505652 | ||
|
9e5e1f568b | ||
|
65579c0236 | ||
|
be045dad9b | ||
|
885c22676b | ||
|
a1186f052d | ||
|
0e76d66f24 | ||
|
2b523a36c5 | ||
|
723dd2bcde | ||
|
a900593c88 | ||
|
756dc1e95e | ||
|
68faaaba5f | ||
|
48fdb567cb | ||
|
bd5a0616c4 | ||
|
0690e68a83 | ||
|
fb99b5ce9d | ||
|
aa8dfa88e1 | ||
|
99941972a3 | ||
|
8a5609718a | ||
|
aeefdeaef7 | ||
|
7b4e536e86 | ||
|
52f733626e | ||
|
c8c68fb75a | ||
|
1364880812 | ||
|
ddc1f34c30 | ||
|
cdca07d829 | ||
|
59b7e25389 | ||
|
87ab8f036c | ||
|
b151b6fe69 | ||
|
8f911206f7 | ||
|
3496725db6 | ||
|
ed588decc6 | ||
|
50e0336018 | ||
|
d07e6cb1d6 | ||
|
ca86f18e7d | ||
|
72e94b3307 | ||
|
7c33c91d59 | ||
|
0f1197c14b | ||
|
4858c0c484 | ||
|
5865b4848d | ||
|
c9af7dc9e5 | ||
|
6e023e6ea3 | ||
|
9176e1f53b | ||
|
0dbe2a91a8 | ||
|
8afac3a92c | ||
|
07a0170f34 | ||
|
1dc67b2874 | ||
|
f09e577885 | ||
|
2c58b8a886 | ||
|
cb53cd05e6 | ||
|
982d59d45d | ||
|
b76a14d51d | ||
|
e8231767ec | ||
|
2b7dabeb6e | ||
|
dde3a0366b | ||
|
8e071db074 | ||
|
93422eab55 | ||
|
74e07b63de | ||
|
7dd0b3a5da | ||
|
b59f20482e | ||
|
98aa7a2c54 | ||
|
7527c61af5 | ||
|
bc6492e352 | ||
|
5c4a2461b8 | ||
|
183edee4ac | ||
|
c513082071 | ||
|
23a6dfac3c | ||
|
e368106932 | ||
|
785981ce58 | ||
|
60bbb9b520 | ||
|
fb81570678 | ||
|
56b82bbc8b | ||
|
05217bb1a2 | ||
|
075fa315e7 | ||
|
fc5f0c9863 | ||
|
13e89d027c | ||
|
ea8f35b743 | ||
|
9365a3bc75 | ||
|
363095f2fe | ||
|
b57b6c04cc | ||
|
e1d77d6e10 | ||
|
da51f6e56f | ||
|
5d0f82c3c6 | ||
|
1878a0c4b0 | ||
|
b538fabdef | ||
|
01716e0d51 | ||
|
7cd3f3cead | ||
|
9d9b5edc9c | ||
|
09a0ca659e | ||
|
1d189d112e | ||
|
829b7cb712 | ||
|
fb8267d85e | ||
|
d842078997 | ||
|
7f574949a4 | ||
|
caeb59a9ae | ||
|
ea95de7d9d | ||
|
52f2ee6e79 | ||
|
ad3d20b342 | ||
|
4fa4f13813 | ||
|
f5f01c0c3e | ||
|
3b9e8e669f | ||
|
99d90bb665 | ||
|
9d8c423b98 | ||
|
d24b2a5a69 | ||
|
aa63632fff | ||
|
d86f5c4fbd | ||
|
0a69752d20 | ||
|
f6ebdd1a3f | ||
|
e2f222b08f | ||
|
50924d62cb | ||
|
da5e8b09d9 | ||
|
fff1e2cfa7 | ||
|
1544e5ed9f | ||
|
4912affbe8 | ||
|
c52ab47185 | ||
|
f082a3f768 | ||
|
27c229a146 | ||
|
43c2b81604 | ||
|
2a133f2c55 | ||
|
4570bc2729 | ||
|
8702a35467 | ||
|
07f80500fa | ||
|
97fc4257a0 | ||
|
25f1b7701f | ||
|
6b889aeeed | ||
|
8e0dcb204f | ||
|
0dc000183a | ||
|
90e1028d2f | ||
|
ed3737c1f1 | ||
|
c9dc69bed6 | ||
|
cd7e41bd5b | ||
|
c46d2f8f9d | ||
|
eb1317a59a | ||
|
98325e1cfb | ||
|
356b7df534 | ||
|
2340813149 | ||
|
8923817b2f | ||
|
7aacf1f5a4 | ||
|
405667fa83 | ||
|
0a3162915f | ||
|
8bcbb64a01 | ||
|
ceafe5ed84 | ||
|
f788fea095 | ||
|
88094002d3 | ||
|
e57a5a6f82 | ||
|
d1ceb2e561 | ||
|
ec2bb616e1 | ||
|
bf56a2c7c4 | ||
|
52b9f4ef3b | ||
|
7845fdbd9c | ||
|
6d2da94f8a | ||
|
20deb01e01 | ||
|
3d9fc6c865 | ||
|
1d5473eece | ||
|
4b4db3802a | ||
|
5eeb848974 | ||
|
5df789bd05 | ||
|
74959cf354 | ||
|
39ceff3d6e | ||
|
fa501e9c93 | ||
|
94c90cc49a | ||
|
d8e03b87d6 | ||
|
f06c17cccc | ||
|
ffff1d5fff | ||
|
fa389f18cd | ||
|
7d5aeacb1c | ||
|
0df51c37d1 | ||
|
bb2581612a | ||
|
3844ce9b60 | ||
|
0c5fa5892c | ||
|
b04a9b9296 | ||
|
2bf831132a | ||
|
6e62b108a9 | ||
|
6262e06afd | ||
|
b1f4bb722d | ||
|
c5db8f25d3 | ||
|
965b1ff32f | ||
|
7f7403cf72 | ||
|
088ca6ce7c | ||
|
5df160ffb9 | ||
|
80efe70247 | ||
|
6c4c666d9b | ||
|
1175a18ccc | ||
|
19f662c196 | ||
|
78a6d23659 | ||
|
f4dc8b12f7 | ||
|
5cff911035 | ||
|
b3fa0c8dac | ||
|
5f7ed71937 | ||
|
b1a73f5c74 | ||
|
318e7d5b57 | ||
|
a939433bd2 | ||
|
42be1a429f | ||
|
96b8100a78 | ||
|
e2b0c4d116 | ||
|
b4cdb14b9b | ||
|
ee7d6fb3af | ||
|
286474ca76 | ||
|
5cbe04acab | ||
|
585c789124 | ||
|
d37680610b | ||
|
e6c1c2a658 | ||
|
36736f82d4 | ||
|
7b72b0c762 | ||
|
184acd874e | ||
|
8a761ce2bc | ||
|
bc8981cbb2 | ||
|
26c9cd3cb2 | ||
|
25f66f96b6 | ||
|
0948ed7a87 | ||
|
bc64c9566c | ||
|
d068956b69 | ||
|
1e5bc143be | ||
|
ec72a4b68c | ||
|
1f4af537c0 | ||
|
91c4191985 | ||
|
1d6e66d937 | ||
|
79d31895fb | ||
|
1d4d254496 | ||
|
528d882ec4 | ||
|
2471d4098f | ||
|
33b36eaf07 | ||
|
27bf0d8a16 | ||
|
b5372ade3c | ||
|
eec9957831 | ||
|
1b7c9b0775 | ||
|
a4d9434290 | ||
|
e001988dbe | ||
|
54c9709bf0 | ||
|
cc0fb833fe | ||
|
96ebad7568 | ||
|
3fb74be4ba | ||
|
86acca5e1c | ||
|
cb2b45bf04 | ||
|
3652b8270a | ||
|
0a05ef36a6 | ||
|
11c864e20d | ||
|
c46870d296 | ||
|
6e54514013 | ||
|
4200064eab | ||
|
e72742f1f7 | ||
|
253bf4df6a | ||
|
dbc4417b19 | ||
|
74bbebeb01 | ||
|
40c0eebd38 | ||
|
5d6fabf528 | ||
|
928b253c81 | ||
|
b4c7f4f57f | ||
|
fc09968062 | ||
|
89755fe3c2 | ||
|
8fd7a9e1f5 | ||
|
5e6d1779cb | ||
|
c580f4ddcb | ||
|
7be2dab9d5 | ||
|
86f1697934 | ||
|
d578b4959d | ||
|
9f5eeed309 | ||
|
14ea4ee1d3 | ||
|
6d523835ae | ||
|
e18be3160e | ||
|
02e14f88d2 | ||
|
096c4c8f2b | ||
|
d050a1bd53 | ||
|
924c2705b2 | ||
|
6c86cc8ab8 | ||
|
6ef5f28f81 | ||
|
dc21c79f2b | ||
|
beffcd990c | ||
|
b88ff0a19f | ||
|
8d93413a5d | ||
|
c622498e50 | ||
|
a0ea0415dd | ||
|
a39e0f13be | ||
|
190d9244cc | ||
|
d56df4fdaf | ||
|
7226944dfd | ||
|
9d8ab43f91 | ||
|
7aee687e6b | ||
|
4138c580bc | ||
|
a3f12cd4de | ||
|
a208cba4e8 | ||
|
8d0b6702c0 | ||
|
9abd1b79e1 | ||
|
bd725eee86 | ||
|
88c18bd2e6 | ||
|
9dc32c2bca | ||
|
bdd287559c | ||
|
194f785939 | ||
|
086568bddf | ||
|
3506c0e501 | ||
|
93eb31f7a0 | ||
|
934117bfe4 | ||
|
7c33f94836 | ||
|
74d0eb40c5 | ||
|
23987c0fa1 | ||
|
cc1b71651d | ||
|
5e1892f383 | ||
|
93d1f2255e | ||
|
727ced0684 | ||
|
0ff13edb58 | ||
|
0341ced3f3 | ||
|
4f6c95b0ca | ||
|
c4ee6836fa | ||
|
55ed406746 | ||
|
f93e77e77c | ||
|
3ac6da7db1 | ||
|
3e93442a43 | ||
|
a617c801bc | ||
|
7d9ab27b9d | ||
|
c686c241c0 | ||
|
a1889e2a23 | ||
|
37a1483359 | ||
|
80811c9cca | ||
|
14d342c3e0 | ||
|
394105b860 | ||
|
1752aa63da | ||
|
9636fd1b76 | ||
|
16f69ad718 | ||
|
03ca825639 | ||
|
c995586063 | ||
|
8dd738629a | ||
|
a286228b20 | ||
|
f14603ca4d | ||
|
4e33d2b481 | ||
|
b74b4eb053 | ||
|
57dc5b6fc0 | ||
|
5febb595e9 | ||
|
1a44d86c59 | ||
|
2bea70a0a6 | ||
|
41f90c697b | ||
|
7d2b5a28e3 | ||
|
7b1471ffe8 | ||
|
8b3b4d983f | ||
|
ac971685b3 | ||
|
4034eb7655 | ||
|
ccd8d4ac30 | ||
|
84f1d1107a | ||
|
c0637a744b | ||
|
701ea77a79 | ||
|
b68f3eb772 | ||
|
47e8bc8e43 | ||
|
51b1de041e | ||
|
eb137cf576 | ||
|
897ba6591d | ||
|
10eb819c75 | ||
|
aa4fcebdc7 | ||
|
ac166ce32e | ||
|
f88ff698a4 | ||
|
dcad94df4c | ||
|
a699a12161 | ||
|
49a1f84e16 | ||
|
23675b4901 | ||
|
950c56d7b8 | ||
|
4b166828b8 | ||
|
c1698aa634 | ||
|
ae6f7cc454 | ||
|
506c736d4f | ||
|
0dbb866918 | ||
|
e82f807d7c | ||
|
b586ecdf92 | ||
|
ff8029402d | ||
|
92361ae811 | ||
|
cba8dc8a75 | ||
|
ef1e5eacbd | ||
|
7ba47c47bb | ||
|
f8f3a3b3cc | ||
|
b6e79fd9e0 | ||
|
b39f511755 | ||
|
43d1f61d28 | ||
|
37e3f481dd | ||
|
5acf053f8b | ||
|
b3038787ea | ||
|
b9305f6ab7 | ||
|
21cbf05362 | ||
|
a3718803a0 | ||
|
6742142ca5 | ||
|
b7e06a2282 | ||
|
4c65bbbb8f | ||
|
105da3f814 | ||
|
4a5b72a5ab | ||
|
2d6c46b83c | ||
|
6f5787b2c4 | ||
|
f96711bac3 | ||
|
ddd246a945 | ||
|
d14d38dabd | ||
|
3ca876c574 | ||
|
6d2f4b91a9 | ||
|
6739261a7e | ||
|
72c45d9ea9 | ||
|
75df8a0e8b | ||
|
f3c28afedd | ||
|
80ab797d3a | ||
|
d6dff5f86a | ||
|
4a715c30fd | ||
|
65bb8bdb5e | ||
|
5237e9c2ed | ||
|
6bab2f70b9 | ||
|
a0a41b1b5d | ||
|
f07dc5ae6d | ||
|
8cb6c2b51b | ||
|
1f87bd8cf6 | ||
|
a2aeca7b66 | ||
|
e394c4fe1d | ||
|
5c655eeda7 | ||
|
d932448563 | ||
|
7f782b6af0 | ||
|
a3f4264790 | ||
|
b818a62d74 | ||
|
e69cdfb7b5 | ||
|
45da317e15 | ||
|
c21cf55b86 | ||
|
2dfdc19c9e | ||
|
012134001a | ||
|
0f869b0545 | ||
|
774971c98c | ||
|
25b6e7092f | ||
|
62412b8551 | ||
|
374d513090 | ||
|
a72463dbdb | ||
|
b159d4e0ec | ||
|
1402a3dfae | ||
|
64865bc10f | ||
|
ef00ac6f51 | ||
|
7a7c66b0ec | ||
|
0166c29625 | ||
|
9c35d53694 | ||
|
8701f9a7b0 | ||
|
427c2cd164 | ||
|
8c0dfc1936 | ||
|
392e89fcbb | ||
|
44c1947740 | ||
|
5719eb28f7 | ||
|
ce7027d11f | ||
|
3ba98e2192 | ||
|
1ae3592e45 | ||
|
dc04d025af | ||
|
5262d3b1f2 | ||
|
7d9afce13b | ||
|
c99b71f354 | ||
|
0133bec07d | ||
|
bd7bde9bb0 | ||
|
a6e5d126c3 | ||
|
8e7ea4695b | ||
|
cc5ea80aa3 | ||
|
d1026a64ba | ||
|
dda44500c5 | ||
|
7b81bd831f | ||
|
44312478fa | ||
|
92f56c63ac | ||
|
3d69063bf6 | ||
|
4e03c754e7 | ||
|
87eaa91410 | ||
|
8f5c92b143 | ||
|
77cc1a95bb | ||
|
27cb0386a3 | ||
|
42d6284cf7 | ||
|
893e9f2731 | ||
|
7a6339ae38 | ||
|
fbb27b1fb2 | ||
|
7f8dc8bb1b | ||
|
c47b42d7c1 | ||
|
3bdcf7857f | ||
|
80a25e4b38 | ||
|
4d7e5b4e5d | ||
|
659ae0dcca | ||
|
7a52168cd8 | ||
|
566953d5e1 | ||
|
a849af8a48 | ||
|
cc235aac38 | ||
|
ec24bf8401 | ||
|
9ebb096025 | ||
|
f8b925c9ad | ||
|
a20d547814 | ||
|
3dcb874e08 | ||
|
6b952c4236 | ||
|
9e1a94266e | ||
|
179f093c26 | ||
|
6438241144 | ||
|
c185618224 | ||
|
b0e7b82dd9 | ||
|
cae0e02bc6 | ||
|
83c1b7aec5 | ||
|
78d0ab1aa2 | ||
|
21122f0137 | ||
|
c282c2fcc4 | ||
|
e6acc0416a | ||
|
ea6547cb75 | ||
|
e839e698f9 | ||
|
b7603bef19 | ||
|
fb221e4ca9 | ||
|
1f8c09779d | ||
|
f9e73d2a6f | ||
|
08eb0b91b6 | ||
|
f2c5a8e2f1 | ||
|
55ebf405a0 | ||
|
92d4c1d09e | ||
|
3454bbfd65 | ||
|
b2dd5495bc | ||
|
69d4e330cf | ||
|
9eff857416 | ||
|
37dbb4d06f | ||
|
a9895c55f9 | ||
|
682b0dd8f4 | ||
|
72a30260d8 | ||
|
00dbddc1aa | ||
|
a365ab11d2 | ||
|
48021a227f | ||
|
0a618f6f4d | ||
|
d0b2ee7fc1 | ||
|
b411e2250a | ||
|
740b73276f | ||
|
e0348f9c04 | ||
|
2e704ac01a | ||
|
00f86ca0f7 | ||
|
549f5e4655 | ||
|
ebdc539da7 | ||
|
2f50cca480 | ||
|
0a944244cf | ||
|
9aff0dfed0 | ||
|
40ac4509ca | ||
|
4e7031e96d | ||
|
0af1bf11c8 | ||
|
d579ba1eda | ||
|
f327d7b4d9 | ||
|
04226106a2 | ||
|
a138ee7e83 | ||
|
1cc043d7a9 | ||
|
a8a6baf964 | ||
|
243a099858 | ||
|
5c29b918df | ||
|
feb715a08b | ||
|
1b4c477ddb | ||
|
8b659dbd77 | ||
|
8721d4ed7a | ||
|
14ad091e83 | ||
|
ce013489ec | ||
|
8c21a700ba | ||
|
87ffa5d7ab | ||
|
7198b441e0 | ||
|
3d211c415b | ||
|
4061731245 | ||
|
96fdb9b766 | ||
|
1aa3f9d69f | ||
|
dea89c4e22 | ||
|
c6af5131b0 | ||
|
9986717671 | ||
|
5cad2ad174 | ||
|
24fd2d9730 | ||
|
0397ff8b22 | ||
|
1a25862086 | ||
|
b771020f88 | ||
|
b42cf0c797 | ||
|
8076333795 | ||
|
b0a2c10e11 | ||
|
303bbc42f4 | ||
|
10e93bb01f | ||
|
a948305e7a | ||
|
26280e4aba | ||
|
55bbe1954b | ||
|
2cbb82eb04 | ||
|
96134003e1 | ||
|
599a3f9b96 | ||
|
688d277b30 | ||
|
329c68f610 | ||
|
6fb333f200 | ||
|
410a924495 | ||
|
53cc9e9bed | ||
|
ccad046eb6 | ||
|
954c3b9272 | ||
|
9cb89725c9 | ||
|
830d0f3b21 | ||
|
8248fbb231 | ||
|
dca2a4e9c2 | ||
|
21d4807206 | ||
|
5e22a862b7 | ||
|
bb440b683a | ||
|
d959b3e234 | ||
|
aeff948c9a | ||
|
7945d2ea62 | ||
|
af2546bc58 | ||
|
3a19faa5ff | ||
|
bbe1a843ef | ||
|
91e7485ecc | ||
|
6c00dd6f39 | ||
|
ada78d140b | ||
|
6aca4e8272 | ||
|
dd093daf91 | ||
|
9ab55ccec0 | ||
|
71a015f2aa | ||
|
b0de2a388f | ||
|
40610830da | ||
|
60bc27c616 | ||
|
2207f09ce2 | ||
|
fe523e1f3f | ||
|
9e9104578c | ||
|
4e6919a6e5 | ||
|
d71fa65359 | ||
|
75d3f24835 | ||
|
2b7f94c00f | ||
|
cd73a047ef | ||
|
57e7119c0d | ||
|
8ad114c5e5 | ||
|
340493a0b1 | ||
|
01e1e5ac3b | ||
|
cb9f7a0664 | ||
|
3e4b77757e | ||
|
110d05f645 | ||
|
36f22ba069 | ||
|
b7d804e949 | ||
|
f576f78b4a | ||
|
dfe5752411 | ||
|
b1a8a5521e | ||
|
323195f4ad | ||
|
c43ba6b3c7 | ||
|
b552c2bd0c | ||
|
ae9614ba36 | ||
|
871ec6cfbc | ||
|
3c7dca37f5 | ||
|
8d0192c1eb | ||
|
ac5a3fae9b | ||
|
9e01f4c9a3 | ||
|
8acb25f577 | ||
|
eec40080a0 | ||
|
18489161c6 | ||
|
4da419cf75 | ||
|
d63576f495 | ||
|
f0213f9a8e | ||
|
e8d0aff333 | ||
|
79f5e36edb | ||
|
a872763413 | ||
|
55ebb04f03 | ||
|
6d312f0230 | ||
|
240a8a50d3 | ||
|
672a4b93ba | ||
|
ea4155e5fa | ||
|
d12b99883b | ||
|
1498e013d0 | ||
|
a1e985a1ca | ||
|
cd44dc7beb | ||
|
db21ae3af1 | ||
|
8c146ce231 | ||
|
703cea6173 | ||
|
1ce84f9bb2 | ||
|
48bfe92740 | ||
|
e592b27f77 | ||
|
1107b84949 | ||
|
7a03df946d | ||
|
d8a3fc0be0 | ||
|
2601d16efb | ||
|
098a531de8 | ||
|
239116eec4 | ||
|
e966641d14 | ||
|
e9fe7dcf54 | ||
|
7086bd32ee | ||
|
50bfbda79a | ||
|
50df67e751 | ||
|
247266b969 | ||
|
0bffc3d10e | ||
|
a882a39937 | ||
|
6b1fea602e | ||
|
afa24aa122 | ||
|
a5eb1bcc20 | ||
|
54aaee8e42 | ||
|
7934d77def | ||
|
cb8601676d | ||
|
98d9a9c648 | ||
|
da8c27c286 | ||
|
de1c296d28 | ||
|
f076cdb832 | ||
|
a192b309f3 | ||
|
c52d48d4db | ||
|
5edc3bfd33 | ||
|
cd4241fac8 | ||
|
3662ab2524 | ||
|
57986c0e1e | ||
|
5bf7b9b8f3 | ||
|
950dae0437 | ||
|
05ef537de0 | ||
|
68d7ce1968 | ||
|
59eca8d748 | ||
|
06304b30c9 | ||
|
03962352df | ||
|
1c03c9168b | ||
|
b6be92e40b | ||
|
06d4abf1ba | ||
|
9349e50bb4 | ||
|
bf672272ce | ||
|
b9fbb3a725 | ||
|
64d52e2113 | ||
|
e0475ce84e | ||
|
1785769916 | ||
|
c5e43f8da5 | ||
|
8a42cea978 | ||
|
8c69a8f1fb | ||
|
9194537085 | ||
|
91397bf8a5 | ||
|
a355001d13 | ||
|
a6046bd5bb | ||
|
7e4f2c6bdc | ||
|
958f4aa8e8 | ||
|
74dac18e47 | ||
|
bcb4808c96 | ||
|
64c5181c14 | ||
|
754be75dbf | ||
|
6f333f2b55 | ||
|
7f77347ea4 | ||
|
5d70fe053d | ||
|
8fda11ec3a | ||
|
a5b6ce6114 | ||
|
0d3fb79c05 | ||
|
e70d897282 | ||
|
c638823373 | ||
|
f8399fee2f | ||
|
52e63effea | ||
|
a219a8c911 | ||
|
de39ec3c97 | ||
|
665a855548 | ||
|
91d2cbfa0a | ||
|
68b0f71d26 | ||
|
91c89d90a5 | ||
|
980e3cb82f | ||
|
eefb1cfe5d | ||
|
5b0746a8ef | ||
|
0faa8b3231 | ||
|
450c72035f | ||
|
5a16e78b54 | ||
|
6d0c71ef30 | ||
|
e015f470dd | ||
|
d142413745 | ||
|
e339e1182d | ||
|
9bee3eba76 | ||
|
866c946b92 | ||
|
8f9a246f48 | ||
|
4668b0732c | ||
|
9ed30fbcca | ||
|
1fab30ef80 | ||
|
62eba1e820 | ||
|
78703ab370 | ||
|
f4e0f74a6d | ||
|
6f44944ffd | ||
|
074944247d | ||
|
593ed12d91 | ||
|
c0f4a35cfd | ||
|
800016b430 | ||
|
937235c4fd | ||
|
4b6ac96a8d | ||
|
502e9c7be4 | ||
|
91b0fd9517 | ||
|
6a3f295b1f | ||
|
d9b4b0e0f3 | ||
|
c342940b5d | ||
|
b19700221f | ||
|
ef041d1603 | ||
|
e47dd4a83e | ||
|
9ebe8d63c8 | ||
|
94d81bd562 | ||
|
34b2f4736e | ||
|
f8daacc19a | ||
|
d77efb611e | ||
|
de8dcf9a72 | ||
|
12d34707b7 | ||
|
ab631060a0 | ||
|
f496096ce1 | ||
|
fc2055cd93 | ||
|
ca22d87290 | ||
|
d6ba7298d4 | ||
|
ea11e8c62d | ||
|
a7fc5975c1 | ||
|
09813cb1d8 | ||
|
9e69257b0d | ||
|
e65096ee7a | ||
|
a1d4aa66bc | ||
|
6c941eebea | ||
|
435d9e47e3 | ||
|
5c12e664a9 | ||
|
46422ff783 | ||
|
3a13286585 | ||
|
c98c8b1ded | ||
|
de0b5772bf | ||
|
dbf62ae205 | ||
|
7962e4050c | ||
|
6bf9889429 | ||
|
7f8b9ef1f7 | ||
|
e91fffd005 | ||
|
7314fd7252 | ||
|
247a69aaec | ||
|
d78ac3f157 | ||
|
315584ef51 | ||
|
57e539ed41 | ||
|
db1babd5be | ||
|
bb63c5c86f | ||
|
82d6f2150b | ||
|
5f177108d1 | ||
|
46aa446a61 | ||
|
0883f7087b | ||
|
e782262572 | ||
|
2ba14d656e | ||
|
0c2848c418 | ||
|
47ef28f88f | ||
|
e81bd1b7f0 | ||
|
929eb45699 | ||
|
4456ba0f6a | ||
|
d6329a83d5 | ||
|
203baa4541 | ||
|
e13406cbf4 | ||
|
df213ac0d5 | ||
|
4d7db045e9 | ||
|
849b744185 | ||
|
7161e8fed9 | ||
|
1105d76861 | ||
|
9b6d738ab1 | ||
|
d586c1f67a | ||
|
fff4dd7e94 | ||
|
c2d9585150 | ||
|
3586dde480 | ||
|
d6b92e5786 | ||
|
ab24dcc290 | ||
|
189920eab9 | ||
|
83499176d9 | ||
|
5294c31997 | ||
|
f1354632a1 | ||
|
7fe27e903b | ||
|
f80768cae0 | ||
|
702dbbae54 | ||
|
fc3641b499 | ||
|
e59d47eac8 | ||
|
d99bdcf036 | ||
|
4616c51e19 | ||
|
d4c439b277 | ||
|
0af07bcf49 | ||
|
a41dfa9ae0 | ||
|
09e2157639 | ||
|
6f394128d4 | ||
|
bd03df8af0 | ||
|
ea61c7a5db | ||
|
a864328ecf | ||
|
2b87d20290 | ||
|
b68273e592 | ||
|
5c66f9117f | ||
|
64e2b91482 | ||
|
ecc417069d | ||
|
b461147389 | ||
|
1d0d4ca147 | ||
|
2103d5c3ed | ||
|
a21bca7cf4 | ||
|
200da7d22c | ||
|
a114cf5c2e | ||
|
4bc5881e9a | ||
|
a9d413728e | ||
|
e10d34cdfc | ||
|
96b9ffc847 | ||
|
9d850cea14 | ||
|
0e7329bcec | ||
|
b564f090f9 | ||
|
ec099dd009 | ||
|
0577a0dbc5 | ||
|
1bba985124 | ||
|
8bcb5b00ba | ||
|
d0fa615f32 | ||
|
ef6cffd9d9 | ||
|
aa4234a38c | ||
|
9b794c00ea | ||
|
03289293c3 | ||
|
0736ba7159 | ||
|
44ac385e8b | ||
|
512b483b6f | ||
|
5a9755da9b | ||
|
be39c5ba99 | ||
|
0c5b645e86 | ||
|
bcb2af2861 | ||
|
906bba7d75 | ||
|
b15531fe68 | ||
|
42e83ae643 | ||
|
b55f7aef7f | ||
|
04503200e5 | ||
|
2da7cadefa | ||
|
b8ea322541 | ||
|
a172ab158e | ||
|
5c13353fb2 | ||
|
d6645b8a91 | ||
|
029b8d5950 | ||
|
14c094d050 | ||
|
f196dc9e35 | ||
|
e7bdf4717d | ||
|
f479212410 | ||
|
ffb8b0a619 | ||
|
1f693ea121 | ||
|
3f545da9f8 | ||
|
f31d4ddffd | ||
|
2e79ce26cb | ||
|
ad1b5af4e5 | ||
|
feb551a02e | ||
|
a8d707b462 | ||
|
3bf5a4e83f | ||
|
50344fa24a | ||
|
bab1c92c70 | ||
|
8f73f53c95 | ||
|
9a51af46ee | ||
|
bb4d02e413 | ||
|
22ce3e2e29 | ||
|
acd364b71c | ||
|
ebaf9dd275 | ||
|
d2d89adbdd | ||
|
58a2dfbc4d | ||
|
173fc1dcef | ||
|
dd8bb6d08b | ||
|
dc7092e1eb | ||
|
c638151b73 | ||
|
978a58105c | ||
|
dcc439c2e3 | ||
|
a895dacd4e | ||
|
5a748fb4e5 | ||
|
fee67326ad | ||
|
a47901370b | ||
|
d4d917f350 | ||
|
aed8b083b5 | ||
|
e6ab6f38ba | ||
|
5934e5a57b | ||
|
29d63cdf97 | ||
|
62e6b22789 | ||
|
0ed1819143 | ||
|
406b5739be | ||
|
fbbca8e283 | ||
|
0f7abcd59b | ||
|
2164b34bf9 | ||
|
b0ebc6fa14 | ||
|
6daa79ec12 | ||
|
acd570b2b3 | ||
|
0d65c9da4a | ||
|
67dd062a2f | ||
|
0c0bcb44d3 | ||
|
b213cb3974 | ||
|
5b187935dc | ||
|
d70d07366f | ||
|
9a0bd05c4c | ||
|
666075a87e | ||
|
b28f26916f | ||
|
a2ad15be0d | ||
|
a630312074 | ||
|
bc538c71fc | ||
|
880540f4b8 | ||
|
8a8b904a29 | ||
|
ebd4dbc6c6 | ||
|
1f9ea7ed1b | ||
|
5b0d554f7b | ||
|
71c050375b | ||
|
1f22ce6061 | ||
|
3ae434c31e | ||
|
063871e549 | ||
|
2d2255e9af | ||
|
93e967c3b3 | ||
|
b71577cc52 | ||
|
27cb966991 | ||
|
457cb1dc84 | ||
|
7c733662e2 | ||
|
52474a0b8e | ||
|
2a6b358717 | ||
|
c5d252ba4a | ||
|
9b1f56c968 | ||
|
13d456fda1 | ||
|
a9e3d489d6 | ||
|
707a93e9f9 | ||
|
bb7dd23738 | ||
|
59206c387e | ||
|
20f1526c7d | ||
|
addfe85f08 | ||
|
58177060a4 | ||
|
3027e6bc0d | ||
|
41e01e9806 | ||
|
0835cf0ea2 | ||
|
1f7fbcf52c | ||
|
2802aed79c | ||
|
78498b7019 | ||
|
1ca23b35ab | ||
|
8b91727364 | ||
|
8f61f6d0f9 | ||
|
180d1ca63a | ||
|
e59669c949 | ||
|
687e6ccdd3 | ||
|
3bc45395cc | ||
|
e95aa617b6 | ||
|
637ab1076a | ||
|
a13099bde3 | ||
|
1600820dea | ||
|
993c5f4b4a | ||
|
af27dd6fe4 | ||
|
02f37fa2d9 | ||
|
2b4febe337 | ||
|
9f35096fa9 | ||
|
39fa26b2f3 | ||
|
7de7fe7823 | ||
|
5053c19599 | ||
|
f35cf03030 | ||
|
91a08b9fdd | ||
|
cef254fa8c | ||
|
e2b115a15c | ||
|
f6cf3de1c4 | ||
|
ef5ba0375a | ||
|
dfa9e435af | ||
|
fc0e7b1132 | ||
|
b99252baae | ||
|
7196046e2f | ||
|
96bcc7e332 | ||
|
d5dbd8cd68 | ||
|
bce62056d9 | ||
|
331cca37e2 | ||
|
a1cff862c9 | ||
|
79126f3b4a | ||
|
77d6594ecb | ||
|
7625935222 | ||
|
0f01e31cc3 | ||
|
1eb19ca1ec | ||
|
6222c952c3 | ||
|
b9c983b4d6 | ||
|
208ee935c8 | ||
|
ec01893e9c | ||
|
f4cc14f438 | ||
|
e5b09ba2fd | ||
|
105dcd73e4 | ||
|
63cb312c7f | ||
|
85d1dba1ef | ||
|
e1c237a8e4 | ||
|
9608d6fc71 | ||
|
7479a7db58 | ||
|
6e3378d79f | ||
|
1375d694ac | ||
|
045336042f | ||
|
0a1425d8d8 | ||
|
7daf995e0d | ||
|
8b05db3510 | ||
|
c2fd6745ee | ||
|
a747abcb73 | ||
|
92a4b09b05 | ||
|
6c76731408 | ||
|
3d88b7f289 | ||
|
d3e6f78fdb | ||
|
16ddd21a5f | ||
|
6c43fa8f72 | ||
|
8a4e5dfb68 | ||
|
f83c4c51c7 | ||
|
7a726e2740 | ||
|
5415d1589e | ||
|
3c000e70e3 | ||
|
06b2f12b10 | ||
|
1b23c430fc | ||
|
ca894935f2 | ||
|
23bfad6c40 | ||
|
850c441c70 | ||
|
53f8e1b3b4 | ||
|
dc434bdff0 | ||
|
0afd490aec | ||
|
c8520c45cb | ||
|
ec6b47ded0 | ||
|
36d94b894a | ||
|
a18a11da92 | ||
|
4bad973877 | ||
|
38e12c2405 | ||
|
f9a7cc94e1 | ||
|
3382077768 | ||
|
b9cbc87882 | ||
|
d05d5ac10d | ||
|
a1fe30e210 | ||
|
56ca19dc9b | ||
|
969674a5ce | ||
|
d2a418b368 | ||
|
081859f334 | ||
|
1cc06dd9e6 | ||
|
d642082058 | ||
|
d3aebd0b79 | ||
|
7b90f095ff | ||
|
df6c1ae059 | ||
|
5578c70cd6 | ||
|
3e2c93f5a0 | ||
|
471a4e981a | ||
|
6b4112527f | ||
|
3a9f8a7296 | ||
|
bbb3e5afcc | ||
|
4861e48059 | ||
|
c0b9214138 | ||
|
9266df43a4 | ||
|
dac0bee95c | ||
|
708f4e9bb8 | ||
|
0b9e9eb0e4 | ||
|
743c43f768 | ||
|
7b51eddc03 | ||
|
6f92f0a7b5 | ||
|
b773d5e592 | ||
|
a0bc97b589 | ||
|
d146e15ff3 | ||
|
037e63ab49 | ||
|
8b80d28029 | ||
|
d3739488ae | ||
|
494adedeef | ||
|
f0ed0c6a35 | ||
|
c5d6b925e4 | ||
|
856f4b473b | ||
|
b95d73d176 | ||
|
462a5face9 | ||
|
47a87e57f1 | ||
|
768c28f328 | ||
|
b50187f59c | ||
|
96a46bcb4b | ||
|
4653e4c011 | ||
|
372a242ea2 | ||
|
fb1893626f | ||
|
5fd837cc4f | ||
|
435e62a94d | ||
|
598db72523 | ||
|
4ebc561986 | ||
|
d23fd23e91 | ||
|
6e2523625f | ||
|
23274f9b48 | ||
|
7efa71eaf6 | ||
|
9c27feeff6 | ||
|
be787a0fd1 | ||
|
ee5b6ad77f | ||
|
e08fb72cf1 | ||
|
9b0020a884 | ||
|
ec12e46e3f | ||
|
fdc4a4e5fa | ||
|
ef2c5159dd | ||
|
f0f991245c | ||
|
d3b0162dc9 | ||
|
f3d08c13eb | ||
|
10cc46779e | ||
|
80a53aedf2 | ||
|
1b96867df8 | ||
|
0192127e5d | ||
|
7610130f73 | ||
|
218c0d9f51 | ||
|
d5898a3a05 | ||
|
b055055253 | ||
|
6e3d70af56 | ||
|
ae570dba05 | ||
|
2795849dd3 | ||
|
fad48b8b6c | ||
|
685d83d6d0 | ||
|
35d8525f55 | ||
|
faf80f8595 | ||
|
9206f2d288 | ||
|
2fec7613c4 | ||
|
2f026cd1b6 | ||
|
6eec84d21b | ||
|
5f6a5e28e7 | ||
|
825911ed89 | ||
|
a72d418ddb | ||
|
cf5fd8ff42 | ||
|
994c6032bb | ||
|
271adcdb7e | ||
|
717a3bce8c | ||
|
1494a70bad | ||
|
6d565f4bff | ||
|
c6592148a7 | ||
|
6e39f11db1 | ||
|
ee86cd1dcc | ||
|
420a677828 | ||
|
9da43878b1 | ||
|
527f074e59 | ||
|
eefd9d9dd2 | ||
|
2648f5ba65 | ||
|
1b45aa5974 | ||
|
dcf19e5226 | ||
|
c5c852f54f | ||
|
7b15217694 | ||
|
8caded1d1d | ||
|
ebc3116909 | ||
|
387d7199d1 | ||
|
dc965da64e | ||
|
1d83d99d87 | ||
|
09a683557b | ||
|
99e92a346b | ||
|
9ddd45e2c6 | ||
|
0c0a1db114 | ||
|
b1474973cd | ||
|
f0f6b26c3b | ||
|
03b3b80a65 | ||
|
06cc66005c | ||
|
b0792a85a4 | ||
|
a5359df002 | ||
|
10c9d0b723 | ||
|
5c81f07d46 | ||
|
0adc8f5053 | ||
|
804de89796 | ||
|
c6ae7b8d3f | ||
|
6604e2db20 | ||
|
f46a49fd13 | ||
|
707af1ec58 | ||
|
31d1b4ba67 | ||
|
d750225554 | ||
|
93672c01af | ||
|
921d9d7ed5 | ||
|
b2e1be5cfe | ||
|
95a80a0e75 | ||
|
e2a16f3f33 | ||
|
ed91c6c874 | ||
|
70c9908249 | ||
|
ffa2f4554b | ||
|
22a3124662 | ||
|
68c15de890 | ||
|
71d15a68c1 | ||
|
35b5051148 | ||
|
3273117888 | ||
|
8ea2eb9102 | ||
|
b494a4a4db | ||
|
e0beb7fb38 | ||
|
fc123871ad | ||
|
f27fef0295 | ||
|
36974a9557 | ||
|
584dc6217d | ||
|
edf07d9b5b | ||
|
f66b695a47 | ||
|
61b3305af3 | ||
|
21d9783ef8 | ||
|
e2b3c98d25 | ||
|
39429dde68 | ||
|
baf69a60eb | ||
|
a90be44c9f | ||
|
fb7ac81945 | ||
|
db26ca977f | ||
|
89ce87f9f1 | ||
|
a8803431b3 | ||
|
2821bac3a3 | ||
|
716168132a | ||
|
592e1a3e6f | ||
|
351e0e6f5f | ||
|
0244d04a55 | ||
|
895281989c | ||
|
21f39079c8 | ||
|
c2ebcfb023 | ||
|
15f05733be | ||
|
7741edbbcc | ||
|
1593b94aac | ||
|
4b64d8c3aa | ||
|
6124d80c89 | ||
|
48aec9ef47 | ||
|
1a7b167f63 | ||
|
b7eb2e887d | ||
|
094aabfcee | ||
|
eca63b1a58 | ||
|
f5db4be521 | ||
|
d79c754a5b | ||
|
934570d12f | ||
|
748e3c0c53 | ||
|
728617fed2 | ||
|
05d45e7146 | ||
|
d2dd5f93d2 | ||
|
ac1ffe53df | ||
|
2bda6dd719 | ||
|
cd4600b081 | ||
|
83f4fa92a5 | ||
|
7ad5dbc59d | ||
|
ba41fc9275 | ||
|
36e888c3a5 | ||
|
6939182348 | ||
|
7a38a196ad | ||
|
0c91bf1415 | ||
|
e1bc3f3f2d | ||
|
99176c2d54 | ||
|
e5cfc94cd2 | ||
|
ad0083dfa0 | ||
|
6919409c2b | ||
|
f360b2edd6 | ||
|
22cfdd9f0b | ||
|
339ec3e8eb | ||
|
b0c22a222e | ||
|
ea18050589 | ||
|
0ba34f587c | ||
|
e86982bd41 | ||
|
6de499459c | ||
|
3169b72406 | ||
|
db6b2cbb05 | ||
|
a1b7f0ad83 | ||
|
b62fbd0b13 | ||
|
578a46c57f | ||
|
9ab55fd07d | ||
|
497385818b | ||
|
c30ae762bf | ||
|
953f8c119b | ||
|
6119bd3115 | ||
|
1880c7c27d | ||
|
8772d91699 | ||
|
9b725a645d | ||
|
2bfd03e64f | ||
|
e23f90b82c | ||
|
0648e270fe | ||
|
3d6711bd38 | ||
|
99541f89f7 | ||
|
117726c6d8 | ||
|
31d07fdac8 | ||
|
4cb138ab37 | ||
|
8b8e277b75 | ||
|
881655bb57 | ||
|
38949f7ea4 | ||
|
8d3e6f77b7 | ||
|
5865d1f62c | ||
|
e2607980eb | ||
|
f519f5744e | ||
|
fa24ec1a04 | ||
|
6e1014a647 | ||
|
0b46f44ad3 | ||
|
b811b51af9 | ||
|
b88e2c5483 | ||
|
cd333e0977 | ||
|
62706d83c4 | ||
|
284252e7a4 | ||
|
3ad857be6c | ||
|
94de441de7 | ||
|
43443d6057 | ||
|
4caacc78a1 | ||
|
302d172aad | ||
|
21046e4349 | ||
|
9914f7edef | ||
|
1426145946 | ||
|
6fe4aef6f7 | ||
|
3f0d94c838 | ||
|
9384c507ac | ||
|
097bfe581d | ||
|
ac942faa25 | ||
|
654c13df8a | ||
|
6e2fbcdb3e | ||
|
51dce30088 | ||
|
a4f6cd21bd | ||
|
1564415e5d | ||
|
9a53a29b1f | ||
|
83a6d7b97d | ||
|
e8be70da10 | ||
|
4d7bd15334 | ||
|
f7914af9c5 | ||
|
848193074a | ||
|
31ffa65f59 | ||
|
21ae0c46e1 | ||
|
d64bc28ba6 | ||
|
b6e6607c46 | ||
|
d8c6b36cff | ||
|
e00c41ad88 | ||
|
9c182fe6e4 | ||
|
cbcb954c30 | ||
|
42565869a4 | ||
|
85a99203d0 | ||
|
988bb398bc | ||
|
ed62271cda | ||
|
74254636b4 | ||
|
db7f74f99f | ||
|
45a1899ead | ||
|
1626e284cd | ||
|
c5d208c90e | ||
|
a3ccd42093 | ||
|
cb3e7b4120 | ||
|
7e58f21a74 | ||
|
3add465edb | ||
|
df71dba8ed | ||
|
5c4ad3505a | ||
|
37d60dc39e | ||
|
7fec2f630c | ||
|
59c473dc33 | ||
|
5f9c7d8cfa | ||
|
9a6bc4f05f | ||
|
ef860c5a58 | ||
|
d19a9acd6b | ||
|
416fec7a97 | ||
|
25d0b1e6e5 | ||
|
e36fc4e6ae | ||
|
c081081448 | ||
|
0a5364ff35 | ||
|
54bd7df900 | ||
|
5afef5fe82 | ||
|
cabb7432b9 | ||
|
9726c375af | ||
|
f582cc327b | ||
|
7534c0f19e | ||
|
004e197863 | ||
|
ae1fb97794 | ||
|
79397d4b15 | ||
|
b7fd0ee74c | ||
|
3931202d4a | ||
|
2cf3d4ff83 | ||
|
bc14ae5d8b | ||
|
d4a8cd1f1c | ||
|
e9b298931a | ||
|
f8681a7780 | ||
|
fb3c2e1fb0 | ||
|
9adfd1f323 | ||
|
8c96720080 | ||
|
d0609d7131 | ||
|
33a156d9b5 | ||
|
20e3a22d5d | ||
|
312dfb9572 | ||
|
447b0f91f9 | ||
|
ed26f5af98 | ||
|
28d105a1af | ||
|
fd4a782bdd | ||
|
587739f8e1 | ||
|
4da574560d | ||
|
f9e0123986 | ||
|
f4cc152cfb | ||
|
29747a0487 | ||
|
b01db9141b | ||
|
71aeb7cddc | ||
|
34d86647bf | ||
|
a8863ac85e | ||
|
ca9bb45327 | ||
|
450814ad80 | ||
|
0a38bf8fd6 | ||
|
2e61050a22 | ||
|
1dd903ddcc | ||
|
61f227e123 | ||
|
633d17ffde | ||
|
20ed4fbbd4 | ||
|
39bb855a9c | ||
|
b2a26ef21a | ||
|
d895b0296f | ||
|
b45167422b | ||
|
8e81b0680f | ||
|
408bbdb52e | ||
|
f2a6feff29 | ||
|
7ccf9cd48e | ||
|
8afcba7ba1 | ||
|
2eef766aff | ||
|
fe23bf9e51 | ||
|
1aae112d0e | ||
|
504f4d9eb9 | ||
|
daf5719f08 | ||
|
e9754b4c08 | ||
|
adce627888 | ||
|
7688037fb8 | ||
|
997912a8f8 | ||
|
b961cb1952 | ||
|
e1d64def20 | ||
|
fe1b7f15e8 | ||
|
3f647c259a | ||
|
06dcf24496 | ||
|
77c77631e1 | ||
|
b0e9f58033 | ||
|
80e7e84a06 | ||
|
15105cde0f | ||
|
921ef90a14 | ||
|
1a1caa1ca2 | ||
|
af6aa2df93 | ||
|
fe1746c7ac | ||
|
d19c8ae9b1 | ||
|
84215f75e0 | ||
|
4fc457b78b | ||
|
2f6b1273aa | ||
|
da9de70bbc | ||
|
35bfd493e8 | ||
|
b174a891bc | ||
|
bb79a5e324 | ||
|
9e0c232a73 | ||
|
e02dc13805 | ||
|
c8b2a975f4 | ||
|
820ab062a6 | ||
|
7b4f63a39c | ||
|
8a64599ca5 | ||
|
9b1ec5baaa | ||
|
3a3fe0e69a | ||
|
5c21d3f6af | ||
|
baba78f545 | ||
|
f03afe6f1b | ||
|
a824264da2 | ||
|
a66c03aa21 | ||
|
bed134c1da | ||
|
d36cf58b82 | ||
|
5527de62ff | ||
|
11f0bebd7f | ||
|
954fe3f549 | ||
|
4a444591c1 | ||
|
3fb29041b0 | ||
|
0c222f9890 | ||
|
e43988aa44 | ||
|
161a935003 | ||
|
e8afc66a5a | ||
|
49a9345bf4 | ||
|
d73faf1b81 | ||
|
0c6110b736 | ||
|
2da258f5be | ||
|
e9bf7206bd | ||
|
2b4dcb419e | ||
|
c67632dff5 | ||
|
01b36b4949 | ||
|
711b307e6c | ||
|
1ab19a7c23 | ||
|
7068f7b4d1 | ||
|
79f0324abc | ||
|
b82148ea60 | ||
|
add1cfd261 | ||
|
cdf78494d5 | ||
|
789f573452 | ||
|
22f217807d | ||
|
08797392e0 | ||
|
853c77dc09 | ||
|
0ebbbdfca4 | ||
|
085d34834b | ||
|
b866ce787c | ||
|
4d5bc8b8ee | ||
|
7f013515e7 | ||
|
a4a46dc076 | ||
|
33dbdb0184 | ||
|
0d565fe32f | ||
|
320460feb9 | ||
|
dbce3f8935 | ||
|
c41622c20a | ||
|
348556a544 | ||
|
6fa6579c31 | ||
|
6f61268514 | ||
|
8efc6c2112 | ||
|
b21c1bea46 | ||
|
fd7ba3ecea | ||
|
8aeb18bcc3 | ||
|
ee91f56bbe | ||
|
9e4a594eb1 | ||
|
3b421ef796 | ||
|
e0c4f58970 | ||
|
df8fd36c94 | ||
|
76b3caa124 | ||
|
0101cd73aa | ||
|
6ef628613e | ||
|
bc960fe8f8 | ||
|
517c620397 | ||
|
498be7ac41 | ||
|
0391f93490 | ||
|
399a7d5fec | ||
|
0d201173ef | ||
|
2d43f312c8 | ||
|
1ec8a4115f | ||
|
753b33aec5 | ||
|
7626d1d6fe | ||
|
d3592d362e | ||
|
a8a1ea92a6 | ||
|
ff027ee36a | ||
|
397b4e2890 | ||
|
ba292ead45 | ||
|
5355f3c538 | ||
|
478330c12d | ||
|
38896c9358 | ||
|
26cbe7ae66 | ||
|
fd83ca2cb8 | ||
|
b1376059d3 | ||
|
4072076965 | ||
|
2bba01c664 | ||
|
93054ae52b | ||
|
5c1b1a1203 | ||
|
433fb3597d | ||
|
acb7e876b2 | ||
|
2c585bfbdc | ||
|
1f0ac47bd9 | ||
|
7460f2796a | ||
|
7249cc7b49 | ||
|
b598827708 | ||
|
128abb39dd | ||
|
79a533940e | ||
|
773cf3cd14 | ||
|
53d0f5b98e | ||
|
3a51bd1e69 | ||
|
3f1f19e344 | ||
|
3aa831ad77 | ||
|
3fd667b3be | ||
|
fa7bd072d0 | ||
|
cc8debe53b | ||
|
36b8c9c5dd | ||
|
474db7c18d | ||
|
daa011f7cb | ||
|
39657b633b | ||
|
2e8f74abce | ||
|
239eada7d9 | ||
|
df91d34315 | ||
|
3980bf39a9 | ||
|
b4a11de097 | ||
|
a22d78e273 | ||
|
a50f0ca997 | ||
|
12bc6f5d58 | ||
|
b147cd8885 | ||
|
d703c13f8e | ||
|
3dacc6157b | ||
|
fd12bdbbd5 | ||
|
297a62fe80 | ||
|
1e39d56cf7 | ||
|
ca6f99da61 | ||
|
39ae21d693 | ||
|
e45b6c7e98 | ||
|
fc138cd73d | ||
|
990d510d05 | ||
|
3eac119399 | ||
|
8755737344 | ||
|
cd44470a29 | ||
|
dd4d3b10cf | ||
|
211163b372 | ||
|
f44c5b2292 | ||
|
5d74421e43 | ||
|
eb5f514d25 | ||
|
57318a6ef2 | ||
|
857a35d4f7 | ||
|
4f4d901eca | ||
|
6a84877f9a | ||
|
117e2f583f | ||
|
b074fe2de5 | ||
|
3dad385533 | ||
|
15a12cfa22 | ||
|
c448a409c1 | ||
|
dfef33bc41 | ||
|
27ea271842 | ||
|
316f3e2e76 | ||
|
624f5cee8d | ||
|
7acaae37a9 | ||
|
fd73c17db1 | ||
|
689f8f1fbc | ||
|
5ffd20214c | ||
|
3395b8d095 | ||
|
b388d54962 | ||
|
c27194a357 | ||
|
8493d619b4 | ||
|
adcfe51190 | ||
|
d71362af99 | ||
|
a5665a6875 | ||
|
7a99b2099d | ||
|
c84e163edb | ||
|
cde192df0d | ||
|
d0c009adff | ||
|
f6abc007ff | ||
|
88eb642aa5 | ||
|
8b09286173 | ||
|
bfe708533f | ||
|
d7742029c7 | ||
|
1151371e57 | ||
|
ecb92a44bc | ||
|
f7642c06f0 | ||
|
94d1e427c1 | ||
|
4181a040b5 | ||
|
c0d8ceca82 | ||
|
771f8a6a6c | ||
|
54b51830d0 | ||
|
801004be66 | ||
|
c6e7ad5a53 | ||
|
6d5f65b77e | ||
|
370452238f | ||
|
28df5bfd94 | ||
|
eb8f7b0ef5 | ||
|
dfbf10c94b | ||
|
95b2898b9c | ||
|
52b49fee24 | ||
|
31f096248d | ||
|
d91c41b29c | ||
|
c27a2b64ef | ||
|
fdaffb67e8 | ||
|
d32bf15b69 | ||
|
7536648f7a | ||
|
eb2fa8e4af | ||
|
5d3d2736f5 | ||
|
0574794496 | ||
|
3a23e795ac | ||
|
2dfca078fd | ||
|
094f710662 | ||
|
d1186e08b4 | ||
|
cab71fd4d1 | ||
|
4cf6fbc6a3 | ||
|
10da1e24e1 | ||
|
c30dca6961 | ||
|
42c441fafa | ||
|
6861cd7462 | ||
|
d59027f0bc | ||
|
d1444f228d | ||
|
9cc7090e28 | ||
|
a73522e7f1 | ||
|
d941901e32 | ||
|
eb3fda059a | ||
|
0823bd24d6 | ||
|
897c15fd28 | ||
|
006a13448f | ||
|
88c7d907fa | ||
|
e8814ecbe7 | ||
|
f90486c99c | ||
|
a2bc62b17a | ||
|
ce4081bb18 | ||
|
b7a111366b | ||
|
f6487122d1 | ||
|
7c9d47451b | ||
|
9006e8fced | ||
|
6b8f8580d8 | ||
|
8b06b36274 | ||
|
188e317504 | ||
|
ecae3f9c48 | ||
|
543ff7739a | ||
|
18d24f8db1 | ||
|
58a65d0ed9 | ||
|
338594d3e5 | ||
|
e4f9ae6ad5 | ||
|
7e2acb6e7e | ||
|
04e70df330 | ||
|
eb46570a38 | ||
|
bb9c21fb14 | ||
|
245fa95424 | ||
|
16fa0fdda1 | ||
|
66261102de | ||
|
6748c36b03 | ||
|
d0f20a4fd5 | ||
|
f5c7a3c26a | ||
|
cfa748e206 | ||
|
8284f9c2ba | ||
|
18fef7ade4 | ||
|
5fc2483be7 | ||
|
d5521ea5e0 | ||
|
cc4ccda623 | ||
|
389665d3a1 | ||
|
d160792923 | ||
|
819ba14303 | ||
|
b0f2ab45e9 | ||
|
620f439816 | ||
|
6a57a7b5be | ||
|
1f3055c1bc | ||
|
ec83a1d9e7 | ||
|
b895b855cb | ||
|
a770ea56ea | ||
|
5e66cc8a40 | ||
|
4fda2a2d04 | ||
|
e7e9c2a2eb | ||
|
7619bc4f13 | ||
|
515b8712a1 | ||
|
e2ff7b7c84 | ||
|
209b2c9dcb | ||
|
cdaa1407da | ||
|
92706a4b43 | ||
|
ab245fe7de | ||
|
f5623632d8 | ||
|
7de33c5dd9 | ||
|
180f176716 | ||
|
a2e1bf0e62 | ||
|
ad96e953ce | ||
|
695d1453ac | ||
|
7c30fd4b2d | ||
|
5573b092a9 | ||
|
d16499da4e | ||
|
c50c4a4669 | ||
|
32de4862ba | ||
|
f341626e29 | ||
|
c2645b26b4 | ||
|
ce19ec207b | ||
|
7858dafce4 | ||
|
0955feb023 | ||
|
9fd931f799 | ||
|
57fba86154 | ||
|
0a3af4eb22 | ||
|
7fc1a88680 | ||
|
9f5f31d39f | ||
|
bda9d4c1b0 | ||
|
b55ba3a318 | ||
|
dc655fd903 | ||
|
82b6a81a22 | ||
|
f9d13cd43a | ||
|
771e01162d | ||
|
61a1a0be97 | ||
|
3430896eb7 | ||
|
cd79a2fad1 | ||
|
f82d16a5b0 | ||
|
9990f8720c | ||
|
544ddd44a0 | ||
|
66b485c7d4 | ||
|
9ef6f82a95 | ||
|
a148db5022 | ||
|
f9a38fcb32 | ||
|
3f918622bc | ||
|
6091ee732d | ||
|
906909e33f | ||
|
d192a7d466 | ||
|
096f9decee | ||
|
ae84dac463 | ||
|
8c33692560 | ||
|
44a34ee541 | ||
|
76f88a0a62 | ||
|
c1defba429 | ||
|
c1ad1d203d | ||
|
3061afdafb | ||
|
59ad2b75c1 | ||
|
935e5da78e | ||
|
28ded5d02d | ||
|
27258fe3d4 | ||
|
ad0129fa02 | ||
|
5911879639 | ||
|
cc2719492d | ||
|
d675547208 | ||
|
d938ba4606 | ||
|
9a5b52036b | ||
|
229f11f164 | ||
|
91f8487947 | ||
|
0e1e9b27f6 | ||
|
9787d1085d | ||
|
1c0569cfc6 | ||
|
9cc82308e5 | ||
|
5d6fde356a | ||
|
96fcbeaba6 | ||
|
d21487d0c0 | ||
|
dc90136529 | ||
|
abaa39a5e2 | ||
|
4456c3ee14 | ||
|
a49bf353f8 | ||
|
05f059492b | ||
|
13b41c976b | ||
|
bcb633e5cb | ||
|
05b74ba1c8 | ||
|
a918e7099d | ||
|
12dad41143 | ||
|
9a0595a607 | ||
|
37405038e8 | ||
|
25039a036c | ||
|
eb9d802146 | ||
|
6b11ca6c1d | ||
|
4c8178fc30 | ||
|
4616d6f59d | ||
|
5cb944fe1b | ||
|
50c4909f22 | ||
|
dd8b9bf987 | ||
|
728f70f51b | ||
|
f9eba65aee | ||
|
d0a0af5130 | ||
|
4cba70f32e | ||
|
5901ee7e96 | ||
|
09ee7d84f7 | ||
|
2ad2644b6b | ||
|
30454fe467 | ||
|
475698ed92 | ||
|
274e4b3bcd | ||
|
a49fc27042 | ||
|
17f024056a | ||
|
10e6c3cd90 | ||
|
cd419edf69 | ||
|
ac72df4188 | ||
|
9610ada446 | ||
|
8ab8c27998 | ||
|
48ff13e3e2 | ||
|
25ca3d4c29 | ||
|
02a975dde4 | ||
|
aeec8f47ef | ||
|
fdf9e860de | ||
|
3f35239b27 | ||
|
aab9bedd7f | ||
|
4e4291eccd | ||
|
7ed44f7b2f | ||
|
8288e8cce9 | ||
|
1bb7a28690 | ||
|
0e3cd82348 | ||
|
3d4041ecd3 | ||
|
8d1689073b | ||
|
3052c8d303 | ||
|
ff295daa5c | ||
|
bb307a55d3 | ||
|
ae6202ed3d | ||
|
0e55f76db8 | ||
|
667b1e03dd | ||
|
4f5ab1a72d | ||
|
6ad8ac6a48 | ||
|
86febc3cce | ||
|
e73fceaa20 | ||
|
cacfcc291a | ||
|
e1ae551560 | ||
|
476cbbb6cb | ||
|
1880c34ce0 | ||
|
cc7321cb5b | ||
|
ae64fc15e0 | ||
|
6f4dbc71f2 | ||
|
4bd4ff46cf | ||
|
edfb56de6c | ||
|
03007e420c | ||
|
7fa1f25e06 | ||
|
341d7b3407 | ||
|
9be4c47499 | ||
|
9512978de9 | ||
|
ffecba21f4 | ||
|
af91a56a55 | ||
|
51da5311b5 | ||
|
a414dc9b83 | ||
|
0f63071696 | ||
|
951a5271e1 | ||
|
4c5b26db18 | ||
|
e1306f55ed | ||
|
d2bf23de71 | ||
|
3206e1528b | ||
|
68182fb6c4 | ||
|
80711eafeb | ||
|
cbe595af54 | ||
|
dcae27c1a4 | ||
|
81fb8d614f | ||
|
3e8d9510ec | ||
|
a3d4482c4a | ||
|
1c5745dbd9 | ||
|
3e75daafa1 | ||
|
6696aa46ee | ||
|
14a9770d57 | ||
|
b8d2cc1221 | ||
|
89e439c521 | ||
|
0f97771d5a | ||
|
74f0515370 | ||
|
f17c7e4a22 | ||
|
5fe98c816d | ||
|
f75cfd8aa4 | ||
|
7577d96671 | ||
|
58f5b6d0ad | ||
|
a11348ce6b | ||
|
a4825d8748 | ||
|
e3c0363db1 | ||
|
3fdc6e5e47 | ||
|
2ef8204ab4 | ||
|
72b4ee76fb | ||
|
3901380ffb | ||
|
22d0c76bf1 | ||
|
30809e646b | ||
|
27d9e516e1 | ||
|
948d62200a | ||
|
39f92e4c95 | ||
|
d5d99b9d2e | ||
|
4a96dbe085 | ||
|
ced4c893ba | ||
|
a2d09a68b0 | ||
|
98cf046b4c | ||
|
e3510f3bcf | ||
|
89e59cca28 | ||
|
0515a914e0 | ||
|
f04eba7773 | ||
|
cd06c0e913 | ||
|
23b1656692 | ||
|
d06b40bd8a | ||
|
de18fa0069 | ||
|
1a10715fcb | ||
|
062187f28d | ||
|
e55d8802e1 | ||
|
3adc6b6daa | ||
|
c5e8bb1763 | ||
|
acefeff5f0 | ||
|
2a1c2a55ed | ||
|
45d828e154 | ||
|
dc3b867b35 | ||
|
fb24a18f3f | ||
|
1899493ca8 | ||
|
1581ced6ec | ||
|
5e8f53c7b7 | ||
|
370d15ed1d | ||
|
43b792f307 | ||
|
b844126516 | ||
|
43e55a963b | ||
|
9cf055c159 | ||
|
16b5157078 | ||
|
1ae9f68db8 | ||
|
e5d3e3b33a | ||
|
1c8ea1336e | ||
|
b7f4062ac8 | ||
|
73f5ea2906 | ||
|
11bc10a3ae | ||
|
e45ce4c167 | ||
|
85b7362073 | ||
|
46a8aad87a | ||
|
ab2759f431 | ||
|
379f7c7883 | ||
|
c7a063ca47 | ||
|
db3ad83ebc | ||
|
979527a5ee | ||
|
2d9c961d4f | ||
|
11f7f2d29f | ||
|
c5554fe30c | ||
|
6da6540c03 | ||
|
059868e994 | ||
|
f89b314a94 | ||
|
06ba26a6d3 | ||
|
e50decfa8a | ||
|
78fb43f59c | ||
|
09f0bf7f00 | ||
|
05ce8aa124 | ||
|
ce5bc3c1c9 | ||
|
33d8044f02 | ||
|
fefb64442a | ||
|
119c4e2dc6 | ||
|
c1f9f2e8d9 | ||
|
38f47a380b | ||
|
8635f8d732 | ||
|
47737d4d0f | ||
|
b737313d16 | ||
|
9c26334eff | ||
|
2c04ee3f5e | ||
|
4df8e60f42 | ||
|
df7a1bd8de | ||
|
657ae0cf57 | ||
|
d43f89fa0a | ||
|
2e184f081e | ||
|
3cd9f40e63 | ||
|
8e501e5ec7 | ||
|
4c4286ac66 | ||
|
4a72dc6c6f | ||
|
7ccfa8a8af | ||
|
751b87af96 | ||
|
2110ac32b7 | ||
|
c2e8390d21 | ||
|
075f3c9bfe | ||
|
6027e275b1 | ||
|
a5edb0b421 | ||
|
da54fc3296 | ||
|
053e147afc | ||
|
f0c79473bd | ||
|
864f89c535 | ||
|
4db33ba2b3 | ||
|
37f87ab267 | ||
|
104b2ed759 | ||
|
56953320b3 | ||
|
af2bf053bc | ||
|
117ee19370 | ||
|
dcd428a4a2 | ||
|
e086c7b8e6 | ||
|
1f0c7f8fbe | ||
|
a4de585feb | ||
|
e624759bc7 | ||
|
0836ab370e | ||
|
66848ef80f | ||
|
f0b9365ca9 | ||
|
614ca51cb1 | ||
|
f31f9eb24e | ||
|
b75fe10c79 | ||
|
b7a5e40c62 | ||
|
28f0deb3eb | ||
|
bdf623dab5 | ||
|
921492e818 | ||
|
194cbc3ba9 | ||
|
1ba207f1fe | ||
|
c5014af7fe | ||
|
579a49ba91 | ||
|
071f9a5a73 | ||
|
4bf1ca0d17 | ||
|
5e67756037 | ||
|
48e4452a04 | ||
|
be97eebe02 | ||
|
37c5165319 | ||
|
15ed3b35df | ||
|
19f9649e74 | ||
|
d52a04e725 | ||
|
daf447361f | ||
|
1a3b1607b1 | ||
|
2bb53d5b1d | ||
|
38eaacdd44 | ||
|
77a4d7e2b7 | ||
|
bc029df082 | ||
|
63b53acd48 | ||
|
50eee9a657 | ||
|
917952bc2a | ||
|
00afb2440d | ||
|
8cf720986e | ||
|
97c54f84f0 | ||
|
e485a98143 | ||
|
1e29f2875d | ||
|
61cd36cc96 | ||
|
a9b4c1cba8 | ||
|
5187017f21 | ||
|
73ea2dac6d | ||
|
e9232bf070 | ||
|
ee3538262d | ||
|
47b281b754 | ||
|
dfa03feb43 | ||
|
49beb6b7a3 | ||
|
6066db8f42 | ||
|
68c1818139 | ||
|
12087b6b70 | ||
|
15a3c234c5 | ||
|
bf7443c985 | ||
|
6c39d498c2 | ||
|
cacb8acf76 | ||
|
c1082b9b08 | ||
|
d3c5c68296 | ||
|
39fd3fd866 | ||
|
7ed95d3954 | ||
|
4dc91c86ae | ||
|
dbf75a43c3 | ||
|
39c7f3dc88 | ||
|
01f82ddf78 | ||
|
24b5b35a74 | ||
|
4dfbc6747e | ||
|
528ae4376e | ||
|
e0149618f3 | ||
|
632d7b6fc1 | ||
|
b9dccf9da3 | ||
|
7e24c04c0b | ||
|
a766d78706 | ||
|
bf0a4bd91b | ||
|
51779fec38 | ||
|
ac2d93ab22 | ||
|
092d010c2d | ||
|
30b0770993 | ||
|
a017f5e385 | ||
|
6510454337 | ||
|
d2766d7ced | ||
|
6c79a858df | ||
|
f06541ec94 | ||
|
d5105b5c9f | ||
|
17b282b1d7 | ||
|
43ad2fe23b | ||
|
2c308c0f4c | ||
|
d8001e696e | ||
|
aeb607d485 | ||
|
c070142dc0 | ||
|
6f80c7e6d9 | ||
|
48dd9569f7 | ||
|
c66e2f6704 | ||
|
b49e5c76e4 | ||
|
ce4da870d7 | ||
|
6588cf919e | ||
|
2f4e498a09 | ||
|
66465816ca | ||
|
bce9031868 | ||
|
100f446031 | ||
|
0de654bbd5 | ||
|
eb3a4d2fab | ||
|
48f1e6057c | ||
|
d129c922ed | ||
|
6f2217570f | ||
|
90ba8e0e8d | ||
|
7d7f54c751 | ||
|
580e574c84 | ||
|
669ea191a5 | ||
|
3f2b6482c3 | ||
|
736e1717fa | ||
|
d6ac1a4f78 | ||
|
8a7c61c6f4 | ||
|
16ba01cd2e | ||
|
7282e3ce03 | ||
|
9a024fdacf | ||
|
135a623b1f | ||
|
977e20edc3 | ||
|
17643d98aa | ||
|
724f3b9cf7 | ||
|
a7a17c85dc | ||
|
7742df8614 | ||
|
ba0b9b259f | ||
|
26cd5ec149 | ||
|
da0c5dd9d3 | ||
|
45a24738b5 | ||
|
585ca203b0 | ||
|
a60cf44d45 | ||
|
62f219ea74 | ||
|
c26b3f5dfc | ||
|
0eb9769cd4 | ||
|
eca862f818 | ||
|
3f43f9bb4c | ||
|
ee6bb229e0 | ||
|
561f441a5b | ||
|
f3a6800306 | ||
|
7bc2df5602 | ||
|
1737411ab7 | ||
|
7a8adf9db5 | ||
|
ad6dc8e891 | ||
|
44635f34f0 | ||
|
b4fb6b5ff3 | ||
|
c87e68f833 | ||
|
ff1f0a9678 | ||
|
aa0e07b058 | ||
|
a42347a776 | ||
|
8ff5e19269 | ||
|
8a6e077664 | ||
|
f9d8610383 | ||
|
b4af27dd44 | ||
|
9aa6753823 | ||
|
94ace00e0c | ||
|
12b6877aeb | ||
|
65d85ca500 | ||
|
3f0059d4bb | ||
|
4b348e1e60 | ||
|
a764dfa789 | ||
|
c2038eae5b | ||
|
c4ae91c7c5 | ||
|
857eb95ac0 | ||
|
4fd3f12aeb | ||
|
a7336d3c65 | ||
|
30f7f83573 | ||
|
97646571a1 | ||
|
ac60d45969 | ||
|
afa52e280c | ||
|
c57c9752a2 | ||
|
b158a6d722 | ||
|
f74080fe0d | ||
|
9f61735f94 | ||
|
91ca80b248 | ||
|
59743d32da | ||
|
c616b53c9c | ||
|
e40a4addc9 | ||
|
ad0fe2f079 | ||
|
9b4f5dfdda | ||
|
71a61a4dc3 | ||
|
1053aed74d |
@@ -4,7 +4,7 @@ jobs:
|
||||
build:
|
||||
resource_class: medium+
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: circleci/node:9-browsers
|
||||
environment:
|
||||
CONTRACTS_COMMIT_HASH: '9ed05f5'
|
||||
working_directory: ~/repo
|
||||
@@ -16,8 +16,10 @@ jobs:
|
||||
command: sudo npm install --global yarn@1.9.4
|
||||
- run:
|
||||
name: yarn
|
||||
command: yarn --frozen-lockfile install || yarn --frozen-lockfile install
|
||||
command: yarn --frozen-lockfile --ignore-engines install
|
||||
- setup_remote_docker
|
||||
- run: yarn build:ci:no_website
|
||||
- run: yarn build:ts
|
||||
- save_cache:
|
||||
key: repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
@@ -25,25 +27,33 @@ jobs:
|
||||
build-website:
|
||||
resource_class: medium+
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: circleci/node:9-browsers
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run: cd packages/website && yarn build
|
||||
- run: cd packages/website && yarn build:prod
|
||||
test-contracts-ganache:
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: circleci/node:9-browsers
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run: yarn wsrun test:circleci contracts
|
||||
- run: yarn wsrun test:circleci @0x/contracts-multisig
|
||||
- run: yarn wsrun test:circleci @0x/contracts-utils
|
||||
- run: yarn wsrun test:circleci @0x/contracts-exchange-libs
|
||||
- run: yarn wsrun test:circleci @0x/contracts-erc20
|
||||
- run: yarn wsrun test:circleci @0x/contracts-erc721
|
||||
- run: yarn wsrun test:circleci @0x/contracts-extensions
|
||||
- run: yarn wsrun test:circleci @0x/contracts-asset-proxy
|
||||
- run: yarn wsrun test:circleci @0x/contracts-exchange
|
||||
- run: yarn wsrun test:circleci @0x/contracts-exchange-forwarder
|
||||
test-contracts-geth:
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: circleci/node:9-browsers
|
||||
- image: 0xorg/devnet
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
@@ -52,11 +62,19 @@ jobs:
|
||||
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
# HACK(albrow): we need to sleep 10 seconds to ensure the devnet is
|
||||
# initialized
|
||||
- run: sleep 10 && TEST_PROVIDER=geth yarn wsrun test contracts
|
||||
- run: sleep 10 && TEST_PROVIDER=geth yarn wsrun test @0x/contracts-multisig
|
||||
- run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-utils
|
||||
- run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-exchange-libs
|
||||
- run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-erc20
|
||||
- run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-erc721
|
||||
- run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-extensions
|
||||
- run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-asset-proxy
|
||||
- run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-exchange
|
||||
- run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-exchange-forwarder
|
||||
test-publish:
|
||||
resource_class: medium+
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: circleci/node:9-browsers
|
||||
- image: 0xorg/verdaccio
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
@@ -66,21 +84,36 @@ jobs:
|
||||
- run: yarn test:publish:circleci
|
||||
test-doc-generation:
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: circleci/node:9-browsers
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run: yarn test:generate_docs:circleci
|
||||
test-rest:
|
||||
test-pipeline:
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: postgres:11-alpine
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run: ZEROEX_DATA_PIPELINE_TEST_DB_URL='postgresql://postgres@localhost/postgres' yarn wsrun test:circleci @0x/pipeline
|
||||
- save_cache:
|
||||
key: coverage-pipeline-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- ~/repo/packages/pipeline/coverage/lcov.info
|
||||
test-rest:
|
||||
docker:
|
||||
- image: circleci/node:9-browsers
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run: yarn wsrun test:circleci @0x/contracts-test-utils
|
||||
- run: yarn wsrun test:circleci @0x/abi-gen
|
||||
- run: yarn wsrun test:circleci @0x/assert
|
||||
- run: yarn wsrun test:circleci @0x/base-contract
|
||||
@@ -92,7 +125,7 @@ jobs:
|
||||
- run: yarn wsrun test:circleci @0x/order-utils
|
||||
- run: yarn wsrun test:circleci @0x/order-watcher
|
||||
- run: yarn wsrun test:circleci @0x/sol-compiler
|
||||
- run: yarn wsrun test:circleci @0x/sol-cov
|
||||
- run: yarn wsrun test:circleci @0x/sol-tracing-utils
|
||||
- run: yarn wsrun test:circleci @0x/sol-doc
|
||||
- run: yarn wsrun test:circleci @0x/subproviders
|
||||
- run: yarn wsrun test:circleci @0x/web3-wrapper
|
||||
@@ -143,9 +176,9 @@ jobs:
|
||||
paths:
|
||||
- ~/repo/packages/sol-compiler/coverage/lcov.info
|
||||
- save_cache:
|
||||
key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }}
|
||||
key: coverage-sol-tracing-utils-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- ~/repo/packages/sol-cov/coverage/lcov.info
|
||||
- ~/repo/packages/sol-tracing-utils/coverage/lcov.info
|
||||
- save_cache:
|
||||
key: coverage-sol-doc-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
@@ -162,34 +195,54 @@ jobs:
|
||||
working_directory: ~/repo
|
||||
docker:
|
||||
- image: circleci/python
|
||||
- image: 0xorg/ganache-cli:2.2.2
|
||||
- image: 0xorg/launch-kit-ci
|
||||
command: |
|
||||
yarn start:ts -p 3000:3000
|
||||
steps:
|
||||
- checkout
|
||||
- run: sudo chown -R circleci:circleci /usr/local/bin
|
||||
- run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages
|
||||
- run: sudo chown -R circleci:circleci /usr/local/lib/python3.7
|
||||
- restore_cache:
|
||||
key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run:
|
||||
command: |
|
||||
cd python-packages/order_utils
|
||||
cd python-packages
|
||||
python -m ensurepip
|
||||
python -m pip install -e .[dev]
|
||||
./install
|
||||
- save_cache:
|
||||
key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- '/usr/local/bin'
|
||||
- '/usr/local/lib/python3.7/site-packages'
|
||||
- '.eggs'
|
||||
- '.mypy_cache'
|
||||
- '.pytest_cache'
|
||||
- '.tox'
|
||||
- run:
|
||||
command: |
|
||||
cd python-packages/order_utils
|
||||
coverage run setup.py test
|
||||
cd python-packages
|
||||
./cmd_pkgs_in_dep_order.py coverage run setup.py test
|
||||
- save_cache:
|
||||
key: coverage-python-contract-addresses-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- ~/repo/python-packages/contract_addresses/.coverage
|
||||
- save_cache:
|
||||
key: coverage-python-contract-artifacts-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- ~/repo/python-packages/contract_artifacts/.coverage
|
||||
- save_cache:
|
||||
key: coverage-python-contract-demo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- ~/repo/python-packages/contract_demo/.coverage
|
||||
- save_cache:
|
||||
key: coverage-python-json-schemas-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- ~/repo/python-packages/json_schemas/.coverage
|
||||
- save_cache:
|
||||
key: coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- ~/repo/python-packages/order_utils/.coverage
|
||||
- save_cache:
|
||||
key: coverage-python-sra-client-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- ~/repo/python-packages/sra_client/.coverage
|
||||
test-rest-python:
|
||||
working_directory: ~/repo
|
||||
docker:
|
||||
@@ -197,14 +250,14 @@ jobs:
|
||||
steps:
|
||||
- checkout
|
||||
- run: sudo chown -R circleci:circleci /usr/local/bin
|
||||
- run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages
|
||||
- run: sudo chown -R circleci:circleci /usr/local/lib/python3.7
|
||||
- restore_cache:
|
||||
key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run:
|
||||
command: |
|
||||
cd python-packages/order_utils
|
||||
python -m ensurepip
|
||||
python -m pip install -e .[dev]
|
||||
python -m pip install .
|
||||
- save_cache:
|
||||
key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
@@ -225,38 +278,31 @@ jobs:
|
||||
steps:
|
||||
- checkout
|
||||
- run: sudo chown -R circleci:circleci /usr/local/bin
|
||||
- run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages
|
||||
- run: sudo chown -R circleci:circleci /usr/local/lib/python3.7
|
||||
- restore_cache:
|
||||
key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run:
|
||||
command: |
|
||||
cd python-packages/order_utils
|
||||
python -m ensurepip
|
||||
python -m pip install -e .[dev]
|
||||
- save_cache:
|
||||
key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }}
|
||||
paths:
|
||||
- '/usr/local/bin'
|
||||
- '/usr/local/lib/python3.7/site-packages'
|
||||
- run:
|
||||
command: |
|
||||
cd python-packages/order_utils
|
||||
python setup.py lint
|
||||
cd python-packages
|
||||
./install
|
||||
./lint
|
||||
static-tests:
|
||||
working_directory: ~/repo
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: circleci/node:9-browsers
|
||||
steps:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- run: yarn lerna run lint
|
||||
- run: yarn prettier:ci
|
||||
- run: yarn deps_versions:ci
|
||||
- run: cd packages/0x.js && yarn build:umd:prod
|
||||
- run: yarn bundlewatch
|
||||
submit-coverage:
|
||||
docker:
|
||||
- image: circleci/node:9
|
||||
- image: circleci/node:9-browsers
|
||||
working_directory: ~/repo
|
||||
steps:
|
||||
- restore_cache:
|
||||
@@ -297,7 +343,7 @@ jobs:
|
||||
- coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- coverage-sol-tracing-utils-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-sol-doc-{{ .Environment.CIRCLE_SHA1 }}
|
||||
@@ -310,6 +356,21 @@ jobs:
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-contracts-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-python-json-schemas-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-python-contract-addresses-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-python-contract-artifacts-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-python-contract-demo-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-python-sra-client-{{ .Environment.CIRCLE_SHA1 }}
|
||||
- restore_cache:
|
||||
keys:
|
||||
- coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }}
|
||||
@@ -328,6 +389,9 @@ workflows:
|
||||
- test-contracts-geth:
|
||||
requires:
|
||||
- build
|
||||
- test-pipeline:
|
||||
requires:
|
||||
- build
|
||||
- test-rest:
|
||||
requires:
|
||||
- build
|
||||
@@ -344,7 +408,9 @@ workflows:
|
||||
requires:
|
||||
- test-rest
|
||||
- test-python
|
||||
- static-tests-python:
|
||||
requires:
|
||||
- test-python
|
||||
- test-python
|
||||
- static-tests-python
|
||||
# skip python tox run for now, as we don't yet have multiple test environments to support.
|
||||
#- test-rest-python
|
||||
|
42
.github/autolabeler.yml
vendored
Normal file
42
.github/autolabeler.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
python: ['python-packages']
|
||||
contracts: ['contracts']
|
||||
sol-doc: ['packages/sol-doc']
|
||||
sol-resolver: ['packages/sol-resolver']
|
||||
sra-spec: ['packages/sra-spec']
|
||||
subproviders: ['packages/subproviders']
|
||||
contract-addresses: ['packages/contract-addresses']
|
||||
migrations: ['packages/migrations']
|
||||
web3-wrapper: ['packages/web3-wrapper']
|
||||
sol-compiler: ['packages/sol-compiler']
|
||||
types: ['packages/types']
|
||||
instant: ['packages/instant']
|
||||
abi-gen-templates: ['packages/abi-gen-templates']
|
||||
abi-gen: ['packages/abi-gen']
|
||||
website: ['packages/website']
|
||||
sol-coverage: ['packages/sol-coverage']
|
||||
sol-profiler: ['packages/sol-profiler']
|
||||
sol-trace: ['packages/sol-trace']
|
||||
sol-tracing-utils: ['packages/sol-tracing-utils']
|
||||
utils: ['packages/utils']
|
||||
tslint-config: ['packages/tslint-config']
|
||||
asset-buyer: ['packages/asset-buyer']
|
||||
order-watcher: ['packages/order-watcher']
|
||||
react-docs: ['packages/react-docs']
|
||||
order-utils: ['packages/order-utils']
|
||||
react-shared: ['packages/react-shared']
|
||||
assert: ['packages/assert']
|
||||
base-contract: ['packages/base-contract']
|
||||
typescript-typings: ['packages/typescript-typings']
|
||||
0x.js: ['packages/0x.js']
|
||||
abi-gen-wrappers: ['packages/abi-gen-wrappers']
|
||||
metacoin: ['packages/metacoin']
|
||||
contract-artifacts: ['packages/contract-artifacts']
|
||||
dev-utils: ['packages/dev-utils']
|
||||
contract-wrappers: ['packages/contract-wrappers']
|
||||
json-schemas: ['packages/json-schemas']
|
||||
ethereum-types: ['ethereum-types']
|
||||
connect: ['packages/connect']
|
||||
fill-scenarios: ['packages/fill-scenarios']
|
||||
dev-tools-pages: ['packages/dev-tools-pages']
|
||||
testnet-faucets: ['packages/testnet-faucets']
|
||||
monorepo-scripts: ['packages/monorepo-scripts']
|
19
.github/stale.yml
vendored
Normal file
19
.github/stale.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 30
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 30
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- pinned
|
||||
- security
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: stale
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: >
|
||||
This issue has been automatically closed because no activity occured in 7 days after being marked as stale. If it's still relevant - feel free to reopen. Thank you
|
||||
for your contributions.
|
27
.gitignore
vendored
27
.gitignore
vendored
@@ -11,6 +11,10 @@ pids
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# SQLite database files
|
||||
*.db
|
||||
*.sqlite
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
@@ -79,13 +83,29 @@ packages/react-docs/example/public/bundle*
|
||||
packages/testnet-faucets/server/
|
||||
|
||||
# generated contract artifacts/
|
||||
packages/contracts/generated-artifacts/
|
||||
packages/sol-cov/test/fixtures/artifacts/
|
||||
contracts/exchange/generated-artifacts/
|
||||
contracts/asset-proxy/generated-artifacts/
|
||||
contracts/multisig/generated-artifacts/
|
||||
contracts/utils/generated-artifacts/
|
||||
contracts/exchange-libs/generated-artifacts/
|
||||
contracts/erc20/generated-artifacts/
|
||||
contracts/erc721/generated-artifacts/
|
||||
contracts/extensions/generated-artifacts/
|
||||
contracts/exchange-forwarder/generated-artifacts/
|
||||
packages/sol-tracing-utils/test/fixtures/artifacts/
|
||||
packages/metacoin/artifacts/
|
||||
|
||||
# generated contract wrappers
|
||||
packages/abi-gen-wrappers/wrappers
|
||||
packages/contracts/generated-wrappers/
|
||||
contracts/exchange/generated-wrappers/
|
||||
contracts/asset-proxy/generated-wrappers/
|
||||
contracts/multisig/generated-wrappers/
|
||||
contracts/utils/generated-wrappers/
|
||||
contracts/exchange-libs/generated-wrappers/
|
||||
contracts/erc20/generated-wrappers/
|
||||
contracts/erc721/generated-wrappers/
|
||||
contracts/extensions/generated-wrappers/
|
||||
contracts/exchange-forwarder/generated-wrappers/
|
||||
packages/metacoin/src/contract_wrappers
|
||||
|
||||
# solc-bin in sol-compiler
|
||||
@@ -99,6 +119,7 @@ packages/*/scripts/
|
||||
.mypy_cache
|
||||
.tox
|
||||
python-packages/*/build
|
||||
python-packages/*/dist
|
||||
__pycache__
|
||||
python-packages/*/src/*.egg-info
|
||||
python-packages/*/.coverage
|
||||
|
@@ -1,13 +1,35 @@
|
||||
lib
|
||||
.nyc_output
|
||||
/packages/contracts/generated-wrappers
|
||||
/packages/contracts/generated-artifacts
|
||||
/contracts/exchange/generated-wrappers
|
||||
/contracts/exchange/generated-artifacts
|
||||
/contracts/asset-proxy/generated-wrappers
|
||||
/contracts/asset-proxy/generated-artifacts
|
||||
/contracts/multisig/generated-wrappers
|
||||
/contracts/multisig/generated-artifacts
|
||||
/contracts/utils/generated-wrappers
|
||||
/contracts/utils/generated-artifacts
|
||||
/contracts/exchange-libs/generated-wrappers
|
||||
/contracts/exchange-libs/generated-artifacts
|
||||
/contracts/erc20/generated-wrappers
|
||||
/contracts/erc20/generated-artifacts
|
||||
/contracts/erc721/generated-wrappers
|
||||
/contracts/erc721/generated-artifacts
|
||||
/contracts/extensions/generated-wrappers
|
||||
/contracts/extensions/generated-artifacts
|
||||
/contracts/exchange-forwarder/generated-wrappers
|
||||
/contracts/exchange-forwarder/generated-artifacts
|
||||
/packages/abi-gen-wrappers/src/generated-wrappers
|
||||
/packages/contract-artifacts/artifacts
|
||||
/python-packages/contract_artifacts/src/zero_ex/contract_artifacts/artifacts
|
||||
/packages/json-schemas/schemas
|
||||
/python-packages/json_schemas/src/zero_ex/json_schemas/schemas
|
||||
/packages/metacoin/src/contract_wrappers
|
||||
/packages/metacoin/artifacts
|
||||
/packages/sra-spec/public/
|
||||
/packages/dev-tools-pages/ts/**/data.json
|
||||
package.json
|
||||
scripts/postpublish_utils.js
|
||||
packages/sol-cov/test/fixtures/artifacts
|
||||
packages/sol-coverage/test/fixtures/artifacts
|
||||
.pytest_cache
|
||||
.mypy_cache
|
||||
.tox
|
||||
|
28
CODEOWNERS
28
CODEOWNERS
@@ -10,19 +10,29 @@ packages/instant/ @BMillman19 @fragosti @steveklebanoff
|
||||
packages/website/ @BMillman19 @fragosti @fabioberger @steveklebanoff
|
||||
|
||||
# Dev tools & setup
|
||||
.circleci/ @LogvinovLeon
|
||||
packages/abi-gen/ @LogvinovLeon
|
||||
packages/base-contract/ @LogvinovLeon
|
||||
packages/contract_templates/ @LogvinovLeon
|
||||
packages/connect/ @fragosti
|
||||
packages/abi-gen-templates/ @LogvinovLeon
|
||||
packages/contract-addresses/ @albrow
|
||||
packages/contract-artifacts/ @albrow
|
||||
packages/dev-utils/ @LogvinovLeon @fabioberger
|
||||
|
||||
packages/devnet/ @albrow
|
||||
packages/ethereum-types/ @LogvinovLeon
|
||||
packages/metacoin/ @LogvinovLeon
|
||||
packages/sol-compiler/ @LogvinovLeon
|
||||
packages/sol-cov/ @LogvinovLeon
|
||||
packages/sol-resolver/ @LogvinovLeon
|
||||
packages/web3-wrapper/ @LogvinovLeon @fabioberger
|
||||
.circleci/ @LogvinovLeon
|
||||
packages/subproviders/ @fabioberger @dekz
|
||||
packages/connect/ @fragosti
|
||||
packages/monorepo-scripts/ @fabioberger
|
||||
packages/order-utils/ @fabioberger @LogvinovLeon
|
||||
packages/sol-compiler/ @LogvinovLeon
|
||||
packages/sol-coverage/ @LogvinovLeon
|
||||
packages/sol-profiler/ @LogvinovLeon
|
||||
packages/sol-trace/ @LogvinovLeon
|
||||
packages/sol-tracing-utils/ @LogvinovLeon
|
||||
packages/sol-resolver/ @LogvinovLeon
|
||||
packages/subproviders/ @fabioberger @dekz
|
||||
packages/verdaccio/ @albrow
|
||||
packages/web3-wrapper/ @LogvinovLeon @fabioberger
|
||||
python-packages/ @feuGeneA
|
||||
|
||||
# Protocol/smart contracts
|
||||
contracts/core/test/ @albrow
|
||||
|
@@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
- Using welcoming and inclusive language
|
||||
- Being respectful of differing viewpoints and experiences
|
||||
- Gracefully accepting constructive criticism
|
||||
- Focusing on what is best for the community
|
||||
- Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
- The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
- Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
|
110
CONTRIBUTING.md
110
CONTRIBUTING.md
@@ -1,61 +1,105 @@
|
||||
## 0x Contribution Guide
|
||||
|
||||
Thank you for your interest in contributing to 0x protocol! We welcome contributions from anyone on the internet, and are grateful for even the smallest of fixes!
|
||||
We welcome contributions from anyone on the internet and are grateful for even the smallest contributions. This document will help get you setup to start contributing back to 0x.
|
||||
|
||||
### How to contribute
|
||||
### Getting started
|
||||
|
||||
If you'd like to contribute to 0x protocol, please fork the repo, fix, commit and send a pull request against the `development` branch for the maintainers to review and merge into the main code base. If you wish to submit more complex changes though, please check with a core dev first on [our RocketChat #dev channel](http://chat.0xproject.com) to ensure those changes are in-line with the general philosophy of the project and/or to get some early feedback which can make both your efforts easier as well as our review and merge procedures quick and simple.
|
||||
1. Fork `0xproject/0x-monorepo`
|
||||
2. Clone your fork
|
||||
3. Follow the [installation & build steps](https://github.com/0xProject/0x-monorepo#install-dependencies) in the repo's top-level README.
|
||||
4. Setup the recommended [Development Tooling](#development-tooling).
|
||||
5. Open a PR with the `[WIP]` flag against the `development` branch and describe the change you are intending to undertake in the PR description. (see [our branch naming conventions](#branch-structure))
|
||||
|
||||
We encourage a “PR early” approach so create the PR as early as possible even without the fix/feature ready, so that devs and other contributors know you have picked up the issue. These early PRs should indicate an 'in progress' status by adding the '[WIP]' prefix to the PR title. Please make sure your contributions adhere to our coding guidelines:
|
||||
Before removing the `[WIP]` tag and submitting the PR for review, make sure:
|
||||
|
||||
* Pull requests adding features or refactoring should be opened against the `development` branch
|
||||
* Pull requests fixing bugs in the latest release version should be opened again the `master` branch
|
||||
* Write [good commit messages](https://chris.beams.io/posts/git-commit/)
|
||||
- It passes our linter checks (`yarn lint`)
|
||||
- It is properly formatted with Prettier (`yarn prettier`)
|
||||
- It passes our continuous integration tests (See: [Enabling code coverage checks on your fork](#enabling-code-coverage-checks-on-your-fork) for instructions on getting the `submit-coverage` test to pass on forks)
|
||||
- You've created/updated the corresponding [CHANGELOG](#CHANGELOGs) entries.
|
||||
- Your changes have sufficient test coverage (e.g regression tests have been added for bug fixes)
|
||||
|
||||
### Code quality
|
||||
### Branch structure
|
||||
|
||||
Because 0x.js is used by multiple relayers in production and their businesses depend on it, we strive for exceptional code quality. Please follow the existing code standards and conventions. `tslint` and `prettier` (described below) will help you.
|
||||
We have two main branches:
|
||||
|
||||
If you're adding functionality, please also add tests and make sure they pass. We have an automatic coverage reporting tool, so we'll see it if they are missing ;)
|
||||
If you're adding a new public function/member, make sure you document it with Java doc-style comments. We use typedoc to generate [awesome documentation](https://0xproject.com/docs/0xjs) from the comments within our source code.
|
||||
- `master` represents the most recently released (published on npm) version of the codebase.
|
||||
- `development` represents the current development state of the codebase.
|
||||
|
||||
If the sub-package you are modifying has a `CHANGELOG.md` file, make sure to add an entry in it for the change made to the package. For published packages, only changes that modify the public interface or behavior of the package need a CHANGELOG entry.
|
||||
ALL PRs should be opened against `development`.
|
||||
|
||||
#### Enabling code coverage checks on your fork
|
||||
Branch names should be prefixed with `fix`, `feature` or `refactor`.
|
||||
|
||||
If you simply fork the repo and then create a PR sourced from it, your PR will fail its test coverage check. This is because the 0x CircleCI configuration sets the `COVERALLS_REPO_TOKEN` environment variable to the token for 0xProject/0x-monorepo, but when running the check against your fork the token needs to match the repo that is your fork, rather than the 0x repo.
|
||||
- e.g `fix/broken-wiki-link`
|
||||
- If the PR only edits a single package, add it's name too
|
||||
- e.g `fix/website/broken-wiki-link`
|
||||
|
||||
To facilitate this check, after creating your fork, but before creating the branch for your PR, do the following:
|
||||
### CHANGELOGs
|
||||
|
||||
1. Log in to [coveralls.io](https://coveralls.io/), go to Add Repos, and enable your fork. Then go to the settings for that repo, and copy the Repo Token identifier.
|
||||
2. Log in to [CircleCI](https://circleci.com/login), go to Add Projects, click the Set Up Project button corresponding to your fork, and then click Start Building. (Aside from step 3 below, no actual set up is needed, since it will use the `.circleci/config.yml` file in 0x-monorepo, so you can ignore all of the instruction/explanation given on the page with the Start Building button.)
|
||||
3. In CircleCI, configure your project to add an Environment Variable, with name `COVERALLS_REPO_TOKEN`, and for the value paste in the Repo Token you copied in step 1.
|
||||
At 0x we use [Semantic Versioning](http://semver.org/) for all our published packages. If a change you make corresponds to a semver bump, you must modify the package's `CHANGELOG.json` file accordingly.
|
||||
|
||||
Now, when you push to your branch, CircleCI will automatically run all of the checks in your own instance, and the coverage check will work since it has the proper Repo Token, and the PR will magically refer to your own checks rather than running them in the 0x CircleCI instance.
|
||||
Each CHANGELOG entry that corresponds to a published package will have a `timestamp`. If no entry exists without a `timestamp`, you must first create a new one:
|
||||
|
||||
### Styleguide
|
||||
```
|
||||
{
|
||||
"version": "1.0.1", <- The updated package version
|
||||
"changes": [
|
||||
{
|
||||
"note": "", <- Describe your change
|
||||
"PR": 100 <- Your PR number
|
||||
}
|
||||
]
|
||||
},
|
||||
```
|
||||
|
||||
We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) to keep our code style consistent.
|
||||
If an entry without a `timestamp` already exists, this means other changes have been introduced by other collaborators since the last publish. Add your changes to the list of notes and adjust the version if your PR introduces a greater semver change (i.e current changes required a patch bump, but your changes require a major version bump).
|
||||
|
||||
To lint your code just run: `yarn lint`
|
||||
### Development Tooling
|
||||
|
||||
We also use [Prettier](https://prettier.io/) to auto-format our code. Be sure to either add a [text editor integration](https://prettier.io/docs/en/editors.html) or a [pre-commit hook](https://prettier.io/docs/en/precommit.html) to properly format your code changes.
|
||||
We strongly recommend you use the [VSCode](https://code.visualstudio.com/) text editor since most of our code is written in Typescript and it offers amazing support for the language.
|
||||
|
||||
#### Linter
|
||||
|
||||
We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) to keep our code-style consistent.
|
||||
|
||||
Use `yarn:lint` to lint the entire monorepo, and `PKG={PACKAGE_NAME} yarn lint` to lint a specific package.
|
||||
|
||||
If you want to change a rule, or add a custom rule, please make these changes to our [tslint-config](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) package. All other packages have it as a dependency.
|
||||
|
||||
Integrate it into your text editor:
|
||||
|
||||
- VSCode: [vscode-tslint](https://marketplace.visualstudio.com/items?itemName=eg2.tslint)
|
||||
- Atom: [linter-tslint](https://atom.io/packages/linter-tslint)
|
||||
|
||||
#### Auto-formatter
|
||||
|
||||
We use [Prettier](https://prettier.io/) to auto-format our code. Be sure to either add a [text editor integration](https://prettier.io/docs/en/editors.html) or a [pre-commit hook](https://prettier.io/docs/en/precommit.html) to properly format your code changes.
|
||||
|
||||
If using the Atom text editor, we recommend you install the following packages:
|
||||
|
||||
* [atom-typescript](https://atom.io/packages/atom-typescript)
|
||||
* [linter-tslint](https://atom.io/packages/linter-tslint)
|
||||
* [prettier-atom](https://atom.io/packages/prettier-atom)
|
||||
* [language-ethereum](https://atom.io/packages/language-ethereum)
|
||||
- VSCode: [prettier-vscode](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
|
||||
- Atom: [prettier-atom](https://atom.io/packages/prettier-atom)
|
||||
|
||||
Our CI will also run TSLint and Prettier as a part of the test run when you submit your PR. Make sure that the CI tests pass for your contribution.
|
||||
## Unenforced coding conventions
|
||||
|
||||
### Branch structure & versioning
|
||||
A few of our coding conventions are not yet enforced by the linter/auto-formatter. Be careful to follow these conventions in your PR's.
|
||||
|
||||
We use [semantic versioning](http://semver.org/), but before a package reaches v1.0.0 all breaking changes as well as new features will be minor version bumps.
|
||||
1. Unused anonymous function parameters should be named with an underscore + number (e.g \_1, \_2, etc...)
|
||||
1. There should be a new-line between methods in a class and between test cases.
|
||||
1. If a string literal has the same value in two or more places, it should be a single constant referenced in both places.
|
||||
1. Do not import from a project's `index.ts` (e.g import { Token } from '../src';). Always import from the source file itself.
|
||||
1. Generic error variables should be named `err` instead of `e` or `error`.
|
||||
1. If you _must_ cast a variable to any - try to type it back as fast as possible. (e.g., `const cw = ((zeroEx as any)._contractWrappers as ContractWrappers);`). This ensures subsequent code is type-safe.
|
||||
1. Our enum conventions coincide with the recommended Typescript conventions, using capitalized keys, and all-caps snake-case values. Eg `GetStats = 'GET_STATS'`
|
||||
1. All public, exported methods/functions/classes must have associated Javadoc-style comments.
|
||||
|
||||
We have two main branches: `master` and `development`.
|
||||
### Fix `submit-coverage` CI failure
|
||||
|
||||
`master` represents the most recent released (published on npm) version.
|
||||
If you simply fork the repo and then create a PR from it, your PR will fail the `submit-coverage` check on CI. This is because the 0x CircleCI configuration sets the `COVERALLS_REPO_TOKEN` environment variable to the token for `0xProject/0x-monorepo`, but when running the check against your fork the token needs to match your repo's name `your-username/0x-monorepo`.
|
||||
|
||||
`development` represents the development state and is a default branch to which you will submit a PR. We use this structure so that we can push hotfixes to the currently released version without needing to publish all the changes made towards the next release. If a hotfix is implemented on `master`, it is back-ported to `development`.
|
||||
To facilitate this check, after creating your fork, but before creating the branch for your PR, do the following:
|
||||
|
||||
1. Log in to [coveralls.io](https://coveralls.io/), go to `Add Repos`, and enable your fork. Then go to the settings for that repo, and copy the `Repo Token` identifier.
|
||||
2. Log in to [CircleCI](https://circleci.com/login), go to `Add Projects`, click the `Set Up Project` button corresponding to your fork, and then click `Start Building`. (Aside from step 3 below, no actual set up is needed, since it will use the `.circleci/config.yml` file in 0x-monorepo, so you can ignore all of the instruction/explanation given on the page with the `Start Building` button.)
|
||||
3. In CircleCI, configure your project to add an environment variable, with name `COVERALLS_REPO_TOKEN`, and for the value paste in the `Repo Token` you copied in step 1.
|
||||
|
||||
Now, when you push to your branch, CircleCI will automatically run all of the checks in your own instance, and the coverage check will work since it has the proper `Repo Token`, and the PR will magically refer to your own checks rather than running them in the 0x CircleCI instance.
|
||||
|
@@ -46,10 +46,14 @@
|
||||
|
||||
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
||||
|
||||
| Package | Version |
|
||||
| ------------------: | :------ |
|
||||
| `0x.js` | 0.25.0 |
|
||||
| `Exchange Contract` | v1 |
|
||||
| Package | Version |
|
||||
| ------: | :------ |
|
||||
|
||||
|
||||
<!-- For example:
|
||||
| `0x.js` | 2.0.4 |
|
||||
| `Exchange Contract` | v2 |
|
||||
-->
|
||||
|
||||
| Network |
|
||||
| ------- |
|
||||
|
4
LICENSE
4
LICENSE
@@ -1,4 +1,4 @@
|
||||
Copyright 2017 ZeroEx Inc.
|
||||
Copyright 2017 ZeroEx Intl.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -10,4 +10,4 @@ Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
limitations under the License.
|
||||
|
@@ -20,8 +20,7 @@
|
||||
|
||||
<!--- The following points should be used to indicate the progress of your PR. Put an `x` in all the boxes that apply right now, and come back over time and check them off as you make progress. If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
|
||||
|
||||
* [ ] Prefix PR title with `[WIP]` if necessary.
|
||||
* [ ] Prefix PR title with bracketed package name(s) corresponding to the changed package(s). For example: `[sol-cov] Fixed bug`.
|
||||
* [ ] Add tests to cover changes as needed.
|
||||
* [ ] Update documentation as needed.
|
||||
* [ ] Add new entries to the relevant CHANGELOG.jsons.
|
||||
- [ ] Prefix PR title with `[WIP]` if necessary.
|
||||
- [ ] Add tests to cover changes as needed.
|
||||
- [ ] Update documentation as needed.
|
||||
- [ ] Add new entries to the relevant CHANGELOG.jsons.
|
||||
|
144
README.md
144
README.md
@@ -1,8 +1,8 @@
|
||||
<img src="https://github.com/0xProject/branding/blob/master/0x_Black_CMYK.png" width="200px" >
|
||||
<img src="https://github.com/0xProject/branding/blob/master/0x%20Logo/PNG/0x-Logo-Black.png" width="150px" >
|
||||
|
||||
---
|
||||
|
||||
[0x][website-url] is an open protocol that facilitates trustless, low friction exchange of Ethereum-based assets. A full description of the protocol may be found in our [whitepaper][whitepaper-url].
|
||||
[0x][website-url] is an open protocol that facilitates trustless, low friction exchange of Ethereum-based assets. For more information on how it works, check out the [0x protocol specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
|
||||
|
||||
This repository is a monorepo including the 0x protocol smart contracts and numerous developer tools. Each public sub-package is independently published to NPM.
|
||||
|
||||
@@ -18,55 +18,93 @@ If you're developing on 0x now or are interested in using 0x infrastructure in t
|
||||
[](https://gitter.im/0xProject/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](https://opensource.org/licenses/Apache-2.0)
|
||||
|
||||
### Published Packages
|
||||
## Packages
|
||||
|
||||
| Package | Version | Description |
|
||||
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
||||
| [`0x.js`](/packages/0x.js) | [](https://www.npmjs.com/package/0x.js) | A Javascript library for interacting with the 0x protocol |
|
||||
| [`@0x/abi-gen`](/packages/abi-gen) | [](https://www.npmjs.com/package/@0x/abi-gen) | Tool to generate TS wrappers from smart contract ABIs |
|
||||
| [`@0x/assert`](/packages/assert) | [](https://www.npmjs.com/package/@0x/assert) | Type and schema assertions used by our packages |
|
||||
| [`@0x/asset-buyer`](/packages/asset-buyer) | [](https://www.npmjs.com/package/@0x/asset-buyer) | Convenience package for discovering and buying assets with Ether. |
|
||||
| [`@0x/base-contract`](/packages/base-contract) | [](https://www.npmjs.com/package/@0x/base-contract) | BaseContract used by auto-generated `abi-gen` wrapper contracts |
|
||||
| [`@0x/connect`](/packages/connect) | [](https://www.npmjs.com/package/@0x/connect) | A Javascript library for interacting with the Standard Relayer API |
|
||||
| [`@0x/dev-utils`](/packages/dev-utils) | [](https://www.npmjs.com/package/@0x/dev-utils) | Dev utils to be shared across 0x projects and packages |
|
||||
| [`@0x/json-schemas`](/packages/json-schemas) | [](https://www.npmjs.com/package/@0x/json-schemas) | 0x-related json schemas |
|
||||
| [`@0x/monorepo-scripts`](/packages/monorepo-scripts) | [](https://www.npmjs.com/package/@0x/monorepo-scripts) | Monorepo scripts |
|
||||
| [`@0x/order-utils`](/packages/order-utils) | [](https://www.npmjs.com/package/@0x/order-utils) | A set of utilities for generating, parsing, signing and validating 0x orders. |
|
||||
| [`@0x/react-docs`](/packages/react-docs) | [](https://www.npmjs.com/package/@0x/react-docs) | React documentation component for rendering TypeDoc & Doxity generated JSON |
|
||||
| [`@0x/react-shared`](/packages/react-shared) | [](https://www.npmjs.com/package/@0x/react-shared) | 0x shared react components |
|
||||
| [`@0x/sol-compiler`](/packages/sol-compiler) | [](https://www.npmjs.com/package/@0x/sol-compiler) | A thin wrapper around Solc.js that outputs artifacts, resolves imports, only re-compiles when needed, and other niceties. |
|
||||
| [`@0x/sol-cov`](/packages/sol-cov) | [](https://www.npmjs.com/package/@0x/sol-cov) | Solidity test coverage tool |
|
||||
| [`@0x/sra-spec`](/packages/sra-spec) | [](https://www.npmjs.com/package/@0x/sra-spec) | OpenAPI specification for the standard relayer API |
|
||||
| [`@0x/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0x/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
|
||||
| [`@0x/tslint-config`](/packages/tslint-config) | [](https://www.npmjs.com/package/@0x/tslint-config) | Custom 0x development TSLint rules |
|
||||
| [`@0x/types`](/packages/types) | [](https://www.npmjs.com/package/@0x/types) | Shared type declarations |
|
||||
| [`@0x/typescript-typings`](/packages/typescript-typings) | [](https://www.npmjs.com/package/@0x/typescript-typings) | Repository of types for external packages |
|
||||
| [`@0x/utils`](/packages/utils) | [](https://www.npmjs.com/package/@0x/utils) | Shared utilities |
|
||||
| [`@0x/web3-wrapper`](/packages/web3-wrapper) | [](https://www.npmjs.com/package/@0x/web3-wrapper) | Web3 wrapper |
|
||||
Visit our [developer portal](https://0xproject.com/docs/order-utils) for a comprehensive list of core & community maintained packages. All packages maintained with this monorepo are listed below.
|
||||
|
||||
### Private Packages
|
||||
### Python Packages
|
||||
|
||||
| Package | Description |
|
||||
| -------------------------------------------------------- | ---------------------------------------------------------------- |
|
||||
| [`@0x/contracts`](/packages/contracts) | 0x solidity smart contracts & tests |
|
||||
| [`@0x/react-docs-example`](/packages/react-docs-example) | Example documentation site created with `@0x/react-docs` |
|
||||
| [`@0x/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether |
|
||||
| [`@0x/website`](/packages/website) | 0x website & Portal DApp |
|
||||
| Package | Version | Description |
|
||||
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| [`0x-contract-addresses`](/python-packages/contract_addresses) | [](https://pypi.org/project/0x-contract-addresses/) | A tiny utility library for getting known deployed contract addresses for a particular network |
|
||||
| [`0x-contract-artifacts`](/python-packages/contract_artifacts) | [](https://pypi.org/project/0x-contract-artifacts/) | 0x smart contract compilation artifacts |
|
||||
| [`0x-json-schemas`](/python-packages/json_schemas) | [](https://pypi.org/project/0x-json-schemas/) | 0x-related JSON schemas |
|
||||
| [`0x-order-utils`](/python-packages/order_utils) | [](https://pypi.org/project/0x-order-utils/) | A set of utilities for generating, parsing, signing and validating 0x orders |
|
||||
| [`0x-sra-client`](/python-packages/sra_client) | [](https://pypi.org/project/0x-sra-client/) | A Python client for interacting with servers conforming to the Standard Relayer API specification |
|
||||
|
||||
### Solidity Packages
|
||||
|
||||
| Package | Version | Description |
|
||||
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| [`@0x/contracts-asset-proxy`](/contracts/asset-proxy) | [](https://www.npmjs.com/package/@0x/contracts-asset-proxy) | [`AssetProxy`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#assetproxy) contracts used within the protocol |
|
||||
| [`@0x/contracts-erc20`](/contracts/erc20) | [](https://www.npmjs.com/package/@0x/contracts-erc20) | Implementations of various ERC20 tokens |
|
||||
| [`@0x/contracts-erc721`](/contracts/erc721) | [](https://www.npmjs.com/package/@0x/contracts-erc721) | Implementations of various ERC721 tokens |
|
||||
| [`@0x/contracts-exchange`](/contracts/exchange) | [](https://www.npmjs.com/package/@0x/contracts-exchange) | The [`Exchange`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#exchange) contract used for settling trades within the protocol |
|
||||
| [`@0x/contracts-exchange-forwarder`](/contracts/exchange-forwarder) | [](https://www.npmjs.com/package/@0x/contracts-exchange-forwarder) | A [`Forwarder`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/forwarder-specification.md) contract used to simplify UX for interacting with the protocol |
|
||||
| [`@0x/contracts-exchange-libs`](/contracts/exchange-libs) | [](https://www.npmjs.com/package/@0x/contracts-exchange-libs) | Protocol specific Llbraries used within the [`Exchange`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#exchange) contract |
|
||||
| [`@0x/contracts-extensions`](/contracts/extensions) | [](https://www.npmjs.com/package/@0x/contracts-extensions) | Contracts that interact with and extend the functionality of the core protocol |
|
||||
| [`@0x/contracts-multisig`](/contracts/multisig) | [](https://www.npmjs.com/package/@0x/contracts-multisig) | Various implementations of multisignature wallets, including the [`AssetProxyOwner`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#assetproxyowner) contract that has permissions to upgrade the protocol |
|
||||
| [`@0x/contracts-test-utils`](/contracts/test-utils) | [](https://www.npmjs.com/package/@0x/contracts-test-utils) | Typescript/Javascript shared utilities used for testing contracts |
|
||||
| [`@0x/contracts-utils`](/contracts/utils) | [](https://www.npmjs.com/package/@0x/contracts-utils) | Generic libraries and utilities used throughout all of the contracts |
|
||||
|
||||
### Typescript/Javascript Packages
|
||||
|
||||
#### 0x-specific packages
|
||||
|
||||
| Package | Version | Description |
|
||||
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| [`0x.js`](/packages/0x.js) | [](https://www.npmjs.com/package/0x.js) | An aggregate package combining many smaller utility packages for interacting with the 0x protocol |
|
||||
| [`@0x/contract-addresses`](/packages/contract-addresses) | [](https://www.npmjs.com/package/@0x/contract-addresses) | A tiny utility library for getting known deployed contract addresses for a particular network. |
|
||||
| [`@0x/contract-wrappers`](/packages/contract-wrappers) | [](https://www.npmjs.com/package/@0x/contract-wrappers) | JS/TS wrappers for interacting with the 0x smart contracts |
|
||||
| [`@0x/order-utils`](/packages/order-utils) | [](https://www.npmjs.com/package/@0x/order-utils) | A set of utilities for generating, parsing, signing and validating 0x orders |
|
||||
| [`@0x/json-schemas`](/packages/json-schemas) | [](https://www.npmjs.com/package/@0x/json-schemas) | 0x-related JSON schemas |
|
||||
| [`@0x/order-watcher`](/packages/order-watcher) | [](https://www.npmjs.com/package/@0x/order-watcher) | An order watcher daemon that watches for order validity |
|
||||
| [`@0x/migrations`](/packages/migrations) | [](https://www.npmjs.com/package/@0x/migrations) | Migration tool for deploying 0x smart contracts on private testnets |
|
||||
| [`@0x/contract-artifacts`](/packages/contract-artifacts) | [](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts |
|
||||
| [`@0x/abi-gen-wrappers`](/packages/abi-gen-wrappers) | [](https://www.npmjs.com/package/@0x/abi-gen-wrappers) | Low-level 0x smart contract wrappers generated using `@0x/abi-gen` |
|
||||
| [`@0x/sra-spec`](/packages/sra-spec) | [](https://www.npmjs.com/package/@0x/sra-spec) | OpenAPI specification for the Standard Relayer API |
|
||||
| [`@0x/connect`](/packages/connect) | [](https://www.npmjs.com/package/@0x/connect) | An HTTP/WS client for interacting with the Standard Relayer API |
|
||||
| [`@0x/asset-buyer`](/packages/asset-buyer) | [](https://www.npmjs.com/package/@0x/asset-buyer) | Convenience package for discovering and buying assets with Ether |
|
||||
|
||||
#### Ethereum tooling
|
||||
|
||||
| Package | Version | Description |
|
||||
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| [`@0x/web3-wrapper`](/packages/web3-wrapper) | [](https://www.npmjs.com/package/@0x/web3-wrapper) | An Ethereum JSON RPC client |
|
||||
| [`@0x/sol-compiler`](/packages/sol-compiler) | [](https://www.npmjs.com/package/@0x/sol-compiler) | A wrapper around solc-js that adds smart re-compilation, ability to compile an entire project, Solidity version specific compilation, standard input description support and much more. |
|
||||
| [`@0x/sol-coverage`](/packages/sol-coverage) | [](https://www.npmjs.com/package/@0x/sol-coverage) | A solidity test coverage tool |
|
||||
| [`@0x/sol-profiler`](/packages/sol-profiler) | [](https://www.npmjs.com/package/@0x/sol-profiler) | A solidity gas cost profiler |
|
||||
| [`@0x/sol-trace`](/packages/sol-trace) | [](https://www.npmjs.com/package/@0x/sol-trace) | A solidity stack trace tool |
|
||||
| [`@0x/sol-resolver`](/packages/sol-resolver) | [](https://www.npmjs.com/package/@0x/sol-resolver) | Import resolver for smart contracts dependencies |
|
||||
| [`@0x/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0x/subproviders) | Web3 provider middlewares (e.g. LedgerSubprovider) |
|
||||
| [`@0x/sol-doc`](/packages/sol-doc) | [](https://www.npmjs.com/package/@0x/sol-doc) | Solidity documentation generator |
|
||||
|
||||
#### Utilities
|
||||
|
||||
| Package | Version | Description |
|
||||
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
||||
| [`@0x/abi-gen`](/packages/abi-gen) | [](https://www.npmjs.com/package/@0x/abi-gen) | Tool to generate TS wrappers from smart contract ABIs |
|
||||
| [`@0x/tslint-config`](/packages/tslint-config) | [](https://www.npmjs.com/package/@0x/tslint-config) | Custom TSLint rules used by the 0x core team |
|
||||
| [`@0x/types`](/packages/types) | [](https://www.npmjs.com/package/@0x/types) | Shared type declarations |
|
||||
| [`@0x/typescript-typings`](/packages/typescript-typings) | [](https://www.npmjs.com/package/@0x/typescript-typings) | Repository of types for external packages |
|
||||
| [`@0x/utils`](/packages/utils) | [](https://www.npmjs.com/package/@0x/utils) | Shared utilities |
|
||||
| [`@0x/react-docs`](/packages/react-docs) | [](https://www.npmjs.com/package/@0x/react-docs) | React documentation component for rendering TypeDoc & sol-doc generated JSON |
|
||||
| [`@0x/react-shared`](/packages/react-shared) | [](https://www.npmjs.com/package/@0x/react-shared) | 0x shared react components |
|
||||
| [`@0x/assert`](/packages/assert) | [](https://www.npmjs.com/package/@0x/assert) | Type and schema assertions used by our packages |
|
||||
| [`@0x/base-contract`](/packages/base-contract) | [](https://www.npmjs.com/package/@0x/base-contract) | BaseContract used by auto-generated `abi-gen` wrapper contracts |
|
||||
| [`@0x/dev-utils`](/packages/dev-utils) | [](https://www.npmjs.com/package/@0x/dev-utils) | Dev utils to be shared across 0x packages |
|
||||
| [`@0x/fill-scenarios`](/packages/fill-scenarios) | [](https://www.npmjs.com/package/@0x/fill-scenarios) | 0x order fill scenario generator |
|
||||
|
||||
#### Private Packages
|
||||
|
||||
| Package | Description |
|
||||
| -------------------------------------------------- | -------------------------------------------------------------------------------- |
|
||||
| [`@0x/instant`](/packages/instant) | A free and flexible way to offer simple crypto purchasing in any app or website. |
|
||||
| [`@0x/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether |
|
||||
| [`@0x/website`](/packages/website) | 0x website |
|
||||
|
||||
## Usage
|
||||
|
||||
Dedicated documentation pages:
|
||||
|
||||
* [0x.js Library](https://0xproject.com/docs/0xjs)
|
||||
* [0x Connect](https://0xproject.com/docs/connect)
|
||||
* [Smart contracts](https://0xproject.com/docs/contracts)
|
||||
* [Subproviders](https://0xproject.com/docs/subproviders)
|
||||
* [Sol Compiler](https://0xproject.com/docs/sol-compiler)
|
||||
* [Web3-wrapper](https://0xproject.com/docs/web3-wrapper)
|
||||
* [JSON-schemas](https://0xproject.com/docs/json-schemas)
|
||||
* [Sol-cov](https://0xproject.com/docs/sol-cov)
|
||||
* [Standard Relayer API](https://github.com/0xProject/standard-relayer-api/blob/master/README.md)
|
||||
|
||||
Node version >= 6.12 is required.
|
||||
|
||||
Most of the packages require additional typings for external dependencies.
|
||||
@@ -86,6 +124,10 @@ We strongly recommend that the community help us make improvements and determine
|
||||
|
||||
Make sure you are using Yarn v1.9.4. To install using brew:
|
||||
|
||||
```bash
|
||||
brew install yarn@1.9.4
|
||||
```
|
||||
|
||||
Then install dependencies
|
||||
|
||||
```bash
|
||||
@@ -106,6 +148,12 @@ To build a specific package:
|
||||
PKG=@0x/web3-wrapper yarn build
|
||||
```
|
||||
|
||||
To build all contracts packages:
|
||||
|
||||
```bash
|
||||
yarn build:contracts
|
||||
```
|
||||
|
||||
### Watch
|
||||
|
||||
To re-build all packages on change:
|
||||
@@ -178,3 +226,9 @@ Run a specific package's test:
|
||||
```bash
|
||||
PKG=@0x/web3-wrapper yarn test
|
||||
```
|
||||
|
||||
Run all contracts packages tests:
|
||||
|
||||
```bash
|
||||
yarn test:contracts
|
||||
```
|
||||
|
@@ -5,6 +5,7 @@
|
||||
"avoid-tx-origin": "warn",
|
||||
"bracket-align": false,
|
||||
"code-complexity": false,
|
||||
"compiler-fixed": false,
|
||||
"const-name-snakecase": "error",
|
||||
"expression-indent": "error",
|
||||
"function-max-lines": false,
|
48
contracts/TESTING.md
Normal file
48
contracts/TESTING.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# Contracts testing options
|
||||
|
||||
## Revert stack traces
|
||||
|
||||
If you want to see helpful stack traces (incl. line number, code snippet) for smart contract reverts, run the tests with:
|
||||
|
||||
```
|
||||
yarn test:trace
|
||||
```
|
||||
|
||||
**Note:** This currently slows down the test runs and is therefore not enabled by default.
|
||||
|
||||
## Backing Ethereum node
|
||||
|
||||
By default, our tests run against an in-process [Ganache](https://github.com/trufflesuite/ganache-core) instance. In order to run the tests against [Geth](https://github.com/ethereum/go-ethereum), first follow the instructions in the README for the devnet package to start the devnet Geth node. Then run:
|
||||
|
||||
```bash
|
||||
TEST_PROVIDER=geth yarn test
|
||||
```
|
||||
|
||||
## Code coverage
|
||||
|
||||
In order to see the Solidity code coverage output generated by `@0x/sol-coverage`, run:
|
||||
|
||||
```
|
||||
yarn test:coverage
|
||||
```
|
||||
|
||||
## Gas profiler
|
||||
|
||||
In order to profile the gas costs for a specific smart contract call/transaction, you can run the tests in `profiler` mode.
|
||||
|
||||
**Note:** Traces emitted by ganache have incorrect gas costs so we recommend using Geth for profiling.
|
||||
|
||||
```
|
||||
TEST_PROVIDER=geth yarn test:profiler
|
||||
```
|
||||
|
||||
You'll see a warning that you need to explicitly enable and disable the profiler before and after the block of code you want to profile.
|
||||
|
||||
```typescript
|
||||
import { profiler } from './utils/profiler';
|
||||
profiler.start();
|
||||
// Some call to a smart contract
|
||||
profiler.stop();
|
||||
```
|
||||
|
||||
Without explicitly starting and stopping the profiler, the profiler output will be too busy, and therefore unusable.
|
20
contracts/asset-proxy/CHANGELOG.json
Normal file
20
contracts/asset-proxy/CHANGELOG.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1549373905,
|
||||
"version": "1.0.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Move all AssetProxy contracts out of contracts-protocol to new package",
|
||||
"pr": 1539
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
14
contracts/asset-proxy/CHANGELOG.md
Normal file
14
contracts/asset-proxy/CHANGELOG.md
Normal file
@@ -0,0 +1,14 @@
|
||||
<!--
|
||||
changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||
Edit the package's CHANGELOG.json file only.
|
||||
-->
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.0.1 - _February 5, 2019_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.0.0 - _Invalid date_
|
||||
|
||||
* Move all AssetProxy contracts out of contracts-protocol to new package (#1539)
|
47
contracts/asset-proxy/DEPLOYS.json
Normal file
47
contracts/asset-proxy/DEPLOYS.json
Normal file
@@ -0,0 +1,47 @@
|
||||
[
|
||||
{
|
||||
"name": "MultiAssetProxy",
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Add MultiAssetProxy implementation",
|
||||
"pr": 1224,
|
||||
"networks": {
|
||||
"3": "0xab8fbd189c569ccdee3a4d929bb7f557be4028f6",
|
||||
"4": "0xb34cde0ad3a83d04abebc0b66e75196f22216621",
|
||||
"42": "0xf6313a772c222f51c28f2304c0703b8cf5428fd8"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ERC20Proxy",
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "protocol v2 deploy",
|
||||
"networks": {
|
||||
"1": "0x2240dab907db71e64d3e0dba4800c83b5c502d4e",
|
||||
"3": "0xb1408f4c245a23c31b98d2c626777d4c0d766caa",
|
||||
"4": "0x3e809c563c15a295e832e37053798ddc8d6c8dab",
|
||||
"42": "0xf1ec01d6236d3cd881a0bf0130ea25fe4234003e"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ERC721Proxy",
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "protocol v2 deploy",
|
||||
"networks": {
|
||||
"1": "0x208e41fb445f1bb1b6780d58356e81405f3e6127",
|
||||
"3": "0xe654aac058bfbf9f83fcaee7793311dd82f6ddb4",
|
||||
"4": "0x8e1ff02637cb5e39f2fa36c14706aa348b065b09",
|
||||
"42": "0x2a9127c745688a165106c11cd4d647d2220af821"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
73
contracts/asset-proxy/README.md
Normal file
73
contracts/asset-proxy/README.md
Normal file
@@ -0,0 +1,73 @@
|
||||
## AssetProxy
|
||||
|
||||
This package contains the implementations of all of the [`AssetProxy`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#assetproxy) contracts available within the 0x protocol. These contracts are responsible for decoding the `assetData` sent to them and performing the actual transfer of assets. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
|
||||
|
||||
## Installation
|
||||
|
||||
**Install**
|
||||
|
||||
```bash
|
||||
npm install @0x/contracts-asset-proxy --save
|
||||
```
|
||||
|
||||
## Bug bounty
|
||||
|
||||
A bug bounty for the 2.0.0 contracts is ongoing! Instructions can be found [here](https://0xproject.com/wiki#Bug-Bounty).
|
||||
|
||||
## Contributing
|
||||
|
||||
We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
|
||||
|
||||
For proposals regarding the 0x protocol's smart contract architecture, message format, or additional functionality, go to the [0x Improvement Proposals (ZEIPs)](https://github.com/0xProject/ZEIPs) repository and follow the contribution guidelines provided therein.
|
||||
|
||||
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
||||
|
||||
### Install Dependencies
|
||||
|
||||
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
||||
|
||||
```bash
|
||||
yarn config set workspaces-experimental true
|
||||
```
|
||||
|
||||
Then install dependencies
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Build
|
||||
|
||||
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-asset-proxy yarn build
|
||||
```
|
||||
|
||||
Or continuously rebuild on change:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-asset-proxy yarn watch
|
||||
```
|
||||
|
||||
### Clean
|
||||
|
||||
```bash
|
||||
yarn clean
|
||||
```
|
||||
|
||||
### Lint
|
||||
|
||||
```bash
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
yarn test
|
||||
```
|
||||
|
||||
#### Testing options
|
||||
|
||||
Contracts testing options like coverage, profiling, revert traces or backing node choosing - are described [here](../TESTING.md).
|
31
contracts/asset-proxy/compiler.json
Normal file
31
contracts/asset-proxy/compiler.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifactsDir": "./generated-artifacts",
|
||||
"contractsDir": "./contracts",
|
||||
"useDockerisedSolc": true,
|
||||
"compilerSettings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 1000000
|
||||
},
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode.object",
|
||||
"evm.bytecode.sourceMap",
|
||||
"evm.deployedBytecode.object",
|
||||
"evm.deployedBytecode.sourceMap"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"contracts": [
|
||||
"IAssetData",
|
||||
"IAssetProxy",
|
||||
"IAuthorizable",
|
||||
"ERC20Proxy",
|
||||
"ERC721Proxy",
|
||||
"MixinAuthorizable",
|
||||
"MultiAssetProxy"
|
||||
]
|
||||
}
|
@@ -16,11 +16,11 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../../utils/Ownable/Ownable.sol";
|
||||
import "@0x/contracts-utils/contracts/src/Ownable.sol";
|
||||
import "./mixins/MAssetProxyDispatcher.sol";
|
||||
import "../AssetProxy/interfaces/IAssetProxy.sol";
|
||||
import "./interfaces/IAssetProxy.sol";
|
||||
|
||||
|
||||
contract MixinAssetProxyDispatcher is
|
@@ -16,9 +16,9 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../../utils/Ownable/Ownable.sol";
|
||||
import "@0x/contracts-utils/contracts/src/Ownable.sol";
|
||||
import "./mixins/MAuthorizable.sol";
|
||||
|
||||
|
306
contracts/asset-proxy/contracts/src/MultiAssetProxy.sol
Normal file
306
contracts/asset-proxy/contracts/src/MultiAssetProxy.sol
Normal file
@@ -0,0 +1,306 @@
|
||||
/*
|
||||
|
||||
Copyright 2018 ZeroEx Intl.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
|
||||
import "./MixinAssetProxyDispatcher.sol";
|
||||
import "./MixinAuthorizable.sol";
|
||||
|
||||
|
||||
contract MultiAssetProxy is
|
||||
MixinAssetProxyDispatcher,
|
||||
MixinAuthorizable
|
||||
{
|
||||
// Id of this proxy.
|
||||
bytes4 constant internal PROXY_ID = bytes4(keccak256("MultiAsset(uint256[],bytes[])"));
|
||||
|
||||
// solhint-disable-next-line payable-fallback
|
||||
function ()
|
||||
external
|
||||
{
|
||||
// NOTE: The below assembly assumes that clients do some input validation and that the input is properly encoded according to the AbiV2 specification.
|
||||
// It is technically possible for inputs with very large lengths and offsets to cause overflows. However, this would make the calldata prohibitively
|
||||
// expensive and we therefore do not check for overflows in these scenarios.
|
||||
assembly {
|
||||
// The first 4 bytes of calldata holds the function selector
|
||||
let selector := and(calldataload(0), 0xffffffff00000000000000000000000000000000000000000000000000000000)
|
||||
|
||||
// `transferFrom` will be called with the following parameters:
|
||||
// assetData Encoded byte array.
|
||||
// from Address to transfer asset from.
|
||||
// to Address to transfer asset to.
|
||||
// amount Amount of asset to transfer.
|
||||
// bytes4(keccak256("transferFrom(bytes,address,address,uint256)")) = 0xa85e59e4
|
||||
if eq(selector, 0xa85e59e400000000000000000000000000000000000000000000000000000000) {
|
||||
|
||||
// To lookup a value in a mapping, we load from the storage location keccak256(k, p),
|
||||
// where k is the key left padded to 32 bytes and p is the storage slot
|
||||
mstore(0, caller)
|
||||
mstore(32, authorized_slot)
|
||||
|
||||
// Revert if authorized[msg.sender] == false
|
||||
if iszero(sload(keccak256(0, 64))) {
|
||||
// Revert with `Error("SENDER_NOT_AUTHORIZED")`
|
||||
mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(64, 0x0000001553454e4445525f4e4f545f415554484f52495a454400000000000000)
|
||||
mstore(96, 0)
|
||||
revert(0, 100)
|
||||
}
|
||||
|
||||
// `transferFrom`.
|
||||
// The function is marked `external`, so no abi decoding is done for
|
||||
// us. Instead, we expect the `calldata` memory to contain the
|
||||
// following:
|
||||
//
|
||||
// | Area | Offset | Length | Contents |
|
||||
// |----------|--------|---------|-------------------------------------|
|
||||
// | Header | 0 | 4 | function selector |
|
||||
// | Params | | 4 * 32 | function parameters: |
|
||||
// | | 4 | | 1. offset to assetData (*) |
|
||||
// | | 36 | | 2. from |
|
||||
// | | 68 | | 3. to |
|
||||
// | | 100 | | 4. amount |
|
||||
// | Data | | | assetData: |
|
||||
// | | 132 | 32 | assetData Length |
|
||||
// | | 164 | ** | assetData Contents |
|
||||
//
|
||||
// (*): offset is computed from start of function parameters, so offset
|
||||
// by an additional 4 bytes in the calldata.
|
||||
//
|
||||
// (**): see table below to compute length of assetData Contents
|
||||
//
|
||||
// WARNING: The ABIv2 specification allows additional padding between
|
||||
// the Params and Data section. This will result in a larger
|
||||
// offset to assetData.
|
||||
|
||||
// Load offset to `assetData`
|
||||
let assetDataOffset := calldataload(4)
|
||||
|
||||
// Asset data itself is encoded as follows:
|
||||
//
|
||||
// | Area | Offset | Length | Contents |
|
||||
// |----------|-------------|---------|-------------------------------------|
|
||||
// | Header | 0 | 4 | assetProxyId |
|
||||
// | Params | | 2 * 32 | function parameters: |
|
||||
// | | 4 | | 1. offset to amounts (*) |
|
||||
// | | 36 | | 2. offset to nestedAssetData (*) |
|
||||
// | Data | | | amounts: |
|
||||
// | | 68 | 32 | amounts Length |
|
||||
// | | 100 | a | amounts Contents |
|
||||
// | | | | nestedAssetData: |
|
||||
// | | 100 + a | 32 | nestedAssetData Length |
|
||||
// | | 132 + a | b | nestedAssetData Contents (offsets) |
|
||||
// | | 132 + a + b | | nestedAssetData[0, ..., len] |
|
||||
|
||||
// In order to find the offset to `amounts`, we must add:
|
||||
// 4 (function selector)
|
||||
// + assetDataOffset
|
||||
// + 32 (assetData len)
|
||||
// + 4 (assetProxyId)
|
||||
let amountsOffset := calldataload(add(assetDataOffset, 40))
|
||||
|
||||
// In order to find the offset to `nestedAssetData`, we must add:
|
||||
// 4 (function selector)
|
||||
// + assetDataOffset
|
||||
// + 32 (assetData len)
|
||||
// + 4 (assetProxyId)
|
||||
// + 32 (amounts offset)
|
||||
let nestedAssetDataOffset := calldataload(add(assetDataOffset, 72))
|
||||
|
||||
// In order to find the start of the `amounts` contents, we must add:
|
||||
// 4 (function selector)
|
||||
// + assetDataOffset
|
||||
// + 32 (assetData len)
|
||||
// + 4 (assetProxyId)
|
||||
// + amountsOffset
|
||||
// + 32 (amounts len)
|
||||
let amountsContentsStart := add(assetDataOffset, add(amountsOffset, 72))
|
||||
|
||||
// Load number of elements in `amounts`
|
||||
let amountsLen := calldataload(sub(amountsContentsStart, 32))
|
||||
|
||||
// In order to find the start of the `nestedAssetData` contents, we must add:
|
||||
// 4 (function selector)
|
||||
// + assetDataOffset
|
||||
// + 32 (assetData len)
|
||||
// + 4 (assetProxyId)
|
||||
// + nestedAssetDataOffset
|
||||
// + 32 (nestedAssetData len)
|
||||
let nestedAssetDataContentsStart := add(assetDataOffset, add(nestedAssetDataOffset, 72))
|
||||
|
||||
// Load number of elements in `nestedAssetData`
|
||||
let nestedAssetDataLen := calldataload(sub(nestedAssetDataContentsStart, 32))
|
||||
|
||||
// Revert if number of elements in `amounts` differs from number of elements in `nestedAssetData`
|
||||
if sub(amountsLen, nestedAssetDataLen) {
|
||||
// Revert with `Error("LENGTH_MISMATCH")`
|
||||
mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(64, 0x0000000f4c454e4754485f4d49534d4154434800000000000000000000000000)
|
||||
mstore(96, 0)
|
||||
revert(0, 100)
|
||||
}
|
||||
|
||||
// Copy `transferFrom` selector, offset to `assetData`, `from`, and `to` from calldata to memory
|
||||
calldatacopy(
|
||||
0, // memory can safely be overwritten from beginning
|
||||
0, // start of calldata
|
||||
100 // length of selector (4) and 3 params (32 * 3)
|
||||
)
|
||||
|
||||
// Overwrite existing offset to `assetData` with our own
|
||||
mstore(4, 128)
|
||||
|
||||
// Load `amount`
|
||||
let amount := calldataload(100)
|
||||
|
||||
// Calculate number of bytes in `amounts` contents
|
||||
let amountsByteLen := mul(amountsLen, 32)
|
||||
|
||||
// Initialize `assetProxyId` and `assetProxy` to 0
|
||||
let assetProxyId := 0
|
||||
let assetProxy := 0
|
||||
|
||||
// Loop through `amounts` and `nestedAssetData`, calling `transferFrom` for each respective element
|
||||
for {let i := 0} lt(i, amountsByteLen) {i := add(i, 32)} {
|
||||
|
||||
// Calculate the total amount
|
||||
let amountsElement := calldataload(add(amountsContentsStart, i))
|
||||
let totalAmount := mul(amountsElement, amount)
|
||||
|
||||
// Revert if `amount` != 0 and multiplication resulted in an overflow
|
||||
if iszero(or(
|
||||
iszero(amount),
|
||||
eq(div(totalAmount, amount), amountsElement)
|
||||
)) {
|
||||
// Revert with `Error("UINT256_OVERFLOW")`
|
||||
mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(64, 0x0000001055494e543235365f4f564552464c4f57000000000000000000000000)
|
||||
mstore(96, 0)
|
||||
revert(0, 100)
|
||||
}
|
||||
|
||||
// Write `totalAmount` to memory
|
||||
mstore(100, totalAmount)
|
||||
|
||||
// Load offset to `nestedAssetData[i]`
|
||||
let nestedAssetDataElementOffset := calldataload(add(nestedAssetDataContentsStart, i))
|
||||
|
||||
// In order to find the start of the `nestedAssetData[i]` contents, we must add:
|
||||
// 4 (function selector)
|
||||
// + assetDataOffset
|
||||
// + 32 (assetData len)
|
||||
// + 4 (assetProxyId)
|
||||
// + nestedAssetDataOffset
|
||||
// + 32 (nestedAssetData len)
|
||||
// + nestedAssetDataElementOffset
|
||||
// + 32 (nestedAssetDataElement len)
|
||||
let nestedAssetDataElementContentsStart := add(assetDataOffset, add(nestedAssetDataOffset, add(nestedAssetDataElementOffset, 104)))
|
||||
|
||||
// Load length of `nestedAssetData[i]`
|
||||
let nestedAssetDataElementLenStart := sub(nestedAssetDataElementContentsStart, 32)
|
||||
let nestedAssetDataElementLen := calldataload(nestedAssetDataElementLenStart)
|
||||
|
||||
// Revert if the `nestedAssetData` does not contain a 4 byte `assetProxyId`
|
||||
if lt(nestedAssetDataElementLen, 4) {
|
||||
// Revert with `Error("LENGTH_GREATER_THAN_3_REQUIRED")`
|
||||
mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(64, 0x0000001e4c454e4754485f475245415445525f5448414e5f335f524551554952)
|
||||
mstore(96, 0x4544000000000000000000000000000000000000000000000000000000000000)
|
||||
revert(0, 100)
|
||||
}
|
||||
|
||||
// Load AssetProxy id
|
||||
let currentAssetProxyId := and(
|
||||
calldataload(nestedAssetDataElementContentsStart),
|
||||
0xffffffff00000000000000000000000000000000000000000000000000000000
|
||||
)
|
||||
|
||||
// Only load `assetProxy` if `currentAssetProxyId` does not equal `assetProxyId`
|
||||
// We do not need to check if `currentAssetProxyId` is 0 since `assetProxy` is also initialized to 0
|
||||
if sub(currentAssetProxyId, assetProxyId) {
|
||||
// Update `assetProxyId`
|
||||
assetProxyId := currentAssetProxyId
|
||||
// To lookup a value in a mapping, we load from the storage location keccak256(k, p),
|
||||
// where k is the key left padded to 32 bytes and p is the storage slot
|
||||
mstore(132, assetProxyId)
|
||||
mstore(164, assetProxies_slot)
|
||||
assetProxy := sload(keccak256(132, 64))
|
||||
}
|
||||
|
||||
// Revert if AssetProxy with given id does not exist
|
||||
if iszero(assetProxy) {
|
||||
// Revert with `Error("ASSET_PROXY_DOES_NOT_EXIST")`
|
||||
mstore(0, 0x08c379a000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(32, 0x0000002000000000000000000000000000000000000000000000000000000000)
|
||||
mstore(64, 0x0000001a41535345545f50524f58595f444f45535f4e4f545f45584953540000)
|
||||
mstore(96, 0)
|
||||
revert(0, 100)
|
||||
}
|
||||
|
||||
// Copy `nestedAssetData[i]` from calldata to memory
|
||||
calldatacopy(
|
||||
132, // memory slot after `amounts[i]`
|
||||
nestedAssetDataElementLenStart, // location of `nestedAssetData[i]` in calldata
|
||||
add(nestedAssetDataElementLen, 32) // `nestedAssetData[i].length` plus 32 byte length
|
||||
)
|
||||
|
||||
// call `assetProxy.transferFrom`
|
||||
let success := call(
|
||||
gas, // forward all gas
|
||||
assetProxy, // call address of asset proxy
|
||||
0, // don't send any ETH
|
||||
0, // pointer to start of input
|
||||
add(164, nestedAssetDataElementLen), // length of input
|
||||
0, // write output over memory that won't be reused
|
||||
0 // don't copy output to memory
|
||||
)
|
||||
|
||||
// Revert with reason given by AssetProxy if `transferFrom` call failed
|
||||
if iszero(success) {
|
||||
returndatacopy(
|
||||
0, // copy to memory at 0
|
||||
0, // copy from return data at 0
|
||||
returndatasize() // copy all return data
|
||||
)
|
||||
revert(0, returndatasize())
|
||||
}
|
||||
}
|
||||
|
||||
// Return if no `transferFrom` calls reverted
|
||||
return(0, 0)
|
||||
}
|
||||
|
||||
// Revert if undefined function is called
|
||||
revert(0, 0)
|
||||
}
|
||||
}
|
||||
|
||||
/// @dev Gets the proxy id associated with the proxy address.
|
||||
/// @return Proxy id.
|
||||
function getProxyId()
|
||||
external
|
||||
pure
|
||||
returns (bytes4)
|
||||
{
|
||||
return PROXY_ID;
|
||||
}
|
||||
}
|
@@ -17,7 +17,8 @@
|
||||
*/
|
||||
|
||||
// solhint-disable
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
|
||||
// @dev Interface of the asset proxy's assetData.
|
||||
@@ -26,15 +27,18 @@ pragma solidity 0.4.24;
|
||||
interface IAssetData {
|
||||
|
||||
function ERC20Token(address tokenContract)
|
||||
external
|
||||
pure;
|
||||
external;
|
||||
|
||||
function ERC721Token(
|
||||
address tokenContract,
|
||||
uint256 tokenId,
|
||||
bytes receiverData
|
||||
uint256 tokenId
|
||||
)
|
||||
external
|
||||
pure;
|
||||
external;
|
||||
|
||||
function MultiAsset(
|
||||
uint256[] amounts,
|
||||
bytes[] nestedAssetData
|
||||
)
|
||||
external;
|
||||
|
||||
}
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "./IAuthorizable.sol";
|
||||
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
|
||||
contract IAssetProxyDispatcher {
|
@@ -16,9 +16,9 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../../../utils/Ownable/IOwnable.sol";
|
||||
import "@0x/contracts-utils/contracts/src/interfaces/IOwnable.sol";
|
||||
|
||||
|
||||
contract IAuthorizable is
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../interfaces/IAssetProxyDispatcher.sol";
|
||||
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../interfaces/IAuthorizable.sol";
|
||||
|
82
contracts/asset-proxy/package.json
Normal file
82
contracts/asset-proxy/package.json
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"name": "@0x/contracts-asset-proxy",
|
||||
"version": "1.0.1",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
"description": "Smart contract components of 0x protocol",
|
||||
"main": "lib/src/index.js",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "yarn pre_build && tsc -b",
|
||||
"build:ci": "yarn build",
|
||||
"pre_build": "run-s compile generate_contract_wrappers",
|
||||
"test": "yarn run_mocha",
|
||||
"rebuild_and_test": "run-s build test",
|
||||
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
||||
"test:profiler": "SOLIDITY_PROFILER=true run-s build run_mocha profiler:report:html",
|
||||
"test:trace": "SOLIDITY_REVERT_TRACE=true run-s build run_mocha",
|
||||
"run_mocha": "mocha --require source-map-support/register --require make-promises-safe 'lib/test/**/*.js' --timeout 100000 --bail --exit",
|
||||
"compile": "sol-compiler",
|
||||
"watch": "sol-compiler -w",
|
||||
"clean": "shx rm -rf lib generated-artifacts generated-wrappers",
|
||||
"generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../../node_modules/@0x/abi-gen-templates/contract.handlebars --partials '../../node_modules/@0x/abi-gen-templates/partials/**/*.handlebars' --output generated-wrappers --backend ethers",
|
||||
"lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
|
||||
"coverage:report:text": "istanbul report text",
|
||||
"coverage:report:html": "istanbul report html && open coverage/index.html",
|
||||
"profiler:report:html": "istanbul report html && open coverage/index.html",
|
||||
"coverage:report:lcov": "istanbul report lcov",
|
||||
"test:circleci": "yarn test",
|
||||
"lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
|
||||
},
|
||||
"config": {
|
||||
"abis": "generated-artifacts/@(ERC20Proxy|ERC721Proxy|IAssetData|IAssetProxy|IAuthorizable|MixinAuthorizable|MultiAssetProxy).json"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/0xProject/0x-monorepo.git"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/0xProject/0x-monorepo/issues"
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/protocol/README.md",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^2.0.0",
|
||||
"@0x/dev-utils": "^2.0.0",
|
||||
"@0x/sol-compiler": "^3.0.0",
|
||||
"@0x/tslint-config": "^3.0.0",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/node": "*",
|
||||
"chai": "^4.0.1",
|
||||
"chai-as-promised": "^7.1.0",
|
||||
"chai-bignumber": "^3.0.0",
|
||||
"dirty-chai": "^2.0.1",
|
||||
"make-promises-safe": "^1.1.0",
|
||||
"mocha": "^4.1.0",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"shx": "^0.2.2",
|
||||
"solhint": "^1.4.1",
|
||||
"tslint": "5.11.0",
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^4.0.0",
|
||||
"@0x/contracts-erc20": "^1.0.1",
|
||||
"@0x/contracts-erc721": "^1.0.1",
|
||||
"@0x/contracts-test-utils": "^3.0.0",
|
||||
"@0x/contracts-utils": "^2.0.0",
|
||||
"@0x/order-utils": "^4.0.0",
|
||||
"@0x/types": "^2.0.0",
|
||||
"@0x/typescript-typings": "^4.0.0",
|
||||
"@0x/utils": "^4.0.1",
|
||||
"@0x/web3-wrapper": "^4.0.0",
|
||||
"ethereum-types": "^2.0.0",
|
||||
"lodash": "^4.17.5"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
}
|
19
contracts/asset-proxy/src/artifacts/index.ts
Normal file
19
contracts/asset-proxy/src/artifacts/index.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { ContractArtifact } from 'ethereum-types';
|
||||
|
||||
import * as ERC20Proxy from '../../generated-artifacts/ERC20Proxy.json';
|
||||
import * as ERC721Proxy from '../../generated-artifacts/ERC721Proxy.json';
|
||||
import * as IAssetData from '../../generated-artifacts/IAssetData.json';
|
||||
import * as IAssetProxy from '../../generated-artifacts/IAssetProxy.json';
|
||||
import * as IAuthorizable from '../../generated-artifacts/IAuthorizable.json';
|
||||
import * as MixinAuthorizable from '../../generated-artifacts/MixinAuthorizable.json';
|
||||
import * as MultiAssetProxy from '../../generated-artifacts/MultiAssetProxy.json';
|
||||
|
||||
export const artifacts = {
|
||||
IAuthorizable: IAuthorizable as ContractArtifact,
|
||||
IAssetData: IAssetData as ContractArtifact,
|
||||
IAssetProxy: IAssetProxy as ContractArtifact,
|
||||
ERC20Proxy: ERC20Proxy as ContractArtifact,
|
||||
ERC721Proxy: ERC721Proxy as ContractArtifact,
|
||||
MixinAuthorizable: MixinAuthorizable as ContractArtifact,
|
||||
MultiAssetProxy: MultiAssetProxy as ContractArtifact,
|
||||
};
|
3
contracts/asset-proxy/src/index.ts
Normal file
3
contracts/asset-proxy/src/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export * from './artifacts';
|
||||
export * from './wrappers';
|
||||
export * from '../test/utils';
|
7
contracts/asset-proxy/src/wrappers/index.ts
Normal file
7
contracts/asset-proxy/src/wrappers/index.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export * from '../../generated-wrappers/i_asset_data';
|
||||
export * from '../../generated-wrappers/i_asset_proxy';
|
||||
export * from '../../generated-wrappers/erc20_proxy';
|
||||
export * from '../../generated-wrappers/erc721_proxy';
|
||||
export * from '../../generated-wrappers/mixin_authorizable';
|
||||
export * from '../../generated-wrappers/multi_asset_proxy';
|
||||
export * from '../../generated-wrappers/i_authorizable';
|
@@ -1,15 +1,18 @@
|
||||
import {
|
||||
chaiSetup,
|
||||
constants,
|
||||
expectTransactionFailedAsync,
|
||||
provider,
|
||||
txDefaults,
|
||||
web3Wrapper,
|
||||
} from '@0x/contracts-test-utils';
|
||||
import { BlockchainLifecycle } from '@0x/dev-utils';
|
||||
import { RevertReason } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { MixinAuthorizableContract } from '../../generated-wrappers/mixin_authorizable';
|
||||
import { artifacts } from '../../src/artifacts';
|
||||
import { expectTransactionFailedAsync } from '../utils/assertions';
|
||||
import { chaiSetup } from '../utils/chai_setup';
|
||||
import { constants } from '../utils/constants';
|
||||
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
||||
import { artifacts, MixinAuthorizableContract } from '../src';
|
||||
|
||||
chaiSetup.configure();
|
||||
const expect = chai.expect;
|
17
contracts/asset-proxy/test/global_hooks.ts
Normal file
17
contracts/asset-proxy/test/global_hooks.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
const coverageSubprovider = coverage.getCoverageSubproviderSingleton();
|
||||
await coverageSubprovider.writeCoverageAsync();
|
||||
}
|
||||
if (env.parseBoolean(EnvVars.SolidityProfiler)) {
|
||||
const profilerSubprovider = profiler.getProfilerSubproviderSingleton();
|
||||
await profilerSubprovider.writeProfilerOutputAsync();
|
||||
}
|
||||
provider.stop();
|
||||
});
|
1291
contracts/asset-proxy/test/proxies.ts
Normal file
1291
contracts/asset-proxy/test/proxies.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,17 +1,14 @@
|
||||
import { artifacts as tokensArtifacts, DummyERC20TokenContract } from '@0x/contracts-erc20';
|
||||
import { constants, ERC20BalancesByOwner, txDefaults } from '@0x/contracts-test-utils';
|
||||
import { assetDataUtils } from '@0x/order-utils';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import { Web3Wrapper } from '@0x/web3-wrapper';
|
||||
import { Provider } from 'ethereum-types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { DummyERC20TokenContract } from '../../generated-wrappers/dummy_erc20_token';
|
||||
import { ERC20ProxyContract } from '../../generated-wrappers/erc20_proxy';
|
||||
import { artifacts } from '../../src/artifacts';
|
||||
|
||||
import { constants } from './constants';
|
||||
import { ERC20BalancesByOwner } from './types';
|
||||
import { txDefaults } from './web3_wrapper';
|
||||
|
||||
export class ERC20Wrapper {
|
||||
private readonly _tokenOwnerAddresses: string[];
|
||||
private readonly _contractOwnerAddress: string;
|
||||
@@ -41,7 +38,7 @@ export class ERC20Wrapper {
|
||||
for (let i = 0; i < numberToDeploy; i++) {
|
||||
this._dummyTokenContracts.push(
|
||||
await DummyERC20TokenContract.deployFrom0xArtifactAsync(
|
||||
artifacts.DummyERC20Token,
|
||||
tokensArtifacts.DummyERC20Token,
|
||||
this._provider,
|
||||
txDefaults,
|
||||
constants.DUMMY_TOKEN_NAME,
|
@@ -1,17 +1,14 @@
|
||||
import { artifacts as tokensArtifacts, DummyERC721TokenContract } from '@0x/contracts-erc721';
|
||||
import { constants, ERC721TokenIdsByOwner, txDefaults } from '@0x/contracts-test-utils';
|
||||
import { generatePseudoRandomSalt } from '@0x/order-utils';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import { Web3Wrapper } from '@0x/web3-wrapper';
|
||||
import { Provider } from 'ethereum-types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { DummyERC721TokenContract } from '../../generated-wrappers/dummy_erc721_token';
|
||||
import { ERC721ProxyContract } from '../../generated-wrappers/erc721_proxy';
|
||||
import { artifacts } from '../../src/artifacts';
|
||||
|
||||
import { constants } from './constants';
|
||||
import { ERC721TokenIdsByOwner } from './types';
|
||||
import { txDefaults } from './web3_wrapper';
|
||||
|
||||
export class ERC721Wrapper {
|
||||
private readonly _tokenOwnerAddresses: string[];
|
||||
private readonly _contractOwnerAddress: string;
|
||||
@@ -29,10 +26,11 @@ export class ERC721Wrapper {
|
||||
this._contractOwnerAddress = contractOwnerAddress;
|
||||
}
|
||||
public async deployDummyTokensAsync(): Promise<DummyERC721TokenContract[]> {
|
||||
for (let i = 0; i < constants.NUM_DUMMY_ERC721_TO_DEPLOY; i++) {
|
||||
// tslint:disable-next-line:no-unused-variable
|
||||
for (const i of _.times(constants.NUM_DUMMY_ERC721_TO_DEPLOY)) {
|
||||
this._dummyTokenContracts.push(
|
||||
await DummyERC721TokenContract.deployFrom0xArtifactAsync(
|
||||
artifacts.DummyERC721Token,
|
||||
tokensArtifacts.DummyERC721Token,
|
||||
this._provider,
|
||||
txDefaults,
|
||||
constants.DUMMY_TOKEN_NAME,
|
||||
@@ -61,7 +59,8 @@ export class ERC721Wrapper {
|
||||
this._initialTokenIdsByOwner = {};
|
||||
for (const dummyTokenContract of this._dummyTokenContracts) {
|
||||
for (const tokenOwnerAddress of this._tokenOwnerAddresses) {
|
||||
for (let i = 0; i < constants.NUM_ERC721_TOKENS_TO_MINT; i++) {
|
||||
// tslint:disable-next-line:no-unused-variable
|
||||
for (const i of _.times(constants.NUM_ERC721_TOKENS_TO_MINT)) {
|
||||
const tokenId = generatePseudoRandomSalt();
|
||||
await this.mintAsync(dummyTokenContract.address, tokenId, tokenOwnerAddress);
|
||||
if (_.isUndefined(this._initialTokenIdsByOwner[tokenOwnerAddress])) {
|
2
contracts/asset-proxy/test/utils/index.ts
Normal file
2
contracts/asset-proxy/test/utils/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export * from './erc20_wrapper';
|
||||
export * from './erc721_wrapper';
|
19
contracts/asset-proxy/tsconfig.json
Normal file
19
contracts/asset-proxy/tsconfig.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "../../tsconfig",
|
||||
"compilerOptions": {
|
||||
"outDir": "lib",
|
||||
"rootDir": ".",
|
||||
"resolveJsonModule": true
|
||||
},
|
||||
"include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
|
||||
"files": [
|
||||
"./generated-artifacts/IAssetData.json",
|
||||
"./generated-artifacts/IAssetProxy.json",
|
||||
"./generated-artifacts/IAuthorizable.json",
|
||||
"./generated-artifacts/ERC20Proxy.json",
|
||||
"./generated-artifacts/ERC721Proxy.json",
|
||||
"./generated-artifacts/MixinAuthorizable.json",
|
||||
"./generated-artifacts/MultiAssetProxy.json"
|
||||
],
|
||||
"exclude": ["./deploy/solc/solc_bin"]
|
||||
}
|
1
contracts/erc20/.solhintignore
Normal file
1
contracts/erc20/.solhintignore
Normal file
@@ -0,0 +1 @@
|
||||
contracts/src/ZRXToken.sol
|
20
contracts/erc20/CHANGELOG.json
Normal file
20
contracts/erc20/CHANGELOG.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1549373905,
|
||||
"version": "1.0.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Move all ERC20 contracts out of contracts-tokens to new package",
|
||||
"pr": 1539
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
14
contracts/erc20/CHANGELOG.md
Normal file
14
contracts/erc20/CHANGELOG.md
Normal file
@@ -0,0 +1,14 @@
|
||||
<!--
|
||||
changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||
Edit the package's CHANGELOG.json file only.
|
||||
-->
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.0.1 - _February 5, 2019_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.0.0 - _Invalid date_
|
||||
|
||||
* Move all ERC20 contracts out of contracts-tokens to new package (#1539)
|
17
contracts/erc20/DEPLOYS.json
Normal file
17
contracts/erc20/DEPLOYS.json
Normal file
@@ -0,0 +1,17 @@
|
||||
[
|
||||
{
|
||||
"name": "ZRXToken",
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "protocol v1 deploy",
|
||||
"networks": {
|
||||
"1": "0xe41d2489571d322189246dafa5ebde1f4699f498",
|
||||
"3": "0xff67881f8d12f372d91baae9752eb3631ff0ed00",
|
||||
"4": "0x2727e688b8fd40b198cd5fe6e408e00494a06f07",
|
||||
"42": "0x2002d3812f58e35f0ea1ffbf80a75a38c32175fa"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
73
contracts/erc20/README.md
Normal file
73
contracts/erc20/README.md
Normal file
@@ -0,0 +1,73 @@
|
||||
## ERC20 Tokens
|
||||
|
||||
This package contains implementations of various [ERC20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) tokens, including WETH (Wrapped Ether) and ZRX. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
|
||||
|
||||
## Installation
|
||||
|
||||
**Install**
|
||||
|
||||
```bash
|
||||
npm install @0x/contracts-erc20 --save
|
||||
```
|
||||
|
||||
## Bug bounty
|
||||
|
||||
A bug bounty for the 2.0.0 contracts is ongoing! Instructions can be found [here](https://0xproject.com/wiki#Bug-Bounty).
|
||||
|
||||
## Contributing
|
||||
|
||||
We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
|
||||
|
||||
For proposals regarding the 0x protocol's smart contract architecture, message format, or additional functionality, go to the [0x Improvement Proposals (ZEIPs)](https://github.com/0xProject/ZEIPs) repository and follow the contribution guidelines provided therein.
|
||||
|
||||
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
||||
|
||||
### Install Dependencies
|
||||
|
||||
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
||||
|
||||
```bash
|
||||
yarn config set workspaces-experimental true
|
||||
```
|
||||
|
||||
Then install dependencies
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Build
|
||||
|
||||
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-erc20 yarn build
|
||||
```
|
||||
|
||||
Or continuously rebuild on change:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-erc20 yarn watch
|
||||
```
|
||||
|
||||
### Clean
|
||||
|
||||
```bash
|
||||
yarn clean
|
||||
```
|
||||
|
||||
### Lint
|
||||
|
||||
```bash
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
yarn test
|
||||
```
|
||||
|
||||
#### Testing options
|
||||
|
||||
Contracts testing options like coverage, profiling, revert traces or backing node choosing - are described [here](../TESTING.md).
|
35
contracts/erc20/compiler.json
Normal file
35
contracts/erc20/compiler.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"artifactsDir": "./generated-artifacts",
|
||||
"contractsDir": "./contracts",
|
||||
"useDockerisedSolc": true,
|
||||
"compilerSettings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 1000000
|
||||
},
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode.object",
|
||||
"evm.bytecode.sourceMap",
|
||||
"evm.deployedBytecode.object",
|
||||
"evm.deployedBytecode.sourceMap"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"contracts": [
|
||||
"DummyERC20Token",
|
||||
"DummyMultipleReturnERC20Token",
|
||||
"DummyNoReturnERC20Token",
|
||||
"ReentrantERC20Token",
|
||||
"ERC20Token",
|
||||
"IERC20Token",
|
||||
"MintableERC20Token",
|
||||
"UnlimitedAllowanceERC20Token",
|
||||
"IEtherToken",
|
||||
"WETH9",
|
||||
"ZRXToken"
|
||||
]
|
||||
}
|
@@ -16,9 +16,9 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "./IERC20Token.sol";
|
||||
import "./interfaces/IERC20Token.sol";
|
||||
|
||||
|
||||
contract ERC20Token is
|
@@ -16,9 +16,9 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../../utils/SafeMath/SafeMath.sol";
|
||||
import "@0x/contracts-utils/contracts/src/SafeMath.sol";
|
||||
import "./UnlimitedAllowanceERC20Token.sol";
|
||||
|
||||
|
@@ -16,9 +16,9 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../ERC20Token/ERC20Token.sol";
|
||||
import "./ERC20Token.sol";
|
||||
|
||||
|
||||
contract UnlimitedAllowanceERC20Token is
|
150
contracts/erc20/contracts/src/ZRXToken.sol
Normal file
150
contracts/erc20/contracts/src/ZRXToken.sol
Normal file
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
|
||||
Copyright 2018 ZeroEx Intl.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.11;
|
||||
|
||||
|
||||
contract Token {
|
||||
|
||||
/// @return total amount of tokens
|
||||
function totalSupply() constant returns (uint supply) {}
|
||||
|
||||
/// @param _owner The address from which the balance will be retrieved
|
||||
/// @return The balance
|
||||
function balanceOf(address _owner) constant returns (uint balance) {}
|
||||
|
||||
/// @notice send `_value` token to `_to` from `msg.sender`
|
||||
/// @param _to The address of the recipient
|
||||
/// @param _value The amount of token to be transferred
|
||||
/// @return Whether the transfer was successful or not
|
||||
function transfer(address _to, uint _value) returns (bool success) {}
|
||||
|
||||
/// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
|
||||
/// @param _from The address of the sender
|
||||
/// @param _to The address of the recipient
|
||||
/// @param _value The amount of token to be transferred
|
||||
/// @return Whether the transfer was successful or not
|
||||
function transferFrom(address _from, address _to, uint _value) returns (bool success) {}
|
||||
|
||||
/// @notice `msg.sender` approves `_addr` to spend `_value` tokens
|
||||
/// @param _spender The address of the account able to transfer the tokens
|
||||
/// @param _value The amount of wei to be approved for transfer
|
||||
/// @return Whether the approval was successful or not
|
||||
function approve(address _spender, uint _value) returns (bool success) {}
|
||||
|
||||
/// @param _owner The address of the account owning tokens
|
||||
/// @param _spender The address of the account able to transfer the tokens
|
||||
/// @return Amount of remaining tokens allowed to spent
|
||||
function allowance(address _owner, address _spender) constant returns (uint remaining) {}
|
||||
|
||||
event Transfer(address indexed _from, address indexed _to, uint _value);
|
||||
event Approval(address indexed _owner, address indexed _spender, uint _value);
|
||||
}
|
||||
|
||||
|
||||
contract ERC20Token is Token {
|
||||
|
||||
function transfer(address _to, uint _value) returns (bool) {
|
||||
//Default assumes totalSupply can't be over max (2^256 - 1).
|
||||
if (balances[msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {
|
||||
balances[msg.sender] -= _value;
|
||||
balances[_to] += _value;
|
||||
Transfer(msg.sender, _to, _value);
|
||||
return true;
|
||||
} else { return false; }
|
||||
}
|
||||
|
||||
function transferFrom(address _from, address _to, uint _value) returns (bool) {
|
||||
if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {
|
||||
balances[_to] += _value;
|
||||
balances[_from] -= _value;
|
||||
allowed[_from][msg.sender] -= _value;
|
||||
Transfer(_from, _to, _value);
|
||||
return true;
|
||||
} else { return false; }
|
||||
}
|
||||
|
||||
function balanceOf(address _owner) constant returns (uint) {
|
||||
return balances[_owner];
|
||||
}
|
||||
|
||||
function approve(address _spender, uint _value) returns (bool) {
|
||||
allowed[msg.sender][_spender] = _value;
|
||||
Approval(msg.sender, _spender, _value);
|
||||
return true;
|
||||
}
|
||||
|
||||
function allowance(address _owner, address _spender) constant returns (uint) {
|
||||
return allowed[_owner][_spender];
|
||||
}
|
||||
|
||||
mapping (address => uint) balances;
|
||||
mapping (address => mapping (address => uint)) allowed;
|
||||
uint public totalSupply;
|
||||
}
|
||||
|
||||
|
||||
contract UnlimitedAllowanceToken is ERC20Token {
|
||||
|
||||
uint constant MAX_UINT = 2**256 - 1;
|
||||
|
||||
/// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.
|
||||
/// @param _from Address to transfer from.
|
||||
/// @param _to Address to transfer to.
|
||||
/// @param _value Amount to transfer.
|
||||
/// @return Success of transfer.
|
||||
function transferFrom(address _from, address _to, uint _value)
|
||||
public
|
||||
returns (bool)
|
||||
{
|
||||
uint allowance = allowed[_from][msg.sender];
|
||||
if (balances[_from] >= _value
|
||||
&& allowance >= _value
|
||||
&& balances[_to] + _value >= balances[_to]
|
||||
) {
|
||||
balances[_to] += _value;
|
||||
balances[_from] -= _value;
|
||||
if (allowance < MAX_UINT) {
|
||||
allowed[_from][msg.sender] -= _value;
|
||||
}
|
||||
Transfer(_from, _to, _value);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
contract ZRXToken is
|
||||
UnlimitedAllowanceToken
|
||||
{
|
||||
|
||||
// solhint-disable const-name-snakecase
|
||||
uint8 constant public decimals = 18;
|
||||
uint256 public totalSupply = 10**27; // 1 billion tokens, 18 decimal places
|
||||
string constant public name = "0x Protocol Token";
|
||||
string constant public symbol = "ZRX";
|
||||
// solhint-enableconst-name-snakecase
|
||||
|
||||
function ZRXToken()
|
||||
public
|
||||
{
|
||||
balances[msg.sender] = totalSupply;
|
||||
}
|
||||
}
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
|
||||
contract IERC20Token {
|
@@ -16,9 +16,9 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../ERC20Token/IERC20Token.sol";
|
||||
import "./IERC20Token.sol";
|
||||
|
||||
|
||||
contract IEtherToken is
|
@@ -18,8 +18,8 @@
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
|
||||
import "../../utils/Ownable/Ownable.sol";
|
||||
import "../../tokens/ERC20Token/MintableERC20Token.sol";
|
||||
import "@0x/contracts-utils/contracts/src/Ownable.sol";
|
||||
import "../src/MintableERC20Token.sol";
|
||||
|
||||
|
||||
contract DummyERC20Token is
|
@@ -19,10 +19,10 @@
|
||||
pragma solidity 0.4.24;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "../../utils/LibBytes/LibBytes.sol";
|
||||
import "../../tokens/ERC20Token/ERC20Token.sol";
|
||||
import "../../protocol/Exchange/interfaces/IExchange.sol";
|
||||
import "../../protocol/Exchange/libs/LibOrder.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibBytes.sol";
|
||||
import "../src/ERC20Token.sol";
|
||||
import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
|
||||
|
||||
|
||||
// solhint-disable no-unused-vars
|
||||
@@ -92,53 +92,53 @@ contract ReentrantERC20Token is
|
||||
LibOrder.Order[] memory orders;
|
||||
uint256[] memory takerAssetFillAmounts;
|
||||
bytes[] memory signatures;
|
||||
bytes memory calldata;
|
||||
bytes memory callData;
|
||||
|
||||
// Create calldata for function that corresponds to currentFunctionId
|
||||
// Create callData for function that corresponds to currentFunctionId
|
||||
if (currentFunctionId == uint8(ExchangeFunction.FILL_ORDER)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.fillOrder.selector,
|
||||
order,
|
||||
0,
|
||||
signature
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.FILL_OR_KILL_ORDER)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.fillOrKillOrder.selector,
|
||||
order,
|
||||
0,
|
||||
signature
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.BATCH_FILL_ORDERS)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.batchFillOrders.selector,
|
||||
orders,
|
||||
takerAssetFillAmounts,
|
||||
signatures
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.BATCH_FILL_OR_KILL_ORDERS)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.batchFillOrKillOrders.selector,
|
||||
orders,
|
||||
takerAssetFillAmounts,
|
||||
signatures
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.MARKET_BUY_ORDERS)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.marketBuyOrders.selector,
|
||||
orders,
|
||||
0,
|
||||
signatures
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.MARKET_SELL_ORDERS)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.marketSellOrders.selector,
|
||||
orders,
|
||||
0,
|
||||
signatures
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.MATCH_ORDERS)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.matchOrders.selector,
|
||||
order,
|
||||
order,
|
||||
@@ -146,22 +146,22 @@ contract ReentrantERC20Token is
|
||||
signature
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.CANCEL_ORDER)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.cancelOrder.selector,
|
||||
order
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.BATCH_CANCEL_ORDERS)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.batchCancelOrders.selector,
|
||||
orders
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.CANCEL_ORDERS_UP_TO)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.cancelOrdersUpTo.selector,
|
||||
0
|
||||
);
|
||||
} else if (currentFunctionId == uint8(ExchangeFunction.SET_SIGNATURE_VALIDATOR_APPROVAL)) {
|
||||
calldata = abi.encodeWithSelector(
|
||||
callData = abi.encodeWithSelector(
|
||||
EXCHANGE.setSignatureValidatorApproval.selector,
|
||||
address(0),
|
||||
false
|
||||
@@ -169,7 +169,7 @@ contract ReentrantERC20Token is
|
||||
}
|
||||
|
||||
// Call Exchange function, swallow error
|
||||
address(EXCHANGE).call(calldata);
|
||||
address(EXCHANGE).call(callData);
|
||||
|
||||
// Revert reason is 100 bytes
|
||||
bytes memory returnData = new bytes(100);
|
80
contracts/erc20/package.json
Normal file
80
contracts/erc20/package.json
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc20",
|
||||
"version": "1.0.1",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
"description": "Token contracts used by 0x protocol",
|
||||
"main": "lib/src/index.js",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "yarn pre_build && tsc -b",
|
||||
"build:ci": "yarn build",
|
||||
"pre_build": "run-s compile generate_contract_wrappers",
|
||||
"test": "yarn run_mocha",
|
||||
"rebuild_and_test": "run-s build test",
|
||||
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
||||
"test:profiler": "SOLIDITY_PROFILER=true run-s build run_mocha profiler:report:html",
|
||||
"test:trace": "SOLIDITY_REVERT_TRACE=true run-s build run_mocha",
|
||||
"run_mocha": "mocha --require source-map-support/register --require make-promises-safe 'lib/test/**/*.js' --timeout 100000 --bail --exit",
|
||||
"compile": "sol-compiler",
|
||||
"watch": "sol-compiler -w",
|
||||
"clean": "shx rm -rf lib generated-artifacts generated-wrappers",
|
||||
"generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../../node_modules/@0x/abi-gen-templates/contract.handlebars --partials '../../node_modules/@0x/abi-gen-templates/partials/**/*.handlebars' --output generated-wrappers --backend ethers",
|
||||
"lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
|
||||
"coverage:report:text": "istanbul report text",
|
||||
"coverage:report:html": "istanbul report html && open coverage/index.html",
|
||||
"profiler:report:html": "istanbul report html && open coverage/index.html",
|
||||
"coverage:report:lcov": "istanbul report lcov",
|
||||
"test:circleci": "yarn test",
|
||||
"lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
|
||||
},
|
||||
"config": {
|
||||
"abis": "generated-artifacts/@(DummyERC20Token|DummyMultipleReturnERC20Token|DummyNoReturnERC20Token|ReentrantERC20Token|ERC20Token|IERC20Token|MintableERC20Token|UnlimitedAllowanceERC20Token|IEtherToken|WETH9|ZRXToken).json"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/0xProject/0x-monorepo.git"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/0xProject/0x-monorepo/issues"
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^2.0.0",
|
||||
"@0x/contracts-test-utils": "^3.0.0",
|
||||
"@0x/dev-utils": "^2.0.0",
|
||||
"@0x/sol-compiler": "^3.0.0",
|
||||
"@0x/tslint-config": "^3.0.0",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/node": "*",
|
||||
"chai": "^4.0.1",
|
||||
"chai-as-promised": "^7.1.0",
|
||||
"chai-bignumber": "^3.0.0",
|
||||
"dirty-chai": "^2.0.1",
|
||||
"make-promises-safe": "^1.1.0",
|
||||
"mocha": "^4.1.0",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"shx": "^0.2.2",
|
||||
"solhint": "^1.4.1",
|
||||
"tslint": "5.11.0",
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^4.0.0",
|
||||
"@0x/contracts-exchange-libs": "^1.0.1",
|
||||
"@0x/contracts-utils": "^2.0.0",
|
||||
"@0x/types": "^2.0.0",
|
||||
"@0x/typescript-typings": "^4.0.0",
|
||||
"@0x/utils": "^4.0.1",
|
||||
"@0x/web3-wrapper": "^4.0.0",
|
||||
"ethereum-types": "^2.0.0",
|
||||
"lodash": "^4.17.5"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
}
|
30
contracts/erc20/src/artifacts/index.ts
Normal file
30
contracts/erc20/src/artifacts/index.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { ContractArtifact } from 'ethereum-types';
|
||||
|
||||
import * as DummyERC20Token from '../../generated-artifacts/DummyERC20Token.json';
|
||||
import * as DummyMultipleReturnERC20Token from '../../generated-artifacts/DummyMultipleReturnERC20Token.json';
|
||||
import * as DummyNoReturnERC20Token from '../../generated-artifacts/DummyNoReturnERC20Token.json';
|
||||
import * as ERC20Token from '../../generated-artifacts/ERC20Token.json';
|
||||
import * as IERC20Token from '../../generated-artifacts/IERC20Token.json';
|
||||
import * as IEtherToken from '../../generated-artifacts/IEtherToken.json';
|
||||
import * as MintableERC20Token from '../../generated-artifacts/MintableERC20Token.json';
|
||||
import * as ReentrantERC20Token from '../../generated-artifacts/ReentrantERC20Token.json';
|
||||
import * as UnlimitedAllowanceERC20Token from '../../generated-artifacts/UnlimitedAllowanceERC20Token.json';
|
||||
import * as WETH9 from '../../generated-artifacts/WETH9.json';
|
||||
import * as ZRXToken from '../../generated-artifacts/ZRXToken.json';
|
||||
|
||||
// tslint:disable:no-unnecessary-type-assertion
|
||||
export const artifacts = {
|
||||
DummyERC20Token: DummyERC20Token as ContractArtifact,
|
||||
DummyMultipleReturnERC20Token: DummyMultipleReturnERC20Token as ContractArtifact,
|
||||
DummyNoReturnERC20Token: DummyNoReturnERC20Token as ContractArtifact,
|
||||
ReentrantERC20Token: ReentrantERC20Token as ContractArtifact,
|
||||
ERC20Token: ERC20Token as ContractArtifact,
|
||||
IERC20Token: IERC20Token as ContractArtifact,
|
||||
MintableERC20Token: MintableERC20Token as ContractArtifact,
|
||||
UnlimitedAllowanceERC20Token: UnlimitedAllowanceERC20Token as ContractArtifact,
|
||||
IEtherToken: IEtherToken as ContractArtifact,
|
||||
WETH9: WETH9 as ContractArtifact,
|
||||
// Note(albrow): "as any" hack still required here because ZRXToken does not
|
||||
// conform to the v2 artifact type.
|
||||
ZRXToken: (ZRXToken as any) as ContractArtifact,
|
||||
};
|
2
contracts/erc20/src/index.ts
Normal file
2
contracts/erc20/src/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export * from './wrappers';
|
||||
export * from './artifacts';
|
11
contracts/erc20/src/wrappers/index.ts
Normal file
11
contracts/erc20/src/wrappers/index.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
export * from '../../generated-wrappers/zrx_token';
|
||||
export * from '../../generated-wrappers/weth9';
|
||||
export * from '../../generated-wrappers/unlimited_allowance_erc20_token';
|
||||
export * from '../../generated-wrappers/reentrant_erc20_token';
|
||||
export * from '../../generated-wrappers/mintable_erc20_token';
|
||||
export * from '../../generated-wrappers/i_ether_token';
|
||||
export * from '../../generated-wrappers/i_erc20_token';
|
||||
export * from '../../generated-wrappers/erc20_token';
|
||||
export * from '../../generated-wrappers/dummy_no_return_erc20_token';
|
||||
export * from '../../generated-wrappers/dummy_multiple_return_erc20_token';
|
||||
export * from '../../generated-wrappers/dummy_erc20_token';
|
17
contracts/erc20/test/global_hooks.ts
Normal file
17
contracts/erc20/test/global_hooks.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
const coverageSubprovider = coverage.getCoverageSubproviderSingleton();
|
||||
await coverageSubprovider.writeCoverageAsync();
|
||||
}
|
||||
if (env.parseBoolean(EnvVars.SolidityProfiler)) {
|
||||
const profilerSubprovider = profiler.getProfilerSubproviderSingleton();
|
||||
await profilerSubprovider.writeProfilerOutputAsync();
|
||||
}
|
||||
provider.stop();
|
||||
});
|
@@ -1,14 +1,17 @@
|
||||
import {
|
||||
chaiSetup,
|
||||
constants,
|
||||
expectContractCallFailedAsync,
|
||||
provider,
|
||||
txDefaults,
|
||||
web3Wrapper,
|
||||
} from '@0x/contracts-test-utils';
|
||||
import { BlockchainLifecycle } from '@0x/dev-utils';
|
||||
import { RevertReason } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
|
||||
import { DummyERC20TokenContract } from '../../generated-wrappers/dummy_erc20_token';
|
||||
import { artifacts } from '../../src/artifacts';
|
||||
import { expectContractCallFailedAsync } from '../utils/assertions';
|
||||
import { chaiSetup } from '../utils/chai_setup';
|
||||
import { constants } from '../utils/constants';
|
||||
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
||||
import { artifacts, DummyERC20TokenContract } from '../src';
|
||||
|
||||
chaiSetup.configure();
|
||||
const expect = chai.expect;
|
||||
@@ -106,7 +109,7 @@ describe('UnlimitedAllowanceToken', () => {
|
||||
const amountToTransfer = ownerBalance;
|
||||
|
||||
const spenderAllowance = await token.allowance.callAsync(owner, spender);
|
||||
const isSpenderAllowanceInsufficient = spenderAllowance.cmp(amountToTransfer) < 0;
|
||||
const isSpenderAllowanceInsufficient = spenderAllowance.comparedTo(amountToTransfer) < 0;
|
||||
expect(isSpenderAllowanceInsufficient).to.be.true();
|
||||
|
||||
return expectContractCallFailedAsync(
|
@@ -1,14 +1,18 @@
|
||||
import {
|
||||
chaiSetup,
|
||||
constants,
|
||||
expectInsufficientFundsAsync,
|
||||
expectTransactionFailedWithoutReasonAsync,
|
||||
provider,
|
||||
txDefaults,
|
||||
web3Wrapper,
|
||||
} from '@0x/contracts-test-utils';
|
||||
import { BlockchainLifecycle } from '@0x/dev-utils';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import { Web3Wrapper } from '@0x/web3-wrapper';
|
||||
import * as chai from 'chai';
|
||||
|
||||
import { WETH9Contract } from '../../generated-wrappers/weth9';
|
||||
import { artifacts } from '../../src/artifacts';
|
||||
import { expectInsufficientFundsAsync, expectTransactionFailedWithoutReasonAsync } from '../utils/assertions';
|
||||
import { chaiSetup } from '../utils/chai_setup';
|
||||
import { constants } from '../utils/constants';
|
||||
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
||||
import { artifacts, WETH9Contract } from '../src';
|
||||
|
||||
chaiSetup.configure();
|
||||
const expect = chai.expect;
|
@@ -1,13 +1,10 @@
|
||||
import { chaiSetup, constants, provider, txDefaults, web3Wrapper } from '@0x/contracts-test-utils';
|
||||
import { BlockchainLifecycle } from '@0x/dev-utils';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import { Web3Wrapper } from '@0x/web3-wrapper';
|
||||
import * as chai from 'chai';
|
||||
|
||||
import { ZRXTokenContract } from '../../generated-wrappers/zrx_token';
|
||||
import { artifacts } from '../../src/artifacts';
|
||||
import { chaiSetup } from '../utils/chai_setup';
|
||||
import { constants } from '../utils/constants';
|
||||
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
||||
import { artifacts, ZRXTokenContract } from '../src';
|
||||
|
||||
chaiSetup.configure();
|
||||
const expect = chai.expect;
|
||||
@@ -120,7 +117,7 @@ describe('ZRXToken', () => {
|
||||
const amountToTransfer = ownerBalance;
|
||||
|
||||
const spenderAllowance = await zrxToken.allowance.callAsync(owner, spender);
|
||||
const isSpenderAllowanceInsufficient = spenderAllowance.cmp(amountToTransfer) < 0;
|
||||
const isSpenderAllowanceInsufficient = spenderAllowance.comparedTo(amountToTransfer) < 0;
|
||||
expect(isSpenderAllowanceInsufficient).to.be.true();
|
||||
|
||||
const didReturnTrue = await zrxToken.transferFrom.callAsync(owner, spender, amountToTransfer, {
|
23
contracts/erc20/tsconfig.json
Normal file
23
contracts/erc20/tsconfig.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"extends": "../../tsconfig",
|
||||
"compilerOptions": {
|
||||
"outDir": "lib",
|
||||
"rootDir": ".",
|
||||
"resolveJsonModule": true
|
||||
},
|
||||
"include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
|
||||
"files": [
|
||||
"./generated-artifacts/DummyERC20Token.json",
|
||||
"./generated-artifacts/DummyMultipleReturnERC20Token.json",
|
||||
"./generated-artifacts/DummyNoReturnERC20Token.json",
|
||||
"./generated-artifacts/ReentrantERC20Token.json",
|
||||
"./generated-artifacts/ERC20Token.json",
|
||||
"./generated-artifacts/IERC20Token.json",
|
||||
"./generated-artifacts/MintableERC20Token.json",
|
||||
"./generated-artifacts/UnlimitedAllowanceERC20Token.json",
|
||||
"./generated-artifacts/IEtherToken.json",
|
||||
"./generated-artifacts/WETH9.json",
|
||||
"./generated-artifacts/ZRXToken.json"
|
||||
],
|
||||
"exclude": ["./deploy/solc/solc_bin"]
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"extends": ["@0x/tslint-config"],
|
||||
"rules": {
|
||||
"completed-docs": false
|
||||
"custom-no-magic-numbers": false
|
||||
}
|
||||
}
|
20
contracts/erc721/CHANGELOG.json
Normal file
20
contracts/erc721/CHANGELOG.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1549373905,
|
||||
"version": "1.0.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Move all ERC721 contracts out of contracts-tokens to new package",
|
||||
"pr": 1539
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
14
contracts/erc721/CHANGELOG.md
Normal file
14
contracts/erc721/CHANGELOG.md
Normal file
@@ -0,0 +1,14 @@
|
||||
<!--
|
||||
changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||
Edit the package's CHANGELOG.json file only.
|
||||
-->
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.0.1 - _February 5, 2019_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.0.0 - _Invalid date_
|
||||
|
||||
* Move all ERC721 contracts out of contracts-tokens to new package (#1539)
|
1
contracts/erc721/DEPLOYS.json
Normal file
1
contracts/erc721/DEPLOYS.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
73
contracts/erc721/README.md
Normal file
73
contracts/erc721/README.md
Normal file
@@ -0,0 +1,73 @@
|
||||
## ERC721 Tokens
|
||||
|
||||
This package contains implementations of various [ERC721](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md) tokens. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
|
||||
|
||||
## Installation
|
||||
|
||||
**Install**
|
||||
|
||||
```bash
|
||||
npm install @0x/contracts-erc721 --save
|
||||
```
|
||||
|
||||
## Bug bounty
|
||||
|
||||
A bug bounty for the 2.0.0 contracts is ongoing! Instructions can be found [here](https://0xproject.com/wiki#Bug-Bounty).
|
||||
|
||||
## Contributing
|
||||
|
||||
We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
|
||||
|
||||
For proposals regarding the 0x protocol's smart contract architecture, message format, or additional functionality, go to the [0x Improvement Proposals (ZEIPs)](https://github.com/0xProject/ZEIPs) repository and follow the contribution guidelines provided therein.
|
||||
|
||||
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
||||
|
||||
### Install Dependencies
|
||||
|
||||
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
||||
|
||||
```bash
|
||||
yarn config set workspaces-experimental true
|
||||
```
|
||||
|
||||
Then install dependencies
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Build
|
||||
|
||||
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-erc721 yarn build
|
||||
```
|
||||
|
||||
Or continuously rebuild on change:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-erc721 yarn watch
|
||||
```
|
||||
|
||||
### Clean
|
||||
|
||||
```bash
|
||||
yarn clean
|
||||
```
|
||||
|
||||
### Lint
|
||||
|
||||
```bash
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
yarn test
|
||||
```
|
||||
|
||||
#### Testing options
|
||||
|
||||
Contracts testing options like coverage, profiling, revert traces or backing node choosing - are described [here](../TESTING.md).
|
31
contracts/erc721/compiler.json
Normal file
31
contracts/erc721/compiler.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"artifactsDir": "./generated-artifacts",
|
||||
"contractsDir": "./contracts",
|
||||
"useDockerisedSolc": true,
|
||||
"compilerSettings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 1000000
|
||||
},
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode.object",
|
||||
"evm.bytecode.sourceMap",
|
||||
"evm.deployedBytecode.object",
|
||||
"evm.deployedBytecode.sourceMap"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"contracts": [
|
||||
"DummyERC721Receiver",
|
||||
"InvalidERC721Receiver",
|
||||
"DummyERC721Token",
|
||||
"ERC721Token",
|
||||
"IERC721Receiver",
|
||||
"IERC721Token",
|
||||
"MintableERC721Token"
|
||||
]
|
||||
}
|
@@ -16,11 +16,11 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "./IERC721Token.sol";
|
||||
import "./IERC721Receiver.sol";
|
||||
import "../../utils/SafeMath/SafeMath.sol";
|
||||
import "./interfaces/IERC721Token.sol";
|
||||
import "./interfaces/IERC721Receiver.sol";
|
||||
import "@0x/contracts-utils/contracts/src/SafeMath.sol";
|
||||
|
||||
|
||||
contract ERC721Token is
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "./ERC721Token.sol";
|
||||
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
|
||||
contract IERC721Receiver {
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
|
||||
contract IERC721Token {
|
@@ -18,7 +18,7 @@
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
|
||||
import "../../tokens/ERC721Token/IERC721Receiver.sol";
|
||||
import "../src/interfaces/IERC721Receiver.sol";
|
||||
|
||||
|
||||
contract DummyERC721Receiver is
|
@@ -18,8 +18,8 @@
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
|
||||
import "../../tokens/ERC721Token/MintableERC721Token.sol";
|
||||
import "../../utils/Ownable/Ownable.sol";
|
||||
import "../src/MintableERC721Token.sol";
|
||||
import "@0x/contracts-utils/contracts/src/Ownable.sol";
|
||||
|
||||
|
||||
// solhint-disable no-empty-blocks
|
@@ -18,7 +18,7 @@
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
|
||||
import "../../tokens/ERC721Token/IERC721Receiver.sol";
|
||||
import "../src/interfaces/IERC721Receiver.sol";
|
||||
|
||||
|
||||
contract InvalidERC721Receiver is
|
79
contracts/erc721/package.json
Normal file
79
contracts/erc721/package.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc721",
|
||||
"version": "1.0.1",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
"description": "Token contracts used by 0x protocol",
|
||||
"main": "lib/src/index.js",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "yarn pre_build && tsc -b",
|
||||
"build:ci": "yarn build",
|
||||
"pre_build": "run-s compile generate_contract_wrappers",
|
||||
"test": "yarn run_mocha",
|
||||
"rebuild_and_test": "run-s build test",
|
||||
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
||||
"test:profiler": "SOLIDITY_PROFILER=true run-s build run_mocha profiler:report:html",
|
||||
"test:trace": "SOLIDITY_REVERT_TRACE=true run-s build run_mocha",
|
||||
"run_mocha": "mocha --require source-map-support/register --require make-promises-safe 'lib/test/**/*.js' --timeout 100000 --bail --exit",
|
||||
"compile": "sol-compiler",
|
||||
"watch": "sol-compiler -w",
|
||||
"clean": "shx rm -rf lib generated-artifacts generated-wrappers",
|
||||
"generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../../node_modules/@0x/abi-gen-templates/contract.handlebars --partials '../../node_modules/@0x/abi-gen-templates/partials/**/*.handlebars' --output generated-wrappers --backend ethers",
|
||||
"lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
|
||||
"coverage:report:text": "istanbul report text",
|
||||
"coverage:report:html": "istanbul report html && open coverage/index.html",
|
||||
"profiler:report:html": "istanbul report html && open coverage/index.html",
|
||||
"coverage:report:lcov": "istanbul report lcov",
|
||||
"test:circleci": "yarn test",
|
||||
"lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
|
||||
},
|
||||
"config": {
|
||||
"abis": "generated-artifacts/@(DummyERC721Receiver|InvalidERC721Receiver|DummyERC721Token|ERC721Token|IERC721Receiver|IERC721Token|MintableERC721Token).json"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/0xProject/0x-monorepo.git"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/0xProject/0x-monorepo/issues"
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^2.0.0",
|
||||
"@0x/contracts-test-utils": "^3.0.0",
|
||||
"@0x/dev-utils": "^2.0.0",
|
||||
"@0x/sol-compiler": "^3.0.0",
|
||||
"@0x/tslint-config": "^3.0.0",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/node": "*",
|
||||
"chai": "^4.0.1",
|
||||
"chai-as-promised": "^7.1.0",
|
||||
"chai-bignumber": "^3.0.0",
|
||||
"dirty-chai": "^2.0.1",
|
||||
"make-promises-safe": "^1.1.0",
|
||||
"mocha": "^4.1.0",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"shx": "^0.2.2",
|
||||
"solhint": "^1.4.1",
|
||||
"tslint": "5.11.0",
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^4.0.0",
|
||||
"@0x/contracts-utils": "^2.0.0",
|
||||
"@0x/types": "^2.0.0",
|
||||
"@0x/typescript-typings": "^4.0.0",
|
||||
"@0x/utils": "^4.0.1",
|
||||
"@0x/web3-wrapper": "^4.0.0",
|
||||
"ethereum-types": "^2.0.0",
|
||||
"lodash": "^4.17.5"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
}
|
20
contracts/erc721/src/artifacts/index.ts
Normal file
20
contracts/erc721/src/artifacts/index.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { ContractArtifact } from 'ethereum-types';
|
||||
|
||||
import * as DummyERC721Receiver from '../../generated-artifacts/DummyERC721Receiver.json';
|
||||
import * as DummyERC721Token from '../../generated-artifacts/DummyERC721Token.json';
|
||||
import * as ERC721Token from '../../generated-artifacts/ERC721Token.json';
|
||||
import * as IERC721Receiver from '../../generated-artifacts/IERC721Receiver.json';
|
||||
import * as IERC721Token from '../../generated-artifacts/IERC721Token.json';
|
||||
import * as InvalidERC721Receiver from '../../generated-artifacts/InvalidERC721Receiver.json';
|
||||
import * as MintableERC721Token from '../../generated-artifacts/MintableERC721Token.json';
|
||||
|
||||
// tslint:disable:no-unnecessary-type-assertion
|
||||
export const artifacts = {
|
||||
DummyERC721Receiver: DummyERC721Receiver as ContractArtifact,
|
||||
InvalidERC721Receiver: InvalidERC721Receiver as ContractArtifact,
|
||||
DummyERC721Token: DummyERC721Token as ContractArtifact,
|
||||
ERC721Token: ERC721Token as ContractArtifact,
|
||||
IERC721Receiver: IERC721Receiver as ContractArtifact,
|
||||
IERC721Token: IERC721Token as ContractArtifact,
|
||||
MintableERC721Token: MintableERC721Token as ContractArtifact,
|
||||
};
|
2
contracts/erc721/src/index.ts
Normal file
2
contracts/erc721/src/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export * from './wrappers';
|
||||
export * from './artifacts';
|
7
contracts/erc721/src/wrappers/index.ts
Normal file
7
contracts/erc721/src/wrappers/index.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export * from '../../generated-wrappers/mintable_erc721_token';
|
||||
export * from '../../generated-wrappers/invalid_erc721_receiver';
|
||||
export * from '../../generated-wrappers/i_erc721_token';
|
||||
export * from '../../generated-wrappers/i_erc721_receiver';
|
||||
export * from '../../generated-wrappers/erc721_token';
|
||||
export * from '../../generated-wrappers/dummy_erc721_token';
|
||||
export * from '../../generated-wrappers/dummy_erc721_receiver';
|
@@ -1,3 +1,13 @@
|
||||
import {
|
||||
chaiSetup,
|
||||
constants,
|
||||
expectTransactionFailedAsync,
|
||||
expectTransactionFailedWithoutReasonAsync,
|
||||
LogDecoder,
|
||||
provider,
|
||||
txDefaults,
|
||||
web3Wrapper,
|
||||
} from '@0x/contracts-test-utils';
|
||||
import { BlockchainLifecycle } from '@0x/dev-utils';
|
||||
import { RevertReason } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
@@ -5,20 +15,13 @@ import * as chai from 'chai';
|
||||
import { LogWithDecodedArgs } from 'ethereum-types';
|
||||
|
||||
import {
|
||||
artifacts,
|
||||
DummyERC721ReceiverContract,
|
||||
DummyERC721ReceiverTokenReceivedEventArgs,
|
||||
} from '../../generated-wrappers/dummy_erc721_receiver';
|
||||
import {
|
||||
DummyERC721TokenContract,
|
||||
DummyERC721TokenTransferEventArgs,
|
||||
} from '../../generated-wrappers/dummy_erc721_token';
|
||||
import { InvalidERC721ReceiverContract } from '../../generated-wrappers/invalid_erc721_receiver';
|
||||
import { artifacts } from '../../src/artifacts';
|
||||
import { expectTransactionFailedAsync, expectTransactionFailedWithoutReasonAsync } from '../utils/assertions';
|
||||
import { chaiSetup } from '../utils/chai_setup';
|
||||
import { constants } from '../utils/constants';
|
||||
import { LogDecoder } from '../utils/log_decoder';
|
||||
import { provider, txDefaults, web3Wrapper } from '../utils/web3_wrapper';
|
||||
InvalidERC721ReceiverContract,
|
||||
} from '../src';
|
||||
|
||||
chaiSetup.configure();
|
||||
const expect = chai.expect;
|
||||
@@ -53,7 +56,7 @@ describe('ERC721Token', () => {
|
||||
provider,
|
||||
txDefaults,
|
||||
);
|
||||
logDecoder = new LogDecoder(web3Wrapper);
|
||||
logDecoder = new LogDecoder(web3Wrapper, artifacts);
|
||||
await web3Wrapper.awaitTransactionSuccessAsync(
|
||||
await token.mint.sendTransactionAsync(owner, tokenId, { from: owner }),
|
||||
constants.AWAIT_TRANSACTION_MINED_MS,
|
17
contracts/erc721/test/global_hooks.ts
Normal file
17
contracts/erc721/test/global_hooks.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
const coverageSubprovider = coverage.getCoverageSubproviderSingleton();
|
||||
await coverageSubprovider.writeCoverageAsync();
|
||||
}
|
||||
if (env.parseBoolean(EnvVars.SolidityProfiler)) {
|
||||
const profilerSubprovider = profiler.getProfilerSubproviderSingleton();
|
||||
await profilerSubprovider.writeProfilerOutputAsync();
|
||||
}
|
||||
provider.stop();
|
||||
});
|
19
contracts/erc721/tsconfig.json
Normal file
19
contracts/erc721/tsconfig.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "../../tsconfig",
|
||||
"compilerOptions": {
|
||||
"outDir": "lib",
|
||||
"rootDir": ".",
|
||||
"resolveJsonModule": true
|
||||
},
|
||||
"include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
|
||||
"files": [
|
||||
"./generated-artifacts/DummyERC721Receiver.json",
|
||||
"./generated-artifacts/InvalidERC721Receiver.json",
|
||||
"./generated-artifacts/DummyERC721Token.json",
|
||||
"./generated-artifacts/ERC721Token.json",
|
||||
"./generated-artifacts/IERC721Receiver.json",
|
||||
"./generated-artifacts/IERC721Token.json",
|
||||
"./generated-artifacts/MintableERC721Token.json"
|
||||
],
|
||||
"exclude": ["./deploy/solc/solc_bin"]
|
||||
}
|
6
contracts/erc721/tslint.json
Normal file
6
contracts/erc721/tslint.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"extends": ["@0x/tslint-config"],
|
||||
"rules": {
|
||||
"custom-no-magic-numbers": false
|
||||
}
|
||||
}
|
20
contracts/exchange-forwarder/CHANGELOG.json
Normal file
20
contracts/exchange-forwarder/CHANGELOG.json
Normal file
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1549373905,
|
||||
"version": "1.0.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Move Forwarder contract out of contracts-extensions into new package",
|
||||
"pr": 1539
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
14
contracts/exchange-forwarder/CHANGELOG.md
Normal file
14
contracts/exchange-forwarder/CHANGELOG.md
Normal file
@@ -0,0 +1,14 @@
|
||||
<!--
|
||||
changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||
Edit the package's CHANGELOG.json file only.
|
||||
-->
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.0.1 - _February 5, 2019_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.0.0 - _Invalid date_
|
||||
|
||||
* Move Forwarder contract out of contracts-extensions into new package (#1539)
|
32
contracts/exchange-forwarder/DEPLOYS.json
Normal file
32
contracts/exchange-forwarder/DEPLOYS.json
Normal file
@@ -0,0 +1,32 @@
|
||||
[
|
||||
{
|
||||
"name": "Forwarder",
|
||||
"version": "1.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Round up when calculating remaining amounts in marketBuy functions",
|
||||
"pr": 1162,
|
||||
"networks": {
|
||||
"1": "0x5468a1dc173652ee28d249c271fa9933144746b1",
|
||||
"3": "0x2240dab907db71e64d3e0dba4800c83b5c502d4e",
|
||||
"4": "0xd2dbf3250a764eaaa94fa0c84ed87c0edc8ed04e",
|
||||
"42": "0x17992e4ffb22730138e4b62aaa6367fa9d3699a6"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Forwarder",
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "protocol v2 deploy",
|
||||
"networks": {
|
||||
"1": "0x7afc2d5107af94c462a194d2c21b5bdd238709d6",
|
||||
"3": "0x3983e204b12b3c02fb0638caf2cd406a62e0ead3",
|
||||
"42": "0xd85e2fa7e7e252b27b01bf0d65c946959d2f45b8"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
73
contracts/exchange-forwarder/README.md
Normal file
73
contracts/exchange-forwarder/README.md
Normal file
@@ -0,0 +1,73 @@
|
||||
## Exchange Forwarder
|
||||
|
||||
This package contains the implementation of the [`Forwarder`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/forwarder-specification.md) contract. This contract is intended to improve the UX of interacting with the 0x [`Exchange`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#exchange) contract by abstracting user approvals, converting ETH to WETH, and paying fees. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
|
||||
|
||||
## Installation
|
||||
|
||||
**Install**
|
||||
|
||||
```bash
|
||||
npm install @0x/contracts-exchange-forwarder --save
|
||||
```
|
||||
|
||||
## Bug bounty
|
||||
|
||||
A bug bounty for the 2.0.0 contracts is ongoing! Instructions can be found [here](https://0xproject.com/wiki#Bug-Bounty).
|
||||
|
||||
## Contributing
|
||||
|
||||
We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
|
||||
|
||||
For proposals regarding the 0x protocol's smart contract architecture, message format, or additional functionality, go to the [0x Improvement Proposals (ZEIPs)](https://github.com/0xProject/ZEIPs) repository and follow the contribution guidelines provided therein.
|
||||
|
||||
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
||||
|
||||
### Install Dependencies
|
||||
|
||||
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
||||
|
||||
```bash
|
||||
yarn config set workspaces-experimental true
|
||||
```
|
||||
|
||||
Then install dependencies
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Build
|
||||
|
||||
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-exchange-forwarder yarn build
|
||||
```
|
||||
|
||||
Or continuously rebuild on change:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-exchange-forwarder yarn watch
|
||||
```
|
||||
|
||||
### Clean
|
||||
|
||||
```bash
|
||||
yarn clean
|
||||
```
|
||||
|
||||
### Lint
|
||||
|
||||
```bash
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
yarn test
|
||||
```
|
||||
|
||||
#### Testing options
|
||||
|
||||
Contracts testing options like coverage, profiling, revert traces or backing node choosing - are described [here](../TESTING.md).
|
23
contracts/exchange-forwarder/compiler.json
Normal file
23
contracts/exchange-forwarder/compiler.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"artifactsDir": "./generated-artifacts",
|
||||
"contractsDir": "./contracts",
|
||||
"useDockerisedSolc": true,
|
||||
"compilerSettings": {
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 1000000
|
||||
},
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"evm.bytecode.object",
|
||||
"evm.bytecode.sourceMap",
|
||||
"evm.deployedBytecode.object",
|
||||
"evm.deployedBytecode.sourceMap"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"contracts": ["Forwarder"]
|
||||
}
|
@@ -16,12 +16,12 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../../utils/LibBytes/LibBytes.sol";
|
||||
import "../../utils/Ownable/Ownable.sol";
|
||||
import "../../tokens/ERC20Token/IERC20Token.sol";
|
||||
import "../../tokens/ERC721Token/IERC721Token.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibBytes.sol";
|
||||
import "@0x/contracts-utils/contracts/src/Ownable.sol";
|
||||
import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
|
||||
import "@0x/contracts-erc721/contracts/src/interfaces/IERC721Token.sol";
|
||||
import "./libs/LibConstants.sol";
|
||||
import "./mixins/MAssets.sol";
|
||||
|
@@ -16,15 +16,15 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "./libs/LibConstants.sol";
|
||||
import "./mixins/MExchangeWrapper.sol";
|
||||
import "../../protocol/Exchange/libs/LibAbiEncoder.sol";
|
||||
import "../../protocol/Exchange/libs/LibOrder.sol";
|
||||
import "../../protocol/Exchange/libs/LibFillResults.sol";
|
||||
import "../../protocol/Exchange/libs/LibMath.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibAbiEncoder.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
|
||||
|
||||
|
||||
contract MixinExchangeWrapper is
|
||||
@@ -155,8 +155,10 @@ contract MixinExchangeWrapper is
|
||||
uint256 remainingMakerAssetFillAmount = safeSub(makerAssetFillAmount, totalFillResults.makerAssetFilledAmount);
|
||||
|
||||
// Convert the remaining amount of makerAsset to buy into remaining amount
|
||||
// of takerAsset to sell, assuming entire amount can be sold in the current order
|
||||
uint256 remainingTakerAssetFillAmount = getPartialAmountFloor(
|
||||
// of takerAsset to sell, assuming entire amount can be sold in the current order.
|
||||
// We round up because the exchange rate computed by fillOrder rounds in favor
|
||||
// of the Maker. In this case we want to overestimate the amount of takerAsset.
|
||||
uint256 remainingTakerAssetFillAmount = getPartialAmountCeil(
|
||||
orders[i].takerAssetAmount,
|
||||
orders[i].makerAssetAmount,
|
||||
remainingMakerAssetFillAmount
|
||||
@@ -224,7 +226,9 @@ contract MixinExchangeWrapper is
|
||||
|
||||
// Convert the remaining amount of ZRX to buy into remaining amount
|
||||
// of WETH to sell, assuming entire amount can be sold in the current order.
|
||||
uint256 remainingWethSellAmount = getPartialAmountFloor(
|
||||
// We round up because the exchange rate computed by fillOrder rounds in favor
|
||||
// of the Maker. In this case we want to overestimate the amount of takerAsset.
|
||||
uint256 remainingWethSellAmount = getPartialAmountCeil(
|
||||
orders[i].takerAssetAmount,
|
||||
safeSub(orders[i].makerAssetAmount, orders[i].takerFee), // our exchange rate after fees
|
||||
remainingZrxBuyAmount
|
||||
@@ -233,7 +237,7 @@ contract MixinExchangeWrapper is
|
||||
// Attempt to sell the remaining amount of WETH.
|
||||
FillResults memory singleFillResult = fillOrderNoThrow(
|
||||
orders[i],
|
||||
safeAdd(remainingWethSellAmount, 1), // we add 1 wei to the fill amount to make up for rounding errors
|
||||
remainingWethSellAmount,
|
||||
signatures[i]
|
||||
);
|
||||
|
@@ -16,7 +16,7 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "./libs/LibConstants.sol";
|
||||
@@ -24,10 +24,10 @@ import "./mixins/MWeth.sol";
|
||||
import "./mixins/MAssets.sol";
|
||||
import "./mixins/MExchangeWrapper.sol";
|
||||
import "./interfaces/IForwarderCore.sol";
|
||||
import "../../utils/LibBytes/LibBytes.sol";
|
||||
import "../../protocol/Exchange/libs/LibOrder.sol";
|
||||
import "../../protocol/Exchange/libs/LibFillResults.sol";
|
||||
import "../../protocol/Exchange/libs/LibMath.sol";
|
||||
import "@0x/contracts-utils/contracts/src/LibBytes.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
|
||||
|
||||
|
||||
contract MixinForwarderCore is
|
@@ -16,9 +16,9 @@
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.4.24;
|
||||
pragma solidity ^0.4.24;
|
||||
|
||||
import "../../protocol/Exchange/libs/LibMath.sol";
|
||||
import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
|
||||
import "./libs/LibConstants.sol";
|
||||
import "./mixins/MWeth.sol";
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user