بلاک چین: چه PoC باید بسازیم؟

چشمات می ترسه و دستات می خارن!

در مقاله های قبلی به فناوری هایی پرداختیم که بلاک چین ها بر اساس آنها ساخته می شوند (بلاکچین چه بسازیم؟) و مواردی که می توان با کمک آنها اجرا کرد (چرا باید پرونده بسازیم؟). وقت آن است که با دستان خود کار کنید! برای پیاده سازی Pilot و PoC (Proof of Concept) ترجیح می دهم از ابرها استفاده کنم، زیرا ... از هر کجای دنیا می توان به آنها دسترسی داشت و اغلب نیازی به اتلاف وقت برای نصب خسته کننده محیط نیست، زیرا تنظیمات از پیش تعیین شده وجود دارد. بنابراین، اجازه دهید چیزی ساده بسازیم، به عنوان مثال، شبکه ای برای انتقال سکه بین شرکت کنندگان و بیایید آن را بیت کوین بنامیم. برای این کار از ابر IBM و بلاک چین جهانی Hyperledger Fabric استفاده خواهیم کرد. ابتدا بیایید بفهمیم چرا Hyperledger Fabric یک بلاک چین جهانی نامیده می شود؟

بلاک چین: چه PoC باید بسازیم؟

Hyperledger Fabric - یک بلاک چین جهانی

به طور کلی، یک سیستم اطلاعات جهانی عبارت است از:

  • مجموعه ای از سرورها و یک هسته نرم افزاری که منطق تجاری را انجام می دهد.
  • رابط برای تعامل با سیستم؛
  • ابزارهای ثبت نام، احراز هویت و مجوز دستگاه ها/افراد.
  • پایگاه داده ذخیره سازی داده های عملیاتی و آرشیوی:

بلاک چین: چه PoC باید بسازیم؟

نسخه رسمی Hyperledger Fabric را می‌توانید در اینجا بخوانید کاربران آنلاین حاضر در سایت "و به طور خلاصه، Hyperledger Fabric یک پلت فرم متن باز است که به شما امکان می دهد بلاک چین های خصوصی بسازید و قراردادهای هوشمند دلخواه نوشته شده در زبان های برنامه نویسی JS و Go را اجرا کنید. بیایید با جزئیات به معماری Hyperledger Fabric نگاه کنیم و مطمئن شویم که این یک سیستم جهانی است که فقط ویژگی‌هایی برای ذخیره و ضبط داده‌ها دارد. ویژگی این است که داده‌ها، مانند همه بلاک‌چین‌ها، در بلوک‌هایی ذخیره می‌شوند که تنها در صورت توافق شرکت‌کنندگان روی بلاک چین قرار می‌گیرند و پس از ثبت، داده‌ها نمی‌توانند بی‌صدا تصحیح یا حذف شوند.

معماری پارچه Hyperledger

نمودار معماری Hyperledger Fabric را نشان می دهد:

بلاک چین: چه PoC باید بسازیم؟

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

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

ارائه دهنده خدمات عضویت (MSP) یک CA (مرجع صدور گواهی) برای صدور هویت و تعیین نقش است. برای ایجاد یک گره، باید با MSP تعامل داشته باشید.

گره های همتا - بررسی تراکنش ها، ذخیره بلاک چین، اجرای قراردادهای هوشمند و تعامل با برنامه ها. همتایان دارای هویت (گواهی دیجیتال) هستند که توسط MSP صادر می شود. برخلاف شبکه بیت‌کوین یا اتریوم، که در آن همه گره‌ها دارای حقوق برابر هستند، در Hyperledger Fabric گره‌ها نقش‌های متفاوتی دارند:

  • همتا شاید تایید همتا (EP) و اجرای قراردادهای هوشمند.
  • متعهد شدن همتا (CP) - فقط داده ها را در بلاک چین ذخیره کنید و "وضعیت جهانی" را به روز کنید.
  • لنگر همتا (AP) - اگر چندین سازمان در بلاک چین شرکت کنند، از همتایان لنگر برای ارتباط بین آنها استفاده می شود. هر سازمان باید یک یا چند همتای مجری داشته باشد. با استفاده از AP، هر همتا در یک سازمان می تواند اطلاعاتی در مورد همه همتایان در سازمان های دیگر به دست آورد. برای همگام سازی اطلاعات بین AP ها استفاده می شود پروتکل شایعات.
  • رهبر همتا - اگر یک سازمان چندین همتا داشته باشد، فقط رهبر همتا بلاک‌هایی را از سرویس Ordering دریافت می‌کند و به بقیه همتاها می‌دهد. رهبر را می توان به صورت ایستا یا پویا توسط همتایان در سازمان تعیین کرد. پروتکل شایعات همچنین برای همگام سازی اطلاعات در مورد رهبران استفاده می شود.

دارایی - موجودیت هایی که دارای ارزش هستند و در بلاک چین ذخیره می شوند. به طور خاص، این داده های کلید-مقدار در قالب JSON است. این داده ها هستند که در بلاک چین ثبت می شوند. آنها یک تاریخچه دارند که در بلاک چین ذخیره می شود و یک وضعیت فعلی که در پایگاه داده "World State" ذخیره می شود. ساختارهای داده بسته به وظایف تجاری خودسرانه پر می شوند. هیچ فیلد الزامی وجود ندارد، تنها توصیه این است که دارایی ها باید مالک و ارزشمند باشند.

دفتر کل - شامل Blockchain و پایگاه داده حالت Word است که وضعیت فعلی دارایی ها را ذخیره می کند. دولت جهانی از LevelDB یا CouchDB استفاده می کند.

قرارداد هوشمند - با استفاده از قراردادهای هوشمند، منطق تجاری سیستم پیاده سازی می شود. در Hyperledger Fabric، قراردادهای هوشمند Chaincode نامیده می شوند. با استفاده از کد زنجیره ای، دارایی ها و تراکنش های روی آنها مشخص می شود. در اصطلاح فنی، قراردادهای هوشمند ماژول های نرم افزاری هستند که در زبان های برنامه نویسی JS یا Go پیاده سازی می شوند.

سیاست تایید - برای هر کد زنجیره ای، می توانید یک خط مشی تعیین کنید که چه تعداد تأیید برای یک تراکنش و از چه کسی باید مورد انتظار باشد. اگر این خط‌مشی تنظیم نشده باشد، پیش‌فرض این است: «تراکنش باید توسط هر عضو هر سازمانی در کانال تأیید شود». نمونه هایی از سیاست ها:

  • معامله باید توسط هر مدیر سازمان تایید شود.
  • باید توسط هر عضو یا مشتری سازمان تایید شود.
  • باید توسط هر سازمان همتا تایید شود.

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

CallFlow

بلاک چین: چه PoC باید بسازیم؟

  • برنامه با استفاده از Go، Node.js یا Java SDK با Hyperledger Fabric ارتباط برقرار می کند.
  • مشتری یک تراکنش tx ایجاد می کند و آن را برای همتایان تایید کننده ارسال می کند.
  • Peer امضای مشتری را تأیید می کند، تراکنش را تکمیل می کند و امضای تأیید را برای مشتری ارسال می کند. Chaincode فقط بر روی همتای تایید کننده اجرا می شود و نتیجه اجرای آن برای همه همتایان ارسال می شود. این الگوریتم کار، PBFT (Practical Byzantine Fault Tolerant) اجماع نامیده می شود. متفاوت است BFT کلاسیک این واقعیت که پیام ارسال می شود و تأیید آن نه از همه شرکت کنندگان، بلکه فقط از یک مجموعه خاص انتظار می رود.
  • پس از اینکه مشتری تعداد پاسخ های مربوط به سیاست تایید را دریافت کرد، تراکنش را به سرویس سفارش ارسال می کند.
  • سرویس Ordering یک بلوک ایجاد می کند و آن را برای همه همتایان متعهد ارسال می کند. خدمات سفارش، ضبط متوالی بلوک ها را تضمین می کند، که به اصطلاح چنگال دفتر را حذف می کند (بخش "چنگال ها" را ببینید);
  • همتایان یک بلوک دریافت می‌کنند، دوباره خط‌مشی تأییدیه را بررسی می‌کنند، بلوک را در بلاک چین می‌نویسند و وضعیت را در DB «World State» تغییر می‌دهند.

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

  • قراردادهای هوشمند (کد زنجیره ای) همتایان را تایید می کنند. این امر محرمانه بودن قراردادهای هوشمند را تضمین می کند، زیرا توسط همه شرکت‌کنندگان ذخیره نمی‌شود، بلکه فقط توسط همتایان تأیید می‌شود.
  • سفارش باید سریع کار کند. این با این واقعیت تضمین می شود که Ordering فقط یک بلوک را تشکیل می دهد و آن را به مجموعه ثابتی از همتایان رهبر ارسال می کند.
  • همتایان متعهد فقط زنجیره بلاک را ذخیره می کنند - می تواند تعداد زیادی از آنها وجود داشته باشد و به قدرت زیادی و عملیات فوری نیاز ندارند.

