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 era-test-node.
Download era-test-node
from latest Release
Extract the binary and mark as executable:
tar xz -f era_test_node.tar.gz -C /usr/local/bin/
chmod +x /usr/local/bin/era_test_node
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