Skip to content

Releases: pcaversaccio/snekmate

v0.1.0

26 Jun 14:25
feb2dc0
Compare
Choose a tag to compare

██╗░░░██╗██╗░░░██╗██████╗░███████╗██████╗░
██║░░░██║╚██╗░██╔╝██╔══██╗██╔════╝██╔══██╗
╚██╗░██╔╝░╚████╔╝░██████╔╝█████╗░░██████╔╝
░╚████╔╝░░░╚██╔╝░░██╔═══╝░██╔══╝░░██╔══██╗
░░╚██╔╝░░░░░██║░░░██║░░░░░███████╗██║░░██║
░░░╚═╝░░░░░░╚═╝░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝

███████╗██╗░░░██╗░█████╗░██╗░░██╗██╗███╗░░██╗░██████╗░
██╔════╝██║░░░██║██╔══██╗██║░██╔╝██║████╗░██║██╔════╝░
█████╗░░██║░░░██║██║░░╚═╝█████═╝░██║██╔██╗██║██║░░██╗░
██╔══╝░░██║░░░██║██║░░██╗██╔═██╗░██║██║╚████║██║░░╚██╗
██║░░░░░╚██████╔╝╚█████╔╝██║░╚██╗██║██║░╚███║╚██████╔╝
╚═╝░░░░░░╚═════╝░░╚════╝░╚═╝░░╚═╝╚═╝╚═╝░░╚══╝░╚═════╝░

██████╗░░█████╗░░█████╗░██╗░░██╗░██████╗██╗
██╔══██╗██╔══██╗██╔══██╗██║░██╔╝██╔════╝██║
██████╔╝██║░░██║██║░░╚═╝█████═╝░╚█████╗░██║
██╔══██╗██║░░██║██║░░██╗██╔═██╗░░╚═══██╗╚═╝
██║░░██║╚█████╔╝╚█████╔╝██║░╚██╗██████╔╝██╗
╚═╝░░╚═╝░╚════╝░░╚════╝░╚═╝░░╚═╝╚═════╝░╚═╝

After more than two years of relentless work, we've brought a simple vision to life: Making 🐍Vyper code reusable in a truly composable way. Enough the cheap talk — here's the fucking code!

Let's welcome today the 🐍 snekmate version 0.1.0, targeting the latest (breaking) 🐍Vyper release 0.4.0! All you need to do going forward is to invoke (in your virtual environment):

pip install vyper snekmate

and you're ready to go! A simple (exemplary) ERC-20 token implementation looks now as follows:

# pragma version ~=0.4.0
from ethereum.ercs import IERC20
from ethereum.ercs import IERC20Detailed
from snekmate.auth import ownable
from snekmate.tokens import erc20


initializes: ownable
initializes: erc20[ownable := ownable]
exports: (
    erc20.owner,
    erc20.IERC20,
    erc20.IERC20Detailed,
    erc20.mint,
    erc20.set_minter,
)


@deploy
def __init__():
    ownable.__init__()
    erc20.__init__("Vyper", "VY", 18, "Vyper", "1")

Blockscout already supports the verification of 🐍Vyper 0.4.0 contracts (an example contract I deployed on Sepolia 0x97E68f1Dc2e86bc87e3c01e2Df1075859B5a4856):

image

👇 Below you find the detailed code changes, 🐍 snekmate's new contributors, and the full CHANGELOG. Persevere with determination. Surpass your boundaries. Move forward resolutely.

Important

The aggregating pull request used to implement the subsequent changes is #207.

💥 New Features

🥢 Test Coverage

  • Tokens
    • erc20:
      • Add echidna-based erc20 property tests. (#239)
      • Add halmos-based erc20 symbolic tests. (#240)
    • erc721:
      • Add echidna-based erc721 property tests. (#239)
      • Add halmos-based erc721 symbolic tests. (#240)
    • erc1155: Add halmos-based erc1155 symbolic tests. (#240)
  • Utility Functions
    • math: Add halmos-based math symbolic tests. (#240)

❗️ Breaking Changes

  • The file names of 🐍 snekmate module and mock contracts use the snake case notation (e.g. my_module.vy or my_module_mock.vy), whilst the 🐍Vyper interface files .vyi use the Pascal case notation prefixed with I (e.g. IMyInterface.vyi). (#242)
  • The mathematical utility functions _log_2, _log_10, and _log_256 are renamed to _log2, _log10, and _log256. (#242)
  • All 🐍 snekmate contracts now target the new 🐍Vyper default EVM version cancun (#245). If you intend to deploy on an EVM chain with no cancun support, you must compile — using the shanghai EVM version as an example — the main contract that uses the 🐍 snekmate module contracts with the --evm-version shanghai option; e.g. vyper --evm-version shanghai src/snekmate/tokens/mocks/erc20_mock.vy, or add the # pragma evm-version shanghai directive to the main contract that uses the 🐍 snekmate module contracts:
# pragma version ~=0.4.0
# pragma evm-version shanghai

...

🙏🏽 New Contributors

Read more

🐍 snekmate v0.0.5

07 Mar 14:20
bb15f55
Compare
Choose a tag to compare

🫡 Summary

Hey fam, it's been a minute! Vyper is grinding hard, and soon you'll be slithering through 🐍 snekmate contracts like a breeze:

from libraries.snekmate.tokens import ERC20
initializes: ERC20

I've put together a guide to kickstart your journey with Vyper modules right here.

We're not quite there yet, though. The 🐍 snekmate 0.0.5 release is the last version targeting Vyper's 0.3.10 version, featuring not only minor code refactorings and optimisations, but also a multi-role-based timelock controller reference implementation (h/t @cairoeth).

Please note that this release ships the src layout for the repository to properly implement snekmate-namespaced distribution package building:

Before (0.0.4)

snekmate
├── pyproject.toml
├── ...
└── src
    ├── auth
    │   ├── ...
    ├── extensions
    │   ├── ...
    ├── governance
    │   ├── ...
    ├── tokens
    │   ├── ...
    └── utils
        ├── ...

After (0.0.5)

snekmate
├── pyproject.toml
├── ...
└── src
    └── snekmate
        ├── auth
        │   ├── ...
        ├── extensions
        │   ├── ...
        ├── governance
        │   ├── ...
        ├── tokens
        │   ├── ...
        └── utils
            ├── ...

👇 Below you find the detailed code changes, 🐍 snekmate's new contributors, and the full CHANGELOG. Persist relentlessly. Push beyond limits. Forge ahead.

💥 New Features

♻️ Refactoring

  • Utility Functions
    • Math: Refactor the is_negative function into a proper sign function that returns the indication of the sign of a 32-byte signed integer. (#187)
    • Math: Rename the recently added sign function to signum to avoid any ambiguity with cryptographic signing utility functions. (#188)
    • Math: Optimise the zero point threshold in wad_exp. (#189)

🔖 Release Management

  • Implement snekmate-namespaced distribution package building for TestPyPI and PyPI. (#204)
  • Implement src layout to enable an enhanced local pip install git+https://github.com/pcaversaccio/snekmate.git@<branch> building. (#206)

🙏🏽 New Contributors

👀 Full Changelog

v0.0.4...v0.0.5

🐍 snekmate v0.0.4

13 Oct 14:38
55af6d8
Compare
Choose a tag to compare

🫡 Summary

This is a security patch release that removes the multicall_value_self function as the msg.value should not be trusted. (#167)

👀 Full Changelog

v0.0.3...v0.0.4

🐍 snekmate v0.0.3

12 Oct 10:17
ebd8038
Compare
Choose a tag to compare

🫡 Summary

🐻Bear markets are made for building and you know what, the 🐍sneeek is shipping today 🔥! You might have heard that Vyper shipped version 0.3.10 eight days ago. But you might not know that the latest Vyper version is a heavily performance-oriented version that, among other things, generates selector tables that now offer O(1) performance 🤯 (see PR #3496). And so that you can take advantage of the latest improvements, I ship 🐍 snekmate version 0.0.3 today targeting the latest Vyper version!

Important: The default EVM version since Vyper version 0.3.8 is set to shanghai (i.e. the EVM includes the PUSH0 instruction).

👇 Below you find the detailed code changes and the full CHANGELOG. Don't stop. Push harder. Keep going.

💥 New Features

♻️ Refactoring

  • Extensions
    • ERC4626:
      • Remove the non-standard increase_allowance and decrease_allowance functions. (#160)
      • Optimise the method used to factor powers of two out of the denominator in _mul_div. (#162)
  • Tokens
    • ERC20:
      • Optimise the set_minter function to save one SLOAD. (#154)
      • Remove the non-standard increase_allowance and decrease_allowance functions. (#160)
    • ERC721: Optimise the set_minter function to save one SLOAD. (#154)
    • ERC1155: Optimise the set_minter function to save one SLOAD. (#154)
  • Utility Functions
    • Math: Optimise the method used to factor powers of two out of the denominator in mul_div. (#153)
  • Vyper Contract Deployer
    • VyperDeployer: If you want to leverage 🐍 snekmate's VyperDeployer contract for your own testing, ensure that you compile the Vyper contracts with the same EVM version as configured in your foundry.toml file. The VyperDeployer contract offers two overloaded deployContract functions that allow the configuration of the target EVM version. Please note that since Vyper version 0.3.8 the default EVM version is set to shanghai. (#161)

🥢 Test Coverage

❗️ Breaking Change

  • All 🐍 snekmate contracts now target the Vyper version 0.3.10 (#164). It is strongly recommended to upgrade accordingly your local Vyper version prior to using the 🐍 snekmate contracts. Important: The default EVM version since Vyper version 0.3.8 is set to shanghai (i.e. the EVM includes the PUSH0 instruction). If you intend to deploy on an EVM chain with no PUSH0 support, you must compile the 🐍 snekmate contracts with the --evm-version paris option; e.g. vyper --evm-version paris utils/Math.vy, or add the # pragma evm-version paris directive to the 🐍 snekmate contracts:
# pragma version ^0.3.10
# pragma evm-version paris
# pragma optimize gas
"""
@title Modern and Gas-Efficient ERC-20 + EIP-2612 Implementation
...
"""


# @dev We import and implement the `ERC20` interface,
# which is a built-in interface of the Vyper compiler.
from vyper.interfaces import ERC20
implements: ERC20
...

The # pragma optimize directive has also been added in Vyper version 0.3.10 (see PR #3493). Please refer to here to learn more about the different options none, codesize, and gas (default).

🙏🏽 New Contributors

👀 Full Changelog

v0.0.2...v0.0.3

🐍 snekmate v0.0.2

07 Jun 08:54
a4c5612
Compare
Choose a tag to compare

🫡 Summary

Vyper shipped version 0.3.9 nine days ago, I ship 🐍 snekmate version 0.0.2 today targeting the latest Vyper version!

Talk is cheap. Show me the code.

For all the math 🤓 nerds, I added wad_ln and wad_exp to the standard mathematical utility functions! Check them out here. Another noteworthy change is that I have added default support for EIP-5267 for all contracts that support EIP-712, i.e. ERC20, ERC721, and ERC4626.

Important: The default EVM version since Vyper version 0.3.8 is set to shanghai (i.e. the EVM includes the PUSH0 instruction).

👇 Below you find the detailed code changes and the full CHANGELOG. On that note, have a great week and keep grinding anon!

image

💥 New Features

  • General
    • All 🐍 snekmate contracts now contain an Ethereum Natural Language Specification Format (NatSpec) custom field @custom:contract-name. The underlying rationale is that the block explorers plan to use @custom:contract-name as contract name and @title as fallback. (#124)
  • Extensions
  • Tokens
  • Utility Functions

♻️ Refactoring

  • General
    • All 🐍 snekmate contracts are now guaranteed to compile with the Vyper CLI flags userdoc and devdoc, and, if using the Ape framework, with ape compile. (#126)
  • Extensions
    • ERC4626:
      • Add implements interface ERC20Detailed and ERC4626. (#125)
      • Use of the ternary operator introduced in Vyper 0.3.8 in the constructor for the immutable variable assignment of _UNDERLYING_DECIMALS instead of an if-else statement. (#128)
  • Tokens
    • ERC20: Add implements interface ERC20Detailed. (#125)
    • ERC721: Add implements interface IERC721Metadata. (#125)
  • Utility Functions
    • Base64: Use the shift operators >> and << introduced in Vyper 0.3.8 instead of the shift instruction. (#127)
    • ECDSA: Use the shift operators >> and << introduced in Vyper 0.3.8 instead of the shift instruction. (#127)
    • SignatureChecker: Use the shift operators >> and << introduced in Vyper 0.3.8 instead of the shift instruction. (#127)
    • Math:
      • Use directly 🐍 snekmate's log_2 function in the internal calculation of wad_cbrt. (#91)
      • Use the shift operators >> and << introduced in Vyper 0.3.8 instead of the shift instruction. (#127)
      • Use of the ternary operator introduced in Vyper 0.3.8 in the function ceil_div instead of an if-else statement. (#128)

❗️ Breaking Change

  • All 🐍 snekmate contracts now target the Vyper version 0.3.9. It is strongly recommended to upgrade accordingly your local Vyper version prior to using the 🐍 snekmate contracts. Important: The default EVM version since Vyper version 0.3.8 is set to shanghai (i.e. the EVM includes the PUSH0 instruction). If you intend to deploy on an EVM chain with no PUSH0 support, you must compile the 🐍 snekmate contracts with the --evm-version paris option; e.g. vyper --evm-version paris utils/Math.vy. (#122)

👀 Full Changelog

v0.0.1...v0.0.2

🐍 snekmate v0.0.1 🥳

06 Mar 10:28
bc70a3b
Compare
Choose a tag to compare

Summary

I am just fucking proud and so happy to release the first official version of 🐍 snekmate 🥳!

Honestly, what a feat:

  • 582 commits
  • 6,471 source lines of 🐍Vyper code
  • 15,137 source lines of Solidity test code

🙏🏻 Special thanks go to all the contributors who supported me during this journey, you're all badass!

image

🎛 Installation

We offer three convenient ways to install the 🐍 snekmate contracts:

1️⃣ Foundry

You can install 🐍 snekmate via submodules using Foundry with:

forge install pcaversaccio/snekmate

2️⃣ PyPI

You can install 🐍 snekmate from PyPI with:

pip install snekmate

You can use pip install snekmate -t . to install the contracts directly into the current working directory!

3️⃣ npm

You can install 🐍 snekmate from npm with:

npm install --save-dev snekmate

Or if you are using Yarn:

yarn add --dev snekmate

Full Changelog

The following 🐍Vyper contracts are available within 🐍 snekmate:

  • Authentication
    • Ownable: Owner-based access control functions.
    • Ownable2Step: 2-step ownership transfer functions.
    • AccessControl: Multi-role-based access control functions.
  • Extensions
    • ERC4626: Modern and gas-efficient ERC-4626 tokenised vault implementation. (#74)
  • Tokens
    • ERC20: Modern and gas-efficient ERC-20 + EIP-2612 implementation. (#17)
    • ERC721: Modern and gas-efficient ERC-721 + EIP-4494 implementation. (#20)
    • ERC1155: Modern and gas-efficient ERC-1155 implementation. (#31)
  • Utility Functions
    • Base64: Base64 encoding and decoding functions. (#47)
    • BatchDistributor: Batch sending both native and ERC-20 tokens.
    • CreateAddress: CREATE EVM opcode utility function for address calculation.
    • Create2Address: CREATE2 EVM opcode utility functions for address calculations.
    • ECDSA: Elliptic curve digital signature algorithm (ECDSA) functions.
    • SignatureChecker: ECDSA and EIP-1271 signature verification functions.
    • EIP712DomainSeparator: EIP-712 domain separator.
    • Math: Standard mathematical utility functions. (#74, #77, #86)
    • MerkleProofVerification: Merkle tree proof verification functions. (#30)
    • Multicall: Multicall functions.