0.3.1 • Published 5 years ago

stellar-batch-payment v0.3.1

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

Stellar Batch Payment Library

Version Build Status Coverage Status David David Try on RunKit

Batch payment library for Stellar

Installation

Install the package with:

npm install stellar-batch-payment --save

Usage

The library needs to be configured with fee payer accounts (max 50).

const BatchPayment = require('stellar-batch-payment');

const batchPayment = new BatchPayment({
  defaultMemo: 'thx from batch payment lib',
  fee: 101,
  feePayersSecrets: [ 'SDL...A2J', 'SFK...ABJ', ... ]
});

Configuration

  • batchSize\ Number of payments per transaction.\ Default value: 100\ Required: false
  • defaultMemo\ Default value for payments without memo.\ Required: false
  • fee\ The max fee willing to pay per operation (in stroops) .\ Default value: 100\ Required: false
  • feePayersSecrets\ Array of fee payers secret keys .\ Required: true
  • publicNetUri\ Public horizon uri.\ Default value: "https://horizon.stellar.org"\ Required: false
  • testNetUri\ Testnet horizon uri.\ Default value: "https://horizon-testnet.stellar.org"\ Required: false
  • useTestnet\ if true then the testnet will be used.\ Default value: true\ Required: false

Batch payments from csv

The csv file must have the next headers:

amount, destination, asset.code, asset.issuer, memo.value, memo.type
  • destination can be Ed25519 public key or federated addresses
  • if the payment is XLM then the issuer can be empty
  • memo fields are optional
const stream = batchPayment.fromCsv(
  'GDN...F2K', // source public key
  ['SKY...MZQ'], // signers of source account - secret keys
  'source.csv' // source csv file path
);

const outputStream = fs.createWriteStream('output.csv');
outputStream.write(`transactionId, error, amount, accountId, destination, asset.code, asset.issuer, memo.value, memo.type`)

stream.on('data', (item) => {
  const { items, transactionId, error } = item;
  let err = error || '';
  items.forEach((i) => {
    const { amount, asset, accountId, destination, memo } = i;
    outputStream.write('\r\n');
    outputStream.write(`${transactionId}, ${err}, ${amount}, ${accountId || ''}, ${destination}, ${asset.code}, ${asset.issuer}, ${JSON.stringify(memo && (memo.value || memo || ''))}, ${memo && (memo.type || '')}`)
  });
});

Batch payments from array

const payments = [];

for (var i = 0; i < 10; i++) {
  payments.push({
    // asset: { code: 'XLM',  issuer: '' },
    // memo: { type: 'text',  value: 'my memo' },
    asset: { code: 'MyAsset', issuer: 'GCN...S2K' },
    amount: '1',
    destination: 'GCD...FXP',
  });
}
batchPayment.fromArray(
  'GDN...F2K', // source public key
  ['SKY...MZQ'], // signers of source account - secret keys
  payments // array of payments
)
.then((result) => {
  console.log('response', result);
});

Batch payments from stream (object mode)

const payments = new Stream.Readable({objectMode: true});

const stream = batchPayment.fromStream(
  'GDN...F2K', // source public key
  ['SKY...MZQ'], // signers of source account - secret keys
  payments // source stream (object mode)
);

stream.on('data', (item) => {
  const { items, transactionId, error } = item;
  let err = error || '';
  items.forEach((i) => {
    const { amount, asset, accountId, destination, memo } = i;
    console.log(`${transactionId}, ${err}, ${amount}, ${accountId || ''}, ${destination}, ${asset.code}, ${asset.issuer}, ${JSON.stringify(memo && (memo.value || memo || ''))}, ${memo && (memo.type || '')}`)
  });
});

for (var i = 0; i < 1000; i++) {
  payments.push({
    // asset: { code: 'XLM',  issuer: '' },
    // memo: { type: 'text',  value: 'my memo' },
    asset: { code: 'MyAsset', issuer: 'GCN...S2K' },
    amount: '1',
    destination: 'GCD...FXP',
  });
}

// end the stream
payments.push(null)

Development

Run all tests:

$ npm install
$ npm test

Run a single test suite:

$ npm run mocha -- test/helpers/utils.spec.js

Run a single test (case sensitive):

$ npm run mocha -- test/helpers/utils.spec.js --grep 'resolveAddress'