Disclaimer: this project is deprecated and no longer maintained. scarb is preferred over nile.
Plugin for Nile to deploy and manage upgradeable smart contracts on StarkNet.
This plugin does not currently validate contracts for upgrade safety (see issue). Review your contracts for upgrade safety before performing any deployments or upgrades.
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,
initializer_args,
initializer='initializer',
salt=0,
unique=True,
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. -
initializer_args
- array of arguments for the initializer function. -
initializer
- initializer function name. Defaults to'initializer'
. -
salt
- the salt for proxy address generation. Defaults to0
. -
unique
- whether the account address should be taken into account for proxy address generation. Defaults toTrue
. -
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