StarkNet Deploy Smart Contract
Все действия выполнялись через workspace на сайте gitpod.
Выполняем каждую команду отдельно:
Везде, где просит нажимаем "y"
- export STARKNET_NETWORK=alpha-goerli
- export STARKNET_WALLET=starkware.starknet.wallets.open_zeppelin.OpenZeppelinAccount
- starknet new_account
Сохраняем account address и public key. Получаем тестовые токены через StarkNet Faucet
Получаем Transaction Hash и ждём пока аккаунт задеплоится, отслеживать транзакцию можно через Starscan.
Нажимаем "Ctrl+Z" и идём в папку starknet. Открываем файл contract.cairo и вставляем в него следующий код:
// Declare this file as a StarkNet contract.
%lang starknet
from starkware.cairo.common.cairo_builtins import HashBuiltin
// Define a storage variable.
@storage_var
func balance() -> (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 (res) = balance.read();
balance.write(res + amount);
return ();
}
// Returns the current balance.
@view
func get_balance{
syscall_ptr: felt*,
pedersen_ptr: HashBuiltin*,
range_check_ptr,
}() -> (res: felt) {
let (res) = balance.read();
return (res=res);
}Удаляем из названия файла первую точку и .swp что-бы финальное название было "contract.cairo".
- starknet-compile contract.cairo \
--output contract_compiled.json \
--abi contract_abi.json - starknet declare --contract contract_compiled.json
Сохраняем contract class hash для следующего шага и ждём завершения транзакции.
- starknet deploy --class_hash $CLASS_HASH (заменяем $CLASS_HASH на contract class hash из предыдущего шага)
Сохраняем contract address и ждём завершения транзакции.
- starknet invoke \
--address ${CONTRACT_ADDRESS} \
--abi contract_abi.json \
--function increase_balance \
--inputs 1234
Заменяем ${CONTRACT_ADDRESS} на contract address из предыдущего шага.
Проверяем прошла ли последняя транзакция и радуемся запущеному контракту.