UNPKG

xrpl

Version:

A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser

76 lines (62 loc) 2.01 kB
import { ValidationError } from '../../errors' import { Currency } from '../common' import { AMM_MAX_TRADING_FEE } from './AMMCreate' import { BaseTransaction, isIssuedCurrency, validateBaseTransaction, } from './common' /** * Vote on the trading fee for an Automated Market Maker (AMM) instance. * * Up to 8 accounts can vote in proportion to the amount of the AMM's LP Tokens they hold. * Each new vote re-calculates the AMM's trading fee based on a weighted average of the votes. */ export interface AMMVote extends BaseTransaction { TransactionType: 'AMMVote' /** * The definition for one of the assets in the AMM's pool. */ Asset: Currency /** * The definition for the other asset in the AMM's pool. */ Asset2: Currency /** * The proposed fee to vote for, in units of 1/100,000; a value of 1 is equivalent to 0.001%. * The maximum value is 1000, indicating a 1% fee. */ TradingFee: number } /** * Verify the form and type of an AMMVote at runtime. * * @param tx - An AMMVote Transaction. * @throws When the AMMVote is Malformed. */ export function validateAMMVote(tx: Record<string, unknown>): void { validateBaseTransaction(tx) if (tx.Asset == null) { throw new ValidationError('AMMVote: missing field Asset') } if (!isIssuedCurrency(tx.Asset)) { throw new ValidationError('AMMVote: Asset must be a Currency') } if (tx.Asset2 == null) { throw new ValidationError('AMMVote: missing field Asset2') } if (!isIssuedCurrency(tx.Asset2)) { throw new ValidationError('AMMVote: Asset2 must be a Currency') } if (tx.TradingFee == null) { throw new ValidationError('AMMVote: missing field TradingFee') } if (typeof tx.TradingFee !== 'number') { throw new ValidationError('AMMVote: TradingFee must be a number') } if (tx.TradingFee < 0 || tx.TradingFee > AMM_MAX_TRADING_FEE) { throw new ValidationError( `AMMVote: TradingFee must be between 0 and ${AMM_MAX_TRADING_FEE}`, ) } }