From 9ba6e715d6585b9e62281b41124c8961539e3d9d Mon Sep 17 00:00:00 2001 From: Samuel Sramko Date: Mon, 13 Jul 2020 15:51:47 +0200 Subject: [PATCH] BCH calculations numeric precision fix --- package-lock.json | 2 +- package.json | 2 +- src/offchain/bcash.ts | 8 ++++---- src/transaction/bcash.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 426587304a..555e1df03a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@tatumio/tatum", - "version": "1.0.2", + "version": "1.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 87f36d1d22..a797a9ab11 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tatumio/tatum", - "version": "1.0.2", + "version": "1.0.3", "description": "", "main": "dist/src/index.js", "repository": "https://github.com/tatumio/tatum-js", diff --git a/src/offchain/bcash.ts b/src/offchain/bcash.ts index 43bf9fd7ce..6fc9d7b88b 100644 --- a/src/offchain/bcash.ts +++ b/src/offchain/bcash.ts @@ -64,12 +64,12 @@ export const prepareBitcoinCashSignedOffchainTransaction = }); const lastVin = data.find(d => d.vIn === '-1') as WithdrawalResponseData; - tx.addOutput(address, Number(new BigNumber(amount).multipliedBy(100000000).toFixed(8, BigNumber.ROUND_FLOOR))); + tx.addOutput(address, Number(new BigNumber(amount).multipliedBy(100000000).toFixed(0, BigNumber.ROUND_FLOOR))); if (mnemonic) { const {xpub} = generateBchWallet(testnet, mnemonic); - tx.addOutput(generateAddressFromXPub(Currency.BCH, testnet, xpub, 0), Number(new BigNumber(lastVin.amount).multipliedBy(100000000).toFixed(8, BigNumber.ROUND_FLOOR))); + tx.addOutput(generateAddressFromXPub(Currency.BCH, testnet, xpub, 0), Number(new BigNumber(lastVin.amount).multipliedBy(100000000).toFixed(0, BigNumber.ROUND_FLOOR))); } else if (keyPair && changeAddress) { - tx.addOutput(changeAddress, Number(new BigNumber(lastVin.amount).multipliedBy(100000000).toFixed(8, BigNumber.ROUND_FLOOR))); + tx.addOutput(changeAddress, Number(new BigNumber(lastVin.amount).multipliedBy(100000000).toFixed(0, BigNumber.ROUND_FLOOR))); } else { throw new Error('Impossible to prepare transaction. Either mnemonic or keyPair and attr must be present.'); } @@ -78,7 +78,7 @@ export const prepareBitcoinCashSignedOffchainTransaction = if (input.vIn === '-1') { continue; } - const value = Number(data[i].amount) * 100000000; + const value = Number(new BigNumber(data[i].amount).multipliedBy(100000000).toFixed(0, BigNumber.ROUND_FLOOR)); if (mnemonic) { const derivationKey = input.address && input.address.derivationKey ? input.address.derivationKey : 0; const privateKey = await generatePrivateKeyFromMnemonic(Currency.BCH, testnet, mnemonic, derivationKey); diff --git a/src/transaction/bcash.ts b/src/transaction/bcash.ts index 294d449350..fbc16ca562 100644 --- a/src/transaction/bcash.ts +++ b/src/transaction/bcash.ts @@ -31,10 +31,10 @@ export const prepareBitcoinCashSignedTransaction = async (testnet: boolean, body for (const [i, item] of fromUTXO.entries()) { transactionBuilder.addInput(item.txHash, item.index); privateKeysToSign.push(item.privateKey); - amountToSign.push(Number(new BigNumber(item.value).multipliedBy(100000000).toFixed(8, BigNumber.ROUND_FLOOR))); + amountToSign.push(Number(new BigNumber(item.value).multipliedBy(100000000).toFixed(0, BigNumber.ROUND_FLOOR))); } for (const item of to) { - transactionBuilder.addOutput(item.address, Number(new BigNumber(item.value).multipliedBy(100000000).toFixed(8, BigNumber.ROUND_FLOOR))); + transactionBuilder.addOutput(item.address, Number(new BigNumber(item.value).multipliedBy(100000000).toFixed(0, BigNumber.ROUND_FLOOR))); } for (let i = 0; i < privateKeysToSign.length; i++) {