0.3.1 • Published 5 years ago
stellar-batch-payment v0.3.1
Stellar Batch Payment Library
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'