@xelis/sdk 0.11.14 → 0.11.16
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/dist/cjs/address/bech32.js +47 -56
- package/dist/cjs/address/index.js +20 -21
- package/dist/cjs/config.js +26 -38
- package/dist/cjs/contract/contract.js +178 -0
- package/dist/cjs/contract/typed_contract.js +259 -0
- package/dist/cjs/contract/xvm_serializer.js +170 -0
- package/dist/cjs/daemon/rpc.js +157 -168
- package/dist/cjs/daemon/types.js +4 -1
- package/dist/cjs/daemon/websocket.js +170 -181
- package/dist/cjs/data/element.js +39 -41
- package/dist/cjs/data/value.js +106 -111
- package/dist/cjs/react/daemon.js +33 -43
- package/dist/cjs/rpc/http.js +75 -132
- package/dist/cjs/rpc/parse_json/parse_json.js +4 -4
- package/dist/cjs/rpc/types.js +1 -1
- package/dist/cjs/rpc/websocket.js +131 -201
- package/dist/cjs/wallet/rpc.js +98 -117
- package/dist/cjs/wallet/types.js +1 -1
- package/dist/cjs/wallet/websocket.js +105 -126
- package/dist/cjs/xswd/relayer/app.js +57 -36
- package/dist/cjs/xswd/relayer/index.js +25 -27
- package/dist/cjs/xswd/types.js +1 -1
- package/dist/cjs/xswd/websocket.js +15 -33
- package/dist/esm/address/bech32.js +46 -55
- package/dist/esm/address/index.js +16 -17
- package/dist/esm/config.js +25 -37
- package/dist/esm/contract/contract.js +172 -0
- package/dist/esm/contract/typed_contract.js +251 -0
- package/dist/esm/contract/xvm_serializer.js +163 -0
- package/dist/esm/daemon/rpc.js +153 -165
- package/dist/esm/daemon/types.js +3 -0
- package/dist/esm/daemon/websocket.js +166 -179
- package/dist/esm/data/element.js +37 -40
- package/dist/esm/data/value.js +104 -112
- package/dist/esm/react/daemon.js +30 -40
- package/dist/esm/rpc/http.js +73 -131
- package/dist/esm/rpc/parse_json/parse_json.js +1 -1
- package/dist/esm/rpc/websocket.js +126 -197
- package/dist/esm/wallet/rpc.js +93 -113
- package/dist/esm/wallet/websocket.js +101 -124
- package/dist/esm/xswd/relayer/app.js +54 -34
- package/dist/esm/xswd/relayer/index.js +22 -24
- package/dist/esm/xswd/websocket.js +10 -29
- package/dist/types/contract/contract.d.ts +80 -0
- package/dist/types/contract/typed_contract.d.ts +94 -0
- package/dist/types/contract/xvm_serializer.d.ts +69 -0
- package/dist/types/daemon/rpc.d.ts +5 -2
- package/dist/types/daemon/types.d.ts +99 -20
- package/dist/types/daemon/websocket.d.ts +5 -2
- package/dist/types/wallet/types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -2,66 +2,87 @@
|
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
|
-
exports
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.App = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _this = this;
|
|
7
|
+
const qrcode_1 = __importDefault(require("qrcode"));
|
|
8
|
+
class App {
|
|
9
|
+
constructor(relayer) {
|
|
11
10
|
this.relayer = relayer;
|
|
12
|
-
this.element = document.createElement(
|
|
13
|
-
this.element.classList.add(
|
|
14
|
-
this.contentElement = document.createElement(
|
|
15
|
-
this.contentElement.classList.add(
|
|
11
|
+
this.element = document.createElement(`div`);
|
|
12
|
+
this.element.classList.add(`xelis-xswd-relayer`);
|
|
13
|
+
this.contentElement = document.createElement(`div`);
|
|
14
|
+
this.contentElement.classList.add(`xelis-xswd-relayer-content`);
|
|
16
15
|
this.element.appendChild(this.contentElement);
|
|
17
|
-
this.loadingElement = document.createElement(
|
|
18
|
-
this.loadingElement.innerHTML =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
16
|
+
this.loadingElement = document.createElement(`div`);
|
|
17
|
+
this.loadingElement.innerHTML = `
|
|
18
|
+
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
19
|
+
<path d="M20.0001 12C20.0001 13.3811 19.6425 14.7386 18.9623 15.9405C18.282 17.1424 17.3022 18.1477 16.1182 18.8587C14.9341 19.5696 13.5862 19.9619 12.2056 19.9974C10.825 20.0328 9.45873 19.7103 8.23975 19.0612" stroke="currentColor" stroke-width="3.55556" stroke-linecap="round"/>
|
|
20
|
+
</svg>
|
|
21
|
+
`;
|
|
22
|
+
this.loadingElement.classList.add(`xelis-xswd-relayer-loading`);
|
|
23
|
+
this.errElement = document.createElement(`div`);
|
|
24
|
+
this.errElement.classList.add(`xelis-xswd-relayer-error`);
|
|
25
|
+
this.qrCodeElement = document.createElement(`div`);
|
|
26
|
+
this.qrCodeElement.classList.add(`xelis-xswd-relayer-qrcode`);
|
|
27
|
+
this.qrCodeElement.innerHTML = `
|
|
28
|
+
<div class="xelis-xswd-relayer-scan-logo">
|
|
29
|
+
<svg fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
30
|
+
<path d="M4,4h6v6H4V4M20,4v6H14V4h6M14,15h2V13H14V11h2v2h2V11h2v2H18v2h2v3H18v2H16V18H13v2H11V16h3V15m2,0v3h2V15H16M4,20V14h6v6H4M6,6V8H8V6H6M16,6V8h2V6H16M6,16v2H8V16H6M4,11H6v2H4V11m5,0h4v4H11V13H9V11m2-5h2v4H11V6M2,2V6H0V2A2,2,0,0,1,2,0H6V2H2M22,0a2,2,0,0,1,2,2V6H22V2H18V0h4M2,18v4H6v2H2a2,2,0,0,1-2-2V18H2m20,4V18h2v4a2,2,0,0,1-2,2H18V22Z"/>
|
|
31
|
+
</svg>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="xelis-xswd-relayer-logo-wrap">
|
|
34
|
+
<div class="xelis-xswd-relayer-logo">
|
|
35
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 778 743" fill="currentColor">
|
|
36
|
+
<path fillRule="evenodd" clipRule="evenodd" d="M388.909 742.872L777.817 353.964L424.056 0.202599L478.809 132.737L700.036 353.964L388.909 665.091L77.7817 353.964L299.507 129.121L353.964 0L0 353.964L388.909 742.872Z" />
|
|
37
|
+
<path d="M388.909 665.091L353.964 0L299.507 129.121L388.909 665.091Z" />
|
|
38
|
+
<path d="M424.056 0.202599L388.909 665.091L478.809 132.737L424.056 0.202599Z" />
|
|
39
|
+
</svg>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="xelis-xswd-relayer-title">XSWD Relayer</div>
|
|
43
|
+
<canvas></canvas>
|
|
44
|
+
`;
|
|
45
|
+
this.element.addEventListener(`click`, (e) => {
|
|
26
46
|
// close the app if clicking outside
|
|
27
|
-
if (
|
|
28
|
-
|
|
47
|
+
if (this.element.isEqualNode(e.target)) {
|
|
48
|
+
this.relayer.close();
|
|
29
49
|
}
|
|
30
50
|
});
|
|
31
51
|
this.relayer.props.parent.appendChild(this.element);
|
|
32
52
|
this.setLoading();
|
|
33
53
|
}
|
|
34
|
-
|
|
54
|
+
clear() {
|
|
35
55
|
this.loadingElement.remove();
|
|
36
56
|
this.errElement.remove();
|
|
37
57
|
this.qrCodeElement.remove();
|
|
38
|
-
}
|
|
39
|
-
|
|
58
|
+
}
|
|
59
|
+
setError(msg) {
|
|
40
60
|
this.clear();
|
|
41
|
-
this.errElement.innerHTML =
|
|
61
|
+
this.errElement.innerHTML = `
|
|
62
|
+
<div class="xelis-xswd-relayer-error-text">error: ${msg}</div>
|
|
63
|
+
`;
|
|
42
64
|
this.contentElement.appendChild(this.errElement);
|
|
43
|
-
}
|
|
44
|
-
|
|
65
|
+
}
|
|
66
|
+
setLoading() {
|
|
45
67
|
this.clear();
|
|
46
68
|
this.contentElement.appendChild(this.loadingElement);
|
|
47
|
-
}
|
|
48
|
-
|
|
69
|
+
}
|
|
70
|
+
setQRCode(channelId) {
|
|
49
71
|
this.clear();
|
|
50
|
-
|
|
51
|
-
|
|
72
|
+
const canvas = this.qrCodeElement.querySelector(`canvas`);
|
|
73
|
+
const qrCodeData = JSON.stringify({
|
|
52
74
|
inner: {},
|
|
53
75
|
channel_id: channelId,
|
|
54
76
|
relayer: this.relayer.props.url,
|
|
55
77
|
encryption_mode: this.relayer.props.encryption_mode
|
|
56
78
|
});
|
|
57
|
-
qrcode_1
|
|
79
|
+
qrcode_1.default.toCanvas(canvas, qrCodeData, {
|
|
58
80
|
color: {
|
|
59
|
-
dark:
|
|
60
|
-
light:
|
|
81
|
+
dark: `#fff`,
|
|
82
|
+
light: `#000` // background
|
|
61
83
|
}
|
|
62
84
|
});
|
|
63
85
|
this.contentElement.appendChild(this.qrCodeElement);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
}());
|
|
86
|
+
}
|
|
87
|
+
}
|
|
67
88
|
exports.App = App;
|
|
@@ -1,48 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
exports
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
_this.app.setError("timeout occured (did not receive any message)");
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const app_1 = require("./app");
|
|
4
|
+
class Relayer {
|
|
5
|
+
constructor(props) {
|
|
6
|
+
this.onOpen = (e) => {
|
|
7
|
+
this.message_timeout = window.setTimeout(() => {
|
|
8
|
+
this.app.setError("timeout occured (did not receive any message)");
|
|
10
9
|
}, 3000);
|
|
11
10
|
};
|
|
12
|
-
this.onMessage =
|
|
13
|
-
window.clearTimeout(
|
|
11
|
+
this.onMessage = (e) => {
|
|
12
|
+
window.clearTimeout(this.message_timeout);
|
|
14
13
|
try {
|
|
15
14
|
console.log(e);
|
|
16
|
-
|
|
15
|
+
const data = JSON.parse(e.data);
|
|
17
16
|
if (data.channel_id) {
|
|
18
|
-
|
|
17
|
+
this.app.setQRCode(data.channel_id);
|
|
19
18
|
}
|
|
20
19
|
else {
|
|
21
|
-
|
|
20
|
+
this.app.setError("channel id not found");
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
23
|
catch (e) {
|
|
25
|
-
|
|
24
|
+
this.app.setError("invalid data format");
|
|
26
25
|
}
|
|
27
26
|
};
|
|
28
|
-
this.onError =
|
|
29
|
-
|
|
27
|
+
this.onError = (e) => {
|
|
28
|
+
this.app.setError("connection failed");
|
|
30
29
|
};
|
|
31
|
-
this.onClose =
|
|
32
|
-
|
|
30
|
+
this.onClose = (e) => {
|
|
31
|
+
this.app.setError("connection closed");
|
|
33
32
|
};
|
|
34
33
|
this.props = props;
|
|
35
34
|
this.app = new app_1.App(this);
|
|
36
35
|
this.ws = new WebSocket(this.props.url);
|
|
37
|
-
this.ws.addEventListener(
|
|
38
|
-
this.ws.addEventListener(
|
|
39
|
-
this.ws.addEventListener(
|
|
40
|
-
this.ws.addEventListener(
|
|
36
|
+
this.ws.addEventListener(`open`, this.onOpen);
|
|
37
|
+
this.ws.addEventListener(`message`, this.onMessage);
|
|
38
|
+
this.ws.addEventListener(`error`, this.onError);
|
|
39
|
+
this.ws.addEventListener(`close`, this.onClose);
|
|
41
40
|
}
|
|
42
|
-
|
|
41
|
+
close() {
|
|
43
42
|
this.ws.close();
|
|
44
43
|
this.app.element.remove();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
exports["default"] = Relayer;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.default = Relayer;
|
package/dist/cjs/xswd/types.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
exports
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -1,38 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
exports.__esModule = true;
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
3
|
exports.WS = void 0;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
_this.wallet = new websocket_3.WalletMethods(_this, "wallet.");
|
|
29
|
-
return _this;
|
|
4
|
+
const websocket_1 = require("../rpc/websocket");
|
|
5
|
+
const websocket_2 = require("../daemon/websocket");
|
|
6
|
+
const websocket_3 = require("../wallet/websocket");
|
|
7
|
+
class WS extends websocket_1.WSRPC {
|
|
8
|
+
constructor(endpoint) {
|
|
9
|
+
super(endpoint);
|
|
10
|
+
this.callTimeout = 0; // xswd needs user input for confirmation - timeout should not be used
|
|
11
|
+
this.daemon = new websocket_2.DaemonMethods(this, "node.");
|
|
12
|
+
this.wallet = new websocket_3.WalletMethods(this, "wallet.");
|
|
30
13
|
}
|
|
31
|
-
|
|
32
|
-
|
|
14
|
+
authorize(app) {
|
|
15
|
+
const data = JSON.stringify(app);
|
|
33
16
|
return this.rawCall(0, data);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
}(websocket_1.WSRPC));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
37
19
|
exports.WS = WS;
|
|
38
|
-
exports
|
|
20
|
+
exports.default = WS;
|
|
@@ -1,41 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
|
-
var CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
|
11
|
-
var GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
|
|
12
|
-
var SEPARTOR = ":";
|
|
1
|
+
const CHARSET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
|
|
2
|
+
const GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
|
|
3
|
+
const SEPARTOR = ":";
|
|
13
4
|
var ErrHrpMixCase = "mix case is not allowed in human readable part";
|
|
14
5
|
var ErrInvalidChecksum = "invalid checksum";
|
|
15
6
|
var ErrNonZeroPadding = "non zero padding";
|
|
16
7
|
var ErrIllegalZeroPadding = "illegal zero padding";
|
|
17
8
|
var ErrHrpEmpty = "human readable part is empty";
|
|
18
9
|
function ErrSeparatorInvalidPosition(pos) {
|
|
19
|
-
return
|
|
10
|
+
return `invalid separator position: ${pos}`;
|
|
20
11
|
}
|
|
21
12
|
function ErrHrpInvalidCharacter(c) {
|
|
22
|
-
return
|
|
13
|
+
return `invalid character value in human readable part: ${c}`;
|
|
23
14
|
}
|
|
24
15
|
function ErrInvalidIndex(index) {
|
|
25
|
-
return
|
|
16
|
+
return `invalid index ${index}`;
|
|
26
17
|
}
|
|
27
18
|
function ErrInvalidValue(value, max) {
|
|
28
|
-
return
|
|
19
|
+
return `invalid value: ${value}, max is ${max}`;
|
|
29
20
|
}
|
|
30
21
|
function ErrInvalidDataRange(value, from) {
|
|
31
|
-
return
|
|
22
|
+
return `invalid data range: ${value}, max is ${from}`;
|
|
32
23
|
}
|
|
33
24
|
function polymod(values) {
|
|
34
|
-
|
|
35
|
-
values.forEach(
|
|
36
|
-
|
|
25
|
+
let chk = 1;
|
|
26
|
+
values.forEach((value) => {
|
|
27
|
+
let top = chk >> 25;
|
|
37
28
|
chk = ((chk & 0x1ffffff) << 5) ^ value;
|
|
38
|
-
GENERATOR.forEach(
|
|
29
|
+
GENERATOR.forEach((item, i) => {
|
|
39
30
|
if (((top >> i) & 1) === 1) {
|
|
40
31
|
chk ^= item;
|
|
41
32
|
}
|
|
@@ -44,34 +35,34 @@ function polymod(values) {
|
|
|
44
35
|
return chk;
|
|
45
36
|
}
|
|
46
37
|
function hrpExpand(hrp) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
bytes.forEach(
|
|
38
|
+
let encoder = new TextEncoder();
|
|
39
|
+
let bytes = encoder.encode(hrp);
|
|
40
|
+
let result = [];
|
|
41
|
+
bytes.forEach((c) => result.push(c >> 5));
|
|
51
42
|
result.push(0);
|
|
52
|
-
bytes.forEach(
|
|
43
|
+
bytes.forEach((c) => result.push(c & 31));
|
|
53
44
|
return result;
|
|
54
45
|
}
|
|
55
46
|
function verifyChecksum(hrp, data) {
|
|
56
|
-
|
|
57
|
-
vec =
|
|
47
|
+
let vec = hrpExpand(hrp);
|
|
48
|
+
vec = [...vec, ...data];
|
|
58
49
|
return polymod(vec) === 1;
|
|
59
50
|
}
|
|
60
51
|
function createChecksum(hrp, data) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
for (
|
|
52
|
+
let result = [0, 0, 0, 0, 0, 0];
|
|
53
|
+
let values = [...hrpExpand(hrp), ...data, ...result];
|
|
54
|
+
let pm = polymod(values) ^ 1;
|
|
55
|
+
for (let i = 0; i < 6; i++) {
|
|
65
56
|
result[i] = pm >> (5 * (5 - i)) & 31;
|
|
66
57
|
}
|
|
67
58
|
return result;
|
|
68
59
|
}
|
|
69
60
|
export function convertBits(data, from, to, pad) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
data.forEach(
|
|
61
|
+
let result = [];
|
|
62
|
+
let acc = 0;
|
|
63
|
+
let bits = 0;
|
|
64
|
+
let maxValue = (1 << to) - 1;
|
|
65
|
+
data.forEach((value) => {
|
|
75
66
|
if (value >> from !== 0) {
|
|
76
67
|
throw ErrInvalidDataRange(value, from);
|
|
77
68
|
}
|
|
@@ -99,25 +90,25 @@ export function decode(bech) {
|
|
|
99
90
|
if (bech.toUpperCase() !== bech && bech.toLowerCase() !== bech) {
|
|
100
91
|
throw ErrHrpMixCase;
|
|
101
92
|
}
|
|
102
|
-
|
|
93
|
+
let pos = bech.indexOf(SEPARTOR);
|
|
103
94
|
if (pos < 1 || pos + 7 > bech.length) {
|
|
104
95
|
throw ErrSeparatorInvalidPosition(pos);
|
|
105
96
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
hrpBytes.forEach(
|
|
97
|
+
let hrp = bech.substring(0, pos);
|
|
98
|
+
let encoder = new TextEncoder();
|
|
99
|
+
let hrpBytes = encoder.encode(hrp);
|
|
100
|
+
let decoded = [];
|
|
101
|
+
hrpBytes.forEach((value) => {
|
|
111
102
|
if (value < 33 || value > 126) {
|
|
112
103
|
throw ErrHrpInvalidCharacter(value);
|
|
113
104
|
}
|
|
114
105
|
});
|
|
115
|
-
for (
|
|
106
|
+
for (let i = pos + 1; i < bech.length; i++) {
|
|
116
107
|
if (i >= bech.length) {
|
|
117
108
|
throw ErrInvalidIndex(i);
|
|
118
109
|
}
|
|
119
|
-
|
|
120
|
-
|
|
110
|
+
let c = bech[i];
|
|
111
|
+
let index = CHARSET.indexOf(c);
|
|
121
112
|
if (index === -1) {
|
|
122
113
|
throw ErrHrpInvalidCharacter;
|
|
123
114
|
}
|
|
@@ -127,15 +118,15 @@ export function decode(bech) {
|
|
|
127
118
|
throw ErrInvalidChecksum;
|
|
128
119
|
}
|
|
129
120
|
decoded.splice(decoded.length - 6, 6);
|
|
130
|
-
return { hrp
|
|
121
|
+
return { hrp, decoded };
|
|
131
122
|
}
|
|
132
123
|
export function encode(hrp, data) {
|
|
133
124
|
if (hrp.length === 0) {
|
|
134
125
|
throw ErrHrpEmpty;
|
|
135
126
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
hrpBytes.forEach(
|
|
127
|
+
let encoder = new TextEncoder();
|
|
128
|
+
let hrpBytes = encoder.encode(hrp);
|
|
129
|
+
hrpBytes.forEach((value) => {
|
|
139
130
|
if (value < 33 || value > 126) {
|
|
140
131
|
throw ErrHrpInvalidCharacter(value);
|
|
141
132
|
}
|
|
@@ -144,18 +135,18 @@ export function encode(hrp, data) {
|
|
|
144
135
|
throw ErrHrpMixCase;
|
|
145
136
|
}
|
|
146
137
|
hrp = hrp.toLowerCase();
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
combined.forEach(
|
|
138
|
+
let combined = [...data, ...createChecksum(hrp, data)];
|
|
139
|
+
let result = [...Array.from(hrpBytes), SEPARTOR.charCodeAt(0)];
|
|
140
|
+
combined.forEach((index) => {
|
|
150
141
|
if (index > CHARSET.length) {
|
|
151
142
|
throw ErrInvalidValue(index, CHARSET.length);
|
|
152
143
|
}
|
|
153
|
-
|
|
144
|
+
let value = CHARSET.charCodeAt(index);
|
|
154
145
|
if (!value) {
|
|
155
146
|
throw ErrInvalidIndex(index);
|
|
156
147
|
}
|
|
157
148
|
result.push(value);
|
|
158
149
|
});
|
|
159
|
-
|
|
150
|
+
let decoder = new TextDecoder();
|
|
160
151
|
return decoder.decode(new Uint8Array(result));
|
|
161
152
|
}
|
|
@@ -5,15 +5,15 @@ var TestnetPrefixAddress = "xet";
|
|
|
5
5
|
var ExtraDataLimit = 1024;
|
|
6
6
|
var ErrIntegratedDataLimit = "invalid data in integrated address, maximum size reached";
|
|
7
7
|
var ErrInvalidNetworkPrefix = "invalid network prefix (xel or xet)";
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
class Address {
|
|
9
|
+
constructor(data, hrp) {
|
|
10
10
|
this.isMainnet = hrp === PrefixAddress;
|
|
11
11
|
this.publicKey = Array.from(data);
|
|
12
12
|
switch (data[32]) {
|
|
13
13
|
case 1:
|
|
14
14
|
this.isIntegrated = true;
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
let extraData = new Uint8Array(this.publicKey.slice(33));
|
|
16
|
+
let reader = new ValueReader(extraData);
|
|
17
17
|
this.extraData = reader.read();
|
|
18
18
|
break;
|
|
19
19
|
case 0:
|
|
@@ -23,31 +23,30 @@ var Address = /** @class */ (function () {
|
|
|
23
23
|
throw "invalid address type";
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
static fromString(addr) {
|
|
27
|
+
let { hrp, decoded } = decode(addr);
|
|
28
28
|
if (hrp !== PrefixAddress && hrp !== TestnetPrefixAddress) {
|
|
29
29
|
throw ErrInvalidNetworkPrefix;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
let bits = convertBits(decoded, 5, 8, false);
|
|
32
32
|
return new Address(bits, hrp);
|
|
33
|
-
}
|
|
34
|
-
|
|
33
|
+
}
|
|
34
|
+
static isValid(addr) {
|
|
35
35
|
try {
|
|
36
36
|
Address.fromString(addr);
|
|
37
37
|
return true;
|
|
38
38
|
}
|
|
39
|
-
catch
|
|
39
|
+
catch {
|
|
40
40
|
return false;
|
|
41
41
|
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
}
|
|
43
|
+
format() {
|
|
44
|
+
let bits = convertBits(this.publicKey, 8, 5, true);
|
|
45
|
+
let hrp = PrefixAddress;
|
|
46
46
|
if (!this.isMainnet) {
|
|
47
47
|
hrp = TestnetPrefixAddress;
|
|
48
48
|
}
|
|
49
49
|
return encode(hrp, bits);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
}());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
53
52
|
export default Address;
|
package/dist/esm/config.js
CHANGED
|
@@ -1,39 +1,27 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
17
|
-
export
|
|
18
|
-
export
|
|
19
|
-
export
|
|
1
|
+
export const DAEMON_RPC_PORT = `8080`;
|
|
2
|
+
export const WALLET_RPC_PORT = `8081`;
|
|
3
|
+
export const XSWD_PORT = `44325`;
|
|
4
|
+
export const MAINNET_NODE_URL = `node.xelis.io`;
|
|
5
|
+
export const TESTNET_NODE_URL = `testnet-node.xelis.io`;
|
|
6
|
+
export const LOCAL_NODE_URL = `127.0.0.1:${DAEMON_RPC_PORT}`;
|
|
7
|
+
export const MAINNET_NODE_RPC = `https://${MAINNET_NODE_URL}/json_rpc`;
|
|
8
|
+
export const TESTNET_NODE_RPC = `https://${TESTNET_NODE_URL}/json_rpc`;
|
|
9
|
+
export const LOCAL_NODE_RPC = `http://${LOCAL_NODE_URL}/json_rpc`;
|
|
10
|
+
export const MAINNET_NODE_WS = `wss://${MAINNET_NODE_URL}/json_rpc`;
|
|
11
|
+
export const TESTNET_NODE_WS = `wss://${TESTNET_NODE_URL}/json_rpc`;
|
|
12
|
+
export const LOCAL_NODE_WS = `ws://${LOCAL_NODE_URL}/json_rpc`;
|
|
13
|
+
export const LOCAL_WALLET_URL = `127.0.0.1:${WALLET_RPC_PORT}`;
|
|
14
|
+
export const LOCAL_WALLET_RPC = `http://${LOCAL_WALLET_URL}/json_rpc`;
|
|
15
|
+
export const LOCAL_WALLET_WS = `ws://${LOCAL_WALLET_URL}/json_rpc`;
|
|
16
|
+
export const LOCAL_XSWD_URL = `127.0.0.1:${XSWD_PORT}`;
|
|
17
|
+
export const LOCAL_XSWD_WS = `ws://${LOCAL_XSWD_URL}/xswd`;
|
|
18
|
+
export const XELIS_ASSET = `0000000000000000000000000000000000000000000000000000000000000000`;
|
|
19
|
+
export const XELIS_DECIMALS = 8;
|
|
20
20
|
export default {
|
|
21
|
-
MAINNET_NODE_URL
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
TESTNET_NODE_WS: TESTNET_NODE_WS,
|
|
28
|
-
LOCAL_NODE_WS: LOCAL_NODE_WS,
|
|
29
|
-
DAEMON_RPC_PORT: DAEMON_RPC_PORT,
|
|
30
|
-
WALLET_RPC_PORT: WALLET_RPC_PORT,
|
|
31
|
-
XSWD_PORT: XSWD_PORT,
|
|
32
|
-
LOCAL_WALLET_URL: LOCAL_WALLET_URL,
|
|
33
|
-
LOCAL_WALLET_RPC: LOCAL_WALLET_RPC,
|
|
34
|
-
LOCAL_WALLET_WS: LOCAL_WALLET_WS,
|
|
35
|
-
LOCAL_XSWD_URL: LOCAL_XSWD_URL,
|
|
36
|
-
LOCAL_XSWD_WS: LOCAL_XSWD_WS,
|
|
37
|
-
XELIS_ASSET: XELIS_ASSET,
|
|
38
|
-
XELIS_DECIMALS: XELIS_DECIMALS
|
|
21
|
+
MAINNET_NODE_URL, TESTNET_NODE_URL,
|
|
22
|
+
MAINNET_NODE_RPC, TESTNET_NODE_RPC, LOCAL_NODE_RPC,
|
|
23
|
+
MAINNET_NODE_WS, TESTNET_NODE_WS, LOCAL_NODE_WS,
|
|
24
|
+
DAEMON_RPC_PORT, WALLET_RPC_PORT, XSWD_PORT,
|
|
25
|
+
LOCAL_WALLET_URL, LOCAL_WALLET_RPC, LOCAL_WALLET_WS,
|
|
26
|
+
LOCAL_XSWD_URL, LOCAL_XSWD_WS, XELIS_ASSET, XELIS_DECIMALS
|
|
39
27
|
};
|