На чернилах субстрата !, почему значение "строки", полученное с помощью "вызова RPC", всегда одинаково?

  1. Реализована программа "Простые чернила!", Сохраняющая значение "символьной строки".
  2. Я загрузил и развернул в локальной сети субстрата.
  3. Я вызываю функцию "set_test_data" и получаю данные, вызывая функцию "get_test_data".
  4. Я использую "Polkadot/Substrate Portal"
  5. Даже если я устанавливаю разные данные, данные, которые можно получить, всегда одни и те же.
  6. Почему?

Это та самая ценность.

{"vec":{"elems":"0x3c5b6f626a656374204f626a6563745d"}}

Это мой код

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

use ink_lang as ink;

#[ink::contract(version = "0.1.0")]
mod test_contract {
    use ink_core::storage;
    use ink_prelude::string::String;

    /// Defines the storage of your contract.
    /// Add new fields to the below struct in order
    /// to add new static storage fields to your contract.
    #[ink(storage)]
    struct TestContract{
        test_data: storage::Value<String>,
    }

    impl TestContract{
        /// constructor of TestContract
        #[ink(constructor)]
        fn new(&mut self) {

        }

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

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

== в 2020/8/20 добавить

  • Я реализовал этот код, и я выполнил.
  • В этом случае я получил правильное значение.
  • Значение равно "{"vec":{"elems":"0x0c414243"}}".
        #[ink(message)]
        fn set_test_data(&mut self, value: String) {
            //self.test_data.set(value);
            self.test_data.set(String::from("ABC"));
        }

        #[ink(message)]
        fn get_test_data(&self) -> String {
            self.test_data.clone()
        }
  • Затем я реализовал этот код и выполнил его.
  • В этом случае я ошибся значением.
  • Я предполагаю, что Polkadot / Substrate Portal не может отправить правильное значение.
  • Значение равно "{"vec":{"elems":"0x084e4f"}}".
        #[ink(message)]
        fn set_test_data(&mut self, value: String) {
            //self.test_data.set(value);
            if value == String::from("ABC") {
                self.test_data.set(String::from("ABC"));
            } else {
                self.test_data.set(String::from("NO"));
            }
        }

        #[ink(message)]
        fn get_test_data(&self) -> String {
            self.test_data.clone()
        }
  • Не могли бы вы сказать мне свое мнение?

1 ответ

Когда вы конвертируете это шестнадцатеричное значение в строку, вы получаете:

?<[object Object]

Это означает, что существует некоторая основная проблема с JavaScript. Можете ли вы описать, как вы запрашиваете данные? Я предполагаю, что здесь есть ошибка.

Другие вопросы по тегам