Blockchain: çfarë na kushton të ndjejmë PoC?

Sytë friksohen, por duar kërkojnë punë!

NĂ« artikujt e kaluar kemi shqyrtuar teknologjitĂ« mbi tĂ« cilat ndodhen blockchain-Ă«t (ÇfarĂ« na kushton tĂ« ndĂ«rtojmĂ« blockchain?) dhe rastet qĂ« mund tĂ« realizojmĂ« me ndihmĂ«n e tyre (ÇfarĂ« na duhen pĂ«r tĂ« ndĂ«rtuar njĂ« rast?). Ka ardhur koha tĂ« punojmĂ« me duar! PĂ«r tĂ« realizuar pilote dhe PoC (Prova e Konceptit) unĂ« preferoj tĂ« pĂ«rdorĂ« cloud, pasi qĂ« ato janĂ« tĂ« qasshme nga çdo pikĂ« e botĂ«s dhe, shpeshherĂ«, nuk Ă«shtĂ« e nevojshme tĂ« humbasim kohĂ« nĂ« instalimin e bezdisshĂ«m tĂ« ambientit, pasi ka konfigurime tĂ« paracaktuara. Pra, le tĂ« bĂ«jmĂ« diçka tĂ« thjesht, si njĂ« rrjet pĂ«r transferimin e monedhave midis pjesĂ«marrĂ«sve dhe ta quajmĂ« modestisht Sytcoin. PĂ«r kĂ«tĂ« do tĂ« pĂ«rdorim cloud-in e IBM dhe blockchain-in universal Hyperledger Fabric. Fillimisht, le tĂ« shqyrtojmĂ« pse Hyperledger Fabric quhet njĂ« blockchain universal?

Blockchain: çfarë na kushton të ndjejmë PoC?

Hyperledger Fabric — blockchain universal

Në terma të përgjithshëm, një sistem informatik universal është:

  • NjĂ« grup serverash dhe njĂ« bĂ«rthamĂ« programore qĂ« kryen logjikĂ«n e biznesit;
  • Interfacet pĂ«r ndĂ«rveprimin me sistemin;
  • Mjetet pĂ«r regjistrimin, autentifikimin dhe autorizimin e pajisjeve / njerĂ«zve;
  • NjĂ« bazĂ« tĂ« dhĂ«nash qĂ« ruan tĂ« dhĂ«na operative dhe arkivore:

Blockchain: çfarë na kushton të ndjejmë PoC?

Versionin zyrtar, çfarë është Hyperledger Fabric mund ta lexoni në website, ndërsa shkurtimisht, Hyperledger Fabric është një platformë open-source që lejon ndërtimin e blockchain-eve të mbyllura dhe ekzekutimin e kontratave inteligjente të shkruara në gjuhët e programimit JS dhe Go. Le të shqyrtojmë me detaje arkitekturën e Hyperledger Fabric dhe të bindemi se kjo është një sistem universal, në të cilin ekziston vetëm specifika e ruajtjes dhe shënimit të të dhënave. Specifika qëndron në faktin se të dhënat, ashtu si në të gjitha blockchain-et, ruhen në blloqe, të cilat futen në blockchain vetëm nëse pjesëmarrësit arrijnë një konsensus dhe pas regjistrimit të dhënat nuk mund të korrigjohen apo të fshihen pa u vënë re.

Arkitektura e Hyperledger Fabric

Në diagram është paraqitur arkitektura e Hyperledger Fabric:

Blockchain: çfarë na kushton të ndjejmë PoC?

Organizatat — organizatat pĂ«rmbajnĂ« peer, kĂ«shtu qĂ« blockchain ekziston falĂ« mbĂ«shtetjes sĂ« organizatave. Organizatat e ndryshme mund tĂ« hyjnĂ« nĂ« njĂ« channel.

Channel — struktura logjike qĂ« bashkon peer-t nĂ« grupe, kĂ«shtu qĂ« krijohet blockchain. Hyperledger Fabric mund tĂ« pĂ«rpunojĂ« njĂ«kohĂ«sisht disa blockchain-e me logjikĂ« tĂ« ndryshme tĂ« biznesit.

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

Peer nodes — kontrollojnĂ« transaksionet, ruajnĂ« bllokçenin, realizojnĂ« kontrata inteligjente dhe ndĂ«rveprojnĂ« me aplikacionet. Peer-at kanĂ« identitet (certifikatĂ« dixhitale), e cila jepet nga MSP. NĂ« ndryshim nga rrjeti Bitcoin apo Ethereum, ku tĂ« gjitha nodet janĂ« tĂ« barabarta, nĂ« Hyperledger Fabric nodet luajnĂ« role tĂ« ndryshme:

  • Peer mund tĂ« jetĂ« peer i miratuar (EP) dhe realizon kontrata inteligjente.
  • Peer i angazhuar (CP) — thjesht ruajnĂ« tĂ« dhĂ«nat nĂ« bllokçen dhe azhurnojnĂ« "Gjendjen e BotĂ«s".
  • Peer Ankor (AP) — nĂ«se nĂ« bllokçen marrin pjesĂ« disa organizata, atĂ«herĂ« peer-at ankor pĂ«rdoren pĂ«r lidhjen mes tyre. Çdo organizatĂ« duhet tĂ« ketĂ« njĂ« ose mĂ« shumĂ« peer ankor. Me ndihmĂ«n e AP çdo peer nĂ« organizatĂ« mund tĂ« marrĂ« informacionin pĂ«r tĂ« gjithĂ« peer-at nĂ« organizata tĂ« tjera. PĂ«r sinkronizimin e informacionit mes AP pĂ«rdoret protokolli gossip.
  • Peer Lider — nĂ«se organizata ka disa peer-a, vetĂ«m peer-i lider do tĂ« marrĂ« blloqet nga shĂ«rbimi i renditjes dhe t'ua japĂ« atyre peer-Ă«ve tĂ« tjerĂ«. Lideri mund tĂ« pĂ«rcaktohet nĂ« mĂ«nyrĂ« statike, por gjithashtu mund tĂ« zgjidhet dinamikisht nga peer-at nĂ« organizatĂ«. PĂ«r sinkronizimin e informacionit mbi liderĂ«t pĂ«rdoret gjithashtu protokolli gossip.

Aktivitetet — entitete me vlerĂ« qĂ« ruajnĂ« nĂ« bllokçen. MĂ« konkretisht, kĂ«to janĂ« tĂ« dhĂ«na çelĂ«s-vlerĂ« nĂ« formatin JSON. KĂ«to tĂ« dhĂ«na regjistrohen nĂ« bllokçen "Blockchain". Ato kanĂ« njĂ« histori, e cila ruhet nĂ« bllokçen dhe njĂ« gjendje aktuale, e cila ruhet nĂ« bazĂ«n e tĂ« dhĂ«nave "Gjendja e BotĂ«s". Strukturat e tĂ« dhĂ«nave mbushen lirisht nĂ« varĂ«si tĂ« detyrave tĂ« biznesit. Nuk ka fusha tĂ« detyrueshme, rekomandimi i vetĂ«m Ă«shtĂ« qĂ« aktivitetet tĂ« kenĂ« njĂ« pronar dhe tĂ« paraqesin vlerĂ«.

Regjistri — pĂ«rbĂ«het nga bllokçeni "Blockchain" dhe baza e tĂ« dhĂ«nave "Gjendja e BotĂ«s", ku ruhet gjendja aktuale e aktiviteteve. Gjendja e BotĂ«s pĂ«rdor LevelDB ose CouchDB.

Kontrata inteligjente — me ndihmĂ«n e kontratave inteligjente realizohet logjika e biznesit tĂ« sistemit. NĂ« Hyperledger Fabric, kontratat inteligjente quhen chaincode. Me anĂ« tĂ« chaincode pĂ«rcaktohen aktivitetet dhe transaksionet mbi to. NĂ«se flasim nĂ« gjuhĂ«n teknike, kontratat inteligjente janĂ« module programi, tĂ« realizuara nĂ« gjuhĂ«t programimi JS ose Go.

Politika e miratimit — pĂ«r çdo chaincode mund tĂ« pĂ«rcaktohen politika se sa dhe nga kush duhet pritur miratimet pĂ«r transaksion. NĂ«se politika nuk Ă«shtĂ« pĂ«rcaktuar, atĂ«herĂ« pĂ«rdoret nga e drejta: “transaksioni duhet tĂ« miratohet nga çdo anĂ«tar (member) i çdo organizate nĂ« kanal”. Shembuj tĂ« politikave:

  • Transaksioni duhet tĂ« konfirmohet nga çdo administrator tĂ« organizatĂ«s;
  • Duhet tĂ« konfirmohet nga çdo anĂ«tar ose klient i organizatĂ«s;
  • Duhet tĂ« konfirmohet nga çdo peer i organizatĂ«s.

