PHP WebShell
Текущая директория: /opt/bitgo-express-backup-20251206-1327/node_modules/bitgo/src
Просмотр файла: util.js
var Util = module.exports;
var bitcoin = require('bitcoinjs-lib');
var ethUtil = require('ethereumjs-util');
var Big = require('big.js');
Util.bnToByteArrayUnsigned = function(bn) {
var ba = bn.abs().toByteArray();
if (ba.length) {
if (ba[0] == 0) {
ba = ba.slice(1);
}
return ba.map(function (v) {
return (v < 0) ? v + 256 : v;
});
} else {
// Empty array, nothing to do
return ba;
}
};
// Generate the output script for a BTC P2SH multisig address
Util.p2shMultisigOutputScript = function(m, pubKeys) {
var redeemScript = bitcoin.script.multisigOutput(2, pubKeys);
var hash = bitcoin.crypto.hash160(redeemScript);
return bitcoin.script.scriptHashOutput(hash);
};
// Convert a BTC xpub to an Ethereum address (with 0x) prefix
Util.xpubToEthAddress = function(xpub) {
var hdNode = bitcoin.HDNode.fromBase58(xpub);
var ethPublicKey = hdNode.keyPair.__Q.getEncoded(false).slice(1);
return ethUtil.bufferToHex(ethUtil.publicToAddress(ethPublicKey, false));
};
// Convert a BTC xpriv to an Ethereum private key (without 0x prefix)
Util.xprvToEthPrivateKey = function(xprv) {
var hdNode = bitcoin.HDNode.fromBase58(xprv);
var ethPrivateKey = hdNode.keyPair.d.toBuffer();
return ethUtil.setLengthLeft(ethPrivateKey, 32).toString('hex');
};
// Sign a message using Ethereum's ECsign method and return the signature string
Util.ethSignMsgHash = function(msgHash, privKey) {
var signatureInParts = ethUtil.ecsign(new Buffer(ethUtil.stripHexPrefix(msgHash), 'hex'), new Buffer(privKey, 'hex'));
// Assemble strings from r, s and v
var r = ethUtil.setLengthLeft(signatureInParts.r, 32).toString('hex');
var s = ethUtil.setLengthLeft(signatureInParts.s, 32).toString('hex');
var v = ethUtil.stripHexPrefix(ethUtil.intToHex(signatureInParts.v));
// Concatenate the r, s and v parts to make the signature string
return ethUtil.addHexPrefix(r.concat(s, v));
};
// Convert from wei string (or BN) to Ether (multiply by 1e18)
Util.weiToEtherString = function(wei) {
var bn = wei;
if (!(wei instanceof ethUtil.BN)) {
bn = new ethUtil.BN(wei);
}
Big.E_POS = 256;
Big.E_NEG = -18;
var weiString = bn.toString(10);
var big = new Big(weiString);
// 10^18
var ether = big.div('1000000000000000000');
return ether.toPrecision();
};
// Utility method for handling arguments of pageable queries
Util.preparePageableQuery = function(params) {
var query = {};
if (params.limit) {
if (typeof(params.limit) != 'number') {
throw new Error('invalid limit argument, expecting number');
}
query.limit = params.limit;
}
if (params.skip) {
if (typeof(params.skip) != 'number') {
throw new Error('invalid skip argument, expecting number');
}
query.skip = params.skip;
}
return query;
};Выполнить команду
Для локальной разработки. Не используйте в интернете!