Follow Us
Facebooktwitteryoutube
YouTube
Promo
banner
Promo
banner

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

اگر می خواهید نحوه ساخت بلاکچین را بیاموزید ، پس به جای درست آمده اید. بیایید غواصی کنیم و یاد بگیریم که چگونه می توانید بلاکچین در پایتون بسازید.

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

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

همچنین می توانید مقاله را ذخیره کرده و آن را به عنوان “چگونه بلاکچین خود را بسازیم” علامت گذاری کنید. باور کنید این مقاله در طولانی مدت به شما کمک خواهد کرد.

هرگز در مورد بلاکچین چیزی نشنیده اید؟ سپس دوره رایگان 101Blockchain را بررسی کنید. اگر می خواهید شغل خود را پیش ببرید ، سپس دوره Certified Enterprise Blockchain را که می آموزید چگونه بلاکچین سازمانی کار می کند ، بررسی کنید. بیایید شروع کنیم.

آیا شما در Blockchain مبتدی هستید؟ در دوره رایگان Blockchain ثبت نام کنید و اکنون سفر Blockchain خود را آغاز کنید.

نحوه ساخت بلاکچین

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

الزام

شرط اصلی برای پیروی از راهنما ، دانستن نحوه کدگذاری است. اگر در زندگی خود هرگز کدگذاری نکرده اید ، پس این راهنما مناسب شما نیست. من توصیه می کنم دوره های مختلف سطح مبتدی را که به صورت آنلاین در دسترس هستند بررسی کنید. من برای بهترین تجربه یادگیری EdX ، Udacity و Coursera را توصیه می کنم.

شما قبلاً رمزگذار هستید؟ سپس ، شما باید در مورد پایتون اساسی بدانید. همچنین ، به شما کمک می کند تا آموزش “How To Build A Blockchain” را دنبال کنید.

اکنون بخوانید: راهنمای نهایی Blockchain حد نصاب

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


 اگر پایتون را نمی شناسید ، نگران نباشید زیرا برداشتن آن آسان است. بررسی کنید اسناد پایتون برای شروع.

ما قصد داریم از Python 3.6+ برای آموزش استفاده کنیم. اگر تصمیم دارید از نسخه های دیگر پایتون استفاده کنید ، ممکن است مجبور شوید بیشتر تحقیق کنید تا کد کار کند. برای اهداف آموزشی ، توصیه می کنم نسخه ای را که استفاده می کنم نصب کنید.

در آخر ، شما همچنین باید در مورد HTTP بدانید – پروتكلی كه برای برقراری ارتباط بین دو طرف در اینترنت استفاده می شود.

نصب پایتون با استفاده از pip

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

$ pip install Flask == 0.12.2 درخواست == 2.18.4

اگر از محیط ویندوز استفاده می کنید ، می توانید مستقیماً به python.org بروید و آخرین نسخه Python را بارگیری کنید.

در مورد من ، من Python 3.8.1 را بارگیری کردم – جدیدترین نسخه در زمان نگارش آموزش.

برای IDE ، استفاده از PyCharm را ترجیح می دهم. من از نسخه Python Community برای آموزش استفاده می کنم. شما آزاد هستید که از هر IDE دلخواه خود استفاده کنید. یکی دیگر از گزینه های عالی Visual Studio Code – یک محیط توسعه یکپارچه و منبع باز رایگان است.

آخرین ابزاری که می خواهید به آن نیاز داشته باشید Postman است – مشتری HTTP. همچنین می توانید از cURL استفاده کنید.

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

Blockchain مجدداً بازدید شد

قبل از اینکه برویم و بلاکچین را بسازیم ، باید ایده خود را در مورد بلاکچین تازه کنیم. این به ما کمک می کند تا در همان صفحه باقی بمانیم.

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

همچنین بخوانید: Blockchain برای مبتدیان: راهنمای شروع کار

شروع کار با ساخت بلاکچین

با تمام نصب های پیش شرط انجام شده ، ما اکنون آماده هستیم تا با آموزش “نحوه ساخت بلاکچین” شروع به کار کنیم.

برای شروع ، باید یک فایل blockchain.py ایجاد کنید.

1. ایجاد بلاکچین

اولین قدم ساختن یک راه حل کاربردی بلاکچین است. در ابتدا ، ما باید یک کلاس Blockchain ایجاد کنیم. در آنجا ما سازنده ای ایجاد خواهیم کرد که لیست زنجیره ای و معاملات را آغاز می کند. لیست زنجیره ای بلاکچین ما را ذخیره می کند ، در حالی که تراکنش ها در آرایه فعلی_ تراکنش ها ذخیره می شوند.

def __init __ (self): self.chain = [] self.content_transactions = []

بعد ، ما باید یک تابع new_block ایجاد کنیم که برای ایجاد بلوک های جدید استفاده شود و سپس آنها را به زنجیره موجود اضافه کنیم. کد مربوط به عملکرد new_block به شرح زیر است:

def new_block (self): # این تابع بلوک های جدیدی ایجاد می کند و سپس به زنجیره عبور موجود اضافه می شود

روش new_transcaction تراکنش جدیدی ایجاد کرده و سپس تراکنش را به لیست معاملات موجود موجود اضافه می کند.

def new_transaction (self): # این تابع تراکنش جدیدی را به تراکنش های موجود موجود اضافه می کند. ما همچنین یک تابع هش داریم که برای ایجاد هش یک بلوک استفاده می شود. staticmethod def hash (بلوک): # برای هش کردن بلوک استفاده می شود

آخرین عملکردی که ما می خواهیم last_block را ایجاد کنیم. برای فراخوانی آخرین بلوک در زنجیره استفاده می شود.

همچنین می توانیم در اینجا سه ​​عملکرد دیگر ایجاد کنیم.

  • Register_node () → برای ثبت گره جدید و افزودن آن به شبکه
  • valid_proof () ensure اطمینان حاصل خواهد کرد که اگر یک بلوک ارسالی به زنجیره مشکل را حل کند
  • valid_chain () → با این کار بلوک های بعدی در زنجیره معتبر هستند یا خیر.

طرح اولیه blockchain.py به شرح زیر است.

کلاس Blockchain (شی): def __init __ (self): self.chain = [] self.current_transactions = [] def new_block (self): # این عملکرد بلوک های جدیدی ایجاد می کند و سپس به زنجیره عبور موجود def_ new_transaction (self) اضافه می شود: # این تابع تراکنش جدیدی را به گذرگاه معاملات موجود موجود اضافه می کندstaticmethod def hash (بلوک): # مورد استفاده برای هش کردن بلوکproperty def last_block (self): # تماس گرفته و آخرین بلوک گذرگاه زنجیره را برمی گرداند

کلاس Blockchain کل زنجیره را مدیریت می کند. تعاریف تعریف شده در کلاس اقدامات مختلف درون زنجیره بلوک را مدیریت می کند.

بیایید هر یک از روش های زیر را مرور کنیم.

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

ساختار یک بلوک

یک بلوک شامل اطلاعات حیاتی در مورد معاملات و زنجیره ها است. هر بلوک روی زنجیره حاوی اطلاعات زیر است

  • فهرست مطالب
  • مهر زمان به زمان یونیکس
  • لیست معاملات
  • اثبات
  • هش بلوک قبلی

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

اکنون بخوانید: چرا بلاکچین جهان را تغییر خواهد داد?

افزودن معامله به یک بلوک

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

def new_transaction (self): # این عملکرد یک معامله جدید را به معاملات موجود اضافه می کند """این یک معامله جدید ایجاد می کند که به بلوک بعدی ارسال می شود. این شامل سه متغیر شامل فرستنده ، گیرنده و مقدار است """ self.current_transactions.append ({‘فرستنده’: فرستنده ، ‘گیرنده’: گیرنده ‘مقدار’: مقدار ،}) بازگشت self.last_block [‘index’] + 1 همانطور که مشاهده می کنید ، به سادگی لیست معاملات فعلی را با یک شی ای که شامل سه متغیر است ، فرستنده ، گیرنده ، مقدار.

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

