簡體   English   中英

如何在 Substrate 的智能合約平台 ink 上保存一個字符串值?

[英]How do I save a string value on Substrate's smart contract platform, ink?

  1. 我最初嘗試了這個問題中所教的實現。 如何在 Substrate 上保存字符串值
  2. 但是,“ink_abi”發生錯誤,無法定義結構。
  3. 查看最新的“ink, example”(),我嘗試復制它,因為定義了struct。 但以下命令不起作用。 ( https://github.com/paritytech/ink/blob/master/examples/runtime-storage/lib.rs )
cargo +nightly generate-metadata
  1. 如何使用“基材墨水”將字符串數據保存到區塊鏈?
  2. 如果有的話,我想看一個示例源。

使用ink_prelude::string::String

#![cfg_attr(not(feature = "std"), no_std)]
use ink_lang as ink;

#[ink::contract]
mod foo {
    use ink_prelude::string::String;

    // ...
}

並且不要忘記將ink_prelude添加到.toml中的[dependencies]部分

參見: https://paritytech.github.io/ink/ink_prelude/string/struct.String.html

用墨水! 你可以直接使用String類型。

這是墨水的簡單實現! 合同通過測試執行此操作(從incrementer示例修改:

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

use ink_lang as ink;

#[ink::contract(version = "0.1.0")]
mod basic_string {
    #[ink(storage)]
    struct BasicString {
        value: String,
    }

    impl BasicString {
        #[ink(constructor)]
        fn new(init_value: String) -> Self {
            Self { value: init_value }
        }

        #[ink(constructor)]
        fn default() -> Self {
            Self::new(Default::default())
        }

        #[ink(message)]
        fn set(&mut self, new: String) {
            self.value = new;
        }

        #[ink(message)]
        fn get(&self) -> String {
            self.value.clone()
        }
    }

    #[cfg(test)]
    mod tests {
        use super::*;

        #[test]
        fn default_works() {
            let contract = BasicString::default();
            assert_eq!(contract.get(), "");
        }

        #[test]
        fn it_works() {
            let mut contract = BasicString::new("Hello World!".into());
            assert_eq!(contract.get(), "Hello World!");
            contract.set("Goodbye!".into());
            assert_eq!(contract.get(), "Goodbye!");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM