@prosopo/scripts 0.2.40 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dev/scripts/src/contract/sources/dapp/411053b7ec79cc77f5ec9f5eb18610b24daaaaf0/dapp.wasm +0 -0
- package/dist/util/exec.d.ts.map +1 -1
- package/dist/util/exec.js.map +1 -1
- package/package.json +28 -28
- package/typedoc.config.js +6 -0
- package/dist/scripts/fluxDeploy.d.ts +0 -2
- package/dist/scripts/fluxDeploy.d.ts.map +0 -1
- package/dist/scripts/fluxDeploy.js +0 -140
- package/dist/scripts/fluxDeploy.js.map +0 -1
- package/dist/scripts/sep256k1Sign.d.ts +0 -4
- package/dist/scripts/sep256k1Sign.d.ts.map +0 -1
- package/dist/scripts/sep256k1Sign.js +0 -75
- package/dist/scripts/sep256k1Sign.js.map +0 -1
package/dev/scripts/src/contract/sources/dapp/411053b7ec79cc77f5ec9f5eb18610b24daaaaf0/dapp.wasm
ADDED
|
File without changes
|
package/dist/util/exec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/util/exec.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,eAAO,MAAM,IAAI,YACJ,MAAM,YACL;IACN,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB,KACF,QAAQ,UAAU,
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/util/exec.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,eAAO,MAAM,IAAI,YACJ,MAAM,YACL;IACN,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB,KACF,QAAQ,UAAU,CAmDpB,CAAA"}
|
package/dist/util/exec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/util/exec.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAQ/B,MAAM,CAAC,MAAM,IAAI,GAAG,CAChB,OAAe,EACf,OAGC,EACkB,EAAE;IACrB,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;IACtC,IAAI,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAA;IACjC,QAAQ,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAA;IAE7C,IAAI,QAAQ,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAA;KACnC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE;QACvB,KAAK,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,IAAI,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/util/exec.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAQ/B,MAAM,CAAC,MAAM,IAAI,GAAG,CAChB,OAAe,EACf,OAGC,EACkB,EAAE;IACrB,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;IACtC,IAAI,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAA;IACjC,QAAQ,GAAG,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAA;IAE7C,IAAI,QAAQ,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAA;KACnC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE;QACvB,KAAK,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,IAAI,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;QAK5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAG/B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;KAClC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAErB,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,IAAI;YAC1B,IAAI,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;aAClB;YACD,MAAM,MAAM,GAAe;gBACvB,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,IAAI;aACP,CAAA;YACD,IAAI,IAAI,KAAK,CAAC,EAAE;gBACZ,OAAO,CAAC,MAAM,CAAC,CAAA;aAClB;iBAAM;gBACH,MAAM,CAAC,MAAM,CAAC,CAAA;aACjB;QACL,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/scripts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Dev scripts for working with prosopo packages",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"scripts": {
|
|
12
12
|
"clean": "tsc --build --clean",
|
|
13
13
|
"build": "tsc --build --verbose",
|
|
14
|
-
"test": "
|
|
14
|
+
"test": "npx vitest run --config ./src/vite.config.ts",
|
|
15
15
|
"deploy": "node dist/deploy/protocol.js",
|
|
16
16
|
"cli": "node dist/cli/index.js",
|
|
17
17
|
"setup": "node dist/cli/index.js setup",
|
|
@@ -26,30 +26,30 @@
|
|
|
26
26
|
"license": "Apache-2.0",
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@iarna/toml": "^2.2.5",
|
|
29
|
-
"@polkadot/api": "10.11.
|
|
30
|
-
"@polkadot/api-contract": "10.11.
|
|
31
|
-
"@polkadot/types": "10.11.
|
|
32
|
-
"@polkadot/util-crypto": "12.6.
|
|
33
|
-
"@prosopo/api": "0.
|
|
34
|
-
"@prosopo/cli": "0.
|
|
35
|
-
"@prosopo/common": "0.
|
|
36
|
-
"@prosopo/config": "0.
|
|
37
|
-
"@prosopo/contract": "0.
|
|
38
|
-
"@prosopo/database": "0.
|
|
39
|
-
"@prosopo/datasets": "0.
|
|
40
|
-
"@prosopo/datasets-fs": "0.
|
|
41
|
-
"@prosopo/env": "0.
|
|
42
|
-
"@prosopo/file-server": "0.
|
|
43
|
-
"@prosopo/procaptcha": "0.
|
|
44
|
-
"@prosopo/procaptcha-bundle": "0.
|
|
45
|
-
"@prosopo/procaptcha-react": "0.
|
|
46
|
-
"@prosopo/provider": "0.
|
|
47
|
-
"@prosopo/server": "0.
|
|
48
|
-
"@prosopo/types": "0.
|
|
49
|
-
"@prosopo/types-database": "0.
|
|
50
|
-
"@prosopo/types-env": "0.
|
|
51
|
-
"@prosopo/captcha-contract": "0.
|
|
52
|
-
"@prosopo/util": "0.
|
|
29
|
+
"@polkadot/api": "10.11.2",
|
|
30
|
+
"@polkadot/api-contract": "10.11.2",
|
|
31
|
+
"@polkadot/types": "10.11.2",
|
|
32
|
+
"@polkadot/util-crypto": "12.6.2",
|
|
33
|
+
"@prosopo/api": "0.3.1",
|
|
34
|
+
"@prosopo/cli": "0.3.1",
|
|
35
|
+
"@prosopo/common": "0.3.1",
|
|
36
|
+
"@prosopo/config": "0.3.1",
|
|
37
|
+
"@prosopo/contract": "0.3.1",
|
|
38
|
+
"@prosopo/database": "0.3.1",
|
|
39
|
+
"@prosopo/datasets": "0.3.1",
|
|
40
|
+
"@prosopo/datasets-fs": "0.3.1",
|
|
41
|
+
"@prosopo/env": "0.3.1",
|
|
42
|
+
"@prosopo/file-server": "0.3.1",
|
|
43
|
+
"@prosopo/procaptcha": "0.3.1",
|
|
44
|
+
"@prosopo/procaptcha-bundle": "0.3.1",
|
|
45
|
+
"@prosopo/procaptcha-react": "0.3.1",
|
|
46
|
+
"@prosopo/provider": "0.3.1",
|
|
47
|
+
"@prosopo/server": "0.3.1",
|
|
48
|
+
"@prosopo/types": "0.3.1",
|
|
49
|
+
"@prosopo/types-database": "0.3.1",
|
|
50
|
+
"@prosopo/types-env": "0.3.1",
|
|
51
|
+
"@prosopo/captcha-contract": "0.3.1",
|
|
52
|
+
"@prosopo/util": "0.3.1",
|
|
53
53
|
"consola": "^3.2.3",
|
|
54
54
|
"dotenv": "^16.0.3",
|
|
55
55
|
"glob": "^10.0.0",
|
|
@@ -59,13 +59,13 @@
|
|
|
59
59
|
"yargs-parser": "^21.0.1"
|
|
60
60
|
},
|
|
61
61
|
"overrides": {
|
|
62
|
-
"@polkadot/keyring": "12.6.
|
|
62
|
+
"@polkadot/keyring": "12.6.2"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@esm-bundle/chai": "^4.3.4-fix.0",
|
|
66
66
|
"ts-node": "^10.9.1",
|
|
67
67
|
"tslib": "2.6.2",
|
|
68
68
|
"typescript": "5.1.6",
|
|
69
|
-
"vitest": "^
|
|
69
|
+
"vitest": "^1.3.1"
|
|
70
70
|
}
|
|
71
71
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fluxDeploy.d.ts","sourceRoot":"","sources":["../../src/scripts/fluxDeploy.ts"],"names":[],"mappings":"AAqGA,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAEhG"}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { ProsopoApiError, ProsopoEnvError, ProsopoError, getLogger } from '@prosopo/common';
|
|
2
|
-
import { at } from '@prosopo/util';
|
|
3
|
-
import { base64Encode } from '@polkadot/util-crypto';
|
|
4
|
-
import { loadEnv } from '@prosopo/cli';
|
|
5
|
-
import { sign, wifToPrivateKey } from './sep256k1Sign.js';
|
|
6
|
-
import qs from 'qs';
|
|
7
|
-
const log = getLogger(`Info`, `fluxDeploy.js`);
|
|
8
|
-
export async function streamToJson(stream) {
|
|
9
|
-
return await new Response(stream).json();
|
|
10
|
-
}
|
|
11
|
-
const errorHandler = async (response) => {
|
|
12
|
-
if (!response.ok) {
|
|
13
|
-
throw new ProsopoApiError('API.BAD_REQUEST', { context: { error: `HTTP error! status: ${response.status}` } });
|
|
14
|
-
}
|
|
15
|
-
if (response.body && !response.bodyUsed) {
|
|
16
|
-
const data = await streamToJson(response.body);
|
|
17
|
-
if (data.status === 'error') {
|
|
18
|
-
throw new ProsopoApiError('API.BAD_REQUEST', {
|
|
19
|
-
context: { error: `HTTP error! status: ${data.data.message} ` },
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
return data;
|
|
23
|
-
}
|
|
24
|
-
return {};
|
|
25
|
-
};
|
|
26
|
-
const getLoginPhrase = async (url) => {
|
|
27
|
-
const apiURL = new URL(`${url || 'https://api.runonflux.io/'}id/loginphrase`);
|
|
28
|
-
log.info('Calling:', apiURL.href);
|
|
29
|
-
const response = await fetch(apiURL.toString());
|
|
30
|
-
return (await errorHandler(response)).data;
|
|
31
|
-
};
|
|
32
|
-
const getFluxAppsDetails = async (zelId, signature, loginPhrase) => {
|
|
33
|
-
const apiUrl = `https://jetpackbridge.runonflux.io/api/v1/dapps.php?filter=&zelid=${zelId}&signature=${signature}&loginPhrase=${loginPhrase}`;
|
|
34
|
-
const response = await fetch(apiUrl);
|
|
35
|
-
return await errorHandler(response);
|
|
36
|
-
};
|
|
37
|
-
const getIndividualFluxAppDetails = async (dappName, zelId, signature, loginPhrase) => {
|
|
38
|
-
const apiUrl = `https://jetpackbridge.runonflux.io/api/v1/dapps.php?dapp=${dappName}&zelid=${zelId}&signature=${signature}&loginPhrase=${loginPhrase}`;
|
|
39
|
-
const response = await fetch(apiUrl);
|
|
40
|
-
return await errorHandler(response);
|
|
41
|
-
};
|
|
42
|
-
const getFluxOSURLs = async (dappName, zelId, signature, loginPhrase) => {
|
|
43
|
-
const data = await getIndividualFluxAppDetails(dappName, zelId, signature, loginPhrase);
|
|
44
|
-
return Object.values(data.nodes).map((node) => node.fluxos);
|
|
45
|
-
};
|
|
46
|
-
const verifyLogin = async (zelid, signature, loginPhrase, url) => {
|
|
47
|
-
const apiUrl = new URL(`${url || 'api.runonflux.io/'}id/verifylogin`).toString();
|
|
48
|
-
const data = qs.stringify({
|
|
49
|
-
zelid,
|
|
50
|
-
signature,
|
|
51
|
-
loginPhrase,
|
|
52
|
-
});
|
|
53
|
-
log.info('Data:', data);
|
|
54
|
-
log.info('apiUrl:', apiUrl);
|
|
55
|
-
const response = await fetch(apiUrl, {
|
|
56
|
-
method: 'POST',
|
|
57
|
-
body: data,
|
|
58
|
-
headers: { 'Content-Type': `application/x-www-form-urlencoded` },
|
|
59
|
-
});
|
|
60
|
-
return await errorHandler(response);
|
|
61
|
-
};
|
|
62
|
-
const softRedeploy = async (zelid, signature, loginPhrase, url, appName) => {
|
|
63
|
-
const apiUrl = new URL(`${url}apps/redeploy/${appName}/false/true`).toString();
|
|
64
|
-
const Zelidauth = qs.stringify({
|
|
65
|
-
zelid,
|
|
66
|
-
signature,
|
|
67
|
-
loginPhrase,
|
|
68
|
-
});
|
|
69
|
-
const response = await fetch(apiUrl, {
|
|
70
|
-
method: 'GET',
|
|
71
|
-
headers: {
|
|
72
|
-
Zelidauth: Zelidauth,
|
|
73
|
-
},
|
|
74
|
-
});
|
|
75
|
-
return await errorHandler(response);
|
|
76
|
-
};
|
|
77
|
-
const setupArgs = () => {
|
|
78
|
-
const appName = process.argv.slice(2)[0];
|
|
79
|
-
if (!appName) {
|
|
80
|
-
throw new ProsopoError(Error('Please provide an app name'));
|
|
81
|
-
}
|
|
82
|
-
const secretWIFKey = process.env.PROSOPO_ZELCORE_PRIVATE_KEY;
|
|
83
|
-
if (!secretWIFKey) {
|
|
84
|
-
throw new ProsopoEnvError('DEVELOPER.MISSING_ENV_VARIABLE', {
|
|
85
|
-
context: { missingEnvVars: ['PROSOPO_ZELCORE_PRIVATE_KEY'] },
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
const zelId = process.env.PROSOPO_ZELCORE_PUBLIC_KEY;
|
|
89
|
-
if (!zelId) {
|
|
90
|
-
throw new ProsopoEnvError('DEVELOPER.MISSING_ENV_VARIABLE', {
|
|
91
|
-
context: { missingEnvVars: ['PROSOPO_ZELCORE_PUBLIC_KEY'] },
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
const secretKey = wifToPrivateKey(secretWIFKey);
|
|
95
|
-
return { appName, secretKey, zelId };
|
|
96
|
-
};
|
|
97
|
-
const getNodeAPIURL = (nodeUIURL) => {
|
|
98
|
-
const port = at(nodeUIURL.split(':'), 1);
|
|
99
|
-
const portLogin = Number(port) + 1;
|
|
100
|
-
const nodeAPIURL = new URL(`http://${nodeUIURL.replace(port, portLogin.toString())}`);
|
|
101
|
-
log.info('Node API URL:', nodeAPIURL);
|
|
102
|
-
return new URL(`http://${nodeUIURL.replace(port, portLogin.toString())}`);
|
|
103
|
-
};
|
|
104
|
-
const getNode = async (appName, zelId, secretKey) => {
|
|
105
|
-
const loginPhrase = await getLoginPhrase();
|
|
106
|
-
log.info('Login Phrase:', loginPhrase);
|
|
107
|
-
const signature = base64Encode(await sign(loginPhrase, { secretKey }));
|
|
108
|
-
log.info('Signature:', signature);
|
|
109
|
-
const individualNodeIPs = await getFluxOSURLs(appName, zelId, signature, loginPhrase);
|
|
110
|
-
log.info('Individual Node IPs:', individualNodeIPs);
|
|
111
|
-
const node = individualNodeIPs[Math.floor(Math.random() * individualNodeIPs.length)];
|
|
112
|
-
if (!node) {
|
|
113
|
-
throw new ProsopoError('DEVELOPER.GENERAL', {
|
|
114
|
-
context: { error: 'Failed to randomly select node', appName, zelId, individualNodeIPs },
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
log.info('Node:', node);
|
|
118
|
-
return node;
|
|
119
|
-
};
|
|
120
|
-
(async () => {
|
|
121
|
-
try {
|
|
122
|
-
loadEnv();
|
|
123
|
-
const { appName, secretKey, zelId } = setupArgs();
|
|
124
|
-
const nodeUIURL = await getNode(appName, zelId, secretKey);
|
|
125
|
-
const nodeAPIURL = getNodeAPIURL(nodeUIURL);
|
|
126
|
-
const nodeLoginPhrase = await getLoginPhrase(nodeAPIURL);
|
|
127
|
-
log.info('Node Login Phrase:', nodeLoginPhrase);
|
|
128
|
-
const nodeSignature = base64Encode(await sign(nodeLoginPhrase, { secretKey }));
|
|
129
|
-
log.info('Node Signature:', nodeSignature);
|
|
130
|
-
await verifyLogin(zelId, nodeSignature, nodeLoginPhrase, nodeAPIURL);
|
|
131
|
-
const redeployResponse = await softRedeploy(zelId, nodeSignature, nodeLoginPhrase, nodeAPIURL, appName);
|
|
132
|
-
log.info(redeployResponse);
|
|
133
|
-
process.exit(0);
|
|
134
|
-
}
|
|
135
|
-
catch (error) {
|
|
136
|
-
log.error('An error occurred:', error);
|
|
137
|
-
process.exit(1);
|
|
138
|
-
}
|
|
139
|
-
})();
|
|
140
|
-
//# sourceMappingURL=fluxDeploy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fluxDeploy.js","sourceRoot":"","sources":["../../src/scripts/fluxDeploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sep256k1Sign.d.ts","sourceRoot":"","sources":["../../src/scripts/sep256k1Sign.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AA6BrD,wBAAsB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,uBAc1E;AAMD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAmBvD"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { BN_BE_256_OPTS } from '@polkadot/util-crypto/bn';
|
|
2
|
-
import { ProsopoEnvError } from '@prosopo/common';
|
|
3
|
-
import { at } from '@prosopo/util';
|
|
4
|
-
import { base58Decode, base64Encode, cryptoWaitReady, sha256AsU8a } from '@polkadot/util-crypto';
|
|
5
|
-
import { bnToU8a, hexToU8a, u8aConcat, u8aToHex } from '@polkadot/util';
|
|
6
|
-
import { isMain } from '@prosopo/util';
|
|
7
|
-
import { loadEnv } from '@prosopo/cli';
|
|
8
|
-
import { secp256k1 } from '@noble/curves/secp256k1';
|
|
9
|
-
import varuint from 'varuint-bitcoin';
|
|
10
|
-
loadEnv();
|
|
11
|
-
const MESSAGE_MAGIC = '\u0018Bitcoin Signed Message:\n';
|
|
12
|
-
function hash256(buffer) {
|
|
13
|
-
return Buffer.from(sha256AsU8a(sha256AsU8a(buffer)));
|
|
14
|
-
}
|
|
15
|
-
function hasher(message, messagePrefix) {
|
|
16
|
-
messagePrefix = messagePrefix || '\u0018Bitcoin Signed Message:\n';
|
|
17
|
-
const messagePrefixBuffer = Buffer.from(messagePrefix, 'utf8');
|
|
18
|
-
const messageBuffer = Buffer.from(message, 'utf8');
|
|
19
|
-
const messageVISize = varuint.encodingLength(messageBuffer.length);
|
|
20
|
-
const buffer = Buffer.allocUnsafe(messagePrefix.length + messageVISize + messageBuffer.length);
|
|
21
|
-
messagePrefixBuffer.copy(buffer, 0);
|
|
22
|
-
varuint.encode(messageBuffer.length, buffer, messagePrefixBuffer.length);
|
|
23
|
-
messageBuffer.copy(buffer, messagePrefixBuffer.length + messageVISize);
|
|
24
|
-
return hash256(buffer);
|
|
25
|
-
}
|
|
26
|
-
export async function sign(message, { secretKey }) {
|
|
27
|
-
if (!secretKey)
|
|
28
|
-
throw new ProsopoEnvError('DEVELOPER.MISSING_SECRET_KEY', {
|
|
29
|
-
context: { error: 'No secret key provided', failedFuncName: sign.name },
|
|
30
|
-
});
|
|
31
|
-
await cryptoWaitReady();
|
|
32
|
-
const data = hasher(message, MESSAGE_MAGIC);
|
|
33
|
-
const signature = secp256k1.sign(data, secretKey);
|
|
34
|
-
return u8aConcat(Buffer.alloc(1, signature.recovery + 4 + 27), bnToU8a(signature.r, BN_BE_256_OPTS), bnToU8a(signature.s, BN_BE_256_OPTS));
|
|
35
|
-
}
|
|
36
|
-
export function wifToPrivateKey(wif) {
|
|
37
|
-
let substractLength;
|
|
38
|
-
if (wif.length === 51) {
|
|
39
|
-
substractLength = 8;
|
|
40
|
-
}
|
|
41
|
-
else if (wif.length === 52) {
|
|
42
|
-
substractLength = 10;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
throw new ProsopoEnvError('DEVELOPER.GENERAL', {
|
|
46
|
-
context: { error: 'Invalid WIF', failedFuncName: wifToPrivateKey.name },
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
const secretKeyHexLong = u8aToHex(base58Decode(wif));
|
|
50
|
-
const secretKeyHex = `0x${secretKeyHexLong.substring(4, secretKeyHexLong.length - substractLength)}`;
|
|
51
|
-
return hexToU8a(secretKeyHex);
|
|
52
|
-
}
|
|
53
|
-
if (isMain(import.meta.url)) {
|
|
54
|
-
const secretKey = wifToPrivateKey(process.env.PROSOPO_ZELCORE_PRIVATE_KEY || '');
|
|
55
|
-
const publicKey = base58Decode(process.env.PROSOPO_ZELCORE_PUBLIC_KEY || '');
|
|
56
|
-
const keypair = { secretKey, publicKey };
|
|
57
|
-
const message = at(process.argv.slice(2), 0).trim();
|
|
58
|
-
if (message.length === 0) {
|
|
59
|
-
console.error('No message provided');
|
|
60
|
-
process.exit();
|
|
61
|
-
}
|
|
62
|
-
sign(message, keypair)
|
|
63
|
-
.then((sig) => {
|
|
64
|
-
const hexSig = u8aToHex(sig);
|
|
65
|
-
console.log(`Hex Signature : ${hexSig}`);
|
|
66
|
-
console.log(`Public Key: ${publicKey}`);
|
|
67
|
-
console.log(`Base64 Signature: ${base64Encode(hexSig)}`);
|
|
68
|
-
process.exit();
|
|
69
|
-
})
|
|
70
|
-
.catch((error) => {
|
|
71
|
-
console.error(error);
|
|
72
|
-
process.exit();
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=sep256k1Sign.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sep256k1Sign.js","sourceRoot":"","sources":["../../src/scripts/sep256k1Sign.ts"],"names":[],"mappings":"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"}
|