آرتا رسانه

جنگو با بلاکچین

چگونه با ادغام جنگو با بلاک چین یک برنامه غیرمتمرکز بسازیم؟

راهنمای موثری برای توسعه دهندگان پایتون برای شروع سفر برنامه نویسی بلاک چین برنامه های خود.

هرگز نمی توان این واقعیت را انکار کرد که در زمان کار با توسعه DAPP، یکی از چالش های اصلی در ارتباط قرارداد هوشمند با بخش فرانت وب سایت است.

موثرترین روش بدون شک استفاده از کتابخانه Web3 (Python یا Javascript) برای انجام این کار برای شماست. در حالی که انجام این بخش برای یک توسعه‌دهنده جاوا اسکریپت بسیار آسان‌تر است (از آنجایی که اینترنت مملو از آموزش‌های Web3.js است)، انجام همان کار برای یک توسعه‌دهنده پایتون می‌تواند به همان اندازه دردسرساز باشد.

آیا باید Web3.py را انتخاب کنید؟

اگرچه ناگفته نماند که انجمن Web3.js به مراتب بزرگتر است اما Web3.py، از سوی دیگر، با بیش از 1.5 هزار ستاره در Github، 133 مشارکت کننده و همچنین استفاده از برخی APIهای بسیار بالا Ethereum. در حال حاضر به اندازه کافی بالغ و بدون شک آماده تولید است.

این به سادگی به این معنی است که زمان آن رسیده است که توسعه دهندگان پایتون سفر توسعه DAPP مبتنی بر بلاک چین خود را با Web3.py آغاز کنند.

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

بنابراین، اگر شما هم یک توسعه‌دهنده پایتون هستید و می‌خواهید برنامه‌های غیرمتمرکز روی بلاک چین را با استفاده از پایتون توسعه دهید، این مقاله برای شما یک مقاله ضروری خواهد بود. با این گفته، بیایید شروع کنیم.

ابزار مورد نیاز

قبل از شروع، بیایید بفهمیم که چگونه جنگو را با بلاک چین ادغام کردم و یک برنامه غیرمتمرکز (DAPP) ساختم؟ ما برای این پروژه نیاز خواهیم داشت.

Remix IDE: Remix . یک ابزار متن باز است که نه تنها به شما امکان می دهد قراردادهای هوشمند خود را بنویسید، بلکه از آزمایش، اشکال زدایی و همچنین استقرار قراردادهای هوشمند نیز پشتیبانی می کند. برای اطلاعات بیشتر اسناد رسمی را بخوانید:

https://remix-ide.readthedocs.io/en/latest/.

Infura : Infura بدون شک ابزاری است که زندگی ما را بسیار ساده تر کرده است. به عبارت ساده تر، از مجموعه ای از ابزارها تشکیل شده است که به هر کسی اجازه می دهد با بلاک چین اتریوم تعامل داشته باشد (که در غیر این صورت یک کار بسیار دردسرساز است)

جنگو 3.0: خب، این چارچوب پایتون است که ما روی آن کار خواهیم کرد

    Installation: $ python -m pip install Django

Web3.py: این ابزاری است که به ما امکان می دهد با قرارداد هوشمند صحبت کنیم و عملکردهای آن را فراخوانی کنیم. برای اطلاعات بیشتر اسناد رسمی را بخوانید:

https://web3py.readthedocs.io/en/stable/quickstart.html

    Installation: $ pip3 install web3

بیایید به بلاک چین وصل شویم

برای شروع، محیط Remix را مطابق شکل زیر به Injected Web3 تغییر دهید و به Ropsten Network در Metamask متصل شوید.

قبل از شروع تعامل واقعی web3.py، اجازه دهید ابتدا یک اتصال ایمن و قابل اعتماد با بلاک چین راه اندازی کنیم.

بدون Infura، حتی فکر کردن به انجام این کار به معنای واقعی کلمه یک کابوس بود. با این حال، در سناریوی فعلی بسیار ساده است زیرا تنها چیزی که نیاز دارید یک کلید API Infura است. برای دریافت کلید API- Get infura API Key این مراحل را دنبال کنید

هنگامی که کلید API را دریافت کردید و تمام الزامات ذکر شده در بالا را نصب کردید، همه ما برای مرحله بعدی آماده هستیم.

