Crypto Flexs
  • DIRECTORY
  • CRYPTO
    • ETHEREUM
    • BITCOIN
    • ALTCOIN
  • BLOCKCHAIN
  • EXCHANGE
  • TRADING
  • SUBMIT
Crypto Flexs
  • DIRECTORY
  • CRYPTO
    • ETHEREUM
    • BITCOIN
    • ALTCOIN
  • BLOCKCHAIN
  • EXCHANGE
  • TRADING
  • SUBMIT
Crypto Flexs
Home»HACKING NEWS»Test proxy contracts securely using Wake Framework
HACKING NEWS

Test proxy contracts securely using Wake Framework

By Crypto FlexsDecember 30, 20254 Mins Read
Facebook Twitter Pinterest LinkedIn Tumblr Email
Test proxy contracts securely using Wake Framework
Share
Facebook Twitter LinkedIn Pinterest Email

introduction

Upgrades are where production bugs hide: missing initialization, bad administrator, or corrupted repositories. The proxy pattern allows contracts to be upgraded, but introduces complexity that traditional testing misses. Wake’s Python-first testing catches these issues before they reach mainnet.

The result is clean test code. Calling an implementation function through a proxy is straightforward.

contract = ExampleERC20Upgradeable(proxy)

Here’s how to test proxy contracts in Wake:

1. Import proxy contract

Wake needs to compile proxy contracts to generate Python type bindings (pytypes). If the proxy contract is in the library directory, Wake will not compile it by default.

in wake.tomlThe default configuration is as follows: exclude_paths = ("script", ".venv", "venv", "node_modules", "lib", "test"). This means that contracts in these paths will not be compiled unless they are imported from a non-excluded file.

To make a contract available to your project, import the contract externally. exclude_paths. Please refer to the documentation for more details: https://ackee.xyz/wake/docs/latest/compilation/

make tests/imports.sol To enable pytype:

import ERC1967Proxy from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";

2. Import proxy in Python

run wake up Compile again. Wake generates Python bindings for both implementation and proxy contracts. Import it as a test file.

tests/test_upgradable.py

from pytypes.contracts.ExampleERC20Upgradeable import ExampleERC20Upgradeable
from pytypes.openzeppelin.contracts.proxy.ERC1967.ERC1967Proxy import ERC1967Proxy

3. Deployment and initialization

First deploy the implementation contract and then create a proxy pointing to it. The proxy’s initialization data encodes a call to the implementation’s ‘init’ function.

@chain.connect()
@on_revert(revert_handler)
def test_default():

    impl_erc20 = ExampleERC20Upgradeable.deploy()

    proxy = ERC1967Proxy.deploy(
        implementation =impl_erc20,
        _data=abi.encode_call(ExampleERC20Upgradeable.initialize, ("Upgradable Token", "UPG", 10**20, chain.accounts(0))),
        from_=chain.accounts(0)
    )

The `_data` parameter encodes the initialization call that is executed during proxy deployment. This replaces the constructor pattern used for non-upgradable contracts.

4. Access implementation functions through proxy

Wrap the proxy address with an implementation contract class. This instructs Wake to route all function calls through the proxy while using the implementation’s ABI.

contract = ExampleERC20Upgradeable(proxy)

Wake automatically handles routing of delegate calls, allowing you to interact with the contract as if it were a simple deployment.

5. Call implementation function

All implementation features are now available through the wrapped proxy. You can check the behavior of your contracts, inspect events, and test state changes.

# Verify initial balance
assert contract.balanceOf(chain.accounts(1)) == 0

# Execute transfer
tx = contract.transfer(chain.accounts(1), 10**18, from_=chain.accounts(0))

# Inspect emitted events
event = next(event for event in tx.events if isinstance(event, ExampleERC20Upgradeable.Transfer))
assert event.from_ == chain.accounts(0).address
assert event.to == chain.accounts(1).address
assert event.value == 10**18

# Verify updated balance
assert contract.balanceOf(chain.accounts(1)) == 10**18

Tests verify that the proxy delegates correctly to the implementation and maintains state as expected.

conclusion

Wake simplifies proxy testing through Python bindings. Wrap the proxy address in an implementation class and call the function directly. The same approach also works for unit testing and Manually Guided Fuzzing (MGF), so you can test upgradeable contracts using the same tools you use for standard contracts.

This catches upgrade bugs (missed initializations, storage conflicts, access control issues) before they can be exploited. Test proxy patterns the same way you test everything else.

Learn more here. See our beginner’s guide to manually guided fuzzing.

Appendix: Full test code

import math
from wake.testing import *
from dataclasses import dataclass

from pytypes.contracts.ExampleERC20Upgradeable import ExampleERC20Upgradeable
from pytypes.openzeppelin.contracts.proxy.ERC1967.ERC1967Proxy import ERC1967Proxy

# Print failing tx call trace
def revert_handler(e: RevertError):
    if e.tx is not None:
        print(e.tx.call_trace)

@chain.connect()
@on_revert(revert_handler)
def test_default():

    impl_erc20 = ExampleERC20Upgradeable.deploy()

    proxy = ERC1967Proxy.deploy(
        implementation =impl_erc20,
        _data=abi.encode_call(ExampleERC20Upgradeable.initialize, ("Upgradable Token", "UPG", 10**20, chain.accounts(0))),
        from_=chain.accounts(0)
    )

    contract = ExampleERC20Upgradeable(proxy) # Just wrap the proxy with the contract Class to call functions

    assert contract.balanceOf(chain.accounts(1)) == 0
    tx = contract.transfer(chain.accounts(1), 10**18, from_=chain.accounts(0))

    event = next(event for event in tx.events if isinstance(event, ExampleERC20Upgradeable.Transfer))
    assert event.from_ == chain.accounts(0).address
    assert event.to == chain.accounts(1).address
    assert event.value == 10**18

    assert contract.balanceOf(chain.accounts(1)) == 10**18

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email

Related Posts

Real Finance partners with Anchorage Digital to expand RWA infrastructure

June 6, 2026

Videos and Podcasts | Vault12

May 27, 2026

ECHO Token Plunges After $76 Million Administrator Key Exploit Hits Protocol

May 25, 2026
Add A Comment

Comments are closed.

Recent Posts

Bybit Launches New Daily Treasure Hunt Season Featuring Football Match Tickets And XAUT Rewards

June 10, 2026

World Cup 2026 Prediction Markets Now Live On Whale.io With $90K In Prizes

June 10, 2026

Chris Jericho To Join And Co-Create Official Community Traits For Kokopi Koalas™ NFT Collection

June 9, 2026

Bancor reduced its stable fee to 0.001%. Can BNT bounce back?

June 9, 2026

Neura Closes Strategic Funding Round And Partnerships To Build Emotional AI With Persistent, User-Owned Memory

June 9, 2026

Phemex Kicks Off $7 Million Ultimate Championship, Bringing Trading Competition To Football Season

June 9, 2026

MEXC Prediction Markets Launches Combo To Enable Multi-Event Combination Trading

June 9, 2026

ZIGChain expands on-chain access by integrating Ondo tokenized stocks and ETFs.

June 8, 2026

Bitmine Immersion Technologies (BMNR) Announces ETH Holdings Reach 5.54 Million Tokens, And Total Crypto And Total Cash Holdings Of $9.6 Billion

June 8, 2026

MapleStory Universe Opens MSU Space And Launches Global Game Jam Competition As Part Of MSU 2.0 Expansion

June 8, 2026

Why is UK Financial Ltd’s trillion-dollar ERC-3643 conversion attracting major platforms?

June 7, 2026

Crypto Flexs is a Professional Cryptocurrency News Platform. Here we will provide you only interesting content, which you will like very much. We’re dedicated to providing you the best of Cryptocurrency. We hope you enjoy our Cryptocurrency News as much as we enjoy offering them to you.

Contact Us : Partner(@)Cryptoflexs.com

Top Insights

Bybit Launches New Daily Treasure Hunt Season Featuring Football Match Tickets And XAUT Rewards

June 10, 2026

World Cup 2026 Prediction Markets Now Live On Whale.io With $90K In Prizes

June 10, 2026

Chris Jericho To Join And Co-Create Official Community Traits For Kokopi Koalas™ NFT Collection

June 9, 2026
Most Popular

Bitcoin’s dominance has hit the cross of death. This is the current battle between memecoins and altcoins.

January 8, 2025

Investors pulled $ 795 meters from the tariffs.

April 16, 2025

Terraform Labs’ LUNA and MIR tokens are securities, judge rules.

December 29, 2023
  • Home
  • About Us
  • Contact Us
  • Disclaimer
  • Privacy Policy
  • Terms and Conditions
© 2026 Crypto Flexs

Type above and press Enter to search. Press Esc to cancel.