@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/auth/memo.js
CHANGED
|
@@ -1,33 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var _bytebuffer2 = _interopRequireDefault(_bytebuffer);
|
|
15
|
-
|
|
16
|
-
var _assert = require('assert');
|
|
17
|
-
|
|
18
|
-
var _assert2 = _interopRequireDefault(_assert);
|
|
19
|
-
|
|
20
|
-
var _bs = require('bs58');
|
|
21
|
-
|
|
22
|
-
var _bs2 = _interopRequireDefault(_bs);
|
|
23
|
-
|
|
24
|
-
var _ecc = require('./ecc');
|
|
25
|
-
|
|
26
|
-
var _serializer = require('./serializer');
|
|
27
|
-
|
|
28
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
-
|
|
30
|
-
var encMemo = _serializer.ops.encrypted_memo;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const ByteBuffer = require('bytebuffer');
|
|
4
|
+
const assert = require('assert');
|
|
5
|
+
const base58 = require('bs58');
|
|
6
|
+
const ecc = require('./ecc');
|
|
7
|
+
const Aes = ecc.Aes;
|
|
8
|
+
const PrivateKey = ecc.PrivateKey;
|
|
9
|
+
const PublicKey = ecc.PublicKey;
|
|
10
|
+
const serializer = require('./serializer');
|
|
11
|
+
const ops = serializer.ops;
|
|
12
|
+
const encMemo = ops.encrypted_memo;
|
|
31
13
|
|
|
32
14
|
/**
|
|
33
15
|
Some fields are only required if the memo is marked for decryption (starts with a hash).
|
|
@@ -36,41 +18,37 @@ var encMemo = _serializer.ops.encrypted_memo;
|
|
|
36
18
|
@return {string} - utf8 decoded string (hash prefix)
|
|
37
19
|
*/
|
|
38
20
|
function decode(private_key, memo) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// Sender did not length-prefix the memo
|
|
71
|
-
memo = new Buffer(mbuf.toString('binary'), 'binary').toString('utf-8');
|
|
72
|
-
return '#' + memo;
|
|
73
|
-
}
|
|
21
|
+
assert(memo, 'memo is required');
|
|
22
|
+
assert.equal(typeof memo, 'string', 'memo');
|
|
23
|
+
if (!/^#/.test(memo)) return memo;
|
|
24
|
+
memo = memo.substring(1);
|
|
25
|
+
assert(private_key, 'private_key is required');
|
|
26
|
+
checkEncryption();
|
|
27
|
+
private_key = toPrivateObj(private_key);
|
|
28
|
+
memo = base58.decode(memo);
|
|
29
|
+
memo = encMemo.fromBuffer(new Buffer.from(memo, 'binary'));
|
|
30
|
+
const {
|
|
31
|
+
from,
|
|
32
|
+
to,
|
|
33
|
+
nonce,
|
|
34
|
+
check,
|
|
35
|
+
encrypted
|
|
36
|
+
} = memo;
|
|
37
|
+
const pubkey = private_key.toPublicKey().toString();
|
|
38
|
+
const otherpub = pubkey === from.toString() ? to.toString() : from.toString();
|
|
39
|
+
memo = Aes.decrypt(private_key, otherpub, nonce, encrypted, check);
|
|
40
|
+
|
|
41
|
+
// remove varint length prefix
|
|
42
|
+
const mbuf = ByteBuffer.fromBinary(memo.toString('binary'), ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
|
|
43
|
+
try {
|
|
44
|
+
mbuf.mark();
|
|
45
|
+
return '#' + mbuf.readVString();
|
|
46
|
+
} catch (e) {
|
|
47
|
+
mbuf.reset();
|
|
48
|
+
// Sender did not length-prefix the memo
|
|
49
|
+
memo = new Buffer.from(mbuf.toString('binary'), 'binary').toString('utf-8');
|
|
50
|
+
return '#' + memo;
|
|
51
|
+
}
|
|
74
52
|
}
|
|
75
53
|
|
|
76
54
|
/**
|
|
@@ -82,66 +60,60 @@ function decode(private_key, memo) {
|
|
|
82
60
|
@return {string} - base64 decoded string (or plain text)
|
|
83
61
|
*/
|
|
84
62
|
function encode(private_key, public_key, memo, testNonce) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
});
|
|
113
|
-
// serialize
|
|
114
|
-
memo = encMemo.toBuffer(memo);
|
|
115
|
-
return '#' + _bs2.default.encode(new Buffer(memo, 'binary'));
|
|
63
|
+
assert(memo, 'memo is required');
|
|
64
|
+
assert.equal(typeof memo, 'string', 'memo');
|
|
65
|
+
if (!/^#/.test(memo)) return memo;
|
|
66
|
+
memo = memo.substring(1);
|
|
67
|
+
assert(private_key, 'private_key is required');
|
|
68
|
+
assert(public_key, 'public_key is required');
|
|
69
|
+
checkEncryption();
|
|
70
|
+
private_key = toPrivateObj(private_key);
|
|
71
|
+
public_key = toPublicObj(public_key);
|
|
72
|
+
const mbuf = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
|
|
73
|
+
mbuf.writeVString(memo);
|
|
74
|
+
memo = new Buffer.from(mbuf.copy(0, mbuf.offset).toBinary(), 'binary');
|
|
75
|
+
const {
|
|
76
|
+
nonce,
|
|
77
|
+
message,
|
|
78
|
+
checksum
|
|
79
|
+
} = Aes.encrypt(private_key, public_key, memo, testNonce);
|
|
80
|
+
memo = encMemo.fromObject({
|
|
81
|
+
from: private_key.toPublicKey(),
|
|
82
|
+
to: public_key,
|
|
83
|
+
nonce,
|
|
84
|
+
check: checksum,
|
|
85
|
+
encrypted: message
|
|
86
|
+
});
|
|
87
|
+
// serialize
|
|
88
|
+
memo = encMemo.toBuffer(memo);
|
|
89
|
+
return '#' + base58.encode(new Buffer.from(memo, 'binary'));
|
|
116
90
|
}
|
|
117
|
-
|
|
118
|
-
var encodeTest = undefined;
|
|
91
|
+
let encodeTest = undefined;
|
|
119
92
|
|
|
120
93
|
/**
|
|
121
94
|
Memo encryption has failed in the browser before. An Error will be thrown
|
|
122
95
|
if a memo can't be encrypted and decrypted.
|
|
123
96
|
*/
|
|
124
97
|
function checkEncryption() {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
98
|
+
if (encodeTest === undefined) {
|
|
99
|
+
let plaintext;
|
|
100
|
+
encodeTest = true; // prevent infinate looping
|
|
101
|
+
try {
|
|
102
|
+
const wif = '5JdeC9P7Pbd1uGdFVEsJ41EkEnADbbHGq6p1BwFxm6txNBsQnsw';
|
|
103
|
+
const pubkey = 'STM8m5UgaFAAYQRuaNejYdS8FVLVp9Ss3K1qAVk5de6F8s3HnVbvA';
|
|
104
|
+
const cyphertext = encode(wif, pubkey, '#memo爱');
|
|
105
|
+
plaintext = decode(wif, cyphertext);
|
|
106
|
+
} catch (e) {
|
|
107
|
+
console.error(e);
|
|
108
|
+
} finally {
|
|
109
|
+
encodeTest = plaintext === '#memo爱';
|
|
138
110
|
}
|
|
139
|
-
|
|
111
|
+
}
|
|
112
|
+
if (encodeTest === false) throw new Error('This environment does not support encryption.');
|
|
140
113
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
return o ? o.Q ? o : _ecc.PublicKey.fromString(o) : o /*null or undefined*/;
|
|
114
|
+
const toPrivateObj = o => o ? o.d ? o : PrivateKey.fromWif(o) : o /*null or undefined*/;
|
|
115
|
+
const toPublicObj = o => o ? o.Q ? o : PublicKey.fromString(o) : o /*null or undefined*/;
|
|
116
|
+
module.exports = {
|
|
117
|
+
decode,
|
|
118
|
+
encode
|
|
147
119
|
};
|
|
@@ -1,21 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
ops: require('./src/operations'),
|
|
16
|
-
|
|
17
|
-
// Utility that generates JSON examples
|
|
18
|
-
template: require('./src/template'),
|
|
19
|
-
|
|
20
|
-
number_utils: require('./src/number_utils')
|
|
4
|
+
// Primary class for creating operations
|
|
5
|
+
Serializer: require('./src/serializer'),
|
|
6
|
+
// helper functions for creating operations
|
|
7
|
+
fp: require('./src/fast_parser'),
|
|
8
|
+
// Low level types
|
|
9
|
+
types: require('./src/types'),
|
|
10
|
+
// Higher level operations (made out of generic types)
|
|
11
|
+
ops: require('./src/operations'),
|
|
12
|
+
// Utility that generates JSON examples
|
|
13
|
+
template: require('./src/template'),
|
|
14
|
+
number_utils: require('./src/number_utils')
|
|
21
15
|
};
|
|
@@ -1,37 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
var ByteBuffer = require('bytebuffer');
|
|
4
|
-
|
|
5
4
|
module.exports = function (type) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
5
|
+
return {
|
|
6
|
+
fromHex(hex) {
|
|
7
|
+
var b = ByteBuffer.fromHex(hex, ByteBuffer.LITTLE_ENDIAN);
|
|
8
|
+
return type.fromByteBuffer(b);
|
|
9
|
+
},
|
|
10
|
+
toHex(object) {
|
|
11
|
+
var b = toByteBuffer(type, object);
|
|
12
|
+
return b.toHex();
|
|
13
|
+
},
|
|
14
|
+
fromBuffer(buffer) {
|
|
15
|
+
var b = ByteBuffer.fromBinary(buffer.toString(), ByteBuffer.LITTLE_ENDIAN);
|
|
16
|
+
return type.fromByteBuffer(b);
|
|
17
|
+
},
|
|
18
|
+
toBuffer(object) {
|
|
19
|
+
return new Buffer(toByteBuffer(type, object).toBinary(), 'binary');
|
|
20
|
+
},
|
|
21
|
+
fromBinary(string) {
|
|
22
|
+
var b = ByteBuffer.fromBinary(string, ByteBuffer.LITTLE_ENDIAN);
|
|
23
|
+
return type.fromByteBuffer(b);
|
|
24
|
+
},
|
|
25
|
+
toBinary(object) {
|
|
26
|
+
return toByteBuffer(type, object).toBinary();
|
|
27
|
+
}
|
|
28
|
+
};
|
|
31
29
|
};
|
|
32
|
-
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return b.copy(0, b.offset);
|
|
30
|
+
var toByteBuffer = function (type, object) {
|
|
31
|
+
var b = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
|
|
32
|
+
type.appendByteBuffer(b, object);
|
|
33
|
+
return b.copy(0, b.offset);
|
|
37
34
|
};
|
|
@@ -1,42 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
4
|
-
|
|
5
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
6
|
-
|
|
7
3
|
/** Exception nesting. */
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (typeof cause !== "undefined" && cause !== null ? cause.message : undefined) {
|
|
14
|
-
this.message = "cause\t" + cause.message + "\t" + this.message;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
var stack = ""; //(new Error).stack
|
|
18
|
-
if (typeof cause !== "undefined" && cause !== null ? cause.stack : undefined) {
|
|
19
|
-
stack = "caused by\n\t" + cause.stack + "\t" + stack;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
this.stack = this.message + "\n" + stack;
|
|
4
|
+
class ErrorWithCause {
|
|
5
|
+
constructor(message, cause) {
|
|
6
|
+
this.message = message;
|
|
7
|
+
if (typeof cause !== "undefined" && cause !== null ? cause.message : undefined) {
|
|
8
|
+
this.message = `cause\t${cause.message}\t` + this.message;
|
|
23
9
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
10
|
+
var stack = ""; //(new Error).stack
|
|
11
|
+
if (typeof cause !== "undefined" && cause !== null ? cause.stack : undefined) {
|
|
12
|
+
stack = `caused by\n\t${cause.stack}\t` + stack;
|
|
13
|
+
}
|
|
14
|
+
this.stack = this.message + "\n" + stack;
|
|
15
|
+
}
|
|
16
|
+
static throw(message, cause) {
|
|
17
|
+
var msg = message;
|
|
18
|
+
if (typeof cause !== "undefined" && cause !== null ? cause.message : undefined) {
|
|
19
|
+
msg += `\t cause: ${cause.message} `;
|
|
20
|
+
}
|
|
21
|
+
if (typeof cause !== "undefined" && cause !== null ? cause.stack : undefined) {
|
|
22
|
+
msg += `\n stack: ${cause.stack} `;
|
|
23
|
+
}
|
|
24
|
+
throw new Error(msg);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
42
27
|
module.exports = ErrorWithCause;
|
|
@@ -1,77 +1,57 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var FastParser = function () {
|
|
10
|
-
function FastParser() {
|
|
11
|
-
_classCallCheck(this, FastParser);
|
|
3
|
+
const ecc = require("../../ecc");
|
|
4
|
+
const PublicKey = ecc.PublicKey;
|
|
5
|
+
class FastParser {
|
|
6
|
+
static fixed_data(b, len, buffer) {
|
|
7
|
+
if (!b) {
|
|
8
|
+
return;
|
|
12
9
|
}
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
}, {
|
|
61
|
-
key: 'time_point_sec',
|
|
62
|
-
value: function time_point_sec(b, epoch) {
|
|
63
|
-
if (epoch) {
|
|
64
|
-
epoch = Math.ceil(epoch / 1000);
|
|
65
|
-
b.writeInt32(epoch);
|
|
66
|
-
return;
|
|
67
|
-
} else {
|
|
68
|
-
epoch = b.readInt32(); // fc::time_point_sec
|
|
69
|
-
return new Date(epoch * 1000);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}]);
|
|
73
|
-
|
|
74
|
-
return FastParser;
|
|
75
|
-
}();
|
|
76
|
-
|
|
10
|
+
if (buffer) {
|
|
11
|
+
let data = buffer.slice(0, len).toString('binary');
|
|
12
|
+
b.append(data, 'binary');
|
|
13
|
+
while (len-- > data.length) {
|
|
14
|
+
b.writeUint8(0);
|
|
15
|
+
}
|
|
16
|
+
} else {
|
|
17
|
+
let b_copy = b.copy(b.offset, b.offset + len);
|
|
18
|
+
b.skip(len);
|
|
19
|
+
return new Buffer.from(b_copy.toBinary(), 'binary');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
static public_key(b, public_key) {
|
|
23
|
+
if (!b) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (public_key) {
|
|
27
|
+
var buffer = public_key.toBuffer();
|
|
28
|
+
b.append(buffer.toString('binary'), 'binary');
|
|
29
|
+
return;
|
|
30
|
+
} else {
|
|
31
|
+
buffer = FastParser.fixed_data(b, 33);
|
|
32
|
+
return PublicKey.fromBuffer(buffer);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
static ripemd160(b, ripemd160) {
|
|
36
|
+
if (!b) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (ripemd160) {
|
|
40
|
+
FastParser.fixed_data(b, 20, ripemd160);
|
|
41
|
+
return;
|
|
42
|
+
} else {
|
|
43
|
+
return FastParser.fixed_data(b, 20);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
static time_point_sec(b, epoch) {
|
|
47
|
+
if (epoch) {
|
|
48
|
+
epoch = Math.ceil(epoch / 1000);
|
|
49
|
+
b.writeInt32(epoch);
|
|
50
|
+
return;
|
|
51
|
+
} else {
|
|
52
|
+
epoch = b.readInt32(); // fc::time_point_sec
|
|
53
|
+
return new Date(epoch * 1000);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
77
57
|
module.exports = FastParser;
|
|
@@ -1,21 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
|
8
|
-
|
|
9
|
-
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
10
|
-
|
|
11
|
-
exports.toImpliedDecimal = toImpliedDecimal;
|
|
12
|
-
exports.fromImpliedDecimal = fromImpliedDecimal;
|
|
13
|
-
|
|
14
|
-
var _assert = require("assert");
|
|
15
|
-
|
|
16
|
-
var _assert2 = _interopRequireDefault(_assert);
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
3
|
+
const assert = require("assert");
|
|
19
4
|
|
|
20
5
|
/**
|
|
21
6
|
Convert 12.34 with a precision of 3 into 12340
|
|
@@ -25,43 +10,34 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
25
10
|
@return {string} -
|
|
26
11
|
*/
|
|
27
12
|
function toImpliedDecimal(number, precision) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
whole = _number$split2$ === undefined ? "" : _number$split2$,
|
|
42
|
-
_number$split2$2 = _number$split2[1],
|
|
43
|
-
decimal = _number$split2$2 === undefined ? "" : _number$split2$2;
|
|
44
|
-
|
|
45
|
-
var padding = precision - decimal.length;
|
|
46
|
-
(0, _assert2.default)(padding >= 0, "Too many decimal digits in " + number + " to create an implied decimal of " + precision);
|
|
47
|
-
|
|
48
|
-
for (var i = 0; i < padding; i++) {
|
|
49
|
-
decimal += "0";
|
|
50
|
-
}while (whole.charAt(0) === "0") {
|
|
51
|
-
whole = whole.substring(1);
|
|
52
|
-
}return whole + decimal;
|
|
13
|
+
if (typeof number === "number") {
|
|
14
|
+
assert(number <= 9007199254740991, "overflow");
|
|
15
|
+
number = "" + number;
|
|
16
|
+
} else if (number.toString) number = number.toString();
|
|
17
|
+
assert(typeof number === "string", "number should be an actual number or string: " + typeof number);
|
|
18
|
+
number = number.trim();
|
|
19
|
+
assert(/^[0-9]*\.?[0-9]*$/.test(number), "Invalid decimal number " + number);
|
|
20
|
+
let [whole = "", decimal = ""] = number.split(".");
|
|
21
|
+
let padding = precision - decimal.length;
|
|
22
|
+
assert(padding >= 0, "Too many decimal digits in " + number + " to create an implied decimal of " + precision);
|
|
23
|
+
for (let i = 0; i < padding; i++) decimal += "0";
|
|
24
|
+
while (whole.charAt(0) === "0") whole = whole.substring(1);
|
|
25
|
+
return whole + decimal;
|
|
53
26
|
}
|
|
54
|
-
|
|
55
27
|
function fromImpliedDecimal(number, precision) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
28
|
+
if (typeof number === "number") {
|
|
29
|
+
assert(number <= 9007199254740991, "overflow");
|
|
30
|
+
number = "" + number;
|
|
31
|
+
} else if (number.toString) number = number.toString();
|
|
32
|
+
while (number.length < precision + 1)
|
|
33
|
+
// 0.123
|
|
34
|
+
number = "0" + number;
|
|
35
|
+
|
|
36
|
+
// 44000 => 44.000
|
|
37
|
+
let dec_string = number.substring(number.length - precision);
|
|
38
|
+
return number.substring(0, number.length - precision) + (dec_string ? "." + dec_string : "");
|
|
39
|
+
}
|
|
40
|
+
module.exports = {
|
|
41
|
+
toImpliedDecimal,
|
|
42
|
+
fromImpliedDecimal
|
|
43
|
+
};
|