Връзки за подпис
Връзката за подпис отваря транзакция в Hive в Hivesigner. Потребителят я преглежда, одобрява я със собствения си ключ и Hivesigner я излъчва от неговия браузър. След това Hivesigner може да върне потребителя във вашето приложение с идентификатора на транзакцията. Връзките за подпис не изискват акаунт за приложение и токен. Те покриват всички 41 операции, които Hivesigner поддържа, включително преводи и други действия, изискващи active ключ.
Как работи връзката за подпис
- Вашето приложение съставя връзка, която носи една или повече операции.
- Потребителят отваря връзката. Hivesigner показва всяка операция с ясни думи на екрана "Потвърждаване на транзакция", заедно с ключа, който ѝ е нужен.
- Потребителят одобрява. Hivesigner подписва транзакцията в браузъра с ключа на акаунта, избран в Hivesigner. След това изпраща транзакцията към мрежата Hive.
- Когато връзката назовава адрес за обратно извикване, 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 | Възстановяване на акаунт |