Changeset View
Changeset View
Standalone View
Standalone View
web/cashtab/src/utils/__tests__/cashMethods.test.js
Show All 14 Lines | import { | ||||
convertEcashtoEtokenAddr, | convertEcashtoEtokenAddr, | ||||
getHashArrayFromWallet, | getHashArrayFromWallet, | ||||
isActiveWebsocket, | isActiveWebsocket, | ||||
parseXecSendValue, | parseXecSendValue, | ||||
getChangeAddressFromInputUtxos, | getChangeAddressFromInputUtxos, | ||||
generateOpReturnScript, | generateOpReturnScript, | ||||
generateTxInput, | generateTxInput, | ||||
generateTxOutput, | generateTxOutput, | ||||
generateTokenTxInput, | |||||
signAndBuildTx, | signAndBuildTx, | ||||
fromXecToSatoshis, | fromXecToSatoshis, | ||||
getWalletBalanceFromUtxos, | getWalletBalanceFromUtxos, | ||||
signUtxosByAddress, | signUtxosByAddress, | ||||
getUtxoWif, | getUtxoWif, | ||||
} from 'utils/cashMethods'; | } from 'utils/cashMethods'; | ||||
import { currency } from 'components/Common/Ticker'; | import { currency } from 'components/Common/Ticker'; | ||||
import { | import { | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | |||||
import BCHJS from '@psf/bch-js'; | import BCHJS from '@psf/bch-js'; | ||||
import sendBCHMock from '../../hooks/__mocks__/sendBCH'; | import sendBCHMock from '../../hooks/__mocks__/sendBCH'; | ||||
import { | import { | ||||
activeWebsocketAlpha, | activeWebsocketAlpha, | ||||
disconnectedWebsocketAlpha, | disconnectedWebsocketAlpha, | ||||
unsubscribedWebsocket, | unsubscribedWebsocket, | ||||
} from '../__mocks__/chronikWs'; | } from '../__mocks__/chronikWs'; | ||||
import mockNonSlpUtxos from '../../hooks/__mocks__/mockNonSlpUtxos'; | import mockNonSlpUtxos from '../../hooks/__mocks__/mockNonSlpUtxos'; | ||||
import mockSlpUtxos from '../../hooks/__mocks__/mockSlpUtxos'; | |||||
import { | import { | ||||
mockOneToOneSendXecTxBuilderObj, | mockOneToOneSendXecTxBuilderObj, | ||||
mockOneToManySendXecTxBuilderObj, | mockOneToManySendXecTxBuilderObj, | ||||
mockCreateTokenTxBuilderObj, | |||||
mockSendTokenTxBuilderObj, | |||||
mockBurnTokenTxBuilderObj, | |||||
} from '../__mocks__/mockTxBuilderObj'; | } from '../__mocks__/mockTxBuilderObj'; | ||||
import { | import { | ||||
mockSingleInputUtxo, | mockSingleInputUtxo, | ||||
mockMultipleInputUtxos, | mockMultipleInputUtxos, | ||||
mockSingleOutput, | mockSingleOutput, | ||||
mockMultipleOutputs, | mockMultipleOutputs, | ||||
} from '../__mocks__/mockTxBuilderData'; | } from '../__mocks__/mockTxBuilderData'; | ||||
▲ Show 20 Lines • Show All 401 Lines • ▼ Show 20 Lines | try { | ||||
airdropTokenId, | airdropTokenId, | ||||
); | ); | ||||
} catch (err) { | } catch (err) { | ||||
thrownError = err; | thrownError = err; | ||||
} | } | ||||
expect(thrownError.message).toStrictEqual('Invalid OP RETURN script input'); | expect(thrownError.message).toStrictEqual('Invalid OP RETURN script input'); | ||||
}); | }); | ||||
it(`generateTokenTxInput() returns a valid object for a valid create token tx`, async () => { | |||||
const BCH = new BCHJS(); | |||||
let txBuilder = new BCH.TransactionBuilder(); | |||||
const tokenId = | |||||
'1c6c9c64d70b285befe733f175d0f384538576876bd280b10587df81279d3f5e'; | |||||
const tokenInputObj = generateTokenTxInput( | |||||
BCH, | |||||
'GENESIS', | |||||
mockNonSlpUtxos, | |||||
null, // no slpUtxos used for genesis tx | |||||
tokenId, | |||||
null, // no token send/burn amount for genesis tx | |||||
currency.defaultFee, | |||||
txBuilder, | |||||
); | |||||
expect(tokenInputObj.inputXecUtxos).toStrictEqual( | |||||
[mockNonSlpUtxos[0]].concat([mockNonSlpUtxos[1]]), | |||||
); | |||||
expect(tokenInputObj.txBuilder.toString()).toStrictEqual( | |||||
mockCreateTokenTxBuilderObj.toString(), | |||||
); | |||||
expect(tokenInputObj.remainderXecValue).toStrictEqual( | |||||
new BigNumber(699702), // remainder = tokenInputObj.inputXecUtxos - currency.etokenSats - txFee | |||||
); | |||||
}); | |||||
it(`generateTokenTxInput() returns a valid object for a valid send token tx`, async () => { | |||||
const BCH = new BCHJS(); | |||||
let txBuilder = new BCH.TransactionBuilder(); | |||||
const tokenId = mockSlpUtxos[0].tokenId; | |||||
const tokenInputObj = generateTokenTxInput( | |||||
BCH, | |||||
'SEND', | |||||
mockNonSlpUtxos, | |||||
mockSlpUtxos, | |||||
tokenId, | |||||
new BigNumber(500), // sending 500 of these tokens | |||||
currency.defaultFee, | |||||
txBuilder, | |||||
); | |||||
expect(tokenInputObj.inputTokenUtxos).toStrictEqual( | |||||
[mockSlpUtxos[0]].concat([mockSlpUtxos[1]]), // mockSlpUtxos[0] 400 + mockSlpUtxos[1] 6500 | |||||
); | |||||
expect(tokenInputObj.remainderTokenValue).toStrictEqual( | |||||
new BigNumber(6400), // token change is mockSlpUtxos[0] 400 + mockSlpUtxos[1] 6500 - [tokenAmount] 500 | |||||
); | |||||
expect(tokenInputObj.txBuilder.toString()).toStrictEqual( | |||||
mockSendTokenTxBuilderObj.toString(), | |||||
); | |||||
}); | |||||
it(`generateTokenTxInput() returns a valid object for a valid burn token tx`, async () => { | |||||
const BCH = new BCHJS(); | |||||
let txBuilder = new BCH.TransactionBuilder(); | |||||
const tokenId = mockSlpUtxos[0].tokenId; | |||||
const tokenInputObj = generateTokenTxInput( | |||||
BCH, | |||||
'BURN', | |||||
mockNonSlpUtxos, | |||||
mockSlpUtxos, | |||||
tokenId, | |||||
new BigNumber(500), // burning 500 of these tokens | |||||
currency.defaultFee, | |||||
txBuilder, | |||||
); | |||||
expect(tokenInputObj.inputTokenUtxos).toStrictEqual( | |||||
[mockSlpUtxos[0]].concat([mockSlpUtxos[1]]), // mockSlpUtxos[0] 400 + mockSlpUtxos[1] 6500 | |||||
); | |||||
expect(tokenInputObj.remainderTokenValue).toStrictEqual( | |||||
new BigNumber(6400), // token change is mockSlpUtxos[0] 400 + mockSlpUtxos[1] 6500 - [tokenAmount] 500 | |||||
); | |||||
expect(tokenInputObj.txBuilder.toString()).toStrictEqual( | |||||
mockBurnTokenTxBuilderObj.toString(), | |||||
); | |||||
}); | |||||
it(`generateTxInput() returns an input object for a valid one to one XEC tx`, async () => { | it(`generateTxInput() returns an input object for a valid one to one XEC tx`, async () => { | ||||
const BCH = new BCHJS(); | const BCH = new BCHJS(); | ||||
const isOneToMany = false; | const isOneToMany = false; | ||||
const utxos = mockNonSlpUtxos; | const utxos = mockNonSlpUtxos; | ||||
let txBuilder = new BCH.TransactionBuilder(); | let txBuilder = new BCH.TransactionBuilder(); | ||||
const destinationAddressAndValueArray = null; | const destinationAddressAndValueArray = null; | ||||
const satoshisToSend = new BigNumber(2184); | const satoshisToSend = new BigNumber(2184); | ||||
const feeInSatsPerByte = currency.defaultFee; | const feeInSatsPerByte = currency.defaultFee; | ||||
▲ Show 20 Lines • Show All 866 Lines • Show Last 20 Lines |