📖
[Astar]コントラクト備忘録14(文字列の初期化時設定について)
こちらの知見がたまったので、備忘録として残します。
1 概要
- 文字列の初期化時設定について
2 内容
この記事は、こちらの続きになります。
こちらのメッセージを作成しました。
#[ink(constructor)]
pub fn new(total_supply: Balance, name: Option<String>, symbol: Option<String>, decimal: u8, myname: Option<String>) -> Self {
ink_lang::codegen::initialize_contract(|instance: &mut Self| {
instance.metadata.name = name;
instance.metadata.symbol = symbol;
instance.metadata.decimals = decimal;
instance.myname = myname;
instance
._mint_to(instance.env().caller(), total_supply)
.expect("Should mint total_supply");
})
}
#[ink(message)]
pub fn token_myname(&self) -> Option<String> {
self.myname.clone()
}
そして、構造体について、このように設定しました。
#[derive(Default, SpreadAllocate, Storage)]
pub struct Contract {
#[storage_field]
psp22: psp22::Data,
#[storage_field]
metadata: metadata::Data,
myname: Option<String>,
}
下のように、mynameを入れて、「token_myname」という関数で呼び出しています。
ちなみに、ここで、なぜ「token_myname」という関数で「clone()」が使われているのでしょう?
こちらがchatGPTからの内容です。
もしclone()がないと、self.mynameの所有権が移ってしまいます。
そうならないために、clone()で新しいオブジェクトを作り、所有権が移らないようにしています。
chatGPT
では、下のように、「Taro」と入れてみます。
下のように、きちんと取り出せたようです!
Shibuya
YKLL92jXVKJvRDFPGQ1D9UxaMk2BPZH4fikbNr5okutX2N5
今回は以上です。
Discussion