Blockchain: PoC ምን እንገንባ?

ዓይኖችህ ይፈራሉ እና እጆችህ ያሳክማሉ!

በቀደሙት መጣጥፎች ላይ blockchains የተገነቡባቸውን ቴክኖሎጂዎች ተመልክተናል (blockchain ምን መገንባት አለብን?) እና በእነሱ እርዳታ ሊተገበሩ የሚችሉ ጉዳዮች (ጉዳይ ለምን እንገነባለን?). በእጆችዎ ለመስራት ጊዜው አሁን ነው! አብራሪዎችን እና ፖሲ (የፅንሰ-ሃሳብ ማረጋገጫ)ን ለመተግበር ደመናዎችን መጠቀም እመርጣለሁ ፣ ምክንያቱም… በዓለም ላይ ከየትኛውም ቦታ ሆነው ሊገኙ ይችላሉ እና ብዙውን ጊዜ, በአሰልቺ አከባቢ መትከል ጊዜ ማባከን አያስፈልግም, ምክንያቱም ቅድመ-ቅምጦች አሉ። እንግዲያው አንድ ቀላል ነገር እንሥራ ለምሳሌ በተሳታፊዎች መካከል ሳንቲሞችን ለማስተላለፍ መረብ እና በትህትና ቢትኮይን እንበለው። ለዚህም የ IBM ደመና እና ሁለንተናዊ blockchain Hyperledger ጨርቅ እንጠቀማለን. በመጀመሪያ ፣ ለምን Hyperledger Fabric ሁለንተናዊ ብሎክቼይን ተብሎ የሚጠራው ለምን እንደሆነ እንወቅ?

Blockchain: PoC ምን እንገንባ?

Hyperledger ጨርቅ - ሁለንተናዊ blockchain

በአጠቃላይ ፣ ሁለንተናዊ የመረጃ ስርዓት የሚከተለው ነው-

  • የንግድ ሎጂክን የሚያከናውን የአገልጋዮች ስብስብ እና የሶፍትዌር ኮር;
  • ከስርዓቱ ጋር መስተጋብር በይነገጾች;
  • መሣሪያዎችን/ሰዎችን ለመመዝገብ፣ ለማረጋገጥ እና ፈቃድ ለመስጠት የሚረዱ መሣሪያዎች፤
  • የክወና እና የማህደር መረጃን የሚያከማች የውሂብ ጎታ፡-

Blockchain: PoC ምን እንገንባ?

የ Hyperledger ጨርቅ ምን እንደሆነ ኦፊሴላዊው እትም በ ላይ ሊነበብ ይችላል። ጣቢያእና ባጭሩ ሃይፐርሌጀር ጨርቅ የግል ብሎክቼይን ለመገንባት እና በJS እና Go ፕሮግራሚንግ ቋንቋዎች የተፃፉ የዘፈቀደ ስማርት ኮንትራቶችን ለመፈጸም የሚያስችል ክፍት ምንጭ መድረክ ነው። የ Hyperledger Fabric አርክቴክቸርን በዝርዝር እንመልከተው እና ይህ መረጃን ለማከማቸት እና ለመቅዳት የተለየ ነገር ያለው ሁሉን አቀፍ ስርዓት መሆኑን እናረጋግጥ። ልዩነቱ ልክ እንደ ሁሉም blockchain መረጃው በብሎክቼይን ላይ በተቀመጡ ብሎኮች ውስጥ የሚከማች ተሳታፊዎቹ መግባባት ላይ ከደረሱ እና መረጃውን ከመዘገቡ በኋላ በጸጥታ ሊታረሙ ወይም ሊሰረዙ አይችሉም።

ሃይፐርልጀር ጨርቅ አርክቴክቸር

ስዕሉ የሃይፐርልጀር የጨርቅ አርክቴክቸርን ያሳያል፡-

Blockchain: PoC ምን እንገንባ?

