Blockchain: tunapaswa kujenga PoC gani?

Macho yako yanaogopa na mikono yako inawasha!

Katika nakala zilizopita, tulishughulikia teknolojia ambazo blockchains hujengwa (Tunapaswa kujenga blockchain nini?) na kesi zinazoweza kutekelezwa kwa msaada wao (Kwa nini tujenge kesi?) Ni wakati wa kufanya kazi kwa mikono yako! Ili kutekeleza marubani na PoC (Uthibitisho wa Dhana), napendelea kutumia mawingu, kwa sababu... zinaweza kupatikana kutoka popote duniani na, mara nyingi, hakuna haja ya kupoteza muda juu ya ufungaji wa mazingira magumu, kwa sababu. Kuna usanidi uliowekwa mapema. Kwa hiyo, hebu tufanye kitu rahisi, kwa mfano, mtandao wa kuhamisha sarafu kati ya washiriki na hebu tuiite kwa unyenyekevu Bitcoin. Kwa hili tutatumia wingu la IBM na kitambaa cha blockchain cha Hyperledger Fabric. Kwanza, hebu tujue ni kwa nini Hyperledger Fabric inaitwa blockchain ya ulimwengu wote?

Blockchain: tunapaswa kujenga PoC gani?

Kitambaa cha Hyperledger - blockchain ya ulimwengu wote

Kwa ujumla, mfumo wa habari wa ulimwengu wote ni:

  • Seti ya seva na msingi wa programu ambayo hufanya mantiki ya biashara;
  • Maingiliano ya mwingiliano na mfumo;
  • Zana za usajili, uthibitishaji na uidhinishaji wa vifaa/watu;
  • Hifadhidata inayohifadhi data ya uendeshaji na kumbukumbu:

Blockchain: tunapaswa kujenga PoC gani?

Toleo rasmi la kile kitambaa cha Hyperledger kinaweza kusomwa Online, na kwa ufupi, Hyperledger Fabric ni jukwaa la opensource ambalo hukuruhusu kuunda minyororo ya kibinafsi ya kuzuia na kutekeleza kandarasi mahiri za kiholela zilizoandikwa katika lugha za programu za JS na Go. Hebu tuangalie kwa undani usanifu wa Hyperledger Fabric na tuhakikishe kuwa huu ni mfumo wa ulimwengu wote ambao una maelezo maalum ya kuhifadhi na kurekodi data. Umuhimu ni kwamba data, kama katika blockchains zote, huhifadhiwa katika vitalu ambavyo vimewekwa kwenye blockchain tu ikiwa washiriki wanafikia makubaliano na baada ya kurekodi data haiwezi kusahihishwa kimya kimya au kufutwa.

Usanifu wa Kitambaa cha Hyperledger

Mchoro unaonyesha usanifu wa kitambaa cha Hyperledger:

Blockchain: tunapaswa kujenga PoC gani?

Mashirika - mashirika yana wenzao, i.e. blockchain ipo kwa sababu ya msaada wa mashirika. Mashirika tofauti yanaweza kuwa sehemu ya kituo kimoja.

channel - muundo wa mantiki unaounganisha wenzao katika vikundi, i.e. blockchain imeainishwa. Kitambaa cha Hyperledger kinaweza kuchakata minyororo mingi kwa wakati mmoja kwa mantiki tofauti ya biashara.

Mtoa Huduma za Uanachama (MSP) ni CA (Mamlaka ya Cheti) kwa ajili ya kutoa utambulisho na kugawa majukumu. Ili kuunda node, unahitaji kuingiliana na MSP.

Nodi rika - thibitisha miamala, hifadhi blockchain, tekeleza mikataba mahiri na uingiliane na programu. Wenzake wana kitambulisho (cheti cha dijiti), ambacho hutolewa na MSP. Tofauti na mtandao wa Bitcoin au Etherium, ambapo nodi zote zina haki sawa, katika nodi za Hyperledger Fabric zina majukumu tofauti:

  • Rika labda kuidhinisha rika (EP) na kutekeleza mikataba mahiri.
  • Kujitolea rika (CP) - hifadhi data tu kwenye blockchain na usasishe "hali ya ulimwengu".
  • Anchor Rika (AP) - ikiwa mashirika kadhaa yanashiriki katika blockchain, basi wenzao wa nanga hutumiwa kwa mawasiliano kati yao. Kila shirika lazima liwe na rika moja au zaidi. Kwa kutumia AP, rika lolote katika shirika linaweza kupata taarifa kuhusu wenzao wote katika mashirika mengine. Inatumika kusawazisha habari kati ya AP itifaki ya uvumi.
  • Kiongozi Rika - ikiwa shirika lina rika kadhaa, basi kiongozi wa rika pekee ndiye atakayepokea vitalu kutoka kwa huduma ya Kuagiza na kuwapa wenzao wengine. Kiongozi anaweza kubainishwa kwa kitakwimu au kuchaguliwa kwa nguvu na wenzake katika shirika. Itifaki ya kejeli pia inatumika kusawazisha habari kuhusu viongozi.

Mali - vyombo ambavyo vina thamani na vimehifadhiwa kwenye blockchain. Hasa zaidi, hii ni data ya thamani-msingi katika umbizo la JSON. Ni data hii ambayo imeandikwa katika Blockchain. Wana historia, ambayo imehifadhiwa katika blockchain, na hali ya sasa, ambayo imehifadhiwa katika hifadhidata ya "hali ya ulimwengu". Miundo ya data hujazwa kiholela kulingana na kazi za biashara. Hakuna sehemu zinazohitajika, pendekezo pekee ni kwamba mali lazima ziwe na mmiliki na ziwe za thamani.

Ledger - lina hifadhidata ya Blockchain na Word state, ambayo huhifadhi hali ya sasa ya mali. Jimbo la ulimwengu hutumia LevelDB au CouchDB.

Mkataba wa Smart - kwa kutumia mikataba ya busara, mantiki ya biashara ya mfumo inatekelezwa. Katika Hyperledger Fabric, mikataba mahiri inaitwa chaincode. Kutumia chaincode, mali na miamala juu yao imebainishwa. Kwa maneno ya kiufundi, mikataba mahiri ni moduli za programu zinazotekelezwa katika lugha za programu za JS au Go.

Sera ya uidhinishaji - kwa kila msimbo wa mnyororo, unaweza kuweka sera kuhusu uthibitisho mangapi wa shughuli unastahili kutarajiwa na kutoka kwa nani. Sera isipowekwa, basi chaguomsingi ni: "muamala lazima uthibitishwe na mwanachama yeyote wa shirika lolote katika kituo." Mifano ya sera:

  • Muamala lazima uidhinishwe na msimamizi yeyote wa shirika;
  • Inapaswa kuthibitishwa na mwanachama au mteja yeyote wa shirika;
  • Lazima ithibitishwe na shirika lolote rika.

Huduma ya kuagiza β€” hupakia shughuli katika vizuizi na kuzituma kwa wenzao kwenye chaneli. Inahakikisha uwasilishaji wa ujumbe kwa wenzao wote kwenye mtandao. Inatumika kwa mifumo ya viwanda Dalali wa ujumbe wa Kafka, kwa ajili ya maendeleo na majaribio Solo.

WitoFlow

Blockchain: tunapaswa kujenga PoC gani?

  • Programu huwasiliana na Hyperledger Fabric kwa kutumia Go, Node.js au Java SDK;
  • Mteja huunda muamala wa tx na kuutuma kwa wenzao wanaoidhinisha;
  • Rika huthibitisha saini ya mteja, hukamilisha muamala, na kutuma saini ya kuidhinisha tena kwa mteja. Chaincode inatekelezwa tu kwa rika linaloidhinisha, na matokeo ya utekelezaji wake hutumwa kwa wenzao wote. Algorithm hii ya kazi inaitwa makubaliano ya PBFT (Practical Byzantine Fault Tolerant). Inatofautiana na BFT ya kawaida ukweli kwamba ujumbe unatumwa na uthibitisho hautarajiwa kutoka kwa washiriki wote, lakini tu kutoka kwa seti fulani;
  • Baada ya mteja kupokea idadi ya majibu yanayolingana na sera ya uidhinishaji, anatuma shughuli hiyo kwa huduma ya Kuagiza;
  • Huduma ya Kuagiza hutengeneza kizuizi na kuituma kwa wenzao wote wanaojitolea. Huduma ya kuagiza inahakikisha kurekodi kwa mpangilio wa vitalu, ambayo huondoa kinachojulikana kama uma ya leja (tazama sehemu "Forks");
  • Wenzake wanapokea kizuizi, angalia sera ya uidhinishaji tena, andika kizuizi kwa blockchain na ubadilishe hali katika "hali ya ulimwengu" DB.

Wale. Hii inasababisha mgawanyiko wa majukumu kati ya nodi. Hii inahakikisha blockchain ni scalable na salama:

  • Mikataba mahiri (chaincode) hutekeleza uidhinishaji wa wenzao. Hii inahakikisha usiri wa mikataba ya smart, kwa sababu haijahifadhiwa na washiriki wote, lakini tu kwa kuidhinisha wenzao.
  • Kuagiza kunapaswa kufanya kazi haraka. Hii inahakikishwa na ukweli kwamba Kuagiza kunaunda tu kizuizi na kutuma kwa seti maalum ya viongozi wenzao.
  • Wenzake wanaojitolea huhifadhi blockchain pekee - kunaweza kuwa na wengi wao na hawahitaji nguvu nyingi na uendeshaji wa papo hapo.

Maelezo zaidi juu ya suluhisho za usanifu wa Hyperledger Fabric na kwa nini inafanya kazi kwa njia hii na sio vinginevyo inaweza kupatikana hapa: Asili za Usanifu au hapa: Kitambaa cha Hyperledger: Mfumo wa Uendeshaji Uliosambazwa kwa Minyororo ya Kuzuia Zinazoruhusiwa.

Kwa hivyo, Hyperledger Fabric ni mfumo wa ulimwengu wote ambao unaweza:

  • Tekeleza mantiki ya biashara ya kiholela kwa kutumia utaratibu mzuri wa mkataba;
  • Rekodi na upokee data kutoka kwa hifadhidata ya blockchain katika muundo wa JSON;
  • Toa na uthibitishe ufikiaji wa API kwa kutumia Mamlaka ya Cheti.

Sasa kwa kuwa tunaelewa kidogo kuhusu maalum ya Hyperledger Fabric, hebu hatimaye tufanye jambo muhimu!

Kupeleka blockchain

Taarifa ya tatizo

Kazi ni kutekeleza mtandao wa Citcoin na kazi zifuatazo: kuunda akaunti, kupata usawa, kuongeza akaunti yako, kuhamisha sarafu kutoka kwa akaunti moja hadi nyingine. Hebu tuchore mfano wa kitu, ambacho tutatekeleza zaidi katika mkataba wa smart. Kwa hiyo, tutakuwa na akaunti ambazo zinatambuliwa kwa majina na zina usawa, na orodha ya akaunti. Akaunti na orodha ya akaunti ni, kwa mujibu wa mali ya Hyperledger Fabric. Ipasavyo, wana historia na hali ya sasa. Nitajaribu kuchora hii wazi:

Blockchain: tunapaswa kujenga PoC gani?

Takwimu za juu ni hali ya sasa, ambayo imehifadhiwa katika hifadhidata ya "hali ya ulimwengu". Chini yao ni takwimu zinazoonyesha historia ambayo imehifadhiwa kwenye blockchain. Hali ya sasa ya mali inabadilishwa na shughuli. Kipengee hubadilika tu kwa ujumla, kwa hivyo kama matokeo ya muamala, kitu kipya kinaundwa, na thamani ya sasa ya mali inaingia kwenye historia.

Wingu la IBM

Tunaunda akaunti ndani Wingu la IBM. Ili kutumia mfumo wa blockchain, ni lazima uboreshwe hadi Pay-As-You-Go. Utaratibu huu hauwezi kuwa wa haraka, kwa sababu ... IBM huomba maelezo ya ziada na kuyathibitisha mwenyewe. Kwa hali nzuri, naweza kusema kwamba IBM ina vifaa vyema vya mafunzo vinavyokuwezesha kupeleka Kitambaa cha Hyperledger katika wingu lao. Nilipenda mfululizo wa makala na mifano ifuatayo:

Zifuatazo ni viwambo vya jukwaa la IBM Blockchain. Hii sio maagizo ya jinsi ya kuunda blockchain, lakini ni onyesho tu la upeo wa kazi. Kwa hivyo, kwa madhumuni yetu, tunaunda Shirika moja:

Blockchain: tunapaswa kujenga PoC gani?

Tunaunda nodi ndani yake: Orderer CA, Org1 CA, Orderer Rika:

Blockchain: tunapaswa kujenga PoC gani?

Tunaunda watumiaji:

Blockchain: tunapaswa kujenga PoC gani?

Unda Idhaa na uiite citcoin:

Blockchain: tunapaswa kujenga PoC gani?

Kimsingi Channel ni blockchain, kwa hivyo huanza na block sifuri (Mwanzo block):

Blockchain: tunapaswa kujenga PoC gani?

Kuandika Mkataba Mahiri

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

Intuitively, kila kitu kinapaswa kuwa wazi hapa:

  • Kuna vitendaji kadhaa (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) ambazo programu ya onyesho itaita kwa kutumia API ya Hyperledger Fabric.
  • Vitendaji vya SendFrom na RefillBalance hutoa Matukio ambayo programu ya onyesho itapokea.
  • Utendakazi wa papo hapo huitwa mara moja wakati mkataba mahiri unapoanzishwa. Kwa kweli, inaitwa si mara moja tu, lakini kila wakati toleo la mkataba wa smart linabadilika. Kwa hivyo, kuanzisha orodha na safu tupu ni wazo mbaya, kwa sababu Sasa, tunapobadilisha toleo la mkataba mahiri, tutapoteza orodha ya sasa. Lakini ni sawa, ninajifunza tu).
  • Akaunti na orodha ya akaunti ni miundo ya data ya JSON. JS hutumiwa kwa udanganyifu wa data.
  • Unaweza kupata thamani ya sasa ya kipengee kwa kutumia simu ya utendaji ya getState, na kuisasisha kwa kutumia putState.
  • Wakati wa kuunda Akaunti, kazi ya AddAccount inaitwa, ambayo kulinganisha kunafanywa kwa idadi kubwa ya akaunti katika blockchain (maxAccounts = 5). Na hapa kuna jamb (umeona?), ambayo inaongoza kwa ongezeko lisilo na mwisho la idadi ya akaunti. Makosa kama haya yanapaswa kuepukwa)

Kisha, tunapakia mkataba mahiri kwenye Kituo na kuuthibitisha:

Blockchain: tunapaswa kujenga PoC gani?

Wacha tuangalie shughuli ya kusakinisha Mkataba wa Smart:

Blockchain: tunapaswa kujenga PoC gani?

Hebu tuangalie maelezo kuhusu Channel yetu:

Blockchain: tunapaswa kujenga PoC gani?

Matokeo yake, tunapata mchoro ufuatao wa mtandao wa blockchain katika wingu la IBM. Mchoro pia unaonyesha programu ya onyesho inayoendeshwa kwenye wingu la Amazon kwenye seva pepe (zaidi kuihusu katika sehemu inayofuata):

Blockchain: tunapaswa kujenga PoC gani?

Kuunda GUI kwa simu za API za Hyperledger Fabric

Hyperledger Fabric ina API ambayo inaweza kutumika:

  • Unda kituo;
  • Miunganisho rika kwa chaneli;
  • Ufungaji na uanzishwaji wa mikataba mahiri kwenye kituo;
  • Kupiga simu shughuli;
  • Omba habari juu ya blockchain.

Maendeleo ya maombi

Katika programu yetu ya onyesho tutatumia API tu kuita shughuli na kuomba habari, kwa sababu Tayari tumekamilisha hatua zilizobaki kwa kutumia jukwaa la blockchain la IBM. Tunaandika GUI kwa kutumia safu ya teknolojia ya kawaida: Express.js + Vue.js + Node.js. Unaweza kuandika nakala tofauti juu ya jinsi ya kuanza kuunda programu za kisasa za wavuti. Hapa nitaacha kiunga cha safu ya mihadhara ambayo nilipenda zaidi: Programu Kamili ya Rafu ya Wavuti kwa kutumia Vue.js na Express.js. Matokeo yake ni programu-tumizi ya seva-teja iliyo na kiolesura cha picha kinachojulikana katika mtindo wa Usanifu Bora wa Google. API ya REST kati ya mteja na seva ina simu kadhaa:

  • HyperledgerDemo/v1/init - anzisha blockchain;
  • HyperledgerDemo/v1/accounts/list β€” pata orodha ya akaunti zote;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 β€” fungua akaunti ya Bob;
  • HyperledgerDemo/v1/info?account=Bob β€” pata taarifa kuhusu akaunti ya Bob;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 β€” hamisha sarafu mbili kutoka Bob hadi Alice;
  • HyperledgerDemo/v1/disconnect - funga muunganisho kwenye blockchain.

Maelezo ya API na mifano iliyojumuishwa ndani Tovuti ya postman - programu inayojulikana ya kujaribu HTTP API.

Programu ya onyesho katika wingu la Amazon

Nilipakia programu kwenye Amazon kwa sababu... IBM bado haijaweza kuboresha akaunti yangu na kuniruhusu kuunda seva pepe. Jinsi ya kuongeza cherry kwenye kikoa: www.citcoin.info. Nitawasha seva kwa muda, kisha niizime, kwa sababu ... senti za kukodisha zinadondoka, na sarafu za citcoin bado hazijaorodheshwa kwenye soko la hisa) Ninajumuisha picha za skrini za demo kwenye makala ili mantiki ya kazi iwe wazi. Programu ya onyesho inaweza:

  • Anzisha blockchain;
  • Unda Akaunti (lakini sasa huwezi kuunda Akaunti mpya, kwa sababu idadi ya juu ya akaunti iliyoainishwa katika mkataba wa smart imefikiwa kwenye blockchain);
  • Kupokea orodha ya Akaunti;
  • Kuhamisha sarafu za citcoin kati ya Alice, Bob na Alex;
  • Pokea matukio (lakini sasa hakuna njia ya kuonyesha matukio, kwa hivyo kwa unyenyekevu interface inasema kwamba matukio hayatumiki);
  • Vitendo vya kumbukumbu.

Kwanza tunaanzisha blockchain:

Blockchain: tunapaswa kujenga PoC gani?

Ifuatayo, tunaunda akaunti yetu, usipoteze wakati na salio:

Blockchain: tunapaswa kujenga PoC gani?

Tunapata orodha ya akaunti zote zinazopatikana:

Blockchain: tunapaswa kujenga PoC gani?

Tunachagua mtumaji na mpokeaji, na kupata mizani yao. Ikiwa mtumaji na mpokeaji ni sawa, basi akaunti yake itajazwa:

Blockchain: tunapaswa kujenga PoC gani?

Katika logi tunafuatilia utekelezaji wa shughuli:

Blockchain: tunapaswa kujenga PoC gani?

Kwa kweli, hiyo ni yote na mpango wa onyesho. Hapo chini unaweza kuona shughuli zetu katika blockchain:

Blockchain: tunapaswa kujenga PoC gani?

Na orodha ya jumla ya shughuli:

Blockchain: tunapaswa kujenga PoC gani?

Kwa hili, tumefanikiwa kukamilisha utekelezaji wa PoC ili kuunda mtandao wa Citcoin. Ni nini kingine kinachohitajika kufanywa ili Citcoin iwe mtandao kamili wa kuhamisha sarafu? Kidogo sana:

  • Katika hatua ya kuunda akaunti, tekeleza uundaji wa ufunguo wa kibinafsi / wa umma. Ufunguo wa kibinafsi lazima uhifadhiwe na mtumiaji wa akaunti, ufunguo wa umma lazima uhifadhiwe kwenye blockchain.
  • Fanya uhamishaji wa sarafu ambapo ufunguo wa umma, badala ya jina, hutumiwa kutambua mtumiaji.
  • Simba kwa njia fiche miamala inayotoka kwa mtumiaji hadi kwenye seva kwa kutumia ufunguo wake wa faragha.

Hitimisho

Tumetumia mtandao wa Citcoin wenye vipengele vifuatavyo: ongeza akaunti, pata salio, ongeza akaunti yako, uhamishe sarafu kutoka akaunti moja hadi nyingine. Kwa hivyo, ilitugharimu nini kujenga PoC?

  • Unahitaji kusoma blockchain kwa ujumla na Hyperledger Fabric haswa;
  • Jifunze kutumia IBM au Amazon clouds;
  • Jifunze lugha ya programu ya JS na mfumo fulani wa wavuti;
  • Ikiwa data fulani inahitaji kuhifadhiwa si katika blockchain, lakini katika database tofauti, kisha jifunze kuunganisha, kwa mfano, na PostgreSQL;
  • Na mwisho kabisa - huwezi kuishi katika ulimwengu wa kisasa bila ujuzi wa Linux!)

Kwa kweli, sio sayansi ya roketi, lakini itabidi ufanye bidii!

Vyanzo kwenye GitHub

Vyanzo kuweka GitHub. Maelezo mafupi ya hazina:
Katalogi Β«serverΒ»- Seva ya Node.js
Katalogi Β«mtejaΒ»- Mteja wa Node.js
Katalogi Β«blockchain"(thamani za parameta na funguo, kwa kweli, hazifanyi kazi na hupewa tu kama mfano):

  • mkataba - msimbo wa chanzo wa mkataba mahiri
  • pochi - funguo za mtumiaji kwa kutumia API ya Hyperledger Fabric.
  • *.cds - matoleo yaliyokusanywa ya mikataba mahiri
  • *.json faili - mifano ya faili za usanidi kwa kutumia API ya Hyperledger Fabric

Ni mwanzo tu!

Chanzo: mapenzi.com

Kuongeza maoni