چگونه یک توسعه‌دهنده بلاکچین شویم؟

چگونه یک توسعه‌دهنده بلاکچین شویم؟
چگونه یک توسعه‌دهنده بلاکچین شویم؟

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

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

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

خب، حال با گفتن مقدمات لازم، بیاییم موارد مورد نیاز را شروع کنیم:

گام اول – تبدیل شدن به یک توسعه‌دهنده بلاکچین – درک مفاهیم اولیه

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

  1. بلاکچین: بلاکچین زنجیره ای از بلوک است که در آن هر بلوک داده های دارای ارزش و بدون نظارت مرکزی است. از نظر رمزنگاری ایمن و تغییر ناپذیر است.
  2. عدم تمرکز: گفته می شود که بلاکچین غیر متمرکز است زیرا هیچ مرکزی برای نظارت بر هر چیزی وجود ندارد.
  3. مکانیسم اجماع: مکانیسمی که یک شبکه غیرمتمرکز از طریق آن به اجماع در برخی موارد می پردازد.
  4. ماینرها: کاربرانی که از قدرت محاسباتی خود برای حل معادلات بلاکچین استفاده می کنند.

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

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

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

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

بیایید مراحل عملی را که باید در اینجا انجام دهید بررسی کنیم:

  1. با اصطلاحات و واژگان مختلف آشنا شوید.
  2. در مورد جنبه های فنی تر این بلاکچین بخوانید.
  3. در مورد بیت کوین را بخوانید.

گام دوم – تبدیل شدن به یک توسعه‌دهنده بلاکچین – یادگیری فرآیند

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

بیایید مراحل عملی را که باید در اینجا انجام دهید بررسی کنیم:

  1. یاد بگیرید که چگونه صرافی ها کار می کنند.
  2. با کیف پول آشنا شوید.

گام سوم – تبدیل شدن به یک توسعه‌دهنده بلاکچین – کد بزنید

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

امنیت بالا

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

مدیریت منابع

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

کارایی بالا

بلاکچین باید همیشه در بالاترین توانایی های ممکن خود عمل کند ، اما برای این کار زبان انتخاب شده باید کاملاً متناسب باشد. مسئله این است که در بلاکچین وظایف خاصی وجود دارد که قابل توازن هستند در حالی که برخی از کارها وجود دارند که به صورت موازی قابل انجام نیستند.مثال خوبی از کار “موازی سازی” ، تأیید امضای دیجیتال است. تمام آنچه شما برای تأیید امضا نیاز دارید کلید ، معامله و امضا است. فقط با سه داده می توانید تأییدها را به روشی موازی انجام دهید.با این وجود ، تمام کارکردهای موجود در یک بلاکچین نباید به این صورت انجام شوند. به خود اجرای معامله فکر کنید. معاملات چندگانه به صورت موازی قابل انجام نیستند. برای جلوگیری از خطاهایی مانند خرج های دو برابر ، باید یک بار انجام شود. برخی از زبانها در عملیات موازی خوب هستند در حالی که برخی دیگر در عملیات غیر موازی خوب هستند.

رفتار قطعی

بیایم این موضوع را با یک مثال توضیح بدیم، فرض کنید:

A+B = C

این معادله در کجا و چگونه اجرا شدنش هیچگاه مهم نیست، همواره مقدار C برابر هستش با A + B.

الگوریتم‌های هش، همواره رفتار قطعی دارند (deterministic) به این معنی که همواره مقدار هش شده A برابر است با H(A) .

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

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

در حالی که C++ ممکن است کمی منسوخ به نظر برسد ، حقیقت این است که همه کارکردهایی را که در بالا توضیح دادیم به طرز شگفت انگیزی برآورده می کند. در حقیقت ، Satoshi Nakamoto کد منبع بیت کوین را در C++ نوشته است.

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

  1. Index: برای دانستن شماره بلاک
  2. Timestamp: برای دانستن زمان ایجاد بلاک
  3. Data: داده درون بلاک
  4. Previous Hash: هش شده‌ی بلاک قبلی
  5. Hash: هش خود بلاک

خب حالا بلاک رو تعریف می‌کنیم

const SHA256 = require("crypto-js/sha256"); 
class Block 
{ 
constructor(index, timestamp, data, previousHash = '') 
{ 
this.index = index; 
this.previousHash = previousHash; 
this.timestamp = timestamp; 
this.data = data; 
this.hash = this.calculateHash(); 
} 
calculateHash() 
{ 
return SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)).toString(); 
} 
}

در اولین خط، ما کتابخانه crypto-js را صدا زدیم، چون به طور پیش‌فرض ما sha256 در JS نداریم.

سپس ما constructor رو استفاده کردیم و یک مقادیری دادیدم. نکته‌ی مهم در این تکه کد، تابع calculateHash هستش. در یک بلاک ، تمام مطالب را می گیریم و آنها را هش می کنیم تا هش آن بلوک خاص را بدست آوریم. ما  از تابع JSON.stringify استفاده کردیم تا داده‌های بلوک را به رشته تبدیل کنیم و آن را هش کردیم.

خب در گام بعدی لازم هستش که این بلاک رو از طریق بلاکچین به هم‌دیگه وصل کنیم:

class Blockchain
{
 constructor() 
{ 
this.chain = [this.createGenesisBlock()]; 
} 
createGenesisBlock() 
{
 return new Block(0, "01/01/2020", "Genesis block", "0"); 
} 
getLatestBlock() 
{ 
return this.chain[this.chain.length - 1]; 
} 
addBlock(newBlock) { 
newBlock.previousHash = this.getLatestBlock().hash; 
newBlock.hash = newBlock.calculateHash(); 
this.chain.push(newBlock); 
} 
isChainValid() 
{ 
for (let i = 1; i < this.chain.length; i++)
{ 
const currentBlock = this.chain[i]; 
const previousBlock = this.chain[i - 1]; 
if (currentBlock.hash !== currentBlock.calculateHash()) { 
return false; 
} 
if (currentBlock.previousHash !== previousBlock.hash) 
{ 
return false; 
} 
} 
return true; 
} 
}

خب، شما بلاکچین خودتون رو ساختین. حالا باید بریم سراغ توضیح کد بالا:

بخش اول، بلاک اولیه

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

بخش دوم، افزودن بلاک‌ها

ما در ابتدا باید بدانیم آخرین بلاک چی هستش. با تابع getLatestBlock آخرین بلاک را بازیابی می‌کنیم و سپس با تابع addBlock بلاک جدید را می‌سازیم و به chain خود push می‌کنیم.

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

عملکرد بلاک - توسعه‌دهنده بلاکچین
عملکرد بلاک – توسعه‌دهنده بلاکچین

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

بخش سوم، چک کردن بلاک‌ها

در این بخش، ما از تابع isChainValid استفاده می‌کنیم. در این تابع یک حلقه for وجود دارد که بلاک‌ها را از خانه ۱ الی آخر چک می‌کند. (شروع بلاکچین از خانه ۰ هستش که ما در ابتدا پر کردیمش)

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

let CoingramCoin = new Blockchain(); 
CoingramCoin.addBlock(new Block(1, "20/01/2010", { amount: 4 })); 
CoingramCoin.addBlock(new Block(2, "20/01/2019", { amount: 8 }));

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

گام سوم – تبدیل شدن به یک توسعه‌دهنده بلاکچین – قرارداد‌های هوشمند

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

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