ድርጅቶች - ድርጅቶች እኩያዎችን ይይዛሉ, ማለትም. blockchain በድርጅቶች ድጋፍ ምክንያት አለ. የተለያዩ ድርጅቶች የአንድ ቻናል አካል ሊሆኑ ይችላሉ።

ሰርጥ - እኩዮችን በቡድን የሚያገናኝ አመክንዮአዊ መዋቅር, ማለትም. እገዳው ተለይቷል. ሃይፐርልጀር ጨርቅ በአንድ ጊዜ በርካታ ብሎክቼይንን በተለያዩ የንግድ ሎጂክ ማካሄድ ይችላል።

የአባልነት አገልግሎት አቅራቢ (MSP) ማንነትን ለመስጠት እና ሚናዎችን ለመመደብ CA (የምስክር ወረቀት ባለስልጣን) ነው። መስቀለኛ መንገድ ለመፍጠር ከኤምኤስፒ ጋር መገናኘት ያስፈልግዎታል።

የአቻ አንጓዎች - ግብይቶችን ያረጋግጡ ፣ blockchain ን ያከማቹ ፣ ብልጥ ውሎችን ያስፈጽሙ እና ከመተግበሪያዎች ጋር ይገናኙ። እኩዮች መታወቂያ አላቸው (ዲጂታል ሰርተፍኬት)፣ እሱም በMSP የተሰጠ። ልክ እንደ Bitcoin ወይም Etherium አውታረመረብ ሁሉም አንጓዎች እኩል መብት ካላቸው በሃይፐርልጀር የጨርቅ ኖዶች ውስጥ የተለያዩ ሚናዎችን ይጫወታሉ፡

  • አቻ ምናልባት አቻን መደገፍ (EP) እና ብልጥ ኮንትራቶችን ያስፈጽሙ።
  • ቆራጥ እኩያ (ሲፒ) - በ blockchain ውስጥ ያለውን ውሂብ ብቻ ያስቀምጡ እና "የዓለም ሁኔታን" ያዘምኑ.
  • መልህቅ እኩያ (AP) - ብዙ ድርጅቶች በብሎክቼይን ውስጥ ከተሳተፉ ፣ ከዚያ መልህቅ እኩዮች በመካከላቸው ለመግባባት ያገለግላሉ። እያንዳንዱ ድርጅት አንድ ወይም ከዚያ በላይ መልህቅ እኩዮች ሊኖሩት ይገባል። ኤፒን በመጠቀም፣ በድርጅት ውስጥ ያለ ማንኛውም እኩያ በሌሎች ድርጅቶች ውስጥ ስላሉ እኩዮች ሁሉ መረጃ ማግኘት ይችላል። በኤፒዎች መካከል መረጃን ለማመሳሰል ይጠቅማል የሀሜት ፕሮቶኮል.
  • መሪ አቻ - አንድ ድርጅት ብዙ እኩዮች ካሉት የአቻው መሪ ብቻ ከትእዛዝ አገልግሎት እገዳዎችን ይቀበላል እና ለተቀሩት እኩዮች ይሰጣል። መሪው በስታቲስቲክስ ሊገለጽ ወይም በድርጅቱ ውስጥ ባሉ እኩዮች በተለዋዋጭነት ሊመረጥ ይችላል። የሐሜት ፕሮቶኮል ሾለ መሪዎች መረጃን ለማመሳሰልም ያገለግላል።

ንብረቶች - ዋጋ ያላቸው እና በብሎክቼይን ላይ የተከማቹ አካላት። በተለይ፣ ይህ በJSON ቅርጸት ቁልፍ እሴት ያለው ውሂብ ነው። በብሎክቼይን ውስጥ የተመዘገበው ይህ መረጃ ነው። በ blockchain ውስጥ የተከማቸ ታሪክ እና ወቅታዊ ሁኔታ አላቸው, እሱም በ "ዓለም ግዛት" የውሂብ ጎታ ውስጥ የተከማቸ. እንደ የንግድ ሥራዎች ላይ በመመስረት የውሂብ መዋቅሮች በዘፈቀደ ይሞላሉ። ምንም አስፈላጊ መስኮች የሉም, ብቸኛው ምክር ንብረቶች ባለቤት ሊኖራቸው እና ዋጋ ያለው መሆን አለበት.

