A Zksync plugin for the Titanoboa Vyper interpreter
First install the following dependencies, depending on your system:
For Google Colab: The following dependencies should be downloaded automatically.
We use the era-compiler-vyper a.k.a. zkvyper
: to compile Vyper code to ZkSync-compatible bytecode.
-
Download the latest binary from the zkvyper-bin repository and rename it as
zkvyper
. -
On Linux/macOS, mark the binary as executable:
chmod a+x <path to file>
-
On macOS, the binary may need to have its quarantine attribute cleared:
xattr -d com.apple.quarantine <path to file>
Then, make sure this is available in your system PATH.
If you want to test with forks or a local test node, you will need to install the ZkSync anvil-zksyncs.
- Download and install
anvil-zksync
curl --proto '=https' -sSf https://raw.githubusercontent.com/matter-labs/anvil-zksync/main/scripts/install.sh > install.sh
chmod +x install.sh
sudo ./install.sh
Then, make sure this is available in your system PATH.
Finally, install the package:
pip install titanoboa-zksync
The usage of this plugin is similar to the original Titanoboa interpreter.
import boa_zksync
boa_zksync.set_zksync_env("<rpc_url>") # use RPC
boa_zksync.set_zksync_fork("<rpc_url>") # fork from the mainnet
boa_zksync.set_zksync_test_env() # run a local test node
import boa, boa_zksync
from boa.integrations.jupyter import BrowserSigner
# use the browser signer and RPC:
boa_zksync.set_zksync_browser_env() # use the browser signer and RPC
boa.env.set_chain_id(324) # Set the chain ID to the ZkSync network
# use the browser signer and a custom RPC:
boa_zksync.set_zksync_env("<rpc_url>")
boa.env.set_eoa(BrowserSigner())
import boa, boa_zksync
constructor_args, address = [], "0x1234..."
boa_zksync.set_zksync_test_env() # configure the environment, see previous section
# Load a contract from source code and deploy
boa.loads("contract source code", *constructor_args)
# Load a contract from file and deploy
contract = boa.load("path/to/contract.vy", *constructor_args)
# Load a contract from source file but don't deploy yet
deployer = boa.loads_partial("source code")
deployer.deploy(*constructor_args) # Deploy the contract
deployer.at(address) # Connect a contract to an existing address
# Load a contract from source file but don't deploy yet
deployer = boa.loads_partial("source code")
deployer.deploy(*constructor_args) # Deploy the contract
deployer.at(address) # Connect a contract to an existing address
# Run the given source code directly
boa.eval("source code")
# pragma optimize gas
is not supported by Zksync