@steemit/steem-js 0.7.10 → 0.8.0
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/README.md +22 -3
- package/circle.yml +1 -1
- package/config.json +1 -1
- package/dist/steem-tests.min.js +4097 -23
- package/dist/steem.min.js +2089 -18
- package/docker-webpack.config.js +44 -0
- package/lib/api/index.js +305 -412
- package/lib/api/methods.js +16 -1
- package/lib/api/rpc-auth.js +135 -0
- package/lib/api/transports/base.js +25 -66
- package/lib/api/transports/http.js +114 -129
- package/lib/api/transports/index.js +8 -15
- package/lib/api/transports/ws.js +107 -207
- package/lib/auth/ecc/index.js +9 -9
- package/lib/auth/ecc/src/address.js +48 -78
- package/lib/auth/ecc/src/aes.js +93 -129
- package/lib/auth/ecc/src/brain_key.js +7 -7
- package/lib/auth/ecc/src/ecdsa.js +7 -33
- package/lib/auth/ecc/src/ecsignature.js +4 -30
- package/lib/auth/ecc/src/enforce_types.js +1 -8
- package/lib/auth/ecc/src/hash.js +16 -25
- package/lib/auth/ecc/src/key_private.js +146 -199
- package/lib/auth/ecc/src/key_public.js +130 -202
- package/lib/auth/ecc/src/key_utils.js +64 -106
- package/lib/auth/ecc/src/signature.js +125 -177
- package/lib/auth/index.js +84 -97
- package/lib/auth/memo.js +90 -118
- package/lib/auth/serializer/index.js +12 -18
- package/lib/auth/serializer/src/ChainTypes.js +0 -3
- package/lib/auth/serializer/src/convert.js +29 -32
- package/lib/auth/serializer/src/error_with_cause.js +22 -37
- package/lib/auth/serializer/src/fast_parser.js +54 -74
- package/lib/auth/serializer/src/number_utils.js +30 -54
- package/lib/auth/serializer/src/object_id.js +37 -62
- package/lib/auth/serializer/src/operations.js +597 -689
- package/lib/auth/serializer/src/precision.js +55 -73
- package/lib/auth/serializer/src/serializer.js +158 -204
- package/lib/auth/serializer/src/template.js +13 -8
- package/lib/auth/serializer/src/types.js +949 -1110
- package/lib/auth/serializer/src/validation.js +268 -328
- package/lib/broadcast/helpers.js +61 -98
- package/lib/broadcast/index.js +61 -82
- package/lib/browser.js +15 -19
- package/lib/config.js +16 -38
- package/lib/formatter.js +89 -115
- package/lib/index.js +19 -17
- package/lib/utils.js +4 -9
- package/node-18.dockerfile +28 -0
- package/package.json +62 -38
- package/test/Crypto.js +16 -16
- package/test/KeyFormats.js +1 -1
- package/test/api.test.js +37 -0
- package/test/broadcast.test.js +14 -8
- package/test/comment.test.js +17 -3
- package/test/operations_test.js +1 -1
- package/test/promise-broadcast.test.js +86 -0
- package/test/reputation.test.js +68 -0
- package/test/smt.test.js +11 -11
- package/test-github-workflow.bat +19 -0
- package/test-github-workflow.sh +15 -0
- package/webpack/makeConfig.js +25 -17
- package/.circleci/config.yml +0 -23
- package/dist/statistics.html +0 -208
- package/dist/steem-tests.min.js.gz +0 -0
- package/dist/steem-tests.min.js.map +0 -1
- package/dist/steem.min.js.gz +0 -0
- package/dist/steem.min.js.map +0 -1
- package/lib/auth/ecc/README.md +0 -20
- package/lib/auth/ecc/package.json +0 -36
- package/lib/auth/serializer/README.md +0 -13
- package/lib/auth/serializer/package.json +0 -32
- package/node-4.dockerfile +0 -6
- package/node-6.dockerfile +0 -6
- package/yarn.lock +0 -3336
package/lib/api/transports/ws.js
CHANGED
|
@@ -1,228 +1,128 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _detectNode2 = _interopRequireDefault(_detectNode);
|
|
16
|
-
|
|
17
|
-
var _debug = require('debug');
|
|
18
|
-
|
|
19
|
-
var _debug2 = _interopRequireDefault(_debug);
|
|
20
|
-
|
|
21
|
-
var _base = require('./base');
|
|
22
|
-
|
|
23
|
-
var _base2 = _interopRequireDefault(_base);
|
|
24
|
-
|
|
25
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
26
|
-
|
|
27
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
28
|
-
|
|
29
|
-
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
30
|
-
|
|
31
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
32
|
-
|
|
33
|
-
var WebSocket = void 0;
|
|
34
|
-
if (_detectNode2.default) {
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
8
|
+
var _detectNode = _interopRequireDefault(require("detect-node"));
|
|
9
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
10
|
+
var _base = _interopRequireDefault(require("./base"));
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
let WebSocket;
|
|
13
|
+
if (_detectNode.default) {
|
|
35
14
|
WebSocket = require('ws'); // eslint-disable-line global-require
|
|
36
15
|
} else if (typeof window !== 'undefined') {
|
|
37
16
|
WebSocket = window.WebSocket;
|
|
38
17
|
} else {
|
|
39
18
|
throw new Error("Couldn't decide on a `WebSocket` class");
|
|
40
19
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
_classCallCheck(this, WsTransport);
|
|
51
|
-
|
|
52
|
-
var _this = _possibleConstructorReturn(this, (WsTransport.__proto__ || Object.getPrototypeOf(WsTransport)).call(this, Object.assign({ id: 0 }, options)));
|
|
53
|
-
|
|
54
|
-
_this._requests = new Map();
|
|
55
|
-
_this.inFlight = 0;
|
|
56
|
-
_this.isOpen = false;
|
|
57
|
-
return _this;
|
|
20
|
+
const debug = (0, _debug.default)('steem:ws');
|
|
21
|
+
class WsTransport extends _base.default {
|
|
22
|
+
constructor(options = {}) {
|
|
23
|
+
super(Object.assign({
|
|
24
|
+
id: 0
|
|
25
|
+
}, options));
|
|
26
|
+
this._requests = new Map();
|
|
27
|
+
this.inFlight = 0;
|
|
28
|
+
this.isOpen = false;
|
|
58
29
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
key: 'start',
|
|
62
|
-
value: function start() {
|
|
63
|
-
var _this2 = this;
|
|
64
|
-
|
|
65
|
-
if (this.startPromise) {
|
|
66
|
-
return this.startPromise;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
this.startPromise = new _bluebird2.default(function (resolve, reject) {
|
|
70
|
-
_this2.ws = new WebSocket(_this2.options.websocket);
|
|
71
|
-
_this2.ws.onerror = function (err) {
|
|
72
|
-
_this2.startPromise = null;
|
|
73
|
-
reject(err);
|
|
74
|
-
};
|
|
75
|
-
_this2.ws.onopen = function () {
|
|
76
|
-
_this2.isOpen = true;
|
|
77
|
-
_this2.ws.onerror = _this2.onError.bind(_this2);
|
|
78
|
-
_this2.ws.onmessage = _this2.onMessage.bind(_this2);
|
|
79
|
-
_this2.ws.onclose = _this2.onClose.bind(_this2);
|
|
80
|
-
resolve();
|
|
81
|
-
};
|
|
82
|
-
});
|
|
30
|
+
start() {
|
|
31
|
+
if (this.startPromise) {
|
|
83
32
|
return this.startPromise;
|
|
84
33
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
this.ws.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
34
|
+
this.startPromise = new _bluebird.default((resolve, reject) => {
|
|
35
|
+
this.ws = new WebSocket(this.options.websocket);
|
|
36
|
+
this.ws.onerror = err => {
|
|
37
|
+
this.startPromise = null;
|
|
38
|
+
reject(err);
|
|
39
|
+
};
|
|
40
|
+
this.ws.onopen = () => {
|
|
41
|
+
this.isOpen = true;
|
|
42
|
+
this.ws.onerror = this.onError.bind(this);
|
|
43
|
+
this.ws.onmessage = this.onMessage.bind(this);
|
|
44
|
+
this.ws.onclose = this.onClose.bind(this);
|
|
45
|
+
resolve();
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
return this.startPromise;
|
|
49
|
+
}
|
|
50
|
+
stop() {
|
|
51
|
+
debug('Stopping...');
|
|
52
|
+
this.startPromise = null;
|
|
53
|
+
this.isOpen = false;
|
|
54
|
+
this._requests.clear();
|
|
55
|
+
if (this.ws) {
|
|
56
|
+
this.ws.onerror = this.ws.onmessage = this.ws.onclose = null;
|
|
57
|
+
this.ws.close();
|
|
58
|
+
this.ws = null;
|
|
99
59
|
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
deferral.reject = function (val) {
|
|
114
|
-
reject(val);
|
|
115
|
-
callback(val);
|
|
116
|
-
};
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
if (_this3.options.useAppbaseApi) {
|
|
120
|
-
api = 'condenser_api';
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
var _request = {
|
|
124
|
-
deferral: deferral,
|
|
125
|
-
startedAt: Date.now(),
|
|
126
|
-
message: {
|
|
127
|
-
id: data.id || _this3.id++,
|
|
128
|
-
method: 'call',
|
|
129
|
-
jsonrpc: '2.0',
|
|
130
|
-
params: [api, data.method, data.params]
|
|
131
|
-
}
|
|
60
|
+
}
|
|
61
|
+
send(api, data, callback) {
|
|
62
|
+
debug('Steem::send', api, data);
|
|
63
|
+
return this.start().then(() => {
|
|
64
|
+
const deferral = {};
|
|
65
|
+
new _bluebird.default((resolve, reject) => {
|
|
66
|
+
deferral.resolve = val => {
|
|
67
|
+
resolve(val);
|
|
68
|
+
callback(null, val);
|
|
69
|
+
};
|
|
70
|
+
deferral.reject = val => {
|
|
71
|
+
reject(val);
|
|
72
|
+
callback(val);
|
|
132
73
|
};
|
|
133
|
-
_this3.inFlight++;
|
|
134
|
-
_this3._requests.set(_request.message.id, _request);
|
|
135
|
-
_this3.ws.send(JSON.stringify(_request.message));
|
|
136
|
-
return deferral;
|
|
137
74
|
});
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
key: 'onError',
|
|
141
|
-
value: function onError(error) {
|
|
142
|
-
var _iteratorNormalCompletion = true;
|
|
143
|
-
var _didIteratorError = false;
|
|
144
|
-
var _iteratorError = undefined;
|
|
145
|
-
|
|
146
|
-
try {
|
|
147
|
-
for (var _iterator = this._requests[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
148
|
-
var _request = _step.value;
|
|
149
|
-
|
|
150
|
-
_request.deferral.reject(error);
|
|
151
|
-
}
|
|
152
|
-
} catch (err) {
|
|
153
|
-
_didIteratorError = true;
|
|
154
|
-
_iteratorError = err;
|
|
155
|
-
} finally {
|
|
156
|
-
try {
|
|
157
|
-
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
158
|
-
_iterator.return();
|
|
159
|
-
}
|
|
160
|
-
} finally {
|
|
161
|
-
if (_didIteratorError) {
|
|
162
|
-
throw _iteratorError;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
75
|
+
if (this.options.useAppbaseApi) {
|
|
76
|
+
api = 'condenser_api';
|
|
165
77
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
var _didIteratorError2 = false;
|
|
175
|
-
var _iteratorError2 = undefined;
|
|
176
|
-
|
|
177
|
-
try {
|
|
178
|
-
for (var _iterator2 = this._requests[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
179
|
-
var _request = _step2.value;
|
|
180
|
-
|
|
181
|
-
_request.deferral.reject(error);
|
|
78
|
+
const _request = {
|
|
79
|
+
deferral,
|
|
80
|
+
startedAt: Date.now(),
|
|
81
|
+
message: {
|
|
82
|
+
id: data.id || this.id++,
|
|
83
|
+
method: 'call',
|
|
84
|
+
jsonrpc: '2.0',
|
|
85
|
+
params: [api, data.method, data.params]
|
|
182
86
|
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
throw _iteratorError2;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
this._requests.clear();
|
|
87
|
+
};
|
|
88
|
+
this.inFlight++;
|
|
89
|
+
this._requests.set(_request.message.id, _request);
|
|
90
|
+
this.ws.send(JSON.stringify(_request.message));
|
|
91
|
+
return deferral;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
onError(error) {
|
|
95
|
+
for (let _request of this._requests) {
|
|
96
|
+
_request.deferral.reject(error);
|
|
199
97
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
throw new Error('Panic: no request in queue for message id ' + message.id);
|
|
207
|
-
}
|
|
208
|
-
var _request = this._requests.get(message.id);
|
|
209
|
-
this._requests.delete(message.id);
|
|
210
|
-
|
|
211
|
-
var errorCause = message.error;
|
|
212
|
-
if (errorCause) {
|
|
213
|
-
var err = new Error(
|
|
214
|
-
// eslint-disable-next-line prefer-template
|
|
215
|
-
(errorCause.message || 'Failed to complete operation') + ' (see err.payload for the full error payload)');
|
|
216
|
-
err.payload = message;
|
|
217
|
-
_request.deferral.reject(err);
|
|
218
|
-
} else {
|
|
219
|
-
this.emit('track-performance', _request.message.method, Date.now() - _request.startedAt);
|
|
220
|
-
_request.deferral.resolve(message.result);
|
|
221
|
-
}
|
|
98
|
+
this.stop();
|
|
99
|
+
}
|
|
100
|
+
onClose() {
|
|
101
|
+
const error = new Error('Connection was closed');
|
|
102
|
+
for (let _request of this._requests) {
|
|
103
|
+
_request.deferral.reject(error);
|
|
222
104
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
105
|
+
this._requests.clear();
|
|
106
|
+
}
|
|
107
|
+
onMessage(websocketMessage) {
|
|
108
|
+
const message = JSON.parse(websocketMessage.data);
|
|
109
|
+
debug('-- Steem.onMessage -->', message.id);
|
|
110
|
+
if (!this._requests.has(message.id)) {
|
|
111
|
+
throw new Error(`Panic: no request in queue for message id ${message.id}`);
|
|
112
|
+
}
|
|
113
|
+
const _request = this._requests.get(message.id);
|
|
114
|
+
this._requests.delete(message.id);
|
|
115
|
+
const errorCause = message.error;
|
|
116
|
+
if (errorCause) {
|
|
117
|
+
const err = new Error(
|
|
118
|
+
// eslint-disable-next-line prefer-template
|
|
119
|
+
(errorCause.message || 'Failed to complete operation') + ' (see err.payload for the full error payload)');
|
|
120
|
+
err.payload = message;
|
|
121
|
+
_request.deferral.reject(err);
|
|
122
|
+
} else {
|
|
123
|
+
this.emit('track-performance', _request.message.method, Date.now() - _request.startedAt);
|
|
124
|
+
_request.deferral.resolve(message.result);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
228
128
|
exports.default = WsTransport;
|
package/lib/auth/ecc/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
Address: require("./src/address"),
|
|
5
|
+
Aes: require("./src/aes"),
|
|
6
|
+
PrivateKey: require("./src/key_private"),
|
|
7
|
+
PublicKey: require("./src/key_public"),
|
|
8
|
+
Signature: require("./src/signature"),
|
|
9
|
+
brainKey: require("./src/brain_key"),
|
|
10
|
+
key_utils: require("./src/key_utils"),
|
|
11
|
+
hash: require("./src/hash"),
|
|
12
|
+
ecc_config: require("../../config")
|
|
13
13
|
};
|
|
@@ -1,84 +1,54 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var assert = require('assert');
|
|
8
|
-
var config = require('../../../config');
|
|
9
|
-
var hash = require('./hash');
|
|
10
|
-
var base58 = require('bs58');
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
const config = require('../../../config');
|
|
5
|
+
const hash = require('./hash');
|
|
6
|
+
const base58 = require('bs58');
|
|
11
7
|
|
|
12
8
|
/** Addresses are shortened non-reversable hashes of a public key. The full PublicKey is preferred.
|
|
13
9
|
@deprecated
|
|
14
10
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return new Address(addy);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** @return Address - Compressed PTS format (by default) */
|
|
62
|
-
|
|
63
|
-
}, {
|
|
64
|
-
key: 'fromPublic',
|
|
65
|
-
value: function fromPublic(public_key) {
|
|
66
|
-
var compressed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
67
|
-
var version = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 56;
|
|
68
|
-
|
|
69
|
-
var sha2 = hash.sha256(public_key.toBuffer(compressed));
|
|
70
|
-
var rep = hash.ripemd160(sha2);
|
|
71
|
-
var versionBuffer = new Buffer(1);
|
|
72
|
-
versionBuffer.writeUInt8(0xFF & version, 0);
|
|
73
|
-
var addr = Buffer.concat([versionBuffer, rep]);
|
|
74
|
-
var check = hash.sha256(addr);
|
|
75
|
-
check = hash.sha256(check);
|
|
76
|
-
var buffer = Buffer.concat([addr, check.slice(0, 4)]);
|
|
77
|
-
return new Address(hash.ripemd160(buffer));
|
|
78
|
-
}
|
|
79
|
-
}]);
|
|
80
|
-
|
|
81
|
-
return Address;
|
|
82
|
-
}();
|
|
83
|
-
|
|
11
|
+
class Address {
|
|
12
|
+
constructor(addy) {
|
|
13
|
+
this.addy = addy;
|
|
14
|
+
}
|
|
15
|
+
static fromBuffer(buffer) {
|
|
16
|
+
const _hash = hash.sha512(buffer);
|
|
17
|
+
const addy = hash.ripemd160(_hash);
|
|
18
|
+
return new Address(addy);
|
|
19
|
+
}
|
|
20
|
+
static fromString(string, address_prefix = config.get('address_prefix')) {
|
|
21
|
+
const prefix = string.slice(0, address_prefix.length);
|
|
22
|
+
assert.equal(address_prefix, prefix, `Expecting key to begin with ${address_prefix}, instead got ${prefix}`);
|
|
23
|
+
let addy = string.slice(address_prefix.length);
|
|
24
|
+
addy = new Buffer.from(base58.decode(addy), 'binary');
|
|
25
|
+
const checksum = addy.slice(-4);
|
|
26
|
+
addy = addy.slice(0, -4);
|
|
27
|
+
let new_checksum = hash.ripemd160(addy);
|
|
28
|
+
new_checksum = new_checksum.slice(0, 4);
|
|
29
|
+
assert.deepEqual(checksum, new_checksum, 'Checksum did not match');
|
|
30
|
+
return new Address(addy);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** @return Address - Compressed PTS format (by default) */
|
|
34
|
+
static fromPublic(public_key, compressed = true, version = 56) {
|
|
35
|
+
const sha2 = hash.sha256(public_key.toBuffer(compressed));
|
|
36
|
+
const rep = hash.ripemd160(sha2);
|
|
37
|
+
const versionBuffer = new Buffer.alloc(1);
|
|
38
|
+
versionBuffer.writeUInt8(0xFF & version, 0);
|
|
39
|
+
const addr = Buffer.concat([versionBuffer, rep]);
|
|
40
|
+
let check = hash.sha256(addr);
|
|
41
|
+
check = hash.sha256(check);
|
|
42
|
+
const buffer = Buffer.concat([addr, check.slice(0, 4)]);
|
|
43
|
+
return new Address(hash.ripemd160(buffer));
|
|
44
|
+
}
|
|
45
|
+
toBuffer() {
|
|
46
|
+
return this.addy;
|
|
47
|
+
}
|
|
48
|
+
toString(address_prefix = config.get('address_prefix')) {
|
|
49
|
+
const checksum = hash.ripemd160(this.addy);
|
|
50
|
+
const addy = Buffer.concat([this.addy, checksum.slice(0, 4)]);
|
|
51
|
+
return address_prefix + base58.encode(addy);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
84
54
|
module.exports = Address;
|