Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (testnet && !res.secret) {
console.log('acquiring testnet account...')
const resp = await fetch('https://faucet.altnet.rippletest.net/accounts', { method: 'POST' })
const json = await resp.json()
res.address = json.account.address
res.secret = json.account.secret
console.log('got testnet address "' + res.address + '"')
console.log('waiting for testnet API to fund address...')
await new Promise(resolve => setTimeout(resolve, 10000))
} else {
res.address = (await inquirer.prompt({
type: 'input',
name: 'address',
message: 'XRP address:',
default: deriveAddress(deriveKeypair(res.secret).publicKey),
validate: (address) => isValidAccountID(address)
})).address
// Ensure that the given account exists and has enough XRP to create a channel.
await validateAddress(res.xrpServer, res.address).catch((err) => {
console.error('Error configuring uplink: ' + err.message)
process.exit(1)
})
}
const btpName = res.name || ''
const btpSecret = hmac(hmac(parentBtpHmacKey, res.parent + btpName), res.secret).toString('hex')
const btpServer = 'btp+wss://' + btpName + ':' + btpSecret + '@' + res.parent
return {
relation: 'parent',
plugin: require.resolve('ilp-plugin-xrp-asym-client'),
assetCode: 'XRP',
assetScale: 9,
/**
* SET YOUR ACCOUNT SEQUENCE
* You can check your current sequence at
* any XRP ledger explorer, like:
* https://bithomp.com/explorer/
* Bithomp shows:
* "Transactions: 1234"
* In this case your AccountSequence is 1235 (+1).
*/
let AccountSequence = 123
const seed = bip39.mnemonicToSeed(mnemonic) // Note: change the line above to: const seed = bip39.mnemonicToSeed(mnemonic, 'MyPassphrase') ... if you have a BIP39 passphrase.
const m = bip32.fromSeedBuffer(seed)
const SeedOrKeypair = m.derivePath("m/44'/144'/0'/0/0").keyPair.getKeyPairs()
const WalletAddress = ripple.deriveAddress(SeedOrKeypair.publicKey)
const Transaction = {
TransactionType: 'TrustSet',
Flags: 131072, // tfSetNoRipple
Account: WalletAddress,
LimitAmount: {
currency : "USD",
issuer : "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",
value : "1000000000"
},
Fee: 15,
Sequence: AccountSequence
}
new RippledWsClientSign(Transaction, SeedOrKeypair).then((Transaction) => {
console.log(`\n\nTransaction signed, and only valid for the specified Sequence
createAddressPrivatekey() {
try {
const t0 = performance.now();
const seed = bip39.mnemonicToSeed(this.mnemonic); // creates seed buffer
console.log('mnemonic: ' + this.mnemonic);
var entropy = new Buffer(seed, 'hex');
console.log("entropy", entropy);
var secret = keypairs.generateSeed({entropy: entropy});
var keypair = keypairs.deriveKeypair(secret);
var publicKey = keypair.publicKey;
var address = keypairs.deriveAddress(publicKey);
var privateKey = keypair.privateKey;
this.address = address;
this.privateKey = privateKey;
this.publicKey = publicKey;
this.secret = secret;
const t1 = performance.now();
console.log(`Call to createAddressPrivatekey for each Ripple (${address}) took ${t1 - t0} milliseconds.`);
} catch (e) {
console.error(e);
}
}
createAddressPrivatekey() {
try {
const t0 = performance.now();
const seed = bip39.mnemonicToSeed(this.mnemonic); // creates seed buffer
console.log('mnemonic: ' + this.mnemonic);
var entropy = new Buffer(seed, 'hex');
console.log("entropy", entropy);
var secret = keypairs.generateSeed({entropy: entropy});
var keypair = keypairs.deriveKeypair(secret);
var publicKey = keypair.publicKey;
var address = keypairs.deriveAddress(publicKey);
var privateKey = keypair.privateKey;
this.address = address;
this.privateKey = privateKey;
this.publicKey = publicKey;
this.secret = secret;
const t1 = performance.now();
console.log(`Call to createAddressPrivatekey for each Ripple (${address}) took ${t1 - t0} milliseconds.`);
} catch (e) {
console.error(e);
}
}
return co(function *() {
const { userKeychain, backupKeychain, bitgoKeychain } = keychains;
const userKey = HDNode.fromBase58(userKeychain.pub).getKey();
const userAddress = rippleKeypairs.deriveAddress(userKey.getPublicKeyBuffer().toString('hex'));
const backupKey = HDNode.fromBase58(backupKeychain.pub).getKey();
const backupAddress = rippleKeypairs.deriveAddress(backupKey.getPublicKeyBuffer().toString('hex'));
const bitgoKey = HDNode.fromBase58(bitgoKeychain.pub).getKey();
const bitgoAddress = rippleKeypairs.deriveAddress(bitgoKey.getPublicKeyBuffer().toString('hex'));
// initially, we need to generate a random root address which has to be distinct from all three keychains
let keyPair = ECPair.makeRandom();
if (walletParams.rootPrivateKey) {
const rootPrivateKey = walletParams.rootPrivateKey;
if (typeof rootPrivateKey !== 'string' || rootPrivateKey.length !== 64) {
throw new Error('rootPrivateKey needs to be a hexadecimal private key string');
}
keyPair = ECPair.fromPrivateKeyBuffer(Buffer.from(walletParams.rootPrivateKey, 'hex'));
}
const privateKey: Buffer = keyPair.getPrivateKeyBuffer();
const publicKey: Buffer = keyPair.getPublicKeyBuffer();
const rootAddress = rippleKeypairs.deriveAddress(publicKey.toString('hex'));
return co(function *() {
const { userKeychain, backupKeychain, bitgoKeychain } = keychains;
const userKey = HDNode.fromBase58(userKeychain.pub).getKey();
const userAddress = rippleKeypairs.deriveAddress(userKey.getPublicKeyBuffer().toString('hex'));
const backupKey = HDNode.fromBase58(backupKeychain.pub).getKey();
const backupAddress = rippleKeypairs.deriveAddress(backupKey.getPublicKeyBuffer().toString('hex'));
const bitgoKey = HDNode.fromBase58(bitgoKeychain.pub).getKey();
const bitgoAddress = rippleKeypairs.deriveAddress(bitgoKey.getPublicKeyBuffer().toString('hex'));
// initially, we need to generate a random root address which has to be distinct from all three keychains
let keyPair = ECPair.makeRandom();
if (walletParams.rootPrivateKey) {
const rootPrivateKey = walletParams.rootPrivateKey;
if (typeof rootPrivateKey !== 'string' || rootPrivateKey.length !== 64) {
throw new Error('rootPrivateKey needs to be a hexadecimal private key string');
}
keyPair = ECPair.fromPrivateKeyBuffer(Buffer.from(walletParams.rootPrivateKey, 'hex'));
}
const bitgoKey = HDNode.fromBase58(bitgoKeychain.pub).getKey();
const bitgoAddress = rippleKeypairs.deriveAddress(bitgoKey.getPublicKeyBuffer().toString('hex'));
// initially, we need to generate a random root address which has to be distinct from all three keychains
let keyPair = ECPair.makeRandom();
if (walletParams.rootPrivateKey) {
const rootPrivateKey = walletParams.rootPrivateKey;
if (typeof rootPrivateKey !== 'string' || rootPrivateKey.length !== 64) {
throw new Error('rootPrivateKey needs to be a hexadecimal private key string');
}
keyPair = ECPair.fromPrivateKeyBuffer(Buffer.from(walletParams.rootPrivateKey, 'hex'));
}
const privateKey: Buffer = keyPair.getPrivateKeyBuffer();
const publicKey: Buffer = keyPair.getPublicKeyBuffer();
const rootAddress = rippleKeypairs.deriveAddress(publicKey.toString('hex'));
const self = this;
const rippleLib = ripple();
const feeInfo = yield self.getFeeInfo();
const openLedgerFee = new BigNumber(feeInfo.xrpOpenLedgerFee);
const medianFee = new BigNumber(feeInfo.xrpMedianFee);
const fee = BigNumber.max(openLedgerFee, medianFee).times(1.5).toFixed(0);
// configure multisigners
const multisigAssignmentTx = {
TransactionType: 'SignerListSet',
Account: rootAddress,
SignerQuorum: 2,
SignerEntries: [
{
function sign(
this: RippleAPI,
txJSON: string,
secret?: any,
options?: SignOptions,
keypair?: KeyPair
): {signedTransaction: string; id: string} {
if (typeof secret === 'string') {
// we can't validate that the secret matches the account because
// the secret could correspond to the regular key
validate.sign({txJSON, secret})
return signWithKeypair(
this,
txJSON,
keypairs.deriveKeypair(secret),
options
)
} else {
if (!keypair && !secret) {
// Clearer message than 'ValidationError: instance is not exactly one from [subschema 0],[subschema 1]'
throw new utils.common.errors.ValidationError(
'sign: Missing secret or keypair.'
)
}
return signWithKeypair(this, txJSON, keypair ? keypair : secret, options)
}
}
if (this.hasMultiSigners()) {
return this;
}
const prev_sig = this.tx_json.TxnSignature;
delete this.tx_json.TxnSignature;
const hash = this.signingHash();
// If the hash is the same, we can re-use the previous signature
if (prev_sig && hash === this.previousSigningHash) {
this.tx_json.TxnSignature = prev_sig;
return this;
}
const keypair = deriveKeypair(secret || this._secret);
this.tx_json.TxnSignature = sign(new Buffer(this.signingData(), 'hex'),
keypair.privateKey);
this.previousSigningHash = hash;
return this;
};
const inquirer = require('inquirer')
const table = require('good-table')
const chalk = require('chalk')
const { deriveAddress, deriveKeypair } = require('ripple-keypairs')
const { RippleAPI } = require('ripple-lib')
const XRP_ADDRESS = process.env.XRP_ADDRESS
const XRP_SECRET = process.env.XRP_SECRET
const server = process.env.XRP_SERVER
const infoMode = process.env.INFO_MODE
if (!XRP_SECRET) {
console.error('xrp secret must be specified')
process.exit(1)
}
const address = XRP_ADDRESS || deriveAddress(deriveKeypair(XRP_SECRET).publicKey)
async function run () {
const api = new RippleAPI({ server })
console.log('connecting api...')
await api.connect()
console.log('getting account...')
const res = await api.getAccountInfo(address)
console.log(chalk.green('balance: '), res.xrpBalance + ' XRP')
console.log(chalk.green('account: '), address)
const channels = await api.connection.request({
command: 'account_channels',
account: address
})