Блокчейн: бид ямар PoC барих ёстой вэ?

Нүд чинь айж, гар чинь загатнаж байна!

Өмнөх нийтлэлүүдэд бид блокчейн бүтээгдсэн технологиудыг авч үзсэн (Бид блокчэйн юу бүтээх ёстой вэ?) болон тэдгээрийн тусламжтайгаар хэрэгжиж болох тохиолдлууд (Бид яагаад хэрэг үүсгэх ёстой вэ?). Гараараа ажиллах цаг боллоо! Нисгэгчид болон PoC (Үзэл баримтлалын баталгаа) хэрэгжүүлэхийн тулд би үүлийг ашиглахыг илүүд үздэг, учир нь... Тэдэнд дэлхийн хаанаас ч хандах боломжтой бөгөөд ихэвчлэн хүрээлэн буй орчныг уйтгартай суурилуулах ажилд цаг үрэх шаардлагагүй байдаг. Урьдчилан тохируулсан тохиргоонууд байдаг. Тиймээс, энгийн зүйл хийцгээе, жишээлбэл, оролцогчдын хооронд зоос дамжуулах сүлжээ, үүнийг даруухан Bitcoin гэж нэрлэе. Үүний тулд бид IBM үүл болон бүх нийтийн блокчейн Hyperledger Fabric ашиглах болно. Эхлээд Hyperledger Fabric яагаад бүх нийтийн блокчейн гэж нэрлэгддэгийг олж мэдье?

Блокчейн: бид ямар PoC барих ёстой вэ?

Hyperledger Fabric - бүх нийтийн блокчейн

Ерөнхийдөө бүх нийтийн мэдээллийн систем нь:

  • Бизнесийн логикийг гүйцэтгэдэг серверийн багц ба програм хангамжийн цөм;
  • Системтэй харилцах интерфейс;
  • Төхөөрөмж/хүмүүсийг бүртгэх, баталгаажуулах, зөвшөөрөл олгох хэрэгслүүд;
  • Үйл ажиллагааны болон архивын өгөгдлийг хадгалах мэдээллийн сан:

Блокчейн: бид ямар PoC барих ёстой вэ?

Hyperledger Fabric гэж юу болох тухай албан ёсны хувилбарыг эндээс уншиж болно сайт, товчхондоо Hyperledger Fabric нь нээлттэй эхийн платформ бөгөөд JS болон Go програмчлалын хэлээр бичигдсэн хувийн блокчейн бүтээж, дур зоргоороо ухаалаг гэрээг гүйцэтгэх боломжийг олгодог. Hyperledger Fabric-ийн архитектурыг нарийвчлан авч үзье, энэ нь зөвхөн өгөгдөл хадгалах, бүртгэх онцлог шинж чанартай бүх нийтийн систем гэдгийг шалгаарай. Өвөрмөц онцлог нь бүх блокчэйнүүдийн нэгэн адил оролцогчид зөвшилцөлд хүрч, өгөгдлийг бүртгэсний дараа чимээгүйхэн засах эсвэл устгах боломжгүй тохиолдолд л блокчейн дээр байрлуулсан блокуудад хадгалагддаг.

Hyperledger Fabric Architecture

Диаграмм нь Hyperledger Fabric архитектурыг харуулж байна:

Блокчейн: бид ямар PoC барих ёстой вэ?

Байгууллага - байгууллага нь үе тэнгийнхнийг агуулдаг, өөрөөр хэлбэл. байгууллагуудын дэмжлэгээр блокчэйн бий болсон. Өөр өөр байгууллагууд нэг сувгийн нэг хэсэг байж болно.

суваг - үе тэнгийнхнийг бүлгүүдэд нэгтгэдэг логик бүтэц, i.e. блокчлоныг тодорхойлсон. Hyperledger Fabric нь янз бүрийн бизнесийн логик бүхий олон блокчейнүүдийг нэгэн зэрэг боловсруулах боломжтой.

Гишүүнчлэлийн үйлчилгээ үзүүлэгч (MSP) нь иргэний үнэмлэх олгох, үүрэг хуваарилах CA (Сертификат эрх бүхий байгууллага) юм. Зангилаа үүсгэхийн тулд та MSP-тэй харилцах хэрэгтэй.

