diff --git a/src/interface.ts b/src/interface.ts index 62ac22c3..d867b462 100644 --- a/src/interface.ts +++ b/src/interface.ts @@ -26,10 +26,3 @@ export interface IPlainTransactionObject { guardianSignature?: string; relayerSignature?: string; } - -export interface INetworkConfig { - MinGasLimit: number; - GasPerDataByte: number; - GasPriceModifier: number; - ChainID: string; -} diff --git a/src/transaction.spec.ts b/src/transaction.spec.ts index 20136033..07c6c90f 100644 --- a/src/transaction.spec.ts +++ b/src/transaction.spec.ts @@ -2,6 +2,7 @@ import { Buffer } from "buffer"; import { assert } from "chai"; import { Address } from "./address"; import { MIN_TRANSACTION_VERSION_THAT_SUPPORTS_OPTIONS, TRANSACTION_OPTIONS_DEFAULT } from "./constants"; +import { NetworkConfig } from "./networkProviders"; import { ProtoSerializer } from "./proto"; import { TestWallet, loadTestWallets } from "./testutils"; import { Transaction } from "./transaction"; @@ -15,12 +16,11 @@ describe("test transaction", async () => { const transactionComputer = new TransactionComputer(); - const networkConfig = { - MinGasLimit: 50000, - GasPerDataByte: 1500, - GasPriceModifier: 0.01, - ChainID: "D", - }; + const networkConfig = new NetworkConfig(); + networkConfig.chainID = "D"; + networkConfig.minGasLimit = 50000n; + networkConfig.gasPerDataByte = 1500n; + networkConfig.gasPriceModifier = 0.01; before(async function () { wallets = await loadTestWallets(); @@ -28,7 +28,7 @@ describe("test transaction", async () => { it("should serialize transaction for signing (without data)", async () => { const transaction = new Transaction({ - chainID: networkConfig.ChainID, + chainID: networkConfig.chainID, sender: wallets.alice.address, receiver: wallets.bob.address, gasLimit: 50000n, @@ -48,7 +48,7 @@ describe("test transaction", async () => { it("should serialize transaction for signing (with data)", async () => { const transaction = new Transaction({ - chainID: networkConfig.ChainID, + chainID: networkConfig.chainID, sender: wallets.alice.address, receiver: wallets.bob.address, gasLimit: 70000n, @@ -143,7 +143,7 @@ describe("test transaction", async () => { it("should compute hash", async () => { const transaction = new Transaction({ - chainID: networkConfig.ChainID, + chainID: networkConfig.chainID, sender: wallets.alice.address, receiver: wallets.alice.address, gasLimit: 100000n, @@ -165,7 +165,7 @@ describe("test transaction", async () => { it("should compute hash (with usernames)", async () => { const transaction = new Transaction({ - chainID: networkConfig.ChainID, + chainID: networkConfig.chainID, sender: wallets.alice.address, receiver: wallets.alice.address, gasLimit: 100000n, @@ -428,7 +428,7 @@ describe("test transaction", async () => { it("computes fee, but should throw `NotEnoughGas` error", async () => { const transaction = new Transaction({ - chainID: networkConfig.ChainID, + chainID: networkConfig.chainID, sender: wallets.alice.address, receiver: wallets.alice.address, gasLimit: 50000n, @@ -458,7 +458,7 @@ describe("test transaction", async () => { it("computes fee (with data field)", async () => { const transaction = new Transaction({ - chainID: networkConfig.ChainID, + chainID: networkConfig.chainID, sender: wallets.alice.address, receiver: wallets.alice.address, gasLimit: 50000n + 12010n, @@ -798,7 +798,7 @@ describe("test transaction", async () => { }); it("should serialize transaction with relayer", async () => { const transaction = new Transaction({ - chainID: networkConfig.ChainID, + chainID: networkConfig.chainID, sender: wallets.alice.address, receiver: wallets.alice.address, relayer: wallets.bob.address, @@ -819,7 +819,7 @@ describe("test transaction", async () => { it("should test relayed v3", async () => { const transaction = new Transaction({ - chainID: networkConfig.ChainID, + chainID: networkConfig.chainID, sender: wallets.alice.address, receiver: wallets.alice.address, senderUsername: "alice", diff --git a/src/transaction.ts b/src/transaction.ts index a792173e..7749191f 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -1,7 +1,8 @@ import { BigNumber } from "bignumber.js"; import { Address } from "./address"; import { TRANSACTION_MIN_GAS_PRICE, TRANSACTION_OPTIONS_DEFAULT, TRANSACTION_VERSION_DEFAULT } from "./constants"; -import { INetworkConfig, IPlainTransactionObject } from "./interface"; +import { IPlainTransactionObject } from "./interface"; +import { NetworkConfig } from "./networkProviders"; import { interpretSignatureAsBuffer } from "./signature"; import { TransactionComputer } from "./transactionComputer"; @@ -444,7 +445,7 @@ export class Transaction { * Computes the current transaction fee based on the {@link NetworkConfig} and transaction properties * @param networkConfig {@link NetworkConfig} */ - computeFee(networkConfig: INetworkConfig): BigNumber { + computeFee(networkConfig: NetworkConfig): BigNumber { const computer = new TransactionComputer(); const fee = computer.computeTransactionFee(this, networkConfig); return new BigNumber(fee.toString()); diff --git a/src/transactionComputer.ts b/src/transactionComputer.ts index 1d204046..d37889db 100644 --- a/src/transactionComputer.ts +++ b/src/transactionComputer.ts @@ -6,7 +6,7 @@ import { TRANSACTION_OPTIONS_TX_HASH_SIGN, } from "./constants"; import * as errors from "./errors"; -import { INetworkConfig } from "./interface"; +import { NetworkConfig } from "./networkProviders"; import { ProtoSerializer } from "./proto"; import { Transaction } from "./transaction"; @@ -22,10 +22,10 @@ export class TransactionComputer { computeTransactionFee( transaction: { gasPrice: bigint; gasLimit: bigint; data: Uint8Array }, - networkConfig: INetworkConfig, + networkConfig: NetworkConfig, ): bigint { const moveBalanceGas = BigInt( - networkConfig.MinGasLimit + transaction.data.length * networkConfig.GasPerDataByte, + networkConfig.minGasLimit + BigInt(transaction.data.length) * networkConfig.gasPerDataByte, ); if (moveBalanceGas > transaction.gasLimit) { throw new errors.ErrNotEnoughGas(parseInt(transaction.gasLimit.toString(), 10)); @@ -39,7 +39,7 @@ export class TransactionComputer { const diff = transaction.gasLimit - moveBalanceGas; const modifiedGasPrice = BigInt( - new BigNumber(gasPrice.toString()).multipliedBy(new BigNumber(networkConfig.GasPriceModifier)).toFixed(0), + new BigNumber(gasPrice.toString()).multipliedBy(new BigNumber(networkConfig.gasPriceModifier)).toFixed(0), ); const processingFee = diff * modifiedGasPrice;