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