معاملات استاندارد در شبکه های cryptocurrency را می توان معاملات تک امضا نامید زیرا آنها فقط به یک امضای دیجیتالی نیاز دارند تا یک معامله انجام شود. چند علامت گذاری به هر امضای یک وزن می دهد ، وزن کل معاملات باید قبل از اجرای آنها به آستانه وزن سفارشی برسد. توسط Multi-Signature ، یک حساب کاربری می تواند توسط چندین کلید خصوصی مدیریت شود و معاملات ایجاد شده در یک حساب را می توان با کلیدهای خصوصی Serval امضا کرد. در این سند در مورد مشخصات مجوز عملکرد چند امضا و نحوه اجرای مجوز عملکرد تعریف شده توسط کاربر برای چند نشانگر بحث می شود.
زمینه
این طرح شامل سه نوع مجوز ، درگیری مالک ، درگیری شاهد و درگیری فعال است ، جایی که در آن مالکیت صلاحیت اجرای کلیه قراردادها را دارد ، از افزایش شاهد برای تولید بلوک ها استفاده می شود ، و درگیری فعال مجوز سفارشی است (ترکیبی از مجموعه اجازه قراردادها).
سناریو
بیایید چندین مورد را ببینیم:
Alice is ruing a company, she creates an account as her company fund account. Alice adds Bob(Accountant), Carol(CFO) and Alice(CEO) into the owner-permission of her account. Bob’s signature weight is 2, Carol’s signature weight is 2, Alice’s signature weight is 5. Owner-permission’s signature weight threshold is 3. Alice’s signature weight is bigger than the threshold(5>3) ، بنابراین تنها امضای وی برای انجام معاملات کافی است. وزن امضای باب از آستانه کوچکتر است (2<3), to make a transaction, Bob needs Carol’s or Alice’s signature if Carol approves, the total signature weight is 2+2>3 ، بنابراین معامله قابل اجرا است.
آلیس دارایی های TRX زیادی دارد. یک روز ، بدبختی فرا رسیده است ، آلیس به دلیل تصادف مرده است. او تنها کسی است که کلید خصوصی حساب خود را در اختیار دارد ، بنابراین دارایی های وی برای همیشه در آن حساب می ماند ، هیچ کس نمی تواند آن را دریافت کند.(سناریوی فعلی) آلیس دارایی های TRX زیادی دارد. او برای حساب کاربری خود یک امر فعال ایجاد می کند ، آدرس های همسر و پسر خود را به سمت فعال شدن فعال می افزاید و به مقامات فعال سازی فعال می دهد تا حساب خود را اداره کند. بنابراین پس از وجود آلیس دیگر ، اعضای خانواده وی هنوز هم می توانند حساب او را اداره کنند.
آلیس یک شرکت را اداره می کند ، او به عنوان حساب کاربری خود یک حساب کاربری ایجاد می کند. آلیس یک عمل فعال را ایجاد می کند و باب (حسابدار) ، کارول (CFO) و آلیس (مدیرعامل) را به فعال شدن حساب کاربری اضافه می کند. آلیس به مرجع فعال سازی فعال برای اداره حساب کاربری خود می دهد. یک روز ، باب استعفا می دهد. برای ایمن نگه داشتن حساب آلیس ، آلیس می تواند حساب باب را از افزایش فعال خارج کند ، سپس باب دیگر نمی تواند حساب خود را اداره کند.
آلیس یک حساب شاهد دارد ، اگر می خواهد یک گره را مستقر کند اما نمی داند چگونه مستقر شود ، باید کلید خصوصی حساب را به مدیر برنامه ارائه دهد.(سناریوی فعلی) آلیس می تواند شاهد-شروع را به مدیر اختصاص دهد. از آنجا که مدیر فقط مجوز تولید بلوک را دارد ، اجازه انتقال TRX وجود ندارد و حتی اگر کلید خصوصی سرپرست روی سرور به خطر بیفتد ، TRX از بین نمی رود.
مشخصات
بیایید ابتدا طراحی پروتکل چند امضای را ببینیم. ساختارهای مرتبط در پروتکل شامل حساب ، مجوز ، کلید ، معامله است.
حساب:
حساب پیام. مجوز مالک_پرمیس = 31 ؛ اجازه شاهد_پرمیس = 32 ؛ مجوز مکرر Active_Permission = 33 ؛>
3 نقش مختلف مجوز وجود دارد: مالک ، شاهد و فعال. مجوز مالک حق اجرای کلیه قراردادها را دارد ، مجوز شاهد برای SR است ، مجوز فعال شامل مجموعه ای از قراردادهای مجوزهای اجرای انتخاب شده است. ویژگی های مرتبط به حساب اضافه می شوند: مالک_پرمیس 、 شاهد_پرمیس و Active_Permission. action_permission یک لیست است ، طول باید
اجازه:
اجازه پیامenum permissiontypeمالک = 0 ؛ شاهد = 1 ؛ فعال = 2 ؛ > permissiontype نوع = 1 ؛ // نوع مجوز enum ،int32 // تولید شده توسط سیستم. مالک شاهد فعال از 2 افزایش می یابد. با استفاده از کدام مجوز برای اجرای یک قرارداد با تنظیم شناسه مشخص می شود. به عنوان مثال ، با استفاده از مجوز مالک ، تنظیم کنیدstring permission_name = 3 ؛ // نام مجوز ، محدودیت طول 32 بایت آستانه int64 = 4 ؛ // آستانه وزن امضا int32 parent_id = 5 ؛ // مستهلک ، 0 عملیات بایت = 6 ؛ // 32 بایت (256 بیت) ، هر بیت مطابق با مجوز اجرای هر نوع قرارداد است کلیدهای کلید مکرر = 7 ؛// لیست حساب ها و وزنه هایی که دارای مجوز هستند ، طول باید باشد>
هر بیت از اعضای ساختار "عملیات" ، 1 به معنای واقعی است ، 0 به معنای نه ، پشتیبانی از 256 نوع قرارداد مختلف. فهرست به تعریف Transaction. ContractType اشاره دارد (به تصویر زیر مراجعه کنید).
به عنوان مثال ، عملیات = 0x0100… 00 (hex) یا 100… 0 (باینری) ، فقط بیت اول 1 است ، شناسه AccountCreateContract 0 است ، به این معنی است که این مجوز فقط اجازه اجرای AccountCreateContract را دارد. اگر عملیات = 0x7f ff 1f C0 03 3E 03… (HEX) یا 1111111111111111000 00000011 11000000 011111 0 0 11000000 ... (باینری) ، 47 بیت عملیات 0 است ، به این معنی است که از اجرای `حساب کاربری UcciationUpdatecontract پشتیبانی نمی کند.`، به عنوان قرارداد" AccountPermissionUpdateContract "46 (از 0 شروع شده است) در زیر ذکر شده است.
تمام توالی های بایت Hex از عملیات در برنامه نویسی اندکی سفارش داده می شود ، اما برای هر بایت ، برای بیت های باینری به صورت بزرگ و کم نظیر سفارش داده می شود. برای مثال فوق ، اولین بایت 7f است ، کدگذاری باینری مربوطه آن 11111110 است. بایت سوم 1F است ، کدگذاری باینری مربوطه آن 11111000 است.
کلید
کلید پیامآدرس بایت = 1 ؛// آدرس حساب int64 وزن = 2 ؛// وزن امضا>
نوع قرارداد:
معامله پیامقرارداد پیامEnum EnmtiptypeAccountCreateContract = 0 ؛ . AccountPermissionUpDateContract = 46 ؛ . > > نوع ContractType = 1 ؛ . int32 permission_id = 5 ؛// permission_id در معامله با شناسه مجوز مطابقت دارد.>
اجازه مالک
مجوز مالک مجوز برتر یک حساب است. از آن برای کنترل مالکیت حساب ، تنظیم ساختار مجوز استفاده می شود. مجوز مالک حق اجرای همه قراردادها را دارد.
ویژگی های مجوز مالک:
- حسابی که مجوز مالک دارد می تواند اجازه مالک را تغییر دهد
- هنگامی که اجازه مالک تهی است ، صاحب پیش فرض حساب صاحب مجوز مالک است
- هنگامی که یک حساب جدید ایجاد می کنید ، آدرس به طور خودکار به اجازه مالک درج می شود ، وزن پیش فرض 1 است ، Keys Field فقط حاوی این آدرس و همچنین وزن 1 است.
- اگر در هنگام اجرای قرارداد ، یک مجوز مشخص نشده باشد ، با استفاده از مجوز مالک به طور پیش فرض.
مجوز شاهد:
نمایندگان فوق العاده می توانند از این مجوز برای مدیریت تولید بلوک استفاده کنند. فقط حساب شاهد این اجازه را دارد.
سناریوی استفاده مثال:
یک نماینده فوق العاده گره شاهد را بر روی سرور ابر مستقر می کند. برای ایمن نگه داشتن حساب در سرور ابر ، فقط می توانید مجوز تولید بلوک را به حساب کاربری که در سرور ابر قرار داده اید ، بدهید. از آنجا که این حساب فقط دارای مجوز تولید بلوک است ، بدون اجازه انتقال TRX ، بنابراین حتی اگر حساب موجود در سرور ابر فاش شود ، TRX از بین نمی رود.
پیکربندی گره شاهد:
- اگر از مجوز شاهد استفاده نشده است ، نیازی به پیکربندی نیست
- در صورت استفاده از مجوز شاهد ، نیاز به پیکربندی مجدد دارد:
#config. conf// اختیاری. پیش فرض خالی است.// هنگامی که حساب شاهد در حال تنظیم شاهد بود ، استفاده می شود.// هنگامی که خالی نیست ، LocalWitnessAccountAddress آدرس حساب شاهد را نشان می دهد ،// و LocalWitness با کلید خصوصی WitnerPermissionAddress در حساب شاهد پیکربندی شده است.// هنگامی که خالی است ، LocalWitness با کلید خصوصی حساب شاهد پیکربندی می شود.// localWitnessAccountAddress =localwitness = [F4DF789D3210AC881CB900464DD30409453044D2777060A0A0A0C391CBDF4C6A4F57]
مجوز فعال
مجوز فعال از مجموعه ای از مجوز اجرای قرارداد ، مانند ایجاد یک حساب ، عملکرد انتقال و غیره تشکیل شده است. ویژگی های مجوز فعال:
- این حساب صاحب مجوز مالک می تواند مجوز فعال را تغییر دهد
- حساب صاحب مجوز اجرای AccountPermissionUpdateContract همچنین می تواند مجوز فعال را تغییر دهد
- حداکثر 8 مجوز
- PermsisionId از 2 به طور خودکار افزایش می یابد
- هنگامی که یک حساب جدید ایجاد می شود ، یک مجوز فعال به صورت خودکار ایجاد می شود و آدرس در آن وارد می شود ، وزن پیش فرض 1 است ، زمینه کلیدها فقط حاوی این آدرس و وزن 1 است
هزینه:
- با استفاده از AccountPermissionUpdateContract 100trx هزینه دارد
- اگر یک معامله شامل 2 یا بیشتر امضا باشد ، علاوه بر هزینه معامله ، 1 TRX اضافی را نیز شارژ می کند
- هزینه را می توان با پیشنهاد اصلاح کرد
تغییر اجازه:
اگر حساب دارای مجوز "AccountPermissionUpdateContract" باشد ، می تواند با مراحل زیر مجوزها را تغییر دهد:
- برای پرس و جو در حساب ، با "getAccount" تماس بگیرید ، مجوز اصلی را دریافت کنید
- تغییر مجوز با "AccountPermissionUpdateContract"
http: //:/کیف پول/AccountPermissionUpdate"مالک_ادد": "41ffa9466d5bf6bb6b7e4ab6ef2b1cb9f1f41f9700" ،"مالک":"نوع": 0 ،"شناسه": 0 ،"permission_name": "مالک" ،"آستانه": 2 ،"کلیدها": ["آدرس": "41ffa9466d5bf6bb6b7e4ab6ef2b1cb9f1f41f9700" ،"وزن": 1>,"نشانی": ""،"وزن": 1>,"نشانی": ""،"وزن": 1>]>,"شاهد":"نوع": 1 ،"شناسه": 1 ،"permission_name": "شاهد" ،"آستانه": 1 ،"کلیدها": ["آدرس": "41F08012B4881C320EB40B80F122873189824E09D""وزن": 1>]>,"Actives": ["نوع": 2 ،"شناسه": 2 ،"permission_name": "Active0" ،"آستانه": 3 ،"عملیات": "7FFF1FC0037E00000000000000000000000000000000000000000000000000" ،"کلیدها": ["نشانی": ""،"وزن": 1>,"نشانی": ""،"وزن": 1>,"نشانی": ""،"وزن": 1>]>,"نوع": 2 ،"شناسه": 3 ،"permission_name": "Active1" ،"آستانه": 3 ،"عملیات": "7FFF1FC0037E00000000000000000000000000000000000000000000000000" ،"کلیدها": ["نشانی": ""،"وزن": 1>,"نشانی": ""،"وزن": 1>,"نشانی": ""،"وزن": 1>]>]>
حساب 41FFA9466D5BF6B6B7E4AB6EF2B1CB9F1F41F9700 به صاحب خود و حساب_1 ، حساب_2 با شناسه 0 دسترسی پیدا می کند.
دسترسی به شاهد به 41F08012B4881C320EB40B80F1228731898824E09D با شناسه 1 ؛
دسترسی فعال به حساب_3 ، حساب_4 ، حساب_5 با شناسه 2 ؛
با شناسه 3 به Account_6 ، Account_7 ، Account_8 دسترسی پیدا کنید.
دسترسی فعال برای انجام کار به امضاهای هر دو حساب نیاز دارد. اگر این حساب شاهد نباشد ، لازم نیست که شاهد_پرمیشان تنظیم شود ، در غیر این صورت خطایی رخ می دهد.
3. معامله را بسازید و امضا کنید
4. ارسال معامله به گره
چگونه می توان با HTTP API چند نماد ساخت:
- با فرض اینکه 5 حساب وجود داشته باشد: مالک ، Active1 ، Active2 ، Active3 ، گیرنده. ما فکر می کنیم حساب "مالک" دارای 5000 TRX است و قصد دارد 1000 TRX را به گیرنده ارسال کند ، این معامله تنها در صورت بدست آوردن حداقل 2 امضا از 3 صاحب حساب دیگر موفقیت آمیز خواهد بود.
2. "مالک" معامله ای را برای به روزرسانی نوع اجازه حساب ایجاد می کند. 47. 252. 84. 158:8090 پورت سرویس IP و HTTP یک گره آزمایش است.
# cur l-x post http://47. 252. 84. 158:8090/wallet/accountpermissionupdate"Owner_Address": "41AF498B43EE098B26926798CFEAE1AB1154EF4430""مالک":"نوع": 0 ،"شناسه": 0 ،"permission_name": "مالک" ،"آستانه": 1 ،"کلیدها": ["آدرس": "41AF498B43EE098B26926798CFEAE1AB1154EF4430""وزن": 1>]>,"Actives": ["نوع": 2 ،"شناسه": 2 ،"permission_name": "Active1" ،"آستانه": 2 ،"عملیات": "7FFF1FC003E00000000000000000000000000000000000000000000000000" ،"کلیدها": ["آدرس": "41A6D58DCB0E0FC0C3FE23CC405D5BD7979E9016FB""وزن": 1>,"آدرس": "41F04DC975557388CD5D5FBCAA706D76AAD415E59""وزن": 1>,"آدرس": "41CC187927EB7D648D779FE363F7915DDCFBF2212B""وزن": 1>]>]>
در نوع JSON پاسخ می دهد ، به نام $
3. "مالک" معامله را با کلید خصوصی خود امضا می کند.
# cur l-x post http://47. 252. 84. 158:8090/wallet/gettransactionsignign"معامله": $ ،"PrivateKey": "1BB32958909299DB452D3C9BBFD15FD745160D63E49853574EE577708435A00">
در نوع JSON پاسخ می دهد ، به نام $ ،
توجه: استفاده از این API ممکن است کلید خصوصی شما درز شود.
4. "مالک" این معامله را پخش می کند
# cur l-x post http://47. 252. 84. 158:8090/wallet/broadcasttransaction$
5- هرکسی معامله انتقال را از "مالک" به "گیرنده" ایجاد می کند و 2 را به permission_id اختصاص می دهد.
# cur l-x post http://47. 252. 84. 158:8090/wallet/createtransaction"Owner_Address": "41AF498B43EE098B26926798CFEAE1AB1154EF4430""to_address": "41ca6e0f4bc55cfec286b3e2f3cb45cbac87792b78""مقدار": 1000 ،"permission_id": 2>
در نوع JSON پاسخ می دهد ، به نام $ و $ به "Active1" در نوع رشته ارسال می شود.
6. کاربر ‘Active1 'معامله دریافت کننده را با کلید خصوصی خود امضا می کند.
# cur l-x post http://47. 252. 84. 158:8090/wallet/gettransactionsignign"معامله": $ ،"PrivateKey": "1BB32958909299DB452D3C9BBFD15FD745160D63E4985357874EE57708435A11">
در نوع JSON پاسخ می دهد ، به نام $ و $ به "Active2" در نوع رشته ارسال می شود.
توجه: استفاده از این API ممکن است کلید خصوصی شما درز شود.
7. کاربر "Active2" معامله دریافت کننده را با کلید خصوصی خود امضا می کند.
cur l-x post http://47. 252. 84. 158:8090/wallet/gettransactionsignign"معامله": $ ،"PrivateKey": "1BB32958909299DB452D3C9BBFD15FD745160D63E4985357874EE57708435A22">
توجه: استفاده از این API ممکن است کلید خصوصی شما درز شود.
8. کاربر ‘Active2 'معامله را پخش می کند
# cur l-x post http://47. 252. 84. 158:8090/wallet/broadcasttransaction$
9. هرکسی می تواند از مانده حساب گیرنده برای تأیید اجرای معامله پرس و جو کند
# cur l-x post http://47. 252. 84. 158:8090/wallet/getAccount"آدرس": "41CA6E0F4BC55CFEC286B3E2F3CB45CBAC87792B78">
نتیجه
با ارائه مجوز عملکرد چند امضا ، می تواند کنترل مجوز حساب را به انعطاف پذیری بیشتر توانمند کند و خواسته های مختلف مدیریت حساب را برآورده کند.
خبرهای فارکس...
ما را در سایت خبرهای فارکس دنبال می کنید
برچسب : نویسنده : شهره لرستانی بازدید : 38 تاريخ : شنبه 7 مرداد 1402 ساعت: 15:21