साइन लिंक

साइन लिंक Hivesigner में एक Hive लेन-देन खोलता है। उपयोगकर्ता उसे देखता है, अपनी कुंजी से मंज़ूरी देता है और Hivesigner उसे उसके ब्राउज़र से प्रसारित कर देता है। फिर Hivesigner उपयोगकर्ता को लेन-देन की आईडी के साथ आपके ऐप पर लौटा सकता है। साइन लिंक के लिए न ऐप खाता चाहिए न टोकन। Hivesigner जिन 41 ऑपरेशनों को संभालता है, वे सब इनमें आते हैं, जिनमें ट्रांसफ़र और दूसरे काम शामिल हैं जिनके लिए सक्रिय कुंजी चाहिए।

साइन लिंक कैसे काम करता है

  1. आपका ऐप एक ऐसा लिंक बनाता है जिसमें एक या अधिक ऑपरेशन होते हैं।
  2. उपयोगकर्ता लिंक खोलता है। Hivesigner «लेन-देन की पुष्टि करें» स्क्रीन पर हर ऑपरेशन को सरल शब्दों में दिखाता है, साथ में वह कुंजी भी जो उसे चाहिए।
  3. उपयोगकर्ता मंज़ूरी देता है। Hivesigner लेन-देन को ब्राउज़र में ही उस खाते की कुंजी से साइन करता है जो Hivesigner में चुना हुआ है। फिर लेन-देन Hive नेटवर्क पर भेज देता है।
  4. जब लिंक में कोई कॉलबैक हो, तो Hivesigner उपयोगकर्ता को लेन-देन की आईडी के साथ वहाँ भेज देता है।

आपका ऐप कभी कोई कुंजी नहीं देखता। कोई भी साइट साइन लिंक बना सकती है: भेजने के लिए कोई client_id होता ही नहीं।

Hivesigner दो तरह के साइन लिंक पढ़ता है: एन्कोडेड लिंक और पुराने लिंक।

एन्कोडेड लिंक ऑपरेशनों को JSON के रूप में रखता है, base64url में एन्कोड करके। यह hive-uri पैकेज के hive://sign/... रूप का इस्तेमाल करता है, जिसमें 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 रखता है। जो हस्ताक्षर लेन-देन में पहले से हैं उन्हें भी रखता है। इससे कई खाते एक ही लेन-देन पर बारी-बारी हस्ताक्षर कर सकते हैं, ऐसे खाते के लिए जिसे कई लोग मिलकर चलाते हैं। जिस लेन-देन की extensions सूची खाली न हो उसे Hivesigner अस्वीकार कर देता है।

ध्यान दें: 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 (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 अपने json के भीतर __signer को फ़ॉलो करने वाले के रूप में रख सकता है।
  • पूर्णांक उसी दायरे के पूरे अंक होने चाहिए जिसे चेन स्वीकार करती है, जैसे वोट के weight के लिए -10000 से 10000

जब कोई मान अपने फ़ील्ड में न बैठे, कोई ऑपरेशन अनजान हो, या लिंक में कोई ऑपरेशन ही न हो, तब Hivesigner पूरा लिंक अस्वीकार कर देता है। उपयोगकर्ता को «उफ़, कुछ गलत हो गया। दिया गया डेटा अमान्य है।» दिखता है और कुछ भी साइन नहीं होता।

पैरामीटर

इन्हें किसी भी साइन लिंक की क्वेरी स्ट्रिंग में जोड़ें:

पैरामीटर अर्थ
cb कॉलबैक URL, base64url में एन्कोड किया हुआ। hive-uri अपने callback विकल्प के लिए यही लिखता है।
redirect_uri कॉलबैक URL सादे URL-एन्कोडेड पाठ के रूप में। पुराने लिंक यही इस्तेमाल करते हैं। एन्कोडेड लिंक इसे तब इस्तेमाल करता है जब उसमें cb न हो।
nb सिर्फ़ साइन। Hivesigner लेन-देन को बिना प्रसारित किए साइन करता है। हस्ताक्षर पाने के लिए कॉलबैक में {{sig}} रखें (देखें कॉलबैक के प्लेसहोल्डर)। कोई भी मान चलेगा, खाली भी (nb=)।
s वह खाता जिसे साइन करना है। जब कोई और खाता चुना हो, तो Hivesigner उपयोगकर्ता से इसी पर आने को कहता है। वह किसी और खाते से साइन नहीं करता।

https:// वाला कॉलबैक इस्तेमाल करें। जो कॉलबैक http या https URL न हो उसे Hivesigner अनदेखा कर देता है और तब अपनी ही नतीजे वाली स्क्रीन पर रुका रहता है।

Hivesigner कुंजी ऑपरेशनों से तय करता है। उसे चुनने का कोई पैरामीटर नहीं है: साइन लिंक पर Hivesigner authority (और hive-uri का a पैरामीटर) अनदेखा कर देता है। देखें लिंक को कौन-सी कुंजी चाहिए

कॉलबैक के प्लेसहोल्डर

उपयोगकर्ता के मंज़ूरी देने के बाद 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

जैसे ही कोई Hive नोड लेन-देन स्वीकार करता है, Hivesigner रीडायरेक्ट कर देता है। हो सकता है लेन-देन अभी किसी ब्लॉक में न हो। जब यह जानना ज़रूरी हो कि वह शामिल हुआ या नहीं, तो उसे उसकी आईडी से खोजें।

जब नेटवर्क लेन-देन अस्वीकार करता है (उपयोगकर्ता त्रुटि देखता है) या जब उपयोगकर्ता बिना मंज़ूरी दिए चला जाता है, तब आपका कॉलबैक नहीं बुलाया जाता।

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 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 पर रीडायरेक्ट किया जाएगा।»। अपनी ही साइट का कॉलबैक इस्तेमाल करें, ताकि उपयोगकर्ता होस्ट पहचान सकें।
  • जब कोई ऑपरेशन साइन करने वाले खाते से अलग खाते के रूप में काम करे तो एक चेतावनी।
  • स्वीकृत करें, या सिर्फ़-साइन लिंक के लिए हस्ताक्षर करें। लॉक किया खाता पहले अपना पासकोड माँगता है।
  • प्रसारण के बाद लेन-देन की आईडी के साथ «लेन-देन सफलतापूर्वक प्रसारित हुआ»। फिर आपके कॉलबैक पर रीडायरेक्ट।

समीक्षा और हस्ताक्षर इस स्क्रीन को उपयोगकर्ताओं के लिए बताता है।

समर्थित ऑपरेशन

Hivesigner इन 41 ऑपरेशनों को चेन पर उनके नामों से साइन करता है। बाक़ी सब अस्वीकार हो जाता है। नाम वही है जो Hivesigner पुष्टि वाली स्क्रीन पर दिखाता है।

ऑपरेशन कुंजी नाम
transfer सक्रिय ट्रांसफ़र
recurrent_transfer सक्रिय आवर्ती ट्रांसफ़र
delegate_vesting_shares सक्रिय हाइव पावर डेलीगेट करें
transfer_to_vesting सक्रिय पावर अप
set_withdraw_vesting_route सक्रिय पावर डाउन रूट सेट करें
withdraw_vesting सक्रिय पावर डाउन
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 स्वामी खाता रिकवर करें