Blockchain: what will it cost us to build PoC?

Sytë friksohen, por duar janë të gatshme për punë!

NĂ« artikujt e mĂ«parshĂ«m, ne u merem me teknologjitĂ« mbi tĂ« cilat ndĂ«rtohen blockchain-et (ÇfarĂ« na kushton tĂ« ndĂ«rtuam njĂ« blockchain?) dhe rastet e pĂ«rdorimit qĂ« mund tĂ« realizohen me ndihmĂ«n e tyre (ÇfarĂ« duhet pĂ«r tĂ« ndĂ«rtuar njĂ« rast?). Ka ardhur koha tĂ« punojmĂ« me duar! PĂ«r realizimin e piloteve dhe PoC (Proof of Concept), unĂ« preferoj tĂ« pĂ«rdor re, pasi aksesin nĂ« to e kam nga çdo cep i botĂ«s, dhe shpesh nuk Ă«shtĂ« nevoja tĂ« harxhoj kohĂ« pĂ«r instalimin e mjedisit, pasi ka konfiguracione tĂ« parapara. Pra, le tĂ« bĂ«jmĂ« diçka tĂ« thjeshtĂ«, p.sh., njĂ« rrjet pĂ«r transferimin e monedhave ndĂ«rmjet anĂ«tarĂ«ve dhe ta quajmĂ« modestisht Sytcoin. PĂ«r kĂ«tĂ« do tĂ« pĂ«rdorim re IBM dhe blockchain-in universale Hyperledger Fabric. Fillimisht, le tĂ« kuptojmĂ« pse Hyperledger Fabric quhet njĂ« blockchain universal?

Blockchain: what will it cost us to build PoC?

Hyperledger Fabric — blockchain universal

Në përgjithësi, një sistem informacioni universale është:

  • NjĂ« grup serverash dhe njĂ« bĂ«rthamĂ« programore qĂ« ekzekuton logjikĂ«n e biznesit;
  • Interfazat pĂ«r ndĂ«rveprim me sistemin;
  • Mjetet pĂ«r regjistrimin, autentifikimin dhe autorizimin e pajisjeve/njerezve;
  • NjĂ« bazĂ« tĂ« dhĂ«nash qĂ« ruan tĂ« dhĂ«nat operative dhe ato arkiv:

Blockchain: what will it cost us to build PoC?

Mund të lexoni versionin zyrtar për atë çfarë është Hyperledger Fabric në të internetit, dhe nëse flasim shkurt, Hyperledger Fabric është një platformë opensource që lejon ndërtimin e blockchain-ve të mbyllur dhe ekzekutimin e kontratave inteligjente të shkruara në gjuhët programuese JS dhe Go. Le të shohim në detaje arkitekturën e Hyperledger Fabric dhe të konfirmojmë se është një sistem universal, ku ka vetëm specifika për ruajtjen dhe regjistrimin e të dhënave. Specifika qëndron në faktin se të dhënat, ashtu si në të gjitha blockchain-et, ruhen në blloqe, të cilat vendosen në blockchain vetëm kur pjesëmarrësit arrijnë një konsensus dhe pas regjistrimit, të dhënat nuk mund të korrigjohen ose fshihen pa u vënë re.

Arkitektura e Hyperledger Fabric

NĂ« diagram paraqitet arkitektura e Hyperledger Fabric:

Blockchain: what will it cost us to build PoC?

Organizatat — organizatat pĂ«rmbajnĂ« peer, kĂ«shtu qĂ« blockchain-i ekziston pĂ«r shkak tĂ« mbĂ«shtetjes sĂ« organizatave. Organizata tĂ« ndryshme mund tĂ« pĂ«rfshihen nĂ« njĂ« kanal.

Kanal — njĂ« strukturĂ« logjike qĂ« bashkon peer nĂ« grupe, kĂ«shtu qĂ« pĂ«rcaktohet blockchain-i. Hyperledger Fabric mund tĂ« pĂ«rpunojĂ« njĂ«kohĂ«sisht disa blockchain-e me logjikĂ« tĂ« ndryshme biznesi.

Ofruesi i ShĂ«rbimeve tĂ« AnĂ«tarĂ«sisĂ« (MSP) — Ă«shtĂ« CA (Autoriteti i Certifikimit) pĂ«r lĂ«shimin e identitetit dhe caktimin e roleve. PĂ«r tĂ« krijuar njĂ« nod, duhet tĂ« bashkĂ«punoni me MSP.

