Skip to content

xian-js

xian-js is a JavaScript / Typescript library for interacting with the Xian network.

Compatible with all frontend frameworks & nodejs.

Git repository

can be found here

Installation

sh
npm install xian-js

Wallet Functions

Create a Xian Keypair

typescript
import Xian from "xian-js"

// Create a new wallet
const new_wallet = Xian.Wallet.new_wallet()

console.log(new_wallet)

>>  {
        vk: "ea2cee33f9478d767d67afe345592ef36446ee04f8d588fa76942e6569a53298",
        sk: "69a8db3fb7196debc2711fad1fa1935918d09f5d8900d84c3288ea5237611c03"
    }

Create a new BIP39 / BIP 32 compatible wallet

  • BIP39 = 24 word mnemonic
  • BIP32 = derivation path
javascript
let new_wallet_bip39 = Xian.Wallet.new_wallet_bip39()

console.log(new_wallet_bip39)
>> {
       sk: 'a6b72cb3d1160c26f9f39a8f1d4a3c7c0da2ac59d193b66ac5f919ec77f28915',
       vk: '53d016586ce35c5f6ea581cadf4693dd2850621dfad6a2261e8dd311c83e11d5',
       derivationIndex: 0,
       seed: '3626c59ee5bce833a8bf5024645eb10415b39c6f9fd0ff0fb1b00b8ca9fd6ff4b8a0ed7077296cdaff1b955f03318f244dfd3fead404d93f11a3f301c0e3e1c6',
       mnemonic: 'evidence rifle behave normal duty mean junk chicken salute relief raw chunk region ocean guard swarm taste toy loop ozone spell crumble apart echo'
   }

Create a wallet from sk (private key)

javascript
const sk = 'a6b72cb3d1160c26f9f39a8f1d4a3c7c0da2ac59d193b66ac5f919ec77f28915'

const wallet = Xian.Wallet.create_wallet({sk})

console.log(wallet)

>> {
       sk: 'a6b72cb3d1160c26f9f39a8f1d4a3c7c0da2ac59d193b66ac5f919ec77f28915',
       vk: '53d016586ce35c5f6ea581cadf4693dd2850621dfad6a2261e8dd311c83e11d5',
       derivationIndex: 0,
       seed: null,
       mnemonic: null
   }

Restore a BIP39 / BIP 32 compatible wallet

  • BIP39 = 24 word mnemonic
  • BIP32 = derivation path
javascript
const seed = '3626c59ee5bce833a8bf5024645eb10415b39c6f9fd0ff0fb1b00b8ca9fd6ff4b8a0ed7077296cdaff1b955f03318f244dfd3fead404d93f11a3f301c0e3e1c6'
const derivationIndex = 0;
let wallet = Xian.Wallet.new_wallet_bip39(seed, derivationIndex)

console.log(wallet)
>> {
       sk: 'a6b72cb3d1160c26f9f39a8f1d4a3c7c0da2ac59d193b66ac5f919ec77f28915',
       vk: '53d016586ce35c5f6ea581cadf4693dd2850621dfad6a2261e8dd311c83e11d5',
       derivationIndex: 0,
       seed: null,
       mnemonic: null
   }

Get a public key (vk) from a private key (sk)

Takes the sk as an argument and returns the vk

javascript
let sk = "69a8db3fb7196debc2711fad1fa1935918d09f5d8900d84c3288ea5237611c03"
let vk = wallet.get_vk(sk)

console.log(vk)
>> 'ea2cee33f9478d767d67afe345592ef36446ee04f8d588fa76942e6569a53298'

Sign a message

Signs a string payload

javascript
const stringBuffer = Buffer.from('message')
let messageBytes = new Uint8Array(stringBuffer);
let sk = "69a8db3fb7196debc2711fad1fa1935918d09f5d8900d84c3288ea5237611c03"

let signedMessage = wallet.sign(sk, messageBytes)

console.log(signedMessage)
>> '982c204fe88e620f3319558aa6b11f9d8be75b99b3199f434f5edf2834a9c52059ba4ea3d623ac1d550170e532e919c364aad1333f757f8f22e0355cb1dd8c09'

Verify signature

verify a payload

javascript
let validSignature = wallet.verify(vk, messageBytes, signedMessage)

console.log(validSignature)
>> true

Create a Xian Transaction

Public Testnet masternode host is https://testnet.xian.org

Use Xian.TransactionBuilder(network_info, tx_info) to create a new Xian transaction.

Create network_info object

create an object that describes the masternode/network that you are going to send the transcation to.

typescript

let network_info: I_NetworkSettings = {
    chain_id: "xian-testnet-2",
    type: "testnet", // or "mainnet"
    masternode_hosts: ["https://testnet.xian.org"]
};
typescript
// Sender and Receiver public keys
let senderVk = "ea2cee33f9478d767d67afe345592ef36446ee04f8d588fa76942e6569a53298"
let receiverVk = "bb0fab41b9118f0afdabf3721fa9a6caae3c93845ed409d3118841065ad1a197"

// Kwargs are the arugments you will send the contract method.  
// For example the "currency" contract's "transfer" method needs two arguments to create a transfter; the person reciving the XIAN and the amount to transfer.  So we create a kwargs object like so.
let kwargs = {
        to: receiverVk,
        amount: 1000
}

let txInfo: I_TxInfo = {
    senderVk,
    contractName: "currency",
    methodName: "transfer",
    kwargs,
    stampLimit: 50000, // Max stamps to be used. Could use less, won't use more.
}

Create transaction

javascript
let tx = new Xian.TransactionBuilder(networkInfo, txInfo)

Send transaction

typescript
let senderSk = "69a8db3fb7196debc2711fad1fa1935918d09f5d8900d84c3288ea5237611c03"

const res = await tx.send(senderSk)