توجه: برای دنبال کردن این پروژه، ممکن است بخواهید یک Infura Key برای شبکه ROPSTEN دریافت کنید.

به WEB3.PY وصل شوید و تعامل را آغاز کنید

در حالی که این کد قبلاً کاملاً توضیحی است، در اینجا چیز زیادی برای درک وجود ندارد. این فقط یک تنظیم اولیه است که در آن چند فاکتور ضروری مانند،

آ. کلیدهای خصوصی و عمومی برای امضای تراکنش ها

ب.ایجاد یک HTTPPprovider برای web3

ج. ذخیره ABI قرارداد و همچنین آدرس.

د. ایجاد یک نمونه قرارداد با عبور پارامترهای ABI و Address.

بسيار خوب! اکنون ما با قرارداد هوشمند خود یک راه اندازی قابل اعتماد داریم. با این حال، قبل از درک نحوه برقراری تماس با قرارداد هوشمند، اجازه دهید ابتدا بفهمیم چه نوع تماس هایی می توانیم در وهله اول داشته باشیم.

الف. از قرارداد هوشمند چه می خواهید؟

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


آ. فراخوانی تابع دریافت کننده از قرارداد (راه طولانی):

در حالی که این ممکن است کمی پیچیده به نظر برسد، اما ما هر تابع گیرنده از قرارداد را به این صورت می نامیم.

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

ب. فراخوانی یک تابع ساده Read_Only (به روش ساده):

یک تابع read_only در قرارداد می تواند به عنوان تابعی دیده شود که فقط یک داده خاص را هنگام فراخوانی برمی گرداند.

به عنوان مثال، این تابع get_count با کلمه کلیدی view، تنها تعداد کل پست ها را هنگام فراخوانی برمی گرداند.

    Solidity Code:

    function get_count() view public returns(uint){
    return postCount;
    }

برای فراخوانی چنین توابعی باید یک خط کد ساده را پیاده سازی کنیم.

خوب، این بسیار ساده بود و این تنها کاری است که باید انجام دهیم.

ج. انجام معامله با یک تابع

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

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

بیایید این تابع را از قرارداد هوشمند در نظر بگیریم:

    Solidity Code:

    function createPost(string memory _content) public

    {
    require(bytes(_content).length > 0);
    postCount++;
    posts[postCount] = Post(postCount,_content,0,msg.sender);
    emit PostCreated(postCount,_content,0,msg.sender);
    }

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

بنابراین چگونه می توان این معامله را انجام داد؟

خوب، این یک موضوع پیچیده است. پس بیایید آن را تجزیه کنیم.

همانطور که خط 259 نشان می دهد، ما تابع createPost را صدا نمی زنیم، بلکه در حال ساخت یک تراکنش هستیم. با این حال، همانطور که می بینید، توابع buildTransaction در فرهنگ لغت داده ها به عنوان یک آرگومان استفاده می کند که درک آن بسیار ضروری است.

chainId: به سادگی نشان دهنده شماره شبکه ای است که ما به آن متصل هستیم، زیرا هر شبکه اتریوم دارای شناسه زنجیره ای خاص خود است. در این مورد 3 نشان دهنده شبکه Ropsten است.

گاز: از آنجایی که ما از قبل می دانیم که هر تراکنش نیاز به گاز دارد تا اجرا شود. این پارامتر ساده نشان دهنده بالاترین مقدار گازی است که ما حاضریم برای اجرای تراکنش خود بپردازیم.

gasPrice: قیمت گاز نشان دهنده مقدار گازی است که باید در Wei برای هر واحد گاز پرداخت شود

nonce: این به سادگی تعداد تراکنش های قبلی انجام شده توسط کاربر را حفظ می کند.

هنگامی که این تراکنش را با تمام پارامترهای پر شده مطابق با انتخاب خود می سازیم، اکنون زمان امضای این تراکنش با خود تابع signTransaction است. این تابع تراکنش و همچنین کلید خصوصی را به عنوان آرگومان می گیرد.

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

پرداخت با اتر

ارسال اتر به یک قرارداد یا یک حساب دیگر شامل مراحل مشابهی است، همانطور که قبلا دیده شد، مانند ساخت یک تراکنش، امضای آن با کلید خصوصی و همچنین دریافت رسید تایید.