NjĂ«si peer — kontrollojnĂ« transaksionet, ruajnĂ« blockchain, ekzekutojnĂ« kontrata inteligjente dhe ndihmojnĂ« aplikacionet. NjĂ«sitĂ« peer kanĂ« identitet (certifikatĂ« digjitale) qĂ« jepet nga MSP. Ndryshe nga rrjeti Bitcoin ose Ethereum, ku tĂ« gjitha nodet janĂ« tĂ« barabarta, nĂ« Hyperledger Fabric nodet luajnĂ« role tĂ« ndryshme:

  • NjĂ«si peer mund tĂ« jetĂ« endorsing peer (EP) dhe tĂ« ekzekutojĂ« kontrata inteligjente.
  • Committing peer (CP) — ruajnĂ« vetĂ«m tĂ« dhĂ«nat nĂ« blockchain dhe pĂ«rditĂ«sojnĂ« "Statin e BotĂ«s".
  • Anchor Peer (AP) — nĂ«se nĂ« blockchain marrin pjesĂ« disa organizata, atĂ«herĂ« ankor pĂ«r janĂ« pĂ«rdorur pĂ«r lidhjen midis tyre. Çdo organizatĂ« duhet tĂ« ketĂ« njĂ« ose disa ankor pĂ«r. Me ndihmĂ«n e AP, çdo peer nĂ« organizatĂ« mund tĂ« marrĂ« informacion rreth tĂ« gjithĂ« peer-ave nĂ« organizatat e tjera. PĂ«r tĂ« sinkronizuar informacionin midis AP pĂ«rdoret protokolli gossip.
  • Leader Peer — nĂ«se organizata ka disa peer, atĂ«herĂ« lideri peer do tĂ« marrĂ« blloqe nga shĂ«rbimi i porositjes dhe do t'i japĂ« ato pĂ«r peer-t e tjera. Lideri mund tĂ« vendoset nĂ« mĂ«nyrĂ« statike ose tĂ« zgjidhet dinamikisht nga peer-t nĂ« organizatĂ«. PĂ«r sinkronizimin e informacionit mbi liderĂ«t pĂ«rdoret gjithashtu protokolli gossip.

Aktivat — entitete me vlerĂ« qĂ« ruhen nĂ« bllokçen. MĂ« konkretisht — kjo Ă«shtĂ« tĂ« dhĂ«na key-value nĂ« formatin JSON. KĂ«to tĂ« dhĂ«na shkruhen nĂ« bllokçen "Blockchain". Ato kanĂ« histori qĂ« ruhet nĂ« bllokçen dhe njĂ« gjendje aktuale qĂ« ruhet nĂ« bazĂ«n e tĂ« dhĂ«nave "World state". Strukturat e tĂ« dhĂ«nave mbushen nĂ« mĂ«nyrĂ« tĂ« rastĂ«sishme nĂ« varĂ«si tĂ« detyrave tĂ« biznesit. Nuk ka asnjĂ« fushĂ« tĂ« detyrueshme, rekomandimi i vetĂ«m Ă«shtĂ« qĂ« asetet tĂ« kenĂ« pronar dhe tĂ« paraqesin vlerĂ«.

Ledger — pĂ«rbĂ«het nga bllokçena "Blockchain" dhe baza e tĂ« dhĂ«nave "World state", nĂ« tĂ« cilĂ«n ruhen gjendja aktuale e aseteve. World state pĂ«rdor LevelDB ose CouchDB.

Kontrata Smart — me kontratat smart realizohet logjika e biznesit tĂ« sistemit. NĂ« Hyperledger Fabric, kontratat smart quhen chaincode. NĂ«pĂ«rmjet chaincode pĂ«rcaktohen asset-et dhe transaksionet mbi to. NĂ« njĂ« term teknik, kontratat smart janĂ« module tĂ« programit, tĂ« realizuara nĂ« gjuhĂ«t e programimit JS ose Go.

Politika e miratimit — pĂ«r çdo chaincode mund tĂ« pĂ«rcaktohen politika se sa dhe nga kĂ« duhet tĂ« priten miratime pĂ«r transaksionin. NĂ«se politika nuk pĂ«rcaktohet, atĂ«herĂ« pĂ«rdoret si parazgjedhje: “transaksioni duhet tĂ« miratohet nga çdo anĂ«tar (member) i çdo organizate nĂ« channel”. Shembuj tĂ« politikave:

  • Transaksioni duhet tĂ« miratohet nga njĂ« administrator i organizatĂ«s;
  • Duhet tĂ« miratohet nga çdo anĂ«tar (member) ose klient i organizatĂ«s;
  • Duhet tĂ« miratohet nga çdo peer i organizatĂ«s.

ShĂ«rbimi i renditjes — paketat e transaksioneve nĂ« blloqe dhe i dĂ«rgon peer-ave nĂ« channel. Garanton dĂ«rgimin e mesazheve pĂ«r tĂ« gjithĂ« peer-at nĂ« rrjet. PĂ«r sistemet industriale pĂ«rdoret brokeri i mesazheve Kafka, pĂ«r zhvillim dhe testim Solo.

Fluksi i thirrjeve

Blockchain: what will it cost us to build PoC?

  • Aplikacioni ndĂ«rvepron me Hyperledger Fabric, duke pĂ«rdorur Go, Node.js ose Java SDK;
  • Klienti krijon transaksionin tx dhe e dĂ«rgon atĂ« te peer-at qĂ« miratojnĂ«;
  • Peer verifikon nĂ«nshkrimin e klientit, realizon transaksionin dhe dĂ«rgon nĂ«nshkrimin e miratimit pĂ«rsĂ«ri tek klienti. Chaincode ekzekutohet vetĂ«m nĂ« peer-in e miratimit, dhe rezultati i ekzekutimit tĂ« tij shpĂ«rndahet nĂ« tĂ« gjitha peer-at. Ky algoritĂ«m funksionimi quhet - PBFT (Practical Byzantine Fault Tolerant) konsensus. Dallimi nga klasik BFT Ă«shtĂ« se mesazhi dĂ«rgohet dhe pritet konfirmimi vetĂ«m nga njĂ« grup i caktuar, jo nga tĂ« gjithĂ« pjesĂ«marrĂ«sit;
  • Pasi klienti tĂ« marrĂ« numrin e pĂ«rgjigjeve qĂ« korrespondon me politikĂ«n e miratimit, ai dĂ«rgon transaksionin nĂ« Ordering service;
  • Ordering service formon bllokun dhe e dĂ«rgon atĂ« tek tĂ« gjithĂ« peer-at qĂ« angazhohen. Ordering service garanton regjistrimin nĂ« radhĂ« tĂ« blloqeve, duke eliminuar, atĂ« qĂ« quhet, ledger fork (shih seksionin "Forks");
  • Peer-at marrin bllokun, kontrollojnĂ« pĂ«rsĂ«ri politikĂ«n e miratimit, regjistrojnĂ« bllokun nĂ« blockchain dhe ndryshojnĂ« gjendjen nĂ« DB-nĂ« "World state".

Pra, ndodh ndarja e rolit mes node-ve. Kjo siguron të shkallëzohet dhe sigurinë e blockchain-it:

  • KontratĂ«t e zgjuar (chaincode) ekzekutohen nga peer-at e miratimit. Kjo garanton konfidencialitetin e kontratave tĂ« zgjuara, pasi ato ruhen vetĂ«m te peer-at e miratimit, jo te tĂ« gjithĂ« pjesĂ«marrĂ«sit.
  • Porositja duhet tĂ« funkcionalizojĂ« shpejt. Kjo sigurohet nga fakti se Porositja formon vetĂ«m bllokun dhe e dĂ«rgon atĂ« nĂ« njĂ« grup tĂ« fiksur liderĂ«sh peers.
  • Peers qĂ« e angazhojnĂ« vetĂ«m ruajnĂ« blockchain-in — ata mund tĂ« jenĂ« shumĂ« dhe nuk kĂ«rkojnĂ« fuqinĂ« e madhe dhe punĂ« tĂ« menjĂ«hershme.

Për më shumë detaje mbi zgjidhjet arkitekturore të Hyperledger Fabric dhe pse funksionon kështu, jo ndryshe, mund të shikoni këtu: Origjinat e Arkitekturës ose këtu: Hyperledger Fabric: Një Sistemi të Distribuar për Blockchain-et me Leje.

Prandaj, Hyperledger Fabric është vërtet një sistem universale, me të cilin mund të:

  • Implementoni logjikĂ«n e biznesit tĂ« rastit duke pĂ«rdorur mekanizmin e kontratave tĂ« mençura;
  • Regjistroni dhe merrni tĂ« dhĂ«na nga databaza blockchain nĂ« formatin JSON;
  • Siguroni dhe verifikoni qasje nĂ« API, duke pĂ«rdorur Autoritetin e Certifikimit.