ایجاد بلوک های جدید

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

self.new_block (هش_ قبلی = 1 ، اثبات = 100)

این خط باید به کلاس Blockchain شما اضافه شود.

برای روش new_block () ، باید دو متغیر را به عنوان پارامتر ارسال کنید. این شامل اثبات و هش_ قبلی است.

حال ، بیایید نگاهی به روش new_block () در زیر بیندازیم.

def new_block (self، proof، previous_hash = None): # این عملکرد بلوک های جدیدی ایجاد می کند و سپس به زنجیره موجود اضافه می شود """این روش حاوی دو پارامتر ضد هش قبلی است""" block = {‘index’: len (self.chain) + 1، ‘timestamp’: time ()، ‘proof’: proof، previous_hash: previous_hash یا self.hash (self.chain [-1])،}

# لیست معاملات فعلی را خالی تنظیم کنید.

   self.current_transactions = [] self.chain.append (بلوک) بلوک بازگشت

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

اکنون بخوانید: راهنمای مبتدیان: Ethereum Classic چیست?

همچنین اجازه دهید روش last_block را در زیر تعریف کنیم.

@ویژگی

def last_block (خود):

# زنگ می زند و آخرین بلوک زنجیره را برمی گرداند

بازگشت خود زنجیره ای [-1]

همچنین کد مربوط به روش hash () به شرح زیر است:

 

def hash (بلوک): # برای هش کردن بلوک استفاده می شود """کد زیر یک هش بلوک SHA-256 ایجاد می کند و همچنین از سفارش فرهنگ لغت اطمینان حاصل می کند""" block_string = json.dumps (block، sort_keys = True) .encode () hashlib.sha256 (block_string) را برمی گرداند .hexdigest () اگر همه کدها را با هم ترکیب کنید ، blockchain.py زیر را خواهیم داشت. در زیر آن را بررسی کنید.

 

کلاس Blockchain (شی): def __init __ (خود): self.chain = [] self.current_transactions = [] self.new_block (قبلی_هشک = 1 ، اثبات = 100) def new_block (خود ، اثبات ، قبلی_ هش = هیچ): # این تابع بلوک های جدید ایجاد می کند و سپس به زنجیره موجود اضافه می شود """این روش حاوی دو پارامتر ضد هش قبلی است""" block = {‘index’: len (self.chain) + 1، ‘timestamp’: time ()، ‘proof’: proof، previous_hash: previous_hash or self.hash (self.chain [-1])،} # Set لیست معاملات فعلی را خالی کنید. self.current_transactions = [] self.chain.append (بلوک) بازگشت بلوک def new_transaction (self): # این عملکرد یک معامله جدید را به معاملات موجود اضافه می کند """این یک معامله جدید ایجاد می کند که به بلوک بعدی ارسال می شود. این شامل سه متغیر شامل فرستنده ، گیرنده و مقدار است """ self.current_transactions.append ({‘فرستنده’: فرستنده ، ‘گیرنده’: گیرنده ، ‘مقدار’: مقدار ،}) بازگشت self.last_block [‘index’] + 1staticmethod def hash (بلوک): # برای هش کردن استفاده می شود یک بلوک """کد زیر یک هش بلوک SHA-256 ایجاد می کند و همچنین از سفارش فرهنگ لغت اطمینان حاصل می کند""" block_string = json.dumps (block، sort_keys = True) .encode () hashlib.sha256 (block_string) .hexdigest () -1]

اثبات اجرای کار

گام بعدی ما در ساخت blockchain.py اجرای اثبات کار است.

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

اثبات کار Bitcoin به Hashcash معروف است. این اطمینان حاصل می کند که اجماع شبکه بیت کوین همانطور که در نظر گرفته شده است کار می کند.

همچنین بخوانید: الگوریتم های اجماع: ریشه فناوری Blockchain

بیایید روش proof_of_work () را تعریف کنیم. این روش بخشی از کلاس Blockchain خواهد بود.

