Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/mahdiyari/hive-tx/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Asset class represents Hive blockchain assets with proper precision and symbol handling. It supports the three main asset types: HIVE, HBD (Hive Backed Dollars), and VESTS (vesting shares). Assets are formatted as amount symbol (e.g., "1.000 HIVE", "12.500 HBD", "1234.567890 VESTS") with type-appropriate precision.

Constructor

const asset = new Asset(amount, symbol)
amount
number
required
Numeric amount of the asset
symbol
string
required
Asset symbol: 'HIVE', 'HBD', 'VESTS', or legacy 'STEEM', 'SBD', 'TESTS', 'TBD'
The constructor automatically converts 'HIVE' to 'STEEM' and 'HBD' to 'SBD' internally for serialization compatibility.

Example

import { Asset } from 'hive-tx'

// Create HIVE asset
const hive = new Asset(10.5, 'HIVE')
console.log(hive.toString()) // '10.500 STEEM'

// Create HBD asset
const hbd = new Asset(25.123, 'HBD')
console.log(hbd.toString()) // '25.123 SBD'

// Create VESTS asset
const vests = new Asset(1000000.123456, 'VESTS')
console.log(vests.toString()) // '1000000.123456 VESTS'

Static Methods

fromString

Creates a new Asset instance from a string representation.
const asset = Asset.fromString(assetString, expectedSymbol?)
assetString
string
required
Asset string in format "amount symbol" (e.g., "42.000 HIVE")
expectedSymbol
string | null
default:"null"
Optional expected symbol for validation. Throws error if actual symbol doesn’t match.
returns
Asset
New Asset instance parsed from the string

Example

import { Asset } from 'hive-tx'

// Parse HIVE asset
const hive = Asset.fromString('10.000 HIVE')
console.log('Amount:', hive.amount) // 10
console.log('Symbol:', hive.symbol) // 'STEEM' (internal representation)

// Parse HBD asset
const hbd = Asset.fromString('25.500 HBD')
console.log(hbd.toString()) // '25.500 SBD'

// Parse with validation
const validated = Asset.fromString('100.000 HIVE', 'HIVE')

// This throws an error
try {
  Asset.fromString('100.000 HBD', 'HIVE')
} catch (error) {
  console.error(error.message)
  // Output: Invalid asset, expected symbol: HIVE got: SBD
}

from

Convenience method to create a new Asset from various input types.
const asset = Asset.from(value, symbol?)
value
number | string | Asset
required
Value to convert to Asset:
  • number: Creates asset with specified symbol
  • string: Parses asset string
  • Asset: Returns as-is or validates symbol
symbol
string | null
Symbol to use for number values or validate against
returns
Asset
New or existing Asset instance

Example

import { Asset } from 'hive-tx'

// From number (requires symbol)
const asset1 = Asset.from(42, 'HIVE')
console.log(asset1.toString()) // '42.000 STEEM'

// From string
const asset2 = Asset.from('25.500 HBD')
console.log(asset2.amount) // 25.5

// From existing Asset (validates symbol)
const asset3 = Asset.from(asset1, 'HIVE')
console.log(asset3 === asset1) // true (if symbol matches internally)

// From Asset with validation
try {
  Asset.from(asset1, 'HBD') // asset1 is HIVE
} catch (error) {
  console.error(error.message)
  // Output: Invalid asset, expected symbol: HBD got: STEEM
}

// Flexible function parameter
function processAsset(value: number | string | Asset) {
  const asset = Asset.from(value, 'HIVE')
  return asset.amount * 2
}

console.log(processAsset(10)) // 20
console.log(processAsset('5.000 HIVE')) // 10
console.log(processAsset(asset1)) // 84

Instance Methods

getPrecision

Returns the decimal precision for the asset type.
const precision = asset.getPrecision()
returns
number
Decimal precision:
  • 3 for HIVE, HBD, STEEM, SBD, TESTS, TBD
  • 6 for VESTS

Example

import { Asset } from 'hive-tx'

const hive = new Asset(10, 'HIVE')
console.log(hive.getPrecision()) // 3

const vests = new Asset(1000000, 'VESTS')
console.log(vests.getPrecision()) // 6

// Precision determines formatting
const amount = 12.1234567
const hiveAsset = new Asset(amount, 'HIVE')
const vestsAsset = new Asset(amount, 'VESTS')

console.log(hiveAsset.toString()) // '12.123 STEEM' (3 decimals)
console.log(vestsAsset.toString()) // '12.123457 VESTS' (6 decimals)

toString

Returns a string representation of the asset with proper precision.
const assetString = asset.toString()
returns
string
Formatted asset string: "amount symbol" with type-appropriate decimal places

Example

import { Asset } from 'hive-tx'

// HIVE/HBD with 3 decimal places
const hive = new Asset(10.5, 'HIVE')
console.log(hive.toString()) // '10.500 STEEM'

const hbd = new Asset(25.1, 'HBD')
console.log(hbd.toString()) // '25.100 SBD'

// VESTS with 6 decimal places
const vests = new Asset(1234.56, 'VESTS')
console.log(vests.toString()) // '1234.560000 VESTS'

// Rounding applied automatically
const rounded = new Asset(10.123456789, 'HIVE')
console.log(rounded.toString()) // '10.123 STEEM'

toJSON

Returns JSON representation of the asset (same as toString()).
const json = asset.toJSON()
returns
string
Asset string representation

Example

import { Asset } from 'hive-tx'

const hive = new Asset(10, 'HIVE')

// Called automatically by JSON.stringify
const json = JSON.stringify({ balance: hive })
console.log(json)
// Output: {"balance":"10.000 STEEM"}

// Manual call
console.log(hive.toJSON()) // '10.000 STEEM'

Supported Asset Types

HIVE (Liquid HIVE)

import { Asset } from 'hive-tx'

const hive = Asset.from('10.000 HIVE')
console.log('Amount:', hive.amount) // 10
console.log('Symbol:', hive.symbol) // 'STEEM' (internal)
console.log('Precision:', hive.getPrecision()) // 3
console.log('String:', hive.toString()) // '10.000 STEEM'

HBD (Hive Backed Dollars)

import { Asset } from 'hive-tx'

const hbd = Asset.from('25.500 HBD')
console.log('Amount:', hbd.amount) // 25.5
console.log('Symbol:', hbd.symbol) // 'SBD' (internal)
console.log('Precision:', hbd.getPrecision()) // 3
console.log('String:', hbd.toString()) // '25.500 SBD'

VESTS (Vesting Shares / Hive Power)

import { Asset } from 'hive-tx'

const vests = Asset.from('1234567.123456 VESTS')
console.log('Amount:', vests.amount) // 1234567.123456
console.log('Symbol:', vests.symbol) // 'VESTS'
console.log('Precision:', vests.getPrecision()) // 6
console.log('String:', vests.toString()) // '1234567.123456 VESTS'

Usage in Operations

Assets are commonly used in Hive operations:

Transfer Operation

import { Transaction, PrivateKey, Asset } from 'hive-tx'

async function sendTransfer() {
  const tx = new Transaction()
  
  // Using asset string directly
  await tx.addOperation('transfer', {
    from: 'alice',
    to: 'bob',
    amount: '10.000 HIVE',
    memo: 'Payment'
  })
  
  // Or using Asset class
  const amount = new Asset(10, 'HIVE')
  await tx.addOperation('transfer', {
    from: 'alice',
    to: 'carol',
    amount: amount.toString(),
    memo: 'Payment'
  })
  
  const key = PrivateKey.fromLogin('alice', 'password', 'active')
  tx.sign(key)
  
  const result = await tx.broadcast()
  console.log('Transfers sent:', result.tx_id)
}

sendTransfer()

Transfer to Vesting (Power Up)

import { Transaction, PrivateKey, Asset } from 'hive-tx'

async function powerUp() {
  const tx = new Transaction()
  
  const amount = Asset.from(100, 'HIVE')
  
  await tx.addOperation('transfer_to_vesting', {
    from: 'alice',
    to: 'alice',
    amount: amount.toString()
  })
  
  const key = PrivateKey.fromLogin('alice', 'password', 'active')
  tx.sign(key)
  
  await tx.broadcast()
  console.log('Powered up:', amount.toString())
}

powerUp()

Withdraw Vesting (Power Down)

import { Transaction, PrivateKey, Asset } from 'hive-tx'

