👻
[Astar]コントラクト備忘録13(psp22 Metadataの作成について)
こちらの知見がたまったので、備忘録として残します。
1 概要
- psp22 Metadataの作成
2 内容
こちらのコントラクトを実行しました。
OpenBrushのexampleのコードそのままです。
#![cfg_attr(not(feature = "std"), no_std)]
#![feature(min_specialization)]
#[openbrush::contract]
pub mod my_psp22 {
use ink_storage::traits::SpreadAllocate;
use openbrush::{
contracts::psp22::extensions::metadata::*,
traits::{
Storage,
String,
},
};
#[ink(storage)]
#[derive(Default, SpreadAllocate, Storage)]
pub struct Contract {
#[storage_field]
psp22: psp22::Data,
#[storage_field]
metadata: metadata::Data,
}
impl PSP22 for Contract {}
impl PSP22Metadata for Contract {}
impl Contract {
#[ink(constructor)]
pub fn new(total_supply: Balance, name: Option<String>, symbol: Option<String>, decimal: u8) -> Self {
ink_lang::codegen::initialize_contract(|instance: &mut Self| {
instance.metadata.name = name;
instance.metadata.symbol = symbol;
instance.metadata.decimals = decimal;
instance
._mint_to(instance.env().caller(), total_supply)
.expect("Should mint total_supply");
})
}
}
}
1) use キーワードについて
まずは、ここから、OpenBrushの拡張機能である「metadata」を使用していることがわかります。
2) #[storage_field]について
次に、#[storage_field]にこのように「metadata::Data」を設定しています。
そこで、コードを見てみると、このようなデータ構造があることがわかりました。
https://github.dev/Supercolony-net/openbrush-contracts
3) 実装部分について
この部分では、PSP22Metadataをそのまま実装していることがわかります。
4) 「new」関数について
そして、下の部分で、引数のデータをメタデータに入れています。
5) 実際にやってみよう
では、実際にやってみましょう。
「name」に「test」、「symbpol」に「TST」と入れました。
では、「tokenName」関数から今入れた、nameを確認してみましょう。
すると、イメージと違うかと思います。
そこで、このように16進数にでコードしてみましょう。
改めて、nameを確認してみましょう。
このように、プレフィックスとして、文字数を表すものがあり、その後に文字を16進数にデコードしたものがあることがわかりました。
(プレフィックスは実際に色々試してみて、わかりました。)
Shibuya
adFFpvU4tgCLFZsnbAu9g4e9vxcN6dhRRBBHNYvqfHPWdXM
今回は、以上です。
Discussion