Skip to content
 
 

Repository files navigation

Tamago🍳

Tamago is a standard smart contract suite for Verity, similar to solmate/solady for Solidity.

Tamago uses Tama, a modern toolchain for secure-by-construction Ethereum applications.

All smart contracts in Tamago are formally verified via Lean, meaning they're mathematically proven to adhere to the specs. The specs are also double-checked via Foundry mirror tests.

Tamago claims the first ever formally verified EVM implementations of sqrt(), cbrt(), log10(), log256(), as well as the full ERC4626 standard.

Components

  • Ownable: single-owner authorization with ownership transfer and renunciation.
  • ERC20: fungible token with allowances, owner-controlled minting and burning, fixed 18-decimal metadata, and overflow-safe accounting.
  • ERC721: non-fungible token with ownership, approvals, operator approvals, minting, and transfer behavior.
  • WETH: wrapped ETH with ERC20-compatible accounting, deposits, withdrawals, approvals, and transfers.
  • ERC4626: tokenized vault accounting with share/asset conversion previews, deposits, minting, withdrawals, redemptions, and ERC20 share behavior.
  • FixedPointMathLib: reusable unsigned integer math helpers, including saturating arithmetic, distance, averages, roots, logs, and clamping.

Each component has a Verity implementation, a property spec, a Lean proof file, and mirror tests that connect the proved properties to generated EVM artifacts.

Install

From a Tama project, add Tamago as a package dependency:

tama install Bacon-labs/tamago

Pin a specific revision for reproducible builds:

tama install Bacon-labs/tamago@<git-revision>

Then refresh and verify the project:

tama doctor
tama check
tama build --locked
tama test

Usage

Import the source bundle from Lean:

import Tamago

Or import only the components you need:

import Tamago.Auth.Ownable
import Tamago.Tokens.ERC20
import Tamago.Tokens.ERC721
import Tamago.Tokens.WETH
import Tamago.Tokens.ERC4626
import Tamago.Utils.FixedPointMathLib

Reference a component's compilation model from your own Verity code or build configuration:

#check Tamago.Auth.Ownable.spec
#check Tamago.Tokens.ERC20.spec
#check Tamago.Tokens.ERC721.spec
#check Tamago.Tokens.WETH.spec
#check Tamago.Tokens.ERC4626.spec
#check Tamago.Utils.FixedPointMathLib.spec

Use the generated Solidity deployers from Foundry tests after tama build:

import {ERC20Deployer} from "tamago/src/generated/verity/ERC20Deployer.sol";
import {ERC20Iface} from "tamago/src/generated/verity/ERC20Iface.sol";

contract ExampleTest {
    function deployToken(address owner) internal returns (ERC20Iface token) {
        token = ERC20Deployer.deploy(owner);
    }
}

The same pattern applies to the other generated deployers and interfaces: Ownable, ERC721, WETH, ERC4626, and FixedPointMathLib.

Repository Layout

.
|-- verity/
|   |-- src/
|   |   |-- Tamago.lean                  # Source aggregate module
|   |   `-- Tamago/                      # Contract and library implementations
|   |-- spec/
|   |   `-- Tamago/
|   |       |-- Spec.lean                # Spec aggregate module
|   |       `-- Spec/                    # Property specs
|   |-- proof/
|   |   `-- Tamago/
|   |       |-- Proof.lean               # Proof aggregate module
|   |       `-- Proof/                   # Proofs for the specs
|   `-- common/
|       `-- Tamago/Common/               # Shared events and helper models
|-- src/generated/verity/                # Generated Solidity deployers and interfaces
`-- test/verity/                         # Foundry mirror tests with tama: property links

Development

For local development on Tamago itself, clone with submodules:

git clone --recurse-submodules git@github.com:Bacon-labs/tamago.git
cd tamago

For an existing checkout:

git submodule update --init --recursive

Run the standard verification workflow:

tama doctor
tama build --locked
tama test
tama audit

The CI workflow in .github/workflows/ci.yml runs the same checks on pushes to main and on pull requests.

License

Tamago is released under the MIT License. See LICENSE.

About

Common EVM smart contracts similar to solady/solmate, formally verified using Tama + Verity

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages