Plugin for Nile to deploy and manage upgradeable smart contracts on StarkNet.
This plugin does not currently validate contracts for upgrade safety.
This repo contains highly experimental code. Expect rapid iteration. Use at your own risk.
pip install nile-upgrades
Run the following functions from scripts with the NileRuntimeEnvironment
.
Deploy an upgradeable proxy for an implementation contract.
Returns a Nile Transaction instance representing the proxy deployment.
async def deploy_proxy(
nre,
account,
contract_name,
salt,
unique,
initializer_args,
initializer='initializer',
alias=None,
max_fee_declare_impl=None,
max_fee_declare_proxy=None,
max_fee_deploy_proxy=None,
)
-
nre
- theNileRuntimeEnvironment
object. -
account
- the Account to use. -
contract_name
- the name of the implementation contract. -
salt
andunique
- UDC specific arguments for proxy address generation. -
initializer_args
- array of arguments for the initializer function. -
initializer
- initializer function name. Defaults to'initializer'
. -
alias
- Unique identifier for your proxy. Defaults toNone
. -
max_fee_declare_impl
- Maximum fee for declaring the implementation contract. Defaults toNone
. -
max_fee_declare_proxy
- Maximum fee for declaring the proxy contract. Defaults toNone
. -
max_fee_deploy_proxy
- Maximum fee for deploying the proxy contract. Defaults toNone
.
Example usage:
tx = await nre.deploy_proxy(nre, account, "my_contract_v1", 123, True, ["arg for initializer"])
tx_status, proxy_address, abi = await tx.execute(watch_mode="track")
Upgrade a proxy to a different implementation contract.
Returns a Nile Transaction instance representing the upgrade operation.
async def upgrade_proxy(
nre,
account,
proxy_address_or_alias,
contract_name,
max_fee_declare_impl=None,
max_fee_upgrade_proxy=None,
)
-
nre
- theNileRuntimeEnvironment
object. -
account
- the Account to use. -
proxy_address_or_alias
- the proxy address or alias. -
contract_name
- the name of the implementation contract to upgrade to. -
max_fee_declare_impl
- Maximum fee for declaring the new implementation contract. Defaults toNone
. -
max_fee_upgrade_proxy
- Maximum fee for upgrading the proxy to the new implementation. Defaults toNone
.
Example usage:
tx = await nre.upgrade_proxy(nre, account, proxy_address, "my_contract_v2")
tx_status = await tx.execute(watch_mode="track")
- Install Poetry
- Clone this project.
- From this project's root, create a virtualenv, activate it, and install dependencies:
python3.9 -m venv env
source env/bin/activate
pip install -U pip setuptools
poetry install
pip install -e .
poetry run compile
or
- Install Poetry
- Clone https://github.com/OpenZeppelin/nile
- Clone this project.
- From this project's root, create a virtualenv, activate it, and install dependencies:
python3.9 -m venv env
source env/bin/activate
pip install -U pip setuptools
poetry install
pip install -e <your_path_to_nile_repo_from_step_2>
pip install -e .
poetry run compile
poetry run pytest tests