title | tags | |||
---|---|---|---|---|
15. 构造函数 |
|
我最近在学cairo-lang
,巩固一下细节,也写一个WTF Cairo极简教程
,供小白们使用。教程基于cairo 2.2.0
版本。
WTF Academy 社群:Discord|微信群|官网 wtf.academy
所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo
在本章中,我们将探索 Cairo 中的 constructor
构造函数,用于初始化合约的状态变量。
和 Solidity 类似,Cairo 中的 constructor
是一个特殊的函数,它会在合约部署期间自动运行一次。它通常用于初始化合约的参数,例如设置 owner
地址:
#[starknet::contract]
mod owner{
// import contract address related libraries
use starknet::ContractAddress;
use starknet::get_caller_address;
// storage variable
#[storage]
struct Storage{
owner: ContractAddress,
balance: felt252,
}
// set owner address during deploy
#[constructor]
fn constructor(ref self: ContractState, balance_: felt252) {
self.owner.write(get_caller_address());
self.balance.write(balance_);
}
#[external(v0)]
fn balance_read(self: @ContractState) -> felt252 {
self.balance.read()
}
}
在上述合约中,我们在 Storage
结构体中定义了存储变量 owner
和balance
。然后在 constructor
函数中将这个 owner
初始化为调用者的地址,并在部署时传入一个felt252
类型的值设置为balance
余额。
- 构造函数必须名为
constructor
。 constructor
函数必须带有#[constructor]
属性。- 每个合约最多可以有一个
constructor
。
在这一章节中,我们介绍了 Cairo 中的 constructor
函数。这个特殊的函数将在合约部署期间自动运行一次,为合约的状态变量设定初始状态。