Testing a Contract¶
The following example demonstrates how to compile and deploy your vyper contract.
It requires pyethereum>=2.0.0
for the tester
module
from vyper import compiler
from ethereum.tools import tester
# Get a new chain
chain = tester.Chain()
# Set the vyper compiler to run when the vyper language is requested
tester.languages['vyper'] = compiler.Compiler()
with open('my_contract.vy' 'r') as f:
source_code = f.read()
# Compile and Deploy contract to provisioned testchain
# (e.g. run __init__ method) with given args (e.g. init_args)
# from msg.sender = t.k1 (private key of address 1 in test acconuts)
# and supply 1000 wei to the contract
init_args = ['arg1', 'arg2', 3]
contract = chain.contract(source_code, language="vyper",
init_args, sender=t.k1, value=1000)
contract.myMethod() # Executes myMethod on the tester "chain"
chain.mine() # Mines the above transaction (and any before it) into a block
Note: We are working on integration with ethereum-tester, so this example will change.
Testing Using vyper-run Command¶
To allow quickly testing contracts, Vyper provides a command line tool for instantly executing a function:
vyper-run yourFileName.vy "yourFunction();" -i some_init_param, another_init_param
The vyper-run command is composed of 4 parts:
- vyper-run
- the name of the contract file you want to execute (for example: coolContract.vy)
- a string (wrapped in double quotes) with the function you want to trigger, you can trigger multiple functions by adding a semicolon at the end of each function and then call the next function (for example:
"myFunction1(100,4);myFunction2()"
) + - (Optional) the parameters for the
__init__
function of the contract (for example: given__init__(a: int128, b: int128)
the syntax would be-i 8,27
).
Putting it all together:
vyper-run myContract.vy "myFunction1();myFunction2()" -i 1,3
The vyper-run command will print out the returned value of the called functions as well as all the logged events emitted during the function’s execution.
Deploying a Contract¶
You have several options to deploy a Vyper contract to the public testnets.
One option is to take the bytecode generated by the vyper compiler and manually deploy it through mist or geth:
vyper yourFileName.vy
# returns bytecode
Or deploy it with current browser on myetherwallet contract menu.