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

