Skip to content

v0.2.4 declare, prepare, deploy

Compare
Choose a tag to compare
@github-actions github-actions released this 24 Jun 09:03
· 852 commits to master since this release
  • added declare cheatcode
  • added prepare and deploy cheatcodes to allow using other cheatcodes to test constructors
  • improved mock_call and deploy_contract cheatcodes by integrating Starknet.py's data transformer
  • improved handling of compilation errors in test files during collecting phase
  • improved warp and roll cheatcodes to be usable in the integration testing approach
  • changed deploy_contract to declare the contract before deploying
  • fixed mock_call not affecting calls in contracts deployed by deploy_contract
  • fixed SSL error when running upgrade command
  • minor fixes and improvements

How to upgrade Protostar

Run protostar upgrade.
In case of issues, run the following script:

curl -L https://raw.githubusercontent.com/software-mansion/protostar/master/install.sh | bash

Example

# ...
 %{
        declared = declare("./src/main.cairo")
        prepared = prepare(declared, {"initial_balance": 42})
        start_prank(123, target_contract_address=prepared.contract_address)
        deploy(prepared)
 %}
# ...
src/main.cairo
%lang starknet
from starkware.cairo.common.math import assert_nn
from starkware.cairo.common.cairo_builtins import HashBuiltin
from starkware.starknet.common.syscalls import get_caller_address

@storage_var
func owner() -> (res : felt):
end

@storage_var
func balance() -> (res : felt):
end

@view
func get_owner{syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, range_check_ptr}() -> (res : felt):
    let (res) = owner.read()
    return (res)
end

@view
func get_balance{syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, range_check_ptr}() -> (
    res : felt
):
    let (res) = balance.read()
    return (res)
end

@constructor
func constructor{syscall_ptr : felt*, pedersen_ptr : HashBuiltin*, range_check_ptr}(
    initial_balance : felt
):
    let (res) = get_caller_address()
    balance.write(initial_balance)
    owner.write(res)
    return ()
end
tests/test_main.cairo
%lang starknet
from starkware.cairo.common.cairo_builtins import HashBuiltin

@contract_interface
namespace MainContract:
    func get_owner() -> (res : felt):
    end

    func get_balance() -> (res : felt):
    end
end
@external
func test_owner{syscall_ptr : felt*, range_check_ptr, pedersen_ptr : HashBuiltin*}():
    alloc_locals
    local contract_address : felt
    %{
        declared = declare("./src/main.cairo")
        prepared = prepare(declared, {"initial_balance": 42})
        ids.contract_address = prepared.contract_address
        start_prank(123, target_contract_address=prepared.contract_address)
        deploy(prepared)
    %}
    
    let (owner) = MainContract.get_owner(contract_address)
    let (balance) = MainContract.get_balance(contract_address)

    assert owner = 123
    assert balance = 42
    return ()
end