This documentation is work in progress and web3-fusion-extend 1.0 stable is not yet released! You can find the current documentation for web3-fusion-extend 0.x.x at.

Getting Started

web3-fusion-extend is a collection of libraries which allow you to interact with a local or remote fusion node, using a HTTP or IPC connection.

Fusion offers a radical approach to representing value within a block chain environment.

A public address contain multiple assets and balances for these assets.

An assetId is the id returned when an asset is created and actions can be performed on it.

The asset creator also has the ability to increase and decrease supply.

This enables cross chain and cross functional systems to be built that enable the interchange of assets.

Assets can also be TimeLocked. When an asset is time locked its ownership is leant for the period specified. At the end of time lock period the rights of the asset are returned to the original owner.

With the representation of assets, the need to exchange assets securely and simply becomes paramount.

The Fusion protocol introduces quantumSwaps which are composed of three functions:
makeSwap - tell others what you will exchange for your asset recallSwap - cancel the request for an exchange takeSwap - exchange your asset for the other parties asset listed in the make swap

This package extends the Ethereum compatible JavaScript API which implements the Generic JSON RPC spec to support the Fusion protocol.

It’s available on npm as a node module.

You need to run a local Ethereum node to use this library.



npm install web3-fusion-extend


yarn add web3-fusion-extend


Create a web3 object as your normally would and then call web3FusionExtend with that object. web3 will then have two additional interfaces (fsn and fsntx)

var web3FusionExtend = require('web3-fusion-extend')
web3 = new Web3(provider);
web3 = web3FusionExtend.extend(web3)
console.log(web3); // {fsn: .., fsntx: ...} // It's here!

There you go, now you can use it:

var balance = web3.eth.getBalance(coinbase);
    .getAllBalances( web3.eth.coinbase ) // fsn supports multiple assets and balances on an address
    .then( balances => {
      console.log( balances )
      assert(  balances[web3.fsn.consts.FSNToken] , "there should be a balance for fusion tokens always"  )
    .catch(err => {

You can find more examples in the test directory.

There is also a full block explorer api written as an example.


We’d greatly appreciate any contribution you make.


Node.js npm

# On Linux:
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
sudo apt-get install nodejs-legacy

Testing (mocha)

When testing a connect string to a local fusion node and a wallet address is needed as environment variables

CONNECT_STRING="ws://" WALLET_ADDRESS="0x4A5a7Aa4130e407d3708dE56db9000F059200C62" npm test





LGPL-3.0+ © 2015 Contributors