در این سری از مقالات، ما در کمتر از 5 دقیقه یک ارز رمزنگاری شده ساده میسازیم که مبتنی بر پیادهسازی ساده بلاک چین در Golang است. برای ساخت این پروژه ابتدا باید گلانگ را نصب کنید. برای ویرایشگر متن می توانید از هر چیزی استفاده کنید، در اینجا من از کد ویژوال استودیو استفاده می کنم.
نصبش کردی؟ باشه، بیا انجامش بدیم!
اگر پروژه را ایجاد کرده اید یک فایل ایجاد کنید main.go . oke lets code، ابتدا از main.go شروع می کنیم. بیایید با بخش ساختار Block "blockchain" شروع کنیم. در بلاک چین، ذخیره اطلاعات ارزشمند را مسدود می کند. به عنوان مثال، بیت کوین تراکنش های فروشگاهی را که جوهر هر ارز دیجیتال است، مسدود می کند. علاوه بر این، یک بلوک حاوی برخی اطلاعات فنی مانند نسخه آن، مهر زمانی فعلی و هش بلوک قبلی است. در این مقاله قصد نداریم بلاک را همانطور که در مشخصات بلاک چین یا بیت کوین توضیح داده شده پیاده سازی کنیم، در عوض، از یک نسخه ساده شده آن استفاده خواهیم کرد که فقط حاوی اطلاعات قابل توجهی است. در اینجا به نظر می رسد. در اینجا ما یک بلوک ساختاری داریم:
Block struct {زمان مهر زمانتراکنش ها []رشتهprevhash []بایتهش []بایت}
Timestamp
مُهر زمان فعلی است (زمانی که بلوک ایجاد می شود)، transactions
اطلاعات با ارزش واقعی موجود در بلوک است، prevhas
هش بلوک قبلی را ذخیره می کند و Hash
هش بلوک است. در مشخصات بیت کوین Timestamp
, prevhash
و Hash
هدرهای بلوکی هستند که یک ساختار داده جداگانه را تشکیل می دهند و تراکنش ها (transaction
در مورد ما) یک ساختار داده جداگانه است. بنابراین ما آنها را در اینجا برای سادگی با هم مخلوط می کنیم.
پس چگونه هش ها را محاسبه کنیم؟ نحوه محاسبه هش ها یکی از ویژگی های بسیار مهم بلاک چین است و همین ویژگی است که بلاک چین را ایمن می کند. مسئله این است که محاسبه هش از نظر محاسباتی یک عملیات دشوار است، حتی در رایانههای سریع هم زمان میبرد (به همین دلیل است که مردم برای استخراج بیتکوین پردازندههای گرافیکی قدرتمندی میخرند). این یک طراحی معماری عمدی است که افزودن بلوکهای جدید را دشوار میکند، بنابراین از تغییر آنها پس از اضافه شدن جلوگیری میکند. ما در مقاله آینده درباره این مکانیسم بحث و اجرا خواهیم کرد.
در حال حاضر، ما فقط فیلدهای بلوک را می گیریم، آنها را به هم متصل می کنیم و یک هش SHA-256 را روی ترکیب الحاقی محاسبه می کنیم. بیایید این کار را در Newhash
روش:
func NewHash(زمان زمان. زمان، تراکنش ها []رشته، پیش هش []بایت) []بایت {ورودی:= append(prevhash، time.String()...)برای تراکنش := معاملات محدوده {ورودی = اضافه (ورودی، رشته (رون (تراکنش))...)}هش := sha256.Sum256(ورودی)هش برگشتی[:]}
در مرحله بعد، به دنبال یک قرارداد Golang، تابعی را پیاده سازی می کنیم که ایجاد یک بلوک و پایان را ساده می کند:
بلوکهای func(معاملات []رشته، prevhash []بایت) *Block {currentTime := time.Now()بازگشت و مسدود کردن{مهر زمان: time.Time{}،معاملات: معاملات،prevhash: prevhashهش: NewHash (زمان فعلی، معاملات، prevhash)،}}
ما به ایجاد یک تابع چاپ ادامه می دهیم. تابع چاپ برای چاپ محتویات هر بلوکی که تراکنش را انجام می دهد مفید است. این هم کد:
func Print(block *Block) {fmt.Printf("ttime: %sn"، block.timestamp.String())fmt.Printf("tprevhash: %xn"، block.prevhash)fmt.Printf("thash: %xn"، block.Hash)}
و تراکنش تابع برای تراکنش چاپی:
Func Transaction(block *Block) {fmt.Println("tTransactions:")برای i، تراکنش := range block.transactions {fmt.Printf("tt%v: %qn"، i، تراکنش)}}
پس از تکمیل تمام توابع مورد نیاز، از آن در تابع اصلی استفاده خواهیم کرد:
func main () {رایان := []string{"ریاندی 50 بیت کوین برای رضا فرستاد"}block_1 := بلوک (رایان، []بایت{})fmt.Println ("این اولین بلوک ما است")چاپ (block_1)تراکنش (block_1)جک := []string{"جک ارسال 20 بیت کوین به رینولد"}block_2 := بلوک (جک، block_1.Hash)fmt.Println ("این دومین بلوک ما است")چاپ (block_2)تراکنش (block_2)}
خوب همه کدهایی که ما نوشتن را به پایان رساندیم. اجازه دهید آن را با تایپ go run main.go در ترمینال اجرا کنیم. خروجی:
نتیجه
ما یک نمونه اولیه بلاک چین بسیار ساده ساختیم: این فقط یک آرایه از بلوک ها است که هر بلوک یک اتصال به بلوک قبلی دارد. با این حال، بلاک چین واقعی بسیار پیچیده تر است. در بلاک چین ما، افزودن بلوکهای جدید آسان و سریع است، اما در بلاکچین واقعی، افزودن بلوکهای جدید به مقداری کار نیاز دارد: قبل از دریافت مجوز برای افزودن بلوکها، باید محاسبات سنگینی انجام داد (این مکانیسم اثبات کار نامیده میشود). همچنین، بلاک چین یک پایگاه داده توزیع شده است که هیچ تصمیم گیرنده واحدی ندارد. بنابراین، یک بلوک جدید باید توسط سایر شرکت کنندگان شبکه تأیید و تأیید شود (این مکانیسم اجماع نامیده می شود). و هنوز هیچ تراکنشی در بلاک چین ما انجام نشده است!
- "
- معرفی
- مقاله
- مقالات
- بیت کوین
- بلاکچین
- BTC
- ساختن
- خرید
- رمز
- کامپیوتر
- ارتباط
- اجماع
- محتویات
- ادامه دادن
- کریپتو کارنسی (رمز ارزها )
- جاری
- داده ها
- پایگاه داده
- طرح
- سردبیر
- FAST
- ویژگی
- زمینه
- نام خانوادگی
- به دنبال
- فرم
- تابع
- آینده
- GV
- مخلوط
- اینجا کلیک نمایید
- چگونه
- hr
- HTTPS
- ia
- اطلاعات
- IP
- IT
- متوسط
- شبکه
- دیگر
- مردم
- جلوگیری
- پروژه
- اثبات کار
- محدوده
- دویدن
- سلسله
- ساده
- So
- شروع
- opbevare
- پرده
- فنی
- زمان
- معامله
- معاملات
- W
- مهاجرت کاری
- نوشته