Blockchain: chúng ta nên xây dựng PoC nào?

Mắt bạn sợ và tay bạn ngứa!

Trong các bài viết trước, chúng tôi đã đề cập đến các công nghệ xây dựng chuỗi khối (Chúng ta nên xây dựng một blockchain như thế nào?) và các trường hợp có thể được thực hiện với sự trợ giúp của họ (Tại sao chúng ta nên xây dựng một trường hợp?). Đã đến lúc phải làm việc bằng đôi tay của bạn! Để triển khai các phi công và PoC (Bằng chứng về khái niệm), tôi thích sử dụng đám mây hơn vì... chúng có thể được truy cập từ mọi nơi trên thế giới và thường không cần lãng phí thời gian vào việc cài đặt môi trường tẻ nhạt, bởi vì Có cấu hình cài sẵn. Vì vậy, hãy làm một cái gì đó đơn giản, chẳng hạn như một mạng chuyển tiền giữa những người tham gia và hãy gọi nó một cách khiêm tốn là Bitcoin. Để làm được điều này, chúng tôi sẽ sử dụng đám mây IBM và Hyperledger Fabric chuỗi khối phổ quát. Đầu tiên, hãy cùng tìm hiểu tại sao Hyperledger Fabric được gọi là blockchain phổ quát?

Blockchain: chúng ta nên xây dựng PoC nào?

Hyperledger Fabric - một blockchain phổ quát

Nói chung, một hệ thống thông tin phổ quát là:

  • Một tập hợp các máy chủ và lõi phần mềm thực hiện logic nghiệp vụ;
  • Giao diện tương tác với hệ thống;
  • Công cụ đăng ký, xác thực và phân quyền thiết bị/con người;
  • Cơ sở dữ liệu lưu trữ dữ liệu vận hành và lưu trữ:

Blockchain: chúng ta nên xây dựng PoC nào?

Bạn có thể đọc phiên bản chính thức của Hyperledger Fabric tại websitevà nói tóm lại, Hyperledger Fabric là một nền tảng mã nguồn mở cho phép bạn xây dựng các chuỗi khối riêng tư và thực hiện các hợp đồng thông minh tùy ý được viết bằng ngôn ngữ lập trình JS và Go. Chúng ta hãy xem xét chi tiết kiến ​​trúc của Hyperledger Fabric và đảm bảo rằng đây là một hệ thống phổ quát chỉ có các thông số cụ thể để lưu trữ và ghi dữ liệu. Điểm đặc biệt là dữ liệu, giống như trong tất cả các chuỗi khối, được lưu trữ trong các khối được đặt trên chuỗi khối chỉ khi những người tham gia đạt được sự đồng thuận và sau khi ghi lại dữ liệu không thể sửa hoặc xóa một cách lặng lẽ.

Kiến trúc vải Hyperledger

Sơ đồ thể hiện kiến ​​trúc Hyperledger Fabric:

Blockchain: chúng ta nên xây dựng PoC nào?

Tổ chức — các tổ chức bao gồm các đồng nghiệp, tức là blockchain tồn tại nhờ sự hỗ trợ của các tổ chức. Các tổ chức khác nhau có thể là một phần của cùng một kênh.

Kênh - một cấu trúc logic hợp nhất các đồng nghiệp thành các nhóm, tức là chuỗi khối được chỉ định. Hyperledger Fabric có thể xử lý đồng thời nhiều chuỗi khối với logic kinh doanh khác nhau.

Nhà cung cấp dịch vụ thành viên (MSP) là CA (Cơ quan cấp chứng chỉ) để cấp danh tính và phân công vai trò. Để tạo một nút, bạn cần tương tác với MSP.

