Правильное определение типа JSON для импорта со структурой модуля времени выполнения с другими структурами и перечислениями - PullRequest
2 голосов
/ 03 июля 2019

В моем модуле времени выполнения определен следующий тип данных

#[derive(Encode, Decode, Clone, PartialEq, Debug)]
pub enum AuctionStatus {
  Ongoing,
  Cancelled,
  ToBeClaimed,
  Closed
}

// This is necessary so that other structs depend on this enum can be encode/decode with default value.
impl Default for AuctionStatus {
  fn default() -> Self { AuctionStatus::Ongoing }
}

#[derive(Encode, Decode, Default, Clone, PartialEq, Debug)]
pub struct Auction<Hash, Balance, Moment, AuctionTx> {
  id: Hash,
  kitty_id: Hash,
  base_price: Balance,
  start_time: Moment,
  end_time: Moment,
  status: AuctionStatus,
  tx: Option<AuctionTx>,
}

#[derive(Encode, Decode, Default, Clone, PartialEq, Debug)]
pub struct AuctionTx<Hash, AccountId, Balance, Moment> {
  auction_id: Hash,
  tx_time: Moment,
  buyer: AccountId,
  tx_price: Balance,
}

Теперь в пользовательском интерфейсе polkadot, какое должно быть правильное определение типа JSON для импорта?

Я попробовал следующее, но polkadotUI все еще говорит неизвестный тип.

{
  "AuctionStatus": "u32",
  "AuctionTx": {
    "auction_id": "Hash",
    "tx_time": "Moment",
    "buyer": "AccountId",
    "tx_price": "Balance"
  },
  "Auction": {
    "id": "Hash",
    "kitty_id": "Hash",
    "base_price": "Balance",
    "start_time": "Moment",
    "end_time": "Moment",
    "status": "AuctionStatus",
    "tx": "Option<AuctionTx>"
  }
}

Update-01

Ниже приведены сообщения об ошибках консоли браузера:

1-е сообщение:

Unable to decode storage catAuction.auctions: createType(Auction):: Encoding for input doesn't match output, created 0xa9531feb7f4eb8a888e1eedf72e812e26e32a53a2e379ef79bb2e8f7d883f2462e1cd9ea24d53ce565292a9e56458943554c7c13b6aef70c00079076650bdd8f983a0000000000000000000000000000f6491c5d0000000060ce1e5d00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 from 0xa9531feb7f4eb8a888e1eedf72e812e26e32a53a2e379ef79bb2e8f7d883f2462e1cd9ea24d53ce565292a9e56458943554c7c13b6aef70c00079076650bdd8f983a0000000000000000000000000000f6491c5d0000000060ce1e5d000000000000

2-е сообщение:

2019-07-03 14:24:40        RPC-CORE: subscribeStorage (keys: Vec<StorageKey>): StorageChangeSet:: createType(Auction):: Encoding for input doesn't match output, created 0xa9531feb7f4eb8a888e1eedf72e812e26e32a53a2e379ef79bb2e8f7d883f2462e1cd9ea24d53ce565292a9e56458943554c7c13b6aef70c00079076650bdd8f983a0000000000000000000000000000f6491c5d0000000060ce1e5d00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 from 0xa9531feb7f4eb8a888e1eedf72e812e26e32a53a2e379ef79bb2e8f7d883f2462e1cd9ea24d53ce565292a9e56458943554c7c13b6aef70c00079076650bdd8f983a0000000000000000000000000000f6491c5d0000000060ce1e5d000000000000

не уверен, если это поможет ...

1 Ответ

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

Я думаю, что проблема в том, что вы определили ваше перечисление как u32, и оно неправильно обрабатывает закодированные данные.

Из текста справки пользовательского интерфейса Polkadot:

Имейте в виду, что типы зарегистрированы в порядке их появления здесь.Поскольку для вышеуказанной транзакции требуются и TransactionInput, и TransactionOutput, она определяется после того, как определения для них доступны.(Циркуляры не поддерживаются здесь).Для более сложного примера, использующего оба типа и перечисления, будет использовано следующее:

{
  "SimpleEnum": {
    "_enum": ["One", "Two", "Three"]
  },
  "TypeEnum": {
    "_enum": {
      "One": "u32",
      "Two": "u64",
      "Three": null
    }
  }.
  "MyNumber": "u32",
  "Thing": {
    "count_enum": "SimpleEnum",
    "type_enum": "TypeEnum",
    "counter": "MyNumber",
    "ids": "Vec<AccountId>"
  },
  "ArrayThing": "Vec<Thing>"
}

Так что попробуйте правильно определить ваше перечисление и посмотреть, решит ли это вашу проблему.Дайте мне знать, если это поможет.

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