Skip to content

Commit

Permalink
use bignumber precision on gettoken and listtokens (#395)
Browse files Browse the repository at this point in the history
* fix gettoken and listtokens precision

* fix createtoken test

* replace all defi bignumber by lib bignumber
  • Loading branch information
canonbrother authored Jun 21, 2021
1 parent 60471bf commit bf3e5bb
Show file tree
Hide file tree
Showing 28 changed files with 78 additions and 65 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import waitForExpect from 'wait-for-expect'
import { BigNumber, blockchain } from '../../../src'
import { blockchain } from '../../../src'
import BigNumber from 'bignumber.js'

describe('Block', () => {
const container = new MasterNodeRegTestContainer()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import { BigNumber } from '../../../src'
import BigNumber from 'bignumber.js'
import { MempoolInfo } from '../../../src/category/blockchain'

describe('getMempoolInfo', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import waitForExpect from 'wait-for-expect'
import { BigNumber, blockchain } from '../../../src'
import { blockchain } from '../../../src'
import BigNumber from 'bignumber.js'

describe('RawMempool', () => {
const container = new MasterNodeRegTestContainer()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { GenesisKeys, MasterNodeRegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import { BigNumber } from '../../../src'
import BigNumber from 'bignumber.js'

describe('TxOut', () => {
const container = new MasterNodeRegTestContainer()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import waitForExpect from 'wait-for-expect'
import BigNumber from 'bignumber.js'

describe('Token', () => {
const container = new MasterNodeRegTestContainer()
Expand Down Expand Up @@ -48,15 +49,15 @@ describe('Token', () => {
expect(newToken.tradeable).toStrictEqual(metadata.tradeable)
expect(newToken.collateralAddress).toStrictEqual(metadata.collateralAddress)
expect(newToken.isDAT).toStrictEqual(metadata.isDAT)
expect(newToken.decimal).toStrictEqual(8)
expect(newToken.limit).toStrictEqual(0)
expect(newToken.decimal).toStrictEqual(new BigNumber('8'))
expect(newToken.limit).toStrictEqual(new BigNumber('0'))
expect(newToken.isLPS).toStrictEqual(false)
expect(newToken.finalized).toStrictEqual(false)
expect(newToken.minted).toStrictEqual(0)
expect(newToken.minted).toStrictEqual(new BigNumber('0'))
expect(typeof newToken.creationTx).toStrictEqual('string')
expect(typeof newToken.destructionTx).toStrictEqual('string')
expect(typeof newToken.creationHeight).toStrictEqual('number')
expect(typeof newToken.destructionHeight).toStrictEqual('number')
expect(newToken.creationHeight instanceof BigNumber).toStrictEqual(true)
expect(newToken.destructionHeight instanceof BigNumber).toStrictEqual(true)
}
}
})
Expand Down Expand Up @@ -101,15 +102,15 @@ describe('Token', () => {
expect(newToken.tradeable).toStrictEqual(metadata.tradeable)
expect(newToken.collateralAddress).toStrictEqual(metadata.collateralAddress)
expect(newToken.isDAT).toStrictEqual(metadata.isDAT)
expect(newToken.decimal).toStrictEqual(8)
expect(newToken.limit).toStrictEqual(0)
expect(newToken.decimal).toStrictEqual(new BigNumber('8'))
expect(newToken.limit).toStrictEqual(new BigNumber('0'))
expect(newToken.isLPS).toStrictEqual(false)
expect(newToken.finalized).toStrictEqual(false)
expect(newToken.minted).toStrictEqual(0)
expect(newToken.minted).toStrictEqual(new BigNumber('0'))
expect(typeof newToken.creationTx).toStrictEqual('string')
expect(typeof newToken.destructionTx).toStrictEqual('string')
expect(typeof newToken.creationHeight).toStrictEqual('number')
expect(typeof newToken.destructionHeight).toStrictEqual('number')
expect(newToken.creationHeight instanceof BigNumber).toStrictEqual(true)
expect(newToken.destructionHeight instanceof BigNumber).toStrictEqual(true)
}
}
})
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { MasterNodeRegTestContainer, RegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import waitForExpect from 'wait-for-expect'
import BigNumber from 'bignumber.js'

describe('Token without masternode', () => {
const container = new RegTestContainer()
Expand All @@ -27,18 +28,18 @@ describe('Token without masternode', () => {
expect(data.symbol).toStrictEqual('DFI')
expect(data.symbolKey).toStrictEqual('DFI')
expect(data.name).toStrictEqual('Default Defi token')
expect(data.decimal).toStrictEqual(8)
expect(data.limit).toStrictEqual(0)
expect(data.decimal).toStrictEqual(new BigNumber('8'))
expect(data.limit).toStrictEqual(new BigNumber('0'))
expect(data.mintable).toStrictEqual(false)
expect(data.tradeable).toStrictEqual(true)
expect(data.isDAT).toStrictEqual(true)
expect(data.isLPS).toStrictEqual(false)
expect(data.finalized).toStrictEqual(true)
expect(data.minted).toStrictEqual(0)
expect(data.minted).toStrictEqual(new BigNumber('0'))
expect(data.creationTx).toStrictEqual('0000000000000000000000000000000000000000000000000000000000000000')
expect(data.creationHeight).toStrictEqual(0)
expect(data.creationHeight).toStrictEqual(new BigNumber('0'))
expect(data.destructionTx).toStrictEqual('0000000000000000000000000000000000000000000000000000000000000000')
expect(data.destructionHeight).toStrictEqual(-1)
expect(data.destructionHeight).toStrictEqual(new BigNumber('-1'))
expect(data.collateralAddress).toStrictEqual('')
})
})
Expand Down Expand Up @@ -68,18 +69,18 @@ describe('Token on masternode', () => {
expect(data.symbol).toStrictEqual('DFI')
expect(data.symbolKey).toStrictEqual('DFI')
expect(data.name).toStrictEqual('Default Defi token')
expect(data.decimal).toStrictEqual(8)
expect(data.limit).toStrictEqual(0)
expect(data.decimal).toStrictEqual(new BigNumber('8'))
expect(data.limit).toStrictEqual(new BigNumber('0'))
expect(data.mintable).toStrictEqual(false)
expect(data.tradeable).toStrictEqual(true)
expect(data.isDAT).toStrictEqual(true)
expect(data.isLPS).toStrictEqual(false)
expect(data.finalized).toStrictEqual(true)
expect(data.minted).toStrictEqual(0)
expect(data.minted).toStrictEqual(new BigNumber('0'))
expect(data.creationTx).toStrictEqual('0000000000000000000000000000000000000000000000000000000000000000')
expect(data.creationHeight).toStrictEqual(0)
expect(data.creationHeight).toStrictEqual(new BigNumber('0'))
expect(data.destructionTx).toStrictEqual('0000000000000000000000000000000000000000000000000000000000000000')
expect(data.destructionHeight).toStrictEqual(-1)
expect(data.destructionHeight).toStrictEqual(new BigNumber('-1'))
expect(data.collateralAddress).toStrictEqual('')
})
})
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { MasterNodeRegTestContainer, RegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import waitForExpect from 'wait-for-expect'
import BigNumber from 'bignumber.js'

describe('Token without masternode', () => {
const container = new RegTestContainer()
Expand All @@ -27,18 +28,18 @@ describe('Token without masternode', () => {
expect(data.symbol).toStrictEqual('DFI')
expect(data.symbolKey).toStrictEqual('DFI')
expect(data.name).toStrictEqual('Default Defi token')
expect(data.decimal).toStrictEqual(8)
expect(data.limit).toStrictEqual(0)
expect(data.decimal).toStrictEqual(new BigNumber('8'))
expect(data.limit).toStrictEqual(new BigNumber('0'))
expect(data.mintable).toStrictEqual(false)
expect(data.tradeable).toStrictEqual(true)
expect(data.isDAT).toStrictEqual(true)
expect(data.isLPS).toStrictEqual(false)
expect(data.finalized).toStrictEqual(true)
expect(data.minted).toStrictEqual(0)
expect(data.minted).toStrictEqual(new BigNumber('0'))
expect(data.creationTx).toStrictEqual('0000000000000000000000000000000000000000000000000000000000000000')
expect(data.creationHeight).toStrictEqual(0)
expect(data.creationHeight).toStrictEqual(new BigNumber('0'))
expect(data.destructionTx).toStrictEqual('0000000000000000000000000000000000000000000000000000000000000000')
expect(data.destructionHeight).toStrictEqual(-1)
expect(data.destructionHeight).toStrictEqual(new BigNumber('-1'))
expect(data.collateralAddress).toStrictEqual('')
})

Expand Down Expand Up @@ -115,14 +116,14 @@ describe('Token on masternode', () => {
const tokens = await client.token.listTokens()
for (const k in tokens) {
const token = tokens[k]
expect(token.decimal).toStrictEqual(8)
expect(token.limit).toStrictEqual(0)
expect(token.minted).toStrictEqual(0)
expect(token.decimal).toStrictEqual(new BigNumber('8'))
expect(token.limit).toStrictEqual(new BigNumber('0'))
expect(token.minted).toStrictEqual(new BigNumber('0'))
expect(token.isLPS).toStrictEqual(false)
expect(typeof token.creationTx).toStrictEqual('string')
expect(typeof token.creationHeight).toStrictEqual('number')
expect(token.creationHeight instanceof BigNumber).toStrictEqual(true)
expect(typeof token.destructionTx).toStrictEqual('string')
expect(typeof token.destructionHeight).toStrictEqual('number')
expect(token.destructionHeight instanceof BigNumber).toStrictEqual(true)
expect(typeof token.collateralAddress).toStrictEqual('string')

switch (token.symbol) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { MasterNodeRegTestContainer, RegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import { BigNumber } from '../../../src'
import BigNumber from 'bignumber.js'

describe('Balance without masternode', () => {
const container = new RegTestContainer()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { MasterNodeRegTestContainer, RegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import waitForExpect from 'wait-for-expect'
import { BigNumber } from '../../../src'
import BigNumber from 'bignumber.js'

describe('Wallet without masternode', () => {
const container = new RegTestContainer()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { MasterNodeRegTestContainer, RegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import waitForExpect from 'wait-for-expect'
import { BigNumber } from '../../../src'
import BigNumber from 'bignumber.js'

describe('Address without masternode', () => {
const container = new RegTestContainer()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
UTXO,
ListUnspentOptions
} from '../../../src/category/wallet'
import { BigNumber } from '../../../src'
import BigNumber from 'bignumber.js'

describe('Unspent', () => {
const container = new MasterNodeRegTestContainer()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
import { ContainerAdapterClient } from '../../container_adapter_client'
import { BigNumber } from '../../../src'
import BigNumber from 'bignumber.js'
import {
UTXO,
ListUnspentOptions,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { ContainerAdapterClient } from '../../container_adapter_client'
import { MasterNodeRegTestContainer, RegTestContainer } from '@defichain/testcontainers'
import { BigNumber, wallet } from '../../../src'
import { wallet } from '../../../src'
import BigNumber from 'bignumber.js'
import waitForExpect from 'wait-for-expect'
import {
UTXO,
Expand Down
3 changes: 2 additions & 1 deletion packages/jellyfish-api-core/src/category/rawtx.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Vin, Vout } from './blockchain'
import { BigNumber, ApiClient } from '../.'
import { ApiClient } from '../.'
import BigNumber from 'bignumber.js'

export enum SigHashType {
ALL = 'ALL',
Expand Down
18 changes: 11 additions & 7 deletions packages/jellyfish-api-core/src/category/token.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import BigNumber from 'bignumber.js'
import { ApiClient } from '../.'

type TokenRegexType = `${number}@${string}`
Expand Down Expand Up @@ -71,7 +72,7 @@ export class Token {
},
verbose = true
): Promise<TokenResult> {
return await this.client.call('listtokens', [pagination, verbose], 'number')
return await this.client.call('listtokens', [pagination, verbose], 'bignumber')
}

/**
Expand All @@ -81,7 +82,10 @@ export class Token {
* @return {Promise<TokenResult>}
*/
async getToken (symbolKey: string): Promise<TokenResult> {
return await this.client.call('gettoken', [symbolKey], 'number')
// Note(canonbrother): only 'limit' and 'minted' is bignumber
// but the 'return' contains random id which is not be able to map precision exactly
// precision: { '0': limit: 'bignumber', minted: 'bignumber'}
return await this.client.call('gettoken', [symbolKey], 'bignumber')
}

/**
Expand All @@ -106,18 +110,18 @@ export interface TokenInfo {
symbol: string
symbolKey: string
name: string
decimal: number
limit: number
decimal: BigNumber
limit: BigNumber
mintable: boolean
tradeable: boolean
isDAT: boolean
isLPS: boolean
finalized: boolean
minted: number
minted: BigNumber
creationTx: string
creationHeight: number
creationHeight: BigNumber
destructionTx: string
destructionHeight: number
destructionHeight: BigNumber
collateralAddress: string
}

Expand Down
3 changes: 2 additions & 1 deletion packages/jellyfish-api-core/src/category/wallet.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { BigNumber, ApiClient } from '../.'
import { ApiClient } from '../.'
import BigNumber from 'bignumber.js'

export enum Mode {
UNSET = 'UNSET',
Expand Down
3 changes: 2 additions & 1 deletion packages/jellyfish-json/__tests__/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { BigNumber, JellyfishJSON, LosslessNumber } from '../src/'
import { JellyfishJSON, LosslessNumber } from '../src/'
import BigNumber from 'bignumber.js'

describe('parse', () => {
describe('lossless', () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/jellyfish-json/__tests__/precision.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BigNumber } from '../src'
import BigNumber from 'bignumber.js'

/**
* Why JavaScript default number should not be used as it lose precision
Expand Down
2 changes: 1 addition & 1 deletion packages/jellyfish-json/__tests__/remap.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { LosslessNumber, parse } from 'lossless-json'
import { PrecisionPath, remap } from '../src/remap'
import { BigNumber } from '../src'
import BigNumber from 'bignumber.js'

it('should remap everything in the path', () => {
const losslessObj = parse(`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BigNumber } from 'bignumber.js'
import BigNumber from 'bignumber.js'
import { Bech32, EllipticPair, HASH160, WIF } from '@defichain/jellyfish-crypto'
import { EllipticPairProvider, FeeRateProvider, Prevout, PrevoutProvider } from '../src'
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Bech32, Elliptic, EllipticPair, dSHA256 } from '@defichain/jellyfish-cr
import { MasterNodeRegTestContainer } from '@defichain/testcontainers'
import { CTransaction, CTransactionSegWit, Transaction, TransactionSegWit } from '@defichain/jellyfish-transaction'
import { SmartBuffer } from 'smart-buffer'
import { BigNumber } from 'bignumber.js'
import BigNumber from 'bignumber.js'

/**
* For test mocking only, obviously not secured.
Expand Down
2 changes: 1 addition & 1 deletion packages/jellyfish-transaction-builder/src/provider.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BigNumber } from 'bignumber.js'
import BigNumber from 'bignumber.js'
import { EllipticPair } from '@defichain/jellyfish-crypto'
import { Vout } from '@defichain/jellyfish-transaction'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
Vin, Vout, OP_DEFI_TX
} from '@defichain/jellyfish-transaction'
import { TransactionSigner, SignInputOption } from '@defichain/jellyfish-transaction-signature'
import { BigNumber } from 'bignumber.js'
import BigNumber from 'bignumber.js'
import { EllipticPairProvider, FeeRateProvider, Prevout, PrevoutProvider } from '../provider'
import { calculateFeeP2WPKH } from './txn_fee'
import { TxnBuilderError, TxnBuilderErrorType } from './txn_builder_error'
Expand Down
2 changes: 1 addition & 1 deletion packages/jellyfish-transaction-builder/src/txn/txn_fee.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BigNumber } from 'bignumber.js'
import BigNumber from 'bignumber.js'
import { SmartBuffer } from 'smart-buffer'
import {
CTransaction,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BigNumber } from 'bignumber.js'
import BigNumber from 'bignumber.js'
import { SmartBuffer } from 'smart-buffer'
import { BufferComposer, ComposableBuffer } from '../../src/buffer/buffer_composer'
import { readVarUInt, writeVarUInt } from '../../src/buffer/buffer_varuint'
Expand Down
2 changes: 1 addition & 1 deletion packages/jellyfish-transaction/__tests__/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BigNumber } from 'bignumber.js'
import BigNumber from 'bignumber.js'
import { SmartBuffer } from 'smart-buffer'
import { OP_CODES, OP_PUSHDATA, CTransactionSegWit, TransactionSegWit, DeFiTransactionConstants } from '../src'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
import { OP_CODES } from '../../../../src/script'
import { toBuffer, toOPCodes } from '../../../../src/script/_buffer'
import { OP_DEFI_TX } from '../../../../src/script/defi'
import { BigNumber } from '@defichain/jellyfish-json'
import BigNumber from 'bignumber.js'

it('should bi-directional buffer-object-buffer', () => {
const fixtures = [
Expand Down
Loading

0 comments on commit bf3e5bb

Please sign in to comment.