Smart contracts written in cairo1.0
Install rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Check rust version
rustc --version
Install scarb
curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh
Check scarb version
scarb --version
Install starkli
curl https://get.starkli.sh | sh
starkliup
Check starkli version
starkli --version
Install Katana
git clone https://github.com/dojoengine/dojo
cd dojo
cargo install --path ./crates/katana --locked --force
- Start katana with
katana
command. You should see a list of accounts with Account Address, Private Key, and Public Key and see similar message 👇
🚀 JSON-RPC server started: http://0.0.0.0:5050
- Create a keystore file by running
starkli signer keystore from-key ~/.starkli-wallets/deployer/my_local_account_1_key.json
Note: If you see folder not found or similar error, create .starkli-wallets/deployer
folder with mkdir
Now, you should see a prompt asking for a Private Key. copy first account private key from katana output. Now. you see a prompt asking for a password. remember to enter something you can remember easily 😀 that's it, now we have our keystore file.
- Create account descriptor file
touch ~/.starkli-wallets/deployer/my_local_account_1.json
Open the newly created my_local_account_1.json
file and paste following content
{
"version": 1,
"variant": {
"type": "open_zeppelin",
"version": 1,
"public_key": "<SMART_WALLET_PUBLIC_KEY>"
},
"deployment": {
"status": "deployed",
"class_hash": "<SMART_WALLET_CLASS_HASH>",
"address": "<SMART_WALLET_ADDRESS>"
}
}
-
here replace <SMART_WALLET_PUBLIC_KEY> and <SMART_WALLET_ADDRESS> with respected values that you have from
katana
command output. -
to get a class hash for wallet run, replace SMART_WALLET_ADDRESS with respected value.
starkli class-hash-at <SMART_WALLET_ADDRESS> --rpc http://0.0.0.0:5050
You will get class hash as the output, put that value in my_local_account_1.json
file.
Replace respected file path in local.env
file and then run source local.env
on terminal. you can verify if values are set correctly using
echo ${STARKNET_ACCOUNT}
- Copy your Braavos wallet private key from Privacy and Security section
- Create a keystore file for starkli
starkli signer keystore from-key ~/.starkli-wallets/deployer/my_testnet_account_1_key.json
Note: If you see folder not found or similar error, create .starkli-wallets/deployer
folder with mkdir
- Create a account descriptor
account fetch <SMART_WALLET_ADDRESS> --output ~/.starkli-wallets/deployer/my_testnet_account_1.json
Here Replace <SMART_WALLET_ADDRESS> with your Braavos wallet address. You Should see a message similar to
WARNING: no valid provider option found. Falling back to using the sequencer gateway for the goerli-1 network. Doing this is discouraged. See https://book.starkli.rs/providers for more details.
Account contract type identified as: Braavos
Description: Braavos official proxy account
Downloaded new account config file: ~/.starkli-wallets/deployer/my_testnet_account_1.json
Note: If you get unknown class hash error, checkout Issues section.
-
Create a new env file
testnet.env
and copysample.testnet.env
content. You can replace values if you are using different RPC or path for keys is different. -
run
source testnet.env
to export env variables to your terminal. you can verify if values are set correctly using
echo ${STARKNET_ACCOUNT}
starkli declare target/dev/<CONTRACT_NAME>.sierra.json --compiler-version 2.1.0
starkli deploy <CLASS_HASH> <CONSTRUCTOR_ARGS>
- To call view functions, use call keyword, for example
starkli call 0x03d568de0f4e151ed97a196e7585cae03be68b8d01c3d5af2e19c7aa4bb07202 get
- To call writable functions, use invoke keyword, for example
starkli invoke 0x03d568de0f4e151ed97a196e7585cae03be68b8d01c3d5af2e19c7aa4bb07202 set 7
- In Cairo, a string is a collection of characters stored in a
felt252
. Strings can have a maximum length of 31 characters. - field elements are integers in the range between
0 <= x < P
, where P is a very large prime number, currentlyP = 2^{251} + 17 * 2^{192} + 1
- Unknown Classhash error:
If you get an unknown classhash error while creating account descriptor for your braavos account, you can create a account file manually.
create a file
~/.starkli-wallets/deployer/my_testnet_account1.json
with following content
{
"version": 1,
"variant": {
"type": "open_zeppelin",
"version": 1,
"public_key": "<PUBLIC_KEY>"
},
"deployment": {
"status": "deployed",
"class_hash": "<CLASS_HASH>",
"address": "<WALLET_ADDRESS>"
}
}
- Get <PUBLIC_KEY>, from Privacy and Security section in Braavos
- To get classhash, open
https://testnet.starkscan.co/contract/<WALLET_ADDRESS>
link in browser. you should be able to see classhash for your account.
Declare a contract
sncast --profile <profile-name> declare --contract-name
<contract-name>
Deploy a contract
sncast --profile testnet1 deploy --class-hash <class-hash> --constructor-calldata 10000000000 0 0x032aee2a95f251a984a391fb2919757a9074065f3c12b010a142c9fd939e933
- Run
scarb --offline build
to build a project without updating dependencies.