title: 15. 构造函数 tags: cairo starknet constructor WTF Cairo极简教程: 15. 构造函数 我最近在学 ,巩固一下细节,也写一个 ,供小白们使用。教程基于 版本。 推特:@0xAAScience|@WTFAcademy WTF Academy 社群:Discord|微信群|官网 wtf.academy 所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo 在本章中,我们将探索 Cairo 中的 构造函数,用于初始化合约的状态变量。 构造函数 和 Solidity 类似,Cairo 中的 是一个特殊的函数,它会在合约部署期间自动运行一次。
title: 15. 构造函数 tags: - cairo - starknet - constructor
我最近在学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 函数。这个特殊的函数将在合约部署期间自动运行一次,为合约的状态变量设定初始状态。