بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

آپ کی آنکھیں خوف زدہ ہیں اور آپ کے ہاتھوں میں خارش ہو رہی ہے!

پچھلے مضامین میں، ہم نے ان ٹیکنالوجیز سے نمٹا جن پر بلاک چینز بنائے جاتے ہیں (ہمیں بلاکچین کیا بنانا چاہئے؟) اور ایسے معاملات جو ان کی مدد سے نافذ کیے جاسکتے ہیں (ہم مقدمہ کیوں بنائیں؟)۔ یہ اپنے ہاتھوں سے کام کرنے کا وقت ہے! پائلٹس اور پی او سی (تصور کا ثبوت) کو نافذ کرنے کے لیے، میں بادلوں کو استعمال کرنے کو ترجیح دیتا ہوں، کیونکہ... ان تک دنیا میں کہیں سے بھی رسائی حاصل کی جا سکتی ہے اور، اکثر، ماحول کی تکلیف دہ تنصیب پر وقت ضائع کرنے کی ضرورت نہیں ہے، کیونکہ پہلے سے سیٹ کنفیگریشنز ہیں۔ تو، آئیے کچھ آسان بنائیں، مثال کے طور پر، شرکاء کے درمیان سکے کی منتقلی کے لیے ایک نیٹ ورک اور اسے معمولی طور پر بٹ کوائن کہتے ہیں۔ اس کے لیے ہم IBM کلاؤڈ اور یونیورسل بلاکچین Hyperledger Fabric استعمال کریں گے۔ سب سے پہلے، آئیے یہ معلوم کریں کہ Hyperledger Fabric کو یونیورسل بلاکچین کیوں کہا جاتا ہے؟

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

Hyperledger Fabric - ایک عالمگیر بلاکچین

عام طور پر، ایک عالمگیر معلوماتی نظام ہے:

  • سرورز کا ایک سیٹ اور ایک سافٹ ویئر کور جو کاروباری منطق کو انجام دیتا ہے۔
  • نظام کے ساتھ تعامل کے لیے انٹرفیس؛
  • آلات/لوگوں کی رجسٹریشن، تصدیق اور اجازت کے لیے ٹولز؛
  • آپریشنل اور آرکائیو ڈیٹا کو ذخیرہ کرنے والا ڈیٹا بیس:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

Hyperledger Fabric کیا ہے اس کا آفیشل ورژن اس پر پڑھا جا سکتا ہے۔ ڈاؤن لوڈ، اتارنااور مختصراً، Hyperledger Fabric ایک اوپن سورس پلیٹ فارم ہے جو آپ کو پرائیویٹ بلاک چینز بنانے اور JS اور Go پروگرامنگ زبانوں میں لکھے گئے صوابدیدی سمارٹ معاہدوں کو انجام دینے کی اجازت دیتا ہے۔ آئیے Hyperledger Fabric کے فن تعمیر کو تفصیل سے دیکھتے ہیں اور اس بات کو یقینی بناتے ہیں کہ یہ ایک آفاقی نظام ہے جس میں صرف ڈیٹا کو ذخیرہ کرنے اور ریکارڈ کرنے کی تفصیلات ہیں۔ خاصیت یہ ہے کہ ڈیٹا، جیسا کہ تمام بلاکچینز میں، بلاکس میں محفوظ کیا جاتا ہے جو بلاکچین پر صرف اس صورت میں رکھے جاتے ہیں جب شرکاء اتفاق رائے پر پہنچ جاتے ہیں اور ڈیٹا کو ریکارڈ کرنے کے بعد خاموشی سے درست یا حذف نہیں کیا جاسکتا۔

ہائپر لیجر فیبرک آرکیٹیکچر

خاکہ ہائپر لیجر فیبرک فن تعمیر کو ظاہر کرتا ہے:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

تنظیمات - تنظیموں میں ساتھی ہوتے ہیں، یعنی بلاکچین تنظیموں کی حمایت کی وجہ سے موجود ہے۔ مختلف تنظیمیں ایک ہی چینل کا حصہ بن سکتی ہیں۔

