๐ snekmate
State-of-the-art, highly opinionated, hyper-optimised, and secure ๐Vyper smart contract building blocks.
- ๐ Contracts
- ๐ Installation
- ๐ง Usage
- ๐ฉ๐ผโโ๏ธ Tests
- ๐ฎโโ๏ธ Audits
- ๐๐ผ Acknowledgements
- ๐ซก Contributing
- ๐ธ Donation
- ๐ Licence
- ๐ข Disclaimer
๐ Contracts
src
โโโ snekmate
โโโ auth
โ โโโ ownable โ "Owner-Based Access Control Functions"
โ โโโ ownable_2step โ "2-Step Ownership Transfer Functions"
โ โโโ access_control โ "Multi-Role-Based Access Control Functions"
โ โโโ interfaces
โ โ โโโ IAccessControl โ "AccessControl Interface Definition"
โ โโโ mocks
โ โโโ ownable_mock โ "`ownable` Module Reference Implementation"
โ โโโ ownable_2step_mock โ "`ownable_2step` Module Reference Implementation"
โ โโโ access_control_mock โ "`access_control` Module Reference Implementation"
โโโ extensions
โ โโโ erc2981 โ "ERC-721 and ERC-1155 Compatible ERC-2981 Reference Implementation"
โ โโโ erc4626 โ "Modern and Gas-Efficient ERC-4626 Tokenised Vault Implementation"
โ โโโ interfaces
โ โ โโโ IERC2981 โ "EIP-2981 Interface Definition"
โ โโโ mocks
โ โโโ erc2981_mock โ "`erc2981` Module Reference Implementation"
โ โโโ erc4626_mock โ "`erc4626` Module Reference Implementation"
โโโ governance
โ โโโ timelock_controller โ "Multi-Role-Based Timelock Controller Reference Implementation"
โ โโโ mocks
โ โโโ timelock_controller_mock โ "`timelock_controller` Module Reference Implementation"
โโโ tokens
โ โโโ erc20 โ "Modern and Gas-Efficient ERC-20 + EIP-2612 Implementation"
โ โโโ erc721 โ "Modern and Gas-Efficient ERC-721 + EIP-4494 Implementation"
โ โโโ erc1155 โ "Modern and Gas-Efficient ERC-1155 Implementation"
โ โโโ interfaces
โ โ โโโ IERC20Permit โ "EIP-2612 Interface Definition"
โ โ โโโ IERC721Enumerable โ "EIP-721 Optional Enumeration Interface Definition"
โ โ โโโ IERC721Metadata โ "EIP-721 Optional Metadata Interface Definition"
โ โ โโโ IERC721Permit โ "EIP-4494 Interface Definition"
โ โ โโโ IERC721Receiver โ "EIP-721 Token Receiver Interface Definition"
โ โ โโโ IERC1155 โ "EIP-1155 Interface Definition"
โ โ โโโ IERC1155MetadataURI โ "EIP-1155 Optional Metadata Interface Definition"
โ โ โโโ IERC1155Receiver โ "EIP-1155 Token Receiver Interface Definition"
โ โ โโโ IERC4906 โ "EIP-4906 Interface Definition"
โ โโโ mocks
โ โโโ erc20_mock โ "`erc20` Module Reference Implementation"
โ โโโ erc721_mock โ "`erc721` Module Reference Implementation"
โ โโโ erc1155_mock โ "`erc1155` Module Reference Implementation"
โโโ utils
โโโ base64 โ "Base64 Encoding and Decoding Functions"
โโโ batch_distributor โ "Batch Sending Both Native and ERC-20 Tokens"
โโโ block_hash โ "Utility Functions to Access Historical Block Hashes"
โโโ create โ "`CREATE` EVM Opcode Utility Functions"
โโโ create2 โ "`CREATE2` EVM Opcode Utility Functions"
โโโ create3 โ "`CREATE3`-Based Utility Functions"
โโโ ecdsa โ "Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256k1-Based Functions"
โโโ p256 โ "Elliptic Curve Digital Signature Algorithm (ECDSA) Secp256r1-Based Functions"
โโโ message_hash_utils โ "Signature Message Hash Utility Functions"
โโโ signature_checker โ "ECDSA and EIP-1271 Signature Verification Functions"
โโโ eip712_domain_separator โ "EIP-712 Domain Separator"
โโโ math โ "Standard Mathematical Utility Functions"
โโโ merkle_proof_verification โ "Merkle Tree Proof Verification Functions"
โโโ multicall โ "Multicall Functions"
โโโ pausable โ "Pausable Functions"
โโโ interfaces
โ โโโ IERC1271 โ "EIP-1271 Interface Definition"
โ โโโ IERC5267 โ "EIP-5267 Interface Definition"
โโโ mocks
โโโ base64_mock โ "`base64` Module Reference Implementation"
โโโ batch_distributor_mock โ "`batch_distributor` Module Reference Implementation"
โโโ block_hash_mock โ "`block_hash` Module Reference Implementation"
โโโ create_mock โ "`create` Module Reference Implementation"
โโโ create2_mock โ "`create2` Module Reference Implementation"
โโโ create3_mock โ "`create3` Module Reference Implementation"
โโโ ecdsa_mock โ "`ecdsa` Module Reference Implementation"
โโโ p256_mock โ "`p256` Module Reference Implementation"
โโโ message_hash_utils_mock โ "`message_hash_utils` Module Reference Implementation"
โโโ signature_checker_mock โ "`signature_checker` Module Reference Implementation"
โโโ eip712_domain_separator_mock โ "`eip712_domain_separator` Module Reference Implementation"
โโโ math_mock โ "`math` Module Reference Implementation"
โโโ merkle_proof_verification_mock โ "`merkle_proof_verification` Module Reference Implementation"
โโโ multicall_mock โ "`multicall` Module Reference Implementation"
โโโ pausable_mock โ "`pausable` Module Reference Implementation"
๐ Installation
We offer three convenient ways to install the ๐ snekmate contracts:
1๏ธโฃ PyPI
You can install ๐ snekmate from PyPI with:
pip install snekmate
When using the ๐Vyper CLI, the search path defaults to the current working directory and the Python
sys.path. As a result, all imported ๐ snekmate contracts (e.g.from snekmate.tokens import erc20) are seamlessly located during compilation.
2๏ธโฃ Foundry
You can install ๐ snekmate via submodules using Foundry with:
forge install pcaversaccio/snekmate
3๏ธโฃ npm
You can install ๐ snekmate from npm with:
npm install --save-dev snekmate
Or if you are using Yarn:
yarn add --dev snekmate
In case you are using pnpm, invoke:
pnpm add --save-dev snekmate
๐ง Usage
๐Vyper favours code reuse through composition rather than inheritance (Solidity inheritance makes it easy to break the Liskov Substitution Principle). A ๐Vyper module encapsulates everything required for code reuse, from type and function declarations to state. All ๐ snekmate contracts are ๐Vyper modules. Thus, many of the ๐ snekmate contracts do not compile independently, but you must import and initializes them. Please note that if a module is stateless, it does not require the keyword initializes (or uses) for initialisation (or usage). Each module contract has an associated mock contract in the mock/ directory, which is part of the associated contract subdirectory. These mock contracts are very illustrative of how ๐ snekmate contracts can be used as ๐Vyper modules.
Please read here to learn more about using ๐Vyper modules.
๐ฉ๐ผโโ๏ธ Tests
This repository contains Foundry-based unit tests, property-based tests (i.e. stateless fuzzing), and invariant tests (i.e. stateful fuzzing) for all contracts, if applicable. All tests are run as part of the CI pipeline test-contracts.
| Contract | Unit Tests | Property-Based Tests | Invariant Tests |
|---|---|---|---|
ownable |
โ | โ | โ |
ownable_2step |
โ | โ | โ |
access_control |
โ | โ | โ |
erc2981 |
โ | โ | โ |
erc4626 |
โ | โ | โ |
timelock_controller |
โ | โ | โ |
erc20 |
โ | โ | โ |
erc721 |
โ | โ | โ |
erc1155 |
โ | โ | โ |
base64 |
โ | โ | โ |
batch_distributor |
โ | โ | โ |
block_hash |
โ | โ | โ |
create |
โ | โ | โ |
create2 |
โ | โ | โ |
create3 |
โ | โ | โ |
ecdsa |
โ | โ | โ |
p256 |
โ | โ | โ |
message_hash_utils |
โ | โ | โ |
signature_checker |
โ | โ | โ |
eip712_domain_separator |
โ | โ | โ |
math |
โ | โ | โ |
merkle_proof_verification |
โ | โ | โ |
multicall |
โ | โ | โ |
pausable |
โ | โ | โ |
โ Test Type Implemented โ โ Test Type Not Implemented
Furthermore, the echidna-based property tests for the erc20 and erc721 contracts are available in the test/tokens/echidna/ directory. You can run the tests by invoking:
# Run Echidna ERC-20 property tests.
~$ FOUNDRY_PROFILE=echidna echidna test/tokens/echidna/ERC20Properties.sol --contract CryticERC20ExternalHarness --config test/echidna.yaml
# Run Echidna ERC-721 property tests.
~$ FOUNDRY_PROFILE=echidna echidna test/tokens/echidna/ERC721Properties.sol --contract CryticERC721ExternalHarness --config test/echidna.yaml
Eventually, the halmos-based symbolic tests for the erc20, erc721, erc1155, and math contracts are available in the test/tokens/halmos/ and test/utils/halmos/ directories. You can run the tests by invoking:
# Run Halmos ERC-20 symbolic tests.
~$ FOUNDRY_PROFILE=halmos halmos --contract ERC20TestHalmos --config test/halmos.toml
# Run Halmos ERC-721 symbolic tests. Be careful, this is a (very!) time-consuming operation.
~$ FOUNDRY_PROFILE=halmos halmos --contract ERC721TestHalmos --config test/halmos.toml
# Run Halmos ERC-1155 symbolic tests. Be careful, this is a (very!) time-consuming operation.
~$ FOUNDRY_PROFILE=halmos halmos --contract ERC1155TestHalmos --config test/halmos.toml
# Run Halmos math symbolic tests.
~$ FOUNDRY_PROFILE=halmos halmos --contract MathTestHalmos --config test/halmos.toml
๐ฎโโ๏ธ Audits
Although the ๐ snekmate contracts have not (yet) undergone a full comprehensive audit, selected library modules integrated into specific protocols (such as Curve) have been thoroughly reviewed within the scope of prior audits. The corresponding audit reports are available here.
๐๐ผ Acknowledgements
This repository is inspired by or directly modified from many sources, primarily:
- ApeAcademy
- Batch Distributor
CREATEFactory- Disperse Research
- Multicall
- OpenZeppelin Contracts
- Solady
- Solmate
๐ซก Contributing
๐ snekmate only exists thanks to its contributors. There are many ways to get involved and contribute to our high-quality and secure smart contracts. Check out our Contribution Guidelines!
๐ธ Donation
I am a strong advocate of the open-source and free software paradigm. However, if you feel my work deserves a donation, you can send it to this address: 0xe9Fa0c8B5d7F79DeC36D3F448B1Ac4cEdedE4e69. I can pledge that I will use this money to help fix more existing challenges in the Ethereum ecosystem ๐ค.
๐ Licence
This software is released under the GNU Affero General Public License v3.0 only (AGPL-3.0-only) by default.
We believe in fostering a collaborative and open ecosystem. The AGPL-3.0-only licence keeps the code free, the knowledge shared, and the doors open. It stands as a quiet rebellion against control, a promise that what is built in the open will remain in the open, owned by no one and available to all.
โ๏ธ Dual-Licensing Option
We understand that AGPL-3.0-only-licensed software may not be suitable for all use cases, particularly in cases involving:
- Proprietary or closed-source projects,
- Licence incompatibilities, or
- Commercial applications with conflicting requirements.
For such scenarios, we offer an alternative licence under the MIT License, granted at our sole discretion.
๐ฉ Requesting an MIT License
If you have substantial reasons for requiring a more permissive licence, such as those outlined above, feel free to contact us via email to request access to the software under the MIT License.
Each request is evaluated on a case-by-case basis, and we will provide the MIT License if deemed appropriate.
๐ข Disclaimer
Metadata
Release files for snekmate 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| snekmate-0.1.2.tar.gz | 102.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| snekmate-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 222.7 kB
Release files / snekmate-0.1.2.tar.gz
| Download URL | snekmate-0.1.2.tar.gz |
|---|---|
| Size | 102.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8ed2c6a29b90424543d1792599c5c0b5ccf6988931b43029d1ca7e520a045038
|
|
BLAKE2b-256 checksum How to use checksums |
a4f55b285024f0a18e699f2b144d9821b2572e8665331261c9078fdad6a7aa38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 25, 2025.
Transparency logRelease files / snekmate-0.1.2-py3-none-any.whl
| Download URL | snekmate-0.1.2-py3-none-any.whl |
|---|---|
| Size | 120.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
df439ba25843f52e6d7e1b58000192f77cd0a5caa9a756075655ead2b66e6314
|
|
BLAKE2b-256 checksum How to use checksums |
2d94c7e58d2b19e05c91454ca64bdeb109969e4fac580c7eb2a50994859b1379
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 25, 2025.
Transparency log