Cover photo

StarkNet Nile. Smart Contract development

Simple smart contract with auth.

mkdir myproject
cd myproject

python3 -m venv env
source env/bin/activate

pip install cairo-nile
nile init

Run local node

Create .env file for wallets

vim .env

Paste private keys of wallets. Example:

aaa=111
bbb=222
ccc=333

Setup wallets

nile setup <private_key_alias>

Edit contract file

vim contract.cairo

Paste contract code

%lang starknet

from starkware.cairo.common.cairo_builtins import HashBuiltin
from starkware.starknet.common.syscalls import get_caller_address

// Define a storage variable.
@storage_var
    func balance(user: felt) -> (res: felt) {
}

// Increases the balance by the given amount.
@external
func increase_balance{
    syscall_ptr: felt*,
    pedersen_ptr: HashBuiltin*,
    range_check_ptr,
}(amount: felt) {
    let (user) = get_caller_address();
    let (res) = balance.read(user=user);
    balance.write(user, res + amount);
    return ();
}

// Returns the current balance.
@view
func get_balance{
    syscall_ptr: felt*,
    pedersen_ptr: HashBuiltin*,
    range_check_ptr,
}(user: felt) -> (res: felt) {
    let (res) = balance.read(user=user);
    return (res=res);
}

https://gist.github.com/e-favela021/1eca1ba17e3d803e357f2fa91e704fd0

Compile contract

nile compile

Deploy contract

nile deploy contract --alias my_contract

Test contract

nile send aaa my_contract increase_balance 100
nile send bbb my_contract increase_balance 500

nile call my_contract get_balance <address>
  • Account addresses located in localhost.accounts.json file