چگونه توکن محرمانه خود را در اتریوم کدگذاری کنید

اتریوم خصوصی نیست. هر بار که یک توکن ERC20 یا هر دارایی دیجیتال دیگری ارسال می‌‌کنید، اطلاعاتی به دست اشخاص دیگر می‌‌افتد. آنان می‌‌توانند سابقه مالی شما را با Etherscan، Blockscount یا هر مرورگر بلاک چین‌‌ دیگری پیدا کنند. نترسید، راه‌‌هایی برای پیشگیری از این وجود دارد. شما می‌‌توانید از چندین حساب استفاده کنید اما باید یادتان باشد که بین این حساب‌‌‌‌ها جابه‌‌جا شوید. این یک کابوس همیشگی ادمین خواهد بود. اگر یک راه بهتر و قابل برنامه‌‌ریزی‌‌تر وجود داشته باشد چه؟ بگذارید AZTEC را به شما معرفی کنیم: یک ابزار حریم خصوصی که روی اتریوم ساخته می‌‌شود. در این مقاله ما روی رمزنگاری پروتکل تمرکز نمی‌‌کنیم ،بلکه به کاربردهای عملی آن مانند توسعه توکن‌‌های محرمانه می‌‌پردازیم.

0 147

پیش‌‌نیازها

فرض می‌‌کنیم شما شناختی اولیه از موارد زیر دارید:

  • توسعه اتریوم با استفاده از چارچوب ترافل (Truffle)
  • اثبات دانش صفر
  • رمزنگاری و منحنی بیضوی

از داشتن node.js و npm در دستگاه خود اطمینان حاصل کرده و ترافل را نصب کنید:

$ npm install truffle –global

مدل‌‌های ذهنی

اتریوم یک کشور و AZTEC یک جنگل است.

در این کشور، مردم با هم تعامل دارند، روی اپلیکیشن‌‌های غیرمتمرکز تبادلات مالی انجام می‌‌دهند، به شهرهای (کیف پول‌‌ها) مختلف حرکت می‌‌کنند و غیره. من دوست دارم AZTEC را یک سرزمین جنگلی محصور در جغرافیای کشور ببینم. مردم می‌‌توانند به آنجا بروند، قبل از ورود موجودی‌‌شان را اعلام کنند اما پس از آن تراکنش‌‌ها محرمانه خواهند بود.

تصویر زیر تلاش (احمقانه) من برای به تصویر کشیدن ورود این ایده به آزتک را نشان می‌‌دهد. واضح است که در این محیط طبیعی (اتریوم) چه می‌‌گذرد، اما وضعیت جهان پس از عبور از این طاق در جنگل (AZTEC) پنهان می‌‌شود.

 کدگذاری توکن محرمانه در اتریوم

نوت‌‌ها

یک نوت AZTEC یک شهرونده درجه ۱ و عضو اصلی پروتکل است. وقتی با دانش صفر دست به تبادل می‌‌زنید، قراردادهای هوشمند هیچ موجودی‌‌ را ذخیره نمی‌‌کنند بلکه در عوض با نقاط منحنی بیضوی کار می‌‌کنند که برای کسانی که کلید خصوصی ندارند تنها یک نویز رایانشی به حساب می‌‌آید.

تمایز قائل شدن بین ERC20 و ERC1724 (استاندارد توکن محرمانه AZTEC) اهمیت دارد. استاندارد اول بین آدرس‌‌های اتریوم و موجودی‌‌های رمزنگاری‌‌نشده نقشه‌‌ای ذخیره می‌‌کند. استاندارد دوم موجودی را رمزنگاری می‌‌کند. نوت‌‌های AZTEC را با UTXOهای بیت کوین مقایسه می‌کنیم چون فرایند مصرف نوت‌‌ها در AZTEC بسیار مشابه است.

 کدگذاری توکن محرمانه در اتریوم

محتوای نوت‌‌ها توسط روئیت‌‌پذیری‌‌شان طبقه‌‌بندی می‌‌شوند:

https://cdn-images-1.medium.com/max/800/1*GteL3qrMRCIMwFolAy1Egg.png

ما در حال بهینه‌‌سازی به نفع سرعت هستیم، پس در اینجا تخیل رمزنگاری را متوقف می‌‌کنیم. اگر تشنه اطلاعات بیشتری درمورد آن بودید به وایت‌‌پیپر سر بزنید.

قبل از ادامه حتما توجه داشته باشید که AZTEC به یک نصب قابل اعتماد نیاز دارد. این آموزش از یک نصب قابل اعتماد که توسط تیم خودمان به صورت داخلی ایجاد شده است استفاده می‌‌کند. ما اطلاعات بیشتری درباره تولید نصب‌‌های قابل اعتماد در آینده نزدیک منتشر خواهیم کرد. ریسک این کار پای خودتان است.

بیایید شروع کنیم:

این گزارش را کلون کرده و ماژول گره را نصب کنید.

$ git clone [email protected]:PaulRBerg/confidential-tokens.git
$ cd confidential-tokens
$ npm install

اگر لاگ‌‌های زیادی در رابطه با «scrypt» و «keccak» دریافت کردید، خوب است چون ما به Aztec.js احتیاج داریم که خود به web3.js که متعاقبا وابستگی‌‌های رمزنگاری زیادی دارد نیاز خواهد داشت.

قبل از اجرای نسخه دمو، چند مرحله مهم هست که باید انجام دهید:

۱. یک فایل account.js داخل پوشه src بسازید. تنها دو حساب را تنظیم کنید. یک فایل نمونه به نام accounts.js.example وجود دارد.

۲. یک فایل .env در ریشه پروژه بسازید و آن را با جزییاتی که در پایین آمده پر کنید. دوباره یک فایل نمونه به نام .env.example وجود دارد.

۳. قرارداد توکن محرمانه را در Rinkeby به کار بگیرید. می‌‌توانید برای این کار از ترافل کمک بگیرید:

$ truffle migrate –network rinkeby

متغیرهای محیط:

۱. CONFIDENTIAL_TOKEN_ADDRESS: توجه داشته باشید که نام واقعی قرارداد ZKERC20 است، این را پس از اجرای قرارداد بنویسید

۲. MNEMONIC

۳. INFURA_AP_KEY

حالا چک کنید ببینید پروژه‌‌تان شبیه به این باشد:

 کدگذاری توکن محرمانه در اتریوم

نسخه دمو را اجرا کنید:

$ npm run demo

این مقداری زمان می‌‌برد چون تراکنش‌‌ها به Rinkeby فرستاده می‌‌شوند. پس از چند دقیقه باید لیستی از رسیدهای پرینت شدخ در کنسول را داشته باشید. هورا! اولین انتقال توکن محرمانه‌‌تان را در اتریوم انجام دادید.

حالا وقت آن است که در src/demo.js کد منبع را جستجو کنید.

نوت‌‌ بسازید

 

مراحل:

۱. دسته‌‌ای از حساب‌‌های تصادفی ایجاد کنید. باید از «secp256k1» استفاده کنیم چون آزت کلید عمومی حساب را نیاز دارد نه فقط آدرس آن را.

۲. چهار گره ایجاد کنید که دو گره اول متعلق به حساب اول باشند و دو گره دیگر هم ۸ توکن از مقدار کل اولیه (۱۰) را به حساب دوم بدهند.

برای درک بهتر مرحله دوم، به خاطر بیاورید که نوت‌‌های AZTEC در ذات خود با UTXOهای بیت کوین مشابه‌‌اند. وقتی کسی پولی انتقال می‌‌دهد، مقدار باقی‌‌مانده باید به مجموعه‌‌ای از نوت‌‌های تبدیل شد (این مخالف تراکنش‌‌های استاندارد اتریوم است که از مدل موجودی استفاده می‌‌کنند).

من علاوه بر این حساب مورد استفاده در اتریوم را (حساب داخل src/accounts.js) را از حساب‌‌‌‌های تصادفی تولیدشده‌‌ی AZTEC جدا می‌‌کنم.

اثبات‌‌های Dem بسازید

 

اثبات بالا:

۱. اذعان می‌‌کند که PublicOwner از ارسال ۱۰ توکن عمومی ERC20 به AZTEC خوشحال است

۲. اولین حساب تولیدشده تصادفی AZTEC را مالک جدید می‌‌کند (یادتان باشد که اولین دو نوت ۵ توکن ارزش دارند و هر دو تحت تملک آن حساب AZTEC هستند).

 

اثبات دوم:

۱. ۸ توکن به حساب AZTEC دوم به شکل اثبات دانش همه‌‌جانبه انتقال دهید

۲. دو نوت اول را بسوزانید تا اولین حساب AZTEC نتواند در آینده از آن‌‌ها استفاده کند.

 

ما از نوت بالا برای تعامل با قراردادی به نام NoteRegistery نیاز داریم که برای هر قرارداد توکن محرمانه مورد نیاز است. می‌‌تواند ProofHashها را به عنوان دسته‌‌ای از شناسایی‌‌کنندگان اثبات‌‌های پیشتر تولید شده در نظر بگیرید.

تایید

 

ما دسته‌‌ای از توکن‌‌ها را ضرب کرده و مجوز NoteRegistery را برای خرج از قرارداد ERC20 اعطا می‌‌کنیم.

 

NoteRegistery درست مثل ERC20 باید مجوز کار با اثبات‌‌های AZTEC را دریافت کند. اعتراف می‌‌کنیم که این حوزه به پژوهش نیاز دارد و در حال جستجوی راه‌‌هایی برای هموارتر کردن توسعه UX هستیم.

انتقال

 

در نهایت به بخش بامزه کار می‌‌رسیم: قرارداد توکن محرمانه را برای انجام انتقال فرابخوانید. دقت داشته باشید که اولین تراکنش تنها توکن‌‌های ERC20 را تبدیل می‌‌کند، پس اشخاص ثالث می‌‌توانند بفهمند چند توکن انتقال پیدا کرده است. با این حال تراکنش دوم کاملا محرمانه است.

در اینجا یک نقشه ذهنی از آنچه انجام دادیم آورده‌‌ام:

 کدگذاری توکن محرمانه در اتریوم

هشدارها

  • این آموزش از یک نصب قابل اعتماد استفاده می‌‌کند که توسط تیم خودمان ساخته شده است. ما در آینده نزدیک اطلاعات بیشتری درباره تولید نصب‌‌های قابل اعتماد منتشر می‌‌کنیم.
  • پیش از اینکه انتقال محرمانه شکل بگیرد پیش‌‌شرط‌‌های بسیار زیادی وجود دارد. همانطور که پیشتر گفته شد این چیزی است که به دنبال بهبود و پیشرفت آن هستیم.
  • پایگاه کد AZTEC می‌‌تواند پس از این مقاله تحت تغییرات زیادی قرار بگیرد. اما نترسید، این مقاله از نسخه‌‌های دقیق پکیج npm برای پیشگیری از گسست استفاده می‌‌کند.
  • AZTEC از سالیدیتی نسخه ۰.۴.۲۴ استفاده می‌‌کنید، پس باید از نسخه‌‌ی سازگار OpenZeppelin که نسخه ۲.۰.۰ است استفاده کنید.
  • وقتی قراردادهای AZTEC تنها یک کاربر دارند، محرمانگی نشت می‌‌کند. اشخاص ثالث به دلیل ماهیت عمومی ERC20 می‌‌توانند ببینند چقدر پول واریز شده است. آنان می‌‌توانند آن را با کل مقداری که در قرارداد وجود دارد مقایسه کنند. هرچه کاربر بیشتری به قرارداد وارد شود محرمانگی بیشتر می‌‌شود.

پکیج‌‌ها

در اینجا لیست کاملی از چیزهای مربوط به AZTEC که از آن‌‌ها استفاده کردیم آورده شده است:

۱. Aztec.js

۲. @aztec/contact-address

۳. @aztec-contract-artifacts

۴. @aztec/dev-utils

۵[email protected]/protocol

کد منبع همه موارد بالا در mopnorepo ما وجود دارد. اگر سوالی دارید می‌‌توانید در توییتر ما بپرسید یا با ایمیل [email protected] در تماس باشید.

جمع‌‌بندی

امیدوارم از این آموزش لذت برده باشید و شما هم به اندازه من از تراکنش‌‌های محرمانه هیجان‌‌زده شده باشید. به این تراکنش‌‌هایی که برای تبدیل ۱۰ توکن ERC20 به شکل اثبات دانش صفر همه‌‌جانبه از اثبات AZTEC استفاده می‌‌کنند، نگاهی بیاندازید:

https://rinkeby.etherscan.io/tx/0x85ab17ab8290bad0d91501083c571a63e8715a0d425828df4c0b36accb11d077

https://rinkeby.etherscan.io/tx/0xf5dbaf357e09abf2d4151974bdfae5e20317043b155ff653b03fbd137c940a84

 

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.