Skip to content

Expansion proposal: support for more steem operations beyond just "vote" #52

@Jblew

Description

@Jblew

This is mostly internal draft, so sorry for Writing a non-english issue

Scenariusz: Wise umożliwia ustawianie reguł dla innych operacji niż vote

1. Zmiany w bibliotece steem-wise-core

  1. Zmiany nazw:

    1. VoteOrder" -> ActionOrder
    2. ConfirmVote" -> ConfirmAction
    3. ConfirmVoteBoundWithVote -> ActionWithConfirmation
  2. Zmiany w protokole generycznym:

    1. ConfirmVote zmieni nazwę na ConfirmAction, będzie miało identyczną strukturę.

    2. ConfirmVoteBoundWithVote zmieni nazwę na WiseActionWithConfirmation i będzie miało strukturę (zmiana nazwy pola):

      interface WiseActionWithConfirmation extends ConfirmAction {
          operation: SteemOperation
      }
    3. SendVoteorder zmieni nazwę na WiseAction i będzie miało następującą strukturę:

      interface WiseActionOrder {
          rulesetName: string;
          operation: steem.OperationWithDescriptor;
      }
    4. Ruleset uzyska następującą strukturę:

      interface Ruleset {
          name: string;
          operation_types: SteemOperationTypesAllowedByWise [];
          rules: Rule [];
      }
  3. Dodanie protokołu v3:

    1. Stworzenie protokołu v3 (dla zachowania wstecznej kompatybilności kod protokołu v1 i v2 zostaną zachowane)

    2. Zamiast send_voteorder będzie wysyłane action_order, które będzie miało następującą strukturę:

      interface wise_action_order {
          delegator: string;
          ruleset: string;
          operation: VoteOperationWithDescriptor | CustomJsonOperationWithDescriptor | CreateAccountOperationWithDescriptor | ...AnySteemOperationWithDescriptor;
      }
    3. set_rules będzie miało następującą strukturę:

      interface wise_set_rules {
          voter: string;
          description?: string;
          rulesets: wise_ruleset[];
      }
      
      interface wise_ruleset {
          name: string;
      		operation_types: wise_allowed_operation_type [];
          rules: wise_rule [];
      }
      
      type wise_allowed_operation_type = "vote" | "custom_json" | "create_account" | ... /* other_but_the_list_should_not_be_too_permissive */;
    4. Testy nowego protokołu

  4. Zmiany w protokole v2 i v1:

    1. tłumaczenie operacji na nowy generyczny protokół.
    2. testy sprawdzające na przykładach poprawność tłumaczenia
  5. Zmiany w Validatorze:

    1. Kod sprawdzający, czy operacja należy do listy operation_types w regule.
  6. Zmiany w regułach

    1. Każda istniejąca regułą będzie miała dodatkowy validator rulesetu, który będzie sprawdzał, czy ta reguła potrafi przetwarzać wszystkie typy operacji zezwolone w tym rulesecie.
    2. Każda istniejąca reguła będzie musiała obsługiwać steem.VoteOperation zamiast SendVoteorder (bardzo podobna struktura)
    3. Dodanie nowych reguł dla każdego nowego typu operacji
  7. Zmiany w synchronizatorze: tylko zmiany nazw

  8. Zmiany w RulesUpdater: dostosowanie do nowego generycznego protokołu (głównie zmiany nazw + zmiana struktury Rulesetu z tablicy na obiekt)

  9. Wydzielenie kodu odpowiedzialnego za synchronizację blockchainu do biblioteki steem-efficient-stream

Pełna wsteczna kompatybilność. Z perspektywy użytkownika działa tak samo.

2. Zmiany w bibliotece steem-wise-cli

  1. Nowa subkomenda "migrate-protocol-to-v3", która migruje stare pliki z regułami. Po prostu do każdego zestawu reguł dodaje: operation_types: ["vote"]
  2. Subkomenda "upload-rules"
    1. Obsługuje stary format migrując go w locie, ale sugeruje użytkownikowi wykonanie komendy "migrate-protocol-to-v3"
  3. Subkomenda "send-voteorder" pozostaje i działa tak jak poprzednio: zamiast obiektu SendVoteorder generuje WiseActionOrder z operacją "vote" + dodatkowo wyświetla informację o nowej komendzie "send-actionorder"
  4. Nowa komenda send-actionorder, która jest identyczna jak send-voteorder, tylko przyjmuje jako parametr obiekt typu "WiseActionOrder"

Pełna wsteczna kompatybilność. Z perspektywy użytkownika działa tak samo.

3. Zmiany w steem-wise-sql

Nie jest potrzebna wsteczna kompatybilność, bo narazie tylko wise-hub korzysta z sql-a

  1. Wykorzystanie UniversalSynchronizer z biblioteki steem-wise-core zamiast własnego synchronizatora (który duplikuje kod)
  2. Pusher automatycznie wygeneruje operacje o nowym typie
  3. Ponowna synchronizacja blockchainu jeśli to jest szybsze niż migracja, a przeciwnym przypadku prosta migracja
  4. Przechowywanie operacji wise w formacie "raw" w celu umożliwienia przyszłych migracji

4. Zmiany w wise-hub

Wise hub tylko będzie wyświetlał nowe rodzaje operacji, ale nie będzie ich narazie przetwarzał

  1. Frontend
    1. HistoryEntryComponent będzie wyświetlać więcej rodzajów operacji
    2. PersonComponent będzie wyświetlać nazwy nowych operacji
    3. Ustawianie reguł nadal tylko dla vote
    4. RulesetsView będzie wyświetlał zestawy reguł z operacjami innymi niż vote jako zwinięty custom_json
  2. Backend/publisher
    1. Publisher będzie odrzucał ActionOrder, który ma inny rodzaj operacji niż "vote"
  3. Backend/api
    1. DaemonManager i Daemon — trzeba zmienić nazwy funkcji/obiektów ze steem-wise-core
    2. Daemon — będzie odrzucać ActionOrdery dla innych operacji niż vote

5. Zmiany w steem-wise-voter-page

Tylko zaaktualizowanie kodu do innych nazw funkcji/obiektów w bibliotece steem-wise-core.

5. Aktualizacja manuala

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions