{"id":497,"date":"2018-06-25T02:37:39","date_gmt":"2018-06-25T02:37:39","guid":{"rendered":"http:\/\/www.asianux.org.vn\/?p=497"},"modified":"2018-06-25T02:37:39","modified_gmt":"2018-06-25T02:37:39","slug":"viet-web-ung-dung-giao-tiep-voi-hyperledger-composer","status":"publish","type":"post","link":"https:\/\/www.asianux.org.vn\/index.php\/2018\/06\/25\/viet-web-ung-dung-giao-tiep-voi-hyperledger-composer\/","title":{"rendered":"Vi\u1ebft Web \u1ee9ng d\u1ee5ng giao ti\u1ebfp v\u1edbi Hyperledger Composer"},"content":{"rendered":"<p>\u0110\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi m\u1ed9t\u00a0business network, c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 th\u1ec3 g\u1ecdi \u0111\u1ebfn c\u00e1c REST API. \u0110\u1ec3 t\u1ea1o m\u1ed9t API cho m\u1ed9t\u00a0business network, b\u1ea1n c\u00f3 th\u1ec3 d\u00f9ng c\u00e2u l\u1ec7nh:<\/p>\n<p><code>composer-rest-server<\/code><\/p>\n<p>\u0110\u1ec3 t\u1ea1o m\u1ed9t \u1ee9ng d\u1ee5ng\u00a0 Angular c\u00f3 th\u1ec3 giao ti\u1ebfp v\u1edbi REST API, \bta s\u1eed d\u1ee5ng l\u1ec7nh<\/p>\n<p><code>yo hyperledger-composer<\/code><\/p>\n<p>B\u1ea1n c\u00f3 th\u1ec3 tham kh\u1ea3o\u00a0\u00a0<a href=\"https:\/\/hyperledger.github.io\/composer\/latest\/tutorials\/developer-tutorial.html\" target=\"_blank\" rel=\"noopener\">Developer Tutorial<\/a>\u00a0\u0111\u1ec3 bi\u1ebft chi ti\u1ebft h\u01a1n v\u1ec1 c\u00e1ch s\u1eed d\u1ee5ng l\u1ec7nh\u00a0<code>composer-rest-server<\/code>\u00a0v\u00e0 c\u00e1c sinh ra m\u1ed9t \u1ee9ng d\u1ee5ng d\u00f9ng Angular.<\/p>\n<p>\u0110\u1ec3 sinh m\u1ed9t \u1ee9ng d\u1ee5ng Angular t\u1eeb m\u1ed9t\u00a0Business Network Archive (.BNA) ch\u00fang ta th\u1ef1c hi\u1ec7n theo c\u00e1c b\u01b0\u1edbc sau:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-498\" src=\"http:\/\/www.asianux.org.vn\/wp-content\/uploads\/2018\/06\/Screenshot-at-Jun-24-23-51-35.png\" alt=\"\" width=\"1546\" height=\"500\" title=\"\"><\/p>\n<h3 id=\"1-start-hyperledger-fabric-running-on-your-local-machine\">1. Kh\u1edfi \u0111\u1ed9ng Hyperledger Fabric tr\u00ean m\u00e1y t\u00ednh c\u00e1 nh\u00e2n c\u1ee7a b\u1ea1<\/h3>\n<p>N\u1ebfu b\u1ea1n \u0111\u00e3 ho\u00e0n th\u00e0nh vi\u1ec7c c\u00e0i \u0111\u1eb7t m\u00f4i tr\u01b0\u1eddng th\u00ec Fabric \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u00ean m\u00e1y t\u00ednh c\u1ee7a b\u1ea1n. B\u1ea1n ch\u1ec9 c\u1ea7n chuy\u1ec3n \u0111\u1ebfn th\u01b0 m\u1ee5c\u00a0<code>fabric-dev-servers<\/code>\u00a0v\u00e0 kh\u1edfi \u0111\u1ed9ng Hyperledger Fabric. Ch\u00fang ta th\u1ef1c hi\u1ec7n c\u00e1c c\u00e2u l\u1ec7nh sau:<\/p>\n<div class=\"highlight\">\n<pre id=\"hl_code0\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"nb\">cd<\/span> ~\/fabric-dev-servers\r\n.\/startFabric.sh\r\n.\/createPeerAdminCard.sh\r\n<\/code><\/pre>\n<\/div>\n<p>C\u00e2u l\u1ec7n cu\u1ed1i s\u1ebd t\u1ea1o m\u1ed9t\u00a0<code>PeerAdmin<\/code>\u00a0.card\u00a0 n\u01a1i m\u00e0 s\u1ebd c\u1ea7n thi\u1ebft \u0111\u1ec3 thay \u0111\u1ed5i m\u00e3 ngu\u1ed3n ch\u1ea1y tr\u00ean m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n. \u0110\u1ec3 th\u1ed1ng ke c\u00e1c card \u0111ang d\u00f9ng ch\u00fang ta s\u1ebd c\u00f3 th\u1ec3 d\u00f9ng l\u1ec7nh:<\/p>\n<div class=\"highlight\">\n<pre id=\"hl_code1\"><code class=\"language-bash\" data-lang=\"bash\">composer card list\r\n<\/code><\/pre>\n<\/div>\n<h3 id=\"2-prepare-the-hyperledger-fabric-peers\">2. Chu\u1ea9n b\u1ecb Hyperledger Fabric peers<\/h3>\n<p>Ch\u00fang ta s\u1ebd t\u1ea1o m\u1ed9t d\u1ef1 \u00e1n c\u00f3 t\u00ean l\u00e0\u00a0<code>tutorial-network<\/code>\u00a0s\u1ebd xu\u1ea5t hi\u1ec7n m\u1ed9t &#8216;PeerAdmin&#8217; card cho b\u1ea1n..<\/p>\n<div class=\"highlight\">\n<pre id=\"hl_code2\"><code class=\"language-\" data-lang=\"\">composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna\r\n<\/code><\/pre>\n<\/div>\n<h3 id=\"3-start-your-business-network-on-your-hyperledger-fabric\">3. Kh\u1edfi \u0111\u1ed9ng Business Network tr\u00ean Hyperledger Fabric<\/h3>\n<p>\u0110\u1ec3 kh\u1edfi \u0111\u1ed9ng\u00a0<code>tutorial-network<\/code>\u00a0BNA ch\u00fang ta d\u00f9ng l\u1ec7nh<\/p>\n<div class=\"highlight\">\n<pre id=\"hl_code3\"><code class=\"language-bash\" data-lang=\"bash\">composer network start <span class=\"nt\">--networkName<\/span> tutorial-network <span class=\"nt\">--networkVersion<\/span> 0.0.1 <span class=\"nt\">--networkAdmin<\/span> admin <span class=\"nt\">--networkAdminEnrollSecret<\/span> adminpw <span class=\"nt\">--card<\/span> PeerAdmin@hlfv1\r\n<\/code><\/pre>\n<\/div>\n<p>C\u00e2u l\u1ec7nh tr\u00ean s\u1ebd t\u1ea1o m\u1ed9t t\u1eadp tin c\u00f3 t\u00ean\u00a0<code>admin@tutorial-network.card<\/code><\/p>\n<p><em>B\u1ea1n n\u00ean ghi nh\u1edb t\u00e0i kho\u1ea3n\u00a0<code>admin<\/code>\u00a0v\u00e0 m\u1eadt kh\u1ea9u\u00a0<code>adminpw<\/code>\u00a0<\/em><\/p>\n<h3 id=\"4-install-the-admin-card-ready-for-use\">4.Cu\u1ed1i c\u00f9ng b\u1ea1n s\u1ebd s\u1eed d\u1ee5ng &#8216;admin&#8217; card<\/h3>\n<p>Ch\u00fang ta s\u1ebd s\u1eed d\u1ee5ng c\u00e2u l\u1ec7nh:<\/p>\n<div class=\"highlight\">\n<pre id=\"hl_code4\"><code class=\"language-bash\" data-lang=\"bash\">composer card import <span class=\"nt\">--file<\/span> admin@tutorial-network.card\r\n<\/code><\/pre>\n<\/div>\n<h3 id=\"5-start-the-rest-server-generate-the-swagger-api-documentation\">5. Kh\u1edfi \u0111\u1ed9ng REST server<\/h3>\n<p>B\u1ea1n ch\u1ec9 c\u1ea7n ch\u1ea1y c\u00e2u l\u1ec7nh sau \u0111\u1ec3 kh\u1edfi \u0111\u1ed9ng API, sau khi ch\u1ea1y xong b\u1ea1n c\u1ea7n khai b\u00e1o c\u00e1c th\u00f4ng s\u1ed1<\/p>\n<p><span style=\"background-color: #f2f4f5; color: #222222; font-family: Consolas, Monaco, monospace;\">composer-rest-server<\/span><\/p>\n<ul>\n<li>B\u1ea1n c\u1ea7n khai b\u00e1o cardname trong v\u00ed d\u1ee5 n\u00e0y l\u00e0 admin@tutorial-network<\/li>\n<li>B\u1ea1n \u0111i\u1ec1n namespaces<\/li>\n<li>Ch\u1ecdn No<\/li>\n<li>Ch\u1ecdn Yes<\/li>\n<li>Ch\u1ecdn No<\/li>\n<\/ul>\n<p>Sau \u0111\u00f3 b\u1ea1n s\u1ebd truy c\u1eadp API qua URL:\u00a0\u00a0<a href=\"http:\/\/localhost:3000\/explorer\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:3000\/explorer<\/a><\/p>\n<h3 id=\"6-generate-the-angular-application\">6. Generate \u1ee9ng d\u1ee5ng Angular<\/h3>\n<p>B\u1ea1n ch\u1ea1y l\u1ec7nh sau<\/p>\n<div class=\"highlight\">\n<pre id=\"hl_code6\"><code class=\"language-bash\" data-lang=\"bash\">yo hyperledger-composer\r\n<\/code><\/pre>\n<\/div>\n<p>B\u1ea1n \u0111i\u1ec1n c\u00e1c th\u00f4ng s\u1ed1 sau<\/p>\n<div class=\"highlight\">\n<pre id=\"hl_code7\"><code class=\"language-\" data-lang=\"\">Welcome to the Hyperledger Composer project generator\r\n? Please select the type of project: Angular\r\nYou can run this generator using: 'yo hyperledger-composer:angular'\r\nWelcome to the Hyperledger Composer Angular project generator\r\n? Do you want to connect to a running Business Network? Yes\r\n? Project name: [insert]\r\n? Description: Hyperledger Composer Angular project\r\n? Author name: [insert]\r\n? Author email: [insert]\r\n? License: Apache-2.0\r\n? Name of the Business Network card: admin@tutorial-network\r\n? Do you want to generate a new REST API or connect to an existing REST API?  Connect to an existing REST\r\n API\r\n? REST server address: http:\/\/localhost\r\n? REST server port: 3000\r\n? Should namespaces be used in the generated REST API? Namespaces are not used\r\nCreated application!\r\n<\/code><\/pre>\n<\/div>\n<p>Cu\u1ed1i c\u00f9ng b\u1ea1n chuy\u1ec3n \u0111\u1ebfn th\u01b0 m\u1ee5c \u1ee9ng d\u1ee5ng v\u1eeba t\u1ea1o ra v\u00e0 g\u00f5 l\u1ec7nh<\/p>\n<div class=\"highlight\">\n<pre id=\"hl_code8\"><code class=\"language-bash\" data-lang=\"bash\">npm start\r\n<\/code><\/pre>\n<\/div>\n<p>B\u1ea1n s\u1ebd truy c\u00e2p link\u00a0<a href=\"http:\/\/localhost:4200\/\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:4200<\/a><\/p>\n<p>Giao di\u1ec7n s\u1ebd nh\u01b0 sau:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-501\" src=\"http:\/\/www.asianux.org.vn\/wp-content\/uploads\/2018\/06\/Screenshot_13.png\" alt=\"\" width=\"933\" height=\"542\" title=\"\"><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0110\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi m\u1ed9t\u00a0business network, c\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 th\u1ec3 g\u1ecdi \u0111\u1ebfn c\u00e1c REST API. \u0110\u1ec3 t\u1ea1o m\u1ed9t API cho m\u1ed9t\u00a0business network, b\u1ea1n c\u00f3 th\u1ec3 d\u00f9ng c\u00e2u l\u1ec7nh: composer-rest-server \u0110\u1ec3 t\u1ea1o m\u1ed9t \u1ee9ng d\u1ee5ng\u00a0&hellip;<\/p>\n","protected":false},"author":1,"featured_media":463,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-497","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blockchain"],"_links":{"self":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/comments?post=497"}],"version-history":[{"count":3,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/497\/revisions"}],"predecessor-version":[{"id":502,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/posts\/497\/revisions\/502"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/media\/463"}],"wp:attachment":[{"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/media?parent=497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/categories?post=497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.asianux.org.vn\/index.php\/wp-json\/wp\/v2\/tags?post=497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}