npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@helixnetwork/core

v1.0.0-alpha.8

Published

Core functionality to interact with the helix network: generate addresses, create, broadcast and monitor transactions.

Downloads

27

Readme

@helixnetwork/core

Core functionality to interact with the Helix network. Includes methods for:

  • Generating addresses
  • Creating, attaching and broadcasting transactions
  • Querying for transactions
  • Monitoring balances
  • Monitoring inclusion states and consistency of transactions
  • Promoting and reattaching pending transactions

Installation

Install using npm:

npm install @helixnetwork/core

or using yarn:

yarn add @helixnetwork/core

API Reference

core.composeApi([settings])

| Param | Type | Default | Description | | --- | --- | --- | --- | | [settings] | object | function | {} | provider | Connection settings or provider factory | | [settings.provider] | string | "http://localhost:14265" | Uri of the node | | [settings.attachToTangle] | function | | Function to override attachToTangle with | | [settings.apiVersion] | string | number | 1 | helix.api version to be sent as X-HELIX-API-Version header. | | [settings.requestBatchSize] | number | 1000 | Number of search values per request. |

Composes API object from it's components

core.createAddNeighbors(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - addNeighbors

core.addNeighbors(uris, [callback])

Fulfil: number Number of neighbors that were added
Reject: Error

  • INVALID_URI: Invalid uri
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | uris | Array | List of URI's | | [callback] | Callback | Optional callback |

Adds a list of neighbors to the connected node by calling addNeighbors command. Assumes addNeighbors command is available on the node.

addNeighbors has temporary effect until your node relaunches.

Example

addNeighbors(['udp://148.148.148.148:14265'])
  .then(numAdded => {
    // ...
  }).catch(err => {
    // ...
  })

core.createAttachToTangle(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - attachToTangle

core.attachToTangle(trunkTransaction, branchTransaction, minWeightMagnitude, txs, [callback])

Fulfil: TransactionTxHex[] Array of transaction txs with nonce and attachment timestamps Reject: Error

  • INVALID_TRUNK_TRANSACTION: Invalid trunkTransaction
  • INVALID_BRANCH_TRANSACTION: Invalid branchTransaction
  • INVALID_MIN_WEIGHT_MAGNITUDE: Invalid minWeightMagnitude argument
  • INVALID_TRANSACTION_HBYTES: Invalid transaction txs
  • INVALID_TRANSACTIONS_TO_APPROVE: Invalid transactions to approve
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | trunkTransaction | Hash | Trunk transaction as returned by getTransactionsToApprove | | branchTransaction | Hash | Branch transaction as returned by getTransactionsToApprove | | minWeightMagnitude | number | Number of minimun trailing zeros in tail transaction hash | | txs | Array.<TransactionTxHex> | List of transaction txs | | [callback] | Callback | Optional callback |

Performs the Proof-of-Work required to attach a transaction to the Tangle by calling attachToTangle command. Returns list of transaction txs and overwrites the following fields:

  • hash
  • nonce
  • attachmentTimestamp
  • attachmentTimsetampLowerBound
  • attachmentTimestampUpperBound

This method can be replaced with a local equivelant such as < in development > or remote PoW-Integrator.

trunkTransaction and branchTransaction hashes are given by getTransactionToApprove.

Example

getTransactionsToApprove(depth)
  .then(({ trunkTransaction, branchTransaction }) =>
    attachToTangle(trunkTransaction, branchTransaction, minWightMagnitude, txs)
  )
  .then(attachedTxHex => {
    // ...
  })
  .catch(err => {
    // ...
  })

core.createBroadcastBundle(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - broadcastBundle

core.broadcastBundle(tailTransactionHash, [callback])

Fulfil: Transaction[] List of transaction objects
Reject: Error

  • INVALID_HASH: Invalid tail transaction hash
  • INVALID_BUNDLE: Invalid bundle
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | tailTransactionHash | Hash | Tail transaction hash | | [callback] | Callback | Optional callback |

Re-broadcasts all transactions in a bundle given the tail transaction hash. It might be useful when transactions did not properly propagate, particularly in the case of large bundles.

Example

broadcastTransactions(tailHash)
  .then(transactions => {
     // ...
  })
  .catch(err => {
    // ...
  })

core.createBroadcastTransactions(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - broadcastTransactions

core.broadcastTransactions(txs, [callback])

Fulfil: HBytes[] Attached transaction txs
Reject: Error

  • INVALID_ATTACHED_TX_HEX: Invalid array of attached txs
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | txs | Array.<TransactionTxHex> | Attached Transaction txs | | [callback] | Callback | Optional callback |

Broadcasts an list of attached transaction txs to the network by calling boradcastTransactions command. Tip selection and Proof-of-Work must be done first, by calling getTransactionsToApprove and attachToTangle or an equivalent attach method or remote PoW-Integrator, which is a development tool.

You may use this method to increase odds of effective transaction propagation.

Persist the transaction txs in local storage before calling this command for first time, to ensure that reattachment is possible, until your bundle has been included.

Example

broadcastTransactions(txs)
  .then(txs => {
     // ...
  })
  .catch(err => {
    // ...
  })

core.createCheckConsistency(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - checkConsistency

core.checkConsistency(transactions, [options], [callback])

Fulfil: boolean Consistency state of given transaction or co-consistency of given transactions.
Reject: Error

  • INVALID_TRANSACTION_HASH: Invalid transaction hash
  • Fetch error
  • Reason for returning false, if called with options.rejectWithReason

| Param | Type | Description | | --- | --- | --- | | transactions | Hash | Array.<Hash> | Tail transaction hash (hash of transaction with currentIndex=0), or array of tail transaction hashes. | | [options] | object | Options | | [options.rejectWithReason] | boolean | Enables rejection if state is false, with reason as error message | | [callback] | Callback | Optional callback. |

Checks if a transaction is consistent or a set of transactions are co-consistent, by calling checkConsistency command. Co-consistent transactions and the transactions that they approve (directly or inderectly), are not conflicting with each other and rest of the ledger.

As long as a transaction is consistent it might be accepted by the network. In case transaction is inconsistent, it will not be accepted, and a reattachment is required by calling replaybundle.

Example

checkConsistency(tailHash)
  .then(isConsistent => {
    // ...
  })
  .catch(err => {
    // ...
  })

Example

Example with checkConsistency & isPromotable

Consistent transactions might remain pending due to networking issues, or if not referenced by recent milestones issued by Coordinator. Therefore checkConsistency with a time heuristic can determine if a transaction should be promoted or reattached. This functionality is abstracted in isPromotable.

const isAboveMaxDepth = attachmentTimestamp => (
   // Check against future timestamps
   attachmentTimestamp < Date.now() &&
   // Check if transaction wasn't issued before last 6 milestones
   // Milestones are being issued every ~2mins
   Date.now() - attachmentTimestamp < 11 * 60 * 1000
)

const isPromotable = ({ hash, attachmentTimestamp }) => (
  checkConsistency(hash)
     .then(isConsistent => (
       isConsistent &&
       isAboveMaxDepth(attachmentTimestamp)
     ))
)

core.createFindTransactionObjects(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider for accessing a helix node |

Returns: function - findTransactionObjects

core.findTransactionObjects(query, [callback])

Fulfil: Transaction[] Array of transaction objects
Reject: Error

  • INVALID_SEARCH_KEY
  • INVALID_HASH: Invalid bundle hash
  • INVALID_TRANSACTION_HASH: Invalid approvee transaction hash
  • INVALID_ADDRESS: Invalid address
  • INVALID_TAG: Invalid tag
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | query | object | | | [query.addresses] | Array.<Hash> | List of addresses | | [query.bundles] | Array.<Hash> | List of bundle hashes | | [query.tags] | Array.<Tag> | List of tags | | [query.addresses] | Array.<Hash> | List of approvees | | [callback] | Callback | Optional callback |

Wrapper function for findTransactions and getTransactionStrings. Searches for transactions given a query object with addresses, tags and approvees fields. Multiple query fields are supported and findTransactionObjects returns intersection of results.

Example
Searching for transactions by address:

findTransactionObjects({ addresses: ['ADR...'] })
   .then(transactions => {
       // ...
   })
   .catch(err => {
       // ...
   })

core.createFindTransactions(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider for accessing a helix node |

Returns: function - findTransactionObjects

core.findTransactions(query, [callback])

Fulfil: Hash[] Array of transaction hashes
Reject: Error

  • INVALID_SEARCH_KEY
  • INVALID_HASH: Invalid bundle hash
  • INVALID_TRANSACTION_HASH: Invalid approvee transaction hash
  • INVALID_ADDRESS: Invalid address
  • INVALID_TAG: Invalid tag
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | query | object | | | [query.addresses] | Array.<Hash> | List of addresses | | [query.bundles] | Array.<Hash> | List of bundle hashes | | [query.tags] | Array.<Tag> | List of tags | | [query.addresses] | Array.<Hash> | List of approvees | | [callback] | Callback | Optional callback |

Searches for transaction hashes by calling findTransactions command. It allows to search for transactions by passing a query object with addresses, tags and approvees fields. Multiple query fields are supported and findTransactions returns intersection of results.

Example

findTransactions({ addresses: ['ADRR...'] })
   .then(hashes => {
       // ...
   })
   .catch(err => {
       // handle errors here
   })

core.createGetAccountData(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider for accessing a helix node. |

Returns: function - getAccountData

core.getAccountData(seed, options, [callback])

Fulfil: AccountData
Reject: Error

  • INVALID_SEED
  • INVALID_START_OPTION
  • INVALID_START_END_OPTIONS: Invalid combination of start & end options`
  • Fetch error

| Param | Type | Default | Description | | --- | --- | --- | --- | | seed | string | | | | options | object | | | | [options.start] | number | 0 | Starting key index | | [options.security] | number | 0 | Security level to be used for getting inputs and addresses | | [options.end] | number | | Ending key index | | [callback] | Callback | | Optional callback |

Returns an AccountData object, containing account information about addresses, transactions, inputs and total account balance.

Example

getAccountData(seed, {
   start: 0,
   security: 2
})
  .then(accountData => {
    const { addresses, inputs, transactions, balance } = accountData
    // ...
  })
  .catch(err => {
    // ...
  })

core.createGetBalances(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - getBalances

core.getBalances(addresses, threshold, [callback])

Fulfil: Balances Object with list of balances and corresponding milestone
Reject: Error

  • INVALID_HASH: Invalid address
  • INVALID_THRESHOLD: Invalid threshold
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | addresses | Array.<Hash> | List of addresses | | threshold | number | Confirmation threshold, currently 100 should be used | | [callback] | Callback | Optional callback |

Fetches confirmed balances of given addresses at the latest solid milestone, by calling getBalances command.

Example

getBalances([address], 100)
  .then(({ balances }) => {
    // ...
  })
  .catch(err => {
    // ...
  })

core.createGetBundle(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider for accessing a helix node. |

Returns: function - getBundle

core.getBundle(tailTransactionHash, [callback])

Fulfil: Transaction[] Bundle as array of transaction objects
Reject: Error

  • INVALID_TRANSACTION_HASH
  • INVALID_TAIL_HASH: Provided transaction is not tail (currentIndex !== 0)
  • INVALID_BUNDLE: Bundle is syntactically invalid
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | tailTransactionHash | Hash | Tail transaction hash | | [callback] | Callback | Optional callback |

Fetches and validates the bundle given a tail transaction hash, by calling traverseBundle and traversing through trunkTransaction.

Example

getBundle(tail)
   .then(bundle => {
       // ...
   })
   .catch(err => {
       // handle errors
   })

core.createGetTransactionStrings(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - getTransactionStrings

core.getTransactionStrings(hashes, [callback])

Fulfil: TxHex[] - Transaction txs Reject: Error{}

  • INVALID_TRANSACTION_HASH: Invalid hash
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | hashes | Array.<Hash> | List of transaction hashes | | [callback] | Callback | Optional callback |

Fetches the transaction txs given a list of transaction hashes, by calling getTransactionStrings command.

Example

getTransactionStrings(hashes)
  // Parsing as transaction objects
  .then(txs => asTransactionObjects(hashes)(txs))
  .then(transactions => {
    // ...
  })
  .catch(err => {
    // ...
  })

core.createGetInclusionStates(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider for accessing a helix node |

Returns: function - getInclusionStates

core.getInclusionStates(transactions, tips, [callback])

Fulfil: boolean[] Array of inclusion state
Reject: Error

  • INVALID_TRANSACTION_HASH: Invalid hashes or tips
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | transactions | Array.<Hash> | List of transaction hashes | | tips | Array.<Hash> | List of tips to check if transactions are referenced by | | [callback] | Callback | Optional callback |

Fetches inclusion states of given list of transactions, by calling getInclusionStates command.

Example

getInclusionStates(transactions)
  .then(states => {
    // ...
  })
  .catch(err => {
    // ...
  })

core.createGetInputs(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider for accessing a helix node |

Returns: function - getInputs

core.getInputs(seed, [options], [callback])

Fulfil: Inputs Inputs object containg a list of [Address](Address) objects and totalBalance field
Reject: Error

  • INVALID_SEED
  • INVALID_SECURITY_LEVEL
  • INVALID_START_OPTION
  • INVALID_START_END_OPTIONS
  • INVALID_THRESHOLD
  • INSUFFICIENT_BALANCE
  • Fetch error

| Param | Type | Default | Description | | --- | --- | --- | --- | | seed | string | | | | [options] | object | | | | [options.start] | number | 0 | Index offset indicating from which address we start scanning for balance | | [options.end] | number | | Last index up to which we stop scanning | | [options.security] | number | 2 | Security level of inputs | | [options.threshold] | threshold | | Minimum amount of balance required | | [callback] | Callback | | Optional callback |

Creates and returns an Inputs object by generating addresses and fetching their latest balance.

Example

getInputs(seed, { start: 0, threhold })
  .then(({ inputs, totalBalance }) => {
    // ...
  })
  .catch(err => {
    if (err.message === errors.INSUFFICIENT_BALANCE) {
       // ...
    }
    // ...
  })

core.createGetLatestInclusion(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider for accessing a helix node |

Returns: function - getLatestInclusion

core.getLatestInclusion(transactions, tips, [callback])

Fulfil: boolean[] List of inclusion states
Reject: Error

  • INVALID_HASH: Invalid transaction hash
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | transactions | Array.<Hash> | List of transactions hashes | | tips | number | List of tips to check if transactions are referenced by | | [callback] | Callback | Optional callback |

Fetches inclusion states of given transactions and a list of tips, by calling getInclusionStates on latestSolidSubtangleMilestone.

Example

getLatestInclusion(hashes)
   .then(states => {
       // ...
   })
   .catch(err => {
       // handle error
   })

core.createGetNeighbors(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - getNeighbors

core.getNeighbors([callback])

Fulfil: Neighbors
Reject: Error

  • Fetch error

| Param | Type | Description | | --- | --- | --- | | [callback] | Callback | Optional callback |

Returns list of connected neighbors.

core.createGetNewAddress(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - getNewAddress

core.getNewAddress(seed, [options], [callback])

Fulfil: Hash|Hash[] New (unused) address or list of addresses up to (and including) first unused address
Reject: Error

  • INVALID_SEED
  • INVALID_START_OPTION
  • INVALID_SECURITY
  • Fetch error

| Param | Type | Default | Description | | --- | --- | --- | --- | | seed | string | | At least 64 txs long seed | | [options] | object | | | | [options.index] | number | 0 | Key index to start search at | | [options.security] | number | 1 | Security level | | [options.checksum] | boolean | false | Deprecated Flag to include 8-txs checksum or not | | [options.total] | number | | Deprecated Number of addresses to generate. | | [options.returnAll] | boolean | false | Deprecated Flag to return all addresses, from start up to new address. | | [callback] | Callback | | Optional callback |

Generates and returns a new address by calling findTransactions until the first unused address is detected. This stops working after a snapshot.

Example

getNewAddress(seed, { index })
  .then(address => {
    // ...
  })
  .catch(err => {
    // ...
  })

core.createGetNodeInfo(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - getNodeInfo

core.getNodeInfo([callback])

Fulfil: NodeInfo Object with information about connected node.
Reject: Error

  • Fetch error

| Param | Type | Description | | --- | --- | --- | | [callback] | Callback | Optional callback |

Returns information about connected node by calling getNodeInfo command.

Example

getNodeInfo()
  .then(info => console.log(info))
  .catch(err => {
    // ...
  })

core.createGetTips(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - getTips

core.getTips([callback])

Fulfil: Hash[] List of tip hashes
Reject: Error

  • Fetch error

| Param | Type | Description | | --- | --- | --- | | [callback] | Callback | Optional callback |

Returns a list of tips (transactions not referenced by other transactions), as seen by the connected node.

Example

getTips()
  .then(tips => {
    // ...
  })
  .catch(err => {
    // ...
  })

core.createGetTransactionObjects(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - getTransactionObjects

core.getTransactionObjects(hashes, [callback])

Fulfil: Transaction[] - List of transaction objects
Reject: Error

  • INVALID_TRANSACTION_HASH
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | hashes | Array.<Hash> | Array of transaction hashes | | [callback] | function | Optional callback |

Fetches the transaction objects, given an array of transaction hashes.

Example

getTransactionObjects(hashes)
  .then(transactions => {
    // ...
  })
  .catch(err => {
    // handle errors
  })

core.createGetTransactionsToApprove(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - getTransactionsToApprove

core.getTransactionsToApprove(depth, [reference], [callback])

Fulfil: trunkTransaction, branchTransaction A pair of approved transactions
Reject: Error

  • INVALID_DEPTH
  • INVALID_REFERENCE_HASH: Invalid reference hash
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | depth | number | The depth at which Random Walk starts. A value of 3 is typically used by wallets, meaning that RW starts 3 milestones back. | | [reference] | Hash | Optional reference transaction hash | | [callback] | Callback | Optional callback |

Does the tip selection by calling getTransactionsToApprove command. Returns a pair of approved transactions, which are chosen randomly after validating the transaction txs, the signatures and cross-checking for conflicting transactions.

Tip selection is executed by a Random Walk (RW) starting at random point in given depth ending up to the pair of selected tips. For more information about tip selection please refer to the whitepaper.

The reference option allows to select tips in a way that the reference transaction is being approved too. This is useful for promoting transactions, for example with promoteTransaction.

Example

const depth = 3
const minWeightMagnitude = 14

getTransactionsToApprove(depth)
  .then(transactionsToApprove =>
     attachToTangle(minWightMagnitude, txs, { transactionsToApprove })
  )
  .then(storeAndBroadcast)
  .catch(err => {
    // handle errors here
  })

core.createIsPromotable(provider, [depth])

| Param | Type | Default | Description | | --- | --- | --- | --- | | provider | Provider | | Network provider | | [depth] | number | 6 | Depth up to which promotion is effective. |

Returns: function - isPromotable

core.isPromotable(tail, [callback])

Fulfil: boolean Consistency state of transaction or co-consistency of transactions
Reject: Error

  • INVALID_HASH: Invalid hash
  • INVALID_DEPTH: Invalid depth
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | tail | Hash | Tail transaction hash | | [callback] | Callback | Optional callback |

Checks if a transaction is promotable, by calling checkConsistency and verifying that attachmentTimestamp is above a lower bound. Lower bound is calculated based on number of milestones issued since transaction attachment.

Example

Example with promotion and reattachments

Using isPromotable to determine if transaction can be promoted or should be reattached

// We need to monitor inclusion states of all tail transactions (original tail & reattachments)
const tails = [tail]

getLatestInclusion(tails)
  .then(states => {
    // Check if none of transactions confirmed
    if (states.indexOf(true) === -1) {
      const tail = tails[tails.length - 1] // Get latest tail hash

      return isPromotable(tail)
        .then(isPromotable => isPromotable
          ? promoteTransaction(tail, 3, 14)
          : replayBundle(tail, 3, 14)
            .then(([reattachedTail]) => {
              const newTailHash = reattachedTail.hash

              // Keeping track of all tail hashes to check confirmation
              tails.push(newTailHash)

              // Promote the new tail...
            })
    }
  }).catch(err => {
    // ...
  })

core.createPrepareTransfers([provider])

| Param | Type | Description | | --- | --- | --- | | [provider] | Provider | Optional network provider to fetch inputs and remainder address. In case this is omitted, proper input objects and remainder should be passed to prepareTransfers, if required. |

Create a prepareTransfers function by passing an optional newtowrk provider. It is possible to prepare and sign transactions offline, by omitting the provider option.

Returns: function - prepareTransfers

core.prepareTransfers(seed, transfers, [options], [callback])

Fulfil: array txs Returns bundle txs
Reject: Error

  • INVALID_SEED
  • INVALID_TRANSFER_ARRAY
  • INVALID_INPUT
  • INVALID_REMAINDER_ADDRESS
  • INSUFFICIENT_BALANCE
  • NO_INPUTS
  • SENDING_BACK_TO_INPUTS
  • Fetch error, if connected to network

| Param | Type | Default | Description | | --- | --- | --- | --- | | seed | string | | | | transfers | object | | | | [options] | object | | | | [options.inputs] | Array.<Input> | | Inputs used for signing. Needs to have correct security, keyIndex and address value | | [options.inputs[].address] | Hash | | Input address txs | | [options.inputs[].keyIndex] | number | | Key index at which address was generated | | [options.inputs[].security] | number | 2 | Security level | | [options.inputs[].balance] | number | | Balance in iotas | | [options.address] | Hash | | Remainder address | | [options.security] | Number | | Security level to be used for getting inputs and reminder address | | [callback] | function | | Optional callback |

Properties

| Name | Type | Description | | --- | --- | --- | | [options.hmacKey] | Hash | HMAC key used for attaching an HMAC |

Prepares the transaction txs by generating a bundle, filling in transfers and inputs, adding remainder and signing. It can be used to generate and sign bundles either online or offline. For offline usage, please see createPrepareTransfers which creates a prepareTransfers without a network provider.

core.createPromoteTransaction(provider, [attachFn])

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider | | [attachFn] | function | Optional AttachToTangle function to override the default method. |

Returns: function - promoteTransaction

core.promoteTransaction(tail, depth, minWeightMagnitude, transfer, [options], [callback])

Fulfil: Transaction[]
Reject: Error

  • INCONSISTENT SUBTANGLE: In this case promotion has no effect and reatchment is required.
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | tail | string | | | depth | int | | | minWeightMagnitude | int | | | transfer | array | | | [options] | object | | | [options.delay] | number | Delay between spam transactions in ms | | [options.interrupt] | boolean | function | Interrupt signal, which can be a function that evaluates to boolean | | [callback] | function | |

Promotes a transaction by adding other transactions (spam by default) on top of it. Will promote maximum transfers on top of the current one with delay interval. Promotion is interruptable through interrupt option.

core.createRemoveNeighbors(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - removeNeighbors

core.removeNeighbors(uris, [callback])

Fulfil: number Number of neighbors that were removed
Reject: Error

  • INVALID_URI: Invalid uri
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | uris | Array | List of URI's | | [callback] | Callback | Optional callback |

Removes a list of neighbors from the connected helix node by calling removeNeighbors command. Assumes removeNeighbors command is available on the node.

This method has temporary effect until your helix node relaunches.

core.createReplayBundle(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - replayBundle

core.replayBundle(tail, depth, minWeightMagnitude, [callback])

Fulfil: Transaction[]
Reject: Error

  • INVALID_DEPTH
  • INVALID_MIN_WEIGHT_MAGNITUDE
  • INVALID_TRANSACTION_HASH
  • INVALID_BUNDLE
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | tail | Hash | Tail transaction hash. Tail transaction is the transaction in the bundle with currentIndex == 0. | | depth | number | The depth at which Random Walk starts. A value of 3 is typically used by wallets, meaning that RW starts 3 milestones back. | | minWeightMagnitude | number | Minimum number of trailing zeros in transaction hash. This is used by attachToTangle function to search for a valid nonce. Currently is 14 on mainnet & spamnnet and 9 on most other testnets. | | [callback] | Callback | Optional callback |

Reattaches a transfer to tangle by selecting tips & performing the Proof-of-Work again. Reattachments are usefull in case original transactions are pending, and can be done securely as many times as needed.

Example

replayBundle(tail)
  .then(transactions => {
    // ...
  })
  .catch(err => {
    // ...
  })
})

core.createSendTxHex(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - sendTxHex

core.sendTxHex(txs, depth, minWeightMagnitude, [reference], [callback])

Fulfil: Transaction[] Returns list of attached transactions
Reject: Error

  • txs
  • INVALID_DEPTH
  • INVALID_MIN_WEIGHT_MAGNITUDE
  • Fetch error, if connected to network

| Param | Type | Description | | --- | --- | --- | | txs | Array.<HBytes> | List of txs to attach, store & broadcast | | depth | number | Depth | | minWeightMagnitude | number | Min weight magnitude | | [reference] | string | Optional reference hash | | [callback] | Callback | Optional callback |

Attaches to tanlge, stores and broadcasts a list of transaction txs.

Example

prepareTransfers(seed, transfers)
  .then(txs => sendHBytes(txs, depth, minWeightMagnitude))
  .then(transactions => {
    // ...
  })
  .catch(err => {
    // ...
  })

core.createStoreAndBroadcast(provider)

| Param | Type | | --- | --- | | provider | Provider |

Returns: function - storeAndBroadcast

core.storeAndBroadcast(txs, [callback])

Fulfil: TxHex[] Attached transaction txs
Reject: Error

  • INVALID_ATTACHED_TX_HEX: Invalid attached txs
  • Fetch error

| Param | Type | Description | | --- | --- | --- |

| txs | Array.<TxHex> | Attached transaction txs | | [callback] | Callback | Optional callback |

Stores and broadcasts a list of attached transaction txs by calling storeTransactions and broadcastTransactions.

Note: Persist the transaction txs in local storage before calling this command, to ensure that reattachment is possible, until your bundle has been included.

Any transactions stored with this command will eventaully be erased, as a result of a snapshot.

core.createStoreTransactions(provider)

| Param | Type | Description | | --- | --- | --- | | provider | Provider | Network provider |

Returns: function - storeTransactions

core.storeTransactions(txs, [callback])

Fullfil: TxHex[] Attached transaction txs
Reject: Error

  • INVALID_ATTACHED_TX_HEX: Invalid attached txs
  • Fetch error

| Param | Type | Description | | --- | --- | --- | | txs | Array.<HBytes> | Attached transaction txs | | [callback] | Callback | Optional callback |

Persists a list of attached transaction txs in the store of connected node by calling storeTransactions command. Tip selection and Proof-of-Work must be done first, by calling getTransactionsToApprove and attachToTangle or an equivalent attach method or remote PoW-Integrator.

Persist the transaction txs in local storage before calling this command, to ensure reattachment is possible, until your bundle has been included.

Any transactions stored with this command will eventaully be erased, as a result of a snapshot.

core.createTraverseBundle(provider)

| Param | Type | | --- | --- | | provider | Provider |

Returns: function - traverseBundle

core.traverseBundle(trunkTransaction, [bundle], [callback])

Fulfil: Transaction[] Bundle as array of transaction objects
Reject: Error

  • INVALID_TRANSACTION_HASH
  • INVALID_TAIL_HASH: Provided transaction is not tail (currentIndex !== 0)
  • INVALID_BUNDLE: Bundle is syntactically invalid
  • Fetch error

| Param | Type | Default | Description | | --- | --- | --- | --- | | trunkTransaction | Hash | | Trunk transaction, should be tail (currentIndex == 0) | | [bundle] | Hash | [] | List of accumulated transactions | | [callback] | Callback | | Optional callback |

Fetches the bundle of a given the tail transaction hash, by traversing through trunkTransaction. It does not validate the bundle.

Example

traverseBundle(tail)
   .then(bundle => {
       // ...
   })
   .catch(err => {
       // handle errors
   })

core.generateAddress(seed, index, [security], [checksum])

Todo

  • [ ] set default security to 2 in future.

| Param | Type | Default | Description | | --- | --- | --- | --- | | seed | string | | | | index | number | | Private key index | | [security] | number | 1 | Security level of the private key | | [checksum] | boolean | false | Flag to add 0txs checksum |

Generates an address deterministically, according to the given seed, index and security level.

Returns: Hash - Address txs