存储自定义类型
虽然本机类型可以存储在合约的存储中,而无需任何额外的工作,但自定义类型需要更多的工作。这是因为在编译时,编译器不知道如何在存储中存储自定义类型。为了解决这个问题,我们需要为我们的自定义类型实现 Store
特征。希望我们可以为我们的自定义类型派生这个特征 - 除非它包含数组或字典。
#[starknet::interface]
trait IStoringCustomType<TContractState> {
fn set_person(ref self: TContractState, person: Person);
}
// Deriving the starknet::Store trait
// allows us to store the `Person` struct in the contract's storage.
#[derive(Drop, Serde, Copy, starknet::Store)]
struct Person {
age: u8,
name: felt252
}
#[starknet::contract]
mod StoringCustomType {
use super::Person;
#[storage]
struct Storage {
person: Person
}
#[abi(embed_v0)]
impl StoringCustomType of super::IStoringCustomType<ContractState> {
fn set_person(ref self: ContractState, person: Person) {
self.person.write(person);
}
}
}
在 Remix 中尝试这个合约。