Skip to content

Conversation

quiet-node
Copy link
Contributor

@quiet-node quiet-node commented Sep 26, 2025

Description

This PR enables Jumbo Transaction support by upgrading @hashgraph/hedera-local from 2.32.5 to 2.38.0, which brings [email protected] and [email protected]. This major version jump introduces breaking changes that required extensive test updates and fixes to accommodate new network behaviors, including HIP-1084: Zero Cost EthereumTransaction on Success, HIP-1086: Jumbo EthereumTransaction and Mirror Node Modularized Service

Key Changes:

  • Dependency Upgrade: @hashgraph/hedera-local 2.32.5 → 2.38.0 ([email protected], [email protected])
  • Unit Tests: Updated SDK client and sendRawTransaction tests to align with new network behavior
  • Environment Config: Removed JUMBO_TX_ENABLED=false flag from all test environments
  • HIP-1084 Support: Fixed HbarRateLimiter tests for zero-cost successful transactions
  • Conformity Tests: Adjusted gas estimate overwrites for eth_call and eth_estimateGas
  • Precompile Fixes: Resolved HTS precompile call tests due to new KEY_NOT_PROVIDED behavior
  • Contract Deploy: Removed custom gas limit for contract deployments

Related issue(s)

Fixes #3769

Changes from original design

  • Removed JUMBO_TX_ENABLED=false flag from test environments as Jumbo Transaction is now enabled by default
  • Updated HbarRateLimiter tests to account for reduced HBAR burns due to HIP-1084
  • Fixed conformity test overwrites for eth_call and eth_estimateGas to match new gas behavior
  • Disabled JUMBO_TX_ENABLED for specific tests incompatible with Jumbo transactions (via test override)

Additional work needed (optional)

This PR will be opened for review once Mirror Node releases version 0.140.0 GA and @hashgraph/hedera-local upgrades to that version.

N/A

Checklist

  • I've assigned an assignee to this PR and related issue(s) (if applicable)
  • I've assigned a label to this PR and related issue(s) (if applicable)
  • I've assigned a milestone to this PR and related issue(s) (if applicable)
  • I've updated documentation (code comments, README, etc. if applicable)
  • I've done sufficient testing (unit, integration, etc.)

@quiet-node quiet-node added this to the 0.72.0 milestone Sep 26, 2025
@quiet-node quiet-node self-assigned this Sep 26, 2025
@quiet-node quiet-node added the enhancement New feature or request label Sep 26, 2025
Copy link

github-actions bot commented Sep 26, 2025

Test Results

 20 files  + 2  265 suites  +27   20m 58s ⏱️ - 5m 6s
762 tests +40  758 ✅ +43  4 💤  - 1  0 ❌  - 2 
778 runs  +41  774 ✅ +44  4 💤  - 1  0 ❌  - 2 

Results for commit f6a29e5. ± Comparison against base commit 2d3dc80.

This pull request removes 1 and adds 41 tests. Note that renamed tests count towards both.
"after all" hook for "@release should return the code through a websocket" ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-2 eth_getCode "after all" hook for "@release should return the code through a websocket"
@release Expect Unsupported Method Error message when subscribing for "other" method ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe Connection @release Expect Unsupported Method Error message when subscribing for "other" method
@release Socket server responds to the eth_chainId event ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe Connection @release Socket server responds to the eth_chainId event
@release Subscribes for contract logs for a specific contract address (using evmAddress) ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe Subscribes to log events @release Subscribes for contract logs for a specific contract address (using evmAddress)
@release Subscribes for contract logs for a specific contract address (using long zero address) ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe Subscribes to log events @release Subscribes for contract logs for a specific contract address (using long zero address)
@release captures approve and transferFrom events ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe Subscribes to hts tokens and listens for synthetic log events @release captures approve and transferFrom events
@release captures transfer events ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe Subscribes to hts tokens and listens for synthetic log events @release captures transfer events
@release should subscribe to newHeads and receive a valid JSON RPC response ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe newHeads Configuration given WS_NEW_HEADS_ENABLED=false are set @release should subscribe to newHeads and receive a valid JSON RPC response
Calling eth_subscribe Logs with a non existent address should fail ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe ethSubscribe Logs Params Validations Calling eth_subscribe Logs with a non existent address should fail
Calling eth_subscribe Logs with an empty address should fail ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe ethSubscribe Logs Params Validations Calling eth_subscribe Logs with an empty address should fail
Calling eth_subscribe Logs with an invalid topics should fail ‑ RPC Server Acceptance Tests Acceptance tests @web-socket-batch-3 eth_subscribe ethSubscribe Logs Params Validations Calling eth_subscribe Logs with an invalid topics should fail
…

♻️ This comment has been updated with latest results.

@quiet-node quiet-node force-pushed the 3769-enable-jumbo-transaction-tests-v3 branch 10 times, most recently from 8e5c998 to 3913616 Compare September 30, 2025 19:24
@simzzz simzzz modified the milestones: 0.72.0, 0.73.0 Oct 2, 2025
@quiet-node quiet-node force-pushed the 3769-enable-jumbo-transaction-tests-v3 branch 11 times, most recently from 19d7bc1 to a9f2339 Compare October 8, 2025 16:23
@quiet-node quiet-node force-pushed the 3769-enable-jumbo-transaction-tests-v3 branch from a9f2339 to b377797 Compare October 8, 2025 16:23
@quiet-node quiet-node force-pushed the 3769-enable-jumbo-transaction-tests-v3 branch from b377797 to 0ff4709 Compare October 8, 2025 16:46
Signed-off-by: Logan Nguyen <[email protected]>
@quiet-node quiet-node force-pushed the 3769-enable-jumbo-transaction-tests-v3 branch from 714882b to f6a29e5 Compare October 8, 2025 17:43
@quiet-node quiet-node changed the title fix: WIP --- enable jumbo transaction tests fix: enable jumbo transaction feature Oct 8, 2025
Copy link