Tani që bëmë pak njohuri me specifikat e Hyperledger Fabric, le të bëjmë përfundimisht diçka të dobishme!

Zhvillojmë blockchain-in

Vendosja e detyrës

Qëllimi është të realizojë një rrjet Citcoin me funksionalitete si: krijimi i një llogarie, marrja e bilancit, mbushja e llogarisë, transferimi i monedhave nga një llogari në tjetrën. Do të vizatojmë një model objektiv, të cilin më pas do ta realizojmë në kontratën e zgjuar. Kështu, do të kemi llogari që identifikohen me emra (name) dhe kanë një bilanc (balance), si dhe një listë llogarish. Llogaritë dhe lista e llogarive janë në terma të Hyperledger Fabric asete. Prandaj, ato kanë një histori dhe një gjendje aktuale. Do të përpiqem ta tregoj këtë qartë:

Blockchain: what will it cost us to build PoC?

Figurat e sipërme paraqesin gjendjen aktuale, e cila ruhet në bazën e të dhënave "World state". Nën to, figurat tregojnë historinë, e cila ruhet në blockchain. Gjendja aktuale e aseteve ndryshon nga transaksionet. Një aset ndryshohet vetëm në tërësi, prandaj pas përfundimit të transaksionit krijohet një objekt i ri, ndërsa vlera aktuale e aset-it kalon në histori.

Revoli i IBM

Krijojmë një llogari në revolin IBM. Për të përdorur platformën blockchain, duhet ta azhurnoni atë në Pay-As-You-Go. Ky proces nuk mund të jetë i shpejtë, pasi IBM kërkon informacion të mëtejshëm dhe e kontrollon atë manualisht. Pozitivisht, mund të them se IBM ofron materiale mjaft të mira mësimore që lejojnë implementimin e Hyperledger Fabric në cloud-in e tyre. Më pëlqeu seria e artikujve dhe shembujve të mëposhtëm:

Të dhënat në vijim janë shkëmbime nga platforma Blockchain e IBM. Kjo nuk është një udhëzues për krijimin e blockchain-it, por thjesht një demonstruese e vëllimit të detyrës. Prandaj, për qëllimet tona krijojmë një Organizatë:

Blockchain: what will it cost us to build PoC?

Në të krijojmë node: Orderer CA, Org1 CA, Orderer Peer:

Blockchain: what will it cost us to build PoC?

Vendosim përdorues:

Blockchain: what will it cost us to build PoC?

Krijojmë Kanal dhe e quajmë citcoin:

Blockchain: what will it cost us to build PoC?

Në thelb, Kanal është blockchain, prandaj fillon me bllokun zero (Genesis block):

Blockchain: what will it cost us to build PoC?

Shkruajmë Kontratën e Mençur

/*
 * 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;

Intuitivisht, këtu duhet të jetë gjithçka e kuptueshme:

  • EkzistojnĂ« disa funksione (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance), tĂ« cilat do tĂ« thĂ«rriten nga programi demo pĂ«rmes API-t Hyperledger Fabric.
  • Funksionet SendFrom dhe RefillBalance gjenerojnĂ« ngjarje (Event), tĂ« cilat programi demo do t'i marrĂ«.
  • Funksioni instantiate — thirret njĂ«herĂ« kur instancohet kontrata e mençur. NĂ« tĂ« vĂ«rtetĂ«, ai nuk thirret njĂ«herĂ«, por çdo herĂ« kur ndodhin ndryshime nĂ« versionin e kontratĂ«s. Prandaj, inicializimi i listĂ«s me njĂ« array tĂ« zbrazĂ«t Ă«shtĂ« njĂ« ide e keqe, sepse tani kur ndryshojmĂ« versionin e kontratĂ«s sĂ« mençur, do tĂ« humbasim listĂ«n aktuale. Por asgjĂ«, unĂ« po mĂ«soj).
  • Account-Ă«t dhe lista e account-Ă«ve (accounts) janĂ« struktura tĂ« dhĂ«nash JSON. PĂ«rdoren JS pĂ«r manipulimin e tĂ« dhĂ«nave.
  • VlerĂ«n aktuale tĂ« asset-it mund ta marrim duke thirrur funksionin getState dhe ta pĂ«rditĂ«sojmĂ« me putState.
  • GjatĂ« krijimit tĂ« Account-it, thirret funksioni AddAccount, nĂ« tĂ« cilin bĂ«het krahasimi pĂ«r numrin maksimal tĂ« account-Ă«ve nĂ« blockchain (maxAccounts = 5). Dhe kĂ«tu ka njĂ« gabim (e vĂ«rejti?), qĂ« çon nĂ« rritjen e pafundme tĂ« numrit tĂ« account-Ă«ve. TĂ« tilla gabime duhet tĂ« shmangen)

Për më tepër, ngarkojmë kontratën e mençur në Channel dhe e instancojmë atë:

Blockchain: what will it cost us to build PoC?

Shikojmë transaksionin për vendosjen e Smart Contract:

Blockchain: what will it cost us to build PoC?

Shikojmë detajet për Channel-in tonë:

Blockchain: what will it cost us to build PoC?

Si përfundim marrim këtë skemë të rrjetit blockchain në cloud të IBM. Po ashtu, në skemë ka një program demo, i cili funksionon në cloud të Amazon në një server virtual (do të flasim më shumë për të në seksionin e ardhshëm):

Blockchain: what will it cost us to build PoC?

Krijimi i GUI për thirrjet e Hyperledger Fabric API

Hyperledger Fabric ka një API që mund të përdoret për:

  • Krijimin e channel;
  • Lidhjen e peer me channel;
  • Installimin dhe instancimin e kontratave inteligjente nĂ« channel;
  • Thirrjen e transaksioneve;
  • KĂ«rkimin e informacionit nĂ« blockchain.

Zhvillimi i aplikacionit

Në programin tonë demo do të përdorim API-në vetëm për thirrjen e transaksioneve dhe kërkimin e informacionit, pasi hapat e tjerë tashmë i kemi bërë, duke përdorur platformën blockchain të IBM. Po shkruajmë GUI, duke përdorur stakun e teknologjive standarde: Express.js + Vue.js + Node.js. Si të filloni të krijoni aplikacione moderne mund të shkruhet një artikull të veçantë. Këtu do të lë një lidhje me një seri ligjëratash që më pëlqen më shumë: Full Stack Web App using Vue.js & Express.js. Si përfundim, u krijua një aplikacion klient-server me një ndërfaqe grafike të njohur në stilin Material Design nga Google. REST API midis klientit dhe serverit përbëhet nga disa thirrje:

  • HyperledgerDemo/v1/init — inicializoni blockchain;
  • HyperledgerDemo/v1/accounts/list — merrni njĂ« listĂ« tĂ« tĂ« gjithĂ« llogarive;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — krijo llogarinĂ« Bob;
  • HyperledgerDemo/v1/info?account=Bob — merr informacion rreth llogarisĂ« Bob;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 — transfero dy monedha nga Bob te Alice;
  • HyperledgerDemo/v1/disconnect — mbyll lidhjen me blockchain-in.

PĂ«rshkrimi i API-sĂ« me shembuj e vendosa nĂ« faqen «Postman» — njĂ« program i njohur pĂ«r testimin e API-ve HTTP.

Aplikacioni demo në cloud-in e Amazon

E kam ngarkuar aplikacionin nĂ« Amazon, pasi IBM ende nuk ka arritur tĂ« pĂ«rmirĂ«sojĂ« llogarinĂ« time dhe tĂ« lejojĂ« krijimin e serverĂ«ve virtualĂ«. Si njĂ« qershi mbi tortĂ«, kam lidhur domenin: www.citcoin.info. Do ta mbaj pak serverin tĂ« aktivizuar, pastaj do ta ç’aktivizoj, pasi koston pĂ«r qira po rritet, dhe monedhat citcoin nuk janĂ« ende tĂ« listuara nĂ« treg) NĂ« artikull do tĂ« pĂ«rfshij pamje tĂ« ekranit tĂ« demos, pĂ«r tĂ« shpjeguar logjikĂ«n e punĂ«s. Aplikacioni demo mund:

  • TĂ« inicializojĂ« blockchain-in;
  • TĂ« krijojĂ« llogari (por tani nuk mund tĂ« krijohet njĂ« llogari e re, pasi Ă«shtĂ« arritur numri maksimal i llogarive qĂ« Ă«shtĂ« pĂ«rcaktuar nĂ« smart contract);
  • TĂ« marrĂ« njĂ« listĂ« tĂ« llogarive;
  • TĂ« transferojĂ« monedha citcoin ndĂ«rmjet Alice, Bob dhe Alex;
  • Merrni ngjarje (por tani ngjarjet nuk mund tĂ« shfaqen, ndaj pĂ«r thjeshtĂ«si nĂ« ndĂ«rfaqe Ă«shtĂ« shkruar se ngjarjet nuk mbĂ«shteten);
  • Regjistro veprimet.

Së pari, inicializojmë blockchain-in:

Blockchain: what will it cost us to build PoC?

Më pas krijojmë llogarinë tonë, duke mos u kursyer me bilancin:

Blockchain: what will it cost us to build PoC?

Merrni listën e të gjitha llogarive në dispozicion:

Blockchain: what will it cost us to build PoC?

Zgjidhni dërguesin dhe marrësin, dhe merrni bilancet e tyre. Nëse dërguesi dhe marrësi janë i njëjti, atëherë do të ndodhi rimbushja e llogarisë së tij:

Blockchain: what will it cost us to build PoC?

NĂ« log ndjekim realizimin e transaksioneve:

Blockchain: what will it cost us to build PoC?

Në thelb, me programin demo është kjo e gjitha. Më pas mund të shihni transaksionin tonë në blockchain:

Blockchain: what will it cost us to build PoC?

Dhe lista e përgjithshme e transaksioneve:

Blockchain: what will it cost us to build PoC?

KĂ«shtu kemi pĂ«rfunduar me sukses realizimin e PoC pĂ«r krijimin e rrjetit Citcoin. ÇfarĂ« duhet bĂ«rĂ« mĂ« tej, qĂ« Citcoin tĂ« bĂ«het njĂ« rrjet i plotĂ« pĂ«r transferimin e monedhave? Paksa:

  • NĂ« fazĂ«n e krijimit tĂ« llogarisĂ«, implementoni gjenerimin e çelĂ«sit privat / publik. ÇelĂ«si privat duhet tĂ« ruhet nga pĂ«rdoruesi i llogarisĂ«, çelĂ«si publik nĂ« blockchain.
  • BĂ«ni transferimin e monedhave, nĂ« tĂ« cilin identifikimi i pĂ«rdoruesit bĂ«het me çelĂ«sin publik, jo me emrin.
  • Kriptoni transaksionet qĂ« shkojnĂ« nga pĂ«rdoruesi nĂ« server me çelĂ«sin e tij privat.

Përfundimi

Ne kemi implementuar një rrjet Citcoin me funksione: shto llogari, merr balancën, mbush llogarinë tënde, transfero monedha nga një llogari në një tjetër. Pra, çfarë na kushtoi ndërtimi i PoC?

  • Duhet tĂ« studiojmĂ« blockchain-in nĂ« pĂ«rgjithĂ«si dhe Hyperledger Fabric nĂ« veçanti;
  • TĂ« mĂ«sojmĂ« si tĂ« pĂ«rdorim re tĂ« IBM ose Amazon;
  • TĂ« mĂ«sojmĂ« gjuhĂ«n e programimit JS dhe ndonjĂ« web framework;
  • NĂ«se disa tĂ« dhĂ«na duhet tĂ« ruhen jo nĂ« blockchain, por nĂ« njĂ« bazĂ« tĂ« veçantĂ«, atĂ«herĂ« tĂ« mĂ«sojmĂ« si tĂ« integrohemi, pĂ«r shembull, me PostgreSQL;
  • Dhe e fundit nĂ« listĂ«, por jo mĂ« pak e rĂ«ndĂ«sishme — pa njohuri pĂ«r Linux nĂ« botĂ«n moderne nuk je askund!)

Sigurisht, nuk është rocket science, por do të duhet të punosh!

Burimet në GitHub

Burimet i kam vendosur në GitHub. Përshkrimi i shkurtër i depozitës:
Katalogu "server" — server Node.js
Katalogu "client" — klient Node.js
Katalogu "blockchain" (vlerat e parametrave dhe çelësat, natyrisht, nuk funksionojnë dhe jepen vetëm si shembuj):

  • kontrata — burimi i smart kontratĂ«s
  • wallet — çelĂ«sat e pĂ«rdoruesit pĂ«r tĂ« pĂ«rdorur Hyperledger Fabric API.
  • *.cds — versionet e pĂ«rkthyera tĂ« smart kontratave
  • *.json skedarĂ«t — shembuj tĂ« skedarĂ«ve tĂ« konfigurimit pĂ«r pĂ«rdorim me Hyperledger Fabric API

Kjo është vetëm fillimi!

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster