Връзки за подпис

Връзката за подпис отваря транзакция в Hive в Hivesigner. Потребителят я преглежда, одобрява я със собствения си ключ и Hivesigner я излъчва от неговия браузър. След това Hivesigner може да върне потребителя във вашето приложение с идентификатора на транзакцията. Връзките за подпис не изискват акаунт за приложение и токен. Те покриват всички 41 операции, които Hivesigner поддържа, включително преводи и други действия, изискващи active ключ.

Как работи връзката за подпис

  1. Вашето приложение съставя връзка, която носи една или повече операции.
  2. Потребителят отваря връзката. Hivesigner показва всяка операция с ясни думи на екрана "Потвърждаване на транзакция", заедно с ключа, който ѝ е нужен.
  3. Потребителят одобрява. Hivesigner подписва транзакцията в браузъра с ключа на акаунта, избран в Hivesigner. След това изпраща транзакцията към мрежата Hive.
  4. Когато връзката назовава адрес за обратно извикване, Hivesigner изпраща потребителя там с идентификатора на транзакцията.

Вашето приложение никога не вижда ключ. Всеки сайт може да създаде връзка за подпис: няма client_id, който да се изпраща.

Hivesigner чете два вида връзки за подпис: кодирани връзки и стари връзки.

Кодираната връзка носи операциите като JSON, кодиран в base64url. Използва формата hive://sign/... на пакета hive-uri, като hive:// е заменено с https://hivesigner.com/.

Вид Какво съдържа B64U
https://hivesigner.com/sign/op/B64U Една операция: ["vote", {...}]
https://hivesigner.com/sign/ops/B64U Списък операции: [["transfer", {...}], ["transfer", {...}]]
https://hivesigner.com/sign/tx/B64U Цяла транзакция, със собствена заглавна част

B64U е JSON текстът, кодиран като UTF-8 и след това като base64, с + заменено с -, / с _ и допълването = с ..

За op и ops Hivesigner изгражда транзакцията около операциите. Той попълва референтния блок и срока на валидност.

За tx Hivesigner запазва собствените ref_block_num, ref_block_prefix и expiration на транзакцията. Запазва и подписите, които транзакцията вече носи. Това позволява няколко акаунта да подпишат една транзакция един след друг, за акаунт, контролиран от няколко души. Hivesigner отказва транзакция, чийто списък extensions не е празен.

Бележка: Hivesigner привежда някои стойности към единен вид, преди да подпише, например сумите и полетата, оставени по подразбиране. Подписаната транзакция може тогава да има различен идентификатор от този, който сте съставили. Четете идентификатора от адреса за обратно извикване.

Старата връзка назовава една операция в пътя и поставя полетата ѝ в query:

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
  • Пишете името на операцията в snake case (transfer_to_vesting), camel case (transferToVesting) или kebab case (transfer-to-vesting).
  • Подавайте всяко поле като query параметър с името на полето. Кодирайте всяка стойност за URL.
  • Пишете списъците и обектите като JSON, например required_posting_auths=["alice"]. Списък с идентификатори или имена може да се раздели и със запетаи: proposal_ids=379,380.
  • Пишете булевите стойности като true или false.

Старата връзка носи една операция. За повече от една използвайте кодирана връзка.

Стойности на полетата

Тези правила важат за всеки вид:

  • Стойности по подразбиране. Поле, което пропуснете, приема стойността си по подразбиране. Акаунтът, който действа (voter, from, owner и подобни полета), по подразбиране е акаунтът, който подписва. weight на гласа по подразбиране е 10000 (100%).
  • Сумите са число и символ: 1.000 HIVE, 0.500 HBD или 100.000000 VESTS. Hivesigner пише HIVE и HBD с 3 знака след десетичната запетая, а VESTS с 6.
  • Hive Power. Поле, което приема VESTS, приема и сума в HP, например 100 HP. Hivesigner я превръща във VESTS по текущия курс, преди потребителят да може да одобри.
  • __signer в която и да е стойност става името на акаунта, който подписва. Например custom_json за следване може да назове __signer като следващия вътре в своя json.
  • Целите числа трябва да са цели числа в диапазона, който блокчейнът приема, например от -10000 до 10000 за weight на глас.

Hivesigner отказва цялата връзка, когато стойност не отговаря на полето си, когато операцията е непозната или когато връзката не носи операция. Потребителят вижда "Опа, нещо се обърка. Предоставените данни са невалидни." и нищо не се подписва.

Параметри

Добавете тези към query низа на всяка връзка за подпис:

Параметър Значение
cb Адресът за обратно извикване, кодиран в base64url. Това пише hive-uri за своята опция callback.
redirect_uri Адресът за обратно извикване като обикновен текст, кодиран за URL. Старите връзки използват него. Кодираната връзка го използва, когато няма cb.
nb Само подпис. Hivesigner подписва транзакцията, без да я излъчва. Поставете {{sig}} в адреса за обратно извикване, за да получите подписа (вижте Заместители в адреса). Всяка стойност върши работа, дори празна (nb=).
s Акаунтът, който трябва да подпише. Когато е избран друг акаунт, Hivesigner моли потребителя да превключи към този. Не подписва с никой друг акаунт.

Използвайте адрес за обратно извикване с https://. Hivesigner пренебрегва адрес, който не е http или https URL, и тогава остава на собствения си екран с резултата.

Hivesigner избира ключа от операциите. Няма параметър за избора му: Hivesigner пренебрегва authority (и параметъра a на hive-uri) във връзките за подпис. Вижте Кой ключ изисква връзката.

Заместители в адреса

След като потребителят одобри, Hivesigner попълва тези заместители в адреса за обратно извикване:

Заместител Стойност
{{id}} Идентификаторът на транзакцията
{{sig}} Подписът, за връзка само за подпис (nb)
{{block}} Оставя се празен
{{txn}} Оставя се празен
{{data}} Оставя се празен

Адрес без нито един от тези заместители получава идентификатора на транзакцията, добавен като id, след ? или &:

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 пренасочва веднага щом възел на Hive приеме транзакцията. Тя може още да не е в блок. Потърсете я по идентификатора ѝ, когато трябва да знаете, че е включена.

Вашият адрес не се извиква, когато мрежата отхвърли транзакцията (потребителят вижда грешката) или когато потребителят си тръгне без да одобри.

С hive-uri

Пакетът hive-uri (https://www.npmjs.com/package/hive-uri) кодира операции във връзки. Използвайте версия 0.2.8 или по-нова, която кодира правилно всякакъв 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/');

Обектът с опции приема callback (пише се като cb), no_broadcast: true (пише се като nb) и signer (пише се като s). encodeTx прави същото за цяла транзакция.

С JavaScript SDK

Пакетът hivesigner има sendOperation, sendOperations и sendTransaction. Те приемат същите аргументи като кодиращите функции на hive-uri и връщат връзката 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' },
);

В TypeScript типовете изискват третия аргумент: подайте undefined, за да получите връзката. В браузър функция, подадена като трети аргумент, ги кара да отворят връзката в нов раздел вместо да я върнат. Вижте SDK.

Без код

https://hivesigner.com/signs ("Подписване на транзакция") изброява всяка поддържана операция с формуляр за нейните полета. Съставя връзка /sign/op/ и я отваря.

Кой ключ изисква връзката

Всяка операция изисква един ключ: posting, active или owner. Таблицата по-долу ги изброява. Три операции зависят от стойностите си:

  • custom_json изисква active ключ, когато required_auths назовава акаунт. Иначе изисква posting ключ.
  • account_update изисква owner ключ, когато задава owner. Иначе изисква active ключ.
  • account_update2 изисква owner ключ, когато задава owner. Изисква active ключ, когато задава active, posting, memo_key или json_metadata. Само с posting_json_metadata изисква posting ключ.

Hivesigner подписва връзка с един ключ, затова всички операции в една връзка трябва да изискват един и същ. Hivesigner отказва да подпише връзка, която ги смесва, и казва на потребителя защо. Изпращайте такива операции в отделни връзки.

Когато избраният акаунт няма ключа на устройството, Hivesigner казва кой ключ липсва и предлага да го добави. Вижте Когато ключът липсва.

Какво вижда потребителят

  • Екран, озаглавен "Потвърждаване на транзакция", с по една карта за всяка операция: обобщение с ясни думи, ключа, който ѝ е нужен, и стойностите, които носи.
  • "Ще бъдете пренасочени към HOST." когато връзката има адрес за обратно извикване. Използвайте адрес на собствения си сайт, за да разпознават потребителите хоста.
  • Предупреждение, когато операция действа като акаунт, различен от подписващия.
  • Одобри или Подпиши за връзка само за подпис. Заключеният акаунт първо иска своя код за достъп.
  • След излъчване "Транзакцията е излъчена успешно" с идентификатора на транзакцията. След това пренасочването към вашия адрес.

Преглед и подписване описва екрана за потребителите.

Поддържани операции

Hivesigner подписва тези 41 операции, с имената им в блокчейна. Всичко друго се отказва. Името е това, което Hivesigner показва на екрана за потвърждение.

Операция Ключ Име
transfer Active Превод
recurrent_transfer Active Повтарящ се превод
delegate_vesting_shares Active Делегиране на Hive Power
transfer_to_vesting Active Power Up
set_withdraw_vesting_route Active Задаване на маршрут за Power Down
withdraw_vesting Active Power Down
transfer_to_savings Active Превод към спестявания
transfer_from_savings Active Превод от спестявания
cancel_transfer_from_savings Active Отмяна на превод от спестявания
convert Active Конвертиране на HBD в HIVE
collateralized_convert Active Конвертиране на HIVE в HBD
account_witness_vote Active Глас за свидетел
witness_update Active Актуализация на свидетел
witness_set_properties Active Задаване на свойства на свидетел
account_witness_proxy Active Прокси за управление
claim_account Active Заявяване на кредит за акаунт
account_create Active Създаване на акаунт
create_claimed_account Active Създаване на акаунт с кредит за акаунт
vote Posting Гласуване
limit_order_create Active Създаване на лимитна поръчка
limit_order_create2 Active Създаване на лимитна поръчка
limit_order_cancel Active Отмяна на лимитна поръчка
claim_reward_balance Posting Получаване на награди
comment Posting Публикация или коментар
comment_options Posting Настройки на публикация или коментар
custom_json Posting или Active, когато required_auths е зададено Потребителска операция
delete_comment Posting Изтриване на коментар
account_update Active или Owner, когато owner е зададено Промяна на акаунт (active)
account_update2 Posting, Active или Owner, според полето Промяна на акаунт (posting)
change_recovery_account Owner Смяна на агента за възстановяване
create_proposal Active Създаване на предложение
remove_proposal Active Премахване на предложение
update_proposal_votes Active Промяна на гласовете за предложения
update_proposal Active Актуализация на предложение
escrow_transfer Active Escrow превод
escrow_approve Active Escrow одобрение
escrow_dispute Active Escrow спор
escrow_release Active Escrow освобождаване
account_create_with_delegation Active Създаване на акаунт с делегиране
request_account_recovery Active Заявка за възстановяване на акаунт
recover_account Owner Възстановяване на акаунт