如何将字符串值保存在Substrate的智能合约平台上,墨水?

问题描述

  1. 我最初尝试按照此问题中的说明实施。 (How can I save string value on Substrate
  2. 但是,与“ ink_abi”和结构有关的错误发生了 无法定义。
  3. 查看最新的“墨水!示例”(),我试图复制它,因为 该结构已定义,但以下命令不起作用。 (https://github.com/paritytech/ink/blob/master/examples/runtime-storage/lib.rs
cargo +nightly generate-metadata
  1. 如何使用“基板”将字符串数据保存到区块链 墨水!”?
  2. 我希望看到示例来源(如果有)。

解决方法

用墨水!您可以直接使用String类型。

这是墨水的简单实现!进行测试的合同(从incrementer example修改:

#![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!");
        }
    }
}
,

使用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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...