چینل - ایک منطقی ڈھانچہ جو ساتھیوں کو گروپوں میں متحد کرتا ہے، یعنی بلاکچین کی وضاحت کی گئی ہے۔ Hyperledger Fabric بیک وقت مختلف کاروباری منطق کے ساتھ متعدد بلاک چینز پر کارروائی کر سکتا ہے۔

رکنیت کی خدمات فراہم کرنے والا (MSP) شناخت جاری کرنے اور کردار تفویض کرنے کے لیے ایک CA (سرٹیفکیٹ اتھارٹی) ہے۔ نوڈ بنانے کے لیے، آپ کو MSP کے ساتھ بات چیت کرنے کی ضرورت ہے۔

پیر نوڈس - لین دین کی تصدیق کریں، بلاکچین کو اسٹور کریں، سمارٹ معاہدوں پر عمل کریں اور ایپلی کیشنز کے ساتھ تعامل کریں۔ ساتھیوں کے پاس ایک شناخت (ڈیجیٹل سرٹیفکیٹ) ہے، جو MSP کے ذریعے جاری کیا جاتا ہے۔ Bitcoin یا Etherium نیٹ ورک کے برعکس، جہاں تمام نوڈس کے مساوی حقوق ہوتے ہیں، Hyperledger میں فیبرک نوڈس مختلف کردار ادا کرتے ہیں:

  • پیر شاید ساتھی کی توثیق (EP) اور سمارٹ معاہدوں پر عمل درآمد کریں۔
  • عہد ساز ساتھی (CP) - صرف بلاکچین میں ڈیٹا محفوظ کریں اور "ورلڈ اسٹیٹ" کو اپ ڈیٹ کریں۔
  • اینکر پیر (اے پی) - اگر کئی تنظیمیں بلاک چین میں حصہ لیتی ہیں، تو ان کے درمیان رابطے کے لیے اینکر کے ساتھیوں کا استعمال کیا جاتا ہے۔ ہر تنظیم کے ایک یا زیادہ اینکر ساتھی ہونے چاہئیں۔ AP کا استعمال کرتے ہوئے، کسی تنظیم میں کوئی بھی ساتھی دوسری تنظیموں میں موجود تمام ساتھیوں کے بارے میں معلومات حاصل کر سکتا ہے۔ APs کے درمیان معلومات کو سنکرونائز کرنے کے لیے استعمال کیا جاتا ہے۔ گپ شپ پروٹوکول.
  • لیڈر پیر - اگر کسی تنظیم کے کئی ہم مرتبہ ہیں، تو صرف ہم مرتبہ کے رہنما کو آرڈرنگ سروس سے بلاکس ملیں گے اور باقی ساتھیوں کو دیں گے۔ لیڈر کو یا تو مستحکم طور پر مخصوص کیا جا سکتا ہے یا تنظیم میں ساتھیوں کے ذریعے متحرک طور پر منتخب کیا جا سکتا ہے۔ گپ شپ پروٹوکول کو رہنماؤں کے بارے میں معلومات کو ہم آہنگ کرنے کے لیے بھی استعمال کیا جاتا ہے۔

اثاثے — وہ ادارے جن کی قدر ہوتی ہے اور وہ بلاکچین پر محفوظ ہیں۔ مزید خاص طور پر، یہ JSON فارمیٹ میں کلیدی قدر کا ڈیٹا ہے۔ یہ وہی ڈیٹا ہے جو بلاکچین میں ریکارڈ کیا جاتا ہے۔ ان کی ایک تاریخ ہے، جو بلاکچین میں محفوظ ہے، اور ایک موجودہ حالت، جو "ورلڈ اسٹیٹ" ڈیٹا بیس میں محفوظ ہے۔ کاروباری کاموں کے لحاظ سے ڈیٹا ڈھانچے کو من مانی طور پر بھرا جاتا ہے۔ کوئی مطلوبہ فیلڈز نہیں ہیں، صرف سفارش یہ ہے کہ اثاثوں کا مالک ہونا چاہیے اور قیمتی ہونا چاہیے۔

لیجر - بلاکچین اور ورڈ اسٹیٹ ڈیٹا بیس پر مشتمل ہے، جو اثاثوں کی موجودہ حالت کو محفوظ کرتا ہے۔ عالمی ریاست LevelDB یا CouchDB استعمال کرتی ہے۔

سمارٹ معاہدہ - سمارٹ معاہدوں کا استعمال کرتے ہوئے، نظام کی کاروباری منطق کو لاگو کیا جاتا ہے. Hyperledger Fabric میں، سمارٹ معاہدوں کو چین کوڈ کہا جاتا ہے۔ چین کوڈ کا استعمال کرتے ہوئے ان پر اثاثے اور لین دین کی وضاحت کی گئی ہے۔ تکنیکی اصطلاحات میں، سمارٹ معاہدے JS یا Go پروگرامنگ زبانوں میں لاگو سافٹ ویئر ماڈیول ہیں۔

توثیق کی پالیسی - ہر چین کوڈ کے لیے، آپ ایک پالیسی ترتیب دے سکتے ہیں کہ لین دین کے لیے کتنی تصدیق کی توقع کی جانی چاہیے اور کس سے۔ اگر پالیسی سیٹ نہیں ہے، تو پہلے سے طے شدہ ہے: "چینل میں کسی بھی تنظیم کے کسی بھی رکن سے لین دین کی تصدیق ہونی چاہیے۔" پالیسیوں کی مثالیں:

  • لین دین کو تنظیم کے کسی بھی منتظم کی طرف سے منظور کیا جانا چاہیے؛
  • تنظیم کے کسی بھی رکن یا کلائنٹ سے تصدیق ہونی چاہیے؛
  • کسی بھی ہم مرتبہ تنظیم سے تصدیق ہونی چاہیے۔

آرڈرنگ سروس - لین دین کو بلاکس میں پیک کرتا ہے اور چینل کے ساتھیوں کو بھیجتا ہے۔ نیٹ ورک پر تمام ساتھیوں کو پیغامات کی ترسیل کی ضمانت دیتا ہے۔ صنعتی نظام کے لیے استعمال کیا جاتا ہے۔ کافکا میسج بروکر، ترقی اور جانچ کے لیے اکیلی.

کال فلو

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

  • ایپلیکیشن Go, Node.js یا Java SDK کا استعمال کرتے ہوئے Hyperledger Fabric کے ساتھ بات چیت کرتی ہے۔
  • کلائنٹ ایک tx ٹرانزیکشن بناتا ہے اور اسے توثیق کرنے والے ساتھیوں کو بھیجتا ہے۔
  • پیر کلائنٹ کے دستخط کی تصدیق کرتا ہے، لین دین کو مکمل کرتا ہے، اور توثیق کے دستخط کلائنٹ کو واپس بھیجتا ہے۔ چین کوڈ کو صرف توثیق کرنے والے ہم مرتبہ پر لاگو کیا جاتا ہے، اور اس کے نفاذ کا نتیجہ تمام ساتھیوں کو بھیجا جاتا ہے۔ کام کے اس الگورتھم کو PBFT (Practical Byzantine Fault Tolerant) اتفاق رائے کہا جاتا ہے۔ سے مختلف ہے۔ کلاسک BFT حقیقت یہ ہے کہ پیغام بھیجا گیا ہے اور تصدیق کی توقع تمام شرکاء سے نہیں ہے، لیکن صرف ایک مخصوص سیٹ سے؛
  • کلائنٹ کو توثیق کی پالیسی کے مطابق جوابات کی تعداد موصول ہونے کے بعد، وہ لین دین کو آرڈرنگ سروس کو بھیجتا ہے۔
  • آرڈرنگ سروس ایک بلاک بناتی ہے اور اسے تمام عہد کرنے والے ساتھیوں کو بھیجتی ہے۔ آرڈرنگ سروس بلاکس کی ترتیب وار ریکارڈنگ کو یقینی بناتی ہے، جس سے نام نہاد لیجر فورک (سیکشن "فورکس" دیکھیں);
  • ساتھیوں کو ایک بلاک ملتا ہے، توثیق کی پالیسی کو دوبارہ چیک کریں، بلاک کو بلاکچین پر لکھیں اور "ورلڈ سٹیٹ" DB میں ریاست کو تبدیل کریں۔