ShĂ«rbimi i porosisĂ« — paketat transaksionet nĂ« blloqe dhe dĂ«rgon peer-Ă«ve nĂ« channel. Garanton dorĂ«zimin e mesazheve pĂ«r tĂ« gjithĂ« peer-Ă«t nĂ« rrjet. PĂ«r sistemet industriale pĂ«rdoret brokeri i mesazheve Kafka, pĂ«r zhvillim dhe testim Solo.

CallFlow

Blockchain: çfarë na kushton të ndjejmë 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-Ă«t e endorsimit;
  • Peer-i kontrollon nĂ«nshkrimin e klientit, ekzekuton transaksionin dhe e dĂ«rgon nĂ«nshkrimin e miratimit prapa klientit. Chaincode ekzekutohet vetĂ«m nĂ« peer-Ă«t e endorsimit, dhe rezultati i ekzekutimi tĂ« tij shpĂ«rndahet te tĂ« gjithĂ« peer-Ă«t. Ky algoritĂ«m i punĂ«s quhet — konsensusi PBFT (Practical Byzantine Fault Tolerant). Dallohet nga BFT klasik nĂ« atĂ« qĂ« mesazhi shpĂ«rndahet dhe pritet konfirmimi jo nga tĂ« gjithĂ« pjesĂ«marrĂ«sit, por vetĂ«m nga njĂ« grup tĂ« caktuar;
  • Pas marrjes sĂ« numrit tĂ« pĂ«rgjigjeve, qĂ« i pĂ«rputhen politikĂ«s sĂ« miratimit, klienti e dĂ«rgon transaksionin te shĂ«rbimi i porosisĂ«;
  • ShĂ«rbimi i porosisĂ« formon bllokun dhe e dĂ«rgon atĂ« te tĂ« gjithĂ« peer-Ă«t qĂ« e miratojnĂ«. ShĂ«rbimi i porosisĂ« siguron regjistrimin e rregullt tĂ« blloqeve, duke pĂ«rjashtuar, atĂ« qĂ« quhet, fork-i i ledger-it (shih seksionin 'Forks');
  • Peer-Ă«t marrin bllokun, kontrollojnĂ« pĂ«rsĂ«ri politikat e miratimit, regjistrojnĂ« bllokun nĂ« blockchain dhe ndryshojnĂ« gjendjen nĂ« DB 'World state'.

Pra, ka një ndarje rolesh midis nodave. Kjo siguron që blockchain të jetë i shkallëzueshëm dhe i sigurt:

  • Kontratat inteligjente (chaincode) ekzekutohen nga peer-Ă«t e endorsimit. Kjo siguron konfidencialitetin e kontratave inteligjente, pasi ato ruhen jo te tĂ« gjithĂ« pjesĂ«marrĂ«sit, por vetĂ«m te peer-Ă«t e endorsimit.
  • Porosia duhet tĂ« punojĂ« shpejt. Kjo sigurohet nga fakti se Porosia vetĂ«m formon bllokun dhe e dĂ«rgon atĂ« te njĂ« grup i caktuar liderĂ«sh peer-Ă«.
  • Peer-Ă«t qĂ« miratojnĂ« thjesht ruajnĂ« blockchain-in — ata mund tĂ« jenĂ« shumĂ« dhe nuk kĂ«rkojnĂ« kapacitet tĂ« madh dhe punĂ« menjĂ«herĂ«.

Për më shumë informacion mbi zgjidhjet arkitekturore të Hyperledger Fabric dhe pse ai funksionon kështu e jo ndryshe, mund të shihni këtu: Origjina e Arkitekturës ose këtu: Hyperledger Fabric: Një Sistem të Distribuar Operativ për Blockchain të Lejuar.

Pra, Hyperledger Fabric është vërtet një sistem universal, me të cilin mund të:

  • Implementoni logjikĂ« tĂ« ndryshme biznesi, duke pĂ«rdorur mekanizmin e kontratave inteligjente;
  • TĂ« regjistrosh dhe tĂ« marrĂ«sh tĂ« dhĂ«na nga njĂ« bazĂ« tĂ« dhĂ«nash blockchain nĂ« formatin JSON;
  • TĂ« ofrosh dhe tĂ« verifikosh qasje nĂ« API, duke pĂ«rdorur Autoritetin e Certifikimit.

Tani që kemi kuptuar pak rreth specifikës së Hyperledger Fabric, le të bëjmë diçka të dobishme!

Zhvillimi i blockchain

Formulimi i detyrës

Detyra është të implementojmë një rrjet Citcoin me funksionet e mëposhtme: krijimi i një llogarie, marrja e bilancit, rimbushja e llogarisë, transferimi i monedhave nga një llogari në tjetrën. Do të vizatojmë një model objektor, të cilin më pas do ta realizojmë në një kontratë inteligjente. Pra, do të kemi llogari, të cilat identifikohen me emra (name) dhe përmbajnë bilance (balance), si dhe një listë llogarish. Llogaritë dhe lista e llogarive janë, në terma të Hyperledger Fabric, aset. Prandaj, ato kanë një histori dhe një gjendje aktuale. Do të përpiqem ta ilustroj këtë vizualisht:

Blockchain: çfarë na kushton të ndjejmë PoC?

Figurat e sipërme përfaqësojnë gjendjen aktuale që ruhet në bazën e të dhënave "World state". Poshtë tyre, figurat tregojnë historinë që ruhet në blockchain. Gjendja aktuale e aseteve ndryshohet nga transaksionet. Aseti ndryshohet vetëm si një e tërë, prandaj në përfundim të ekzekutimit të transaksionit krijohet një objekt i ri, ndërsa vlera aktuale e asetit kalon në histori.

Reketa IBM

Krijojmë një llogari në reketën IBM. Për të përdorur platformën blockchain, duhet ta përmirësojmë atë në Pay-As-You-Go. Ky proces mund të jetë i ngadalshëm, pasi IBM kërkon informacion shtesë dhe e kontrollon atë manualisht. Nga ana pozitive, mund të them se IBM ka materiale të mira mësimore që lejojnë zhvillimin e Hyperledger Fabric në reken e tyre. Më pëlqeu cikli i mëposhtëm i artikujve dhe shembujve:

Më poshtë janë skrinshotet e platformës Blockchain të IBM. Kjo nuk është një udhëzim për krijimin e blockchain, por thjesht një demonstrim i shkallës së detyrës. Pra, për qëllimet tona krijojmë një Organizatë:

Blockchain: çfarë na kushton të ndjejmë PoC?

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

Blockchain: çfarë na kushton të ndjejmë PoC?

Krijojmë përdoruesit:

Blockchain: çfarë na kushton të ndjejmë PoC?

Krijojmë Channel-in dhe e quajmë citcoin:

Blockchain: çfarë na kushton të ndjejmë PoC?

Në thelb, Channel-i është një blockchain, prandaj fillon me bllokun zero (Genesis block):

Blockchain: çfarë na kushton të ndjejmë PoC?

Shkruajmë Smart Contract

/*
 * 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 qartë:

  • Ka disa funksione (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance), tĂ« cilat do tĂ« thĂ«rrasĂ« programi demo duke pĂ«rdorur Hyperledger Fabric API.
  • Funksionet SendFrom dhe RefillBalance gjenerojnĂ« ngjarje (Event) qĂ« do tĂ« marrĂ« programi demo.
  • Funksioni instantiate thirret njĂ« herĂ« kur instancohet kontrata e mençur. NĂ« tĂ« vĂ«rtetĂ«, ai thirret jo njĂ« herĂ«, por çdo herĂ« kur ndryshohet versioni i kontratĂ«s sĂ« mençur. Prandaj, inicializimi i listĂ«s me njĂ« masiv tĂ« zbrazĂ«t Ă«shtĂ« njĂ« ide e keqe, sepse tani, kur tĂ« ndryshohet versioni i kontratĂ«s sĂ« mençur, do tĂ« humbim listĂ«n aktuale. Por asgjĂ«, unĂ« vetĂ«m po mĂ«soj).
  • Account-Ă«t dhe lista e account-eve (accounts) janĂ« struktura tĂ« dhĂ«nash JSON. PĂ«r manipulimin e tĂ« dhĂ«nave pĂ«rdoret JS.
  • Vlera aktuale e asset-it mund tĂ« merret pĂ«rmes thirrjes sĂ« funksionit getState, dhe pĂ«r ta pĂ«rditĂ«suar pĂ«rmes putState.
  • Kur krijohet Account thirret funksioni AddAccount, nĂ« tĂ« cilin bĂ«het krahasimi pĂ«r numrin maksimal tĂ« account-eve nĂ« blockchain (maxAccounts = 5). Dhe kĂ«tu ka njĂ« gabim (e ndjetĂ«?), i cili çon nĂ« rritjen e pafund tĂ« numrit tĂ« account-eve. TĂ« tilla gabime duhen evituar)

Më pas ngarkojmë kontratën e mençur në Channel dhe e instancon:

Blockchain: çfarë na kushton të ndjejmë PoC?

Shikojmë transaksionin për vendosjen e Smart Contract:

Blockchain: çfarë na kushton të ndjejmë PoC?

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

Blockchain: çfarë na kushton të ndjejmë PoC?

Si rezultat, marrim skemën e mëposhtme të rrjetit blockchain në cloud-in IBM. Në skemë është gjithashtu një program demo, i cili është aktivizuar në cloud-in Amazon në një server virtual (detaje rreth saj do të jenë në seksionin e ardhshëm):

Blockchain: çfarë na kushton të ndjejmë PoC?

Krijimi i GUI për thirrjet API të Hyperledger Fabric

Hyperledger Fabric ka një API, e cila mund të përdoret për:

  • Krijimin e channel-it;
  • Lidhjen e peer me channel;
  • Instalimin dhe instancimin e kontratave tĂ« mençura 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ë i kemi bërë tashmë duke përdorur platformën blockchain të IBM. Shkruajmë GUI, duke përdorur teknologjitë standarde: Express.js + Vue.js + Node.js. Rreth mënyrës se si të filloni të krijoni aplikacione moderne web mund të shkruhet një artikull i veçantë. Këtu do të lë një lidhje për një seri ligjëratash, të cilat më pëlqyen më shumë: Full Stack Web App using Vue.js & Express.js. Si rezultat, 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 — tĂ« inicializosh blockchain;
  • HyperledgerDemo/v1/accounts/list — tĂ« marrĂ«sh listĂ«n e tĂ« gjithĂ« account-eve;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — tĂ« krijosh account-in Bob;
  • HyperledgerDemo/v1/info?account=Bob — tĂ« marrĂ«sh informacion rreth account-it Bob;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 — tĂ« transferojĂ« dy monedha nga Bob te Alice;
  • HyperledgerDemo/v1/disconnect — tĂ« mbyllĂ« lidhjen me blockchain-in.

PĂ«rshkrimi i API me shembuj e kam vendosur nĂ« faqen "Postman" — njĂ« program i njohur pĂ«r testimin e HTTP API.

Demo aplikacioni në cloud-in Amazon

Aplikacionin e ngarkova në Amazon, pasi IBM ende nuk ka arritur të përmisojë llogarinë time dhe të lejojë krijimin e serverëve virtualë. Si një qershi mbi tortë, vendosa domenin: www.citcoin.info. Do ta mbaj pak serverin të aktivizuar, pastaj do ta fik, sepse po paguaj qira, dhe monedhat citcoin në bursë ende nuk janë të kotuara) Në artikull po vendos screenshots të demot, në mënyrë që logjika e punës të jetë e qartë. Demo aplikacioni mund:

  • TĂ« inicializojĂ« blockchain-in;
  • TĂ« krijojĂ« njĂ« Account (por tani nuk mund tĂ« krijon njĂ« Account tĂ« ri, pasi numri maksimal i llogarive tĂ« pĂ«rshkruara nĂ« kontratĂ«n inteligjente Ă«shtĂ« arritur);
  • TĂ« marrĂ« njĂ« listĂ« tĂ« llogarive;
  • TĂ« transferojĂ« monedhat citcoin midis Alice, Bob dhe Alex;
  • TĂ« marrĂ« ngjarje (por tani ngjarjet nuk mund tĂ« shfaqen, kĂ«shtu qĂ« nĂ« ndĂ«rfaqe pĂ«r thjeshtĂ«si Ă«shtĂ« shkruar se ngjarjet nuk mbĂ«shteten);
  • TĂ« regjistrojĂ« veprimet.

Fillimisht e inicializojmë blockchain-in:

Blockchain: çfarë na kushton të ndjejmë PoC?

Më pas krijojmë llogarinë tonë, pa ndonjë kursim me bilancin:

Blockchain: çfarë na kushton të ndjejmë PoC?

Marrim një listë të të gjitha llogarive të disponueshme:

Blockchain: çfarë na kushton të ndjejmë PoC?

Zgjedhim dërguesin dhe marrësin, marrim bilancet e tyre. Nëse dërguesi dhe marrësi janë njëlloj, atëherë do të ndodhë rritja e llogarisë së tij:

Blockchain: çfarë na kushton të ndjejmë PoC?

NĂ« log ndjekim realizimin e transaksioneve:

Blockchain: çfarë na kushton të ndjejmë PoC?

Në fakt, me këtë demo programi mbaron. Më pas, mund të shikoni transaksionin tonë në blockchain:

Blockchain: çfarë na kushton të ndjejmë PoC?

Dhe liste e përgjithshme e transaksioneve:

Blockchain: çfarë na kushton të ndjejmë PoC?

Me kĂ«tĂ« e pĂ«rfunduam me sukses realizimin e PoC pĂ«r krijimin e rrjetit Citcoin. ÇfarĂ« tjetĂ«r duhet tĂ« bĂ«jmĂ« qĂ« Citcoin tĂ« bĂ«het njĂ« rrjet i plotĂ« pĂ«r transferimin e monedhave? MĂ« pak se sa mendoni:

  • GjatĂ« krijimit tĂ« llogarisĂ« tĂ« realizohet gjenerimi i çelĂ«sit privat/publik. ÇelĂ«si privat duhet tĂ« ruhet te pĂ«rdoruesi i llogarisĂ«, çelĂ«si publik nĂ« blockchain.
  • TĂ« bĂ«het transferimi i monedhave, ku identifikimi i pĂ«rdoruesit pĂ«rdor çelĂ«sin publik dhe jo emrin.
  • TĂ« enkriptojmĂ« transaksionet qĂ« shkojnĂ« nga pĂ«rdoruesi nĂ« server me çelĂ«sin e tij privat.

Përfundim

Kemi realizuar rrjetin Citcoin me funksionet: shto llogari, marrë bilancin, plotësuar llogarinë tënde, transferuar monedha nga një llogari në tjetrën. Pra, çfarë na kostoi ndërtimi i PoC?

  • Duhet tĂ« studiojmĂ« blockchain-in nĂ« pĂ«rgjithĂ«si dhe Hyperledger Fabric nĂ« veçanti;
  • TĂ« mĂ«sojmĂ« tĂ« pĂ«rdorim cloud-et IBM ose Amazon;
  • MĂ«soni njĂ« gjuhĂ« programimi JS dhe ndonjĂ« framework web;
  • NĂ«se ndonjĂ« tĂ« dhĂ«nĂ« duhet tĂ« ruhet jo nĂ« blockchain, por nĂ« njĂ« bazĂ« tĂ« veçantĂ«, atĂ«herĂ« mĂ«soni si tĂ« integroni, pĂ«r shembull, me PostgreSQL;
  • Dhe e fundit nĂ« listĂ«, por jo nga rĂ«ndĂ«sia — pa dijeninĂ« e Linux-it nuk shkon askund nĂ« botĂ«n moderne!)

Sigurisht, nuk është rocket science, por do t'ju duhet të punoni!

Burimet në GitHub

Burimet i kam vendosur në GitHub. Përshkrimi i shkurtër i repositories:
Katalogu "server" — serveri Node.js
Katalogu "client" — klienti Node.js
Katalogu "blockchain" (vlerat e parametrave dhe çelësat, sigurisht, janë të pavlefshme dhe janë dhënë vetëm si shembuj):

  • contract — burimi i kontratĂ«s inteligjente
  • wallet — çelĂ«sat e pĂ«rdoruesit pĂ«r pĂ«rdorimin e Hyperledger Fabric API.
  • *.cds — versionet e kompiluar tĂ« kontratave inteligjente
  • *.json skedarĂ«t — shembuj skedarĂ«sh konfigurimi pĂ«r pĂ«rdorimin e Hyperledger Fabric API

ËshtĂ« vetĂ«m fillimi!

Burimi: habr.com

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