mirror of
https://github.com/Xahau/xahau.js.git
synced 2026-04-29 15:37:50 +00:00
99 lines
2.4 KiB
JavaScript
99 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
var utils = require('./utils');
|
|
var extend = require('extend');
|
|
|
|
var UInt = require('./uint').UInt;
|
|
var Base = require('./base').Base;
|
|
|
|
//
|
|
// UInt160 support
|
|
//
|
|
|
|
var UInt160 = extend(function() {
|
|
this._value = NaN;
|
|
this._version_byte = undefined;
|
|
this._update();
|
|
}, UInt);
|
|
|
|
UInt160.width = 20;
|
|
UInt160.prototype = extend({}, UInt.prototype);
|
|
UInt160.prototype.constructor = UInt160;
|
|
|
|
var HEX_ZERO = UInt160.HEX_ZERO = '0000000000000000000000000000000000000000';
|
|
var HEX_ONE = UInt160.HEX_ONE = '0000000000000000000000000000000000000001';
|
|
|
|
UInt160.ACCOUNT_ZERO = 'rrrrrrrrrrrrrrrrrrrrrhoLvTp';
|
|
UInt160.ACCOUNT_ONE = 'rrrrrrrrrrrrrrrrrrrrBZbvji';
|
|
UInt160.STR_ZERO = utils.hexToString(HEX_ZERO);
|
|
UInt160.STR_ONE = utils.hexToString(HEX_ONE);
|
|
|
|
UInt160.prototype.set_version = function(j) {
|
|
this._version_byte = j;
|
|
return this;
|
|
};
|
|
|
|
UInt160.prototype.get_version = function() {
|
|
return this._version_byte;
|
|
};
|
|
|
|
// value = NaN on error.
|
|
UInt160.prototype.parse_json = function(j) {
|
|
if (typeof j === 'number' && !isNaN(j)) {
|
|
// Allow raw numbers - DEPRECATED
|
|
// This is used mostly by the test suite and is supported
|
|
// as a legacy feature only. DO NOT RELY ON THIS BEHAVIOR.
|
|
this.parse_number(j);
|
|
this._version_byte = Base.VER_ACCOUNT_ID;
|
|
} else if (typeof j !== 'string') {
|
|
this._value = NaN;
|
|
} else if (j[0] === 'r') {
|
|
this._value = Base.decode_check(Base.VER_ACCOUNT_ID, j);
|
|
this._version_byte = Base.VER_ACCOUNT_ID;
|
|
} else {
|
|
this.parse_hex(j);
|
|
}
|
|
|
|
this._update();
|
|
|
|
return this;
|
|
};
|
|
|
|
UInt160.prototype.parse_generic = function(j) {
|
|
UInt.prototype.parse_generic.call(this, j);
|
|
|
|
if (isNaN(this._value)) {
|
|
if ((typeof j === 'string') && j[0] === 'r') {
|
|
this._value = Base.decode_check(Base.VER_ACCOUNT_ID, j);
|
|
}
|
|
}
|
|
|
|
this._update();
|
|
|
|
return this;
|
|
};
|
|
|
|
// XXX Json form should allow 0 and 1, C++ doesn't currently allow it.
|
|
UInt160.prototype.to_json = function(opts) {
|
|
opts = opts || {};
|
|
|
|
if (this.is_valid()) {
|
|
// If this value has a type, return a Base58 encoded string.
|
|
if (typeof this._version_byte === 'number') {
|
|
var output = Base.encode_check(this._version_byte, this.to_bytes());
|
|
|
|
if (opts.gateways && output in opts.gateways) {
|
|
output = opts.gateways[output];
|
|
}
|
|
|
|
return output;
|
|
}
|
|
return this.to_hex();
|
|
}
|
|
return NaN;
|
|
};
|
|
|
|
exports.UInt160 = UInt160;
|
|
|
|
// vim:sw=2:sts=2:ts=8:et
|