🌟

[Astar]コントラクト備忘録17(psp34 Burnableについて)

2023/02/28に公開

こちらの知見がたまったので、備忘録として残します。

1 概要

  1. psp34 Burnableについて

2 内容

こちらのコントラクトを作成しました。

OpenBrushのexampleの中身そのままです。

#![cfg_attr(not(feature = "std"), no_std)]
#![feature(min_specialization)]

#[openbrush::contract]
pub mod my_psp34 {
    use ink_storage::traits::SpreadAllocate;
    use openbrush::{
        contracts::psp34::extensions::burnable::*,
        traits::Storage,
    };

    #[derive(Default, SpreadAllocate, Storage)]
    #[ink(storage)]
    pub struct Contract {
        #[storage_field]
        psp34: psp34::Data,
    }

    impl PSP34 for Contract {}

    impl PSP34Burnable for Contract {}

    impl Contract {
        /// The constructor
        #[ink(constructor)]
        pub fn new() -> Self {
            ink_lang::codegen::initialize_contract(|instance: &mut Self| {
                instance
                    ._mint_to(Self::env().caller(), Id::U8(0u8))
                    .expect("Should mint token with id 0");
                instance
                    ._mint_to(Self::env().caller(), Id::U8(1u8))
                    .expect("Should mint token with id 1");
                instance
                    ._mint_to(Self::env().caller(), Id::U8(2u8))
                    .expect("Should mint token with id 2");
            })
        }
    }
}

Burnと直接関係するわけではないですが、こちらの「new」を見てみましょう。

3つのトークンをミントしています。

「0u8」と書くことで、「u8」型の0になるというのは押さえておくのが良いと思いました。

「Burnable」を実装することで、こちらのburnが使えるようになります。

https://github.dev/Supercolony-net/openbrush-contracts

では、実際にやってみましょう。

最初は3つミントされるので、「balanceOf」は「3」です。

「burn」をしてみます。

もう一度、「balanceOf」を見てみると、「2」になっていることが確認できました。

shibuya

YDjXdL3AQZPHaUeLrgHUKm2ZXugM3SGWzg9xJRrQxZpecC8

今回は以上です。

Discussion