የሒሳብ መዝገብ - የአሁኑን የንብረት ሁኔታ የሚያከማች Blockchain እና የ Word ስቴት ዳታቤዝ ያካትታል። የዓለም ግዛት LevelDB ወይም CouchDB ይጠቀማል።

ዘመናዊ ኮንትራት - ብልጥ ኮንትራቶችን በመጠቀም የስርዓቱ የንግድ አመክንዮ ተግባራዊ ይሆናል። በሃይፐርልጀር ጨርቅ ውስጥ ስማርት ኮንትራቶች ቼይንኮድ ይባላሉ. ቼይንኮድ በመጠቀም፣ ንብረቶች እና ግብይቶች በእነሱ ላይ ተገልጸዋል። በቴክኒካዊ አነጋገር፣ ስማርት ኮንትራቶች በJS ወይም Go ፕሮግራሚንግ ቋንቋዎች የሚተገበሩ የሶፍትዌር ሞጁሎች ናቸው።

የድጋፍ ፖሊሲ - ለእያንዳንዱ ሰንሰለት ኮድ ለንግድ ግብይቱ ምን ያህል ማረጋገጫዎች እንደሚጠበቁ እና ከማን እንደሚጠበቅ ፖሊሲ ማዘጋጀት ይችላሉ። መመሪያው ካልተዋቀረ ነባሪው፡- “ግብይቱ በሰርጡ ውስጥ በማንኛውም የድርጅት አባል መረጋገጥ አለበት። የፖሊሲዎች ምሳሌዎች፡-

  • ግብይቱ በማንኛውም የድርጅቱ አስተዳዳሪ መጽደቅ አለበት;
  • በማንኛውም የድርጅቱ አባል ወይም ደንበኛ መረጋገጥ አለበት;
  • በማንኛውም አቻ ድርጅት መረጋገጥ አለበት።

የማዘዝ አገልግሎት - ግብይቶችን ወደ ብሎኮች በማሸግ እና በሰርጡ ውስጥ ላሉ እኩዮች ይልካል። በአውታረ መረቡ ላይ ላሉ እኩዮች ሁሉ መልዕክቶችን ማድረስ ዋስትና ይሰጣል። ለኢንዱስትሪ ስርዓቶች ጥቅም ላይ ይውላል የካፍካ መልእክት ደላላ, ለልማት እና ለሙከራ ሶሎ.

የጥሪ ፍሰት

Blockchain: PoC ምን እንገንባ?

  • አፕሊኬሽኑ Go፣ Node.js ወይም Java SDK ን በመጠቀም ከHyperledger Fabric ጋር ይገናኛል።
  • ደንበኛው የ tx ግብይት ይፈጥራል እና ወደ ድጋፍ ሰጪ እኩዮች ይልካል;
  • አቻው የደንበኛውን ፊርማ ያረጋግጣል፣ ግብይቱን ያጠናቅቃል እና የድጋፍ ፊርማውን ለደንበኛው ይልካል። ቼይንኮድ የሚተገበረው በፀደቁ አቻ ላይ ብቻ ነው፣ እና የአፈፃፀሙ ውጤት ለሁሉም እኩዮች ይላካል። ይህ የስራ ስልተ ቀመር PBFT (Practical Byzantine Fault Tolerant) ስምምነት ይባላል። ከሚለው ይለያል ክላሲክ BFT መልእክቱ የተላከው እና ማረጋገጫው ከሁሉም ተሳታፊዎች ሳይሆን ከተወሰነ ስብስብ ብቻ ነው የሚጠበቀው;
  • ደንበኛው ከድጋፍ ፖሊሲው ጋር የሚዛመዱ ምላሾችን ቁጥር ከተቀበለ በኋላ ግብይቱን ወደ ትዕዛዝ አገልግሎት ይልካል;
  • የትእዛዝ አገልግሎት ብሎክን ያመነጫል እና ለሁሉም ቁርጠኝነት እኩዮች ይልካል። የማዘዝ አገልግሎት ብሎኮችን በቅደም ተከተል መመዝገብን ያረጋግጣል ፣ ይህም የሂሳብ ደብተር ሹካ ተብሎ የሚጠራውን ያስወግዳል (ክፍልን ይመልከቱ "ሹካዎች");
  • እኩዮች እገዳ ይቀበላሉ, የድጋፍ ፖሊሲን እንደገና ይፈትሹ, እገዳውን ወደ blockchain ይፃፉ እና በ "World state" DB ውስጥ ያለውን ሁኔታ ይለውጡ.

እነዚያ። ይህ በአንጓዎች መካከል ያለውን ሚና መከፋፈልን ያመጣል. ይህ blockchain ሊሰፋ የሚችል እና ደህንነቱ የተጠበቀ መሆኑን ያረጋግጣል፡-

  • ብልጥ ኮንትራቶች (ቻይንኮድ) አቻዎችን የሚደግፉ ያከናውናሉ። ይህ የስማርት ኮንትራቶችን ምስጢራዊነት ያረጋግጣል, ምክንያቱም በሁሉም ተሳታፊዎች የተከማቸ አይደለም, ነገር ግን እኩዮችን በማፅደቅ ብቻ ነው.
  • ማዘዝ በፍጥነት መስራት አለበት። ይህ የተረጋገጠው ማዘዙ እገዳን ብቻ በመፍጠር ወደ ቋሚ የመሪ እኩዮች ስብስብ በመላክ ነው።
  • ቆራጥ እኩዮች blockchainን ብቻ ያከማቹ - ብዙዎቹ ሊኖሩ ይችላሉ እና ብዙ ኃይል እና ፈጣን ቀዶ ጥገና አያስፈልጋቸውም.

ስለ Hyperledger Fabric የስነ-ህንፃ መፍትሄዎች እና ለምን በዚህ መንገድ እንደሚሰራ እና ካልሆነ እዚህ ላይ ተጨማሪ ዝርዝሮችን ማግኘት ይቻላል- የስነ-ህንፃ አመጣጥ ወይም እዚህ፡ ሃይፐርልጀር ጨርቅ፡ ለተፈቀደው ብሎክ ቼይንስ የሚሰራጭ ኦፐሬቲንግ ሲስተም.

ስለዚህ ፣ ሃይፐርልጀር ጨርቅ የሚከተሉትን ማድረግ የሚችሉበት በእውነት ሁለንተናዊ ስርዓት ነው-

  • ብልጥ የኮንትራት ዘዴን በመጠቀም የዘፈቀደ የንግድ ሼል አመክንዮ መተግበር;
  • ከ blockchain ዳታቤዝ በJSON ቅርጸት ይቅዱ እና ይቀበሉ;
  • የምስክር ወረቀት ባለስልጣን በመጠቀም የኤፒአይ መዳረሻ ይስጡ እና ያረጋግጡ።

ስለ Hyperledger Fabric ዝርዝር ሁኔታ ትንሽ ከተረዳን ፣ በመጨረሻ አንድ ጠቃሚ ነገር እናድርግ!

blockchain በማሰማራት ላይ

የችግሩ ቀመር

ተግባሩ የ Citcoin አውታረ መረብን ከሚከተሉት ተግባራት ጋር መተግበር ነው-መለያ ይፍጠሩ ፣ ቀሪ ሂሳብ ያግኙ ፣ ሂሳብዎን ይሙሉ ፣ ሳንቲሞችን ከአንድ መለያ ወደ ሌላ ያስተላልፉ። በዘመናዊ ውል ውስጥ የበለጠ ተግባራዊ የምናደርገውን የነገር ሞዴል እንሳል። ስለዚህ፣ በስም ተለይተው የሚታወቁ ሂሳቦች እና ቀሪ ሂሳቦች እና የመለያዎች ዝርዝር ይኖረናል። ሂሳቦች እና የመለያዎች ዝርዝር ከሃይፐርልጀር የጨርቅ ንብረቶች አንፃር ናቸው. በዚህም መሠረት ታሪክና ወቅታዊ ሁኔታ አላቸው። ይህንን በግልፅ ለመሳል እሞክራለሁ፡-

