Возможность частных переменных в хранилище субстрата - PullRequest
1 голос
/ 03 июля 2019

Можно ли хранить частные переменные в хранилище субстрата, особенно в следующих формах, и получать к ним доступ в частных функциях?

#[derive(Encode, Decode, Default, Clone, PartialEq, Debug)]
pub struct MyStruct {
  id: Hash, // the `id` is public 
  // 1. Can this be a private variable not returned by API / to client?
  private_var: u64, 
}

decl_storage! {
  trait Store for Module<T: Trait> as MyModule {
    // 2. Can this be private storage used only within module function implementation, but cannot be called by API/client?
    PrivateStorage: u64 = 0; 
    PublicStruct: MyStruct;
  }
}

decl_module! { }

impl<T: Trait> Module<T> {
  fn _private_function() -> Result {
    //can access both private variable/storage
    let var1 = <PrivateStorage<T>>::get();
    let var2 = <MyStruct<T>>::get();
    if var2.private_var == 0 {
      // some more code
    }
    Ok(())
  }
}

1 Ответ

2 голосов
/ 03 июля 2019

Из-за распределенной природы систем блокчейнов все хранилища по своей природе являются открытыми для всего мира.Поскольку любой может синхронизировать блокчейн, он в конечном итоге сможет генерировать текущее состояние блокчейна, включая любые переменные в хранилище.Чтобы прийти к общему мнению о состоянии этих элементов хранилища, они должны быть видимы и известны всем сторонам.

Одно решение, которое вы можете использовать, чтобы хранить «секретные данные» в общедоступной блокчейне.заключается в том, чтобы зашифровать данные, прежде чем они поступят в цепочку, и не включать ключ шифрования в цепочку.

Если позже вы захотите, чтобы другие пользователи знали секретные данные, пользователь может «раскрыть» ключ шифрования, обнажив данныеизначально был зашифрован.

Этот шаблон фиксации / раскрытия используется в некоторых простых играх блокчейнов, таких как камень, бумага, ножницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...