async function powerDown() {
  const tx = new Transaction()
  
  // Specify VESTS amount to power down
  const vests = Asset.from(1000000, 'VESTS')
  
  await tx.addOperation('withdraw_vesting', {
    account: 'alice',
    vesting_shares: vests.toString()
  })
  
  const key = PrivateKey.fromLogin('alice', 'password', 'active')
  tx.sign(key)
  
  await tx.broadcast()
  console.log('Power down initiated:', vests.toString())
}

powerDown()

Asset Arithmetic

import { Asset } from 'hive-tx'

// Create assets
const asset1 = Asset.from('10.000 HIVE')
const asset2 = Asset.from('5.500 HIVE')

// Manual arithmetic on amounts
const sum = new Asset(asset1.amount + asset2.amount, 'HIVE')
console.log('Sum:', sum.toString()) // '15.500 STEEM'

const difference = new Asset(asset1.amount - asset2.amount, 'HIVE')
console.log('Difference:', difference.toString()) // '4.500 STEEM'

const product = new Asset(asset1.amount * 2, 'HIVE')
console.log('Double:', product.toString()) // '20.000 STEEM'

// Division
const quotient = new Asset(asset1.amount / 2, 'HIVE')
console.log('Half:', quotient.toString()) // '5.000 STEEM'

Validation and Error Handling

import { Asset } from 'hive-tx'

try {
  // Invalid symbol
  Asset.fromString('10.000 INVALID')
} catch (error) {
  console.error(error.message)
  // Output: Invalid asset symbol: INVALID
}

try {
  // Invalid amount
  Asset.fromString('abc HIVE')
} catch (error) {
  console.error(error.message)
  // Output: Invalid asset amount: abc
}

try {
  // Symbol mismatch
  Asset.fromString('10.000 HBD', 'HIVE')
} catch (error) {
  console.error(error.message)
  // Output: Invalid asset, expected symbol: HIVE got: SBD
}

try {
  // Invalid type
  Asset.from({} as any)
} catch (error) {
  console.error(error.message)
  // Output: Invalid asset '[object Object]'
}

Parsing Account Balances

import { Asset } from 'hive-tx'
import { Client } from '@hiveio/dhive'

const client = new Client(['https://api.hive.blog'])

async function getAccountBalances(username: string) {
  const [account] = await client.database.getAccounts([username])
  if (!account) {
    throw new Error(`Account ${username} not found`)
  }
  
  // Parse balances
  const hiveBalance = Asset.fromString(account.balance, 'HIVE')
  const hbdBalance = Asset.fromString(account.hbd_balance, 'HBD')
  const vestingShares = Asset.fromString(account.vesting_shares, 'VESTS')
  
  console.log('Balances for', username)
  console.log('HIVE:', hiveBalance.amount)
  console.log('HBD:', hbdBalance.amount)
  console.log('VESTS:', vestingShares.amount)
  
  // Calculate total in HIVE (requires conversion rate)
  const props = await client.database.getDynamicGlobalProperties()
  const totalVests = Asset.fromString(props.total_vesting_shares).amount
  const totalHive = Asset.fromString(props.total_vesting_fund_hive).amount
  const vestToHive = totalHive / totalVests
  
  const hivePower = vestingShares.amount * vestToHive
  console.log('Hive Power (HP):', hivePower.toFixed(3))
}

getAccountBalances('alice')

Properties

amount
number
Numeric amount of the asset
symbol
string
Asset symbol (internally stored as STEEM, SBD, or VESTS for serialization)

Legacy Symbol Handling

Symbol Conversion:The Asset class internally converts:
  • 'HIVE''STEEM'
  • 'HBD''SBD'
This is for blockchain serialization compatibility. When you create assets with ‘HIVE’ or ‘HBD’, they’re stored as ‘STEEM’ or ‘SBD’ internally, but this is transparent to most use cases.
import { Asset } from 'hive-tx'

const hive = new Asset(10, 'HIVE')
console.log('Internal symbol:', hive.symbol) // 'STEEM'
console.log('String representation:', hive.toString()) // '10.000 STEEM'

// When parsing, use HIVE/HBD
const parsed = Asset.fromString('10.000 HIVE')
console.log('Parsed symbol:', parsed.symbol) // 'STEEM'

See Also

Build docs developers (and LLMs) love