Các nút ngang hàng — xác minh giao dịch, lưu trữ chuỗi khối, thực hiện hợp đồng thông minh và tương tác với các ứng dụng. Các máy ngang hàng có danh tính (chứng chỉ kỹ thuật số) do MSP cấp. Không giống như mạng Bitcoin hoặc Etherium, nơi tất cả các nút đều có quyền bình đẳng, các nút trong Hyperledger Fabric đóng các vai trò khác nhau:

  • Có thể ngang hàng đồng nghiệp ủng hộ (EP) và thực hiện hợp đồng thông minh.
  • Cam kết ngang hàng (CP) - chỉ lưu dữ liệu trong blockchain và cập nhật “Trạng thái thế giới”.
  • Neo ngang hàng (AP) - nếu một số tổ chức tham gia vào blockchain thì các tổ chức neo sẽ được sử dụng để liên lạc giữa chúng. Mỗi tổ chức phải có một hoặc nhiều đồng nghiệp neo. Sử dụng AP, bất kỳ đồng nghiệp nào trong một tổ chức đều có thể lấy thông tin về tất cả các đồng nghiệp trong các tổ chức khác. Được sử dụng để đồng bộ hóa thông tin giữa các AP giao thức tin đồn.
  • Lãnh đạo ngang hàng — nếu một tổ chức có nhiều đồng nghiệp thì chỉ người đứng đầu của đồng nghiệp mới nhận được các khối từ dịch vụ Đặt hàng và chuyển chúng cho những đồng nghiệp còn lại. Người lãnh đạo có thể được chỉ định tĩnh hoặc được lựa chọn động bởi các đồng nghiệp trong tổ chức. Giao thức tin đồn cũng được sử dụng để đồng bộ hóa thông tin về các nhà lãnh đạo.

Tài sản — các thực thể có giá trị và được lưu trữ trên blockchain. Cụ thể hơn, đây là dữ liệu khóa-giá trị ở định dạng JSON. Chính dữ liệu này được ghi lại trong Blockchain. Chúng có lịch sử được lưu trữ trong blockchain và trạng thái hiện tại được lưu trữ trong cơ sở dữ liệu “Trạng thái thế giới”. Cấu trúc dữ liệu được điền tùy ý tùy theo nhiệm vụ nghiệp vụ. Không có trường bắt buộc, khuyến nghị duy nhất là tài sản phải có chủ sở hữu và có giá trị.

Ledger — bao gồm cơ sở dữ liệu trạng thái Blockchain và Word, nơi lưu trữ trạng thái hiện tại của tài sản. Trạng thái thế giới sử dụng LevelDB hoặc CouchDB.

Hợp đồng thông minh — sử dụng hợp đồng thông minh, logic kinh doanh của hệ thống được triển khai. Trong Hyperledger Fabric, hợp đồng thông minh được gọi là chaincode. Sử dụng mã chuỗi, tài sản và giao dịch trên chúng được chỉ định. Về mặt kỹ thuật, hợp đồng thông minh là các mô-đun phần mềm được triển khai bằng ngôn ngữ lập trình JS hoặc Go.

Chính sách chứng thực — đối với mỗi mã chuỗi, bạn có thể đặt chính sách về số lượng xác nhận cho một giao dịch và từ ai. Nếu chính sách không được đặt thì mặc định là: “giao dịch phải được xác nhận bởi bất kỳ thành viên nào của bất kỳ tổ chức nào trong kênh”. Ví dụ về các chính sách:

  • Giao dịch phải được sự chấp thuận của bất kỳ quản trị viên nào của tổ chức;
  • Phải được xác nhận bởi bất kỳ thành viên hoặc khách hàng nào của tổ chức;
  • Phải được xác nhận bởi bất kỳ tổ chức ngang hàng nào.

Dịch vụ đặt hàng — gói các giao dịch thành các khối và gửi chúng đến các đồng nghiệp trong kênh. Đảm bảo gửi tin nhắn đến tất cả các đồng nghiệp trên mạng. Dùng cho hệ thống công nghiệp Nhà môi giới tin nhắn Kafka, để phát triển và thử nghiệm Máy xông hơi hồng ngoại Solo.

Luồng cuộc gọi

Blockchain: chúng ta nên xây dựng PoC nào?

  • Ứng dụng giao tiếp với Hyperledger Fabric bằng Go, Node.js hoặc Java SDK;
  • Khách hàng tạo một giao dịch tx và gửi nó đến các đồng nghiệp chứng thực;
  • Peer xác minh chữ ký của khách hàng, hoàn thành giao dịch và gửi lại chữ ký chứng thực cho khách hàng. Chaincode chỉ được thực thi trên thiết bị ngang hàng chứng thực và kết quả thực thi của nó sẽ được gửi đến tất cả các thiết bị ngang hàng. Thuật toán hoạt động này được gọi là sự đồng thuận PBFT (Thực tế Byzantine Fault Tolerant). Khác với BFT cổ điển thực tế là tin nhắn được gửi và xác nhận không phải từ tất cả những người tham gia mà chỉ từ một nhóm nhất định;
  • Sau khi khách hàng nhận được số lượng phản hồi tương ứng với chính sách chứng thực, khách hàng sẽ gửi giao dịch đến dịch vụ Đặt hàng;
  • Dịch vụ Đặt hàng tạo ra một khối và gửi nó đến tất cả các đồng nghiệp đã cam kết. Dịch vụ đặt hàng đảm bảo ghi lại tuần tự các khối, giúp loại bỏ cái gọi là phân nhánh sổ cái (xem phần "Nĩa");
  • Các đồng nghiệp nhận được một khối, kiểm tra lại chính sách chứng thực, ghi khối đó vào chuỗi khối và thay đổi trạng thái trong DB “Trạng thái thế giới”.

Những thứ kia. Điều này dẫn đến sự phân chia vai trò giữa các nút. Điều này đảm bảo blockchain có thể mở rộng và an toàn:

  • Hợp đồng thông minh (chaincode) thực hiện chứng thực ngang hàng. Điều này đảm bảo tính bảo mật của hợp đồng thông minh, bởi vì nó không được lưu trữ bởi tất cả những người tham gia mà chỉ được lưu trữ bởi những người ngang hàng xác nhận.
  • Đặt hàng nên làm việc nhanh chóng. Điều này được đảm bảo bởi thực tế là Đặt hàng chỉ tạo thành một khối và gửi nó đến một nhóm cố định các nhà lãnh đạo ngang hàng.
  • Các đồng nghiệp cam kết chỉ lưu trữ chuỗi khối - có thể có nhiều trong số chúng và chúng không yêu cầu nhiều năng lượng cũng như hoạt động tức thời.

Bạn có thể tìm thêm thông tin chi tiết về các giải pháp kiến ​​trúc của Hyperledger Fabric và lý do nó hoạt động theo cách này chứ không phải cách khác tại đây: Nguồn gốc kiến ​​trúc hoặc ở đây: Hyperledger Fabric: Hệ điều hành phân tán dành cho các chuỗi khối được cấp phép.

Vì vậy, Hyperledger Fabric là một hệ thống thực sự phổ biến mà bạn có thể:

  • Triển khai logic kinh doanh tùy ý bằng cơ chế hợp đồng thông minh;
  • Ghi và nhận dữ liệu từ cơ sở dữ liệu blockchain ở định dạng JSON;
  • Cấp và xác minh quyền truy cập API bằng Cơ quan cấp chứng chỉ.

Bây giờ chúng ta đã hiểu một chút về các chi tiết cụ thể của Hyperledger Fabric, cuối cùng chúng ta hãy làm điều gì đó hữu ích!

Triển khai chuỗi khối

Báo cáo sự cố

Nhiệm vụ là triển khai mạng Citcoin với các chức năng sau: tạo tài khoản, lấy số dư, nạp tiền vào tài khoản, chuyển coin từ tài khoản này sang tài khoản khác. Hãy vẽ một mô hình đối tượng mà chúng ta sẽ triển khai thêm trong hợp đồng thông minh. Vì vậy, chúng ta sẽ có các tài khoản được xác định theo tên và chứa số dư cũng như danh sách các tài khoản. Các tài khoản và danh sách tài khoản đều thuộc về tài sản Hyperledger Fabric. Theo đó, họ có một lịch sử và một trạng thái hiện tại. Tôi sẽ cố gắng trình bày rõ ràng điều này:

Blockchain: chúng ta nên xây dựng PoC nào?

Các số liệu trên cùng là trạng thái hiện tại, được lưu trữ trong cơ sở dữ liệu “Trạng thái thế giới”. Bên dưới chúng là các số liệu hiển thị lịch sử được lưu trữ trong blockchain. Trạng thái hiện tại của tài sản được thay đổi bởi các giao dịch. Tài sản chỉ thay đổi tổng thể, do đó, kết quả của giao dịch là một đối tượng mới được tạo ra và giá trị hiện tại của tài sản sẽ đi vào lịch sử.

Đám mây IBM

Chúng tôi tạo một tài khoản trong đám mây IBM. Để sử dụng nền tảng blockchain, nó phải được nâng cấp lên Pay-As-You-Go. Quá trình này có thể không nhanh chóng, bởi vì... IBM yêu cầu thông tin bổ sung và xác minh thông tin đó theo cách thủ công. Một lưu ý tích cực là tôi có thể nói rằng IBM có tài liệu đào tạo tốt cho phép bạn triển khai Hyperledger Fabric trên đám mây của họ. Tôi thích loạt bài viết và ví dụ sau đây:

Sau đây là ảnh chụp màn hình của nền tảng IBM Blockchain. Đây không phải là hướng dẫn về cách tạo blockchain mà chỉ đơn giản là minh họa phạm vi của nhiệm vụ. Vì vậy, vì mục đích của chúng tôi, chúng tôi tạo ra một Tổ chức:

Blockchain: chúng ta nên xây dựng PoC nào?

Chúng tôi tạo các nút trong đó: Orderer CA, Org1 CA, Orderer Peer:

Blockchain: chúng ta nên xây dựng PoC nào?

Chúng tôi tạo ra người dùng:

Blockchain: chúng ta nên xây dựng PoC nào?

Tạo một Kênh và gọi nó là citcoin:

Blockchain: chúng ta nên xây dựng PoC nào?

Về cơ bản Channel là một blockchain nên nó bắt đầu bằng khối XNUMX (khối Genesis):

Blockchain: chúng ta nên xây dựng PoC nào?

Viết hợp đồng thông minh

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

Theo trực giác, mọi thứ nên rõ ràng ở đây:

  • Có một số chức năng (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) mà chương trình demo sẽ gọi bằng API Hyperledger Fabric.
  • Các hàm SendFrom và RefillBalance tạo ra các Sự kiện mà chương trình demo sẽ nhận được.
  • Hàm khởi tạo được gọi một lần khi hợp đồng thông minh được khởi tạo. Trên thực tế, nó được gọi không chỉ một lần mà mỗi khi phiên bản hợp đồng thông minh thay đổi. Vì vậy, việc khởi tạo một danh sách với một mảng trống là một ý tưởng tồi, bởi vì Bây giờ, khi chúng tôi thay đổi phiên bản hợp đồng thông minh, chúng tôi sẽ mất danh sách hiện tại. Nhưng không sao đâu, tôi chỉ đang học thôi).
  • Tài khoản và danh sách tài khoản là cấu trúc dữ liệu JSON. JS được sử dụng để thao tác dữ liệu.
  • Bạn có thể nhận giá trị hiện tại của một nội dung bằng lệnh gọi hàm getState và cập nhật nó bằng putState.
  • Khi tạo Tài khoản, hàm AddAccount sẽ được gọi, trong đó việc so sánh được thực hiện với số lượng tài khoản tối đa trong chuỗi khối (maxAccounts = 5). Và ở đây có một sự xáo trộn (bạn có để ý không?), dẫn đến số lượng tài khoản tăng lên vô tận. Những sai lầm như vậy nên tránh)

Tiếp theo, chúng tôi tải hợp đồng thông minh vào Kênh và khởi tạo nó:

Blockchain: chúng ta nên xây dựng PoC nào?

Hãy xem giao dịch cài đặt Hợp đồng thông minh:

Blockchain: chúng ta nên xây dựng PoC nào?

Hãy cùng xem thông tin chi tiết về Kênh của chúng tôi:

Blockchain: chúng ta nên xây dựng PoC nào?

Kết quả là chúng ta có được sơ đồ sau về mạng blockchain trên đám mây của IBM. Sơ đồ cũng hiển thị một chương trình demo chạy trên đám mây Amazon trên máy chủ ảo (thông tin thêm về chương trình này trong phần tiếp theo):

Blockchain: chúng ta nên xây dựng PoC nào?

Tạo GUI cho lệnh gọi API Hyperledger Fabric

Hyperledger Fabric có API có thể được sử dụng để:

  • Tạo kênh;
  • Kết nối ngang hàng với kênh;
  • Cài đặt và khởi tạo hợp đồng thông minh trong kênh;
  • Gọi giao dịch;
  • Yêu cầu thông tin trên blockchain.

Phát triển ứng dụng

Trong chương trình demo của chúng tôi, chúng tôi sẽ chỉ sử dụng API để gọi các giao dịch và yêu cầu thông tin, bởi vì Chúng tôi đã hoàn thành các bước còn lại bằng cách sử dụng nền tảng chuỗi khối của IBM. Chúng tôi viết GUI bằng cách sử dụng ngăn xếp công nghệ tiêu chuẩn: Express.js + Vue.js + Node.js. Bạn có thể viết một bài riêng về cách bắt đầu tạo các ứng dụng web hiện đại. Sau đây tôi sẽ để lại link chuỗi bài giảng mà tôi thích nhất: Ứng dụng web đầy đủ sử dụng Vue.js & Express.js. Kết quả là một ứng dụng máy khách-máy chủ với giao diện đồ họa quen thuộc theo phong cách Thiết kế Vật liệu của Google. API REST giữa máy khách và máy chủ bao gồm một số lệnh gọi:

  • HyperledgerDemo/v1/init - khởi tạo chuỗi khối;
  • HyperledgerDemo/v1/accounts/list — lấy danh sách tất cả các tài khoản;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — tạo tài khoản Bob;
  • HyperledgerDemo/v1/info?account=Bob — lấy thông tin về tài khoản Bob;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - chuyển hai xu từ Bob sang Alice;
  • HyperledgerDemo/v1/disconnect - đóng kết nối với blockchain.

Mô tả API với các ví dụ có trong Trang web của người đưa thư - một chương trình nổi tiếng để thử nghiệm API HTTP.

Ứng dụng demo trên đám mây Amazon

Tôi đã tải ứng dụng lên Amazon vì... IBM vẫn chưa thể nâng cấp tài khoản của tôi và cho phép tôi tạo máy chủ ảo. Cách thêm quả anh đào vào miền: www.citcoin.info. Tôi sẽ để máy chủ bật một lúc rồi tắt nó đi, vì... xu cho thuê đang nhỏ giọt và đồng xu citcoin vẫn chưa được niêm yết trên sàn giao dịch chứng khoán) Tôi đính kèm ảnh chụp màn hình của bản demo trong bài viết để logic của công việc được rõ ràng. Ứng dụng demo có thể:

  • Khởi tạo chuỗi khối;
  • Tạo Tài khoản (nhưng bây giờ bạn không thể tạo Tài khoản mới vì đã đạt đến số lượng tài khoản tối đa được chỉ định trong hợp đồng thông minh trong blockchain);
  • Nhận danh sách Tài khoản;
  • Chuyển tiền citcoin giữa Alice, Bob và Alex;
  • Nhận sự kiện (nhưng hiện tại không có cách nào hiển thị sự kiện nên để đơn giản, giao diện ghi rằng sự kiện không được hỗ trợ);
  • Đăng nhập hành động.

Đầu tiên chúng ta khởi tạo blockchain:

Blockchain: chúng ta nên xây dựng PoC nào?

Tiếp theo, chúng ta tạo tài khoản, đừng lãng phí thời gian với số dư:

Blockchain: chúng ta nên xây dựng PoC nào?

Chúng tôi nhận được danh sách tất cả các tài khoản có sẵn:

Blockchain: chúng ta nên xây dựng PoC nào?

Chúng tôi chọn người gửi và người nhận và nhận số dư của họ. Nếu người gửi và người nhận giống nhau thì tài khoản của anh ta sẽ được bổ sung:

Blockchain: chúng ta nên xây dựng PoC nào?

Trong nhật ký, chúng tôi giám sát việc thực hiện các giao dịch:

Blockchain: chúng ta nên xây dựng PoC nào?

Trên thực tế, đó là tất cả với chương trình demo. Dưới đây bạn có thể thấy giao dịch của chúng tôi trong blockchain:

Blockchain: chúng ta nên xây dựng PoC nào?

Và danh sách chung các giao dịch:

Blockchain: chúng ta nên xây dựng PoC nào?

Với điều này, chúng tôi đã hoàn thành thành công việc triển khai PoC để tạo mạng Citcoin. Cần phải làm gì nữa để Citcoin trở thành một mạng lưới chuyển tiền chính thức? Rất ít:

  • Ở giai đoạn tạo tài khoản, hãy triển khai việc tạo khóa riêng/chung. Khóa riêng phải được lưu trữ cùng với người dùng tài khoản, khóa chung phải được lưu trữ trong blockchain.
  • Thực hiện chuyển tiền xu trong đó khóa công khai, thay vì tên, được sử dụng để nhận dạng người dùng.
  • Mã hóa các giao dịch đi từ người dùng đến máy chủ bằng khóa riêng của người đó.

Kết luận

Chúng tôi đã triển khai mạng Citcoin với các chức năng sau: thêm tài khoản, lấy số dư, nạp tiền vào tài khoản của bạn, chuyển xu từ tài khoản này sang tài khoản khác. Vậy chúng tôi đã tốn bao nhiêu tiền để xây dựng PoC?

  • Bạn cần nghiên cứu về blockchain nói chung và Hyperledger Fabric nói riêng;
  • Học cách sử dụng đám mây của IBM hoặc Amazon;
  • Tìm hiểu ngôn ngữ lập trình JS và một số framework web;
  • Nếu một số dữ liệu cần được lưu trữ không phải trong blockchain mà trong một cơ sở dữ liệu riêng biệt, thì hãy học cách tích hợp, chẳng hạn như với PostgreSQL;
  • Và cuối cùng nhưng không kém phần quan trọng - bạn không thể sống trong thế giới hiện đại mà không có kiến ​​thức về Linux!)

Tất nhiên, đó không phải là khoa học tên lửa nhưng bạn sẽ phải làm việc chăm chỉ!

Nguồn trên GitHub

Nguồn đưa vào GitHub. Mô tả ngắn gọn về kho lưu trữ:
Mục lục "máy chủ» — Máy chủ Node.js
Mục lục "khách hàng» — Máy khách Node.js
Mục lục "blockchain"(tất nhiên các giá trị tham số và khóa không hoạt động và chỉ được đưa ra làm ví dụ):

  • hợp đồng - mã nguồn hợp đồng thông minh
  • ví – khóa người dùng để sử dụng API Hyperledger Fabric.
  • *.cds - phiên bản biên dịch của hợp đồng thông minh
  • Tệp *.json - ví dụ về tệp cấu hình để sử dụng API Hyperledger Fabric

Nó chỉ là sự khởi đầu!

Nguồn: www.habr.com

Thêm một lời nhận xét