Посилання для підпису
Посилання для підпису відкриває транзакцію Hive в Hivesigner. Користувач переглядає її, схвалює власним ключем, і Hivesigner надсилає її в мережу з його браузера. Далі Hivesigner може повернути користувача до вашого застосунку з ID транзакції. Посилання для підпису не потребують ні облікового запису застосунку, ні токена. Вони охоплюють усі 41 операцію, які підтримує Hivesigner, зокрема перекази та інші дії, для яких потрібен активний ключ.
Як працює посилання для підпису
- Ваш застосунок будує посилання, яке містить одну або кілька операцій.
- Користувач відкриває посилання. Hivesigner показує кожну операцію простими словами на екрані «Підтвердження транзакції», разом із ключем, який вона потребує.
- Користувач схвалює. Hivesigner підписує транзакцію в браузері ключем облікового запису, вибраного в Hivesigner. Потім надсилає транзакцію в мережу Hive.
- Коли посилання називає адресу зворотного виклику, 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 |
Власник | Відновлення облікового запису |