0.2.0 • Published 2 years ago

cardano-utxo-wasm v0.2.0

Weekly downloads
-
License
MIT OR Apache-2.0
Repository
github
Last release
2 years ago

UTxO utils of Cardano in WASM

.github/workflows/wasm.yml

This package wraps UTxO helpers from Rust crates such as utxo into WASM so that they can be used by Nodejs and the browsers.

UTxO Selection Example

In real use cases, policyId and assetName are usually hex string fetched from query API such as GraphQL. select is expected to be used before you feed inputs to transaction builder.

import type { Output } from 'cardano-utxo-wasm'
import init, { select, sum } from 'cardano-utxo-wasm'

// The output required to spend.
const output: Output = {
  lovelace: BigInt('10000'),
  assets: [
    { policyId: 'policy1', assetName: 'asset1', quantity: BigInt('1000') },
    { policyId: 'policy2', assetName: 'asset2', quantity: BigInt('1000') }
  ]
}

// A UTxO should not be selected because there are 2 assets not needed.
const input0: Output = {
  data: { hash: "tx0", index: 0 },
  lovelace: BigInt('100000'),
  assets: [
    { policyId: 'policy1', assetName: 'asset1', quantity: BigInt('2000') },
    { policyId: 'policy2', assetName: 'asset2', quantity: BigInt('2000') },
    { policyId: 'policy3', assetName: 'asset3', quantity: BigInt('1000') },
    { policyId: 'policy4', assetName: 'asset4', quantity: BigInt('1000') }
  ]
}

// A UTxO should be selected because there are 2 assets needed.
const input1: Output = {
  data: { hash: "tx1", index: 1 },
  lovelace: BigInt('1000'),
  assets: [
    { policyId: 'policy1', assetName: 'asset1', quantity: BigInt('2000') },
    { policyId: 'policy2', assetName: 'asset2', quantity: BigInt('1000') }
  ]
}

// A UTxO should be selected because the lovelace was not enough in `input1`.
const input2: Output = {
  data: { hash: "tx2", index: 2 },
  lovelace: BigInt('10000'),
  assets: []
}

// A UTxO should not be selected because `input1` can cover all the assets needed.
const input3: Output = {
  data: { hash: "tx3", index: 3 },
  lovelace: BigInt('10000'),
  assets: [
    { policyId: 'policy2', assetName: 'asset2', quantity: BigInt('1000') }
  ]
}

init().then(() => {
  // Select the UTxOs for the output
  const result = select(
    [input0, input1, input2, input3],
    [output],
    { lovelace: BigInt('0'), assets: [] }
  )

  // [input1, input2]
  console.log(result?.selected)

  // [input0, input3]
  console.log(result?.unselected)

  console.log(result?.excess)

  // Sum the UTxOs to one
  const total_output = sum([input0, input1, input2, input3])

  console.log(total_output)
})
0.2.0

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago