Bignumber = {
const Bignumber = await require('bignumber.js');
Bignumber.prototype.toBuffer = function(opts) {
var abs = this.abs();
var isNeg = this.lt(0);
var buf;
var len;
var ret;
var endian;
var hex = this.toString(16);
var size;
var hx;
if (!opts) {
opts = {};
}
endian = { 1: 'big', '-1': 'little' }[opts.endian] || opts.endian || 'big';
if (hex.charAt(0) === '-') {
throw new Error(
'Converting negative numbers to Buffers not supported yet'
);
}
size = opts.size === 'auto' ? Math.ceil(hex.length / 2) : opts.size || 1;
len = Math.ceil(hex.length / (2 * size)) * size;
buf = Buffer.alloc(len);
while (hex.length < 2 * len) {
hex = `0${hex}`;
}
hx = hex.split(new RegExp(`(.{${2 * size}})`)).filter(s => s.length > 0);
hx.forEach((chunk, i) => {
for (var j = 0; j < size; j++) {
var ix = i * size + (endian === 'big' ? j : size - j - 1);
buf[ix] = parseInt(chunk.slice(j * 2, j * 2 + 2), 16);
}
});
return buf;
};
Bignumber.fromBuffer = function(buf, opts) {
if (!opts) {
opts = {};
}
var endian =
{ 1: 'big', '-1': 'little' }[opts.endian] || opts.endian || 'big';
var size = opts.size === 'auto' ? Math.ceil(buf.length) : opts.size || 1;
if (buf.length % size !== 0) {
throw new RangeError(
`Buffer length (${buf.length}) must be a multiple of size (${size})`
);
}
var hex = [];
for (var i = 0; i < buf.length; i += size) {
var chunk = [];
for (var j = 0; j < size; j++) {
chunk.push(buf[i + (endian === 'big' ? j : size - j - 1)]);
}
hex.push(chunk.map(c => (c < 16 ? '0' : '') + c.toString(16)).join(''));
}
return new Bignumber(hex.join(''), 16);
};
return Bignumber;
}