I can provide you with an example article on how to call a function from VyperContract in Titanoboa.
Development of Ethereum smart contracts with participation of Vyper and Titanoboa
In this article, we will look at the process of calling functions from the second contract using the Vyper programming language and the Titanoboa framework for Ethereum development.
Prerequisites
Before you start, make sure you have:
- Getting to know the Vyper programming language.
- Titanoboa framework installed on your local computer or in a remote container.
- A Vyper smart contract for testing (eg
erc20
) and a separate contract that contains the functions you want to call from it.
Call functions from the second contract
To call a function from a second contract, you need to:
- Import the required libraries. In your main contract, import the VyperContract class from Titanoboa.
- Create an instance of the target contract. Create an instance of a VyperContract object that represents the contract containing the functions you want to call.
- Call the target contract’s function: Use the call() method of the target contract’s VyperContract instance to execute the desired function.
Here is an example code snippet:
// main_contracts.py (main contract)
from snekmate.auth import owned as ow
import titanoboa
initialize: oops
from snekmate.tokens import erc20
initialize: erc20[ownable:= ow]
@razvertyvat
@paid
protection __init__():
Create an instance of the target contracttarget_contract = titanoboa.VyperContract("erc20")
Call the function in the target functions of the contracttarget_contract.call(function_name="my_function")
Definition of the function
For simplicity, let’s assume that my_function' is defined in the object contract as follows:
// erc20.py (target contract)
FunctionName enumeration {
my_function
}
struct MyContract {
function ( my_function : bytes ) -> bytes
}
In this example, the smart contract erc20defines an enumeration named
FunctionName, which indicates that
my_functionhas been declared. The MyContract structure represents the functions of the target contract.
Deployment and execution
To deploy and execute Vyper smart contracts with Titanoboa:
- Deployment of the main contract. Use the "deploy" function to create an instance of the main contract.
- Deployment of the target contract. Use thedeploy
function to create an instance of the target contract by specifying its name (
erc20) and the functions you want to call (eg
my_function).
- Execute contracts together: You can execute both contracts simultaneously using Titanoboa's built-in features, or use a separate process to execute each contract separately.
Usage example
Here is an example of a usage option:
Suppose we have two smart contracts: main_contracts.py and erc20.py. Themain_contracts.pycontract has the following code:
from main_contracts import MyContract
We import the target contract@razvertyvat
@paid
protection __init__():
my_contract = titanboa.VyperContract("MyContract")
my_contract.call(function_name="my_function")
Call the function in the target functions of the contract
The contract erc20.pydefines an enumeration named
FunctionName, which indicates that
my_function` has been declared. The MyContract structure represents the functions of the target contract.
By calling a function from a second contract through Titanoboa, you can write more modular and maintainable code while retaining the benefits of Vyper smart contracts and the Ethereum blockchain ecosystem.