codecov bot commented Oct 8, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@            Coverage Diff             @@
##             main    #4419      +/-   ##
==========================================
+ Coverage   96.13%   96.25%   +0.12%     
==========================================
  Files         121      121              
  Lines       19941    19941              
  Branches     1743     1754      +11     
==========================================
+ Hits        19170    19194      +24     
+ Misses        751      728      -23     
+ Partials       20       19       -1     
Flag Coverage Δ
config-service 98.80% <ø> (ø)
relay 91.23% <ø> (ø)
server 88.82% <ø> (ø)
ws-server 98.27% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 8 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.


const contractFactory = new ethers.ContractFactory(contractArtifact.abi, contractArtifact.bytecode, wallet);
const contract = await contractFactory.deploy({ gasLimit: 1_000_000 });
const contract = await contractFactory.deploy();
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*Notes for Reviewers: The charges for contract deployment transactions have increased on CN and MN, respectively. Therefore, the customized gasLimit has been removed to allow automatic gas estimation.

});
const contract = await greeter.send({
from: wallet[0].address,
gas: 300000,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*Notes for Reviewers: The charges for contract deployment transactions have increased on CN and MN, respectively. Therefore, the customized gasLimit has been removed to allow automatic gas estimation.

data: '0x' + '22'.repeat(13000),
});
const expectedTxHash = Utils.computeTransactionHash(Buffer.from(signed.replace('0x', ''), 'hex'));
withOverriddenEnvsInMochaTest({ JUMBO_TX_ENABLED: false }, () => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*Notes for Reviewers: Run this test only when JUMBO_TX_ENABLE is set to false ensuring HFS is utilized.

)
.once()
.returns(true);
withOverriddenEnvsInMochaTest({ JUMBO_TX_ENABLED: false }, () => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*Notes for Reviewers: Run these tests only when JUMBO_TX_ENABLE is set to false ensuring HFS is utilized.

## wildcard: result

>> {"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"from":"0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2","gas":"0xea60","input":"0x333435","maxFeePerGas":"0x44103f3","maxPriorityFeePerGas":"0xb","to":"0x2f2a392b4d7d2c2d3134e199295818a02535ef0a","value":"0x17"},"latest"]}
>> {"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"from":"0x67d8d32e9bf1a9968a5ff53b87d777aa8ebbee69","gas":"0xea60","input":"0x333435","maxFeePerGas":"0x44103f3","maxPriorityFeePerGas":"0xb","to":"0x05fba803be258049a27b820088bab1cad2058871","value":"0x17"},"latest"]}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*Notes for Reviewers: With the modularized Mirror Node, a “sender not found” exception is now thrown when an account does not exist. This has been updated to use actual auto-created accounts on the local network.

// addresses used in the request below are auto-created accounts from hedera-local network

>> {"jsonrpc":"2.0","id":1,"method":"eth_estimateGas","params":[{"from":"0xaa00000000000000000000000000000000000000","to":"0x0100000000000000000000000000000000000000"}]}
>> {"jsonrpc":"2.0","id":1,"method":"eth_estimateGas","params":[{"from":"0x67d8d32e9bf1a9968a5ff53b87d777aa8ebbee69","to":"0x05fba803be258049a27b820088bab1cad2058871"}]}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*Notes for Reviewers: With the modularized Mirror Node, a “sender not found” exception is now thrown when an account does not exist. This has been updated to use actual auto-created accounts on the local network.

}, planId=${hbarSpendingPlan.id}`,
);
isTimeOut = true;
break;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Notes for Reviewers: Added a break timeout during polling for updated spending amounts to prevent potential indefinite hangs. This adjustment addresses rare synchronization delays observed when HIP-1084 is enabled.

expect(res.ed25519).to.eq(EMPTY_HEX);
expect(res.ECDSA_secp256k1).to.eq(EMPTY_HEX);
expect(res.delegatableContractId).to.eq(ZERO_HEX);
await expect(htsImpl.getTokenKeyPublic.staticCall(tokenAddress, keyTypes['ADMIN'])).to.be.rejectedWith(
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Notes for Reviewers: Tests in this suite now throw exceptions because the CN returns KEY_NOT_PROVIDED when no key is set, and the MN has been updated to return the same response accordingly.*

- name: Run hedera local
run: npx hedera restart -d --verbose=trace --network-tag=${{ inputs.networkTag }} --mirror-tag=${{ inputs.mirrorTag }}
# run: npx hedera restart -d --verbose=trace --network-tag=${{ inputs.networkTag }} --mirror-tag=${{ inputs.mirrorTag }}
run: npx hedera restart -d --verbose=trace --network-tag=0.65.1 --mirror-tag=0.140.0-rc1
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*Notes for Reviewers: These changes on how to run hedera-local will be reverted once Mirror Node releases version 0.140.0 GA and @hashgraph/hedera-local upgrades to that version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Enable Jumbo Transaction tests
2 participants