如何解决如何将字符串值保存在Substrate的智能合约平台上,墨水?
- 我最初尝试按照此问题中的说明实施。 (How can I save string value on Substrate)
- 但是,与“ ink_abi”和结构有关的错误发生了 无法定义。
- 查看最新的“墨水!示例”(),我试图复制它,因为 该结构已定义,但以下命令不起作用。 (https://github.com/paritytech/ink/blob/master/examples/runtime-storage/lib.rs)
cargo +nightly generate-metadata
- 如何使用“基板”将字符串数据保存到区块链 墨水!”?
- 我希望看到示例来源(如果有)。
解决方法
用墨水!您可以直接使用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。