پیوندهای امضا

پیوند امضا یک تراکنش Hive را در Hivesigner باز می‌کند. کاربر آن را بررسی می‌کند، با کلید خودش تأیید می‌کند و Hivesigner آن را از مرورگر او منتشر می‌کند. سپس Hivesigner می‌تواند کاربر را با شناسه تراکنش به برنامه شما بازگرداند. پیوندهای امضا به حساب برنامه و توکن نیازی ندارند. همه ۴۱ عملیاتی را که Hivesigner پشتیبانی می‌کند در بر می‌گیرند، از جمله انتقال‌ها و دیگر کارهایی که به کلید فعال نیاز دارند.

پیوند امضا چگونه کار می‌کند

  1. برنامه شما پیوندی می‌سازد که یک یا چند عملیات را در خود دارد.
  2. کاربر پیوند را باز می‌کند. Hivesigner هر عملیات را با واژه‌های روشن در صفحه «تأیید تراکنش» نشان می‌دهد، همراه با کلیدی که به آن نیاز دارد.
  3. کاربر تأیید می‌کند. Hivesigner تراکنش را در مرورگر با کلید حسابی که در Hivesigner انتخاب شده امضا می‌کند. سپس تراکنش را به شبکه Hive می‌فرستد.
  4. وقتی پیوند نشانی بازگشتی داشته باشد، 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 (نوشته‌شده به‌صورت cbno_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 مالک بازیابی حساب