环境:
安装 startnet插件过程
左侧底下:1)找到左侧 `Plugins` 2) 激活`Starknet` 插件
3)激活之后,如下图,出现红圈的图标。
2、写cairo程序
一个简单的程序,只是用来学习 cairo语言的变量
程序代码如下:
#[starknet::contract]
mod variables {
// declare storage variables
#[storage]
struct Storage{
var_felt: felt252,
var_bool: bool,
var_uint: u8,
}
// read storage variable
#[external(v0)]
fn read_bool(self: @ContractState) -> bool {
return self.var_bool.read();
}
// write storage variable
#[external(v0)]
fn write_bool(ref self: ContractState, bool_: bool) {
self.var_bool.write(bool_);
}
// local variables
#[external(v0)]
fn local_var(self: @ContractState){
// use `let` keywods to declare local variables
let local_felt: felt252 = 5;
let local_bool = true;
let local_uint = 1_u8;
}
}
3、在Remix环境里, 新建一个文件,名字可以随便取(例子里取名 TestCariroNew.cairo), 把上面代码拷贝到文件里。
点击: Compile,如果没有报错,就说明编译成功。
4、开始部署到链上
这里要选择, Remote Devnet, 账户选择第一个即可。 部署成功后,控制台会输出结果。
{ "transaction_hash": "0x44296ab03cd6fff56b6dd4d51886a2beeb9781cbafe495f6c6ea90db1d76c01", "contract_address": "0x1e34c076b988780efc140beec3988face73f13f7c3002efdaec62153e2dc1e1", "address": "0x1e34c076b988780efc140beec3988face73f13f7c3002efdaec62153e2dc1e1", "deployer": "0x5e778638cb1b3c8d38e8c09eec362613dc961c7c62af612846b2e01e364c76a", "unique": "0x1", "classHash": "0x6a4f14ce187ebf9fc7004cc1693ee3c1f134230cd0b9713b8ccd4d3d919bc0a", "calldata_len": "0x0", "calldata": [], "salt": "0x2bba0a16cf470789a1c6314a38b3e6639c4098d9000d9aced8394ae381c964c" }
5、 与合约交互,每次交互,结果都会显示在控制台里, 这个不像Solidity语言那样,直接能显示在remix界面,后续可能会优化。
第一个直接read bool
{ "response": { "result": [ "0x0" ] }, "contract": "TestCairoNew.cairo", "function": "read_bool" }
写入
{"response":{"transaction_hash":"0x1162dbf1194609be6e9589c7d52cf6a47c5db87331696a5ef641e5701e7c737"},"contract":"TestCairoNew.cairo","function":"write_bool"}
{"resultOfTx":{"transaction_hash":"0x1162dbf1194609be6e9589c7d52cf6a47c5db87331696a5ef641e5701e7c737","status":"ACCEPTED_ON_L2","messages_sent":[],"events":[{"keys":["0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9"],"from_address":"0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7","data":["0x5e778638cb1b3c8d38e8c09eec362613dc961c7c62af612846b2e01e364c76a","0x6c95526293b61fa708c6cba66fd015afee89309666246952456ab970e9650aa","0x7316936f00","0x0"]}],"block_hash":"0x73bf60a1675d44b4f8173832d6a25aa0c3499dd33e9397f5a67438a18e36e3a","block_number":236,"actual_fee":"0x7316936f00","transaction_index":0,"execution_resources":{"n_memory_holes":11,"builtin_instance_counter":{"range_check_builtin":9},"n_steps":295}},"contract":"TestCairoNew.cairo","function":"write_bool"}
当写入 write_bool 参数是1 以后再次调用:
{ "response": { "result": [ "0x1" ] }, "contract": "TestCairoNew.cairo", "function": "read_bool" }