# swtc-transaction
# swtc-transaction is seprated package from @swtc/lib (jingtum-lib)
# keeps the same interface as original without websocket dependancy
# zero config webpack and browerify
# adds transaction builds and submit
# support multiple Remote including @swtc/lib(websocket) and swtc-api(api)
# Changes
- add contract operations
- add method signPromise() and submitPromise()
- typescript OrderBook
- typescript support
- add methods buildRelationTx()
- support null Remote, swtc-api Remote and @swtc/lib Remote
- add method submitApi() to submit transactions to https://api.jingtum.com by default
- add methods buildPaymentTx(), buildOfferCreateTX(), buildOfferCancelTx()
- seperate package from @swtc/lib
# Getting and Using swtc-transaction
Via npm for Node.js
$ npm install @swtc/transaction // node.js and web app
const Transaction = require("@swtc/transaction").Transaction // cjs import
// or
import { Transaction } from "@swtc/transaction" // esm import
# Using swtc-transaction
const tx = Transaction.buildPaymentTx(options)
const tx = Transaction.buildPaymentTx(options, remote={})
const tx = Transaction.buildPaymentTx(options, remote={_axios: axios.create({})})
const tx = Transaction.buildOfferCreateTx(options, remote={})
const tx = Transaction.buildOfferCancelTx(options, remote={})
- local sign and submit
tx.addMemo() // optional
tx.setSecret("s......................")
tx.setSequence(100) // optional, automatic during signing
tx.sign(callback) // async function
tx.submitApi() // returns promise
# example
> tx = TX.buildPaymentTx({source: DATA.address, to: DATA.address2, amount: {value: 0.1, currency: 'SWT', issuer: ''}})
Transaction {
domain:
Domain {
domain: null,
_events:
[Object: null prototype] {
removeListener: [Function: updateExceptionCapture],
newListener: [Function: updateExceptionCapture],
error: [Function: debugDomainError] },
_eventsCount: 3,
_maxListeners: undefined,
members: [] },
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
_remote: {},
_token: 'swt',
tx_json:
{ Flags: 0,
Fee: 10000,
TransactionType: 'Payment',
Account: 'jGxW97eCqxfAWvmqSgNkwc2apCejiM89bG',
Amount: '100000',
Destination: 'jLvo6LSKNEYJ4KDwDuM8LU5fuSsQkE4HVW' },
_filter: [Function],
_secret: undefined }
> tx.setSecret(DATA.secret)
undefined
> tx.sign(console.log)
undefined
> null '120000220000000024000002326140000000000186A0684000000000002710732102197F1426BCA2F59B6B910F0391E55888B4FE80AF962478493104A33274B1B03A74473045022100F0175B4AFF5B1E348FC46A8C0021FF22B16CF87113C0B6E042174374416B071102203CB8A47A82576B69DB50051DF943C87872BB8F065A2D12B01ACA03890FAC8E548114AF09183A11AA70DA06E115E03B0E5478232740B58314DA976A4DE4827163F062B09050832D8D78025D5A'
> tx.tx_json
{ Flags: 0,
Fee: 0.01,
TransactionType: 'Payment',
Account: 'jGxW97eCqxfAWvmqSgNkwc2apCejiM89bG',
Amount: 0.1,
Destination: 'jLvo6LSKNEYJ4KDwDuM8LU5fuSsQkE4HVW',
Sequence: 562,
SigningPubKey:
'02197F1426BCA2F59B6B910F0391E55888B4FE80AF962478493104A33274B1B03A',
TxnSignature:
'3045022100F0175B4AFF5B1E348FC46A8C0021FF22B16CF87113C0B6E042174374416B071102203CB8A47A82576B69DB50051DF943C87872BB8F065A2D12B01ACA03890FAC8E54',
blob:
'120000220000000024000002326140000000000186A0684000000000002710732102197F1426BCA2F59B6B910F0391E55888B4FE80AF962478493104A33274B1B03A74473045022100F0175B4AFF5B1E348FC46A8C0021FF22B16CF87113C0B6E042174374416B071102203CB8A47A82576B69DB50051DF943C87872BB8F065A2D12B01ACA03890FAC8E548114AF09183A11AA70DA06E115E03B0E5478232740B58314DA976A4DE4827163F062B09050832D8D78025D5A' }
> tx.submitApi().then(console.log).catch(console.log)
Promise {}
> { status: 200,
statusText: 'OK',
data:
{ success: true,
status_code: '0',
engine_result: 'tesSUCCESS',
engine_result_code: 0,
engine_result_message:
'The transaction was applied. Only final in a validated ledger.',
tx_blob:
'120000220000000024000002326140000000000186A0684000000000002710732102197F1426BCA2F59B6B910F0391E55888B4FE80AF962478493104A33274B1B03A74473045022100F0175B4AFF5B1E348FC46A8C0021FF22B16CF87113C0B6E042174374416B071102203CB8A47A82576B69DB50051DF943C87872BB8F065A2D12B01ACA03890FAC8E548114AF09183A11AA70DA06E115E03B0E5478232740B58314DA976A4DE4827163F062B09050832D8D78025D5A',
tx_json:
{ Account: 'jGxW97eCqxfAWvmqSgNkwc2apCejiM89bG',
Amount: '100000',
Destination: 'jLvo6LSKNEYJ4KDwDuM8LU5fuSsQkE4HVW',
Fee: '10000',
Flags: 0,
Sequence: 562,
SigningPubKey:
'02197F1426BCA2F59B6B910F0391E55888B4FE80AF962478493104A33274B1B03A',
TransactionType: 'Payment',
TxnSignature:
'3045022100F0175B4AFF5B1E348FC46A8C0021FF22B16CF87113C0B6E042174374416B071102203CB8A47A82576B69DB50051DF943C87872BB8F065A2D12B01ACA03890FAC8E54',
hash:
'48D94F52CD0D9FD60634DEB5886D27149551235BD6CDA1C752F817C3290C327B' } } }
>
# Involving swtc-transaction
Build from the source and test
$ git clone https://github.com/swtcca/swtclib.git
$ npm install; npm run test