Blockchain: PoC ምን እንገንባ?

ከፍተኛዎቹ አሃዞች በ "ዓለም ሁኔታ" የውሂብ ጎታ ውስጥ የተቀመጠው የአሁኑ ሁኔታ ናቸው. ከነሱ በታች በብሎክቼይን ውስጥ የተከማቸ ታሪክን የሚያሳዩ ምስሎች አሉ። አሁን ያለው የንብረት ሁኔታ በግብይቶች ተለውጧል. ንብረቱ የሚለወጠው በአጠቃላይ ብቻ ነው, ስለዚህ በግብይቱ ምክንያት, አዲስ ነገር ተፈጠረ, እና የንብረቱ የአሁኑ ዋጋ ወደ ታሪክ ውስጥ ይገባል.

IBM ደመና

ውስጥ መለያ እንፈጥራለን IBM ደመና. የብሎክቼይን መድረክ ለመጠቀም ወደ Pay-As-You-Go ማሻሻል አለበት። ይህ ሂደት ፈጣን ላይሆን ይችላል፣ ምክንያቱም... IBM ተጨማሪ መረጃ ጠይቆ በእጅ ያረጋግጣል። በአዎንታዊ መልኩ, IBM በደመናቸው ውስጥ Hyperledger Fabric ን ለማሰማራት የሚያስችል ጥሩ የስልጠና ቁሳቁሶች አሉት ማለት እችላለሁ. የሚከተሉትን ተከታታይ መጣጥፎች እና ምሳሌዎች ወድጄአለሁ፡-

የሚከተሉት የ IBM Blockchain መድረክ ቅጽበታዊ ገጽ እይታዎች ናቸው። ይህ እገዳን እንዴት መፍጠር እንደሚቻል መመሪያ አይደለም, ነገር ግን በቀላሉ የስራውን ወሰን ማሳያ ነው. ስለዚህ፣ ለዓላማችን አንድ ድርጅት እንሰራለን፡-

Blockchain: PoC ምን እንገንባ?

በውስጡ አንጓዎችን እንፈጥራለን፡ Orderer CA፣ Org1 CA፣ Orderer Peer፡

Blockchain: PoC ምን እንገንባ?

ተጠቃሚዎችን እንፈጥራለን-

Blockchain: PoC ምን እንገንባ?

ቻናል ይፍጠሩ እና citcoin ብለው ይደውሉ

Blockchain: PoC ምን እንገንባ?

በመሠረቱ ቻናል blockchain ነው፣ስለዚህ በብሎክ ዜሮ (ዘፍጥረት ብሎክ) ይጀምራል፡-

Blockchain: 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;

በማስተዋል ፣ ሁሉም ነገር እዚህ ግልፅ መሆን አለበት-

  • የማሳያ ፕሮግራሙ Hyperledger Fabric API በመጠቀም የሚጠራቸው በርካታ ተግባራት (AddAccount፣ GetAccounts፣ SendFrom፣ GetBalance፣ RefillBalance) አሉ።
  • SendFrom እና RefillBalance ተግባራት የማሳያ ፕሮግራሙ የሚያገኛቸውን ክስተቶች ያመነጫሉ።
  • የፈጣን ተግባር አንድ ጊዜ ብልጥ ውል ሲፈጠር ይባላል። እንደ እውነቱ ከሆነ, አንድ ጊዜ ብቻ አይደለም የሚጠራው, ነገር ግን ሁልጊዜ ብልጥ የኮንትራት ስሪት ሲቀየር. ስለዚህ, ዝርዝርን በባዶ ድርድር ማስጀመር መጥፎ ሀሳብ ነው, ምክንያቱም አሁን፣ የስማርት ኮንትራቱን ስሪት ስንቀይር፣ አሁን ያለውን ዝርዝር እናጣለን። ግን ደህና ነው, እየተማርኩ ነው).
  • መለያዎች እና የመለያዎች ዝርዝር የJSON ውሂብ አወቃቀሮች ናቸው። JS ለመረጃ አያያዝ ያገለግላል።
  • የGetState ተግባር ጥሪን በመጠቀም የንብረቱን ወቅታዊ ዋጋ ማግኘት እና putStateን በመጠቀም ማዘመን ይችላሉ።
  • መለያ በሚፈጥሩበት ጊዜ የ AddAccount ተግባር ይባላል ይህም በብሎክቼይን ውስጥ ላለው ከፍተኛው የመለያዎች ብዛት (maxAccounts = 5) ንፅፅር ይደረጋል። እና እዚህ ጃምብ አለ ( አስተውለዋል?) ፣ ይህም ወደ መለያዎች ብዛት ማለቂያ የሌለው ጭማሪ ያስከትላል። እንደዚህ ያሉ ስህተቶች መወገድ አለባቸው)

በመቀጠል ብልጥ ኮንትራቱን ወደ ቻናሉ እንጭነዋለን እና አፋጣኝ እናደርጋለን፡-

Blockchain: PoC ምን እንገንባ?

ስማርት ኮንትራት ለመጫን ግብይቱን እንመልከት፡-

Blockchain: PoC ምን እንገንባ?

ስለ ቻናላችን ዝርዝሩን እንይ፡-

Blockchain: PoC ምን እንገንባ?

በውጤቱም, በ IBM ደመና ውስጥ የሚከተለውን የብሎክቼይን አውታር ንድፍ እናገኛለን. ስዕሉ በአማዞን ደመና ውስጥ በቨርቹዋል አገልጋይ ላይ የሚሰራ የማሳያ ፕሮግራም ያሳያል (በሚቀጥለው ክፍል ስለ እሱ የበለጠ)

Blockchain: PoC ምን እንገንባ?

ለHyperledger ጨርቅ API ጥሪዎች GUI መፍጠር

Hyperledger ጨርቅ የሚከተሉትን ለማድረግ የሚያገለግል ኤፒአይ አለው።

  • ሰርጥ ይፍጠሩ;
  • ግንኙነቶች አቻ ወደ ሰርጥ;
  • በሰርጡ ውስጥ ዘመናዊ ኮንትራቶችን መጫን እና ማፋጠን;
  • ጥሪ ግብይቶች;
  • በብሎክቼይን ላይ መረጃ ይጠይቁ።

የመተግበሪያ ልማት

በእኛ የማሳያ ፕሮግራም ውስጥ ግብይቶችን ለመደወል እና መረጃ ለመጠየቅ ኤፒአይን ብቻ እንጠቀማለን ፣ ምክንያቱም የ IBM blockchain መድረክን በመጠቀም የተቀሩትን እርምጃዎች ጨርሰናል. እኛ አንድ መደበኛ የቴክኖሎጂ ቁልል በመጠቀም GUI እንጽፋለን: Express.js + Vue.js + Node.js. ዘመናዊ የድር መተግበሪያዎችን እንዴት መፍጠር እንደሚችሉ የተለየ ጽሑፍ መጻፍ ይችላሉ። እዚህ በጣም ወደድኳቸው ተከታታይ ትምህርቶች የሚወስድ አገናኝ ትቻለሁ፡- ሙሉ ቁልል ድር መተግበሪያ Vue.js እና Express.jsን በመጠቀም. ውጤቱ በGoogle የቁስ ዲዛይን ዘይቤ ውስጥ የሚታወቅ ግራፊክ በይነገጽ ያለው የደንበኛ አገልጋይ መተግበሪያ ነው። በደንበኛው እና በአገልጋይ መካከል ያለው REST ኤፒአይ በርካታ ጥሪዎችን ያቀፈ ነው፡-

  • HyperledgerDemo/v1/init - blockchainን ማስጀመር;
  • HyperledgerDemo/v1/መለያዎች/ዝርዝር - ሁሉንም መለያዎች ዝርዝር ያግኙ;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — የቦብ መለያ መፍጠር;
  • HyperledgerDemo/v1/info?account=Bob — ሾለ ቦብ መለያ መረጃ ማግኘት;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 — ከቦብ ወደ አሊስ ሁለት ሳንቲሞችን ያስተላልፉ;
  • HyperledgerDemo/v1/ disconnect - ከ blockchain ጋር ያለውን ግንኙነት ዝጋ።

በምሳሌዎች ውስጥ የተካተቱት የኤፒአይ መግለጫ የፖስታ ሰው ድር ጣቢያ ኤችቲቲፒ ኤፒአይን ለመፈተሽ የታወቀ ፕሮግራም።

የማሳያ መተግበሪያ በአማዞን ደመና ውስጥ

አፕሊኬሽኑን ወደ አማዞን ሰቀልኩት ምክንያቱም... IBM አሁንም መለያዬን ማሻሻል እና ምናባዊ ሰርቨሮችን እንድፈጥር አልፈቀደልኝም። ቼሪ ወደ ጎራው እንዴት እንደሚታከል፡- www.citcoin.info. አገልጋዩን ለትንሽ ጊዜ አቆማለው ከዛ አጠፋው፣ ምክንያቱም... ለኪራይ ሳንቲሞች ይንጠባጠባሉ, እና የ citcoin ሳንቲሞች በአክሲዮን ልውውጥ ላይ እስካሁን አልተዘረዘሩም) የሥራው አመክንዮ ግልጽ እንዲሆን በጽሁፉ ውስጥ ማሳያውን የስክሪፕት ማሳያዎችን እጨምራለሁ. የማሳያ መተግበሪያ የሚከተሉትን ማድረግ ይችላል:

  • ማገጃውን ያስጀምሩ;
  • መለያ ይፍጠሩ (አሁን ግን አዲስ መለያ መፍጠር አይችሉም, ምክንያቱም በስማርት ኮንትራት ውስጥ የተገለጹት ከፍተኛው የሂሳብ ቁጥር በ blockchain ውስጥ ስለደረሰ);
  • የመለያዎች ዝርዝር ይቀበሉ;
  • በአሊስ ፣ ቦብ እና አሌክስ መካከል የሲቲኮን ሳንቲሞችን ያስተላልፉ;
  • ክስተቶችን ይቀበሉ (አሁን ግን ክስተቶችን ለማሳየት ምንም መንገድ የለም, ስለዚህ ለቀላልነት, በይነገጹ ክስተቶች እንደማይደገፉ ይናገራል);
  • የምዝግብ ማስታወሻ ድርጊቶች.

በመጀመሪያ blockchainን እናስጀምራለን-

Blockchain: PoC ምን እንገንባ?

በመቀጠል መለያችንን እንፈጥራለን ፣ በሂሳቡ ጊዜ አያባክን-

Blockchain: PoC ምን እንገንባ?

ሁሉንም የሚገኙ መለያዎች ዝርዝር እናገኛለን፡-

Blockchain: PoC ምን እንገንባ?

ላኪውን እና ተቀባዩን እንመርጣለን እና ሚዛናቸውን እናገኛለን። ላኪው እና ተቀባዩ ተመሳሳይ ከሆኑ መለያው ይሞላል፡-

Blockchain: PoC ምን እንገንባ?

በምዝግብ ማስታወሻው ውስጥ የግብይቶችን አፈፃፀም እንቆጣጠራለን-

Blockchain: PoC ምን እንገንባ?

በእውነቱ፣ ያ ብቻ ነው የማሳያ ፕሮግራሙ። ከዚህ በታች የእኛን ግብይት በብሎክቼይን ማየት ይችላሉ፡-

Blockchain: PoC ምን እንገንባ?

እና አጠቃላይ የግብይቶች ዝርዝር፡-

Blockchain: PoC ምን እንገንባ?

በዚህ የ Citcoin አውታረመረብ ለመፍጠር የ PoC ትግበራን በተሳካ ሁኔታ አጠናቅቀናል. ሲቲኮይን ሳንቲሞችን ለማስተላለፍ የተሟላ አውታረመረብ እንዲሆን ሌላ ምን መደረግ አለበት? በጣም ትንሽ:

  • በሂሳብ መፍጠሪያ ደረጃ፣ የግል/የህዝብ ቁልፍ ማመንጨትን ተግባራዊ ያድርጉ። የግል ቁልፉ ከመለያው ተጠቃሚ ጋር መቀመጥ አለበት ፣የወል ቁልፉ በብሎክቼይን ውስጥ መቀመጥ አለበት።
  • ተጠቃሚውን ለመለየት ከስም ይልቅ የህዝብ ቁልፍ ጥቅም ላይ የሚውልበትን የሳንቲም ዝውውር ያድርጉ።
  • በግል ቁልፉ ከተጠቃሚው ወደ አገልጋዩ የሚሄዱ ግብይቶችን ያመስጥሩ።

መደምደሚያ

የ Citcoin ኔትወርክን ከሚከተሉት ተግባራት ጋር ተግባራዊ አድርገናል-አካውንት ይጨምሩ ፣ ቀሪ ሂሳብ ያግኙ ፣ ሂሳብዎን ይሙሉ ፣ ሳንቲሞችን ከአንድ መለያ ወደ ሌላ ያስተላልፉ። ስለዚህ፣ PoC ለመገንባት ምን ዋጋ አስከፍሎናል?

  • በአጠቃላይ blockchain እና በተለይ Hyperledger Fabric ማጥናት ያስፈልግዎታል;
  • IBM ወይም Amazon ደመናዎችን መጠቀም ይማሩ;
  • የJS ፕሮግራሚንግ ቋንቋ እና አንዳንድ የድር ማዕቀፍ ይማሩ;
  • አንዳንድ መረጃዎች በብሎክቼይን ውስጥ ሳይሆን በተለየ የመረጃ ቋት ውስጥ ማከማቸት የሚያስፈልጋቸው ከሆነ፣ ለምሳሌ ከ PostgreSQL ጋር ማዋሃድ ይማሩ።
  • እና የመጨረሻው ግን ቢያንስ - ያለ ሊኑክስ እውቀት በዘመናዊው ዓለም ውስጥ መኖር አይችሉም!)

እርግጥ ነው, የሮኬት ሳይንስ አይደለም, ግን ጠንክሮ መሥራት አለብዎት!

GitHub ላይ ምንጮች

ምንጮች አስቀምጠዋል የፊልሙ. የማከማቻው አጭር መግለጫ፡-
ካታሎግ "አገልጋይ»- Node.js አገልጋይ
ካታሎግ "ደምበኛ» - Node.js ደንበኛ
ካታሎግ "blockchain"(የመለኪያ እሴቶች እና ቁልፎች, በእርግጥ, የማይሰሩ እና እንደ ምሳሌ ብቻ የተሰጡ ናቸው):

  • ኮንትራት - ብልጥ የኮንትራት ምንጭ ኮድ
  • ቦርሳ — ሃይፐርልጀር ጨርቅ ኤፒአይ ለመጠቀም የተጠቃሚ ቁልፎች።
  • *.cds - የስማርት ኮንትራቶች ቅጂዎች
  • *.json ፋይሎች - የHyperledger ጨርቅ ኤፒአይ ለመጠቀም የማዋቀሪያ ፋይሎች ምሳሌዎች

ጅምር ብቻ ነው!

ምንጭ: hab.com

አስተያየት ያክሉ