Үе тэнгийн зангилаа — гүйлгээг шалгах, блокчэйн хадгалах, ухаалаг гэрээ байгуулах, программуудтай харилцах. Үе тэнгийнхэн нь MSP-ээс олгосон иргэний үнэмлэхтэй (тоон гэрчилгээ) байдаг. Бүх зангилаа тэгш эрхтэй Bitcoin эсвэл Etherium сүлжээнээс ялгаатай нь Hyperledger Fabric-ийн зангилаанууд өөр өөр үүрэг гүйцэтгэдэг.

  • Үе тэнгийнхэн байж магадгүй дэмжих үе тэнгийнхэн (EP) болон ухаалаг гэрээ хийх.
  • Үе тэнгийнхэн (CP) - зөвхөн блокчэйнд өгөгдлийг хадгалж, "Дэлхийн төлөв" -ийг шинэчилнэ үү.
  • Anchor Peer (AP) - хэрвээ хэд хэдэн байгууллага блокчэйнд оролцдог бол тэдгээрийн хоорондын харилцаанд зангуу үе тэнгийнхэн ашиглагддаг. Байгууллага бүр нэг буюу хэд хэдэн зангуутай байх ёстой. AP-г ашигласнаар аливаа байгууллагын үе тэнгийнхэн бусад байгууллагын бүх гишүүдийн талаарх мэдээллийг авах боломжтой. AP хооронд мэдээллийг синхрончлоход ашигладаг хов живийн протокол.
  • Удирдагч үе тэнгийнхэн - хэрэв байгууллага хэд хэдэн үе тэнгийнхэнтэй бол зөвхөн үе тэнгийн удирдагч Захиалга өгөх үйлчилгээнээс блокуудыг хүлээн авч бусад үе тэнгийнхэнд өгнө. Удирдагчийг байгууллагын үе тэнгийнхэн статик байдлаар эсвэл динамикаар сонгож болно. Хов живийн протоколыг удирдагчдын талаарх мэдээллийг синхрончлоход ашигладаг.

хөрөнгө — үнэ цэнэтэй, блокчейн дээр хадгалагдсан байгууллагууд. Тодруулбал, энэ нь JSON формат дахь түлхүүр-утгийн өгөгдөл юм. Энэ бол блокчейн дээр бичигдсэн өгөгдөл юм. Тэд блокчэйнд хадгалагдсан түүхтэй, "Дэлхийн төлөв" мэдээллийн санд хадгалагдсан одоогийн төлөвтэй байдаг. Өгөгдлийн бүтцийг бизнесийн даалгавраас хамааран дур зоргоороо дүүргэдэг. Шаардлагатай талбар байхгүй, цорын ганц зөвлөмж бол хөрөнгө нь эзэнтэй, үнэ цэнэтэй байх ёстой.

дэвтэр — Хөрөнгийн одоогийн төлөвийг хадгалдаг Blockchain болон Word улсын мэдээллийн сангаас бүрдэнэ. Дэлхийн муж нь LevelDB эсвэл CouchDB ашигладаг.

Ухаалаг гэрээ — ухаалаг гэрээг ашиглан системийн бизнесийн логик хэрэгждэг. Hyperledger Fabric-д ухаалаг гэрээг chaincode гэж нэрлэдэг. Гинжин кодыг ашиглан тэдгээрийн дээрх хөрөнгө, гүйлгээг зааж өгсөн болно. Техникийн хэллэгээр ухаалаг гэрээ нь JS эсвэл Go програмчлалын хэл дээр хэрэгжсэн програм хангамжийн модулиуд юм.

Баталгаажуулах бодлого — гинжин код бүрийн хувьд та гүйлгээний баталгаажуулалт, хэнээс хүлээх ёстой вэ гэсэн бодлогыг тохируулж болно. Хэрэв энэ удирдамжийг тохируулаагүй бол өгөгдмөл нь: "гүйлгээг тухайн сувгийн аль ч байгууллагын гишүүн баталгаажуулсан байх ёстой." Бодлогын жишээ:

  • Гүйлгээг байгууллагын аль ч администратор зөвшөөрсөн байх ёстой;
  • Байгууллагын аль нэг гишүүн эсвэл үйлчлүүлэгчээр баталгаажуулсан байх;
  • Үе тэнгийн байгууллагаар баталгаажуулсан байх ёстой.

Захиалга өгөх үйлчилгээ - гүйлгээг блок болгон багцалж, суваг дахь үе тэнгийнхэндээ илгээдэг. Сүлжээний бүх үе тэнгийнхэнд мессеж хүргэх баталгаа. Аж үйлдвэрийн системд ашигладаг Кафка мессеж зуучлагч, боловсруулах, турших зорилгоор Solo.

CallFlow

Блокчейн: бид ямар PoC барих ёстой вэ?

  • Энэхүү програм нь Go, Node.js эсвэл Java SDK ашиглан Hyperledger Fabric-тай холбогддог;
  • Үйлчлүүлэгч нь tx гүйлгээг үүсгэж, баталгаажуулсан нөхдөд илгээдэг;
  • Peer нь үйлчлүүлэгчийн гарын үсгийг шалгаж, гүйлгээг хийж, баталгаажуулсан гарын үсгийг үйлчлүүлэгч рүү буцааж илгээдэг. Chaincode нь зөвхөн дэмжигч дээр хийгдэх бөгөөд гүйцэтгэлийн үр дүнг бүх үе тэнгийнхэн рүү илгээдэг. Энэхүү ажлын алгоритмыг PBFT (Practical Byzantine Fault Tolerant) зөвшилцөл гэж нэрлэдэг. -аас ялгаатай сонгодог BFT мессеж илгээгдэж, баталгаажуулалтыг бүх оролцогчоос биш, зөвхөн тодорхой багцаас хүлээж байгаа баримт;
  • Үйлчлүүлэгч баталгаажуулалтын бодлогод нийцсэн хариуны тоог хүлээн авсны дараа тэрээр гүйлгээг Захиалгын үйлчилгээ рүү илгээдэг;
  • Захиалга өгөх үйлчилгээ нь блок үүсгэж, бүх үүрэг гүйцэтгэгч рүү илгээдэг. Захиалгын үйлчилгээ нь блокуудын дараалсан бүртгэлийг баталгаажуулдаг бөгөөд энэ нь дэвтэрийн сэрээ гэж нэрлэгддэг зүйлийг арилгадаг."Сэрээ" хэсгийг үзнэ үү);
  • Үе тэнгийнхэн блок хүлээн авч, баталгаажуулалтын бодлогыг дахин шалгаж, блокчлон руу блок бичиж, "Дэлхийн төлөв" DB дахь төлөвийг өөрчилнө.

Тэдгээр. Үүний үр дүнд зангилаа хоорондын үүргийн хуваагдал үүсдэг. Энэ нь блокчейн нь өргөтгөх боломжтой, аюулгүй байдлыг баталгаажуулдаг:

  • Ухаалаг гэрээнүүд (гинжин код) нь үе тэнгийнхэндээ дэмжлэг үзүүлдэг. Энэ нь ухаалаг гэрээний нууцлалыг баталгаажуулдаг, учир нь Энэ нь бүх оролцогчид хадгалагддаггүй, гэхдээ зөвхөн үе тэнгийнхэндээ дэмжигддэг.
  • Захиалга хурдан ажиллах ёстой. Энэ нь Захиалга нь зөвхөн блок үүсгэж, түүнийгээ тогтмол манлайлагч нөхдөд илгээснээр баталгаажсан болно.
  • Үе тэнгийнхэн нь зөвхөн блокчлон хадгалдаг - тэдгээр нь олон байж болох бөгөөд тэд маш их хүч чадал, шуурхай ажиллагаа шаарддаггүй.

Hyperledger Fabric-ийн архитектурын шийдлүүд болон яагаад ийм байдлаар ажилладаг боловч өөрөөр ажилладаггүй талаар дэлгэрэнгүй мэдээллийг эндээс авах боломжтой. Архитектурын гарал үүсэл эсвэл энд: Hyperledger Fabric: Зөвшөөрөгдсөн блокчейнүүдэд зориулсан тархсан үйлдлийн систем.

Тиймээс Hyperledger Fabric бол үнэхээр бүх нийтийн систем бөгөөд та дараах зүйлсийг хийх боломжтой:

  • Ухаалаг гэрээний механизмыг ашиглан дур зоргоороо бизнесийн логикийг хэрэгжүүлэх;
  • Blockchain мэдээллийн сангаас JSON форматаар өгөгдлийг бүртгэх, хүлээн авах;
  • Сертификатын эрх бүхий байгууллагыг ашиглан API хандалтыг олгож, баталгаажуулна уу.

Одоо бид Hyperledger Fabric-ийн онцлогуудын талаар бага зэрэг ойлгосон тул эцэст нь хэрэгтэй зүйл хийцгээе!

Блокчейн нэвтрүүлж байна

Асуудлын тодорхойлолт

Даалгавар бол Citcoin сүлжээг дараах функцээр хэрэгжүүлэх явдал юм: данс үүсгэх, үлдэгдэл авах, дансаа цэнэглэх, нэг данснаас нөгөө данс руу зоос шилжүүлэх. Ухаалаг гэрээнд цаашид хэрэгжүүлэх объектын загварыг зурцгаая. Тиймээс бид нэрээр нь тодорхойлогдсон, үлдэгдэлтэй данс, дансны жагсаалттай болно. Бүртгэлүүд болон дансны жагсаалт нь Hyperledger Fabric активын хувьд байна. Үүний дагуу тэд түүхтэй, өнөөгийн байдалтай байна. Би үүнийг тодорхой зурахыг хичээх болно:

Блокчейн: бид ямар PoC барих ёстой вэ?

Хамгийн дээд үзүүлэлтүүд нь "Дэлхийн төлөв" мэдээллийн санд хадгалагдаж буй одоогийн төлөв юм. Тэдгээрийн доор блокчэйнд хадгалагдсан түүхийг харуулсан тоонууд байна. Хөрөнгийн өнөөгийн байдал нь гүйлгээгээр өөрчлөгддөг. Хөрөнгө зөвхөн бүхэлдээ өөрчлөгддөг тул гүйлгээний үр дүнд шинэ объект бий болж, хөрөнгийн одоогийн үнэ цэнэ түүхэнд үлддэг.

IBM Cloud

Бид данс үүсгэнэ IBM үүл. Блокчэйн платформыг ашиглахын тулд үүнийг Pay-As-You-Go болгон шинэчлэх шаардлагатай. Энэ үйл явц хурдан биш байж магадгүй, учир нь... IBM нэмэлт мэдээлэл хүсч, гараар баталгаажуулдаг. Эерэг зүйл бол IBM-д Hyperledger Fabric-ийг үүлэн дээрээ байрлуулах боломжийг олгодог сайн сургалтын материалтай гэж би хэлж чадна. Дараах цуврал нийтлэл, жишээнүүд надад таалагдсан:

Дараах нь IBM Blockchain платформын дэлгэцийн агшин юм. Энэ бол блокчэйн хэрхэн үүсгэх заавар биш, зүгээр л даалгаврын цар хүрээг харуулах явдал юм. Тиймээс бид зорилгодоо зориулж нэг байгууллагыг байгуулдаг:

Блокчейн: бид ямар PoC барих ёстой вэ?

Бид үүнд зангилаа үүсгэдэг: Захиалагч CA, Org1 CA, Захиалагч Peer:

Блокчейн: бид ямар PoC барих ёстой вэ?

Бид хэрэглэгчдийг бий болгодог:

Блокчейн: бид ямар PoC барих ёстой вэ?

Суваг үүсгээд citcoin гэж нэрлэнэ үү:

Блокчейн: бид ямар PoC барих ёстой вэ?

Үндсэндээ Channel бол блокчэйн тул блок тэгээр эхэлдэг (Эхлэл блок):

Блокчейн: бид ямар 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 функцууд нь демо програмын хүлээн авах үйл явдлуудыг үүсгэдэг.
  • Instantiate функц нь ухаалаг гэрээг үүсгэсэн үед нэг удаа дуудагддаг. Уг нь нэг удаа биш, ухаалаг гэрээний хувилбар өөрчлөгдөх болгонд л дуудагддаг. Тиймээс хоосон массив бүхий жагсаалтыг эхлүүлэх нь муу санаа юм, учир нь Одоо ухаалаг гэрээний хувилбарыг өөрчлөхөд бид одоогийн жагсаалтаа алдах болно. Гэхдээ зүгээр, би дөнгөж сурч байна).
  • Бүртгэлүүд болон дансны жагсаалт нь JSON өгөгдлийн бүтэц юм. JS нь өгөгдөл боловсруулахад ашиглагддаг.
  • Та getState функцийн дуудлагыг ашиглан хөрөнгийн одоогийн утгыг авч, putState ашиглан шинэчлэх боломжтой.
  • Бүртгэл үүсгэх үед AddAccount функцийг дууддаг бөгөөд блокчейн дэх хамгийн их дансны (maxAccounts = 5) харьцуулалтыг хийдэг. Мөн энд түгжрэл байна (та анзаарсан уу?), Энэ нь дансны тоог эцэс төгсгөлгүй нэмэгдүүлэхэд хүргэдэг. Ийм алдаанаас зайлсхийх хэрэгтэй)

Дараа нь бид сувагт ухаалаг гэрээг ачаалж, үүсгэнэ:

Блокчейн: бид ямар PoC барих ёстой вэ?

Ухаалаг гэрээг суулгах гүйлгээг харцгаая:

Блокчейн: бид ямар PoC барих ёстой вэ?

Манай сувгийн талаарх дэлгэрэнгүй мэдээллийг харцгаая:

Блокчейн: бид ямар PoC барих ёстой вэ?

Үүний үр дүнд бид IBM үүл дэх блокчейн сүлжээний дараах диаграммыг олж авна. Диаграмм нь виртуал сервер дээр Amazon үүлэн дээр ажиллаж байгаа демо програмыг харуулж байна (дараагийн хэсэгт энэ талаар дэлгэрэнгүй):

Блокчейн: бид ямар PoC барих ёстой вэ?

Hyperledger Fabric API дуудлагад зориулсан GUI үүсгэх

Hyperledger Fabric нь дараах үйлдлүүдэд ашиглагдах API-тай.

  • суваг үүсгэх;
  • Суваг хоорондын холболт;
  • Суваг дахь ухаалаг гэрээг суурилуулах, нэвтрүүлэх;
  • Дуудлага хийх гүйлгээ;
  • Блокчейн талаар мэдээлэл авах.

Хэрэглээний хөгжүүлэлт

Бидний үзүүлэх хөтөлбөрт бид API-г зөвхөн гүйлгээг дуудаж, мэдээлэл хүсэхэд ашиглах болно, учир нь Бид IBM blockchain платформыг ашиглан үлдсэн алхмуудыг аль хэдийн дуусгасан. Бид стандарт технологийн стек ашиглан GUI бичдэг: Express.js + Vue.js + Node.js. Орчин үеийн вэб програмуудыг хэрхэн үүсгэж эхлэх талаар та тусдаа нийтлэл бичиж болно. Энд би хамгийн их таалагдсан цуврал лекцүүдийн холбоосыг үлдээх болно. Vue.js & Express.js ашиглан бүрэн стек вэб програм. Үүний үр дүнд Google-ийн Материал дизайны хэв маягийн танил график интерфэйс бүхий клиент-сервер программ бий болсон. Үйлчлүүлэгч болон серверийн хоорондох REST API нь хэд хэдэн дуудлагаас бүрдэнэ:

  • HyperledgerDemo/v1/init - блокчлоныг эхлүүлэх;
  • HyperledgerDemo/v1/accounts/list — бүх дансны жагсаалтыг авах;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — Боб данс үүсгэх;
  • HyperledgerDemo/v1/info?account=Боб — Боб бүртгэлийн тухай мэдээлэл авах;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Алис&volume=2 - Бобоос Алис руу хоёр зоос шилжүүлэх;
  • HyperledgerDemo/v1/disconnect - блокчейн холболтыг хаах.

Оруулсан жишээнүүдийн хамт API-ийн тайлбар Шуудангийн вэбсайт - HTTP API-г турших алдартай програм.

Амазон үүл дэх демо програм

Би Амазон руу програмаа байршуулсан, учир нь... IBM нь миний бүртгэлийг сайжруулж, виртуал сервер үүсгэхийг зөвшөөрөөгүй хэвээр байна. Домэйн руу интоорыг хэрхэн нэмэх вэ: www.citcoin.info. Би серверээ хэсэг хугацаанд асаалттай байлгаад дараа нь унтраана, учир нь... центийн түрээсийн мөнгө дусч байна, мөн циткоин зоос хөрөнгийн бирж дээр хараахан бүртгэгдээгүй байна) Ажлын логик нь ойлгомжтой байхын тулд би демогийн дэлгэцийн агшинг нийтлэлдээ оруулж байна. Демо програм нь:

  • Блокчэйнийг эхлүүлэх;
  • Бүртгэл үүсгэх (гэхдээ одоо та шинэ данс үүсгэх боломжгүй, учир нь блокчэйнд ухаалаг гэрээнд заасан дансны дээд хязгаарт хүрсэн);
  • Дансны жагсаалтыг хүлээн авах;
  • Алис, Боб, Алекс хоёрын хооронд циткоин зоос шилжүүлэх;
  • Үйл явдлыг хүлээн авах (гэхдээ одоо үйл явдлыг харуулах ямар ч арга байхгүй тул хялбар болгох үүднээс интерфэйс нь үйл явдлуудыг дэмждэггүй гэж хэлдэг);
  • Үйлдлүүдийг бүртгэх.

Эхлээд бид блокчлоныг эхлүүлнэ:

Блокчейн: бид ямар PoC барих ёстой вэ?

Дараа нь бид дансаа үүсгэж, үлдэгдэлтэй цаг бүү үрээрэй:

Блокчейн: бид ямар PoC барих ёстой вэ?

Бид боломжтой бүх дансны жагсаалтыг авдаг:

Блокчейн: бид ямар PoC барих ёстой вэ?

Бид илгээгч болон хүлээн авагчийг сонгож, тэдгээрийн үлдэгдлийг авдаг. Хэрэв илгээгч болон хүлээн авагч ижил байвал түүний дансыг нөхөх болно.

Блокчейн: бид ямар PoC барих ёстой вэ?

В логе следим за выполнением транзакций:

Блокчейн: бид ямар PoC барих ёстой вэ?

Үнэн хэрэгтээ энэ нь демо програмтай холбоотой юм. Блокчейн дэх манай гүйлгээг доороос харж болно.

Блокчейн: бид ямар PoC барих ёстой вэ?

Мөн гүйлгээний ерөнхий жагсаалт:

Блокчейн: бид ямар PoC барих ёстой вэ?

Ингэснээр бид Citcoin сүлжээг бий болгох PoC-ийн хэрэгжилтийг амжилттай дуусгалаа. Citcoin нь зоос дамжуулах бүрэн сүлжээ болохын тулд өөр юу хийх хэрэгтэй вэ? Өчүүхэн жижиг:

  • Данс үүсгэх үе шатанд хувийн / нийтийн түлхүүр үүсгэх ажлыг хэрэгжүүлнэ үү. Хувийн түлхүүрийг хэрэглэгчийн дансанд, нийтийн түлхүүрийг блокчэйнд хадгалах ёстой.
  • Хэрэглэгчийг танихын тулд нэр биш нийтийн түлхүүрийг ашиглан зоос шилжүүлээрэй.
  • Хэрэглэгчээс сервер рүү шилжих гүйлгээг түүний хувийн түлхүүрээр шифрлэнэ үү.

дүгнэлт

Бид Citcoin сүлжээг дараах функцээр хэрэгжүүлсэн: данс нэмэх, үлдэгдэл авах, дансаа цэнэглэх, нэг данснаас нөгөө данс руу зоос шилжүүлэх. Тэгэхээр, PoC барихад бидэнд ямар зардал гарсан бэ?

  • Та ерөнхийдөө блокчэйн, ялангуяа Hyperledger Fabric-ийг судлах хэрэгтэй;
  • IBM эсвэл Amazon үүл ашиглаж сурах;
  • JS програмчлалын хэл болон зарим вэб хүрээг сурах;
  • Хэрэв зарим өгөгдлийг блокчэйнд биш, харин тусдаа мэдээллийн санд хадгалах шаардлагатай бол, жишээлбэл, PostgreSQL-тэй нэгтгэж сурах;
  • Эцэст нь хэлэхэд та Линуксийн мэдлэггүйгээр орчин үеийн ертөнцөд амьдарч чадахгүй!)

Мэдээжийн хэрэг, энэ нь пуужингийн шинжлэх ухаан биш, гэхдээ та шаргуу ажиллах хэрэгтэй болно!

GitHub дээрх эх сурвалжууд

Эх сурвалжууд тавьсан GitHub. Хадгалах сангийн товч тайлбар:
Каталог «сервер» — Node.js сервер
Каталог «үйлчлүүлэгч» — Node.js үйлчлүүлэгч
Каталог «blockchain"(параметрийн утга ба түлхүүрүүд нь мэдээжийн хэрэг ажиллахгүй бөгөөд зөвхөн жишээ болгон өгсөн болно):

  • гэрээ — ухаалаг гэрээний эх код
  • түрийвч — Hyperledger Fabric API ашиглах хэрэглэгчийн түлхүүрүүд.
  • *.cds - ухаалаг гэрээний эмхэтгэсэн хувилбарууд
  • *.json файлууд - Hyperledger Fabric API ашиглах тохиргооны файлуудын жишээ

Энэ бол зөвхөн эхлэл!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх