Skip to content

tempoxyz/tempo-foundry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


tempo combomark



Tempo Foundry

Tempo is a blockchain designed specifically for stablecoin payments. Its architecture focuses on high throughput, low cost, and features that financial institutions, payment service providers, and fintech platforms expect from modern payment infrastructure.

Tempo Foundry is a custom fork of Foundry that integrates Tempo's payment-native protocol features directly into the familiar Foundry developer workflow.

This is a temporary required drop-in replacement for upstream Foundry while Tempo-specific features are being integrated into upstream Foundry, after which this fork will be deprecated.

Get started here to use Tempo's features in Foundry.

Installation

Tempo's Foundry fork is installed through the standard upstream foundryup using the -n tempo flag, no separate installer is required.

Getting started is very easy:

Install regular foundryup:

curl -L https://foundry.paradigm.xyz | bash

Or if you already have foundryup installed:

foundryup --update

Next, run:

foundryup -n tempo

It will automatically install the latest nightly release of the precompiled binaries: forge and cast.

Done!

For additional details see the installation guide in the Foundry Docs.

If you're experiencing any issues while installing, check out Getting Help and the FAQ.

Testnet

You can connect to Tempo's public testnet using the following details:

Property Value
Network Name Tempo Testnet (Andantino)
Currency USD
Chain ID 42429
HTTP URL https://rpc.testnet.tempo.xyz
WebSocket URL wss://rpc.testnet.tempo.xyz
Block Explorer https://explore.tempo.xyz

Next, grab some stablecoins to test with from Tempo's Faucet.

Alternatively, use cast:

cast rpc tempo_fundAddress <ADDRESS> --rpc-url https://rpc.testnet.tempo.xyz

Changeset

Key extensions:

  • In foundryup:

    • foundryup -n tempo: download the latest nightly release of Tempo's fork of Foundry.
    • foundryup -n tempo -i <TAG>: download a specific nightly release by tag nightly-<hash>.
  • In forge:

    • forge init -n tempo: adds a Tempo-specific Mail template showcasing a TIP20 transfer with an attached memo.
    • forge install tempoxyz/tempo-std: like forge-std, a collection of helpful contracts and libraries for Tempo-specific testing and utilities.
    • --fee-token support: pay gas fees in any TIP20 stablecoin.
  • In cast:

    • cast run: updated to correctly process Tempo's system transactions when replaying a block.
    • cast tip20: alias to cast erc20.
    • --fee-token support: pay gas fees in any TIP20 stablecoin.
  • Additionally:

    • Support for local and forked simulation of the Tempo execution environment.
    • Support for Tempo's (stateful) precompiles and default contracts including labels in traces.
    • A custom TempoEvm extends Revm's Evm to accommodate differences Tempo introduces to optimize for payments.



Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.

Tempo's fork of Foundry consists of:

  • Forge: Build, test, fuzz, debug and deploy Solidity contracts, like Hardhat, Brownie, Ape.
  • Cast: A Swiss Army knife for interacting with EVM smart contracts, sending transactions and getting chain data.

Need help getting started with Foundry? Read the 📖 Foundry Docs!

Demo

Features

  • High-Performance Compilation

    • Fast and Flexible: Automatically detects and installs the required Solidity compiler version.
    • Solidity and Vyper Support: Fully supports both Solidity and Vyper out-of-the-box.
    • Incremental Compilation: Re-compiles only changed files, saving time.
    • Parallelized Pipeline: Leverages multi-core systems for ultra-fast builds.
    • Broad Compatibility: Supports non-standard directory structures, including Hardhat repos.
  • Advanced Testing

    • No Context Switching: Write tests directly in Solidity.
    • Fuzz Testing: Quickly identify edge cases with input shrinking and counter-example generation.
    • Invariant Testing: Ensure complex system properties hold across a wide range of inputs.
    • Debugging Made Easy: Use forge-std's console.sol for flexible debug logging.
    • Interactive Debugger: Step through your Solidity code with Foundry's interactive debugger, making it easy to pinpoint issues.
  • Powerful Runtime Features

    • RPC Forking: Fast and efficient remote RPC forking backed by Alloy.
    • Lightweight & Portable: No dependency on Nix or other package managers for installation.
  • Streamlined CI/CD

How Fast?

Forge is quite fast at both compiling (leveraging solc with foundry-compilers) and testing.

See the benchmarks below. Older benchmarks against DappTools can be found in the v0.2.0 announcement post and in the Convex Shutdown Simulation repository.

Testing Benchmarks

Project Type Forge 1.0 Forge 0.2 DappTools Speedup
vectorized/solady Unit / Fuzz 0.9s 2.3s - 2.6x
morpho-org/morpho-blue Invariant 0.7s 1m43s - 147.1x
morpho-org/morpho-blue-oracles Integration (Cold) 6.1s 6.3s - 1.04x
morpho-org/morpho-blue-oracles Integration (Cached) 0.6s 0.9s - 1.50x
transmissions11/solmate Unit / Fuzz 2.7s 2.8s 6m34s 1.03x / 140.0x
reflexer-labs/geb Unit / Fuzz 0.2s 0.4s 23s 2.0x / 57.5x

In the above benchmarks, compilation was always skipped

Takeaway: Forge dramatically outperforms the competition, delivering blazing-fast execution speeds while continuously expanding its robust feature set.

Compilation Benchmarks

 

Takeaway: Forge compilation is consistently faster than Hardhat by a factor of 2.1x to 5.2x, depending on the amount of caching involved.

Forge

Forge helps you build, test, fuzz, debug and deploy Solidity contracts.

The best way to understand Forge is to simply try it (in less than 30 seconds!).

First, let's initialize a new counter example repository:

forge init counter

Next cd into counter and build :

forge build
[â Š] Compiling...
[â ”] Compiling 27 files with Solc 0.8.28
[â ’] Solc 0.8.28 finished in 452.13ms
Compiler run successful!

Let's test our contracts:

forge test
[â Š] Compiling...
No files changed, compilation skipped

Ran 2 tests for test/Counter.t.sol:CounterTest
[PASS] testFuzz_SetNumber(uint256) (runs: 256, μ: 31121, ~: 31277)
[PASS] test_Increment() (gas: 31293)
Suite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.35ms (4.86ms CPU time)

Ran 1 test suite in 5.91ms (5.35ms CPU time): 2 tests passed, 0 failed, 0 skipped (2 total tests)

Finally, let's run our deployment script:

forge script script/Counter.s.sol
[â Š] Compiling...
No files changed, compilation skipped
Script ran successfully.
Gas used: 109037

If you wish to simulate on-chain transactions pass a RPC URL.

Run forge --help to explore the full list of available subcommands and their usage.

More documentation can be found in the forge section of the Foundry Docs.

Cast

Cast is a Swiss Army knife for interacting with Ethereum applications from the command line.

Here are a few examples of what you can do:

Check the latest block on Ethereum Mainnet:

cast block-number --rpc-url https://eth.merkle.io

Check the Ether balance of vitalik.eth

cast balance vitalik.eth --ether --rpc-url https://eth.merkle.io

Replay and trace a transaction

cast run 0x9c32042f5e997e27e67f82583839548eb19dc78c4769ad6218657c17f2a5ed31 --rpc-url https://eth.merkle.io

Optionally, pass --etherscan-api-key <API_KEY> to decode transaction traces using verified source maps, providing more detailed and human-readable information.


Run cast --help to explore the full list of available subcommands and their usage.

More documentation can be found in the cast section of the Foundry Docs.

Configuration

Foundry is highly configurable, allowing you to tailor it to your needs. Configuration is managed via a file called foundry.toml located in the root of your project or any parent directory. For a full list of configuration options, refer to the config package documentation.

Profiles and Namespaces

  • Configuration can be organized into profiles, which are arbitrarily namespaced for flexibility.
  • The default profile is named default. Learn more in the Default Profile section.
  • To select a different profile, set the FOUNDRY_PROFILE environment variable.
  • Override specific settings using environment variables prefixed with FOUNDRY_ (e.g., FOUNDRY_SRC).

You can find additional setup and configurations guides in the Foundry Docs and in the config crate:

Contributing

See our contributing guidelines.

Getting Help

First, see if the answer to your question can be found in the Foundry Docs, or in the relevant crate.

If the answer is not there:

If you want to contribute, or follow along with contributor discussion, you can use our main telegram to chat with us about the development of Foundry!

Security

See SECURITY.md.

License

Licensed under either of Apache License, Version 2.0 or MIT License at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in these crates by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Acknowledgements

  • Foundry is a clean-room rewrite of the testing framework DappTools. None of this would have been possible without the DappHub team's work over the years.
  • Matthias Seitz: Created ethers-solc (now foundry-compilers) which is the backbone of our compilation pipeline, as well as countless contributions to ethers, in particular the abigen macros.
  • Rohit Narurkar: Created the Rust Solidity version manager svm-rs which we use to auto-detect and manage multiple Solidity versions.
  • Brock Elmore: For extending the VM's cheatcodes and implementing structured call tracing, a critical feature for debugging smart contract calls.
  • Thank you to Depot for sponsoring us with their fast GitHub runners and sccache, which we use in CI to reduce build and test times significantly.
  • All the other contributors to the ethers-rs, alloy & foundry repositories and chatrooms.

About

Temporary fork of Foundry with Tempo support

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 611