وہ. اس کے نتیجے میں نوڈس کے درمیان کرداروں کی تقسیم ہوتی ہے۔ یہ یقینی بناتا ہے کہ بلاکچین توسیع پذیر اور محفوظ ہے:

  • اسمارٹ کنٹریکٹس (چین کوڈ) ساتھیوں کی توثیق کرتے ہیں۔ یہ سمارٹ معاہدوں کی رازداری کو یقینی بناتا ہے، کیونکہ یہ تمام شرکاء کی طرف سے ذخیرہ نہیں کیا جاتا ہے، لیکن صرف ساتھیوں کی توثیق کی طرف سے.
  • آرڈرنگ تیزی سے کام کرے۔ یہ اس حقیقت سے یقینی ہے کہ آرڈرنگ صرف ایک بلاک بناتا ہے اور اسے لیڈر کے ساتھیوں کے ایک مقررہ سیٹ کو بھیجتا ہے۔
  • کمٹمنٹ کرنے والے ساتھی صرف بلاکچین کو اسٹور کرتے ہیں - ان میں سے بہت سے ہوسکتے ہیں اور انہیں بہت زیادہ طاقت اور فوری آپریشن کی ضرورت نہیں ہے۔

Hyperledger Fabric کے آرکیٹیکچرل حل کے بارے میں مزید تفصیلات اور یہ اس طرح کیوں کام کرتا ہے اور دوسری صورت میں نہیں یہاں پایا جا سکتا ہے: فن تعمیر کی ابتدا یا یہاں: Hyperledger Fabric: اجازت یافتہ بلاکچینز کے لیے ایک تقسیم شدہ آپریٹنگ سسٹم.

لہذا، Hyperledger Fabric واقعی ایک آفاقی نظام ہے جس کے ساتھ آپ یہ کر سکتے ہیں:

  • سمارٹ کنٹریکٹ میکانزم کا استعمال کرتے ہوئے من مانی کاروباری منطق کو نافذ کریں۔
  • بلاکچین ڈیٹا بیس سے JSON فارمیٹ میں ڈیٹا ریکارڈ اور وصول کریں۔
  • سرٹیفکیٹ اتھارٹی کا استعمال کرتے ہوئے API تک رسائی فراہم کریں اور اس کی تصدیق کریں۔

اب جب کہ ہم Hyperledger Fabric کی تفصیلات کے بارے میں تھوڑا سا سمجھتے ہیں، آئیے آخر کار کچھ مفید کام کرتے ہیں!

بلاکچین تعینات کرنا

مسئلہ کی تشکیل

کام مندرجہ ذیل افعال کے ساتھ Citcoin نیٹ ورک کو نافذ کرنا ہے: ایک اکاؤنٹ بنائیں، بیلنس حاصل کریں، اپنے اکاؤنٹ کو ٹاپ اپ کریں، سکے ایک اکاؤنٹ سے دوسرے اکاؤنٹ میں منتقل کریں۔ آئیے ایک آبجیکٹ ماڈل بنائیں، جسے ہم ایک سمارٹ کنٹریکٹ میں مزید نافذ کریں گے۔ لہذا، ہمارے پاس ایسے اکاؤنٹ ہوں گے جن کی شناخت ناموں سے ہوتی ہے اور ان میں بیلنس اور اکاؤنٹس کی فہرست ہوتی ہے۔ ہائپر لیجر فیبرک اثاثوں کے لحاظ سے اکاؤنٹس اور اکاؤنٹس کی فہرست ہیں۔ اس کے مطابق، ان کی ایک تاریخ اور موجودہ حالت ہے۔ میں اسے واضح طور پر کھینچنے کی کوشش کروں گا:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

