evtjs
Version:
Javascript API Bindings for the everiToken blockchain.
344 lines (295 loc) • 15.4 kB
JavaScript
;
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _maxSafeInteger = require('babel-runtime/core-js/number/max-safe-integer');
var _maxSafeInteger2 = _interopRequireDefault(_maxSafeInteger);
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-env mocha */
var assert = require('assert');
var _require = require('./format'),
encodeName = _require.encodeName,
decodeName = _require.decodeName,
encodeNameHex = _require.encodeNameHex,
decodeNameHex = _require.decodeNameHex,
isName = _require.isName,
UDecimalPad = _require.UDecimalPad,
UDecimalUnimply = _require.UDecimalUnimply,
parseAssetSymbol = _require.parseAssetSymbol,
encodeName128 = _require.encodeName128,
decodeName128 = _require.decodeName128,
encodeAddress = _require.encodeAddress,
decodeAddress = _require.decodeAddress,
encodeGeneratedAddressToBin = _require.encodeGeneratedAddressToBin,
decodeGeneratedAddressFromBin = _require.decodeGeneratedAddressFromBin,
encodeGeneratedAddressToJson = _require.encodeGeneratedAddressToJson,
decodeGeneratedAddressFromJson = _require.decodeGeneratedAddressFromJson;
describe('format', function () {
// In isname111111k, 'k' overflows the last 4 bits of the name
describe('name', function () {
var nameFixture = {
isname: ['isname111111o', 'a', '1', '5', 'sam5', 'sam', 'adam.applejjj'],
noname: ['isname111111p', undefined, null, 1, '6', 'a6', ' ']
};
it('isName', function () {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(nameFixture.isname), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var name = _step.value;
assert(isName(name, function (err) {
return console.log(err);
}), name);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = (0, _getIterator3.default)(nameFixture.noname), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _name = _step2.value;
assert(!isName(_name), _name);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
});
it('encode / decode', function () {
assert.equal('58923', encodeName('eos'), 'encode');
assert.equal('e62b', encodeNameHex('eos'), 'encode hex');
assert.equal(decodeName(encodeName('eos')), 'eos', 'decode');
assert.equal('b298e982a4', encodeNameHex('transfer'), 'encode');
assert.equal(decodeNameHex('b298e982a4'), 'transfer', 'decode');
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = (0, _getIterator3.default)(nameFixture.isname), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var name = _step3.value;
assert.equal(decodeName(encodeName(name)), name);
assert.equal(decodeNameHex(encodeNameHex(name)), name);
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = (0, _getIterator3.default)(nameFixture.isname), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var _name2 = _step4.value;
assert.equal(decodeName(encodeName(_name2, false), false), _name2);
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
assert(decodeName(1));
throws(function () {
return decodeName(_maxSafeInteger2.default + 1);
}, /overflow/);
throws(function () {
return decodeName({});
}, /Long, Number or String/);
});
});
it('UDecimalPad', function () {
assert.throws(function () {
return UDecimalPad();
}, /value is required/);
assert.throws(function () {
return UDecimalPad(1);
}, /precision/);
assert.throws(function () {
return UDecimalPad('$10', 0);
}, /invalid decimal/);
assert.throws(function () {
return UDecimalPad('1.1.', 0);
}, /invalid decimal/);
assert.throws(function () {
return UDecimalPad('1.1,1', 0);
}, /invalid decimal/);
assert.throws(function () {
return UDecimalPad('1.11', 1);
}, /exceeds precision/);
var decFixtures = [{ value: 1, precision: 0, answer: '1' }, { value: '1', precision: 0, answer: '1' }, { value: '1.', precision: 0, answer: '1' }, { value: '1.0', precision: 0, answer: '1' }, { value: '1456.0', precision: 0, answer: '1456' }, { value: '1,456.0', precision: 0, answer: '1,456' },
// does not validate commas
{ value: '1,4,5,6', precision: 0, answer: '1,4,5,6' }, { value: '1,4,5,6.0', precision: 0, answer: '1,4,5,6' }, { value: 1, precision: 1, answer: '1.0' }, { value: '1', precision: 1, answer: '1.0' }, { value: '1.', precision: 1, answer: '1.0' }, { value: '1.0', precision: 1, answer: '1.0' }, { value: '1.10', precision: 1, answer: '1.1' }, { value: '1.1', precision: 2, answer: '1.10' }, { value: '1.10', precision: 2, answer: '1.10' }, { value: '1.01', precision: 2, answer: '1.01' }, { value: '1', precision: 3, answer: '1.000' }];
var _iteratorNormalCompletion5 = true;
var _didIteratorError5 = false;
var _iteratorError5 = undefined;
try {
for (var _iterator5 = (0, _getIterator3.default)(decFixtures), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
var test = _step5.value;
var answer = test.answer,
value = test.value,
precision = test.precision;
assert.equal(UDecimalPad(value, precision), answer, (0, _stringify2.default)(test));
}
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
});
it('UDecimalUnimply', function () {
assert.throws(function () {
return UDecimalUnimply('1.', 1);
}, /invalid whole number/);
assert.throws(function () {
return UDecimalUnimply('.1', 1);
}, /invalid whole number/);
assert.throws(function () {
return UDecimalUnimply('1.1', 1);
}, /invalid whole number/);
var decFixtures = [{ value: 1, precision: 0, answer: '1' }, { value: '1', precision: 0, answer: '1' }, { value: '10', precision: 0, answer: '10' }, { value: 1, precision: 1, answer: '0.1' }, { value: '10', precision: 1, answer: '1' }, { value: '11', precision: 2, answer: '0.11' }, { value: '110', precision: 2, answer: '1.1' }, { value: '101', precision: 2, answer: '1.01' }, { value: '0101', precision: 2, answer: '1.01' }];
var _iteratorNormalCompletion6 = true;
var _didIteratorError6 = false;
var _iteratorError6 = undefined;
try {
for (var _iterator6 = (0, _getIterator3.default)(decFixtures), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
var test = _step6.value;
var answer = test.answer,
value = test.value,
precision = test.precision;
assert.equal(UDecimalUnimply(value, precision), answer, (0, _stringify2.default)(test));
}
} catch (err) {
_didIteratorError6 = true;
_iteratorError6 = err;
} finally {
try {
if (!_iteratorNormalCompletion6 && _iterator6.return) {
_iterator6.return();
}
} finally {
if (_didIteratorError6) {
throw _iteratorError6;
}
}
}
});
it('parseAssetSymbol', function () {
// assert.deepEqual(parseAssetSymbol('SYM'), {precision: null, symbol: 'SYM'})
// assert.deepEqual(parseAssetSymbol('SYM#4'), {precision: 4, symbol: 'SYM'})
// assert.throws(() => parseAssetSymbol(369), /should be string/)
// assert.throws(() => parseAssetSymbol('SYM#2', 2), /precision like this/)
// assert.throws(() => parseAssetSymbol('SYM#4', 2), /Asset symbol precision mismatch/)
// assert.throws(() => parseAssetSymbol('sym'), /only uppercase/)
// assert.throws(() => parseAssetSymbol('19,SYM'), /18 characters or less/)
// assert.throws(() => parseAssetSymbol('TOOLONGSYM'), /7 characters or less/)
});
it('name128', function () {
assert.deepEqual(encodeName128('123').toString("hex"), "0c440100".padStart(8, 0));
assert.deepEqual(encodeName128('12345').toString("hex"), "0c44611c".padStart(8, 0));
assert.deepEqual(encodeName128('123456').toString("hex"), "0d44611c08000000".padStart(16, 0));
assert.deepEqual(encodeName128('1234567890').toString("hex"), "0d44611c48a22c02".padStart(16, 0));
assert.deepEqual(encodeName128('1234567890A').toString("hex"), "0e44611c48a22c8209000000".padStart(24, 0));
assert.deepEqual(encodeName128('11111111111').toString("hex"), "0ec3300cc3300cc300000000".padStart(24, 0));
assert.deepEqual(encodeName128('1234567890ABCDE').toString("hex"), "0e44611c48a22c8279a2a90a".padStart(24, 0));
assert.deepEqual(encodeName128('1234567890ABCDEF').toString("hex"), "0f44611c48a22c8279a2a9ba02000000".padStart(32, 0));
assert.deepEqual(encodeName128('1234567890ABCDEFGHIJK').toString("hex"), "0f44611c48a22c8279a2a9bab2adfbc2".padStart(32, 0));
assert.deepEqual(decodeName128("0c440100"), '123');
assert.deepEqual(decodeName128("0c44611c"), '12345');
assert.deepEqual(decodeName128("0d44611c08000000"), '123456');
assert.deepEqual(decodeName128("0d44611c48a22c02"), '1234567890');
assert.deepEqual(decodeName128("0e44611c48a22c8209000000"), '1234567890A');
assert.deepEqual(decodeName128("0ec3300cc3300cc300000000"), '11111111111');
assert.deepEqual(decodeName128("0e44611c48a22c8279a2a90a"), '1234567890ABCDE');
assert.deepEqual(decodeName128("0f44611c48a22c8279a2a9ba02000000"), '1234567890ABCDEF');
assert.deepEqual(decodeName128("0f44611c48a22c8279a2a9bab2adfbc2"), '1234567890ABCDEFGHIJK');
});
it('evtaddress', function () {
assert.deepEqual(encodeAddress("EVT6Qz3wuRjyN6gaU3P3XRxpnEZnM4oPxortemaWDwFRvsv2FxgND").toString('hex'), "010002c8f031561c4758c9551cff47246f2c347189fe684c04da35cf88e813f810e3c2");
assert.deepEqual(encodeAddress("EVT7rbe5ZqAEtwQT6Tw39R29vojFqrCQasK3nT5s2pEzXh1BABXHF").toString('hex'), "01000386cb0bbed3c087475efbae3c51f6825deb3be68ae013411fd509f3e361139e88");
assert.deepEqual(encodeAddress("EVT0000009tDnxK74wjkVZidAeyT339HkhMozkmdkju2pFx32QS95").toString('hex'), "020000008589745c35000000000c000000");
assert.deepEqual(encodeAddress("EVT000000AiCjTBuNN92tpgeqUZjaMuxkvNr5Tgsv9hTqv5Zkub9R").toString('hex'), "02000000600c113adf2f0000001b9d2210c50281c2420d956074000000");
assert.deepEqual(encodeAddress("EVT00000000000000000000000000000000000000000000000000").toString('hex'), "0000");
assert.deepEqual("EVT00000000000000000000000000000000000000000000000000", decodeAddress(Buffer.from("0000", "hex")));
assert.deepEqual("EVT0000009tDnxK74wjkVZidAeyT339HkhMozkmdkju2pFx32QS95", decodeAddress(Buffer.from("020000008589745c35000000000c000000", "hex")));
assert.deepEqual("EVT000000AiCjTBuNN92tpgeqUZjaMuxkvNr5Tgsv9hTqv5Zkub9R", decodeAddress(Buffer.from("02000000600c113adf2f0000001b9d2210c50281c2420d956074000000", "hex")));
assert.deepEqual("EVT6Qz3wuRjyN6gaU3P3XRxpnEZnM4oPxortemaWDwFRvsv2FxgND", decodeAddress(Buffer.from("010002c8f031561c4758c9551cff47246f2c347189fe684c04da35cf88e813f810e3c2", "hex")));
assert.deepEqual("EVT7rbe5ZqAEtwQT6Tw39R29vojFqrCQasK3nT5s2pEzXh1BABXHF", decodeAddress(Buffer.from("01000386cb0bbed3c087475efbae3c51f6825deb3be68ae013411fd509f3e361139e88", "hex")));
});
it('generatedAddress', function () {
assert.deepEqual(encodeGeneratedAddressToBin("EVT0000009tDnxK74wjkVZidAeyT339HkhMozkmdkju2pFx32QS95").toString('hex'), "020000008589745c35000000000c000000");
assert.deepEqual(decodeGeneratedAddressFromBin(Buffer.from("020000008589745c35000000000c000000", "hex")), "EVT0000009tDnxK74wjkVZidAeyT339HkhMozkmdkju2pFx32QS95");
assert.deepEqual(encodeGeneratedAddressToBin("EVT000000AiCjTBuNN92tpgeqUZjaMuxkvNr5Tgsv9hTqv5Zkub9R").toString('hex'), "02000000600c113adf2f0000001b9d2210c50281c2420d956074000000");
assert.deepEqual(decodeGeneratedAddressFromBin(Buffer.from("02000000600c113adf2f0000001b9d2210c50281c2420d956074000000", "hex")), "EVT000000AiCjTBuNN92tpgeqUZjaMuxkvNr5Tgsv9hTqv5Zkub9R");
assert.deepEqual(encodeGeneratedAddressToJson("EVT0000009tDnxK74wjkVZidAeyT339HkhMozkmdkju2pFx32QS95"), { prefix: "fungible", key: "1", nonce: 0 });
assert.deepEqual(decodeGeneratedAddressFromJson({ prefix: "fungible", key: "1", nonce: 0 }), "EVT0000009tDnxK74wjkVZidAeyT339HkhMozkmdkju2pFx32QS95");
assert.deepEqual(encodeGeneratedAddressToJson("EVT000000AiCjTBuNN92tpgeqUZjaMuxkvNr5Tgsv9hTqv5Zkub9R"), { prefix: "123abcc", key: "4r80239eu09i1j04r", nonce: 47 });
assert.deepEqual(decodeGeneratedAddressFromJson({ prefix: "123abcc", key: "4r80239eu09i1j04r", nonce: 47 }), "EVT000000AiCjTBuNN92tpgeqUZjaMuxkvNr5Tgsv9hTqv5Zkub9R");
});
});
function hexNumToStr(num) {
return num.toString("16").padStart(32, 0);
}
/* istanbul ignore next */
function throws(fn, match) {
try {
fn();
assert(false, 'Expecting error');
} catch (error) {
if (!match.test(error)) {
error.message = 'Error did not match ' + match + '\n' + error.message;
throw error;
}
}
}