Посилання для підпису

Посилання для підпису відкриває транзакцію Hive в Hivesigner. Користувач переглядає її, схвалює власним ключем, і Hivesigner надсилає її в мережу з його браузера. Далі Hivesigner може повернути користувача до вашого застосунку з ID транзакції. Посилання для підпису не потребують ні облікового запису застосунку, ні токена. Вони охоплюють усі 41 операцію, які підтримує Hivesigner, зокрема перекази та інші дії, для яких потрібен активний ключ.

Як працює посилання для підпису

  1. Ваш застосунок будує посилання, яке містить одну або кілька операцій.
  2. Користувач відкриває посилання. Hivesigner показує кожну операцію простими словами на екрані «Підтвердження транзакції», разом із ключем, який вона потребує.
  3. Користувач схвалює. Hivesigner підписує транзакцію в браузері ключем облікового запису, вибраного в Hivesigner. Потім надсилає транзакцію в мережу Hive.
  4. Коли посилання називає адресу зворотного виклику, Hivesigner надсилає користувача туди з ID транзакції.

Ваш застосунок ніколи не бачить ключа. Будь-який сайт може створити посилання для підпису: жодного 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 упорядковує деякі значення перед підписанням, зокрема суми й поля, залишені зі значеннями за замовчуванням. Підписана транзакція тоді може мати інший ID, ніж той, який ви побудували. Читайте ID з адреси зворотного виклику.

Старе посилання називає одну операцію у шляху й кладе її поля в рядок запиту:

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).
  • Подавайте кожне поле як параметр запиту з назвою поля. Кодуйте кожне значення для URL.
  • Пишіть переліки й об’єкти як JSON, наприклад required_posting_auths=["alice"]. Перелік ID чи імен можна також розділити комами: 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 відхиляє посилання цілком, коли значення не пасує своєму полю, коли операція невідома або коли посилання не містить жодної операції. Користувач бачить «Ой, щось пішло не так. Надані дані недійсні.», і нічого не підписується.

Параметри

Додайте їх до рядка запиту будь-якого посилання для підпису:

Параметр Що означає
cb Адреса зворотного виклику, закодована в base64url. Саме це пише hive-uri для своєї опції callback.
redirect_uri Адреса зворотного виклику як звичайний текст, закодований для URL. Старі посилання використовують саме її. Закодоване посилання використовує її, коли не має cb.
nb Лише підписати. Hivesigner підписує транзакцію, не надсилаючи її в мережу. Покладіть {{sig}} в адресу зворотного виклику, щоб отримати підпис (див. Замінники у зворотному виклику). Підходить будь-яке значення, навіть порожнє (nb=).
s Обліковий запис, який має підписати. Коли вибрано інший обліковий запис, Hivesigner просить користувача перемкнутися на цей. Жодним іншим обліковим записом він не підписує.

Використовуйте адресу зворотного виклику з https://. Hivesigner ігнорує адресу, яка не є URL-адресою http чи https, і лишається на власному екрані з результатом.

Hivesigner обирає ключ за операціями. Параметра для вибору ключа немає: у посиланнях для підпису Hivesigner ігнорує authority (і параметр a пакета hive-uri). Див. Який ключ потрібен посиланню.

Замінники у зворотному виклику

Після схвалення користувачем Hivesigner заповнює ці замінники в адресі зворотного виклику:

Замінник Значення
{{id}} ID транзакції
{{sig}} Підпис, для посилання лише з підписом (nb)
{{block}} Лишається порожнім
{{txn}} Лишається порожнім
{{data}} Лишається порожнім

До адреси зворотного виклику без жодного із цих замінників ID транзакції додається як 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 прийняв транзакцію. Транзакція може ще не бути в блоці. Шукайте її за ID, коли вам треба знати, що її включено.

Вашу адресу зворотного виклику не викликають, коли мережа відхиляє транзакцію (користувач бачить помилку) або коли користувач іде, не схваливши.

За допомогою 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/ і відкриває його.

Який ключ потрібен посиланню

Кожній операції потрібен один ключ: публікації, активний або власника. Таблиця нижче їх перелічує. Три операції залежать від своїх значень:

  • custom_json потребує активного ключа, коли required_auths називає обліковий запис. Інакше потребує ключа публікації.
  • account_update потребує ключа власника, коли задає owner. Інакше потребує активного ключа.
  • account_update2 потребує ключа власника, коли задає owner. Він потребує активного ключа, коли задає active, posting, memo_key або json_metadata. Лише з posting_json_metadata він потребує ключа публікації.

Hivesigner підписує посилання одним ключем, тож усі операції в одному посиланні мають потребувати того самого ключа. Hivesigner відмовляється підписувати посилання, яке їх змішує, і пояснює користувачеві чому. Надсилайте такі операції окремими посиланнями.

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

Що бачить користувач

  • Екран із заголовком «Підтвердження транзакції» і однією карткою на кожну операцію: підсумок простими словами, потрібний ключ і значення, які вона несе.
  • «Вас буде перенаправлено на HOST.», коли посилання має адресу зворотного виклику. Використовуйте адресу на власному сайті, щоб користувачі впізнавали хост.
  • Попередження, коли операція діє від імені іншого облікового запису, ніж той, що підписує.
  • Схвалити або Підписати для посилання лише з підписом. Заблокований обліковий запис спершу просить код доступу.
  • Після надсилання в мережу «Транзакцію успішно надіслано в мережу» з ID транзакції. Далі перенаправлення на вашу адресу зворотного виклику.

Перегляд і підпис описує цей екран для користувачів.

Підтримувані операції

Hivesigner підписує ці 41 операцію за їхніми назвами в блокчейні. Будь-що інше відхиляється. Назва це та, яку Hivesigner показує на екрані підтвердження.

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