سرفہرست اعداد و شمار موجودہ حالت ہیں، جو "ورلڈ سٹیٹ" ڈیٹا بیس میں محفوظ ہیں۔ ان کے نیچے اعداد و شمار ہیں جو تاریخ کو دکھاتے ہیں جو بلاکچین میں محفوظ ہے۔ اثاثوں کی موجودہ حالت لین دین سے بدل جاتی ہے۔ اثاثہ صرف مجموعی طور پر تبدیل ہوتا ہے، لہذا لین دین کے نتیجے میں، ایک نئی چیز بنتی ہے، اور اثاثہ کی موجودہ قیمت تاریخ میں چلی جاتی ہے۔

IBM کلاؤڈ

ہم میں ایک اکاؤنٹ بناتے ہیں۔ آئی بی ایم کلاؤڈ. بلاکچین پلیٹ فارم کو استعمال کرنے کے لیے، اسے Pay-As-You-go پر اپ گریڈ کرنا ضروری ہے۔ یہ عمل تیز نہیں ہوسکتا ہے، کیونکہ... IBM اضافی معلومات کی درخواست کرتا ہے اور دستی طور پر اس کی تصدیق کرتا ہے۔ ایک مثبت نوٹ پر، میں کہہ سکتا ہوں کہ IBM کے پاس اچھا تربیتی مواد ہے جو آپ کو ان کے کلاؤڈ میں Hyperledger Fabric کو تعینات کرنے کی اجازت دیتا ہے۔ مجھے مضامین اور مثالوں کی درج ذیل سیریز پسند آئی:

مندرجہ ذیل IBM بلاکچین پلیٹ فارم کے اسکرین شاٹس ہیں۔ یہ بلاکچین بنانے کے طریقے کی ہدایت نہیں ہے، بلکہ کام کے دائرہ کار کا محض ایک مظاہرہ ہے۔ لہذا، اپنے مقاصد کے لیے، ہم ایک تنظیم بناتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

ہم اس میں نوڈس بناتے ہیں: Orderer CA، Org1 CA، Orderer Peer:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

ہم صارفین بناتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

ایک چینل بنائیں اور اسے citcoin کہتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

بنیادی طور پر چینل ایک بلاکچین ہے، اس لیے اس کی شروعات بلاک زیرو (جینیسیس بلاک) سے ہوتی ہے:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

اسمارٹ کنٹریکٹ لکھنا

/*
 * 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 فنکشنز ایسے ایونٹس تیار کرتے ہیں جو ڈیمو پروگرام کو موصول ہوں گے۔
  • فوری فنکشن کو ایک بار کہا جاتا ہے جب ایک سمارٹ معاہدہ فوری کیا جاتا ہے۔ درحقیقت، یہ صرف ایک بار نہیں بلکہ ہر بار سمارٹ کنٹریکٹ ورژن تبدیل ہوتا ہے۔ لہذا، خالی صف کے ساتھ فہرست شروع کرنا برا خیال ہے، کیونکہ اب، جب ہم سمارٹ کنٹریکٹ کا ورژن تبدیل کرتے ہیں، تو ہم موجودہ فہرست سے محروم ہو جائیں گے۔ لیکن یہ ٹھیک ہے، میں صرف سیکھ رہا ہوں)۔
  • اکاؤنٹس اور اکاؤنٹس کی فہرست JSON ڈیٹا ڈھانچے ہیں۔ جے ایس ڈیٹا ہیرا پھیری کے لیے استعمال ہوتا ہے۔
  • آپ getState فنکشن کال کا استعمال کرتے ہوئے کسی اثاثے کی موجودہ قیمت حاصل کر سکتے ہیں، اور putState کا استعمال کر کے اسے اپ ڈیٹ کر سکتے ہیں۔
  • اکاؤنٹ بناتے وقت، AddAccount فنکشن کہا جاتا ہے، جس میں بلاکچین میں اکاؤنٹس کی زیادہ سے زیادہ تعداد کا موازنہ کیا جاتا ہے (maxAccounts = 5)۔ اور یہاں ایک جام ہے (کیا آپ نے محسوس کیا ہے؟)، جو اکاؤنٹس کی تعداد میں لامتناہی اضافے کا باعث بنتا ہے۔ ایسی غلطیوں سے بچنا چاہیے)

اگلا، ہم اسمارٹ کنٹریکٹ کو چینل میں لوڈ کرتے ہیں اور اسے فوری بناتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

آئیے اسمارٹ کنٹریکٹ انسٹال کرنے کے لین دین کو دیکھتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

آئیے اپنے چینل کے بارے میں تفصیلات دیکھتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

نتیجے کے طور پر، ہمیں IBM کلاؤڈ میں بلاکچین نیٹ ورک کا درج ذیل خاکہ ملتا ہے۔ خاکہ میں ایمیزون کلاؤڈ میں ایک ورچوئل سرور پر چلنے والا ڈیمو پروگرام بھی دکھایا گیا ہے (اگلے حصے میں اس کے بارے میں مزید):

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

Hyperledger Fabric API کالز کے لیے GUI بنانا

Hyperledger Fabric میں ایک API ہے جسے استعمال کیا جا سکتا ہے:

  • چینل بنائیں؛
  • کنکشنز چینل سے ہم مرتبہ؛
  • چینل میں سمارٹ معاہدوں کی تنصیب اور انسٹیٹیوشن؛
  • کالنگ ٹرانزیکشنز؛
  • بلاکچین پر معلومات کی درخواست کریں۔

درخواست کی ترقی

ہمارے ڈیمو پروگرام میں ہم API کا استعمال صرف لین دین کو کال کرنے اور معلومات کی درخواست کرنے کے لیے کریں گے، کیونکہ ہم نے پہلے ہی IBM بلاکچین پلیٹ فارم کا استعمال کرتے ہوئے بقیہ مراحل مکمل کر لیے ہیں۔ ہم معیاری ٹیکنالوجی اسٹیک کا استعمال کرتے ہوئے ایک GUI لکھتے ہیں: Express.js + Vue.js + Node.js۔ آپ ایک علیحدہ مضمون لکھ سکتے ہیں کہ جدید ویب ایپلیکیشنز کو کیسے بنانا شروع کیا جائے۔ یہاں میں لیکچرز کی سیریز کا ایک لنک چھوڑوں گا جو مجھے سب سے زیادہ پسند آیا: 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. میں سرور کو تھوڑی دیر کے لیے آن رکھوں گا، پھر اسے آف کر دوں گا، کیونکہ... کرائے کے سینٹ ٹپک رہے ہیں، اور citcoin سکے ابھی تک اسٹاک ایکسچینج میں درج نہیں ہیں) میں آرٹیکل میں ڈیمو کے اسکرین شاٹس شامل کر رہا ہوں تاکہ کام کی منطق واضح ہو۔ ڈیمو ایپلیکیشن یہ کر سکتی ہے:

  • بلاکچین کو شروع کریں؛
  • ایک اکاؤنٹ بنائیں (لیکن اب آپ نیا اکاؤنٹ نہیں بنا سکتے، کیونکہ سمارٹ کنٹریکٹ میں بتائے گئے اکاؤنٹس کی زیادہ سے زیادہ تعداد بلاک چین میں پہنچ چکی ہے)؛
  • اکاؤنٹس کی فہرست حاصل کریں؛
  • ایلس، باب اور ایلکس کے درمیان citcoin سکے منتقل کریں؛
  • واقعات وصول کریں (لیکن اب واقعات کو دکھانے کا کوئی طریقہ نہیں ہے، لہذا سادگی کے لیے، انٹرفیس کہتا ہے کہ واقعات کی حمایت نہیں کی جاتی ہے)؛
  • لاگ ایکشنز۔

پہلے ہم بلاکچین کو شروع کرتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

اگلا، ہم اپنا اکاؤنٹ بناتے ہیں، بیلنس کے ساتھ وقت ضائع نہ کریں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

ہمیں تمام دستیاب اکاؤنٹس کی فہرست ملتی ہے:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

ہم بھیجنے والے اور وصول کنندہ کو منتخب کرتے ہیں، اور ان کے بیلنس حاصل کرتے ہیں۔ اگر بھیجنے والا اور وصول کنندہ ایک ہی ہیں، تو اس کا اکاؤنٹ دوبارہ بھر جائے گا:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

لاگ میں ہم لین دین کے عمل کی نگرانی کرتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

دراصل، یہ سب ڈیمو پروگرام کے ساتھ ہے۔ ذیل میں آپ بلاک چین میں ہمارا لین دین دیکھ سکتے ہیں:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

اور لین دین کی عمومی فہرست:

بلاکچین: ہمیں کیا پی او سی بنانا چاہئے؟

اس کے ساتھ، ہم نے Citcoin نیٹ ورک بنانے کے لیے PoC کے نفاذ کو کامیابی سے مکمل کر لیا ہے۔ سکے کی منتقلی کے لیے Citcoin کو ایک مکمل نیٹ ورک بننے کے لیے اور کیا کرنے کی ضرورت ہے؟ بہت کم:

  • اکاؤنٹ بنانے کے مرحلے پر، نجی/عوامی کلید کی تخلیق کو لاگو کریں۔ پرائیویٹ کلید کو اکاؤنٹ کے صارف کے پاس محفوظ کیا جانا چاہیے، عوامی کلید کو بلاک چین میں محفوظ کرنا چاہیے۔
  • ایک سکے کی منتقلی کریں جس میں صارف کی شناخت کے لیے کسی نام کے بجائے عوامی کلید کا استعمال کیا جائے۔
  • صارف سے سرور تک جانے والے لین دین کو اس کی نجی کلید سے خفیہ کریں۔

حاصل يہ ہوا

ہم نے Citcoin نیٹ ورک کو درج ذیل افعال کے ساتھ نافذ کیا ہے: ایک اکاؤنٹ شامل کریں، بیلنس حاصل کریں، اپنا اکاؤنٹ ٹاپ اپ کریں، سکے ایک اکاؤنٹ سے دوسرے اکاؤنٹ میں منتقل کریں۔ تو، پی او سی بنانے میں ہمیں کیا لاگت آئی؟

  • آپ کو عام طور پر بلاکچین اور خاص طور پر ہائپر لیجر فیبرک کا مطالعہ کرنے کی ضرورت ہے۔
  • آئی بی ایم یا ایمیزون کلاؤڈ استعمال کرنا سیکھیں۔
  • جے ایس پروگرامنگ زبان اور کچھ ویب فریم ورک سیکھیں۔
  • اگر کچھ ڈیٹا کو بلاک چین میں نہیں بلکہ ایک علیحدہ ڈیٹا بیس میں ذخیرہ کرنے کی ضرورت ہے، تو پھر انضمام کرنا سیکھیں، مثال کے طور پر، PostgreSQL کے ساتھ؛
  • اور آخری لیکن کم از کم - آپ لینکس کے علم کے بغیر جدید دنیا میں نہیں رہ سکتے!)

یقینا، یہ راکٹ سائنس نہیں ہے، لیکن آپ کو سخت محنت کرنی پڑے گی!

GitHub پر ذرائع

ذرائع نے بتایا GitHub کے. مخزن کی مختصر تفصیل:
تفصیلی فہر ست "سرور»- Node.js سرور
تفصیلی فہر ست "کلائنٹ»- Node.js کلائنٹ
تفصیلی فہر ست "blockchain"(پیرامیٹر کی اقدار اور کلیدیں، یقیناً غیر کام کر رہی ہیں اور صرف ایک مثال کے طور پر دی گئی ہیں):

  • معاہدہ - سمارٹ کنٹریکٹ سورس کوڈ
  • والیٹ — Hyperledger Fabric API استعمال کرنے کے لیے صارف کی چابیاں۔
  • *.cds - سمارٹ معاہدوں کے مرتب کردہ ورژن
  • *.json فائلیں - Hyperledger Fabric API استعمال کرنے کے لیے کنفیگریشن فائلوں کی مثالیں۔

یہ صرف شروعات ہے!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں