improve toBTC and fromBTC while ensuring safety.
This commit is contained in:
parent
f939d73b38
commit
14f08e891c
@ -451,7 +451,18 @@ utils.assert.equal = function assertEqual(l, r, msg) {
|
|||||||
throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
|
throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
|
||||||
};
|
};
|
||||||
|
|
||||||
utils.toBTC = function toBTC(satoshi) {
|
utils.toBTC = function toBTC(satoshi, strict) {
|
||||||
|
if (typeof satoshi === 'string' && /^\d+(?:\.\d+)?$/.test(satoshi)) {
|
||||||
|
satoshi = new bn(satoshi, 10);
|
||||||
|
} else if (typeof satoshi === 'number') {
|
||||||
|
// XXX Dangerous precision - do not use for any real txes
|
||||||
|
if (!strict)
|
||||||
|
satoshi = new bn(Math.floor(+satoshi || 0).toString(16), 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(satoshi instanceof bn))
|
||||||
|
throw new Error('could not calculate btc');
|
||||||
|
|
||||||
var m = new bn(10000000).mul(new bn(10));
|
var m = new bn(10000000).mul(new bn(10));
|
||||||
var lo = satoshi.mod(m);
|
var lo = satoshi.mod(m);
|
||||||
if (lo.cmpn(0) !== 0) {
|
if (lo.cmpn(0) !== 0) {
|
||||||
@ -462,9 +473,35 @@ utils.toBTC = function toBTC(satoshi) {
|
|||||||
} else {
|
} else {
|
||||||
lo = '';
|
lo = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
return satoshi.div(m).toString(10) + lo.replace(/0+$/, '');
|
return satoshi.div(m).toString(10) + lo.replace(/0+$/, '');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
utils.fromBTC = function(btc, strict) {
|
||||||
|
var satoshi;
|
||||||
|
|
||||||
|
if (typeof btc === 'string' && /^\d+(?:\.\d+)?$/.test(btc)) {
|
||||||
|
var parts = btc.split('.');
|
||||||
|
parts[0] = parts[0] || '0';
|
||||||
|
parts[1] = parts[1] || '0';
|
||||||
|
while (parts[1].length < 8)
|
||||||
|
parts[1] += '0';
|
||||||
|
parts[0] = parts[0].replace(/^0+/, '');
|
||||||
|
satoshi = new bn(parts[0] + parts[1], 10);
|
||||||
|
} else if (typeof btc === 'number') {
|
||||||
|
// XXX Dangerous precision - do not use for any real txes
|
||||||
|
if (!strict)
|
||||||
|
satoshi = new bn(+btc || 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(satoshi instanceof bn))
|
||||||
|
throw new Error('could not calculate satoshis');
|
||||||
|
|
||||||
|
var m = new bn(10000000).mul(new bn(10));
|
||||||
|
satoshi.imuln(m);
|
||||||
|
return satoshi;
|
||||||
|
};
|
||||||
|
|
||||||
utils.isIP = function(ip) {
|
utils.isIP = function(ip) {
|
||||||
if (typeof ip !== 'string')
|
if (typeof ip !== 'string')
|
||||||
return 0;
|
return 0;
|
||||||
@ -519,14 +556,3 @@ utils.merge = function(target) {
|
|||||||
});
|
});
|
||||||
return target;
|
return target;
|
||||||
};
|
};
|
||||||
|
|
||||||
utils.fromBTC = function(btc) {
|
|
||||||
var satoshi = new bn(+btc || 0);
|
|
||||||
satoshi.imuln(100000000);
|
|
||||||
return satoshi;
|
|
||||||
};
|
|
||||||
|
|
||||||
utils.ntoBTC = function(satoshi) {
|
|
||||||
satoshi = new bn(Math.floor(+satoshi || 0).toString(16), 16);
|
|
||||||
return bcoin.utils.toBTC(satoshi);
|
|
||||||
};
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user