Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62182bae03 | ||
|
|
2ee03a5f81 | ||
|
|
7a5a88a135 | ||
|
|
f4e0e2111f | ||
|
|
aac902011e | ||
|
|
a030330808 | ||
|
|
d108beafd4 | ||
|
|
90e20ed4d2 | ||
|
|
723ec10fa1 | ||
|
|
cf9082e03a | ||
|
|
3dce4fe04a | ||
|
|
55ebc4f0d9 | ||
|
|
ce2122e9fa | ||
|
|
0fb55fe633 | ||
|
|
adca13bc8c | ||
|
|
b939c3593c | ||
|
|
aa70b81a89 | ||
|
|
f3e1d6beda | ||
|
|
754bc4dc21 | ||
|
|
a8df82dfe0 | ||
|
|
4ff56f5cfe | ||
|
|
1fd9f04458 | ||
|
|
a28306f487 | ||
|
|
19941bcb61 | ||
|
|
2cb85866ab | ||
|
|
8556de1fa2 | ||
|
|
143d070d21 | ||
|
|
2a53b1121e | ||
|
|
0733137f79 | ||
|
|
cc918660cb | ||
|
|
3527f8c7d9 | ||
|
|
41caf2fd6d | ||
|
|
d407513dd1 | ||
|
|
bd76349552 | ||
|
|
0ec894b732 | ||
|
|
be4cb52dd3 | ||
|
|
456eaeeb94 | ||
|
|
0ec50b6159 | ||
|
|
98336fd2e5 | ||
|
|
7b3bbd3ef2 | ||
|
|
49afd1fe09 | ||
|
|
0df17104d5 | ||
|
|
db8434559e | ||
|
|
eaf9d97ae3 | ||
|
|
3e6d86b768 | ||
|
|
8aab41648e | ||
|
|
4a535c08c7 | ||
|
|
715486d54e | ||
|
|
1073dc14aa | ||
|
|
5cca95e855 | ||
|
|
942b623273 | ||
|
|
eea99656ad | ||
|
|
04b6df9ac5 | ||
|
|
d5132b56de | ||
|
|
1fdc2c8dae | ||
|
|
b6a2693e5f | ||
|
|
8b3687e062 | ||
|
|
3a8429b687 | ||
|
|
26e9b01198 | ||
|
|
76d71d946d | ||
|
|
0ebc7bd374 | ||
|
|
d94c126744 | ||
|
|
86597dcb17 | ||
|
|
1be682827b | ||
|
|
081b6b4f2b | ||
|
|
7dc38e78cf | ||
|
|
dcf214f250 | ||
|
|
2e82528e1b | ||
|
|
090b91910f | ||
|
|
058d197646 | ||
|
|
0fca8904e6 | ||
|
|
0bf7bc416a | ||
|
|
ea08763307 | ||
|
|
5272645abe | ||
|
|
e5373c35c8 | ||
|
|
b73b96e412 | ||
|
|
18d24bf509 | ||
|
|
fe230f143f | ||
|
|
6357c1e040 | ||
|
|
1876efe13e | ||
|
|
9de142b5f6 | ||
|
|
e5cb0ba2b4 | ||
|
|
dba5d3e7b3 | ||
|
|
8ccfecfff8 | ||
|
|
f2e79ffe67 | ||
|
|
e7f595a11f | ||
|
|
770471aef0 | ||
|
|
6b1ff0036e | ||
|
|
fee81b89ac | ||
|
|
c4d5b8e1ae | ||
|
|
5674b1df67 | ||
|
|
5ccb3e85f8 | ||
|
|
785a23433d | ||
|
|
bead42ca5f | ||
|
|
2d2a1a5989 | ||
|
|
db4dde0a57 | ||
|
|
b5d83f8836 | ||
|
|
cdf6cc6096 | ||
|
|
dfd07e04d4 | ||
|
|
f5a3a6fd73 | ||
|
|
51a7263d38 | ||
|
|
e3b11360ab | ||
|
|
b4bed3d801 | ||
|
|
1f8b573d81 | ||
|
|
a0e5d48208 | ||
|
|
6ce32b8039 | ||
|
|
3ee810904e | ||
|
|
ed73a7912b | ||
|
|
4ec2cf9e43 | ||
|
|
38ac05203e | ||
|
|
bb6a2b4468 | ||
|
|
3c9b20e902 | ||
|
|
e1a2ea49cb | ||
|
|
892004563f | ||
|
|
efe4ce8d9d | ||
|
|
f0f561e243 | ||
|
|
56e34586b3 | ||
|
|
667fe8fb17 | ||
|
|
3fd8074877 | ||
|
|
91a2eac220 | ||
|
|
455ae2ccde | ||
|
|
9d43b787fd | ||
|
|
29551e46b0 | ||
|
|
103745f845 | ||
|
|
cd7a32cf1f | ||
|
|
5004d1d79f | ||
|
|
2607203925 | ||
|
|
5abab5bf13 | ||
|
|
a990b4e40f | ||
|
|
997f8f6a51 | ||
|
|
23e055869c | ||
|
|
de85d063a4 | ||
|
|
5964f790b5 | ||
|
|
a767ef68ca | ||
|
|
c096a4981d | ||
|
|
7dcdef17c3 | ||
|
|
ef839a7a42 | ||
|
|
7bf1706994 | ||
|
|
2999987fb0 | ||
|
|
6ba45086b5 | ||
|
|
e3c51d4b6b | ||
|
|
1295c85df3 | ||
|
|
14d66c32de | ||
|
|
b794d22ac4 | ||
|
|
edb62407e2 | ||
|
|
45b040fbf8 | ||
|
|
777b823317 | ||
|
|
c5ef717398 | ||
|
|
98f0933da5 | ||
|
|
493d0df0c1 | ||
|
|
5d8e92f17c | ||
|
|
2ce178cad2 | ||
|
|
9ccac88372 | ||
|
|
0aa441de96 | ||
|
|
78941a3cde | ||
|
|
514570a5fb | ||
|
|
ad2da94408 | ||
|
|
803edbb8cc | ||
|
|
94692cbbb4 | ||
|
|
0a27c23439 | ||
|
|
0a1cfb15ef | ||
|
|
cd494d7de0 | ||
|
|
4f5029118e | ||
|
|
2df8d01186 | ||
|
|
f1b3240728 | ||
|
|
748b26924e | ||
|
|
26f6572f29 | ||
|
|
8e3a75ed8d | ||
|
|
c13d1b4ae6 | ||
|
|
17388b7865 | ||
|
|
85785be8cf | ||
|
|
211af1f999 | ||
|
|
b8116fcf5a | ||
|
|
79593b0a70 | ||
|
|
4ecf53dcf4 | ||
|
|
5652023c5a | ||
|
|
f6e667df26 | ||
|
|
aeac277590 | ||
|
|
dca3f17b1c | ||
|
|
b22b225252 | ||
|
|
6d1944bef9 | ||
|
|
357b5feb2e | ||
|
|
354a2a4eaa | ||
|
|
3fd61e678a | ||
|
|
71d2802f00 | ||
|
|
816e30fb0a | ||
|
|
77c6177c9a | ||
|
|
9f97924d33 | ||
|
|
d7d8edcc9b | ||
|
|
d6047e38d3 | ||
|
|
5f44768796 | ||
|
|
9c224f5076 | ||
|
|
bcb7861d88 | ||
|
|
0b85a4d5e2 | ||
|
|
c17ef47548 | ||
|
|
df7f533491 | ||
|
|
500a38e1ab | ||
|
|
3437fb65cd | ||
|
|
3d43aba4a1 | ||
|
|
7cd5204fb7 | ||
|
|
3fdf3b5523 | ||
|
|
8fd0fe846f | ||
|
|
130a59fb02 | ||
|
|
e6aec6d178 | ||
|
|
6fb73f3124 | ||
|
|
ea96abc1a4 | ||
|
|
9c08fa6206 | ||
|
|
8edb2abe30 | ||
|
|
3e2c3a6ed8 | ||
|
|
1e35c5cd25 | ||
|
|
40dc599acc | ||
|
|
d1d6fc631c | ||
|
|
28c6139068 | ||
|
|
b00d8573fd | ||
|
|
6afebd70d0 | ||
|
|
1f4d423682 | ||
|
|
57718cacfb | ||
|
|
b51d4e13fb | ||
|
|
08af19e2d5 | ||
|
|
9830457c9a | ||
|
|
4619ab6668 | ||
|
|
d886c02b23 | ||
|
|
7d745661b7 | ||
|
|
da9c2bc10b | ||
|
|
eab8d44487 | ||
|
|
19ecae37dd | ||
|
|
3d3e46cb77 | ||
|
|
e09027e83d | ||
|
|
c544e0b478 | ||
|
|
f914061365 | ||
|
|
55e4e8209e | ||
|
|
193c9ebb37 | ||
|
|
5d67d92454 | ||
|
|
3a0d566f60 | ||
|
|
675f1e71b5 | ||
|
|
4bbf38c7e4 | ||
|
|
fd76246c11 | ||
|
|
0b14539a98 | ||
|
|
09b1a0e6e3 | ||
|
|
03e64c9120 | ||
|
|
f848c87fde | ||
|
|
46a05b6a60 | ||
|
|
a9f671b501 | ||
|
|
f1187f5981 | ||
|
|
4134bf8a85 | ||
|
|
4709a62c0b | ||
|
|
900cf21bc5 | ||
|
|
fa8229de06 | ||
|
|
913bf65dab | ||
|
|
769b953983 | ||
|
|
2949e12c55 | ||
|
|
1664a8d8a2 | ||
|
|
ab71a25b96 | ||
|
|
02c1a95ea1 | ||
|
|
3ee6830c0e | ||
|
|
642724ab6d | ||
|
|
022756e6dd | ||
|
|
e29003f51e | ||
|
|
e5c2f8f529 | ||
|
|
f7ce22b158 | ||
|
|
0028d212e4 | ||
|
|
719c48f8f2 | ||
|
|
b137f8ec8b | ||
|
|
e93b7a3626 | ||
|
|
7bf2d220dd | ||
|
|
7efa20c066 | ||
|
|
f2afcfc1a7 | ||
|
|
45e2a560a9 | ||
|
|
5b5cdae9ff | ||
|
|
5147f64a64 | ||
|
|
0116a3f1f7 | ||
|
|
01839b5f63 | ||
|
|
18d02f49fd | ||
|
|
12e2a44935 | ||
|
|
9c47980c68 | ||
|
|
14f7a5c0bb | ||
|
|
f512f4aa27 | ||
|
|
4b9d4fa935 | ||
|
|
35288e81e1 | ||
|
|
f95fa2e60d | ||
|
|
0c62a8a676 | ||
|
|
346989211c | ||
|
|
ba2453457d | ||
|
|
9c4d409e66 | ||
|
|
5f9e345dd4 | ||
|
|
bf141cd874 | ||
|
|
08bf4b7eb2 | ||
|
|
42daac5327 | ||
|
|
694fb8b241 | ||
|
|
b0b69c27dc | ||
|
|
b57bcdc38f | ||
|
|
4fd4178ce9 | ||
|
|
39403fcfe7 | ||
|
|
955605b2b0 | ||
|
|
d291a76798 | ||
|
|
aa12647ef6 | ||
|
|
ceff8cc9ff | ||
|
|
0b11d5b9c1 | ||
|
|
a1afff886b | ||
|
|
08785c3ae6 | ||
|
|
438fc8bd86 | ||
|
|
6531bf1e36 | ||
|
|
c066593d7a | ||
|
|
66f777ece9 | ||
|
|
3fe6be655d | ||
|
|
3810e392dd | ||
|
|
3dd4c8d6e5 | ||
|
|
7611ec8b01 | ||
|
|
82d8207f48 | ||
|
|
b2575437e4 | ||
|
|
1ee92c356a | ||
|
|
372e4cc59b | ||
|
|
f1eb7ee489 | ||
|
|
039b849713 | ||
|
|
8913c70205 | ||
|
|
352c2df232 | ||
|
|
2994c594fc | ||
|
|
29dba0a55f | ||
|
|
2d89b5b493 | ||
|
|
72bdf6cbae | ||
|
|
f7d2bf9d11 | ||
|
|
8275f3bc54 | ||
|
|
058786689e | ||
|
|
3d4b0018c0 | ||
|
|
fa593ef1fc | ||
|
|
179ca120fa | ||
|
|
984a4a1ae8 | ||
|
|
1ad77eb58c | ||
|
|
928eef865a | ||
|
|
16ea0d2ddb | ||
|
|
203321c83e | ||
|
|
f42721d545 | ||
|
|
9846e97d73 | ||
|
|
cc5ab430b5 | ||
|
|
33b8d410b4 | ||
|
|
d9c2ed85bf | ||
|
|
6602421cfe | ||
|
|
cf61061863 | ||
|
|
b47d83fd3c | ||
|
|
37e8d53a12 | ||
|
|
fc667b7b72 | ||
|
|
a020835039 | ||
|
|
9cf963170d | ||
|
|
291d609dba | ||
|
|
a6fa8cec17 | ||
|
|
c4b95c7b52 | ||
|
|
d5243f3527 | ||
|
|
d71e34188e | ||
|
|
3f0f443124 | ||
|
|
074879c7a7 | ||
|
|
516af6f81e | ||
|
|
4ee1446823 | ||
|
|
88850918b9 | ||
|
|
11ed1c4249 | ||
|
|
0be13f451d | ||
|
|
f7e431adf9 | ||
|
|
6efca949cc | ||
|
|
80ed10201f | ||
|
|
6763d1c062 | ||
|
|
2c1efaa7a0 | ||
|
|
d0fd445c06 | ||
|
|
f1c84da0b0 | ||
|
|
a5e68db05f | ||
|
|
60c0e81314 | ||
|
|
f72be29dbf | ||
|
|
f301a57122 | ||
|
|
9523e6b0d3 | ||
|
|
b17bfbaf34 | ||
|
|
669d8b1a84 | ||
|
|
b7815d43a5 | ||
|
|
7622c8b151 | ||
|
|
37bc63b130 | ||
|
|
43f9676341 | ||
|
|
1283be6c19 | ||
|
|
cdd6314a4f | ||
|
|
8d027717bb | ||
|
|
dec9bbff49 | ||
|
|
536eef02c5 | ||
|
|
3b51154d60 | ||
|
|
f5767e3def | ||
|
|
29057558ac | ||
|
|
e591a75988 | ||
|
|
2fdc1679f2 | ||
|
|
35f6a51a6b | ||
|
|
640bab086e | ||
|
|
5f9ffca721 | ||
|
|
2fd9d18910 | ||
|
|
7782eef6e3 | ||
|
|
0c477e15c4 | ||
|
|
f39820e9c0 | ||
|
|
35d1a8e57f | ||
|
|
83567b75c5 | ||
|
|
501d0fa249 | ||
|
|
014702ca16 | ||
|
|
b53d34b41f | ||
|
|
47d995b88d | ||
|
|
cedba4af0c | ||
|
|
df8d84467b | ||
|
|
c289a83b16 | ||
|
|
a869ba7793 | ||
|
|
4f4ce3549e | ||
|
|
ce55d5b7d8 | ||
|
|
10997a6d73 | ||
|
|
ebe30a2880 | ||
|
|
b4963cc6bd | ||
|
|
304f7ad124 | ||
|
|
9777bca5d4 | ||
|
|
4c379e85cc | ||
|
|
4ee83d3d29 | ||
|
|
40d6a388b2 | ||
|
|
31f4940ec6 | ||
|
|
1ac50696ca | ||
|
|
1ca5ff48a0 | ||
|
|
8253272901 | ||
|
|
82c38e9805 | ||
|
|
509834c491 | ||
|
|
d713a7a116 | ||
|
|
d24e14aa5e | ||
|
|
b1a4a87926 | ||
|
|
05e0d36a0e | ||
|
|
5599a8877c | ||
|
|
2d850c5ac4 | ||
|
|
82ba3fb9b1 | ||
|
|
0aae0e2bc2 | ||
|
|
2bcea83e0a | ||
|
|
20e126759e | ||
|
|
566127bcb6 | ||
|
|
b50ee462da | ||
|
|
a3cd2de56d | ||
|
|
7f60123417 | ||
|
|
bb124813dc | ||
|
|
652ede8ce7 | ||
|
|
52d2d38051 | ||
|
|
65f627c0dc | ||
|
|
9ecf29b83b | ||
|
|
97b84977b7 | ||
|
|
f9315c307f | ||
|
|
c08c947abf | ||
|
|
2d4509c32a | ||
|
|
c6e18b1a9e | ||
|
|
515a77781f | ||
|
|
55d2c149f7 | ||
|
|
43b959ad1f | ||
|
|
6708b34a01 | ||
|
|
a9a9214f3b | ||
|
|
8bd77c97a0 | ||
|
|
ed70e5c65f | ||
|
|
ca6f157007 | ||
|
|
6c30e328bb | ||
|
|
1f6f3c67a8 | ||
|
|
d19e2c8469 | ||
|
|
92f479e0e5 | ||
|
|
25f9444c53 | ||
|
|
6d46f8b24e | ||
|
|
0189cdabe9 | ||
|
|
9d61c2c96c | ||
|
|
6599b41155 | ||
|
|
9c05257046 | ||
|
|
41e2e67fd0 | ||
|
|
092fbdd923 | ||
|
|
c1cdc80169 | ||
|
|
306bbdea12 | ||
|
|
f41519e185 | ||
|
|
1a3fd344b5 | ||
|
|
f798c1dbd5 | ||
|
|
813d358999 | ||
|
|
e85eb35413 | ||
|
|
8a50cba394 | ||
|
|
20f030e987 | ||
|
|
4a683f41d3 | ||
|
|
ea7f59ab73 | ||
|
|
60498f7f36 | ||
|
|
9ad0c46417 | ||
|
|
0fc140f838 | ||
|
|
cd63bb695d | ||
|
|
7eac688074 | ||
|
|
820a5e4077 | ||
|
|
bc0f69aef0 | ||
|
|
5074adf690 | ||
|
|
8461d105d6 | ||
|
|
cd246e2381 | ||
|
|
8a499bf1bf | ||
|
|
5b2ec8e4d6 | ||
|
|
4a06d1382f | ||
|
|
66ac9e15a6 | ||
|
|
0e55357053 | ||
|
|
b4b80bbf67 | ||
|
|
4355b9b066 | ||
|
|
5c92e095ff | ||
|
|
4fedd594f1 | ||
|
|
6f05fa6634 | ||
|
|
856e93f4a0 | ||
|
|
195e42ec11 | ||
|
|
16e90aadfc | ||
|
|
bcdf5ba26e | ||
|
|
ae9a04e557 | ||
|
|
4b37a82fb3 | ||
|
|
1b69bb9dfa | ||
|
|
e8f703f850 | ||
|
|
3ad4455fe1 | ||
|
|
1f6a263a8e | ||
|
|
73073529bb | ||
|
|
e1bdac1ba5 | ||
|
|
56c619944c | ||
|
|
4c60b98b07 | ||
|
|
2f9f007547 | ||
|
|
d00184fff7 | ||
|
|
e1e3a1699f | ||
|
|
90a1837978 | ||
|
|
c96ad1a34e | ||
|
|
b1eda9efe9 | ||
|
|
2184ae8511 | ||
|
|
ce94314992 | ||
|
|
eea3596847 | ||
|
|
37e78f7abd | ||
|
|
4bb2c83213 | ||
|
|
3828d941a9 | ||
|
|
c92d5cfb20 | ||
|
|
70d2250b3b | ||
|
|
a46279876f | ||
|
|
4267c4ac76 | ||
|
|
e09dfcffbe | ||
|
|
b722291de2 | ||
|
|
4367bb0f68 | ||
|
|
1d71f67e2a | ||
|
|
2d4995b16e | ||
|
|
b96cfd36cf | ||
|
|
9f53838626 | ||
|
|
478dd6ccd9 | ||
|
|
fd313c2e91 | ||
|
|
66b58ea5f2 | ||
|
|
66acbe04af | ||
|
|
2194cc58d7 | ||
|
|
768f64aec7 | ||
|
|
2176bedd50 | ||
|
|
8273eb5441 | ||
|
|
76af1b8822 | ||
|
|
80eb70a382 | ||
|
|
7e01b2b256 | ||
|
|
b30bed8707 | ||
|
|
d79813065f | ||
|
|
7e12949146 | ||
|
|
5ca6575245 | ||
|
|
4cadf3bcb7 | ||
|
|
81f8f16b98 | ||
|
|
8edfb1139f | ||
|
|
69d1d896d1 | ||
|
|
3bc62adf6f | ||
|
|
691a8e9b18 | ||
|
|
fc812590e5 | ||
|
|
05499abcd5 | ||
|
|
e375dd8a9d | ||
|
|
3269883e8f | ||
|
|
c99129ee06 | ||
|
|
2514e107bf | ||
|
|
3c34a0e1f2 | ||
|
|
f704e371c8 | ||
|
|
97e3443e74 | ||
|
|
a84e101666 | ||
|
|
a799918d58 | ||
|
|
429390fb62 | ||
|
|
05d0109b72 | ||
|
|
02b1429979 | ||
|
|
6e1853d01f | ||
|
|
aa9c406d01 | ||
|
|
f9ec44823d | ||
|
|
54218651f9 | ||
|
|
571c9eff6a | ||
|
|
5b7333b8dd | ||
|
|
938fa8b967 | ||
|
|
b99a69871e | ||
|
|
b1da8f575b | ||
|
|
a960aaf6ae | ||
|
|
f88c647ad0 | ||
|
|
7ff11925d9 | ||
|
|
cb5a588489 | ||
|
|
09019224e3 | ||
|
|
2d7031831a | ||
|
|
faf7ea2b17 | ||
|
|
af973de694 | ||
|
|
dfede866b2 | ||
|
|
0f0b243815 | ||
|
|
29f53fe906 | ||
|
|
225c250634 | ||
|
|
c871e9d735 | ||
|
|
b42ead28e5 | ||
|
|
db0581c051 | ||
|
|
e7ac095ace | ||
|
|
a7d9fc48e9 | ||
|
|
3db2990ce7 | ||
|
|
4b7cda243b | ||
|
|
c4ceeb8382 | ||
|
|
540971d388 | ||
|
|
b4d65a1c49 | ||
|
|
4fd4660853 | ||
|
|
4b46c179b2 | ||
|
|
3c6d297ecd | ||
|
|
4a6e620acc | ||
|
|
50b494ee2e | ||
|
|
5b551ca976 | ||
|
|
5f2a0e25f9 | ||
|
|
4edb0f00b6 | ||
|
|
096c772d7d | ||
|
|
d771d4c243 | ||
|
|
e038c36719 | ||
|
|
19c8799986 | ||
|
|
e7f642e7fb | ||
|
|
90e05a7907 | ||
|
|
1ad961eb93 | ||
|
|
8549f1fe89 | ||
|
|
0be212bd49 | ||
|
|
2dd2f78f7e | ||
|
|
d5ce0ff4d1 | ||
|
|
4d887e889a | ||
|
|
1113d09315 | ||
|
|
b774b7804b | ||
|
|
6c1b0e7346 | ||
|
|
68ba664c4c | ||
|
|
c3c4ceab8b | ||
|
|
fff30601a0 | ||
|
|
cfb5d24a87 | ||
|
|
7ce4ed1504 | ||
|
|
5a00b146fc | ||
|
|
1a73a3407e | ||
|
|
0db66346a6 | ||
|
|
a07bfe1234 | ||
|
|
5feb233abc | ||
|
|
16951c6feb | ||
|
|
22aa8d7adb | ||
|
|
dfaf954f75 | ||
|
|
78911607e8 | ||
|
|
cdcc331e6e | ||
|
|
882b29eebd | ||
|
|
de5c9a1594 | ||
|
|
2fc26b5533 | ||
|
|
6d795ecc5d | ||
|
|
a0c3aa3059 | ||
|
|
e30bac1ed6 | ||
|
|
50a061eab3 | ||
|
|
f2064f059f | ||
|
|
768cd68146 | ||
|
|
0a5bfdca5e | ||
|
|
3ec2f6dcb2 | ||
|
|
0f2a3a142f | ||
|
|
6f5a706ec9 | ||
|
|
7e0f917c2b | ||
|
|
99731a6664 | ||
|
|
7765476a26 | ||
|
|
2cd9633afe | ||
|
|
72749d083f | ||
|
|
9ede85f99a | ||
|
|
d6a390beb4 | ||
|
|
a14bec79f8 | ||
|
|
c0de5ac3c8 | ||
|
|
8d7f810556 | ||
|
|
5c6526a6bd | ||
|
|
e9635ab75b | ||
|
|
e946243b6f | ||
|
|
ca6a4177b5 | ||
|
|
7817311f84 | ||
|
|
77659aae2a | ||
|
|
7cc619fbb0 | ||
|
|
887654049e | ||
|
|
d07b79f578 | ||
|
|
cefeb0bb51 | ||
|
|
1d675ec803 | ||
|
|
7596dfa65c | ||
|
|
508e997c64 | ||
|
|
89563ee05c | ||
|
|
8b72584d53 | ||
|
|
4ae62c114b | ||
|
|
823fb51d18 | ||
|
|
a840b815bd | ||
|
|
fbf973dc2a | ||
|
|
2698f6779f | ||
|
|
3b5de80c54 | ||
|
|
041f5a7c2b | ||
|
|
cb8f1130af | ||
|
|
f480df7504 | ||
|
|
51763d3bf9 | ||
|
|
d2b7e88060 | ||
|
|
b20df563ce | ||
|
|
5ada180d66 | ||
|
|
a4256de444 | ||
|
|
bce5553a4b | ||
|
|
670743cbcf | ||
|
|
ffed9ceb6d | ||
|
|
bbacb1b80a | ||
|
|
5ea38c9898 | ||
|
|
7177722a49 | ||
|
|
6083923604 | ||
|
|
7a3e1c23aa | ||
|
|
cab50dbf7a | ||
|
|
9964b308ce | ||
|
|
247a0e7227 | ||
|
|
f2dba8aff8 | ||
|
|
2ef18335e3 | ||
|
|
fa0818d088 | ||
|
|
2106626f22 | ||
|
|
fceab0becc | ||
|
|
bdf42368f7 | ||
|
|
36ab5ea5e2 | ||
|
|
c5c8469038 | ||
|
|
83d0121a28 | ||
|
|
aff74ebde3 | ||
|
|
be4619ba3d | ||
|
|
17bc2e9fa0 | ||
|
|
66e2382f26 | ||
|
|
6c299f81c6 | ||
|
|
a4fcba6ff6 | ||
|
|
1a3507366e | ||
|
|
65939dbe9d | ||
|
|
6914411232 | ||
|
|
c79f46aaa2 | ||
|
|
cea09b2c8b | ||
|
|
bc23ed9fc9 | ||
|
|
a4f286e89a | ||
|
|
f112f9eb5e | ||
|
|
010552ca44 | ||
|
|
9ae4b1066e | ||
|
|
1a57abde6e | ||
|
|
cf4b44940e | ||
|
|
81e19aace4 | ||
|
|
7341c32df5 | ||
|
|
bb1ed6cfcd | ||
|
|
55dcfb5e18 | ||
|
|
2fe9e5a125 | ||
|
|
e24385213d | ||
|
|
9cd81a23e7 | ||
|
|
64348860cb | ||
|
|
ecfceb5d0a | ||
|
|
cc840c37a2 | ||
|
|
527af12b0f | ||
|
|
9f2b98d5a8 | ||
|
|
4bd767fb62 | ||
|
|
cff29dfd2d | ||
|
|
d26b80905c | ||
|
|
4249679882 | ||
|
|
ff27055808 | ||
|
|
54f8acb27f | ||
|
|
017bebe8bb | ||
|
|
89f5670d8b | ||
|
|
b9e2293bee | ||
|
|
3b45418e47 | ||
|
|
6af7f6ef24 | ||
|
|
a0b85ee7f8 | ||
|
|
2e0c6c3368 | ||
|
|
1d36284369 | ||
|
|
94788692bb | ||
|
|
1f3f5d5980 | ||
|
|
90c2638221 | ||
|
|
98e02a0baa | ||
|
|
e96a204bb5 | ||
|
|
0dc4ec48da | ||
|
|
5d5c7e4c0a | ||
|
|
76c973f5c5 | ||
|
|
7608f2eed9 | ||
|
|
e585aa1899 | ||
|
|
82152352ea | ||
|
|
515e1d62af | ||
|
|
2d2e6bc1bf | ||
|
|
5bb89db279 | ||
|
|
36d8f6c922 | ||
|
|
8224beb85d | ||
|
|
ae6856f124 | ||
|
|
6953e22168 | ||
|
|
8c815ac601 | ||
|
|
9f1f5c9f5f | ||
|
|
b4acb2afa8 | ||
|
|
7287e746e3 | ||
|
|
ea4d5ab2e9 | ||
|
|
0dbc359f07 | ||
|
|
1e380ca1eb | ||
|
|
6bbe961a0f | ||
|
|
0fa8484208 | ||
|
|
30d5f5c118 | ||
|
|
3bcd1d17f6 | ||
|
|
befdfca6b2 | ||
|
|
c9b9f80987 | ||
|
|
0eae8fb0f7 | ||
|
|
903c3b120f | ||
|
|
6f8ffcbb99 | ||
|
|
2563a0ac3d | ||
|
|
d73ca5805a | ||
|
|
1e20b7725b | ||
|
|
97ec9e6626 | ||
|
|
120d5304f1 | ||
|
|
7c59232204 | ||
|
|
0df0bf094e | ||
|
|
5b16f0cf36 | ||
|
|
c1b7cd5885 | ||
|
|
ec7bae841e | ||
|
|
06fba7bdca | ||
|
|
b3f19247d5 | ||
|
|
5e562d7a59 | ||
|
|
b4479f3747 | ||
|
|
6dc79a0b7c | ||
|
|
e2aa034843 | ||
|
|
e99bc1163b | ||
|
|
a29dae61c5 | ||
|
|
777a04cc64 | ||
|
|
1f22566934 | ||
|
|
0011e5219a | ||
|
|
ce331bf6bd | ||
|
|
60d795f480 | ||
|
|
75a5f2fe48 | ||
|
|
dfda191c8b | ||
|
|
de09a2aa90 | ||
|
|
5e7cb9db9e | ||
|
|
61eca6100b | ||
|
|
4ef36d51ad | ||
|
|
880f560613 | ||
|
|
3f21278634 | ||
|
|
3c1e3573c9 | ||
|
|
6f8b14759d | ||
|
|
057e233cbf | ||
|
|
5dcc12e94d | ||
|
|
17886d60c0 | ||
|
|
b40fca79cb | ||
|
|
c04a228100 | ||
|
|
b3b1c7622c | ||
|
|
06f0813f2f | ||
|
|
5e086d6579 | ||
|
|
6fef3e0b2e | ||
|
|
7a7ee378c8 | ||
|
|
6fd2edcd76 | ||
|
|
73d17faaaa | ||
|
|
47bed3a2ba | ||
|
|
280a8f89bd | ||
|
|
8140d44d8a | ||
|
|
8b7717961f | ||
|
|
e462046c82 | ||
|
|
d261b2e464 | ||
|
|
73898ada43 | ||
|
|
bb0831a023 | ||
|
|
012719b0bf | ||
|
|
c8dc222435 | ||
|
|
7e0588b690 | ||
|
|
3dc6e8a128 | ||
|
|
eb5cebfb7c | ||
|
|
1f6417a9a8 | ||
|
|
306592f6b1 | ||
|
|
673945c8cb | ||
|
|
8a30f168c3 | ||
|
|
35708e8414 | ||
|
|
fb55db7797 | ||
|
|
2aca02ecd4 | ||
|
|
bba72e7191 | ||
|
|
a3ea860144 | ||
|
|
6e20baf317 | ||
|
|
f8742c8523 | ||
|
|
c6b84b8c7e | ||
|
|
815c1f5eeb | ||
|
|
e7d454787d | ||
|
|
d5c541db67 | ||
|
|
2cf12616ed | ||
|
|
2dee1c86e6 | ||
|
|
023b1e8610 | ||
|
|
e9f3efa0ec | ||
|
|
529119d9c3 | ||
|
|
3748d578e0 | ||
|
|
6af09d344d | ||
|
|
951ee2be17 | ||
|
|
7d902d1b6e | ||
|
|
cba373ab8a | ||
|
|
ab1c1bf311 |
-29
@@ -1,29 +0,0 @@
|
||||
8
|
||||
2.6.2
|
||||
2.12.2
|
||||
5.2.2
|
||||
5.2.3
|
||||
5.4.2
|
||||
5.4.3
|
||||
5.4.4
|
||||
5.5.2
|
||||
5.6.2
|
||||
5.6.3
|
||||
5.9.2
|
||||
6.0.2
|
||||
6.0.3
|
||||
6.0.4
|
||||
6.0.5
|
||||
|
||||
7.0.2
|
||||
7.0.3
|
||||
7.1.2
|
||||
7.8.2
|
||||
7.9.2
|
||||
8.0.2
|
||||
8.0.3
|
||||
8.0.4
|
||||
8.0.5
|
||||
8.1.2
|
||||
8.2.2
|
||||
8.3.2
|
||||
@@ -1,21 +0,0 @@
|
||||
checks:
|
||||
argument-count:
|
||||
config:
|
||||
threshold: 5
|
||||
method-complexity:
|
||||
config:
|
||||
threshold: 7
|
||||
method-count:
|
||||
config:
|
||||
threshold: 25
|
||||
method-lines:
|
||||
config:
|
||||
threshold: 30
|
||||
|
||||
exclude_patterns:
|
||||
- "**/*.spec.js"
|
||||
- "**/*.spec.ts"
|
||||
- "packages/networks/src/substrate.ts"
|
||||
- "packages/util/src/is/utf8.ts"
|
||||
- "packages/x-noble-hashes/src/**.ts"
|
||||
- "packages/x-noble-secp256k1/src/**.ts"
|
||||
@@ -1,2 +0,0 @@
|
||||
packages/x-noble-hashes/**/*.ts
|
||||
packages/x-noble-secp256k1/**/*.ts
|
||||
@@ -1,22 +0,0 @@
|
||||
// Copyright 2017-2022 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
const base = require('@polkadot/dev/config/eslint.cjs');
|
||||
|
||||
module.exports = {
|
||||
...base,
|
||||
ignorePatterns: [
|
||||
...base.ignorePatterns
|
||||
],
|
||||
parserOptions: {
|
||||
...base.parserOptions,
|
||||
project: [
|
||||
'./tsconfig.eslint.json'
|
||||
]
|
||||
},
|
||||
rules: {
|
||||
...base.rules,
|
||||
// this seems very broken atm, false positives
|
||||
'@typescript-eslint/unbound-method': 'off'
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
<!--
|
||||
|
||||
For general support, howto, coding and bundling questions, please
|
||||
use the Substrate & Polkadot StackExchange at
|
||||
|
||||
https://substrate.stackexchange.com/
|
||||
|
||||
and get other ecosystem developers involved. This issues in this
|
||||
repository are meant for the tracking of feature requests and bug
|
||||
reports.
|
||||
|
||||
While all issues are looked at non-bug and non-features would take
|
||||
quite a bit longer to get to and may yield less than satisfactory
|
||||
responses in this format.
|
||||
|
||||
Additionally, please ensure you have done a search on the existing
|
||||
and closed issues before logging a new request. This saves time on
|
||||
all sides.
|
||||
|
||||
-->
|
||||
|
||||
|
||||
* **I'm submitting a ...**
|
||||
|
||||
<!---
|
||||
|
||||
REQUIRED:
|
||||
|
||||
Classify the type of report your are submitting
|
||||
|
||||
-->
|
||||
|
||||
- [ ] Bug report
|
||||
- [ ] Feature request
|
||||
- [ ] Support request
|
||||
- [ ] Other
|
||||
|
||||
|
||||
* **What is the current behavior and expected behavior?**
|
||||
|
||||
<!---
|
||||
|
||||
REQUIRED:
|
||||
|
||||
If you're describing a bug, tell us what should happen. If you're
|
||||
suggesting a change/improvement, tell us how it should work.
|
||||
|
||||
-->
|
||||
|
||||
|
||||
* **What is the motivation for changing the behavior?**
|
||||
|
||||
<!---
|
||||
|
||||
OPTIONAL:
|
||||
|
||||
Suggest a motivation for the request or ideas how to implement the
|
||||
addition or change
|
||||
|
||||
-->
|
||||
|
||||
|
||||
* **Please tell us about your environment:**
|
||||
|
||||
<!---
|
||||
|
||||
REQUIRED:
|
||||
|
||||
Include as many relevant details about the environment in which you
|
||||
experienced the issue. Also ensure that you have tested against the
|
||||
latest stable releases if you believe this to be a bug
|
||||
|
||||
-->
|
||||
|
||||
- Version:
|
||||
- Environment:
|
||||
|
||||
- [ ] Node.js
|
||||
- [ ] Browser
|
||||
- [ ] Other (limited support for other environments)
|
||||
|
||||
- Language:
|
||||
|
||||
- [ ] JavaScript
|
||||
- [ ] TypeScript (include tsc --version)
|
||||
- [ ] Other
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
title: SS58 registry is outdated
|
||||
labels: ['ci', '@networks']
|
||||
---
|
||||
|
||||
cc @polkadot-js/notifications
|
||||
|
||||
Discrepancies detected between https://github.com/paritytech/substrate/blob/master/ss58-registry.json and https://github.com/polkadot-js/common/blob/master/packages/networks/src/substrate.ts
|
||||
|
||||
Check the nightly cron output (or via `yarn networks:crosscheck` locally) and run `yarn networks:sync` to update. The output as found from the test includes:
|
||||
@@ -0,0 +1,16 @@
|
||||
name: bot
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [labeled]
|
||||
|
||||
jobs:
|
||||
approve:
|
||||
if: "! startsWith(github.event.head_commit.message, '[CI Skip]') && (!github.event.pull_request || github.event.pull_request.head.repo.full_name == github.repository)"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: jacogr/action-approve@795afd1dd096a2071d7ec98740661af4e853b7da
|
||||
with:
|
||||
authors: jacogr
|
||||
labels: -auto
|
||||
token: ${{ secrets.GH_PAT_BOT }}
|
||||
@@ -0,0 +1,16 @@
|
||||
name: bot
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [labeled]
|
||||
|
||||
jobs:
|
||||
merge:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: jacogr/action-merge@d2d64b4545acd93b0a9575177d3d215ae3f92029
|
||||
with:
|
||||
checks: pr (build),pr (lint),pr (test)
|
||||
labels: -auto
|
||||
strategy: squash
|
||||
token: ${{ secrets.GH_PAT_BOT }}
|
||||
@@ -7,17 +7,19 @@ on:
|
||||
jobs:
|
||||
lock:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
YARN_ENABLE_SCRIPTS: false
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v2
|
||||
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
|
||||
with:
|
||||
github-token: ${{ secrets.GH_PAT_BOT }}
|
||||
issue-lock-inactive-days: '7'
|
||||
issue-lock-comment: >
|
||||
issue-inactive-days: '7'
|
||||
issue-comment: >
|
||||
This thread has been automatically locked since there has not been
|
||||
any recent activity after it was closed. Please open a new issue
|
||||
if you think you have a related problem or query.
|
||||
pr-lock-inactive-days: '2'
|
||||
pr-lock-comment: >
|
||||
pr-inactive-days: '2'
|
||||
pr-comment: >
|
||||
This pull request has been automatically locked since there
|
||||
has not been any recent activity after it was closed.
|
||||
Please open a new issue for related bugs.
|
||||
|
||||
@@ -3,16 +3,24 @@ on: [pull_request]
|
||||
|
||||
jobs:
|
||||
pr:
|
||||
continue-on-error: true
|
||||
strategy:
|
||||
matrix:
|
||||
step: ['lint', 'test', 'build']
|
||||
name: ${{ matrix.step }}
|
||||
step: ['lint', 'test', 'build', 'deno']
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
YARN_ENABLE_SCRIPTS: false
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
- uses: denoland/setup-deno@v1
|
||||
with:
|
||||
deno-version: vx.x.x
|
||||
- name: ${{ matrix.step }}
|
||||
env:
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
if: always()
|
||||
run: |
|
||||
yarn install --immutable | grep -v 'YN0013'
|
||||
yarn install --immutable
|
||||
yarn ${{ matrix.step }}
|
||||
|
||||
@@ -10,19 +10,22 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
step: ['build:release']
|
||||
name: ${{ matrix.step }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
YARN_ENABLE_SCRIPTS: false
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
GH_PAT: ${{ secrets.GH_PAT_BOT }}
|
||||
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT_BOT }}
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
token: ${{ secrets.GH_PAT_BOT }}
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
- name: ${{ matrix.step }}
|
||||
env:
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
GH_PAT: ${{ secrets.GH_PAT }}
|
||||
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT }}
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
run: |
|
||||
yarn install --immutable | grep -v 'YN0013'
|
||||
yarn install --immutable
|
||||
yarn ${{ matrix.step }}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
name: Semgrep
|
||||
on:
|
||||
pull_request: {}
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
check:
|
||||
if: "! startsWith(github.event.head_commit.message, '[CI Skip]') && (!github.event.pull_request || github.event.pull_request.head.repo.full_name == github.repository)"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: returntocorp/semgrep-action@v1
|
||||
with:
|
||||
auditOn: push
|
||||
publishToken: ${{ secrets.SEMGREP_APP_TOKEN }}
|
||||
publishDeployment: 1395
|
||||
@@ -1,26 +0,0 @@
|
||||
name: SS58
|
||||
on:
|
||||
schedule:
|
||||
- cron: '15 4/6 * * *'
|
||||
|
||||
jobs:
|
||||
ss58:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: check
|
||||
env:
|
||||
CI_LOG: 123
|
||||
run: |
|
||||
yarn install --immutable | grep -v 'YN0013'
|
||||
yarn build
|
||||
yarn networks:crosscheck
|
||||
|
||||
- name: issue
|
||||
if: ${{ failure() }}
|
||||
uses: JasonEtco/create-an-issue@v2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GH_PAT_BOT }}
|
||||
with:
|
||||
filename: .github/ss58-check.md
|
||||
update_existing: true
|
||||
@@ -1,17 +0,0 @@
|
||||
name: 'Close stale issues and PRs'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '50 1/3 * * *'
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v3
|
||||
with:
|
||||
repo-token: ${{ secrets.GH_PAT_BOT }}
|
||||
stale-issue-message: 'This issue has been open for 21 days with no activity and is not labelled as an enhancement. It will be closed in 7 days.'
|
||||
stale-issue-label: 'stale'
|
||||
exempt-issue-labels: '-size-l,-size-m,-size-s,-size-xl,-size-xs,[bug],ci'
|
||||
days-before-stale: 21
|
||||
days-before-close: 7
|
||||
+3
-4
@@ -1,11 +1,12 @@
|
||||
--test-*
|
||||
_book/
|
||||
build/
|
||||
build-docs/
|
||||
build-*/
|
||||
coverage/
|
||||
docs/.vuepress/dist/
|
||||
node_modules/
|
||||
tmp/
|
||||
/import_map.json
|
||||
/mod.ts
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
@@ -24,6 +25,4 @@ npm-debug.log*
|
||||
package-lock.json
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
store.db
|
||||
store.db.compacted
|
||||
tsconfig.*buildinfo
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
module.exports = require('@polkadot/dev/config/prettier.cjs');
|
||||
|
||||
Vendored
-768
File diff suppressed because one or more lines are too long
+785
File diff suppressed because one or more lines are too long
+6
-1
@@ -2,6 +2,11 @@ enableImmutableInstalls: false
|
||||
|
||||
enableProgressBars: false
|
||||
|
||||
logFilters:
|
||||
# Discard any "cannot be found in cache" messages
|
||||
- code: YN0013
|
||||
level: discard
|
||||
|
||||
nodeLinker: node-modules
|
||||
|
||||
plugins:
|
||||
@@ -10,4 +15,4 @@ plugins:
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
|
||||
spec: "@yarnpkg/plugin-version"
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.1.1.cjs
|
||||
yarnPath: .yarn/releases/yarn-3.2.0.cjs
|
||||
|
||||
+573
@@ -1,5 +1,578 @@
|
||||
# CHANGELOG
|
||||
|
||||
## 12.4.2 Aug 23, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Fix `u8aTo{BigInt, Bn, Number}` for non-negative `i{8, 16, 32...}` inputs
|
||||
- Extend `u8aToBuffer` with `hasBuffer` check
|
||||
- Adjust util tests (extract input/output arrays)
|
||||
|
||||
|
||||
## 12.4.1 Aug 17, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Add support for Ledger `signRaw`, as exposed by lower-level
|
||||
- Update code to use `?.` shortcuts where appropriate
|
||||
- Adjust `u8aToBuffer` & `isBuffer` typings to not require `Buffer`
|
||||
- Use `stringify/import.meta.url` helpers in specs
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 12.3.2 Jun 12, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust `SubstrateNetwork` typing with `HexString` genesisHash
|
||||
- Re-export `Constructor<T>` type (deprecated, replaced with `Class<T>`)
|
||||
|
||||
|
||||
## 12.3.1 Jun 11, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Only allow padding characters in base64 strings
|
||||
- Expand typings for keyring meta with known keys
|
||||
- Adjust object index access for stricter tsconfig settings
|
||||
|
||||
|
||||
## 12.2.2 Jun 4, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Apply missing count assignment for `for (...)` loops
|
||||
- Remove unused `@types/*` dev dependencies
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 12.2.1 May 13, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Align `u8aToBigInt` tests with `u8aToBn`
|
||||
- Unroll loops on most-frequently used paths for `u8aToBigInt`
|
||||
- Add `module` to `package.json` export map (ESM-only)
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 12.1.2 May 1, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust typing for `isChildClass` & `Constructor` usage
|
||||
|
||||
|
||||
## 12.1.1 Apr 29, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Add shareable `identity` & `noop` functions
|
||||
- Flatten `Buffer | Uint8Array` types (as used) to base-only `Uint8Array`
|
||||
- Apply `readonly` specifiers to private class fields where applicable
|
||||
- Adjust compilation output for `__internal__` class fields
|
||||
- Remove unused types from `util`
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 12.0.1 Apr 22, 2023
|
||||
|
||||
Contributed:
|
||||
|
||||
- Add Cere genesisHash (Thanks to https://github.com/shamilkhan)
|
||||
|
||||
Changes:
|
||||
|
||||
- Swap secp256k1 functionality to `@noble/curves`
|
||||
- Swap ed25519 functionality to `@noble/curves`
|
||||
- Replace `tweetnacl` secretbox usage with slimmer local version
|
||||
- Adjust `isCodec` helper with closer API alignment
|
||||
- Initial steps to multi-language bip39 support
|
||||
- Use Node webcrypto for Node `getRandomValues` support
|
||||
- Upgrade dependencies to latest stable versions
|
||||
- Drop support for Node 14 (EOL 30 Apr 2023)
|
||||
|
||||
|
||||
## 11.1.3 Apr 1, 2023
|
||||
|
||||
Contributed:
|
||||
|
||||
- Add Bittensor genesisHash (Thanks to https://github.com/camfairchild)
|
||||
|
||||
Changes:
|
||||
|
||||
- Allow empty string as valid base32/base58/base64 decoder input
|
||||
- Add additional/missing `/*#__PURE__*/` annotations
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 11.1.2 Mar 25, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Expand error details for invalid publicKeys in secp256k1 compress/expand operations
|
||||
- Expand `@polkadot/hw-ledger` with specific per-method JSDoc
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 11.1.1 Mar 18, 2023
|
||||
|
||||
Contributed:
|
||||
|
||||
- Add 3DPass genesisHash (Thanks to https://github.com/fedosov)
|
||||
|
||||
Changes:
|
||||
|
||||
- Remove support for encrypt/decrypt functionality on keypair
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 11.0.2 Mar 11, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Use consistent `.js` imports in source files (TS moduleResolution)
|
||||
- Remove TS resolveJsonModule option
|
||||
- Upgrade to `@polkadot/wasm-crypto` 7.0.3
|
||||
|
||||
|
||||
## 11.0.1 Mar 4, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Change `@polkadot/x-ws` to use [ws](https://www.npmjs.com/package/ws) package (previous: `websocket`)
|
||||
- Add `/*#__PURE__*/` annotations for `@polkadot/x-*` packages
|
||||
- Swap TS -> JS compiler to use tsc (from babel)
|
||||
- Adjust all tests to use `node:test` runner (ESM variants)
|
||||
- Move `cryptoWaitReady()` top-level in test files
|
||||
- Upgrade to `@polkadot/wasm-crypto` 7.0.1
|
||||
|
||||
|
||||
## 10.4.2 Feb 19, 2023
|
||||
|
||||
Contributed:
|
||||
|
||||
- Ledger support for Pendulum (Thanks to https://github.com/carlosala)
|
||||
|
||||
Changes:
|
||||
|
||||
- Ensure `u8aToU8a` correctly unwraps Buffer value (check ordering)
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.4.1 Feb 12, 2023
|
||||
|
||||
Contributed:
|
||||
|
||||
- Locale support for number formatting (Thanks to https://github.com/alko89)
|
||||
- Ledger support for Picasso (Thanks to https://github.com/carlosala)
|
||||
|
||||
Changes:
|
||||
|
||||
- Add `isClass` helper (checks if input is actual Class Constructor)
|
||||
- Adjust `isChildClass` to rely on new `isClass`
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.3.1 Jan 28, 2023
|
||||
|
||||
Contributed:
|
||||
|
||||
- Ledger support for Ternoa (Thanks to https://github.com/mohsinriaz17)
|
||||
|
||||
Changes:
|
||||
|
||||
- Expand `arrayChunk` tests
|
||||
- Adjust output for Ledger sanity checks
|
||||
- Expand exported `bigint` constants to match with those in `BN`
|
||||
- Adjust internal character maps to operate on `Uint8Array` instad of `Array<number>`
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.2.6 Jan 13, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Drop stray `console.error` log (it really _is_ Friday 13th)
|
||||
|
||||
|
||||
## 10.2.5 Jan 13, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Bugfix for `formatBalance` (forceUnit) with `BN` inputs where output is less than 0
|
||||
|
||||
|
||||
## 10.2.4 Jan 13, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Add the `withAll` (default false) flag to `formatBalance` to format to max decimals
|
||||
- Add the `withZero` (default true) flags to `formatBalance` to retain trailing zeros
|
||||
|
||||
|
||||
## 10.2.3 Jan 7, 2023
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust `isBuffer` check on `xglobal` (no auto-polyfill detection on eg. parcel)
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.2.2 Jan 6, 2023
|
||||
|
||||
Contributed:
|
||||
|
||||
- Adjust Nodle Ledger mapping (Thanks to https://github.com/aliXsed)
|
||||
|
||||
Changes:
|
||||
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.2.1 Dec 4, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Ledger support for Ajuna (Thanks to https://github.com/carlosala)
|
||||
|
||||
Changes:
|
||||
|
||||
- `has{Buffer, Process}` now checks on `globalThis` (helps bundlers with auto-injection)
|
||||
- Add `/*#__PURE__*/` annotations for specific `export const something = someFunction(...)`
|
||||
- Upgrade dependencies to latest stable versions
|
||||
- Upgrade to `@polkadot/wasm-crypto` 6.4.1
|
||||
|
||||
|
||||
## 10.1.14 Nov 27, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.13 Nov 20, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Ledger support for Origintrail (Thanks to https://github.com/carlosala)
|
||||
|
||||
Changes:
|
||||
|
||||
- Expand type descriptions around Ledger-based structures
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.12 Nov 13, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.11 Oct 15, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.10 Oct 7, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Ensure `{bn, n, number}ToHex(0)` always respects `bitLength`
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.9 Sep 24, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Ledger support for VTB (Thanks to https://github.com/GuilaneDen)
|
||||
|
||||
Changes:
|
||||
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.8 Sep 17, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Ledger support for Darwinia, Phala & Khala (Thanks to https://github.com/carlosala)
|
||||
- Ledger support for HydraX (Thanks to https://github.com/chcmedeiros)
|
||||
|
||||
Changes:
|
||||
|
||||
- Expand test cases
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.7 Sep 2, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Hoist Ledger interface wrapError (internal adjustment)
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.6 Aug 23, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust `nextTick` with greater care for browser loops
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.5 Aug 21, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust `ledgerApps` to use new `@zondax/ledger-substrate` interfaces
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.4 Aug 12, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Ledger support for Kusama Bifrost (Thanks to https://github.com/awesomepan)
|
||||
|
||||
Changes:
|
||||
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.3 Aug 5, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Optimization for empty `arrayFlatten` case
|
||||
- Coding cleanups for logger (no `as` casting)
|
||||
- Optiomizations in assertion checks
|
||||
|
||||
|
||||
## 10.1.2 Jul 29, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.1.1 Jul 21, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Add `arrayUnzip` as reverse of `arrayZip`
|
||||
- Adjust `objectSpread` to natively handle `Map` entries spreads
|
||||
- Adjust `isAscii` check to disallow `\t`, `\n`, & `\r` characters
|
||||
- Adjust `nobody` zero-key pair with pre-computed address
|
||||
- Align `objectProperty` & `lazyMethod` call signatures (backwards compatible)
|
||||
- Various internal speed optimizations
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 10.0.2 Jul 10, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust async import in `x-fetch` to be Jest-friendly
|
||||
|
||||
|
||||
## 10.0.1 Jul 8, 2022
|
||||
|
||||
- **Breaking change** In this major version version previously deprecated function signatures have been removed. If still using the old forms for either `bnToHex`, `bnToU8a`, `formatBalance`, `hexToBn` or `u8aToBn`, please update and only pass through an options object as the second parameter.
|
||||
|
||||
Contributed:
|
||||
|
||||
- Ledger support for Stafi (Thanks to https://github.com/kaelnew)
|
||||
- Ledger support for Aleph Zero (Thanks to https://github.com/carlosala)
|
||||
- Add genesis for HydraDX parachain (Thanks to https://github.com/jak-pan)
|
||||
|
||||
Changes:
|
||||
|
||||
- Remove deprecated signatures for `bnToHex`, `bnToU8a`, `formatBalance`, `hexToBn`, `u8aToBn`
|
||||
- Align option handling of `n*` (BigInt) functions with `bn*` (BN)
|
||||
- Allow for usage without `@types/node` installed
|
||||
- Adjust for available ESM-only dependencies
|
||||
- Upgrade dependencies to latest stable versions
|
||||
- Upgrade to `@polkadot/wasm-crypto` 6.2.3
|
||||
|
||||
|
||||
## 9.7.2 Jul 4, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Upgrade to `@polkadot/wasm-crypto` 6.2.2
|
||||
|
||||
|
||||
## 9.7.1 Jul 1, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Update signatures where `readonly` arrays are used
|
||||
- Upgrade dependencies to latest stable versions
|
||||
- Upgrade to `@polkadot/wasm-crypto` 6.2.1
|
||||
|
||||
|
||||
## 9.6.2 Jun 25, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Fix `hexToU8a` where `0x` is not correctly converted
|
||||
|
||||
|
||||
## 9.6.1 Jun 23, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Add `floatToU8a` and `u8aToFloat` (both 32 & 64-bit, le & be)
|
||||
- Adjust `isUndefined` check (local variable available)
|
||||
- Adjust use of `assert`, `isUndefined` & `isNull`
|
||||
|
||||
|
||||
## 9.5.1 Jun 18, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Update Bifrost genesisHash (Thanks to https://github.com/awesomepan)
|
||||
- Add Ledger support for Composable (Thanks to https://github.com/carlosala)
|
||||
|
||||
Changes:
|
||||
|
||||
- Add `u8aToNumber` (limited, <= 48 bits) function
|
||||
- Use `~~` as bitwise/faster `Math.floor` replacement
|
||||
- Remove unneeded `objectSpread` option expansions
|
||||
- Optimize `hexToU8a` operations
|
||||
- Optimize `stringCamelCase` operations
|
||||
- Optimize `u8aToBn` operations
|
||||
- Additional internal/external comments (as missing)
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 9.4.1 Jun 4, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Add `nextTick` to `@polkadot/util` to defer execution to the queue
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 9.3.1 May 29, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Add Ledger support for Parallel (Thanks to https://github.com/carlosala)
|
||||
- Add Ledger support for Astar & Polkadex (Thanks to https://github.com/carlosala)
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust `u8aToU8a` checks with better `isU8a` shortcut
|
||||
- Adjust compact conversion with unrolled loops
|
||||
- Adjust `string{Camel, Pascal}Case` with loop (no map)
|
||||
- Add `compactFromU8aLim` variant with Uint8Array-only inputs
|
||||
- Add `u8aConcatStrict` variant with Uint8Array-only inputs
|
||||
- Internal code maintainability enhancements
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 9.2.1 May 13, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Add Ledger support for Acala (Thanks to https://github.com/ntduan)
|
||||
|
||||
Changes:
|
||||
|
||||
- Optimize `u8aToHex` with direct (non-hex) conversion
|
||||
- Change all occurences of `.substr(...)` to `.substring(...)`
|
||||
- Sync with upstream Substrate ss58 registry
|
||||
- Mark deprecated function signatures (no removals)
|
||||
- Re-enable auto init of `cryptoWaitReady()`
|
||||
- Upgrade to `@polkadot/wasm-crypto` 6.1.1
|
||||
|
||||
|
||||
## 9.1.1 Apr 30, 2022
|
||||
|
||||
Contributed:
|
||||
|
||||
- Add Ledger support for Statemint (Thanks to https://github.com/carlosala)
|
||||
- Add Ledger support for xxnetwork (Thanks to https://github.com/xx-labs)
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust/dedupe output from `detectPackage`
|
||||
- Adjust `isHex` performance test
|
||||
- Add field-level comments to some `*Options` structures
|
||||
- Add new Rococo genesisHash (reset)
|
||||
|
||||
|
||||
## 9.0.1 Apr 9, 2022
|
||||
|
||||
- **Breaking change** In this major version the commonjs outputs are moved to a sub-folder. Since the export map and main field in package.json does reflect this change, there should be no usage changes. However the packages here will all need to be on the same version for internal linkage.
|
||||
|
||||
Changes:
|
||||
|
||||
- Be explicit in `@polkadot/util-crypto` re-exports from `@polkadot/networks`
|
||||
- Output commonjs files under the `cjs/**` root
|
||||
- Upgrade to `@polkadot/wasm-crypto` 6.0.1
|
||||
|
||||
|
||||
## 8.7.1 Mar 27, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Fix race-condition with wasm overrides, make `cryptoWaitReady` lazy
|
||||
- Additional tests for `BN` & `BigInt` negative conversions
|
||||
- Upgrade to `@polkadot/wasm-crypto` 5.1.1
|
||||
|
||||
|
||||
## 8.6.1 Mar 19, 2022
|
||||
|
||||
**Important** This contains an upgraded version of `@polkadot/wasm-crypto`. For users of asm.js, e.g. React Native, there are some additional upgrade instructions in the release notes for this version https://github.com/polkadot-js/wasm/releases/tag/v5.0.1
|
||||
|
||||
Contributed:
|
||||
|
||||
- Add aditional Dock mainnet genesis (Thanks to https://github.com/lovesh)
|
||||
- Add Westend genesis (Thanks to https://github.com/Nick-1979)
|
||||
- Update README with ss58 links (Thanks to https://github.com/Nick-197)
|
||||
|
||||
Changes:
|
||||
|
||||
- Ensure invalid secp256k1 publicKeys are not returned
|
||||
- Cater for Expo v41+ in RN random value generation
|
||||
- Fixed for RN environment imports
|
||||
- Internal split of details in `@polkadot/networks`
|
||||
- Additional workaround for Vite bundling
|
||||
- Upgrade to `@polkadot/wasm-crypto` 5.0.1
|
||||
|
||||
|
||||
## 8.5.1 Mar 12, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Adjust for bundlers where `import.meta.url` is undefined
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 8.4.1 Feb 14, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Use upstream `@substrate/ss58-registry` (instead of duplicating here)
|
||||
- Swap `micro-base` to `@scure/base` (same package, audited)
|
||||
- Bump `bn.js` library to latest 5.2.0 (has impact on e.g. API)
|
||||
- Upgrade dependencies to latest stable versions
|
||||
|
||||
|
||||
## 8.3.3 Jan 23, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
- Sync with upstream Substrate ss58 registry
|
||||
|
||||
|
||||
## 8.3.2 Jan 15, 2022
|
||||
|
||||
Changes:
|
||||
|
||||
+18
-4
@@ -1,45 +1,59 @@
|
||||
1241 Jaco 8.3.2 (#1382)
|
||||
1648 Jaco 12.4.2 (#1872)
|
||||
13 Carlo Sala feat(networks): add zeitgeist Ledger support (#1840)
|
||||
9 Antoine Estienne Add eth uri keyring test (#1291)
|
||||
6 Amaury Martiny Add tests from Rust (#283)
|
||||
5 Jakub Pánik Add HydraDX parachain to genesis (#1583)
|
||||
5 kwingram25 Add BN consts and timeToString (#610)
|
||||
4 Adam Dossa Update Polymesh Genesis Hash (#1193)
|
||||
3 Jakub Pánik HydraDX Snakenet Gen3-1 (#977)
|
||||
4 pan add bifrost kusama (#1626)
|
||||
3 Luke Schoen docs: Fix example in readme since we use default imports (#243)
|
||||
2 AndreasGassmann feat(dependencies): remove moment.js (#530)
|
||||
2 Gav Wood Fix stake:unstake (#182)
|
||||
2 Hyungsuk Kang Add cross client Encryption/Decryption (#496)
|
||||
2 Jared Norris Add Sora network (#1306)
|
||||
2 Kami Adding Westend genesis. (#1429)
|
||||
2 Lovesh Harchandani Update genesis hash of Dock mainnet (#1436)
|
||||
2 Nantian fix bigint type (#1079)
|
||||
2 pan add bifrost (#1296)
|
||||
2 Stefanie Doll Add missing dependencies to util-crypto (#424)
|
||||
1 Agustinus Theodorus docs: fix typo in naclSeal docs. (#1005)
|
||||
1 Aleš Ferlan feat: allow setting of thousand/decimal separators (#1722)
|
||||
1 Alex Sedighi fix Nodle's known network name (#1699)
|
||||
1 Alexander Krupenkin Added ECDSA keypair support (#589)
|
||||
1 alexdniep added equilibrium slip44; added equilibrium genesis hash (#984)
|
||||
1 amphineko chore: fix typo in versionDetect messages (#941)
|
||||
1 Axel Chalon Simplify @polkadot/keyring KeyringPair (#419)
|
||||
1 Brad Larson [FIX] Adjust error message (#646)
|
||||
1 Cameron Fairchild Add bittensor details (#1783)
|
||||
1 Carlos Medeiros add hydradx to knownLedger (#1647)
|
||||
1 Eliott Teissonniere add nodle ledger specs (#1089)
|
||||
1 Guilane DENGUIR feat(VTB): Added support for VTB blockchain (#1651)
|
||||
1 h4x3rotab Throws an error when signing with a locked keypair (#578)
|
||||
1 Harry Liu Update README.md (#446)
|
||||
1 Hoon Kim replace plasm genesis with astar (#1397)
|
||||
1 Hussein Ait-Lahcen Add Picasso Genesis Hash (#1261)
|
||||
1 Igor Support genshiro network (#1148)
|
||||
1 Jake Naviasky Add evmToAddress and addressToEvm crypto utils. (#705)
|
||||
1 JesseAbram added check if valid address to docs (#440)
|
||||
1 joe petrowski Add example for multisig address creation (#590)
|
||||
1 kaelnew add ledger support for stafi (#1569)
|
||||
1 Lezek123 logger - wildcard include/exclude with DEBUG env (#932)
|
||||
1 Lovesh Harchandani Add Dock network id for address generation (#640)
|
||||
1 Mario Neises remove redudant export (#257)
|
||||
1 Miguel Hervas Add CFG Ledger Support (#1057)
|
||||
1 Mikhail Fedosov feat: add 3dpass network (#1769)
|
||||
1 Mohsan Riaz Add Ternoa for ledger hardware support (#1711)
|
||||
1 nahuseyoum Reserving 65 for Aventus based on the new extended range (#871)
|
||||
1 Nantian add acala ledger config (#1485)
|
||||
1 qwer951123 Add acala genesis (#1161)
|
||||
1 Raoul Millais Fix yarn add instructions in x-global README (#873)
|
||||
1 Raymond Zhong Add Edgeware ledger app (#1006)
|
||||
1 Reto Trinkler Adding 4 as address type of ss58 for Katal Chain (#639)
|
||||
1 Rocco Musolino remove doc broken link (#697)
|
||||
1 Shamilkhan Add genesis hash for Cere Network (#1806)
|
||||
1 Song Zhou Add in ability to encrypt/decrypt msg with keyring (#1070)
|
||||
1 Thibaut Sardan add hasLedgerSupport prop to networks (#835)
|
||||
1 Tomokazu Kozuma fix comment (#1119)
|
||||
1 Tore19 Add stafi genesis hash (#1096)
|
||||
1 Wei Tang ss58: add Kulupu prefix to the list (#595)
|
||||
1 WoeOm Handing high precision scenes (#450)
|
||||
1 xx network Add xxnetwork genesis hash and ledger app (#1463)
|
||||
1 Yuri Extra check for process for browser bundles (#923)
|
||||
@@ -1,10 +1,3 @@
|
||||
[](https://polkadot.js.org)
|
||||

|
||||
[](https://www.npmjs.com/package/@polkadot/util)
|
||||
[](https://www.npmjs.com/package/@polkadot/util)
|
||||
[](https://codeclimate.com/github/polkadot-js/common)
|
||||
[](https://codeclimate.com/github/polkadot-js/common)
|
||||
|
||||
# @polkadot/common
|
||||
|
||||
Various useful utility functions that are used across all projects in the [@polkadot](https://polkadot.js.org) namespace. It provides utility functions with additional safety checks, allowing not only for consistent coding, but also reducing the general boilerplate.
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
// Copyright 2017-2022 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
module.exports = require('@polkadot/dev/config/babel-config-cjs.cjs');
|
||||
@@ -0,0 +1,8 @@
|
||||
// Copyright 2017-2023 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import baseConfig from '@polkadot/dev/config/eslint';
|
||||
|
||||
export default [
|
||||
...baseConfig
|
||||
];
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"imports": {
|
||||
"https://esm.sh/v90/@types/bn.js@~5.2/index.d.ts": "https://esm.sh/v90/@types/bn.js@5.1.0/index.d.ts"
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
// Copyright 2017-2022 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
const config = require('@polkadot/dev/config/jest.cjs');
|
||||
|
||||
module.exports = Object.assign({}, config, {
|
||||
moduleNameMapper: {
|
||||
'@polkadot/hw-ledger-transports(.*)$': '<rootDir>/packages/hw-ledger-transports/src/node',
|
||||
// eslint-disable-next-line sort-keys
|
||||
'@polkadot/hw-ledger(.*)$': '<rootDir>/packages/hw-ledger/src/$1',
|
||||
'@polkadot/keyring(.*)$': '<rootDir>/packages/keyring/src/$1',
|
||||
'@polkadot/networks(.*)$': '<rootDir>/packages/networks/src/$1',
|
||||
'@polkadot/util-(crypto)(.*)$': '<rootDir>/packages/util-$1/src/$2',
|
||||
// eslint-disable-next-line sort-keys
|
||||
'@polkadot/util(.*)$': '<rootDir>/packages/util/src/$1',
|
||||
'@polkadot/x-(bigint|global)(.*)$': '<rootDir>/packages/x-$1/src/$2',
|
||||
'@polkadot/x-(fetch|randomvalues|textdecoder|textencoder|ws)(.*)$': '<rootDir>/packages/x-$1/src/node'
|
||||
}
|
||||
});
|
||||
+20
-12
@@ -1,38 +1,46 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"engines": {
|
||||
"node": ">=18.14"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/common#readme",
|
||||
"license": "Apache-2",
|
||||
"packageManager": "yarn@3.0.1",
|
||||
"license": "Apache-2.0",
|
||||
"packageManager": "yarn@3.2.0",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/polkadot-js/common.git"
|
||||
},
|
||||
"sideEffects": false,
|
||||
"version": "8.3.2",
|
||||
"type": "module",
|
||||
"version": "12.4.2",
|
||||
"versions": {
|
||||
"git": "12.4.2",
|
||||
"npm": "12.4.2"
|
||||
},
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "polkadot-dev-build-ts",
|
||||
"build:networks": "polkadot-dev-run-test packages/networks/src",
|
||||
"build:release": "polkadot-ci-ghact-build",
|
||||
"build:rollup": "polkadot-exec-rollup --config",
|
||||
"clean": "polkadot-dev-clean-build",
|
||||
"deno": "yarn polkadot-dev-deno-map && yarn build && deno check --import-map=import_map.json mod.ts",
|
||||
"lint": "polkadot-dev-run-lint",
|
||||
"networks:crosscheck": "polkadot-dev-run-test packages/networks/src/crosscheck",
|
||||
"networks:sync": "yarn build && node packages/networks/scripts/fromSubstrate.mjs",
|
||||
"postinstall": "polkadot-dev-yarn-only",
|
||||
"test": "polkadot-dev-run-test --coverage --runInBand --testPathIgnorePatterns crosscheck --testPathIgnorePatterns toMiniSecretCmp",
|
||||
"test:mnemonicCmp": "polkadot-dev-run-test packages/util-crypto/src/mnemonic/toMiniSecretCmp.spec.ts",
|
||||
"test:one": "polkadot-dev-run-test --runInBand"
|
||||
"test": "polkadot-dev-run-test --env browser ^mnemonic/toMiniSecretCmp",
|
||||
"test:mnemonicCmp": "polkadot-dev-run-test --env browser mnemonic/toMiniSecretCmp",
|
||||
"test:node": "polkadot-dev-run-test --env browser ^mnemonic/toMiniSecretCmp",
|
||||
"test:one": "polkadot-dev-run-test --env browser"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.16.7",
|
||||
"@polkadot/dev": "^0.65.37",
|
||||
"@types/jest": "^27.4.0"
|
||||
"@polkadot/dev": "^0.76.18",
|
||||
"@types/node": "^20.5.3"
|
||||
},
|
||||
"resolutions": {
|
||||
"typescript": "^4.5.3"
|
||||
"typescript": "^5.1.6"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,201 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
@@ -1,13 +1,11 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"contributors": [],
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
"node": ">=16"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/hw-ledger-transports#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/hw-ledger-transports",
|
||||
"repository": {
|
||||
"directory": "packages/hw-ledger-transports",
|
||||
@@ -16,18 +14,18 @@
|
||||
},
|
||||
"sideEffects": false,
|
||||
"type": "module",
|
||||
"version": "8.3.2",
|
||||
"version": "12.4.2",
|
||||
"browser": "browser.js",
|
||||
"main": "node.js",
|
||||
"react-native": "react-native.js",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.16.7",
|
||||
"@ledgerhq/hw-transport": "^6.20.0",
|
||||
"@ledgerhq/hw-transport-webhid": "^6.20.0",
|
||||
"@ledgerhq/hw-transport-webusb": "^6.20.0",
|
||||
"@polkadot/util": "8.3.2"
|
||||
"@ledgerhq/hw-transport": "^6.28.8",
|
||||
"@ledgerhq/hw-transport-webhid": "^6.27.19",
|
||||
"@ledgerhq/hw-transport-webusb": "^6.27.19",
|
||||
"@polkadot/util": "12.4.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@ledgerhq/hw-transport-node-hid-singleton": "^6.23.0"
|
||||
"@ledgerhq/hw-transport-node-hid-singleton": "^6.28.18"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,11 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type Transport from '@ledgerhq/hw-transport';
|
||||
import type { TransportDef } from './types';
|
||||
import LedgerHid from '@ledgerhq/hw-transport-webhid';
|
||||
import LedgerUsb from '@ledgerhq/hw-transport-webusb';
|
||||
|
||||
import LedgerWebHid from '@ledgerhq/hw-transport-webhid';
|
||||
import LedgerWebUsb from '@ledgerhq/hw-transport-webusb';
|
||||
import { createDefs } from './util.js';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
export const transports: TransportDef[] = [
|
||||
{
|
||||
create: (): Promise<Transport> =>
|
||||
LedgerWebUsb.create(),
|
||||
type: 'webusb'
|
||||
},
|
||||
{
|
||||
create: (): Promise<Transport> =>
|
||||
LedgerWebHid.create(),
|
||||
type: 'hid'
|
||||
}
|
||||
];
|
||||
export const transports = /*#__PURE__*/ createDefs(['webusb', LedgerUsb], ['hid', LedgerHid]);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export default [];
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger-transports authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger-transports authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { createDefs } from './util.js';
|
||||
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
export const transports = /*#__PURE__*/ createDefs();
|
||||
@@ -0,0 +1,4 @@
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export * from './empty.js';
|
||||
@@ -1,17 +1,10 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type Transport from '@ledgerhq/hw-transport';
|
||||
import type { TransportDef } from './types';
|
||||
|
||||
import LedgerHid from '@ledgerhq/hw-transport-node-hid-singleton';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
import { createDefs } from './util.js';
|
||||
|
||||
export const transports: TransportDef[] = [
|
||||
{
|
||||
create: (): Promise<Transport> =>
|
||||
LedgerHid.create(),
|
||||
type: 'hid'
|
||||
}
|
||||
];
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
export const transports = /*#__PURE__*/ createDefs(['hid', LedgerHid]);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger-transports authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger-transports authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
export const packageInfo = { name: '@polkadot/hw-ledger-transports', path: 'auto', type: 'auto', version: '8.3.2' };
|
||||
export const packageInfo = { name: '@polkadot/hw-ledger-transports', path: 'auto', type: 'auto', version: '12.4.2' };
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { TransportDef } from './types';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const transports: TransportDef[] = [];
|
||||
export * from './empty.js';
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import Transport from '@ledgerhq/hw-transport';
|
||||
// CJS, so we use import * syntax
|
||||
import type * as HwTransport from '@ledgerhq/hw-transport';
|
||||
|
||||
export type LedgerTypes = 'hid' | 'u2f' | 'webusb';
|
||||
// u2f is deprecated an therefore not added
|
||||
export type TransportType = 'hid' | 'webusb';
|
||||
|
||||
export type Transport = HwTransport.default;
|
||||
|
||||
export interface TransportDef {
|
||||
/** Create a transport to be used in Ledger operations */
|
||||
create (): Promise<Transport>;
|
||||
type: LedgerTypes;
|
||||
/** The type of the underlying transport definition */
|
||||
type: TransportType;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Transport, TransportDef, TransportType } from './types.js';
|
||||
|
||||
export function createDefs (...items: readonly [type: TransportType, Clazz: unknown][]): TransportDef[] {
|
||||
return items.map(([type, Clazz]): TransportDef => ({
|
||||
create: (): Promise<Transport> =>
|
||||
(Clazz as Pick<TransportDef, 'create'>).create(),
|
||||
type
|
||||
}));
|
||||
}
|
||||
@@ -5,6 +5,9 @@
|
||||
"outDir": "./build",
|
||||
"rootDir": "./src"
|
||||
},
|
||||
"exclude": [
|
||||
"**/mod.ts"
|
||||
],
|
||||
"references": [
|
||||
{ "path": "../util/tsconfig.build.json" }
|
||||
]
|
||||
|
||||
@@ -1,201 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
@@ -1,13 +1,11 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"contributors": [],
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
"node": ">=16"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/hw-ledger#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/hw-ledger",
|
||||
"repository": {
|
||||
"directory": "packages/hw-ledger",
|
||||
@@ -19,13 +17,12 @@
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"type": "module",
|
||||
"version": "8.3.2",
|
||||
"version": "12.4.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.16.7",
|
||||
"@ledgerhq/hw-transport": "^6.20.0",
|
||||
"@polkadot/hw-ledger-transports": "8.3.2",
|
||||
"@polkadot/util": "8.3.2",
|
||||
"@zondax/ledger-substrate": "^0.24.0"
|
||||
"@polkadot/hw-ledger-transports": "12.4.2",
|
||||
"@polkadot/util": "12.4.2",
|
||||
"@zondax/ledger-substrate": "^0.41.1",
|
||||
"tslib": "^2.6.2"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,52 +1,95 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { ResponseBase, SubstrateApp } from '@zondax/ledger-substrate';
|
||||
import type { AccountOptions, LedgerAddress, LedgerSignature, LedgerTypes, LedgerVersion } from './types';
|
||||
import type { SubstrateApp } from '@zondax/ledger-substrate';
|
||||
import type { TransportDef, TransportType } from '@polkadot/hw-ledger-transports/types';
|
||||
import type { AccountOptions, LedgerAddress, LedgerSignature, LedgerVersion } from './types.js';
|
||||
|
||||
import { newSubstrateApp } from '@zondax/ledger-substrate';
|
||||
|
||||
import { transports } from '@polkadot/hw-ledger-transports';
|
||||
import { assert, u8aToBuffer } from '@polkadot/util';
|
||||
import { hexAddPrefix, u8aToBuffer, u8aWrapBytes } from '@polkadot/util';
|
||||
|
||||
import { LEDGER_DEFAULT_ACCOUNT, LEDGER_DEFAULT_CHANGE, LEDGER_DEFAULT_INDEX, LEDGER_SUCCESS_CODE } from './constants';
|
||||
import { ledgerApps } from './defaults';
|
||||
import { LEDGER_DEFAULT_ACCOUNT, LEDGER_DEFAULT_CHANGE, LEDGER_DEFAULT_INDEX, LEDGER_SUCCESS_CODE } from './constants.js';
|
||||
import { ledgerApps } from './defaults.js';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
|
||||
type Chain = keyof typeof ledgerApps;
|
||||
|
||||
// A very basic wrapper for a ledger app -
|
||||
// - it connects automatically, creating an app as required
|
||||
// - Promises return errors (instead of wrapper errors)
|
||||
export class Ledger {
|
||||
#app: SubstrateApp | null = null;
|
||||
type WrappedResult = Awaited<ReturnType<SubstrateApp['getAddress' | 'getVersion' | 'sign']>>;
|
||||
|
||||
#chain: Chain;
|
||||
/** @internal Wraps a SubstrateApp call, checking the result for any errors which result in a rejection */
|
||||
async function wrapError <T extends WrappedResult> (promise: Promise<T>): Promise<T> {
|
||||
const result = await promise;
|
||||
|
||||
#transport: LedgerTypes;
|
||||
|
||||
constructor (transport: LedgerTypes, chain: Chain) {
|
||||
// u2f is deprecated
|
||||
assert(['hid', 'webusb'].includes(transport), () => `Unsupported transport ${transport}`);
|
||||
assert(Object.keys(ledgerApps).includes(chain), () => `Unsupported chain ${chain}`);
|
||||
|
||||
this.#chain = chain;
|
||||
this.#transport = transport;
|
||||
if (result.return_code !== LEDGER_SUCCESS_CODE) {
|
||||
throw new Error(result.error_message);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/** @internal Wraps a sign/signRaw call and returns the associated signature */
|
||||
function sign (method: 'sign' | 'signRaw', message: Uint8Array, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): (app: SubstrateApp) => Promise<LedgerSignature> {
|
||||
return async (app: SubstrateApp): Promise<LedgerSignature> => {
|
||||
const { signature } = await wrapError(app[method](account + accountOffset, change, addressIndex + addressOffset, u8aToBuffer(message)));
|
||||
|
||||
return {
|
||||
signature: hexAddPrefix(signature.toString('hex'))
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @name Ledger
|
||||
*
|
||||
* @description
|
||||
* A very basic wrapper for a ledger app -
|
||||
* - it connects automatically on use, creating an underlying interface as required
|
||||
* - Promises reject with errors (unwrapped errors from @zondax/ledger-substrate)
|
||||
*/
|
||||
export class Ledger {
|
||||
readonly #ledgerName: string;
|
||||
readonly #transportDef: TransportDef;
|
||||
|
||||
#app: SubstrateApp | null = null;
|
||||
|
||||
constructor (transport: TransportType, chain: Chain) {
|
||||
const ledgerName = ledgerApps[chain];
|
||||
const transportDef = transports.find(({ type }) => type === transport);
|
||||
|
||||
if (!ledgerName) {
|
||||
throw new Error(`Unsupported Ledger chain ${chain}`);
|
||||
} else if (!transportDef) {
|
||||
throw new Error(`Unsupported Ledger transport ${transport}`);
|
||||
}
|
||||
|
||||
this.#ledgerName = ledgerName;
|
||||
this.#transportDef = transportDef;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the address associated with a specific account & address offset. Optionally
|
||||
* asks for on-device confirmation
|
||||
*/
|
||||
public async getAddress (confirm = false, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerAddress> {
|
||||
return this.#withApp(async (app: SubstrateApp): Promise<LedgerAddress> => {
|
||||
const { address, pubKey } = await this.#wrapError(app.getAddress(account + accountOffset, change, addressIndex + addressOffset, confirm));
|
||||
return this.withApp(async (app: SubstrateApp): Promise<LedgerAddress> => {
|
||||
const { address, pubKey } = await wrapError(app.getAddress(account + accountOffset, change, addressIndex + addressOffset, confirm));
|
||||
|
||||
return {
|
||||
address,
|
||||
publicKey: `0x${pubKey}`
|
||||
publicKey: hexAddPrefix(pubKey)
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the version of the Ledger application on the device
|
||||
*/
|
||||
public async getVersion (): Promise<LedgerVersion> {
|
||||
return this.#withApp(async (app: SubstrateApp): Promise<LedgerVersion> => {
|
||||
const { device_locked: isLocked, major, minor, patch, test_mode: isTestMode } = await this.#wrapError(app.getVersion());
|
||||
return this.withApp(async (app: SubstrateApp): Promise<LedgerVersion> => {
|
||||
const { device_locked: isLocked, major, minor, patch, test_mode: isTestMode } = await wrapError(app.getVersion());
|
||||
|
||||
return {
|
||||
isLocked,
|
||||
@@ -56,48 +99,39 @@ export class Ledger {
|
||||
});
|
||||
}
|
||||
|
||||
public async sign (message: Uint8Array, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE }: Partial<AccountOptions> = {}): Promise<LedgerSignature> {
|
||||
return this.#withApp(async (app: SubstrateApp): Promise<LedgerSignature> => {
|
||||
const buffer = u8aToBuffer(message);
|
||||
const { signature } = await this.#wrapError(app.sign(account + accountOffset, change, addressIndex + addressOffset, buffer));
|
||||
|
||||
return {
|
||||
signature: `0x${signature.toString('hex')}`
|
||||
};
|
||||
});
|
||||
/**
|
||||
* Signs a transaction on the Ledger device
|
||||
*/
|
||||
public async sign (message: Uint8Array, accountOffset?: number, addressOffset?: number, options?: Partial<AccountOptions>): Promise<LedgerSignature> {
|
||||
return this.withApp(sign('sign', message, accountOffset, addressOffset, options));
|
||||
}
|
||||
|
||||
#getApp = async (): Promise<SubstrateApp> => {
|
||||
if (!this.#app) {
|
||||
const def = transports.find(({ type }) => type === this.#transport);
|
||||
/**
|
||||
* Signs a message (non-transactional) on the Ledger device
|
||||
*/
|
||||
public async signRaw (message: Uint8Array, accountOffset?: number, addressOffset?: number, options?: Partial<AccountOptions>): Promise<LedgerSignature> {
|
||||
return this.withApp(sign('signRaw', u8aWrapBytes(message), accountOffset, addressOffset, options));
|
||||
}
|
||||
|
||||
assert(def, () => `Unable to find a transport for ${this.#transport}`);
|
||||
|
||||
const transport = await def.create();
|
||||
|
||||
this.#app = ledgerApps[this.#chain](transport);
|
||||
}
|
||||
|
||||
return this.#app;
|
||||
};
|
||||
|
||||
#withApp = async <T> (fn: (app: SubstrateApp) => Promise<T>): Promise<T> => {
|
||||
/**
|
||||
* @internal
|
||||
*
|
||||
* Returns a created SubstrateApp to perform operations against. Generally
|
||||
* this is only used internally, to ensure consistent bahavior.
|
||||
*/
|
||||
async withApp <T> (fn: (app: SubstrateApp) => Promise<T>): Promise<T> {
|
||||
try {
|
||||
const app = await this.#getApp();
|
||||
if (!this.#app) {
|
||||
const transport = await this.#transportDef.create();
|
||||
|
||||
return await fn(app);
|
||||
this.#app = newSubstrateApp(transport, this.#ledgerName);
|
||||
}
|
||||
|
||||
return await fn(this.#app);
|
||||
} catch (error) {
|
||||
this.#app = null;
|
||||
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
#wrapError = async <T extends ResponseBase> (promise: Promise<T>): Promise<T> => {
|
||||
const result = await promise;
|
||||
|
||||
assert(result.return_code === LEDGER_SUCCESS_CODE, () => result.error_message);
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export const LEDGER_DEFAULT_ACCOUNT = 0x80000000;
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { supportedApps } from '@zondax/ledger-substrate';
|
||||
|
||||
import { ledgerApps } from './defaults.js';
|
||||
|
||||
describe('ledgerApps', (): void => {
|
||||
for (const k of Object.keys(ledgerApps)) {
|
||||
it(`${k} is available in @zondax/ledger-substrate`, (): void => {
|
||||
expect(
|
||||
supportedApps.find(({ name }) =>
|
||||
name === ledgerApps[k]
|
||||
)
|
||||
).toBeDefined();
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -1,23 +1,43 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type Transport from '@ledgerhq/hw-transport';
|
||||
import type { SubstrateApp } from '@zondax/ledger-substrate';
|
||||
|
||||
import { newBifrostApp, newCentrifugeApp, newDockApp, newEdgewareApp, newEquilibriumApp, newGenshiroApp, newKusamaApp, newNodleApp, newPolkadotApp, newPolymeshApp, newSoraApp, newStatemineApp } from '@zondax/ledger-substrate';
|
||||
|
||||
// These match up with the keys of the knownLedger object in the @polkadot/networks/defaults.ts
|
||||
export const ledgerApps: Record<string, (transport: Transport) => SubstrateApp> = {
|
||||
bifrost: newBifrostApp,
|
||||
centrifuge: newCentrifugeApp,
|
||||
'dock-mainnet': newDockApp,
|
||||
edgeware: newEdgewareApp,
|
||||
equilibrium: newEquilibriumApp,
|
||||
genshiro: newGenshiroApp,
|
||||
kusama: newKusamaApp,
|
||||
'nodle-chain': newNodleApp,
|
||||
polkadot: newPolkadotApp,
|
||||
polymesh: newPolymeshApp,
|
||||
sora: newSoraApp,
|
||||
statemine: newStatemineApp
|
||||
// These match up with the keys of the knownLedger object in the @polkadot/networks/defaults/ledger.ts
|
||||
// and maps to the known name in the @zondax/ledger-substrate/supported_apps package
|
||||
export const ledgerApps: Record<string, string> = {
|
||||
acala: 'Acala',
|
||||
ajuna: 'Ajuna',
|
||||
'aleph-node': 'AlephZero',
|
||||
astar: 'Astar',
|
||||
bifrost: 'Bifrost',
|
||||
'bifrost-kusama': 'BifrostKusama',
|
||||
centrifuge: 'Centrifuge',
|
||||
composable: 'Composable',
|
||||
darwinia: 'Darwinia',
|
||||
'dock-mainnet': 'Dock',
|
||||
edgeware: 'Edgeware',
|
||||
equilibrium: 'Equilibrium',
|
||||
genshiro: 'Genshiro',
|
||||
hydradx: 'HydraDX',
|
||||
'interlay-parachain': 'Interlay',
|
||||
karura: 'Karura',
|
||||
khala: 'Khala',
|
||||
kusama: 'Kusama',
|
||||
nodle: 'Nodle',
|
||||
origintrail: 'OriginTrail',
|
||||
parallel: 'Parallel',
|
||||
pendulum: 'Pendulum',
|
||||
phala: 'Phala',
|
||||
picasso: 'Picasso',
|
||||
polkadex: 'Polkadex',
|
||||
polkadot: 'Polkadot',
|
||||
polymesh: 'Polymesh',
|
||||
sora: 'Sora',
|
||||
stafi: 'Stafi',
|
||||
statemine: 'Statemine',
|
||||
statemint: 'Statemint',
|
||||
ternoa: 'Ternoa',
|
||||
unique: 'Unique',
|
||||
vtb: 'VTB',
|
||||
xxnetwork: 'XXNetwork',
|
||||
zeitgeist: 'Zeitgeist'
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { packageInfo as transportInfo } from '@polkadot/hw-ledger-transports/packageInfo';
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
import './detectPackage.js';
|
||||
|
||||
export * from './bundle';
|
||||
export * from './bundle.js';
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export * from './index.js';
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
export const packageInfo = { name: '@polkadot/hw-ledger', path: 'auto', type: 'auto', version: '8.3.2' };
|
||||
export const packageInfo = { name: '@polkadot/hw-ledger', path: 'auto', type: 'auto', version: '12.4.2' };
|
||||
|
||||
@@ -1,27 +1,34 @@
|
||||
// Copyright 2017-2022 @polkadot/hw-ledger authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { HexString } from '@polkadot/util/types';
|
||||
|
||||
export type LedgerTypes = 'hid' | 'u2f' | 'webusb';
|
||||
|
||||
export interface AccountOptions {
|
||||
/** The index of the account */
|
||||
account: number;
|
||||
/** The index of the address */
|
||||
addressIndex: number;
|
||||
/** The change to apply */
|
||||
change: number;
|
||||
}
|
||||
|
||||
export interface LedgerAddress {
|
||||
/** The ss58 encoded address */
|
||||
address: string;
|
||||
publicKey: string;
|
||||
/** The hex-encoded publicKey */
|
||||
publicKey: HexString;
|
||||
}
|
||||
|
||||
export interface LedgerSignature {
|
||||
/** A hex-encoded signature, as generated by the device */
|
||||
signature: HexString;
|
||||
}
|
||||
|
||||
export interface LedgerVersion {
|
||||
/** Indicator flag for locked status */
|
||||
isLocked: boolean;
|
||||
/** Indicator flag for testmode status */
|
||||
isTestMode: boolean;
|
||||
version: [number, number, number];
|
||||
/** The software version for this device */
|
||||
version: [major: number, minor: number, patch: number];
|
||||
}
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
"outDir": "./build",
|
||||
"rootDir": "./src"
|
||||
},
|
||||
"exclude": [
|
||||
"**/*.spec.ts",
|
||||
"**/mod.ts"
|
||||
],
|
||||
"references": [
|
||||
{ "path": "../hw-ledger-transports/tsconfig.build.json" },
|
||||
{ "path": "../util/tsconfig.build.json" }
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"baseUrl": "..",
|
||||
"outDir": "./build",
|
||||
"rootDir": "./src",
|
||||
"emitDeclarationOnly": false,
|
||||
"noEmit": true
|
||||
},
|
||||
"include": [
|
||||
"**/*.spec.ts"
|
||||
],
|
||||
"references": [
|
||||
{ "path": "../hw-ledger/tsconfig.build.json" }
|
||||
]
|
||||
}
|
||||
@@ -1,201 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
@@ -1,14 +1,12 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"contributors": [],
|
||||
"description": "Keyring management",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
"node": ">=16"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/keyring#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/keyring",
|
||||
"repository": {
|
||||
"directory": "packages/keyring",
|
||||
@@ -20,15 +18,15 @@
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"type": "module",
|
||||
"version": "8.3.2",
|
||||
"version": "12.4.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.16.7",
|
||||
"@polkadot/util": "8.3.2",
|
||||
"@polkadot/util-crypto": "8.3.2"
|
||||
"@polkadot/util": "12.4.2",
|
||||
"@polkadot/util-crypto": "12.4.2",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "8.3.2",
|
||||
"@polkadot/util-crypto": "8.3.2"
|
||||
"@polkadot/util": "12.4.2",
|
||||
"@polkadot/util-crypto": "12.4.2"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { Keyring } from './keyring';
|
||||
|
||||
// all external
|
||||
// eslint-disable-next-line deprecation/deprecation
|
||||
export { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
|
||||
|
||||
export * from './defaults';
|
||||
export { createPair } from './pair';
|
||||
export { packageInfo } from './packageInfo';
|
||||
export { createTestKeyring } from './testing';
|
||||
export { createTestPairs } from './testingPairs';
|
||||
// all named
|
||||
export { Keyring } from './keyring.js';
|
||||
export { packageInfo } from './packageInfo.js';
|
||||
export { createPair } from './pair/index.js';
|
||||
export { createTestKeyring } from './testing.js';
|
||||
export { createTestPairs } from './testingPairs.js';
|
||||
|
||||
export { Keyring };
|
||||
// all starred
|
||||
export * from './defaults.js';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// default substrate dev phrase
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { packageInfo as utilInfo } from '@polkadot/util/packageInfo';
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringPair$Json } from './types';
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import type { KeyringPair$Json } from './types.js';
|
||||
|
||||
import { hexToU8a, stringToU8a } from '@polkadot/util';
|
||||
import { base64Decode, cryptoWaitReady, encodeAddress, randomAsU8a, setSS58Format } from '@polkadot/util-crypto';
|
||||
|
||||
import { decodePair } from './pair/decode';
|
||||
import Keyring from '.';
|
||||
import { decodePair } from './pair/decode.js';
|
||||
import Keyring from './index.js';
|
||||
|
||||
await cryptoWaitReady();
|
||||
|
||||
describe('keypair', (): void => {
|
||||
beforeEach(async (): Promise<void> => {
|
||||
await cryptoWaitReady();
|
||||
});
|
||||
|
||||
describe('ed25519', (): void => {
|
||||
const publicKeyOne = new Uint8Array([47, 140, 97, 41, 216, 22, 207, 81, 195, 116, 188, 127, 8, 195, 230, 62, 209, 86, 207, 120, 174, 251, 74, 101, 80, 217, 123, 135, 153, 121, 119, 238]);
|
||||
const publicKeyTwo = new Uint8Array([215, 90, 152, 1, 130, 177, 10, 183, 213, 75, 254, 211, 201, 100, 7, 58, 14, 225, 114, 243, 218, 166, 35, 37, 175, 2, 26, 104, 247, 7, 81, 26]);
|
||||
@@ -48,6 +48,7 @@ describe('keypair', (): void => {
|
||||
});
|
||||
|
||||
it('adds from a mnemonic, with correct ss58', (): void => {
|
||||
// eslint-disable-next-line deprecation/deprecation
|
||||
setSS58Format(20); // this would not be used
|
||||
keyring.setSS58Format(2); // this would be used
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
import './detectPackage.js';
|
||||
|
||||
import { Keyring } from './bundle';
|
||||
import { Keyring } from './bundle.js';
|
||||
|
||||
export * from './bundle';
|
||||
export * from './bundle.js';
|
||||
|
||||
export default Keyring;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringInstance, KeyringOptions, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from './types';
|
||||
import type { KeyringInstance, KeyringOptions, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from './types.js';
|
||||
|
||||
import { assert, hexToU8a, isHex, isUndefined, stringToU8a } from '@polkadot/util';
|
||||
import { hexToU8a, isHex, stringToU8a } from '@polkadot/util';
|
||||
import { base64Decode, decodeAddress, ed25519PairFromSeed as ed25519FromSeed, encodeAddress, ethereumEncode, hdEthereum, keyExtractSuri, keyFromPath, mnemonicToLegacySeed, mnemonicToMiniSecret, secp256k1PairFromSeed as secp256k1FromSeed, sr25519PairFromSeed as sr25519FromSeed } from '@polkadot/util-crypto';
|
||||
|
||||
import { DEV_PHRASE } from './defaults';
|
||||
import { createPair } from './pair';
|
||||
import { Pairs } from './pairs';
|
||||
import { createPair } from './pair/index.js';
|
||||
import { DEV_PHRASE } from './defaults.js';
|
||||
import { Pairs } from './pairs.js';
|
||||
|
||||
const PairFromSeed = {
|
||||
ecdsa: (seed: Uint8Array): Keypair => secp256k1FromSeed(seed),
|
||||
@@ -43,14 +43,16 @@ export class Keyring implements KeyringInstance {
|
||||
|
||||
readonly #type: KeypairType;
|
||||
|
||||
#ss58?: number;
|
||||
#ss58?: number | undefined;
|
||||
|
||||
public decodeAddress = decodeAddress;
|
||||
|
||||
constructor (options: KeyringOptions = {}) {
|
||||
options.type = options.type || 'ed25519';
|
||||
|
||||
assert(['ecdsa', 'ethereum', 'ed25519', 'sr25519'].includes(options.type || 'undefined'), () => `Expected a keyring type of either 'ed25519', 'sr25519', 'ethereum' or 'ecdsa', found '${options.type || 'unknown'}`);
|
||||
if (!['ecdsa', 'ethereum', 'ed25519', 'sr25519'].includes(options.type || 'undefined')) {
|
||||
throw new Error(`Expected a keyring type of either 'ed25519', 'sr25519', 'ethereum' or 'ecdsa', found '${options.type || 'unknown'}`);
|
||||
}
|
||||
|
||||
this.#pairs = new Pairs();
|
||||
this.#ss58 = options.ss58Format;
|
||||
@@ -162,7 +164,9 @@ export class Keyring implements KeyringInstance {
|
||||
* @description Creates a pair from a JSON keyfile
|
||||
*/
|
||||
public createFromJson ({ address, encoded, encoding: { content, type, version }, meta }: KeyringPair$Json, ignoreChecksum?: boolean): KeyringPair {
|
||||
assert(version !== '3' || content[0] === 'pkcs8', () => `Unable to decode non-pkcs8 type, [${content.join(',')}] found}`);
|
||||
if (version === '3' && content[0] !== 'pkcs8') {
|
||||
throw new Error(`Unable to decode non-pkcs8 type, [${content.join(',')}] found}`);
|
||||
}
|
||||
|
||||
const cryptoType = version === '0' || !Array.isArray(content)
|
||||
? this.type
|
||||
@@ -171,7 +175,9 @@ export class Keyring implements KeyringInstance {
|
||||
? [type]
|
||||
: type;
|
||||
|
||||
assert(['ed25519', 'sr25519', 'ecdsa', 'ethereum'].includes(cryptoType), () => `Unknown crypto type ${cryptoType}`);
|
||||
if (!['ed25519', 'sr25519', 'ecdsa', 'ethereum'].includes(cryptoType)) {
|
||||
throw new Error(`Unknown crypto type ${cryptoType}`);
|
||||
}
|
||||
|
||||
// Here the address and publicKey are 32 bytes and isomorphic. This is why the address field needs to be the public key for ethereum type pairs
|
||||
const publicKey = isHex(address)
|
||||
@@ -216,7 +222,9 @@ export class Keyring implements KeyringInstance {
|
||||
? mnemonicToLegacySeed(phrase, '', false, 64)
|
||||
: mnemonicToMiniSecret(phrase, password);
|
||||
} else {
|
||||
assert(phrase.length <= 32, 'specified phrase is not a valid mnemonic and is invalid as a raw seed at > 32 bytes');
|
||||
if (phrase.length > 32) {
|
||||
throw new Error('specified phrase is not a valid mnemonic and is invalid as a raw seed at > 32 bytes');
|
||||
}
|
||||
|
||||
seed = stringToU8a(phrase.padEnd(32));
|
||||
}
|
||||
@@ -238,7 +246,7 @@ export class Keyring implements KeyringInstance {
|
||||
public encodeAddress = (address: Uint8Array | string, ss58Format?: number): string => {
|
||||
return this.type === 'ethereum'
|
||||
? ethereumEncode(address)
|
||||
: encodeAddress(address, isUndefined(ss58Format) ? this.#ss58 : ss58Format);
|
||||
: encodeAddress(address, ss58Format ?? this.#ss58);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export * from './index.js';
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
export const packageInfo = { name: '@polkadot/keyring', path: 'auto', type: 'auto', version: '8.3.2' };
|
||||
export const packageInfo = { name: '@polkadot/keyring', path: 'auto', type: 'auto', version: '12.4.2' };
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { createTestPairs } from '../testingPairs';
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { createTestPairs } from '../testingPairs.js';
|
||||
|
||||
const keyring = createTestPairs({ type: 'ed25519' }, false);
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJsonEncoding } from '@polkadot/util-crypto/types';
|
||||
import type { PairInfo } from './types';
|
||||
import type { PairInfo } from './types.js';
|
||||
|
||||
import { assert, isUndefined, u8aEq } from '@polkadot/util';
|
||||
import { u8aEq } from '@polkadot/util';
|
||||
import { jsonDecryptData } from '@polkadot/util-crypto';
|
||||
|
||||
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults';
|
||||
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults.js';
|
||||
|
||||
const SEED_OFFSET = PKCS8_HEADER.length;
|
||||
|
||||
@@ -16,13 +16,15 @@ type DecodeResult = PairInfo & {
|
||||
};
|
||||
|
||||
export function decodePair (passphrase?: string, encrypted?: Uint8Array | null, _encType?: EncryptedJsonEncoding | EncryptedJsonEncoding[]): DecodeResult {
|
||||
const encType = Array.isArray(_encType) || isUndefined(_encType)
|
||||
const encType = Array.isArray(_encType) || _encType === undefined
|
||||
? _encType
|
||||
: [_encType];
|
||||
const decrypted = jsonDecryptData(encrypted, passphrase, encType);
|
||||
const header = decrypted.subarray(0, PKCS8_HEADER.length);
|
||||
|
||||
assert(u8aEq(header, PKCS8_HEADER), 'Invalid Pkcs8 header found in body');
|
||||
if (!u8aEq(header, PKCS8_HEADER)) {
|
||||
throw new Error('Invalid Pkcs8 header found in body');
|
||||
}
|
||||
|
||||
let secretKey = decrypted.subarray(SEED_OFFSET, SEED_OFFSET + SEC_LENGTH);
|
||||
let divOffset = SEED_OFFSET + SEC_LENGTH;
|
||||
@@ -34,7 +36,9 @@ export function decodePair (passphrase?: string, encrypted?: Uint8Array | null,
|
||||
secretKey = decrypted.subarray(SEED_OFFSET, divOffset);
|
||||
divider = decrypted.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
|
||||
|
||||
assert(u8aEq(divider, PKCS8_DIVIDER), 'Invalid Pkcs8 divider found in body');
|
||||
if (!u8aEq(divider, PKCS8_DIVIDER)) {
|
||||
throw new Error('Invalid Pkcs8 divider found in body');
|
||||
}
|
||||
}
|
||||
|
||||
const pubOffset = divOffset + PKCS8_DIVIDER.length;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export const PKCS8_DIVIDER = new Uint8Array([161, 35, 3, 33, 0]);
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { NONCE_LENGTH, SCRYPT_LENGTH } from '@polkadot/util-crypto/json/constants';
|
||||
|
||||
import { createTestPairs } from '../testingPairs';
|
||||
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH } from './defaults';
|
||||
import { createTestPairs } from '../testingPairs.js';
|
||||
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH } from './defaults.js';
|
||||
|
||||
const PKCS8_LENGTH = PKCS8_DIVIDER.length + PKCS8_HEADER.length + PUB_LENGTH + SEC_LENGTH;
|
||||
const ENCODED_LENGTH = 16 + PKCS8_LENGTH + NONCE_LENGTH + SCRYPT_LENGTH;
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { PairInfo } from './types';
|
||||
import type { PairInfo } from './types.js';
|
||||
|
||||
import { assert, u8aConcat } from '@polkadot/util';
|
||||
import { u8aConcat } from '@polkadot/util';
|
||||
import { naclEncrypt, scryptEncode, scryptToU8a } from '@polkadot/util-crypto';
|
||||
|
||||
import { PKCS8_DIVIDER, PKCS8_HEADER } from './defaults';
|
||||
import { PKCS8_DIVIDER, PKCS8_HEADER } from './defaults.js';
|
||||
|
||||
export function encodePair ({ publicKey, secretKey }: PairInfo, passphrase?: string): Uint8Array {
|
||||
assert(secretKey, 'Expected a valid secretKey to be passed to encode');
|
||||
if (!secretKey) {
|
||||
throw new Error('Expected a valid secretKey to be passed to encode');
|
||||
}
|
||||
|
||||
const encoded = u8aConcat(
|
||||
PKCS8_HEADER,
|
||||
|
||||
@@ -1,27 +1,23 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { hexToU8a, u8aToHex } from '@polkadot/util';
|
||||
import { cryptoWaitReady, encodeAddress as toSS58, setSS58Format } from '@polkadot/util-crypto';
|
||||
|
||||
import { PAIRSSR25519 } from '../testing';
|
||||
import { createTestPairs } from '../testingPairs';
|
||||
import { createPair } from '.';
|
||||
import { PAIRSSR25519 } from '../testing.js';
|
||||
import { createTestPairs } from '../testingPairs.js';
|
||||
import { createPair } from './index.js';
|
||||
|
||||
const keyring = createTestPairs({ type: 'ed25519' }, false);
|
||||
|
||||
const TEST_ADDRESS = '0x4119b2e6c3Cb618F4f0B93ac77f9BeeC7FF02887';
|
||||
|
||||
await cryptoWaitReady();
|
||||
|
||||
describe('pair', (): void => {
|
||||
beforeEach(async (): Promise<void> => {
|
||||
await cryptoWaitReady();
|
||||
});
|
||||
|
||||
const SIGNATURE = new Uint8Array([80, 191, 198, 147, 225, 207, 75, 88, 126, 39, 129, 109, 191, 38, 72, 181, 75, 254, 81, 143, 244, 79, 237, 38, 236, 141, 28, 252, 134, 26, 169, 234, 79, 33, 153, 158, 151, 34, 175, 188, 235, 20, 35, 135, 83, 120, 139, 211, 233, 130, 1, 208, 201, 215, 73, 80, 56, 98, 185, 196, 11, 8, 193, 14]);
|
||||
const ENCRYPTED = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 59, 53, 85, 227, 40, 107, 48, 234, 198, 238, 157, 238, 224, 235, 179, 75, 153, 241, 142, 254]);
|
||||
|
||||
// the last byte is changed from 254 -> 253
|
||||
const ENCRYPTED_CHANGED = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 59, 53, 85, 227, 40, 107, 48, 234, 198, 238, 157, 238, 224, 235, 179, 75, 153, 241, 142, 253]);
|
||||
|
||||
it('has a publicKey', (): void => {
|
||||
expect(
|
||||
@@ -98,93 +94,6 @@ describe('pair', (): void => {
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it('allows encrypting', (): void => {
|
||||
const message = new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65]);
|
||||
|
||||
expect(
|
||||
keyring.alice.encryptMessage(
|
||||
message,
|
||||
keyring.bob.publicKey,
|
||||
new Uint8Array(24)
|
||||
)
|
||||
).toEqual(ENCRYPTED);
|
||||
});
|
||||
|
||||
it('validates a correctly encrypted message', (): void => {
|
||||
const message = new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65]);
|
||||
|
||||
expect(
|
||||
keyring.bob.decryptMessage(
|
||||
ENCRYPTED,
|
||||
keyring.alice.publicKey
|
||||
)
|
||||
).toEqual(message);
|
||||
});
|
||||
|
||||
it('fails a correctly encrypted message (message changed)', (): void => {
|
||||
expect(
|
||||
keyring.bob.decryptMessage(
|
||||
ENCRYPTED_CHANGED,
|
||||
keyring.alice.publicKey
|
||||
)
|
||||
).toEqual(null);
|
||||
});
|
||||
|
||||
it('fails a correctly encrypted message (sender changed)', (): void => {
|
||||
expect(
|
||||
keyring.bob.decryptMessage(
|
||||
ENCRYPTED,
|
||||
keyring.charlie.publicKey
|
||||
)
|
||||
).toEqual(null);
|
||||
});
|
||||
|
||||
it('fails a correctly encrypted message (receiver changed)', (): void => {
|
||||
expect(
|
||||
keyring.charlie.decryptMessage(
|
||||
ENCRYPTED,
|
||||
keyring.alice.publicKey
|
||||
)
|
||||
).toEqual(null);
|
||||
});
|
||||
|
||||
it('validates encryption between ed25519 & sr25519 key pairs', (): void => {
|
||||
const PASS = 'testing';
|
||||
const encodedA = keyring.alice.encodePkcs8(PASS);
|
||||
const encodedB = keyring.bob.encodePkcs8(PASS);
|
||||
|
||||
const pairA = createPair({ toSS58, type: 'sr25519' }, { publicKey: keyring.alice.publicKey });
|
||||
const pairB = createPair({ toSS58, type: 'sr25519' }, { publicKey: keyring.bob.publicKey });
|
||||
|
||||
pairA.decodePkcs8(PASS, encodedA);
|
||||
pairB.decodePkcs8(PASS, encodedB);
|
||||
const message = new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65]);
|
||||
|
||||
// alice-sr25519 -> bob-ed25519
|
||||
const encrypted1 = pairA.encryptMessage(message, keyring.bob.publicKey);
|
||||
|
||||
// alice-sr25519 -> bob-sr25519
|
||||
const encrypted2 = pairA.encryptMessage(message, pairB.publicKey);
|
||||
|
||||
// alice-ed25519 -> bob-sr25519
|
||||
const encrypted3 = keyring.alice.encryptMessage(message, pairB.publicKey);
|
||||
|
||||
// decrypt: Bob-ed25519 - use alice-ed25519 pubkey
|
||||
expect(
|
||||
keyring.bob.decryptMessage(encrypted3, keyring.alice.publicKey)
|
||||
).toEqual(message);
|
||||
|
||||
// decrypt: Bob-ed25519 - use alice-sr25519 pubkey
|
||||
expect(
|
||||
keyring.bob.decryptMessage(encrypted1, pairA.publicKey)
|
||||
).toEqual(message);
|
||||
|
||||
// decrypt: Bob-sr25519 - use alice-sr25519 pubkey
|
||||
expect(
|
||||
pairB.decryptMessage(encrypted2, pairA.publicKey)
|
||||
).toEqual(message);
|
||||
});
|
||||
|
||||
it('allows setting/getting of meta', (): void => {
|
||||
keyring.bob.setMeta({ foo: 'bar', something: 'else' });
|
||||
|
||||
@@ -198,10 +107,12 @@ describe('pair', (): void => {
|
||||
it('allows encoding of address with different prefixes', (): void => {
|
||||
expect(keyring.alice.address).toEqual('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua');
|
||||
|
||||
// eslint-disable-next-line deprecation/deprecation
|
||||
setSS58Format(255);
|
||||
|
||||
expect(keyring.alice.address).toEqual('yGHU8YKprxHbHdEv7oUK4rzMZXtsdhcXVG2CAMyC9WhzhjH2k');
|
||||
|
||||
// eslint-disable-next-line deprecation/deprecation
|
||||
setSS58Format(42);
|
||||
});
|
||||
|
||||
@@ -217,11 +128,11 @@ describe('pair', (): void => {
|
||||
});
|
||||
|
||||
it('allows derivation on the pair', (): void => {
|
||||
const alice = createPair({ toSS58, type: 'sr25519' }, { publicKey: PAIRSSR25519[0].publicKey, secretKey: PAIRSSR25519[0].secretKey }, {});
|
||||
const alice = createPair({ toSS58, type: 'sr25519' }, { publicKey: hexToU8a(PAIRSSR25519[0].p), secretKey: hexToU8a(PAIRSSR25519[0].s) }, {});
|
||||
const stash = alice.derive('//stash');
|
||||
const soft = alice.derive('//funding/0');
|
||||
|
||||
expect(stash.publicKey).toEqual(PAIRSSR25519[1].publicKey);
|
||||
expect(stash.publicKey).toEqual(hexToU8a(PAIRSSR25519[1].p));
|
||||
expect(soft.address).toEqual('5ECQNn7UueWHPFda5qUi4fTmTtyCnPvGnuoyVVSj5CboJh9J');
|
||||
});
|
||||
|
||||
@@ -274,22 +185,5 @@ describe('pair', (): void => {
|
||||
});
|
||||
expect(json.address).toEqual(u8aToHex(PUBLICDERIVED));
|
||||
});
|
||||
|
||||
it('denies access to encryptMessage/decryptMessage API', (): void => {
|
||||
const PASS = 'testing';
|
||||
const encoded = keyring.alice.encodePkcs8(PASS);
|
||||
|
||||
const pair = createPair({ toSS58, type: 'ethereum' }, { publicKey: keyring.alice.publicKey });
|
||||
|
||||
pair.decodePkcs8(PASS, encoded);
|
||||
|
||||
expect(
|
||||
() => pair.encryptMessage(
|
||||
new Uint8Array(4), // null message
|
||||
keyring.bob.publicKey,
|
||||
new Uint8Array(24)
|
||||
)
|
||||
).toThrow('Secp256k1 not supported yet');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { HexString } from '@polkadot/util/types';
|
||||
import type { EncryptedJsonEncoding, Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta, SignOptions } from '../types';
|
||||
import type { PairInfo } from './types';
|
||||
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta, SignOptions } from '../types.js';
|
||||
import type { PairInfo } from './types.js';
|
||||
|
||||
import { assert, objectSpread, u8aConcat, u8aEmpty, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
|
||||
import { blake2AsU8a, convertPublicKeyToCurve25519, convertSecretKeyToCurve25519, ed25519PairFromSeed as ed25519FromSeed, ed25519Sign, ethereumEncode, keccakAsU8a, keyExtractPath, keyFromPath, naclOpen, naclSeal, secp256k1Compress, secp256k1Expand, secp256k1PairFromSeed as secp256k1FromSeed, secp256k1Sign, signatureVerify, sr25519PairFromSeed as sr25519FromSeed, sr25519Sign, sr25519VrfSign, sr25519VrfVerify } from '@polkadot/util-crypto';
|
||||
import { objectSpread, u8aConcat, u8aEmpty, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
|
||||
import { blake2AsU8a, ed25519PairFromSeed as ed25519FromSeed, ed25519Sign, ethereumEncode, keccakAsU8a, keyExtractPath, keyFromPath, secp256k1Compress, secp256k1Expand, secp256k1PairFromSeed as secp256k1FromSeed, secp256k1Sign, signatureVerify, sr25519PairFromSeed as sr25519FromSeed, sr25519Sign, sr25519VrfSign, sr25519VrfVerify } from '@polkadot/util-crypto';
|
||||
|
||||
import { decodePair } from './decode';
|
||||
import { encodePair } from './encode';
|
||||
import { pairToJson } from './toJson';
|
||||
import { decodePair } from './decode.js';
|
||||
import { encodePair } from './encode.js';
|
||||
import { pairToJson } from './toJson.js';
|
||||
|
||||
interface Setup {
|
||||
toSS58: (publicKey: Uint8Array) => string;
|
||||
@@ -144,22 +143,12 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
|
||||
},
|
||||
// eslint-disable-next-line sort-keys
|
||||
decodePkcs8,
|
||||
decryptMessage: (encryptedMessageWithNonce: HexString | string | Uint8Array, senderPublicKey: HexString | string | Uint8Array): Uint8Array | null => {
|
||||
assert(!isLocked(secretKey), 'Cannot encrypt with a locked key pair');
|
||||
assert(!['ecdsa', 'ethereum'].includes(type), 'Secp256k1 not supported yet');
|
||||
|
||||
const messageU8a = u8aToU8a(encryptedMessageWithNonce);
|
||||
|
||||
return naclOpen(
|
||||
messageU8a.slice(24, messageU8a.length),
|
||||
messageU8a.slice(0, 24),
|
||||
convertPublicKeyToCurve25519(u8aToU8a(senderPublicKey)),
|
||||
convertSecretKeyToCurve25519(secretKey)
|
||||
);
|
||||
},
|
||||
derive: (suri: string, meta?: KeyringPair$Meta): KeyringPair => {
|
||||
assert(type !== 'ethereum', 'Unable to derive on this keypair');
|
||||
assert(!isLocked(secretKey), 'Cannot derive on a locked keypair');
|
||||
if (type === 'ethereum') {
|
||||
throw new Error('Unable to derive on this keypair');
|
||||
} else if (isLocked(secretKey)) {
|
||||
throw new Error('Cannot derive on a locked keypair');
|
||||
}
|
||||
|
||||
const { path } = keyExtractPath(suri);
|
||||
const derived = keyFromPath({ publicKey, secretKey }, path, type);
|
||||
@@ -169,22 +158,16 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
|
||||
encodePkcs8: (passphrase?: string): Uint8Array => {
|
||||
return recode(passphrase);
|
||||
},
|
||||
encryptMessage: (message: HexString | string | Uint8Array, recipientPublicKey: HexString | string | Uint8Array, nonceIn?: Uint8Array): Uint8Array => {
|
||||
assert(!isLocked(secretKey), 'Cannot encrypt with a locked key pair');
|
||||
assert(!['ecdsa', 'ethereum'].includes(type), 'Secp256k1 not supported yet');
|
||||
|
||||
const { nonce, sealed } = naclSeal(u8aToU8a(message), convertSecretKeyToCurve25519(secretKey), convertPublicKeyToCurve25519(u8aToU8a(recipientPublicKey)), nonceIn);
|
||||
|
||||
return u8aConcat(nonce, sealed);
|
||||
},
|
||||
lock: (): void => {
|
||||
secretKey = new Uint8Array();
|
||||
},
|
||||
setMeta: (additional: KeyringPair$Meta): void => {
|
||||
meta = objectSpread({}, meta, additional);
|
||||
},
|
||||
sign: (message: HexString | string | Uint8Array, options: SignOptions = {}): Uint8Array => {
|
||||
assert(!isLocked(secretKey), 'Cannot sign with a locked key pair');
|
||||
sign: (message: string | Uint8Array, options: SignOptions = {}): Uint8Array => {
|
||||
if (isLocked(secretKey)) {
|
||||
throw new Error('Cannot sign with a locked key pair');
|
||||
}
|
||||
|
||||
return u8aConcat(
|
||||
options.withType
|
||||
@@ -208,11 +191,13 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
|
||||
unlock: (passphrase?: string): void => {
|
||||
return decodePkcs8(passphrase);
|
||||
},
|
||||
verify: (message: HexString | string | Uint8Array, signature: HexString | string | Uint8Array, signerPublic: HexString | string | Uint8Array): boolean => {
|
||||
verify: (message: string | Uint8Array, signature: string | Uint8Array, signerPublic: string | Uint8Array): boolean => {
|
||||
return signatureVerify(message, signature, TYPE_ADDRESS[type](u8aToU8a(signerPublic))).isValid;
|
||||
},
|
||||
vrfSign: (message: HexString | string | Uint8Array, context?: HexString | string | Uint8Array, extra?: string | Uint8Array): Uint8Array => {
|
||||
assert(!isLocked(secretKey), 'Cannot sign with a locked key pair');
|
||||
vrfSign: (message: string | Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array => {
|
||||
if (isLocked(secretKey)) {
|
||||
throw new Error('Cannot sign with a locked key pair');
|
||||
}
|
||||
|
||||
if (type === 'sr25519') {
|
||||
return sr25519VrfSign(message, { secretKey }, context, extra);
|
||||
@@ -222,7 +207,7 @@ export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: P
|
||||
|
||||
return u8aConcat(vrfHash(proof, context, extra), proof);
|
||||
},
|
||||
vrfVerify: (message: HexString | string | Uint8Array, vrfResult: Uint8Array, signerPublic: HexString | Uint8Array | string, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): boolean => {
|
||||
vrfVerify: (message: string | Uint8Array, vrfResult: Uint8Array, signerPublic: Uint8Array | string, context?: string | Uint8Array, extra?: string | Uint8Array): boolean => {
|
||||
if (type === 'sr25519') {
|
||||
return sr25519VrfVerify(message, vrfResult, publicKey, context, extra);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types';
|
||||
|
||||
import { encodeAddress } from '@polkadot/util-crypto';
|
||||
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types.js';
|
||||
|
||||
// empty publicKey
|
||||
const publicKey = new Uint8Array(32);
|
||||
const address = encodeAddress(publicKey);
|
||||
|
||||
// pre-computed via encodeAddress(publicKey)
|
||||
const address = '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM';
|
||||
|
||||
const meta = {
|
||||
isTesting: true,
|
||||
@@ -27,48 +28,32 @@ const json: KeyringPair$Json = {
|
||||
const pair: KeyringPair = {
|
||||
address,
|
||||
addressRaw: publicKey,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
decodePkcs8: (passphrase?: string, encoded?: Uint8Array): void =>
|
||||
decodePkcs8: (_passphrase?: string, _encoded?: Uint8Array): void =>
|
||||
undefined,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
decryptMessage: (encryptedMessageWithNonce: string | Uint8Array, senderPublicKey: string | Uint8Array): Uint8Array | null =>
|
||||
null,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
derive: (suri: string, meta?: KeyringPair$Meta): KeyringPair =>
|
||||
derive: (_suri: string, _meta?: KeyringPair$Meta): KeyringPair =>
|
||||
pair,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
encodePkcs8: (passphrase?: string): Uint8Array =>
|
||||
encodePkcs8: (_passphrase?: string): Uint8Array =>
|
||||
new Uint8Array(0),
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
encryptMessage: (message: string | Uint8Array, recipientPublicKey: string | Uint8Array, _nonce?: Uint8Array): Uint8Array =>
|
||||
new Uint8Array(),
|
||||
isLocked: true,
|
||||
lock: (): void => {
|
||||
// no locking, it is always locked
|
||||
},
|
||||
meta,
|
||||
publicKey,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
setMeta: (meta: KeyringPair$Meta): void =>
|
||||
setMeta: (_meta: KeyringPair$Meta): void =>
|
||||
undefined,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
sign: (message: Uint8Array): Uint8Array =>
|
||||
sign: (_message: Uint8Array): Uint8Array =>
|
||||
new Uint8Array(64),
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
toJson: (passphrase?: string): KeyringPair$Json =>
|
||||
toJson: (_passphrase?: string): KeyringPair$Json =>
|
||||
json,
|
||||
type: 'ed25519',
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
unlock: (passphrase?: string): void =>
|
||||
unlock: (_passphrase?: string): void =>
|
||||
undefined,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
verify: (message: Uint8Array, signature: Uint8Array): boolean =>
|
||||
verify: (_message: Uint8Array, _signature: Uint8Array): boolean =>
|
||||
false,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
vrfSign: (message: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array =>
|
||||
vrfSign: (_message: Uint8Array, _context?: string | Uint8Array, _extra?: string | Uint8Array): Uint8Array =>
|
||||
new Uint8Array(96),
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
vrfVerify: (message: Uint8Array, vrfResult: Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): boolean =>
|
||||
vrfVerify: (_message: Uint8Array, _vrfResult: Uint8Array, _context?: string | Uint8Array, _extra?: string | Uint8Array): boolean =>
|
||||
false
|
||||
};
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { createTestPairs } from '../testingPairs';
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { createTestPairs } from '../testingPairs.js';
|
||||
|
||||
const keyring = createTestPairs({ type: 'ed25519' }, false);
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringPair$Json, KeyringPair$Meta } from '../types';
|
||||
import type { KeyringPair$Json, KeyringPair$Meta } from '../types.js';
|
||||
|
||||
import { objectSpread } from '@polkadot/util';
|
||||
import { jsonEncryptFormat } from '@polkadot/util-crypto';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export interface PairInfo {
|
||||
publicKey: Uint8Array;
|
||||
secretKey?: Uint8Array;
|
||||
secretKey?: Uint8Array | undefined;
|
||||
seed?: Uint8Array | null;
|
||||
}
|
||||
|
||||
@@ -1,29 +1,23 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringPair } from '../types';
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { u8aToHex } from '@polkadot/util';
|
||||
import { cryptoWaitReady, ed25519PairFromSeed, encodeAddress as toSS58, randomAsU8a, secp256k1PairFromSeed, sr25519PairFromSeed } from '@polkadot/util-crypto';
|
||||
|
||||
import { createPair } from '.';
|
||||
import { createPair } from './index.js';
|
||||
|
||||
const MESSAGE = 'this is a test message';
|
||||
const CONTEXT = 'some context';
|
||||
|
||||
await cryptoWaitReady();
|
||||
|
||||
const ecdsa = createPair({ toSS58, type: 'ecdsa' }, secp256k1PairFromSeed(randomAsU8a()));
|
||||
const ed25519 = createPair({ toSS58, type: 'ed25519' }, ed25519PairFromSeed(randomAsU8a()));
|
||||
const sr25519 = createPair({ toSS58, type: 'sr25519' }, sr25519PairFromSeed(randomAsU8a()));
|
||||
|
||||
describe('vrf', (): void => {
|
||||
let ecdsa: KeyringPair;
|
||||
let ed25519: KeyringPair;
|
||||
let sr25519: KeyringPair;
|
||||
|
||||
beforeAll(async (): Promise<void> => {
|
||||
await cryptoWaitReady();
|
||||
|
||||
ecdsa = createPair({ toSS58, type: 'ecdsa' }, secp256k1PairFromSeed(randomAsU8a()));
|
||||
ed25519 = createPair({ toSS58, type: 'ed25519' }, ed25519PairFromSeed(randomAsU8a()));
|
||||
sr25519 = createPair({ toSS58, type: 'sr25519' }, sr25519PairFromSeed(randomAsU8a()));
|
||||
});
|
||||
|
||||
it('has deterministic signature values for ecdsa', (): void => {
|
||||
const sig1 = ecdsa.vrfSign(MESSAGE, CONTEXT);
|
||||
const sig2 = ecdsa.vrfSign(MESSAGE, CONTEXT);
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { HexString } from '@polkadot/util/types';
|
||||
import type { KeyringPair, KeyringPairs } from './types';
|
||||
import type { KeyringPair, KeyringPairs } from './types.js';
|
||||
|
||||
import { assert, isHex, isU8a, u8aToHex, u8aToU8a } from '@polkadot/util';
|
||||
import { isHex, isU8a, u8aToHex, u8aToU8a } from '@polkadot/util';
|
||||
import { decodeAddress } from '@polkadot/util-crypto';
|
||||
|
||||
type KeyringPairMap = Record<string, KeyringPair>;
|
||||
@@ -22,19 +21,21 @@ export class Pairs implements KeyringPairs {
|
||||
return Object.values(this.#map);
|
||||
}
|
||||
|
||||
public get (address: HexString | string | Uint8Array): KeyringPair {
|
||||
public get (address: string | Uint8Array): KeyringPair {
|
||||
const pair = this.#map[decodeAddress(address).toString()];
|
||||
|
||||
assert(pair, () => `Unable to retrieve keypair '${
|
||||
isU8a(address) || isHex(address)
|
||||
? u8aToHex(u8aToU8a(address))
|
||||
: address
|
||||
}'`);
|
||||
if (!pair) {
|
||||
throw new Error(`Unable to retrieve keypair '${
|
||||
isU8a(address) || isHex(address)
|
||||
? u8aToHex(u8aToU8a(address))
|
||||
: address
|
||||
}'`);
|
||||
}
|
||||
|
||||
return pair;
|
||||
}
|
||||
|
||||
public remove (address: HexString | string | Uint8Array): void {
|
||||
public remove (address: string | Uint8Array): void {
|
||||
delete this.#map[decodeAddress(address).toString()];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
// From https://github.com/paritytech/substrate/wiki/Secret-URI-Test-Vectors
|
||||
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
@@ -8,7 +10,7 @@ import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import { u8aToHex } from '@polkadot/util';
|
||||
import { cryptoWaitReady } from '@polkadot/util-crypto';
|
||||
|
||||
import Keyring from '.';
|
||||
import Keyring from './index.js';
|
||||
|
||||
const PHRASE = 'bottom drive obey lake curtain smoke basket hold race lonely fit walk';
|
||||
const ETHEREUM_PHRASE = 'seed sock milk update focus rotate barely fade car face mechanic mercy';
|
||||
@@ -87,15 +89,13 @@ const TESTS = {
|
||||
]
|
||||
};
|
||||
|
||||
await cryptoWaitReady();
|
||||
|
||||
describe('keyring.addFromUri', (): void => {
|
||||
Object.entries(TESTS).forEach(([type, tests]): void => {
|
||||
for (const [type, tests] of Object.entries(TESTS)) {
|
||||
const keyring = new Keyring({ type: type as KeypairType });
|
||||
|
||||
beforeEach(async (): Promise<void> => {
|
||||
await cryptoWaitReady();
|
||||
});
|
||||
|
||||
describe(type, (): void => {
|
||||
describe(`${type}`, (): void => {
|
||||
tests.forEach(({ pk, ss, uri }): void => {
|
||||
it(`creates ${uri}`, (): void => {
|
||||
const pair = keyring.addFromUri(uri, {}, type as KeypairType);
|
||||
@@ -105,5 +105,5 @@ describe('keyring.addFromUri', (): void => {
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,19 +1,20 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringInstance, KeyringOptions } from './types';
|
||||
import type { HexString } from '@polkadot/util/types';
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringInstance, KeyringOptions } from './types.js';
|
||||
|
||||
import { assert, hexToU8a } from '@polkadot/util';
|
||||
import { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import { hexToU8a } from '@polkadot/util';
|
||||
|
||||
import { Keyring } from './keyring';
|
||||
import { createPair } from './pair';
|
||||
import { createPair } from './pair/index.js';
|
||||
import { Keyring } from './keyring.js';
|
||||
|
||||
interface PairDef {
|
||||
name?: string;
|
||||
publicKey: Uint8Array;
|
||||
p: HexString;
|
||||
s: HexString;
|
||||
seed?: string;
|
||||
secretKey?: Uint8Array;
|
||||
type: KeypairType
|
||||
}
|
||||
|
||||
@@ -23,50 +24,50 @@ interface PairDef {
|
||||
// adding the keys when only the keyring is used.
|
||||
export const PAIRSSR25519: PairDef[] = [
|
||||
{
|
||||
publicKey: hexToU8a('0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d'),
|
||||
secretKey: hexToU8a('0x98319d4ff8a9508c4bb0cf0b5a78d760a0b2082c02775e6e82370816fedfff48925a225d97aa00682d6a59b95b18780c10d7032336e88f3442b42361f4a66011'), // nosemgrep
|
||||
p: '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d',
|
||||
s: '0x98319d4ff8a9508c4bb0cf0b5a78d760a0b2082c02775e6e82370816fedfff48925a225d97aa00682d6a59b95b18780c10d7032336e88f3442b42361f4a66011', // nosemgrep
|
||||
seed: 'Alice',
|
||||
type: 'sr25519'
|
||||
},
|
||||
{
|
||||
publicKey: hexToU8a('0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f'),
|
||||
secretKey: hexToU8a('0xe8da6c9d810e020f5e3c7f5af2dea314cbeaa0d72bc6421e92c0808a0c584a6046ab28e97c3ffc77fe12b5a4d37e8cd4afbfebbf2391ffc7cb07c0f38c023efd'), // nosemgrep
|
||||
p: '0xbe5ddb1579b72e84524fc29e78609e3caf42e85aa118ebfe0b0ad404b5bdd25f',
|
||||
s: '0xe8da6c9d810e020f5e3c7f5af2dea314cbeaa0d72bc6421e92c0808a0c584a6046ab28e97c3ffc77fe12b5a4d37e8cd4afbfebbf2391ffc7cb07c0f38c023efd', // nosemgrep
|
||||
seed: 'Alice//stash',
|
||||
type: 'sr25519'
|
||||
},
|
||||
{
|
||||
publicKey: hexToU8a('0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48'),
|
||||
secretKey: hexToU8a('0x081ff694633e255136bdb456c20a5fc8fed21f8b964c11bb17ff534ce80ebd5941ae88f85d0c1bfc37be41c904e1dfc01de8c8067b0d6d5df25dd1ac0894a325'), // nosemgrep
|
||||
p: '0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48',
|
||||
s: '0x081ff694633e255136bdb456c20a5fc8fed21f8b964c11bb17ff534ce80ebd5941ae88f85d0c1bfc37be41c904e1dfc01de8c8067b0d6d5df25dd1ac0894a325', // nosemgrep
|
||||
seed: 'Bob',
|
||||
type: 'sr25519'
|
||||
},
|
||||
{
|
||||
publicKey: hexToU8a('0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e'),
|
||||
secretKey: hexToU8a('0xc006507cdfc267a21532394c49ca9b754ca71de21e15a1cdf807c7ceab6d0b6c3ed408d9d35311540dcd54931933e67cf1ea10d46f75408f82b789d9bd212fde'), // nosemgrep
|
||||
p: '0xfe65717dad0447d715f660a0a58411de509b42e6efb8375f562f58a554d5860e',
|
||||
s: '0xc006507cdfc267a21532394c49ca9b754ca71de21e15a1cdf807c7ceab6d0b6c3ed408d9d35311540dcd54931933e67cf1ea10d46f75408f82b789d9bd212fde', // nosemgrep
|
||||
seed: 'Bob//stash',
|
||||
type: 'sr25519'
|
||||
},
|
||||
{
|
||||
publicKey: hexToU8a('0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22'),
|
||||
secretKey: hexToU8a('0xa8f2d83016052e5d6d77b2f6fd5d59418922a09024cda701b3c34369ec43a7668faf12ff39cd4e5d92bb773972f41a7a5279ebc2ed92264bed8f47d344f8f18c'), // nosemgrep
|
||||
p: '0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22',
|
||||
s: '0xa8f2d83016052e5d6d77b2f6fd5d59418922a09024cda701b3c34369ec43a7668faf12ff39cd4e5d92bb773972f41a7a5279ebc2ed92264bed8f47d344f8f18c', // nosemgrep
|
||||
seed: 'Charlie',
|
||||
type: 'sr25519'
|
||||
},
|
||||
{
|
||||
publicKey: hexToU8a('0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20'),
|
||||
secretKey: hexToU8a('0x20e05482ca4677e0edbc58ae9a3a59f6ed3b1a9484ba17e64d6fe8688b2b7b5d108c4487b9323b98b11fe36cb301b084e920f7b7895536809a6d62a451b25568'), // nosemgrep
|
||||
p: '0x306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20',
|
||||
s: '0x20e05482ca4677e0edbc58ae9a3a59f6ed3b1a9484ba17e64d6fe8688b2b7b5d108c4487b9323b98b11fe36cb301b084e920f7b7895536809a6d62a451b25568', // nosemgrep
|
||||
seed: 'Dave',
|
||||
type: 'sr25519'
|
||||
},
|
||||
{
|
||||
publicKey: hexToU8a('0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e'),
|
||||
secretKey: hexToU8a('0x683576abfd5dc35273e4264c23095a1bf21c14517bece57c7f0cc5c0ed4ce06a3dbf386b7828f348abe15d76973a72009e6ef86a5c91db2990cb36bb657c6587'), // nosemgrep
|
||||
p: '0xe659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e',
|
||||
s: '0x683576abfd5dc35273e4264c23095a1bf21c14517bece57c7f0cc5c0ed4ce06a3dbf386b7828f348abe15d76973a72009e6ef86a5c91db2990cb36bb657c6587', // nosemgrep
|
||||
seed: 'Eve',
|
||||
type: 'sr25519'
|
||||
},
|
||||
{
|
||||
publicKey: hexToU8a('0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c'),
|
||||
secretKey: hexToU8a('0xb835c20f450079cf4f513900ae9faf8df06ad86c681884122c752a4b2bf74d4303e4f21bc6cc62bb4eeed5a9cce642c25e2d2ac1464093b50f6196d78e3a7426'), // nosemgrep
|
||||
p: '0x1cbd2d43530a44705ad088af313e18f80b53ef16b36177cd4b77b846f2a5f07c',
|
||||
s: '0xb835c20f450079cf4f513900ae9faf8df06ad86c681884122c752a4b2bf74d4303e4f21bc6cc62bb4eeed5a9cce642c25e2d2ac1464093b50f6196d78e3a7426', // nosemgrep
|
||||
seed: 'Ferdie',
|
||||
type: 'sr25519'
|
||||
}
|
||||
@@ -75,48 +76,50 @@ export const PAIRSSR25519: PairDef[] = [
|
||||
export const PAIRSETHEREUM: PairDef[] = [
|
||||
{
|
||||
name: 'Alith',
|
||||
publicKey: hexToU8a('0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f'),
|
||||
secretKey: hexToU8a('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133'), // nosemgrep
|
||||
p: '0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f',
|
||||
s: '0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133', // nosemgrep
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Baltathar',
|
||||
publicKey: hexToU8a('0x033bc19e36ff1673910575b6727a974a9abd80c9a875d41ab3e2648dbfb9e4b518'),
|
||||
secretKey: hexToU8a('0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b'), // nosemgrep
|
||||
p: '0x033bc19e36ff1673910575b6727a974a9abd80c9a875d41ab3e2648dbfb9e4b518',
|
||||
s: '0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b', // nosemgrep
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Charleth',
|
||||
publicKey: hexToU8a('0x0234637bdc0e89b5d46543bcbf8edff329d2702bc995e27e9af4b1ba009a3c2a5e'),
|
||||
secretKey: hexToU8a('0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b'), // nosemgrep
|
||||
p: '0x0234637bdc0e89b5d46543bcbf8edff329d2702bc995e27e9af4b1ba009a3c2a5e',
|
||||
s: '0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b', // nosemgrep
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Dorothy',
|
||||
publicKey: hexToU8a('0x02a00d60b2b408c2a14c5d70cdd2c205db8985ef737a7e55ad20ea32cc9e7c417c'),
|
||||
secretKey: hexToU8a('0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68'), // nosemgrep
|
||||
p: '0x02a00d60b2b408c2a14c5d70cdd2c205db8985ef737a7e55ad20ea32cc9e7c417c',
|
||||
s: '0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68', // nosemgrep
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Ethan',
|
||||
publicKey: hexToU8a('0x025cdc005b752651cd3f728fb9192182acb3a9c89e19072cbd5b03f3ee1f1b3ffa'),
|
||||
secretKey: hexToU8a('0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4'), // nosemgrep
|
||||
p: '0x025cdc005b752651cd3f728fb9192182acb3a9c89e19072cbd5b03f3ee1f1b3ffa',
|
||||
s: '0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4', // nosemgrep
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Faith',
|
||||
publicKey: hexToU8a('0x037964b6c9d546da4646ada28a99e34acaa1d14e7aba861a9055f9bd200c8abf74'),
|
||||
secretKey: hexToU8a('0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df'), // nosemgrep
|
||||
p: '0x037964b6c9d546da4646ada28a99e34acaa1d14e7aba861a9055f9bd200c8abf74',
|
||||
s: '0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df', // nosemgrep
|
||||
type: 'ethereum'
|
||||
}
|
||||
];
|
||||
|
||||
function createMeta (name?: string, seed?: string) {
|
||||
assert(name || seed, 'Testing pair should have either a name or a seed');
|
||||
if (!name && !seed) {
|
||||
throw new Error('Testing pair should have either a name or a seed');
|
||||
}
|
||||
|
||||
return {
|
||||
isTesting: true,
|
||||
name: name || (seed && seed.replace('//', '_').toLowerCase())
|
||||
name: name || seed?.replace('//', '_').toLowerCase()
|
||||
};
|
||||
}
|
||||
|
||||
@@ -128,16 +131,20 @@ function createMeta (name?: string, seed?: string) {
|
||||
*/
|
||||
export function createTestKeyring (options: KeyringOptions = {}, isDerived = true): KeyringInstance {
|
||||
const keyring = new Keyring(options);
|
||||
const pairs = (options.type && options.type === 'ethereum')
|
||||
const pairs = options.type === 'ethereum'
|
||||
? PAIRSETHEREUM
|
||||
: PAIRSSR25519;
|
||||
|
||||
for (const { name, publicKey, secretKey, seed, type } of pairs) {
|
||||
for (const { name, p, s, seed, type } of pairs) {
|
||||
const meta = createMeta(name, seed);
|
||||
const pair = !isDerived && !name && seed
|
||||
? keyring.addFromUri(seed, meta, options.type)
|
||||
: keyring.addPair(
|
||||
createPair({ toSS58: keyring.encodeAddress, type }, { publicKey, secretKey }, meta)
|
||||
createPair(
|
||||
{ toSS58: keyring.encodeAddress, type },
|
||||
{ publicKey: hexToU8a(p), secretKey: hexToU8a(s) },
|
||||
meta
|
||||
)
|
||||
);
|
||||
|
||||
pair.lock = (): void => {
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { u8aToHex } from '@polkadot/util';
|
||||
import { cryptoWaitReady } from '@polkadot/util-crypto';
|
||||
|
||||
import { createTestPairs } from './testingPairs';
|
||||
import Keyring from '.';
|
||||
import Keyring from './index.js';
|
||||
import { createTestPairs } from './testingPairs.js';
|
||||
|
||||
const TEST_ADD = '0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac';
|
||||
|
||||
describe('testingPairs', (): void => {
|
||||
beforeEach(async (): Promise<void> => {
|
||||
await cryptoWaitReady();
|
||||
});
|
||||
await cryptoWaitReady();
|
||||
|
||||
describe('testingPairs', (): void => {
|
||||
it('creates without failing', (): void => {
|
||||
expect(
|
||||
Object.keys(createTestPairs())
|
||||
@@ -42,12 +42,10 @@ describe('testingPairs', (): void => {
|
||||
const keyring = new Keyring({ type: 'ethereum' });
|
||||
const pair = keyring.createFromUri('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133');
|
||||
|
||||
expect(
|
||||
pair && pair.address
|
||||
).toEqual(TEST_ADD);
|
||||
expect(pair?.address).toEqual(TEST_ADD);
|
||||
});
|
||||
|
||||
it('checks eth test addresses', (): void => {
|
||||
describe('checks eth test addresses', (): void => {
|
||||
const ring = createTestPairs({ type: 'ethereum' });
|
||||
const keyring = new Keyring({ type: 'ethereum' });
|
||||
// priv keys generated by ganache-cli --mnemonic "bottom drive obey lake curtain smoke basket hold race lonely fit walk"
|
||||
@@ -62,10 +60,20 @@ describe('testingPairs', (): void => {
|
||||
'0x4c42532034540267bf568198ccec4cb822a025da542861fcb146a5fab6433ff8',
|
||||
'0x94c49300a58d576011096bcb006aa06f5a91b34b4383891e8029c21dc39fbb8b'];
|
||||
|
||||
// @ts-expect-error We should not delete from the maps, however this is a test
|
||||
delete ring.nobody;
|
||||
|
||||
Object.keys(ring).forEach((testKeyring, i) => {
|
||||
if (i < 6) { expect(u8aToHex(ring[testKeyring].publicKey)).toEqual(u8aToHex(keyring.createFromUri(privKeys[i]).publicKey)); }
|
||||
});
|
||||
Object
|
||||
.keys(ring)
|
||||
.filter((_, i) => i < 6)
|
||||
.forEach((testKeyring, i) => {
|
||||
it(`checks #${i}`, (): void => {
|
||||
expect(
|
||||
u8aToHex(ring[testKeyring].publicKey)
|
||||
).toEqual(
|
||||
u8aToHex(keyring.createFromUri(privKeys[i]).publicKey)
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,23 +1,56 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringOptions, KeyringPair } from './types';
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringOptions, KeyringPair } from './types.js';
|
||||
|
||||
import { nobody } from './pair/nobody';
|
||||
import { createTestKeyring } from './testing';
|
||||
import { nobody } from './pair/nobody.js';
|
||||
import { createTestKeyring } from './testing.js';
|
||||
|
||||
export interface TestKeyringMap {
|
||||
nobody: KeyringPair;
|
||||
|
||||
[index: string]: KeyringPair;
|
||||
}
|
||||
|
||||
export function createTestPairs (options?: KeyringOptions, isDerived = true): TestKeyringMap {
|
||||
export interface TestKeyringMapSubstrate extends TestKeyringMap {
|
||||
alice: KeyringPair;
|
||||
bob: KeyringPair;
|
||||
charlie: KeyringPair;
|
||||
dave: KeyringPair;
|
||||
eve: KeyringPair;
|
||||
ferdie: KeyringPair;
|
||||
}
|
||||
|
||||
export interface TestKeyringMapEthereum extends TestKeyringMap {
|
||||
Alith: KeyringPair;
|
||||
Baltathar: KeyringPair;
|
||||
Charleth: KeyringPair;
|
||||
Dorothy: KeyringPair;
|
||||
Ethan: KeyringPair;
|
||||
Faith: KeyringPair;
|
||||
}
|
||||
|
||||
export type DetectMap<O extends KeyringOptions | undefined> = DetectPairType<O> extends 'ethereum'
|
||||
? TestKeyringMapEthereum
|
||||
: TestKeyringMapSubstrate;
|
||||
|
||||
export type DetectPairType<O extends KeyringOptions | undefined> = O extends KeyringOptions
|
||||
? O['type'] extends KeypairType
|
||||
? O['type']
|
||||
: 'sr25519'
|
||||
: 'sr25519';
|
||||
|
||||
export function createTestPairs <O extends KeyringOptions, M = DetectMap<O>> (options?: O, isDerived = true): M {
|
||||
const keyring = createTestKeyring(options, isDerived);
|
||||
const pairs = keyring.getPairs();
|
||||
const map: TestKeyringMap = { nobody: nobody() };
|
||||
|
||||
for (const p of pairs) {
|
||||
map[p.meta.name as string] = p;
|
||||
if (p.meta.name) {
|
||||
map[p.meta.name] = p;
|
||||
}
|
||||
}
|
||||
|
||||
return map;
|
||||
return map as M;
|
||||
}
|
||||
|
||||
@@ -1,22 +1,84 @@
|
||||
// Copyright 2017-2022 @polkadot/keyring authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { HexString } from '@polkadot/util/types';
|
||||
import type { EncryptedJson, Keypair, KeypairType, Prefix } from '@polkadot/util-crypto/types';
|
||||
|
||||
export interface KeyringOptions {
|
||||
/**
|
||||
* @description The ss58Format to use for address encoding (defaults to 42)
|
||||
*/
|
||||
ss58Format?: Prefix;
|
||||
/**
|
||||
* @description The type of keyring to create (defaults to ed25519)
|
||||
*/
|
||||
type?: KeypairType;
|
||||
}
|
||||
|
||||
export type KeyringPair$Meta = Record<string, unknown>;
|
||||
export interface KeyringPair$MetaHardware {
|
||||
accountIndex?: number;
|
||||
accountOffset?: number;
|
||||
addressOffset?: number;
|
||||
hardwareType?: 'ledger';
|
||||
}
|
||||
|
||||
export interface KeyringPair$MetaFlags {
|
||||
isDefaultAuthSelected?: boolean;
|
||||
isExternal?: boolean;
|
||||
isHardware?: boolean;
|
||||
isHidden?: boolean;
|
||||
isInjected?: boolean;
|
||||
isMultisig?: boolean;
|
||||
isProxied?: boolean;
|
||||
isRecent?: boolean;
|
||||
isTesting?: boolean;
|
||||
}
|
||||
|
||||
export interface KeyringPair$MetaContract {
|
||||
abi: string;
|
||||
genesisHash?: HexString | null;
|
||||
}
|
||||
|
||||
export interface KeyringPair$MetaExtension {
|
||||
source?: string;
|
||||
}
|
||||
|
||||
export interface KeyringPair$MetaMultisig {
|
||||
threshold?: number;
|
||||
who?: string[];
|
||||
}
|
||||
|
||||
export interface KeyringPair$MetaParent {
|
||||
parentAddress?: string;
|
||||
parentName?: string;
|
||||
}
|
||||
|
||||
export interface KeyringPair$Meta extends KeyringPair$MetaExtension, KeyringPair$MetaFlags, KeyringPair$MetaHardware, KeyringPair$MetaMultisig, KeyringPair$MetaParent {
|
||||
address?: string;
|
||||
contract?: KeyringPair$MetaContract;
|
||||
genesisHash?: HexString | null;
|
||||
name?: string;
|
||||
suri?: string;
|
||||
tags?: string[];
|
||||
type?: KeypairType;
|
||||
whenCreated?: number;
|
||||
whenEdited?: number;
|
||||
whenUsed?: number;
|
||||
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
export interface KeyringPair$Json extends EncryptedJson {
|
||||
address: string | HexString;
|
||||
/** The ss58 encoded address or the hex-encoded version (the latter is for ETH-compat chains) */
|
||||
address: string;
|
||||
/** The underlying metadata associated with the keypair */
|
||||
meta: KeyringPair$Meta;
|
||||
}
|
||||
|
||||
export interface SignOptions {
|
||||
/**
|
||||
* @description Create a MultiSignature-compatible output with an indicator type
|
||||
**/
|
||||
withType?: boolean;
|
||||
}
|
||||
|
||||
@@ -33,14 +95,12 @@ export interface KeyringPair {
|
||||
encodePkcs8 (passphrase?: string): Uint8Array;
|
||||
lock (): void;
|
||||
setMeta (meta: KeyringPair$Meta): void;
|
||||
sign (message: HexString | string | Uint8Array, options?: SignOptions): Uint8Array;
|
||||
sign (message: string | Uint8Array, options?: SignOptions): Uint8Array;
|
||||
toJson (passphrase?: string): KeyringPair$Json;
|
||||
unlock (passphrase?: string): void;
|
||||
encryptMessage (message: HexString | string | Uint8Array, recipientPublicKey: HexString | string | Uint8Array, nonce?: Uint8Array): Uint8Array;
|
||||
decryptMessage (encryptedMessageWithNonce: HexString | string | Uint8Array, senderPublicKey: HexString | string | Uint8Array): Uint8Array | null;
|
||||
verify (message: HexString | string | Uint8Array, signature: Uint8Array, signerPublic: HexString | string | Uint8Array): boolean;
|
||||
vrfSign (message: HexString | string | Uint8Array, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): Uint8Array;
|
||||
vrfVerify (message: HexString | string | Uint8Array, vrfResult: Uint8Array, signerPublic: HexString | Uint8Array | string, context?: HexString | string | Uint8Array, extra?: HexString | string | Uint8Array): boolean;
|
||||
verify (message: string | Uint8Array, signature: Uint8Array, signerPublic: string | Uint8Array): boolean;
|
||||
vrfSign (message: string | Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): Uint8Array;
|
||||
vrfVerify (message: string | Uint8Array, vrfResult: Uint8Array, signerPublic: string | Uint8Array, context?: string | Uint8Array, extra?: string | Uint8Array): boolean;
|
||||
}
|
||||
|
||||
export interface KeyringPairs {
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
"outDir": "./build",
|
||||
"rootDir": "./src"
|
||||
},
|
||||
"exclude": [
|
||||
"**/*.spec.ts",
|
||||
"**/mod.ts"
|
||||
],
|
||||
"references": [
|
||||
{ "path": "../util/tsconfig.build.json" },
|
||||
{ "path": "../util-crypto/tsconfig.build.json" }
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"baseUrl": "..",
|
||||
"outDir": "./build",
|
||||
"rootDir": "./src",
|
||||
"emitDeclarationOnly": false,
|
||||
"noEmit": true
|
||||
},
|
||||
"include": [
|
||||
"**/*.spec.ts"
|
||||
],
|
||||
"references": [
|
||||
{ "path": "../keyring/tsconfig.build.json" },
|
||||
{ "path": "../util/tsconfig.build.json" },
|
||||
{ "path": "../util-crypto/tsconfig.build.json" }
|
||||
]
|
||||
}
|
||||
@@ -1,201 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
A list of all available Substrate networks and their applicable prefixes.
|
||||
|
||||
This list is periodically checked against the master list available at https://github.com/paritytech/substrate/blob/master/ss58-registry.json
|
||||
This list is periodically checked against the master list available at https://github.com/paritytech/ss58-registry/blob/main/ss58-registry.json
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
{
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"contributors": [],
|
||||
"description": "A list of all available Substrate networks and their applicable prefixes",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
"node": ">=16"
|
||||
},
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/networks#readme",
|
||||
"license": "Apache-2.0",
|
||||
"maintainers": [],
|
||||
"name": "@polkadot/networks",
|
||||
"repository": {
|
||||
"directory": "packages/networks",
|
||||
@@ -17,14 +15,14 @@
|
||||
},
|
||||
"sideEffects": false,
|
||||
"type": "module",
|
||||
"version": "8.3.2",
|
||||
"version": "12.4.2",
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.16.7",
|
||||
"@polkadot/util": "8.3.2"
|
||||
"@polkadot/util": "12.4.2",
|
||||
"@substrate/ss58-registry": "^1.43.0",
|
||||
"tslib": "^2.6.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@polkadot/hw-ledger": "8.3.2",
|
||||
"@polkadot/x-fetch": "8.3.2"
|
||||
"@polkadot/hw-ledger": "12.4.2"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import fs from 'fs';
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
import { substrateRegistry } from '../build/defaults.js';
|
||||
|
||||
const substrateRegistryRepo = substrateRegistry
|
||||
.replace('raw.githubusercontent.com', 'github.com')
|
||||
.split('main')[0];
|
||||
|
||||
function outputField (k, v) {
|
||||
if (typeof v === 'string') {
|
||||
return `'${v}'`;
|
||||
} else if (Array.isArray(v)) {
|
||||
// new format is [] to indicate optionality
|
||||
return (['decimals', 'symbols'].includes(k) && !v.length)
|
||||
? null
|
||||
: `[${v.map((v) => outputField(k, v)).join(', ')}]`;
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
async function getSubstrateRegistry () {
|
||||
const original = await fetch(substrateRegistry);
|
||||
const json = await original.json();
|
||||
|
||||
return json.registry
|
||||
.map((e) =>
|
||||
` {\n${Object
|
||||
.entries(e)
|
||||
.sort(([a], [b]) => a.localeCompare(b))
|
||||
.map(([k, v]) => ` ${k}: ${outputField(k, v)}`)
|
||||
.join(',\n')}\n }`
|
||||
)
|
||||
.join(',\n');
|
||||
}
|
||||
|
||||
getSubstrateRegistry()
|
||||
.then((entries) => {
|
||||
fs.writeFileSync('packages/networks/src/substrate.ts', `// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
//
|
||||
// Auto-generated by yarn networks:sync (via scripts/fromSubstrate.mjs)
|
||||
//
|
||||
// This file should never be edited manually. Rather the process is as follow -
|
||||
//
|
||||
// - make a PR to the upstream registry found at ${substrateRegistryRepo}
|
||||
// - ensure the PR gets merged
|
||||
// - yarn networks:sync in this repo to sync
|
||||
//
|
||||
// Any manual changes to this file will make CI cron checks fail and will be
|
||||
// lost when the registry is updated alongside the above sync.
|
||||
//
|
||||
|
||||
import type { KnownSubstrate } from './types';
|
||||
|
||||
export const knownSubstrate: KnownSubstrate[] = [\n${entries}\n];
|
||||
`);
|
||||
|
||||
console.log('Completed.');
|
||||
|
||||
process.exit(0);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error.message);
|
||||
|
||||
process.exit(-1);
|
||||
});
|
||||
@@ -1,75 +0,0 @@
|
||||
// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Ss58Registry } from './types';
|
||||
|
||||
import fs from 'fs';
|
||||
|
||||
import { objectKeys, stringify } from '@polkadot/util';
|
||||
import { fetch } from '@polkadot/x-fetch';
|
||||
|
||||
import { substrateRegistry } from './defaults';
|
||||
import { allNetworks } from './';
|
||||
|
||||
const OUTPUT = './.github/ss58-check.md';
|
||||
|
||||
function assertAndLog (check: boolean, error: string): void {
|
||||
if (!check) {
|
||||
process.env.CI_LOG && fs.appendFileSync(OUTPUT, `
|
||||
|
||||
${error}
|
||||
`);
|
||||
|
||||
throw new Error(error);
|
||||
}
|
||||
}
|
||||
|
||||
describe('check latest Substrate ss58 registry', (): void => {
|
||||
let original: Ss58Registry;
|
||||
|
||||
beforeAll(async (): Promise<void> => {
|
||||
original = (await (await fetch(substrateRegistry)).json()) as Ss58Registry;
|
||||
});
|
||||
|
||||
it('has the same number as the original', (): void => {
|
||||
assertAndLog(allNetworks.length === original.registry.length, `Number of entries mismatched:: Expected ${original.registry.length} found ${allNetworks.length}`);
|
||||
});
|
||||
|
||||
it('has no missing any entries', (): void => {
|
||||
const missing = original.registry
|
||||
.filter(({ prefix }) => !allNetworks.some((n) => n.prefix === prefix))
|
||||
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
|
||||
|
||||
assertAndLog(!missing.length, `Missing entries found: ${stringify(missing, 2)}`);
|
||||
});
|
||||
|
||||
it('has no extra entries', (): void => {
|
||||
const missing = allNetworks
|
||||
.filter(({ prefix }) => !original.registry.some((n) => n.prefix === prefix))
|
||||
.map(({ displayName, prefix }) => `${displayName} (${prefix})`);
|
||||
|
||||
assertAndLog(!missing.length, `Extra entries found: ${stringify(missing, 2)}`);
|
||||
});
|
||||
|
||||
it('has the same values as the original', (): void => {
|
||||
const fields = objectKeys(original.schema);
|
||||
const errors = original.registry
|
||||
.map((n): [string, string[]] => {
|
||||
const other = allNetworks.find(({ prefix }) => prefix === n.prefix);
|
||||
|
||||
return [
|
||||
`${n.displayName} (${n.prefix})`,
|
||||
other
|
||||
? fields.filter((f) =>
|
||||
['decimals', 'symbols'].includes(f)
|
||||
? stringify(n[f] || []) !== stringify(other[f] || [])
|
||||
: stringify(n[f]) !== stringify(other[f])
|
||||
)
|
||||
: []
|
||||
];
|
||||
})
|
||||
.filter(([, fields]) => fields.length);
|
||||
|
||||
assertAndLog(!errors.length, `Mismatches found: ${stringify(errors.map(([n, m]) => `${n}:: ${m.join(', ')}`), 2)}`);
|
||||
});
|
||||
});
|
||||
@@ -1,10 +1,12 @@
|
||||
// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { ledgerApps } from '@polkadot/hw-ledger/defaults';
|
||||
import { isHex } from '@polkadot/util';
|
||||
|
||||
import { knownGenesis, knownLedger } from './defaults';
|
||||
import { knownGenesis, knownLedger } from './defaults/index.js';
|
||||
|
||||
describe('defaults', (): void => {
|
||||
describe('genesis', (): void => {
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KnownIcon, KnownLedger, KnownTestnet } from './types';
|
||||
|
||||
export { knownGenesis } from './genesis';
|
||||
|
||||
export const substrateRegistry = 'https://raw.githubusercontent.com/paritytech/ss58-registry/main/ss58-registry.json';
|
||||
|
||||
// these are icon overrides
|
||||
export const knownIcon: KnownIcon = {
|
||||
centrifuge: 'polkadot',
|
||||
kusama: 'polkadot',
|
||||
polkadot: 'polkadot',
|
||||
sora: 'polkadot',
|
||||
statemine: 'polkadot',
|
||||
statemint: 'polkadot',
|
||||
westmint: 'polkadot'
|
||||
};
|
||||
|
||||
// These match up with the keys of the ledgerApps object in the @polkadot/hw-ledger/defaults.ts
|
||||
// and maps to the known slip44 (minus the `0x8` hard derivation flag)
|
||||
// NOTE: Any network here needs to have a genesisHash attached in the config above
|
||||
export const knownLedger: KnownLedger = {
|
||||
bifrost: 0x00000314,
|
||||
centrifuge: 0x000002eb,
|
||||
'dock-mainnet': 0x00000252,
|
||||
edgeware: 0x0000020b,
|
||||
equilibrium: 0x05f5e0fd,
|
||||
genshiro: 0x05f5e0fc,
|
||||
kusama: 0x000001b2,
|
||||
'nodle-chain': 0x000003eb,
|
||||
polkadot: 0x00000162,
|
||||
polymesh: 0x00000253,
|
||||
sora: 0x00000269,
|
||||
statemine: 0x000001b2 // common-good on Kusama, shares derivation
|
||||
};
|
||||
|
||||
// testnets should not allow selection
|
||||
export const knownTestnet: KnownTestnet = {
|
||||
'': true, // this is the default non-network entry
|
||||
'cess-testnet': true,
|
||||
'dock-testnet': true,
|
||||
jupiter: true,
|
||||
'mathchain-testnet': true,
|
||||
subspace_testnet: true,
|
||||
'zero-alphaville': true
|
||||
};
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KnownGenesis } from './types';
|
||||
import type { KnownGenesis } from '../types.js';
|
||||
|
||||
// NOTE: In the case where the network was hard-spooned and multiple genesisHashes
|
||||
// are provided, it needs to be in reverse order, i.e. most-recent first, oldest
|
||||
@@ -11,13 +11,42 @@ export const knownGenesis: KnownGenesis = {
|
||||
acala: [
|
||||
'0xfc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c'
|
||||
],
|
||||
ajuna: [
|
||||
'0xe358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee'
|
||||
],
|
||||
'aleph-node': [
|
||||
'0x70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e'
|
||||
],
|
||||
astar: [
|
||||
'0x9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6'
|
||||
],
|
||||
basilisk: [
|
||||
'0xa85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755'
|
||||
],
|
||||
bifrost: [
|
||||
'0x262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b'
|
||||
],
|
||||
'bifrost-kusama': [
|
||||
'0x9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed'
|
||||
],
|
||||
bittensor: [
|
||||
'0x2f0555cc76fc2840a25a6ea3b9637146806f1f44b090c175ffde2a7e5ab36c03'
|
||||
],
|
||||
centrifuge: [
|
||||
'0xb3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82',
|
||||
'0x67dddf2673b69e5f875f6f25277495834398eafd67f492e09f3f3345e003d1b5'
|
||||
],
|
||||
cere: [
|
||||
'0x81443836a9a24caaa23f1241897d1235717535711d1d3fe24eae4fdc942c092c'
|
||||
],
|
||||
composable: [
|
||||
'0xdaab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d'
|
||||
],
|
||||
darwinia: [
|
||||
'0xe71578b37a7c799b0ab4ee87ffa6f059a6b98f71f06fb8c84a8d88013a548ad6'
|
||||
],
|
||||
'dock-mainnet': [
|
||||
'0x6bfe24dca2a3be10f22212678ac13a6446ec764103c0f3471c71609eac384aae',
|
||||
'0xf73467c6544aa68df2ee546b135f955c46b90fa627e9b5d7935f41061bb8a5a9'
|
||||
],
|
||||
edgeware: [
|
||||
@@ -30,14 +59,21 @@ export const knownGenesis: KnownGenesis = {
|
||||
'0x9b8cefc0eb5c568b527998bdd76c184e2b76ae561be76e4667072230217ea243'
|
||||
],
|
||||
hydradx: [
|
||||
'0xafdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d', // HydraDX Parachain
|
||||
'0xd2a620c27ec5cbc5621ff9a522689895074f7cca0d08e7134a7804e1a3ba86fc', // Snakenet Gen3-1
|
||||
'0x10af6e84234477d84dc572bac0789813b254aa490767ed06fb9591191d1073f9', // Snakenet Gen3
|
||||
'0x3d75507dd46301767e601265791da1d9cb47b6ebc94e87347b635e5bf58bd047', // Snakenet Gen2
|
||||
'0x0ed32bfcab4a83517fac88f2aa7cbc2f88d3ab93be9a12b6188a036bf8a943c2' // Snakenet Gen1
|
||||
],
|
||||
'interlay-parachain': [
|
||||
'0xbf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72'
|
||||
],
|
||||
karura: [
|
||||
'0xbaf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b'
|
||||
],
|
||||
khala: [
|
||||
'0xd43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d'
|
||||
],
|
||||
kulupu: [
|
||||
'0xf7a99d3cb92853d00d5275c971c132c074636256583fee53b3bbe60d7b8769ba'
|
||||
],
|
||||
@@ -46,14 +82,30 @@ export const knownGenesis: KnownGenesis = {
|
||||
'0xe3777fa922cafbff200cadeaea1a76bd7898ad5b89f7848999058b50e715f636', // Kusama CC2
|
||||
'0x3fd7b9eb6a00376e5be61f01abb429ffb0b104be05eaff4d458da48fcd425baf' // Kusama CC1
|
||||
],
|
||||
'nodle-chain': [
|
||||
'0xa3d114c2b8d0627c1aa9b134eafcf7d05ca561fdc19fb388bb9457f81809fb23'
|
||||
nodle: [
|
||||
'0x97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21'
|
||||
],
|
||||
origintrail: [
|
||||
'0xe7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174'
|
||||
],
|
||||
p3d: [
|
||||
'0x6c5894837ad89b6d92b114a2fb3eafa8fe3d26a54848e3447015442cd6ef4e66'
|
||||
],
|
||||
parallel: [
|
||||
'0xe61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97'
|
||||
],
|
||||
pendulum: [
|
||||
'0x5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86'
|
||||
],
|
||||
phala: [
|
||||
'0x1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736'
|
||||
],
|
||||
picasso: [
|
||||
'0x6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc',
|
||||
'0xe8e7f0f4c4f5a00720b4821dbfddefea7490bcf0b19009961cc46957984e2c1c'
|
||||
],
|
||||
plasm: [
|
||||
'0x3e86364d4b4894021cb2a0390bcf2feb5517d5292f2de2bb9404227e908b0b8b'
|
||||
polkadex: [
|
||||
'0x3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c'
|
||||
],
|
||||
polkadot: [
|
||||
'0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3'
|
||||
@@ -62,6 +114,8 @@ export const knownGenesis: KnownGenesis = {
|
||||
'0x6fbd74e5e1d0a61d52ccfe9d4adaed16dd3a7caa37c6bc4d0c2fa12e8b2f4063'
|
||||
],
|
||||
rococo: [
|
||||
'0x6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e',
|
||||
'0xaaf2cd1b74b5f726895921259421b534124726263982522174147046b8827897',
|
||||
'0x037f5f3c8e67b314062025fc886fcd6238ea25a4a9b45dce8d246815c9ebe770',
|
||||
'0xc196f81260cf1686172b47a79cf002120735d7cb0eb1474e8adce56618456fff',
|
||||
'0xf6e9983c37baf68846fedafe21e56718790e39fb1c582abc408b81bc7b208f9a',
|
||||
@@ -82,7 +136,29 @@ export const knownGenesis: KnownGenesis = {
|
||||
statemine: [
|
||||
'0x48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a'
|
||||
],
|
||||
statemint: [
|
||||
'0x68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f'
|
||||
],
|
||||
subsocial: [
|
||||
'0x0bd72c1c305172e1275278aaeb3f161e02eccb7a819e63f62d47bd53a28189f8'
|
||||
],
|
||||
ternoa: [
|
||||
'0x6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e'
|
||||
],
|
||||
unique: [
|
||||
'0x84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31'
|
||||
],
|
||||
vtb: [
|
||||
'0x286bc8414c7000ce1d6ee6a834e29a54c1784814b76243eb77ed0b2c5573c60f',
|
||||
'0x7483b89572fb2bd687c7b9a93b242d0b237f9aba463aba07ec24503931038aaa'
|
||||
],
|
||||
westend: [
|
||||
'0xe143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e'
|
||||
],
|
||||
xxnetwork: [
|
||||
'0x50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa'
|
||||
],
|
||||
zeitgeist: [
|
||||
'0x1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060'
|
||||
]
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KnownIcon } from '../types.js';
|
||||
|
||||
// these are icon overrides
|
||||
export const knownIcon: KnownIcon = {
|
||||
centrifuge: 'polkadot',
|
||||
kusama: 'polkadot',
|
||||
polkadot: 'polkadot',
|
||||
sora: 'polkadot',
|
||||
statemine: 'polkadot',
|
||||
statemint: 'polkadot',
|
||||
westmint: 'polkadot'
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { knownGenesis } from './genesis.js';
|
||||
export { knownIcon } from './icons.js';
|
||||
export { knownLedger } from './ledger.js';
|
||||
export { knownTestnet } from './testnets.js';
|
||||
@@ -0,0 +1,47 @@
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KnownLedger } from '../types.js';
|
||||
|
||||
// These match up with the keys of the ledgerApps object in the @polkadot/hw-ledger/defaults.ts
|
||||
// and maps to the known slip44 (minus the `0x8` hard derivation flag)
|
||||
//
|
||||
// NOTE: Any network here needs to have a genesisHash attached in the ./genesis.ts config
|
||||
export const knownLedger: KnownLedger = {
|
||||
acala: 0x00000313,
|
||||
ajuna: 0x00000162,
|
||||
'aleph-node': 0x00000283,
|
||||
astar: 0x0000032a,
|
||||
bifrost: 0x00000314,
|
||||
'bifrost-kusama': 0x00000314,
|
||||
centrifuge: 0x000002eb,
|
||||
composable: 0x00000162,
|
||||
darwinia: 0x00000162,
|
||||
'dock-mainnet': 0x00000252,
|
||||
edgeware: 0x0000020b,
|
||||
equilibrium: 0x05f5e0fd,
|
||||
genshiro: 0x05f5e0fc,
|
||||
hydradx: 0x00000162,
|
||||
'interlay-parachain': 0x00000162,
|
||||
karura: 0x000002ae,
|
||||
khala: 0x000001b2,
|
||||
kusama: 0x000001b2,
|
||||
nodle: 0x000003eb,
|
||||
origintrail: 0x00000162,
|
||||
parallel: 0x00000162,
|
||||
pendulum: 0x00000162,
|
||||
phala: 0x00000162,
|
||||
picasso: 0x000001b2,
|
||||
polkadex: 0x0000031f,
|
||||
polkadot: 0x00000162,
|
||||
polymesh: 0x00000253,
|
||||
sora: 0x00000269,
|
||||
stafi: 0x0000038b,
|
||||
statemine: 0x000001b2, // common-good on Kusama, shares derivation
|
||||
statemint: 0x00000162, // common-good on Polkadot, shares derivation
|
||||
ternoa: 0x00003e3,
|
||||
unique: 0x00000162,
|
||||
vtb: 0x000002b6,
|
||||
xxnetwork: 0x000007a3,
|
||||
zeitgeist: 0x00000162
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KnownTestnet } from '../types.js';
|
||||
|
||||
// testnets should not allow selection
|
||||
export const knownTestnet: KnownTestnet = {
|
||||
'': true, // this is the default non-network entry
|
||||
'cess-testnet': true,
|
||||
'dock-testnet': true,
|
||||
jupiter: true,
|
||||
'mathchain-testnet': true,
|
||||
p3dt: true,
|
||||
subspace_testnet: true,
|
||||
'zero-alphaville': true
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export default [];
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Do not edit, auto-generated by @polkadot/dev
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
|
||||
import others from './detectOther';
|
||||
import { packageInfo } from './packageInfo';
|
||||
import others from './detectOther.js';
|
||||
import { packageInfo } from './packageInfo.js';
|
||||
|
||||
detectPackage(packageInfo, null, others);
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
// Copyright 2017-2022 @polkadot/networks authors & contributors
|
||||
// Copyright 2017-2023 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { SubstrateNetwork } from './types';
|
||||
/// <reference types="@polkadot/dev-test/globals.d.ts" />
|
||||
|
||||
import { knownGenesis, knownIcon, knownLedger, knownTestnet } from './defaults';
|
||||
import { allNetworks, availableNetworks, selectableNetworks } from '.';
|
||||
import type { SubstrateNetwork } from './types.js';
|
||||
|
||||
import { knownGenesis, knownIcon, knownLedger, knownTestnet } from './defaults/index.js';
|
||||
import { allNetworks, availableNetworks, selectableNetworks } from './index.js';
|
||||
|
||||
describe('availableNetworks', (): void => {
|
||||
it('has the correct starting order', (): void => {
|
||||
@@ -12,7 +14,7 @@ describe('availableNetworks', (): void => {
|
||||
});
|
||||
|
||||
it('has a sorted list (first external, last external)', (): void => {
|
||||
expect(availableNetworks[3].displayName).toEqual('Acala');
|
||||
expect(availableNetworks[3].displayName).toEqual('3DP network');
|
||||
expect(availableNetworks[availableNetworks.length - 1].displayName).toEqual('ZERO');
|
||||
});
|
||||
|
||||
@@ -67,6 +69,26 @@ describe('availableNetworks', (): void => {
|
||||
)
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it('has all the correct fields', (): void => {
|
||||
expect(availableNetworks[0]).toEqual({
|
||||
decimals: [10],
|
||||
displayName: 'Polkadot Relay Chain',
|
||||
genesisHash: [
|
||||
'0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3'
|
||||
],
|
||||
hasLedgerSupport: true,
|
||||
icon: 'polkadot',
|
||||
isIgnored: false,
|
||||
isTestnet: false,
|
||||
network: 'polkadot',
|
||||
prefix: 0,
|
||||
slip44: 354,
|
||||
standardAccount: '*25519',
|
||||
symbols: ['DOT'],
|
||||
website: 'https://polkadot.network'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('allNetworks', (): void => {
|
||||
@@ -92,7 +114,7 @@ describe('selectableNetworks', (): void => {
|
||||
});
|
||||
|
||||
it('has a sorted list (first external, last external)', (): void => {
|
||||
expect(selectableNetworks[3].displayName).toEqual('Acala');
|
||||
expect(selectableNetworks[selectableNetworks.length - 1].displayName).toEqual('Stafi');
|
||||
expect(selectableNetworks[3].displayName).toEqual('3DP network');
|
||||
expect(selectableNetworks[selectableNetworks.length - 1].displayName).toEqual('Zeitgeist');
|
||||
});
|
||||
});
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user