# StarkNet Nile. Smart Contract development

By [EFavela021](https://paragraph.com/@efavela021) · 2022-11-06

---

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](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

---

*Originally published on [EFavela021](https://paragraph.com/@efavela021/starknet-nile-smart-contract-development)*
