بسته

چطور با Javascript یک توکن بیت کوین بسازیم؟

این مقاله روشی ساده و قابل توسعه برای ساخت توکن در بیت کوین (Bitcoin) را توضیح می دهد. ما نحوه نوشتن قرارداد هوشمند توکن در جاوا اسکریپت و نحوه ضرب و ارسال توکن ها را توضیح می دهیم.

Smart Contract یا قرارداد هوشمند

ما از سیستم قرارداد هوشمند Bitcoin Computer برای BSV و BCH (موجود در npm) استفاده می کنیم. یک قرارداد هوشمند برای Bitcoin Computer یک کلاس Javascript ES6 است.

 

class Token {
  constructor(supply, name, pubKey) {
    this.coins = supply
    this.name = name
    this._owners = [pubKey]
  }
  send(amount, to) {
    if (this.coins < amount) throw new Error()
    this.coins -= amount
    return new Token(amount, this.name, to)
  }
}

سازنده کلاس Token یک شی ایجاد می کند که منبع و نام توکن را ذخیره می کند. ویژگی _owners یک کلمه کلیدی در قراردادهای هوشمند است و تنظیم آن تضمین می کند که فقط دارنده کلید خصوصی مربوط به pubKey می تواند در ابتدا توکن ارسال کند.

تابع Send بررسی می‌کند که آیا مقدار توکن‌ها در شی فعلی برای پوشش تعداد توکن‌های ارسالی کافی است یا خیر. اگر وجوه ناکافی شناسایی شود، خطا ایجاد می کند. در غیر این صورت، مقدار توکن های موجود در شی فعلی را بر اساس تعداد کاهش می دهد. این روش یک شی Token جدید را با amount توکن که متعلق به گیرنده است برمی‌گرداند.

 

تولید یک توکن

تولید یک توکن به معنای پخش یک تراکنش است که ایجاد توکن را ثبت می کند. برای boradcasting تراکنش، با نمونه سازی کتابخانه Bitcoin Computer، یک کیف پول ایجاد می کنیم.

 

import Computer from 'bitcoin-computer'
const seed = <some BIP39 seed>
const computer = new Computer({ seed }))

شی Computer که برگردانده می شود می تواند اشیاء جاوا اسکریپت را از طریق روش جدید خود در بلاک چین بیت کوین مستقر(deploy) کند. ایجاد شی جدید در یک تراکنش ثبت می شود.

 

import Token from './token'
const to = '03223d...46d06c8dfe'
const supply = 1000000
const name = 'Bitcoin Token'
const token = await computer.new(Token, [supply, name, to])

متد computer.new یک شی توکن را برمی گرداند که دارای تمام خصوصیات و متدهای کلاس Token است. ما توکن را یک شی هوشمند می نامیم زیرا وضعیت آن در بلاک چین پشتیبان گیری می شود. هر شی هوشمند دارای یک ویژگی _id است که در طول چرخه عمر خود ثابت می ماند. خروجی را در جایی که شی مستقر شده است رمزگذاری می کند.

ارسال یک توکن

متد send یک شیء هوشمند جدید sentToken را با مقدار معین توکن ایجاد می کند. فراخوانی متد روی یک شی هوشمند در یک تراکنش ثبت می‌شود، بنابراین باید منتظر فراخوانی تابع برای امضا و ارسال آن باشیم.

 

const amount = 50000
const to = '03223d...46d06c8dfe'
const sentToken = await token.send(amount, to)

شی sendToken نیز یک شی هوشمند است که متعلق به to است. علاوه بر ویژگی _id، هر شی هوشمند دارای ویژگی _rev نیز می باشد که خروجی را در جایی که آخرین وضعیت آن ثبت می شود، رمزگذاری می کند. این _rev می تواند از طریق ایمیل، وب سایت یا هر وسیله دیگری برای گیرنده انتقال رمز ارسال شود.

دریافت توکن

متد computer.sync شی هوشمند ذخیره شده در یک خروجی را برمی گرداند. گیرنده می تواند _rev به دست آمده از Sender را به computer.sync ارسال کند تا وضعیت شی ذخیره شده در آن مکان را محاسبه کند.

 

const id = 'd2242c...43ffb:0'
const receivedToken = await computer.sync(id)
// expect.toEqual(receivedToken, sentToken)

شی receivedToken همان حالت sentToken را دارد اما در دستگاه گیرنده ذخیره می شود. گیرنده می‌تواند وضعیت را بررسی کند تا تأیید کند receivedToken دارای تعداد مورد انتظار توکن است. با این حال، گیرنده همچنین باید بررسی کند که فرستنده رمز صحیح را ارسال کرده است. از این گذشته، یک مهاجم می‌تواند یک توکن تقلبی را با همان نوع و حالت مستقر کند. گیرنده چگونه می تواند توکن رسمی A را از یک توکن تقلبی B تشخیص دهد؟

 

چطور با Javascript یک توکن بیت کوین بسازیم؟

 

هر سه ویژگی _id، _revand _root خروجی های کدگذاری شده. توجه داشته باشید که توکن تقلبی خروجی ریشه متفاوتی نسبت به توکن اصلی دارد. تمام کاری که گیرنده باید انجام دهد این است که بررسی کند آیا _root مطابق انتظار است یا خیر. در این صورت گیرنده می تواند با خیال راحت توکن را بپذیرد.

لینک پروژه دمو ساخت توکن بیت کوین (bitcoin) با ری اکت (reactjs) در گیت هاب (Github)

منبع: medium.com

پست های مرتبط