ضد اثبات کار (خود ، آخرین_آزمایش): """این روش جایی است که شما الگوریتم اجماع را اجرا می کنید. به دو پارامتر نیاز دارد از جمله خود و last_proof""" اثبات = 0 در حالی که self.valid_proof (last_proof ، proof) نادرست است: proof + = 1 proof proofstaticmethod def valid_proof (last_proof، proof): """این روش اعتبار بلوک را تأیید می کند""" حدس بزن = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (حدس بزن) .hexigest () بازگشت guess_hash [: 4] == "0000"

اولین روش اثبات_کار ساده است. این به سادگی مقدار 0 را تنظیم می کند و سپس حلقه while را اجرا می کند تا روش valid_proof اجرا شود. اگر نادرست است ، یکی را به اثبات اضافه کنید.

با افزودن صفرهای بیشتر می توانید سختی هش را افزایش دهید.

این ما را به انتهای Blockchain.py ما هدایت می کند. کد ما به صورت زیر است.

کلاس Blockchain (شی): def __init __ (خود): self.chain = [] self.current_transactions = [] self.new_block (قبلی_هشک = 1 ، اثبات = 100) def proof_of_work (خود ، آخرین_آزمایش): """این روش جایی است که شما الگوریتم اجماع را اجرا می کنید. به دو پارامتر نیاز دارد از جمله خود و last_proof""" اثبات = 0 در حالی که self.valid_proof (last_proof ، proof) نادرست است: proof + = 1 proof proofstaticmethod def valid_proof (last_proof، proof): """این روش اعتبار بلوک را تأیید می کند""" حدس بزن = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (حدس بزن) .hexigest () بازگشت guess_hash [: 4] == "0000" def new_block (self، proof، previous_hash = None): # این عملکرد بلوک های جدیدی ایجاد می کند و سپس به زنجیره موجود اضافه می شود """این روش حاوی دو پارامتر ضد هش قبلی است""" block = {‘index’: len (self.chain) + 1، ‘timestamp’: time ()، ‘proof’: proof، previous_hash: previous_hash or self.hash (self.chain [-1])،} # Set لیست معاملات فعلی را خالی کنید. self.current_transactions = [] self.chain.append (بلوک) بازگشت بلوک def new_transaction (self): # این عملکرد یک معامله جدید را به معاملات موجود اضافه می کند """این یک معامله جدید ایجاد می کند که به بلوک بعدی ارسال می شود. این شامل سه متغیر شامل فرستنده ، گیرنده و مقدار است """ self.current_transactions.append ({‘فرستنده’: فرستنده ، ‘گیرنده’: گیرنده ، ‘مقدار’: مقدار ،})

 

Return self.last_block [‘index’] + 1

staticmethod

Def hash (بلوک):

# برای هش کردن یک بلوک استفاده می شود

“” “کد زیر یک هش بلوک SHA-256 ایجاد می کند و همچنین از سفارش فرهنگ لغت اطمینان حاصل می کند” “”

block_string = json.dumps (block ، sort_keys = True). کد ()

بازگشت hashlib.sha256 (block_string) .hexdigest ()

@ویژگی

def last_block (خود):

# زنگ می زند و آخرین بلوک زنجیره را برمی گرداند

بازگشت خود زنجیره ای [-1]

2. یکپارچه سازی API

عالی است ، ما یک بلاکچین ایجاد می کنیم که کار می کند! اکنون ، برای استفاده موثر از آن ، باید یک API (Application Programming Interface) ایجاد کنیم.

برای انجام این کار ، ما قصد داریم از محبوب Python Framework: Flask استفاده کنیم.

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

برای ایجاد API ، ابتدا باید اطمینان حاصل کنیم که بلاکچین ما می تواند درخواست ها را از طریق HTTP بپذیرد. برای انجام این کار ، ما باید روش های بیشتری ایجاد کنیم.

اکنون ، ما blockchain.py را اصلاح خواهیم کرد.

# ایجاد برنامه گره برنامه = فلاسک (__ نام __) node_identifier = str (uuid4 ()). جایگزین (‘-‘ ، ”) # شروع بلاکچین بلاکچین = بلاکچین () @ app.route (‘/ مال من’ ، روشها = [ ‘GET’]) def mine (): بازگشت "استخراج یک بلوک جدید" @ app.route (‘/ تراکنش ها / جدید’ ، روش ها = [‘POST’]) def new_transaction (): بازگشت "افزودن یک معامله جدید" @ app.router (‘/ chain’، Methods = [‘GET’]) def full_chain (): response = {‘chain’: blockchain.chain، ‘length’: len (blockchain.chain)} بازگشت jsonify (پاسخ) ، 200 اگر __name__ == ‘__main__’: app.run (میزبان ="0.0.0.0", بندر = 5000)

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

  • / نقطه پایانی مین
  • / معاملات / نقطه پایانی جدید
  • / نقطه پایانی زنجیره ای

سرانجام ، ما سرور را روی پورت 5000 اجرا می کنیم.

این برنامه اکنون تقریباً ایجاد شده است. تمام کاری که ما باید انجام دهیم ایجاد روش کلاس معاملات است.

@ app.route (‘/ تراکنش ها / جدید’ ، روش ها = [‘POST’]) def new_transaction (): Values ​​= request.get_json () # بررسی وجود داده های مورد نیاز یا عدم نیاز = = ‘ارسال کننده’ ، ‘ گیرنده ‘،’ مقدار ‘] اگر نه همه (مقادیر k برای k در مورد نیاز): بازگشت “مقادیر از دست رفته” ، 400 # ایجاد یک شاخص معامله جدید = blockchain.new_transaction (مقادیر [“فرستنده”] ، مقادیر [“گیرنده” ، مقادیر [‘مقدار’]]) پاسخ = {‘پیام’: f’Transaction قرار است به بلوک شماره اضافه شود {index} ‘} بازگشت jsonify (پاسخ) ، 201

همچنین بخوانید: این چیزی است که شما باید در مورد اثبات بلاکچین کار بدانید

نقطه پایان استخراج

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

  • اثبات محاسبه کار
  • بلاکچین جدید را جعل کنید و سپس آن را به زنجیره اضافه کنید
  • به کارگر معدنچی پاداش دهید

@ app.route (‘/ mine’، Methods = [‘GET’]) def min (): """در اینجا ما اثبات کار الگوریتم کار را ارائه می دهیم""" last_block = blockchain.last_block last_proof = last_block [‘proof’] proof = blockchain.proof_of_work (last_proof) # پاداش ماینر برای سهم خود. 0 مشخص می کند سکه جدید blockchain.new_transaction استخراج شده است (فرستنده ="0", گیرنده = شناسه_نود ، مقدار = 1 ،) # اکنون بلوک جدید ایجاد کرده و آن را به زنجیره اضافه کنید previous_hash = blockchain.hash (last_block) block = blockchain.new_block (اثبات ، قبلی_hash) پاسخ = {‘پیام’: ‘بلوک جدید جعل شده است ‘،’ index ‘: block [‘ index ‘]،’ تراکنش ‘: block [‘ تراکنش ‘]،’ proof ‘: block [‘ proof ‘]،’ previous_hash ‘: block [‘ previous_hash ‘]} بازگشت jsonify (پاسخ) ، 200

اکنون بخوانید: راهنمای مبتدیان: AION چیست؟ شبکه جهانی بلاکچین نسل سوم

3. تعامل بلاکچین

آخرین مرحله تعامل با بلاکچین است. ما قصد داریم از Postman برای تعامل با شبکه بلاکچین با استفاده از API که ایجاد کردیم استفاده کنیم.

کد زیر را روی کنسول Python اجرا کنید

پایتون blockchain.py

نتیجه

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

بنابراین ، نظر شما در مورد بلاکچین و اجرای آن چیست؟ نظر خود را در زیر وارد کنید و به ما اطلاع دهید.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Adblock
detector