Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Update formatTransaction to not delete data property #6080

Merged
merged 8 commits into from
May 16, 2023
23 changes: 12 additions & 11 deletions packages/web3-eth/src/utils/format_transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,19 @@ export function formatTransaction<

formattedTransaction = format(options.transactionSchema, formattedTransaction, returnFormat);

if (
!isNullish(formattedTransaction.data) &&
!isNullish(formattedTransaction.input) &&
formattedTransaction.data !== formattedTransaction.input
)
throw new TransactionDataAndInputError({
data: bytesToHex(formattedTransaction.data),
input: bytesToHex(formattedTransaction.input),
});
else if (!isNullish(formattedTransaction.data)) {
if (!isNullish(formattedTransaction.data)) {
if (
!isNullish(formattedTransaction.input) &&
formattedTransaction.data !== formattedTransaction.input
)
throw new TransactionDataAndInputError({
data: bytesToHex(formattedTransaction.data),
input: bytesToHex(formattedTransaction.input),
});

formattedTransaction.input = formattedTransaction.data;
delete formattedTransaction.data;
} else if (!isNullish(formattedTransaction.input)) {
formattedTransaction.data = formattedTransaction.input;
}

if (!isNullish(formattedTransaction.gasLimit)) {
Expand Down
32 changes: 20 additions & 12 deletions packages/web3-eth/src/utils/transaction_builder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import {
TransactionDataAndInputError,
UnableToPopulateNonceError,
} from 'web3-errors';
import { format } from 'web3-utils';
import { bytesToHex, format } from 'web3-utils';
import { NUMBER_DATA_FORMAT } from '../constants';
// eslint-disable-next-line import/no-cycle
import { getChainId, getTransactionCount } from '../rpc_method_wrappers';
Expand Down Expand Up @@ -158,20 +158,28 @@ export async function defaultTransactionBuilder<ReturnType = Transaction>(option
populatedTransaction.value = '0x';
}

if (!isNullish(populatedTransaction.data) && !isNullish(populatedTransaction.input)) {
throw new TransactionDataAndInputError({
data: populatedTransaction.data,
input: populatedTransaction.input,
});
} else if (!isNullish(populatedTransaction.data)) {
if (!isNullish(populatedTransaction.data)) {
if (
!isNullish(populatedTransaction.input) &&
populatedTransaction.data !== populatedTransaction.input
)
throw new TransactionDataAndInputError({
data: bytesToHex(populatedTransaction.data),
input: bytesToHex(populatedTransaction.input),
});

if (!populatedTransaction.data.startsWith('0x'))
populatedTransaction.data = `0x${populatedTransaction.data}`;

populatedTransaction.input = populatedTransaction.data;
delete populatedTransaction.data;
}
} else if (!isNullish(populatedTransaction.input)) {
if (!populatedTransaction.input.startsWith('0x'))
populatedTransaction.input = `0x${populatedTransaction.input}`;

if (isNullish(populatedTransaction.input) || populatedTransaction.input === '') {
populatedTransaction.data = populatedTransaction.input;
} else {
populatedTransaction.input = '0x';
} else if (!populatedTransaction.input.startsWith('0x')) {
populatedTransaction.input = `0x${populatedTransaction.input}`;
populatedTransaction.data = '0x';
}

if (isNullish(populatedTransaction.common)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ describe('Web3Eth.sendTransaction', () => {
const transaction: Transaction = {
from: tempAcc.address,
data: greeterContractDeploymentData,
input: greeterContractDeploymentData,
gas: BigInt('475520'),
};
const response = await web3Eth.sendTransaction(transaction);
Expand All @@ -203,6 +204,7 @@ describe('Web3Eth.sendTransaction', () => {
from: tempAcc.address,
to: greeterContractAddress,
data: contractFunctionCall,
input: contractFunctionCall,
};
const response = await web3Eth.sendTransaction(transaction);
expect(response.status).toBe(BigInt(1));
Expand Down
21 changes: 19 additions & 2 deletions packages/web3-eth/test/unit/default_transaction_builder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import { ethRpcMethods } from 'web3-rpc-methods';

import {
Eip1559NotSupportedError,
TransactionDataAndInputError,
UnableToPopulateNonceError,
UnsupportedTransactionTypeError,
} from 'web3-errors';
Expand Down Expand Up @@ -210,28 +211,44 @@ describe('defaultTransactionBuilder', () => {
});
});

describe('should populate input', () => {
describe('should populate input/data', () => {
it('should populate with 0x', async () => {
const input = { ...transaction };
delete input.input;
delete input.data;

const result = await defaultTransactionBuilder({
transaction: input,
web3Context,
});
expect(result.input).toBe('0x');
expect(result.data).toBe('0x');
});

it('should prefix with 0x', async () => {
const input = { ...transaction };
delete input.data;
input.input = '123';
input.data = '123';

const result = await defaultTransactionBuilder({
transaction: input,
web3Context,
});
expect(result.input).toBe('0x123');
expect(result.data).toBe('0x123');
});

it('should throw TransactionDataAndInputError', async () => {
const input = { ...transaction };
input.data = '0x3211';
input.input = '0x1233';

await expect(
defaultTransactionBuilder({
transaction: input,
web3Context,
}),
).rejects.toThrow(TransactionDataAndInputError);
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ describe('CustomRpcMethodsPlugin Tests', () => {
params: [
{
input: '0x70a082310000000000000000000000008da5e39ec14b57fb9bcd9aa2b4500e909119795d',
data: '0x70a082310000000000000000000000008da5e39ec14b57fb9bcd9aa2b4500e909119795d',
to: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
},
'latest',
Expand Down Expand Up @@ -102,6 +103,7 @@ describe('CustomRpcMethodsPlugin Tests', () => {
params: [
{
input: '0xa9059cbb0000000000000000000000004f641def1e7845caab95ac717c80416082430d0d000000000000000000000000000000000000000000000000000000000000002a',
data: '0xa9059cbb0000000000000000000000004f641def1e7845caab95ac717c80416082430d0d000000000000000000000000000000000000000000000000000000000000002a',
from: sender,
gasPrice: expectedGasPrice,
maxFeePerGas: undefined,
Expand Down