Masternode API

import {JsonRpcClient} from '@defichain/jellyfish-api-jsonrpc'
const client = new JsonRpcClient('http://foo:bar@localhost:8554')

// Using client.masternode.
const something = await client.masternode.method()

createMasternode

Creates a masternode creation transaction with given owner and operator addresses.

interface masternode {
  createMasternode (
    ownerAddress: string,
    operatorAddress?: string,
    options: CreateMasternodeOptions = { utxos: [] }
  ): Promise<string>
}

interface UTXO {
  txid: string
  vout: number
}

interface CreateMasternodeOptions {
  utxos: UTXO[]
  timelock?: MasternodeTimeLock
}

enum MasternodeTimeLock {
  FIVE_YEAR = 'FIVEYEARTIMELOCK',
  TEN_YEAR = 'TENYEARTIMELOCK'
}

listMasternodes

Returns information about multiple masternodes.

interface masternode {
  listMasternodes (pagination?: MasternodePagination, verbose?: boolean): Promise<MasternodeResult<MasternodeInfo>>
  listMasternodes (pagination: MasternodePagination, verbose: true): Promise<MasternodeResult<MasternodeInfo>>
  listMasternodes (pagination: MasternodePagination, verbose: false): Promise<MasternodeResult<string>>
  listMasternodes<T> (
    pagination: MasternodePagination = {
      including_start: true,
      limit: 100
    },
    verbose: boolean = true
  ): Promise<MasternodeResult<T>>
}

enum MasternodeState {
  PRE_ENABLED = 'PRE_ENABLED',
  ENABLED = 'ENABLED',
  PRE_RESIGNED = 'PRE_RESIGNED',
  RESIGNED = 'RESIGNED',
  PRE_BANNED = 'PRE_BANNED',
  BANNED = 'BANNED',
  UNKNOWN = 'UNKNOWN'
}

interface MasternodePagination {
  start?: string
  including_start?: boolean
  limit?: number
}

interface MasternodeInfo {
  ownerAuthAddress: string
  operatorAuthAddress: string
  rewardAddress: string
  creationHeight: number
  resignHeight: number
  resignTx: string
  collateralTx: string
  state: MasternodeState
  mintedBlocks: number
  ownerIsMine: boolean
  operatorIsMine: boolean
  localMasternode: boolean
  targetMultiplier?: number
  targetMultipliers?: number[]
  timelock?: number
}

interface MasternodeResult<T> {
  [id: string]: T
}

getMasternode

Returns information about a single masternode

interface masternode {
  getMasternode (masternodeId: string): Promise<MasternodeResult<MasternodeInfo>>
}

enum MasternodeState {
  PRE_ENABLED = 'PRE_ENABLED',
  ENABLED = 'ENABLED',
  PRE_RESIGNED = 'PRE_RESIGNED',
  RESIGNED = 'RESIGNED',
  PRE_BANNED = 'PRE_BANNED',
  BANNED = 'BANNED',
  UNKNOWN = 'UNKNOWN'
}

interface MasternodeInfo {
  ownerAuthAddress: string
  operatorAuthAddress: string
  rewardAddress: string
  creationHeight: number
  resignHeight: number
  resignTx: string
  collateralTx: string
  state: MasternodeState
  mintedBlocks: number
  ownerIsMine: boolean
  operatorIsMine: boolean
  localMasternode: boolean
  targetMultiplier?: number
  targetMultipliers?: number[]
  timelock?: number
}

interface MasternodeResult<T> {
  [id: string]: T
}

getMasternodeBlocks

Returns blocks generated by the specified masternode

interface masternode {
  getMasternodeBlocks(identifier: MasternodeBlock, depth?: number): Promise<MasternodeResult<string>> 
}

interface MasternodeBlock {
  id?: string
  ownerAddress?: string
  operatorAddress?: string
}

resignMasternode

Creates a transaction resigning a masternode.

interface masternode {
  resignMasternode (masternodeId: string, utxos: UTXO[] = []): Promise<string>
}

interface UTXO {
  txid: string
  vout: number
}

setGov

Set special governance variables

interface masternode {
  setGov (input: Record<string, any>): Promise<string>
}

setGovHeight

Set special governance variables with activation height specified

interface masternode {
  setGovHeight (input: Record<string, any>, activationHeight: number, utxos: UTXO[] = []): Promise<string>
}

getGov

Get information about governance variable

interface masternode {
  getGov (name: string): Promise<Record<string, any>>
}

listGovs

List all governance variables together if any with activation height

interface masternode {
  listGovs (): Promise<Array<Array<Record<string, any>>>>
}

isAppliedCustomTransaction

Checks that custom transaction was affected on chain

interface masternode {
  isAppliedCustomTransaction (transactionId: string, blockHeight: number): Promise<boolean>
}

getAnchorTeams

Returns the auth and confirm anchor masternode teams at current or specified height

interface masternode {
  getAnchorTeams (blockHeight?: number): Promise<AnchorTeamResult> 
}

interface AnchorTeamResult {
  auth: string[]
  confirm: string[]
}

getActiveMasternodeCount

Returns number of unique masternodes in the last specified number of blocks.

interface masternode {
  getActiveMasternodeCount (blockCount: number = 20160): Promise<number>
}

listAnchors

Returns an array of anchors if any

interface masternode {
  listAnchors (): Promise<MasternodeResult<MasternodeAnchor>> 
}

interface MasternodeAnchor {
  anchorHeight: number
  anchorHash: string
  rewardAddress: string
  dfiRewardHash: string
  btcAnchorHeight: number
  btcAnchorHash: string
  confirmSignHash: string
}

interface MasternodeResult<T> {
  [id: string]: T
}