با این حال، شامل دو زمینه اضافی مانند،

به: نماد دریافت کننده پرداخت است

ارزش: این مبلغی است که باید منتقل شود.

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

ه. فراخوانی یک رویداد

خوب، در وهله اول یک رویداد چیست؟

رویدادها در Solidity ممکن است به‌عنوان رکوردهای بلادرنگ در قالب گزارش‌های تراکنش دیده شوند که نه تنها در بلاک چین ذخیره می‌شوند، بلکه می‌توانند در هر زمان معینی با کمک آدرس قرارداد به آنها دسترسی داشته باشند.

اگرچه، من از هیچ رویدادی در کد خود استفاده نکرده‌ام، اسناد رسمی Web3.py روشی واضح برای فراخوانی رویدادهای شما را نشان می‌دهد.

myContract = web3.eth.contract(address=contract_address, abi=contract_abi)
tx_hash = myContract.functions.myFunction().transact()
receipt = web3.eth.getTransactionReceipt(tx_hash)
myContract.events.myEvent().processReceipt(receipt)

بسيار خوب. اینها ضروری ترین تماس هایی هستند که ممکن است بخواهید هنگام تعامل با قرارداد هوشمند خود از آنها استفاده کنید.اگرچه ما کاملاً به وضوح روش های توصیه شده برای تعامل با یک قرارداد با استفاده از web3.py و فراخوانی عملکرد خاص را درک کرده ایم، هنوز آخرین چیزی وجود دارد که باید فهمیده شود، یعنی بعد از بازگشت پاسخ قرارداد چه کاری انجام دهیم؟از آنجایی که ما از جنگو وب فریمورک استفاده می‌کنیم، نیاز بسیار زیادی برای ما وجود دارد که بدانیم چگونه پاسخ‌های قرارداد را مدیریت کنیم و طبق نیاز خود از آن استفاده کنیم.

رسیدگی به پاسخ های قرارداد در جنگو

2 راه ممکن وجود دارد که قرارداد ممکن است پاسخ دهد.

اول، ممکن است یک تراکنش انجام داده باشید (چیزی را به بلاک چین اضافه کنید یا پرداختی انجام دهید). در این صورت، به سادگی رسید تراکنش را پس خواهید گرفت. هیچ چیز دیگری وجود ندارد که بخواهید با آن انجام دهید زیرا این فقط تأییدی است که تراکنش شما انجام شده است.

 ثانیا، ممکن است تابعی را فراخوانی کنید که لیستی از داده ها را به شما برمی گرداند. خوب، این چیزی است که ما در واقع به آن علاقه داریم

بنابراین بیایید مورد دوم را با کمک کدهایی که برای مدیریت یک موقعیت مشابه نوشتم درک کنیم.

این به معنای واقعی کلمه یک عملکرد ساده است، اینطور نیست؟

در اینجا، تنها کاری که ما انجام دادیم فراخوانی تابع get_posts_from_contract() بود. این تابع چه کاری انجام می دهد؟ اگرچه کاملاً خود توضیحی است، اما خودتان نگاهی بیندازید.

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

بنابراین، وقتی تابع posts() تابع get_post_from_smart_contract() را فراخوانی می‌کند، اساساً یک لیست تودرتو از داده‌ها را دریافت می‌کند که چیزی شبیه به این است.

خیلی زشته، درسته؟

اکنون مهم ترین سوالی که مطرح می شود این است که چگونه این لیست را در قالب خود مدیریت کنیم؟
بیایید به بخش قالب در جنگو برویم

از آنجایی که داده های قرارداد یک لیست تودرتو هستند، کارآمدی مدیریت لیست داده ها در قالب جنگو به این صورت است:

{% for data in data_from_views.py %}

<h1>{{ data.0 }}</h2><h1>{{ data.1 }}</h2>

{% endfor %}

و این دقیقاً همان روشی است که من آن را در قالب های خود مدیریت کردم. کد زیر نشان داده شده است:

بیایید جمع بندی کنیم

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

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

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

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آرتا رسانه
آرتا رسانه
دیجیتال مارکتینگ چیست؟
Loading
/
پیمایش به بالا