Linki podpisu
Link podpisu otwiera transakcję Hive w Hivesigner. Osoba ją przegląda, zatwierdza własnym kluczem, a Hivesigner rozgłasza ją z jej przeglądarki. Potem Hivesigner może odesłać osobę do Twojej aplikacji z identyfikatorem transakcji. Linki podpisu nie wymagają konta aplikacji ani tokenu. Obejmują wszystkie 41 operacji obsługiwanych przez Hivesigner, w tym przelewy i inne działania wymagające klucza aktywnego.
Jak działa link podpisu
- Twoja aplikacja buduje link niosący jedną albo więcej operacji.
- Osoba otwiera link. Hivesigner pokazuje każdą operację zwykłymi słowami na ekranie «Potwierdź transakcję», razem z kluczem, który jest do niej potrzebny.
- Osoba zatwierdza. Hivesigner podpisuje transakcję w przeglądarce kluczem konta wybranego w Hivesigner. Potem wysyła ją do sieci Hive.
- Gdy link wskazuje adres zwrotny, Hivesigner wysyła tam osobę z identyfikatorem transakcji.
Twoja aplikacja nigdy nie widzi klucza. Link podpisu może utworzyć każda witryna: nie ma żadnego client_id do wysłania.
Postacie linków
Hivesigner czyta dwa rodzaje linków podpisu: linki zakodowane i linki dawne.
Linki zakodowane
Link zakodowany niesie operacje jako JSON zakodowany w base64url. Używa postaci hive://sign/... z pakietu hive-uri, z https://hivesigner.com/ w miejsce hive://.
| Postać | Co zawiera B64U |
|---|---|
https://hivesigner.com/sign/op/B64U |
Jedną operację: ["vote", {...}] |
https://hivesigner.com/sign/ops/B64U |
Listę operacji: [["transfer", {...}], ["transfer", {...}]] |
https://hivesigner.com/sign/tx/B64U |
Całą transakcję, z własnym nagłówkiem |
B64U to tekst JSON zakodowany jako UTF-8, a potem w base64, gdzie + zastąpiono przez -, / przez _, a wypełnienie = przez ..
Przy op i ops Hivesigner buduje transakcję wokół operacji. Uzupełnia blok odniesienia i czas wygaśnięcia.
Przy tx Hivesigner zachowuje własne ref_block_num, ref_block_prefix i expiration transakcji. Zachowuje też podpisy, które transakcja już niesie. Dzięki temu kilka kont może po kolei podpisać jedną transakcję, dla konta, którym zarządza kilka osób. Hivesigner odrzuca transakcję, której lista extensions nie jest pusta.
Uwaga: Hivesigner ujednolica przed podpisaniem niektóre wartości, na przykład kwoty i pola pozostawione na wartościach domyślnych. Podpisana transakcja może mieć wtedy inny identyfikator niż ten, który zbudowałeś. Odczytaj identyfikator z adresu zwrotnego.
Linki dawne
Link dawny wskazuje jedną operację w ścieżce, a jej pola umieszcza w zapytaniu:
https://hivesigner.com/sign/vote?author=AUTHOR&permlink=PERMLINK&weight=10000
https://hivesigner.com/sign/transfer?to=RECIPIENT&amount=1.000%20HIVE&memo=MEMO
https://hivesigner.com/sign/transfer-to-vesting?amount=10.000%20HIVE
- Nazwę operacji zapisz w stylu snake case (
transfer_to_vesting), camel case (transferToVesting) albo kebab case (transfer-to-vesting). - Każde pole podaj jako parametr zapytania o nazwie tego pola. Każdą wartość zakoduj na potrzeby adresu.
- Listy i obiekty zapisuj jako JSON, na przykład
required_posting_auths=["alice"]. Listę identyfikatorów albo nazw można też rozdzielić przecinkami:proposal_ids=379,380. - Wartości logiczne zapisuj jako
truealbofalse.
Link dawny niesie jedną operację. Do większej liczby użyj linku zakodowanego.
Wartości pól
Te zasady dotyczą każdej postaci:
- Wartości domyślne. Pole, które pominiesz, przyjmuje swoją wartość domyślną. Konto, które działa (
voter,from,owneri podobne pola), to domyślnie konto podpisujące.weightgłosu ma domyślnie10000(100%). - Kwoty to liczba i symbol:
1.000 HIVE,0.500 HBDalbo100.000000 VESTS. Hivesigner zapisuje HIVE i HBD z 3 miejscami po przecinku, a VESTS z 6. - Hive Power. Pole przyjmujące VESTS przyjmuje też kwotę w HP, na przykład
100 HP. Hivesigner przelicza ją na VESTS po bieżącym kursie, zanim osoba będzie mogła zatwierdzić. __signerw dowolnej wartości staje się nazwą konta, które podpisuje. Na przykładcustom_jsondo obserwowania może wskazać__signerjako obserwującego wewnątrz swojegojson.- Liczby całkowite muszą być całkowite i mieścić się w zakresie przyjmowanym przez blockchain, na przykład od
-10000do10000dlaweightgłosu.
Hivesigner odrzuca cały link, gdy wartość nie pasuje do swojego pola, gdy operacja jest nieznana albo gdy link nie niesie żadnej operacji. Osoba widzi «Ups, coś poszło nie tak. Przekazane dane są nieprawidłowe.» i nic nie zostaje podpisane.
Parametry
Dodaj je do ciągu zapytania dowolnego linku podpisu:
| Parametr | Znaczenie |
|---|---|
cb |
Adres zwrotny zakodowany w base64url. To właśnie zapisuje hive-uri dla swojej opcji callback. |
redirect_uri |
Adres zwrotny jako zwykły tekst zakodowany na potrzeby adresu. Używają go linki dawne. Link zakodowany używa go wtedy, gdy nie ma cb. |
nb |
Tylko podpis. Hivesigner podpisuje transakcję bez rozgłaszania jej. Umieść {{sig}} w adresie zwrotnym, aby otrzymać podpis (zobacz Znaczniki w adresie zwrotnym). Wystarczy dowolna wartość, nawet pusta (nb=). |
s |
Konto, które ma podpisać. Gdy wybrane jest inne konto, Hivesigner prosi osobę o przełączenie się na to. Żadnym innym kontem nie podpisze. |
Używaj adresu zwrotnego https://. Adres, który nie jest adresem http ani https, Hivesigner pomija i zostaje wtedy na własnym ekranie wyniku.
Hivesigner dobiera klucz na podstawie operacji. Nie ma parametru do jego wyboru: w linkach podpisu Hivesigner pomija authority (oraz parametr a z hive-uri). Zobacz Jakiego klucza wymaga link.
Znaczniki w adresie zwrotnym
Po zatwierdzeniu przez osobę Hivesigner wypełnia w adresie zwrotnym te znaczniki:
| Znacznik | Wartość |
|---|---|
{{id}} |
Identyfikator transakcji |
{{sig}} |
Podpis, dla linku z samym podpisem (nb) |
{{block}} |
Pozostaje pusty |
{{txn}} |
Pozostaje pusty |
{{data}} |
Pozostaje pusty |
Adres zwrotny bez żadnego z tych znaczników dostaje identyfikator transakcji dopisany jako id, po ? albo &:
https://YOUR_APP/done becomes https://YOUR_APP/done?id=TRANSACTION_ID
https://YOUR_APP/done?step=2 becomes https://YOUR_APP/done?step=2&id=TRANSACTION_ID
https://YOUR_APP/tx/{{id}} becomes https://YOUR_APP/tx/TRANSACTION_ID
Hivesigner przekierowuje, gdy tylko węzeł Hive przyjmie transakcję. Może ona jeszcze nie być w bloku. Wyszukaj ją po identyfikatorze, gdy musisz wiedzieć, że została dołączona.
Twój adres zwrotny nie jest wywoływany, gdy sieć odrzuci transakcję (osoba widzi błąd) ani gdy osoba odejdzie bez zatwierdzenia.
Zbuduj link
Przy użyciu hive-uri
Pakiet hive-uri (https://www.npmjs.com/package/hive-uri) koduje operacje do linków. Użyj wersji 0.2.8 albo nowszej, która poprawnie koduje dowolny tekst Unicode.
npm install hive-uri
import { encodeOp, encodeOps } from 'hive-uri';
// One vote. __signer becomes the account that signs.
const vote = encodeOp(
['vote', { voter: '__signer', author: 'AUTHOR', permlink: 'PERMLINK', weight: 10000 }],
{ callback: 'https://YOUR_APP/voted?tx={{id}}' },
);
// Two transfers in one transaction.
const payout = encodeOps(
[
['transfer', { from: '__signer', to: 'RECIPIENT_1', amount: '1.000 HIVE', memo: 'MEMO' }],
['transfer', { from: '__signer', to: 'RECIPIENT_2', amount: '2.000 HIVE', memo: 'MEMO' }],
],
{ callback: 'https://YOUR_APP/paid' },
);
const voteLink = vote.replace('hive://', 'https://hivesigner.com/');
const payoutLink = payout.replace('hive://', 'https://hivesigner.com/');
Obiekt opcji przyjmuje callback (zapisywane jako cb), no_broadcast: true (zapisywane jako nb) i signer (zapisywane jako s). encodeTx robi to samo dla całej transakcji.
Przy użyciu SDK JavaScript
Pakiet hivesigner ma sendOperation, sendOperations i sendTransaction. Przyjmują te same argumenty co kodery z hive-uri i zwracają link https://hivesigner.com/sign/...:
import { sendOperation } from 'hivesigner';
const link = sendOperation(
['transfer', { from: '__signer', to: 'RECIPIENT', amount: '1.000 HIVE', memo: 'MEMO' }],
{ callback: 'https://YOUR_APP/paid' },
);
W TypeScript typy wymagają trzeciego argumentu: podaj undefined, aby otrzymać link. W przeglądarce funkcja podana jako trzeci argument sprawia, że otwierają link w nowej karcie zamiast go zwracać. Zobacz SDK.
Bez kodu
https://hivesigner.com/signs («Podpisz transakcję») wypisuje każdą obsługiwaną operację z formularzem na jej pola. Buduje link /sign/op/ i otwiera go.
Jakiego klucza wymaga link
Każda operacja wymaga jednego klucza: publikowania, aktywnego albo właściciela. Tabela poniżej je wypisuje. Trzy operacje zależą od swoich wartości:
custom_jsonwymaga klucza aktywnego, gdyrequired_authswskazuje konto. W innym razie wymaga klucza publikowania.account_updatewymaga klucza właściciela, gdy ustawiaowner. W innym razie wymaga klucza aktywnego.account_update2wymaga klucza właściciela, gdy ustawiaowner. Wymaga klucza aktywnego, gdy ustawiaactive,posting,memo_keyalbojson_metadata. Przy samymposting_json_metadatawymaga klucza publikowania.
Hivesigner podpisuje link jednym kluczem, więc wszystkie operacje w jednym linku muszą wymagać tego samego. Linku, który je miesza, Hivesigner nie podpisze i wyjaśni osobie dlaczego. Takie operacje wyślij w osobnych linkach.
Gdy wybrane konto nie ma tego klucza na urządzeniu, Hivesigner mówi, którego klucza brakuje, i proponuje jego dodanie. Zobacz Gdy brakuje klucza.
Co widzi osoba
- Ekran zatytułowany «Potwierdź transakcję», z jedną kartą na każdą operację: podsumowaniem zwykłymi słowami, kluczem, który jest potrzebny, i wartościami, które niesie.
- «Nastąpi przekierowanie na adres HOST.», gdy link ma adres zwrotny. Używaj adresu we własnej witrynie, aby ludzie rozpoznawali host.
- Ostrzeżenie, gdy operacja działa jako konto inne niż podpisujące.
- Zatwierdź albo Podpisz przy linku z samym podpisem. Zablokowane konto prosi najpierw o kod dostępu.
- Po rozgłoszeniu «Transakcja została rozgłoszona w sieci» wraz z identyfikatorem transakcji. Potem przekierowanie na Twój adres zwrotny.
Przejrzyj i podpisz opisuje ten ekran dla użytkowników.
Obsługiwane operacje
Hivesigner podpisuje te 41 operacji, pod ich nazwami w blockchainie. Wszystko inne zostaje odrzucone. Nazwa to ta, którą Hivesigner pokazuje na ekranie potwierdzenia.
| Operacja | Klucz | Nazwa |
|---|---|---|
transfer |
Aktywny | Przelew |
recurrent_transfer |
Aktywny | Przelew cykliczny |
delegate_vesting_shares |
Aktywny | Delegowanie Hive Power |
transfer_to_vesting |
Aktywny | Zasilenie Hive Power (power up) |
set_withdraw_vesting_route |
Aktywny | Ustawienie trasy wypłaty (power down) |
withdraw_vesting |
Aktywny | Wypłata z Hive Power (power down) |
transfer_to_savings |
Aktywny | Przelew do oszczędności |
transfer_from_savings |
Aktywny | Przelew z oszczędności |
cancel_transfer_from_savings |
Aktywny | Anulowanie przelewu z oszczędności |
convert |
Aktywny | Konwersja HBD na HIVE |
collateralized_convert |
Aktywny | Konwersja HIVE na HBD |
account_witness_vote |
Aktywny | Głos na świadka |
witness_update |
Aktywny | Aktualizacja świadka |
witness_set_properties |
Aktywny | Ustawienie parametrów świadka |
account_witness_proxy |
Aktywny | Proxy zarządzania |
claim_account |
Aktywny | Odebranie kredytu na konto |
account_create |
Aktywny | Utworzenie konta |
create_claimed_account |
Aktywny | Utworzenie konta z kredytu na konto |
vote |
Publikowanie | Głos |
limit_order_create |
Aktywny | Utworzenie zlecenia z limitem |
limit_order_create2 |
Aktywny | Utworzenie zlecenia z limitem |
limit_order_cancel |
Aktywny | Anulowanie zlecenia z limitem |
claim_reward_balance |
Publikowanie | Odebranie nagród |
comment |
Publikowanie | Wpis lub komentarz |
comment_options |
Publikowanie | Opcje wpisu lub komentarza |
custom_json |
Publikowanie, albo Aktywny, gdy ustawiono required_auths |
Niestandardowa operacja |
delete_comment |
Publikowanie | Usunięcie komentarza |
account_update |
Aktywny, albo Właściciel, gdy ustawiono owner |
Aktualizacja konta (klucz aktywny) |
account_update2 |
Publikowanie, Aktywny albo Właściciel, zależnie od pola | Aktualizacja konta (klucz publikowania) |
change_recovery_account |
Właściciel | Zmiana konta odzyskiwania |
create_proposal |
Aktywny | Utworzenie propozycji |
remove_proposal |
Aktywny | Usunięcie propozycji |
update_proposal_votes |
Aktywny | Aktualizacja głosów na propozycje |
update_proposal |
Aktywny | Aktualizacja propozycji |
escrow_transfer |
Aktywny | Przelew escrow |
escrow_approve |
Aktywny | Zatwierdzenie escrow |
escrow_dispute |
Aktywny | Spór escrow |
escrow_release |
Aktywny | Zwolnienie escrow |
account_create_with_delegation |
Aktywny | Utworzenie konta z delegacją |
request_account_recovery |
Aktywny | Wniosek o odzyskanie konta |
recover_account |
Właściciel | Odzyskanie konta |