جزئیات بیشتر در مورد راه حل های معماری Hyperledger Fabric و چرایی کارکرد آن به این شکل و نه در غیر این صورت را می توان در اینجا یافت: ریشه های معماری یا اینجا: Hyperledger Fabric: یک سیستم عامل توزیع شده برای بلاک چین های مجاز.

بنابراین، Hyperledger Fabric یک سیستم واقعا جهانی است که با آن می توانید:

  • پیاده سازی منطق تجاری دلخواه با استفاده از مکانیسم قرارداد هوشمند؛
  • ثبت و دریافت داده ها از پایگاه داده بلاک چین با فرمت JSON.
  • با استفاده از Certificate Authority دسترسی API را اعطا و تأیید کنید.

حالا که کمی در مورد مشخصات Hyperledger Fabric فهمیدیم، بیایید در نهایت یک کار مفید انجام دهیم!

استقرار بلاک چین

بیانیه مشکل

وظیفه پیاده سازی شبکه Citcoin با عملکردهای زیر است: ایجاد یک حساب کاربری، دریافت موجودی، شارژ کردن حساب خود، انتقال سکه از یک حساب به حساب دیگر. بیایید یک مدل شی ترسیم کنیم، که آن را در یک قرارداد هوشمند پیاده سازی خواهیم کرد. بنابراین، ما حساب هایی خواهیم داشت که با نام مشخص می شوند و دارای موجودی هستند و فهرستی از حساب ها. حساب‌ها و فهرستی از حساب‌ها، از نظر دارایی‌های Hyperledger Fabric هستند. بر این اساس تاریخ و وضعیت فعلی دارند. من سعی می کنم این را به وضوح ترسیم کنم:

بلاک چین: چه PoC باید بسازیم؟

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

IBM Cloud

ما یک حساب کاربری ایجاد می کنیم ابر IBM. برای استفاده از پلتفرم بلاک چین، باید آن را به Pay-As-You-Go ارتقا دهید. این روند ممکن است سریع نباشد، زیرا ... IBM اطلاعات اضافی را درخواست می کند و آن را به صورت دستی تأیید می کند. در یک نکته مثبت، می توانم بگویم که IBM مواد آموزشی خوبی دارد که به شما امکان می دهد Hyperledger Fabric را در فضای ابری خود مستقر کنید. سری مقالات و نمونه های زیر را دوست داشتم:

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

بلاک چین: چه PoC باید بسازیم؟

گره‌ها را در آن ایجاد می‌کنیم: Orderer CA، Org1 CA، Orderer Peer:

بلاک چین: چه PoC باید بسازیم؟

ما کاربران ایجاد می کنیم:

بلاک چین: چه PoC باید بسازیم؟

یک کانال ایجاد کنید و آن را citcoin بنامید:

بلاک چین: چه PoC باید بسازیم؟

اساسا Channel یک بلاک چین است، بنابراین با بلوک صفر (بلاک Genesis) شروع می شود:

بلاک چین: چه PoC باید بسازیم؟

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

/*
 * Citcoin smart-contract v1.5 for Hyperledger Fabric
 * (c) Alexey Sushkov, 2019
 */
 
'use strict';
 
const { Contract } = require('fabric-contract-api');
const maxAccounts = 5;
 
class CitcoinEvents extends Contract {
 
    async instantiate(ctx) {
        console.info('instantiate');
        let emptyList = [];
        await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(emptyList)));
    }
    // Get all accounts
    async GetAccounts(ctx) {
        // Get account list:
        let accounts = '{}'
        let accountsData = await ctx.stub.getState('accounts');
        if (accountsData) {
            accounts = JSON.parse(accountsData.toString());
        } else {
            throw new Error('accounts not found');
        }
        return accountsData.toString()
    }
     // add a account object to the blockchain state identifited by their name
    async AddAccount(ctx, name, balance) {
        // this is account data:
        let account = {
            name: name,
            balance: Number(balance),       
            type: 'account',
        };
        // create account:
        await ctx.stub.putState(name, Buffer.from(JSON.stringify(account)));
 
        // Add account to list:
        let accountsData = await ctx.stub.getState('accounts');
        if (accountsData) {
            let accounts = JSON.parse(accountsData.toString());
            if (accounts.length < maxAccounts)
            {
                accounts.push(name);
                await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(accounts)));
            } else {
                throw new Error('Max accounts number reached');
            }
        } else {
            throw new Error('accounts not found');
        }
        // return  object
        return JSON.stringify(account);
    }
    // Sends money from Account to Account
    async SendFrom(ctx, fromAccount, toAccount, value) {
        // get Account from
        let fromData = await ctx.stub.getState(fromAccount);
        let from;
        if (fromData) {
            from = JSON.parse(fromData.toString());
            if (from.type !== 'account') {
                throw new Error('wrong from type');
            }   
        } else {
            throw new Error('Accout from not found');
        }
        // get Account to
        let toData = await ctx.stub.getState(toAccount);
        let to;
        if (toData) {
            to = JSON.parse(toData.toString());
            if (to.type !== 'account') {
                throw new Error('wrong to type');
            }  
        } else {
            throw new Error('Accout to not found');
        }
 
        // update the balances
        if ((from.balance - Number(value)) >= 0 ) {
            from.balance -= Number(value);
            to.balance += Number(value);
        } else {
            throw new Error('From Account: not enought balance');          
        }
 
        await ctx.stub.putState(from.name, Buffer.from(JSON.stringify(from)));
        await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));
                 
        // define and set Event
        let Event = {
            type: "SendFrom",
            from: from.name,
            to: to.name,
            balanceFrom: from.balance,
            balanceTo: to.balance,
            value: value
        };
        await ctx.stub.setEvent('SendFrom', Buffer.from(JSON.stringify(Event)));
 
        // return to object
        return JSON.stringify(from);
    }
 
    // get the state from key
    async GetState(ctx, key) {
        let data = await ctx.stub.getState(key);
        let jsonData = JSON.parse(data.toString());
        return JSON.stringify(jsonData);
    }
    // GetBalance   
    async GetBalance(ctx, accountName) {
        let data = await ctx.stub.getState(accountName);
        let jsonData = JSON.parse(data.toString());
        return JSON.stringify(jsonData);
    }
     
    // Refill own balance
    async RefillBalance(ctx, toAccount, value) {
        // get Account to
        let toData = await ctx.stub.getState(toAccount);
        let to;
        if (toData) {
            to = JSON.parse(toData.toString());
            if (to.type !== 'account') {
                throw new Error('wrong to type');
            }  
        } else {
            throw new Error('Accout to not found');
        }
 
        // update the balance
        to.balance += Number(value);
        await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));
                 
        // define and set Event
        let Event = {
            type: "RefillBalance",
            to: to.name,
            balanceTo: to.balance,
            value: value
        };
        await ctx.stub.setEvent('RefillBalance', Buffer.from(JSON.stringify(Event)));
 
        // return to object
        return JSON.stringify(from);
    }
}
module.exports = CitcoinEvents;

به طور شهودی، همه چیز باید در اینجا روشن باشد:

  • چندین عملکرد (AddAccount، GetAccounts، SendFrom، GetBalance، RefillBalance) وجود دارد که برنامه آزمایشی با استفاده از Hyperledger Fabric API آنها را فراخوانی می کند.
  • توابع SendFrom و RefillBalance رویدادهایی را ایجاد می کنند که برنامه نمایشی دریافت خواهد کرد.
  • تابع instantiate یک بار زمانی که یک قرارداد هوشمند نمونه سازی می شود فراخوانی می شود. در واقع، نه تنها یک بار، بلکه هر بار که نسخه قرارداد هوشمند تغییر می کند، نامیده می شود. بنابراین، مقداردهی اولیه یک لیست با یک آرایه خالی ایده بدی است، زیرا حالا وقتی نسخه قرارداد هوشمند را تغییر دهیم، لیست فعلی را از دست خواهیم داد. اما اشکالی ندارد، من تازه یاد می‌گیرم).
  • حساب‌ها و فهرستی از حساب‌ها، ساختارهای داده JSON هستند. JS برای دستکاری داده ها استفاده می شود.
  • می توانید با استفاده از فراخوانی تابع getState، مقدار فعلی یک دارایی را دریافت کرده و با استفاده از putState آن را به روز کنید.
  • هنگام ایجاد یک حساب، تابع AddAccount فراخوانی می شود که در آن مقایسه ای برای حداکثر تعداد حساب ها در بلاک چین انجام می شود (maxAccounts = 5). و در اینجا یک جابجایی وجود دارد (توجه کرده اید؟) که منجر به افزایش بی پایان تعداد حساب ها می شود. باید از چنین اشتباهاتی اجتناب کرد)

سپس، قرارداد هوشمند را در کانال بارگذاری می کنیم و آن را نمونه سازی می کنیم:

بلاک چین: چه PoC باید بسازیم؟

بیایید به تراکنش برای نصب قرارداد هوشمند نگاه کنیم:

بلاک چین: چه PoC باید بسازیم؟

بیایید به جزئیات کانال خود نگاه کنیم:

بلاک چین: چه PoC باید بسازیم؟

در نتیجه، نمودار زیر را از یک شبکه بلاک چین در ابر IBM دریافت می کنیم. این نمودار همچنین یک برنامه آزمایشی را نشان می دهد که در ابر آمازون در سرور مجازی اجرا می شود (اطلاعات بیشتر در مورد آن در بخش بعدی):

بلاک چین: چه PoC باید بسازیم؟

ایجاد یک رابط کاربری گرافیکی برای تماس های Hyperledger Fabric API

Hyperledger Fabric دارای یک API است که می تواند برای موارد زیر استفاده شود:

  • ایجاد کانال؛
  • اتصالات همتا به کانال.
  • نصب و راه اندازی قراردادهای هوشمند در کانال;
  • تراکنش های فراخوانی؛
  • اطلاعات مربوط به بلاک چین را درخواست کنید.

توسعه اپلیکیشن

در برنامه آزمایشی خود از API فقط برای فراخوانی تراکنش ها و درخواست اطلاعات استفاده می کنیم، زیرا ما قبلاً مراحل باقی مانده را با استفاده از پلتفرم بلاک چین IBM تکمیل کرده ایم. ما یک رابط کاربری گرافیکی با استفاده از یک پشته فناوری استاندارد می نویسیم: Express.js + Vue.js + Node.js. می توانید یک مقاله جداگانه در مورد نحوه شروع ایجاد برنامه های کاربردی وب مدرن بنویسید. در اینجا پیوندی به مجموعه سخنرانی هایی که بیشتر دوست داشتم می گذارم: برنامه وب Full Stack با استفاده از Vue.js و Express.js. نتیجه یک برنامه کاربردی مشتری-سرور با رابط گرافیکی آشنا در سبک طراحی متریال گوگل است. REST API بین کلاینت و سرور از چندین تماس تشکیل شده است:

  • HyperledgerDemo/v1/init - بلاک چین را مقداردهی اولیه کنید.
  • HyperledgerDemo/v1/accounts/list - لیستی از تمام حساب ها را دریافت کنید.
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — ایجاد حساب باب.
  • HyperledgerDemo/v1/info?account=Bob — اطلاعاتی درباره حساب باب دریافت کنید.
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - انتقال دو سکه از باب به آلیس.
  • HyperledgerDemo/v1/disconnect - اتصال به بلاک چین را ببندید.

شرح API با مثال‌های موجود در وب سایت پستچی - یک برنامه معروف برای آزمایش HTTP API.

برنامه آزمایشی در ابر آمازون

من برنامه را در آمازون آپلود کردم زیرا ... IBM هنوز نتوانسته است حساب من را ارتقا دهد و به من اجازه ایجاد سرورهای مجازی را بدهد. نحوه اضافه کردن گیلاس به دامنه: www.citcoin.info. سرور را برای مدتی روشن نگه می دارم، سپس آن را خاموش می کنم، زیرا ... سنت برای اجاره چکه می کند و سکه های سیت کوین هنوز در بورس عرضه نشده اند) اسکرین شات های دمو را در مقاله قرار می دهم تا منطق کار مشخص شود. برنامه آزمایشی می تواند:

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

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

بلاک چین: چه PoC باید بسازیم؟

بعد، ما حساب خود را ایجاد می کنیم، زمان را با موجودی تلف نکنید:

بلاک چین: چه PoC باید بسازیم؟

ما لیستی از تمام حساب های موجود دریافت می کنیم:

بلاک چین: چه PoC باید بسازیم؟

فرستنده و گیرنده را انتخاب می کنیم و موجودی آنها را می گیریم. اگر فرستنده و گیرنده یکسان باشند، حساب او دوباره پر می شود:

بلاک چین: چه PoC باید بسازیم؟

در لاگ ما بر اجرای تراکنش ها نظارت می کنیم:

بلاک چین: چه PoC باید بسازیم؟

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

بلاک چین: چه PoC باید بسازیم؟

و لیست کلی معاملات:

بلاک چین: چه PoC باید بسازیم؟

با این کار، ما اجرای PoC را برای ایجاد شبکه Citcoin با موفقیت به پایان رساندیم. چه کارهای دیگری باید انجام شود تا Citcoin به یک شبکه تمام عیار برای انتقال سکه تبدیل شود؟ خیلی کوچک:

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

نتیجه

ما شبکه Citcoin را با عملکردهای زیر پیاده سازی کرده ایم: اضافه کردن یک حساب، دریافت موجودی، شارژ کردن حساب خود، انتقال سکه از یک حساب به حساب دیگر. بنابراین، ساختن یک PoC چه هزینه ای برای ما داشت؟

  • شما باید بلاک چین را به طور کلی و Hyperledger Fabric را به طور خاص مطالعه کنید.
  • آموزش استفاده از ابرهای IBM یا Amazon.
  • زبان برنامه نویسی JS و برخی چارچوب های وب را بیاموزید.
  • اگر برخی از داده‌ها نه در بلاک چین، بلکه در یک پایگاه داده جداگانه ذخیره می‌شوند، یاد بگیرید که مثلاً با PostgreSQL یکپارچه شوید.
  • و آخرین اما نه کم اهمیت - شما نمی توانید در دنیای مدرن بدون دانش لینوکس زندگی کنید!)

البته، این علم موشک نیست، اما شما باید سخت کار کنید!

منابع در GitHub

منابع قرار داده شده است GitHub. شرح مختصری از مخزن:
کاتالوگ «سرور» — سرور Node.js
کاتالوگ «مشتری» - مشتری Node.js
کاتالوگ «بلاکچین"(البته مقادیر و کلیدهای پارامتر کار نمی کنند و فقط به عنوان مثال آورده شده اند):

  • قرارداد - کد منبع قرارداد هوشمند
  • کیف پول - کلیدهای کاربری برای استفاده از Hyperledger Fabric API.
  • *.cds - نسخه های کامپایل شده قراردادهای هوشمند
  • * فایل‌های json - نمونه‌هایی از فایل‌های پیکربندی برای استفاده از Hyperledger Fabric API

این فقط آغاز است!

منبع: www.habr.com

اضافه کردن نظر