پیوندهای امضا
پیوند امضا یک تراکنش Hive را در Hivesigner باز میکند. کاربر آن را بررسی میکند، با کلید خودش تأیید میکند و Hivesigner آن را از مرورگر او منتشر میکند. سپس Hivesigner میتواند کاربر را با شناسه تراکنش به برنامه شما بازگرداند. پیوندهای امضا به حساب برنامه و توکن نیازی ندارند. همه ۴۱ عملیاتی را که Hivesigner پشتیبانی میکند در بر میگیرند، از جمله انتقالها و دیگر کارهایی که به کلید فعال نیاز دارند.
پیوند امضا چگونه کار میکند
- برنامه شما پیوندی میسازد که یک یا چند عملیات را در خود دارد.
- کاربر پیوند را باز میکند. Hivesigner هر عملیات را با واژههای روشن در صفحه «تأیید تراکنش» نشان میدهد، همراه با کلیدی که به آن نیاز دارد.
- کاربر تأیید میکند. Hivesigner تراکنش را در مرورگر با کلید حسابی که در Hivesigner انتخاب شده امضا میکند. سپس تراکنش را به شبکه Hive میفرستد.
- وقتی پیوند نشانی بازگشتی داشته باشد، Hivesigner کاربر را با شناسه تراکنش به آنجا میفرستد.
برنامه شما هرگز کلیدی نمیبیند. هر سایتی میتواند پیوند امضا بسازد: هیچ client_id برای فرستادن نیست.
گونههای پیوند
Hivesigner دو گونه پیوند امضا را میخواند: پیوندهای رمزگذاریشده و پیوندهای قدیمی.
پیوندهای رمزگذاریشده
پیوند رمزگذاریشده عملیات را بهصورت JSON و رمزگذاریشده با base64url در خود دارد. از قالب hive://sign/... بسته hive-uri استفاده میکند، با https://hivesigner.com/ بهجای hive://.
| گونه | آنچه 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 پیش از امضا برخی مقادیر را یکدست میکند، مانند مبلغها و فیلدهایی که روی مقدار پیشفرض ماندهاند. آنگاه تراکنش امضاشده میتواند شناسهای متفاوت از آنچه ساختهاید داشته باشد. شناسه را از نشانی بازگشت بخوانید.
پیوندهای قدیمی
پیوند قدیمی نام یک عملیات را در مسیر میآورد و فیلدهایش را در پرسوجو میگذارد:
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"]. فهرستی از شناسهها یا نامها را میتوان با ویرگول هم جدا کرد:proposal_ids=379,380. - مقادیر منطقی را
trueیاfalseبنویسید.
پیوند قدیمی یک عملیات در خود دارد. برای بیش از یکی از پیوند رمزگذاریشده استفاده کنید.
مقادیر فیلدها
این قاعدهها برای همه گونهها برقرارند:
- پیشفرضها. فیلدی که کنار بگذارید مقدار پیشفرض خود را میگیرد. حسابی که عمل میکند (
voter،from،ownerو فیلدهایی از این دست) بهصورت پیشفرض همان حسابی است که امضا میکند.weightیک رأی بهصورت پیشفرض10000(۱۰۰٪) است. - مبلغها یک عدد و یک نماد هستند:
1.000 HIVE،0.500 HBDیا100.000000 VESTS. Hivesigner مقادیر HIVE و HBD را با ۳ رقم اعشار و VESTS را با ۶ رقم مینویسد. - 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:// استفاده کنید. نشانی بازگشتی که نشانی http یا https نباشد را Hivesigner نادیده میگیرد و آنگاه روی صفحه نتیجه خودش میماند.
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 یا بالاتر را به کار ببرید، که هر متن یونیکد را درست رمزگذاری میکند.
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
بسته 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 بدهید. در مرورگر، تابعی که بهعنوان آرگومان سوم داده شود کاری میکند که پیوند بهجای بازگردانده شدن در زبانه تازهای باز شود. ببینید کیتهای توسعه.
بدون کد
نشانی 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 هدایت خواهید شد.» وقتی پیوند نشانی بازگشت داشته باشد. از نشانی بازگشتی روی سایت خودتان استفاده کنید، تا کاربران میزبان را بشناسند.
- هشداری وقتی عملیاتی بهعنوان حسابی جز حساب امضاکننده عمل کند.
- تأیید، یا امضا برای پیوند فقط-امضا. حساب قفلشده نخست رمز عبور خود را میخواهد.
- پس از انتشار، «تراکنش با موفقیت به شبکه ارسال شد» همراه با شناسه تراکنش. سپس هدایت به نشانی بازگشت شما.
بررسی و امضا این صفحه را برای کاربران شرح میدهد.
عملیات پشتیبانیشده
Hivesigner این ۴۱ عملیات را با نامهایشان روی زنجیره امضا میکند. هر چیز دیگری رد میشود. نام همان است که Hivesigner در صفحه تأیید نشان میدهد.
| عملیات | کلید | نام |
|---|---|---|
transfer |
فعال | انتقال |
recurrent_transfer |
فعال | انتقال مکرر |
delegate_vesting_shares |
فعال | واگذاری Hive Power |
transfer_to_vesting |
فعال | تبدیل به Hive Power (Power up) |
set_withdraw_vesting_route |
فعال | تنظیم مسیر برداشت Hive Power |
withdraw_vesting |
فعال | برداشت Hive Power (Power down) |
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 |
مالک | بازیابی حساب |