Skip to content

xray-network/cardano-web3-js

Repository files navigation

cardano-web3.js

Cardano Web3 JavaScript Library with Crypto, Explorer, Websockets, Contract, Connector modules

Demo: https://ray-network.github.io/cardano-web3.js/

🚀 SDK development is in progress and still in alpha. Not recommended for use in production

API Reference

To Do

  • MVP
  • Production Version
  • Types
  • Tests

Initialization (Simple Demo)

// see /publish/ folder for browser, nodejs, asmjs versions
// see /test/ folder for examples
import CardanoWeb3 from "../cardano-web3-browser"

const Cardano = new CardanoWeb3({
  crypto: {
    network: "testnet",
  },
  explorer: {
    url: "https://graphql-api.mainnet.dandelion.link",
  },
})

Cardano.init().then(() => {
    console.log(Cardano.crypto) // Cardano cryptography module
    console.log(Cardano.explorer) // Blockchain data explorer module

  async function getAccountState() {
    const mnemonic = await Cardano.crypto.generateMnemonic()
    const { privateKey, publicKey } = await Cardano.crypto.getAccountKeys(mnemonic)
    const { assets, transactions, utxos } = await Cardano.explorer.getAccountStateByPublicKey(publicKey, 25, 10, [0, 1]) // will fecth 10 times by 25 addresse internal and external ([0, 1]) addresses

    console.log('accountBalance', assets)
    console.log('accountTransactions', transactions)
    console.log('accountUtxos', utxos)
  }
  
  getAccountState()
})

Lib state

Cardano.version // lib version
Cardano.initialized // init state
Cardano.settings // protocol params

Crypto (Working with Cardano Crypto Entities)

Cardano.crypto.Cardano // 'cardano-serialization-lib' object
Cardano.crypto.Bech32 // 'bech32' object
Cardano.crypto.Bip39 // 'bip39-ligh' object
Cardano.crypto.BigNumber // 'bignumber.js' object
Cardano.crypto.Network // current network (testnet | mainnet)
Cardano.crypto.Utils // useful utils for working with Cardano crypto
Cardano.crypto.generateMnemonic() // generate 24 word mnemonic
Cardano.crypto.validateMnemonic(mnemonic) // validate mnemonic
Cardano.crypto.validateAddress(address) // returns type of address (shelley, byron) or false
Cardano.crypto.getAccountKeys(mnemonic) // { privateKey, publicKey, rewardAddress, accountId, accountIdFull }
Cardano.crypto.getAccountAddresses(pubKey, pageSize, [addressTypes], shift) // [] with addresses types [0] internal, [1] external, [0, 1] for both
Cardano.crypto.generatePolicyForPubkey(pubKey) // return { script, policyId } for single issuer
Cardano.crypto.txBuildMint(toAddress, tokensToMint, utxos, currentSlot, metadata, donate) // build mint tx (will send all utxos)
Cardano.crypto.txBuildAll(toAddress, utxos, currentSlot, metadata) // send all utxos
Cardano.crypto.txBuild(outputs, utxos, changeAddress, currentSlot, metadata, certificates, withdrawals, allowNoOutputs) // pick needed utxos and send to outputs (can be multipe)
Cardano.crypto.txSign(transaction, privateKey, script) // pass built tx and private key, and scripts if needed
Cardano.crypto.generateDelegationCerts(pubKey, hasKey, poolId) // generate delegation & registration certificate (if it does not exist)
Cardano.crypto.generateDeregistrationCerts(pubKey) // generate deregistration certificate
...

Explorer (Cardano-graphql Query Wrappers)

Cardano.explorer.query(query) // axios post proxy
Cardano.explorer.getNetworkInfo() // network info
Cardano.explorer.getAccountStateByPublicKey(pubKey, pageSize, maxShiftIndex, [addressTypes]) // returns { assets, transactions, utxos } by fetching pubKey derived addresses by {pageSize} count with max {maxShiftIndex} iterations ('soft' fetching of large data pieces), addresses types [0] internal, [1] external, [0, 1] for both
Cardano.explorer.txSend(transaction) // send build transaction (hex format)
...

Websockets (Ogmios Interactions)

...

Contract (Smart Contracts Interactions)

...

Connector (Web3 Events & Listeners)

...