Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Ethereum - Amazing blockchain platform

Bản quyền thuộc về Fsoft Potato Tech Mag

Blockchain, công nghệ đằng sau đồng tiền ảo Bitcoin, đang trở thành một xu hướng mới trong cuộc cách mạng công nghệ. Đã có rất nhiều framework blockchain ra đời để giúp cho developer có thể phát triển phần mềm trên nền tảng blockchain một cách dễ dàng. Platform IBM hyperledger được phát triển bởi IBM, Ripple, platform hỗ trợ cho việc chuyển tiền toàn cầu, Multichain open platform cho ứng dụng blockchain.
Bài viết này muốn giới thiệu đến các bạn một platform blockchain mới, rất nổi tiếng đó là Ethereum, kiến trúc, cách develop và deploy một ứng dụng trên Ethereum blockchain.
Image result for ethereum

Ethereum là gì?

Ethereum (ETH) là một loại cryptocurrency mới tương tự như Bitcoin. Nhưng Ethereum không đơn thuần chỉ là một loại tiền tệ. Ethereum là một nền tảng điện toán có tính chất phân tán, công cộng, mã nguồn mở dựa trên công nghệ Blockchain.
Được đề xuất vào năm 2013 bởi Vitalik Buterin, một lập trình viên Bitcoin, với ý tưởng khắc phục những nhược điểm của Bitcoin như thời gian xác nhận chậm, sau đó được tài trợ bởi một tổ chức phi lợi nhuận tại Thụy Sĩ tên là Ethereum Foundation. Hệ thông chính thức khởi động vào năm 30/7/2015 với hơn 11.9 triệu đồng either (một đồng tiền mới tương tự bitcoun) được đào sẵn

Nguyên tắc hoạt động ra sao ?

Ethereum là một decentralized platform chạỵ các hợp đồng thông minh (smart contract). Bình thường, khi ký một hợp đồng để trao đổi giá trị kinh tế, chúng ta cần một bên thứ 3 có trách nhiệm hòa giải (ví dụ: Nhà môi giới, Tòa án, Sở đất đai…). Hợp đồng thông minh là một cơ chế trao đổi xác định, được kiểm soát bởi các phương tiện kỹ thuật số mà có thể giúp cho việc thực hiện giao dịch trực tiếp giữa các thực thể mà không cần tin cậy nhau.
Smart contract trong ethereum là một chương trình thực thi các business logic, không bị kiểm duyệt hay can thiệp từ bên trung gian, viết bằng ngôn ngữ solidity (một ngôn ngữ có cú pháp gần giống Javascript). Smart contract được dịch ra bytecode format và được lưu trên Ethereum Virtual Machine (EVM). Một máy ảo có thể thực thi các kịch bản bằng sử dụng mạng máy tính Ethereum
Trong mạng ethereum, có các nodes liên kết với nhau tạo thành một mạng ngang hàng. Các nodes lưu trữ một bản copy của blockchain, các node này là các Ethereum client chạy các smart contract trên EVM.

Buld Ethereum blockchain steps by steps

Phần này sẽ hướng dẫn cách

  • Build một mạng Ethereum blockchain đơn giản trên local PC và trên cloud 
  • Lập trình một smartcontract bằng solidity và deployed lên mạng blockchain,
  • Phát triển một Daap để communicate với Ethereum client bằng JSON RPC

Môi trường phát triển là Ubuntu 16.04, công cụ phát triển là visual studio code, Node.js (>= v6.9.1), ngôn ngữ lập trình Javascript, solidity

Steps 1) Build Ethereum blockchain

Bạn có thể tự build ethereum blockchain trên máy local PC hoặc đăng kí sử dụng dịch vụ Azure Ethereum blockchain trên cloud
1.1 Build trên local PC
Ethereum cung cấp công cụ testrpc, một Node.js based Ethereum client để testing và develop ethereum.
Sử dụng npm để cài đặt testrpc
npm install -g ethereumjs-testrpc
Sau khi install xong, chạy testrpc trên terminal
Testrpc sẽ tạo ra một mạng private ethereum blockchain và listening ở port 8545

1.2 Build trên Azure cloud

Microsoft Azure cung cấp dịch vụ Ethereum Blokchain cho phép bạn có thể deploy một mạng private blockchain ethereum trên cloud
Bạn cần đăng kí một account trên Azure, Microsoft cho phép free trial trong vòng một năm, nên không lo tốn phí dịch vụ
Trên Azure dashboard, create new Ethereum Consortium Blokchain
Nhập các thông tin cần thiết cho Azure blockchain bao gồm

  • Basic settings: Ethereum Virtual Machine user name, password
  • Network size and performance
  • Ethereum Setting: configure số lượng node cần thiết



Sau khi thực hiện xong các bước trên, Azure sẽ tiến hành deploy một ethereum blockchain, virtual machine. Quá trình deploy mất khoảng 5 – 10 phút, sau đó sẽ được thông tin như hình dưới
2 thông tin quan trọng cần quan tâm là

  • Ethereum-RPC-Endpoint: Các Daap cần sử dụng endpoint này để tương tác với Ethereum blockchain
  • Admin-site: Trang admin để xem trạng thái của mạng ethereum blockchain
  • SSH-to-first-tx-node: Địa chỉ SSH để truy cập vào Ethereum virtual manchine

Step 2) Connect tới Ethereum blockchain

Sau khi deploy xong một mạng ethereum blockchain, bạn có thể sử dụng một chrome extension là Metamask để connect vào mạng blockchain.
Với metamask bạn có thể tạo ra các account, connect vào các mạng blockchain khác nhau bao gồm public blockchain và private blockchain, gửi nhận eth đến các accounts.


Open metamask, chọn danh sách các mạng blockchain bao gồm cả public network và private network
  • Localhost:8545 mạng local ethereum trên máy PC
  • Main Ethereum Network, Ropsten Test Network, : Một số public ethereum blockchain network
  • Custom RPC: Nhập địa chỉ Azure RPC endpoint ở step 1 để connect tới Azure blockchain

Step 3) Truy cập vào Ethereum Virtual Machine

Trên Linux terminal, bạn có thể truy cập vào Ethereum Virtual Machine bằng SSH. SSH (viết tắt của từ Secure Socket Shell) là một giao thức mạng được sử dụng để đăng nhập vào một máy tính từ xa)
Gõ command sau trên linux terminal

gethadmin@ether5fwzthn.eastus.cloudapp.azure.com địa chỉ của Azure Ethereum Virtual Machine bạn đã tạo ở step 1, Azure sẽ yêu cầu nhập password để truy cập
Nếu connect thành công, sẽ thấy như hình dưới
Bạn đã truy cập được vào máy ảo Ethereum trên blockchain, vào có thể sử dụng command line để thao tác trên máy chủ này
Ethereum cung cập một command line là geth để làm việc với ethereum blockchain ví dụ như

  • Thực hiện chuyển tiền ether giữa các account
  • Tạo các contract và gửi các transaction
  • Explore lịch sử các khối block trong blockchain 
  • Tạo account mới, lock và unlock các account
Và rất nhiều thứ khác nữa
Tại EVM terminal, gõ command sau

geth attach
Bạn sẽ truy cập vào Geth JavaScript console. Đây là một javascript runtime environment cung cấp đẩy đủ API cho phép bạn viết những code javascript để tương tác với Ethereum blockchain
Dưới đây là một số script đơn giản
Xem danh sách account có trong ethereum blockchain
personal.listAccounts
Hiển thị danh sách các public address của các account. Public address là một chuỗi string để định danh các account trong blockchain, tương tự như username
Tạo một account mới
personal.newAccount('test')
Ethereum sẽ tạo ra một account với public address trên blockchain như hình dưới,
Tham số ‘test’ ở trên gọi là passphrase. Đó 1 chuỗi kí tự được dùng để mã hóa thông tin. Thay vì nhập username, password như thông thường, ethereum sử dụng passphrase để thay thế
Theo mặc định các account mới được tạo ra sẽ ở trong trạng thái lock, bạn cần unlock những account này thì mới thực hiện giao dịch được
personal.unlockAccount('0x5605f53d689626c23e5b3ce625b1b6fbcf402d64')
Ethereum sẽ hỏi passphrase. nhập ‘test’, kết quả trả về true là thành công.

Step 4) Chuyển tiền ether giữa các account trên Ethereum

Truy cập vào admin site của ethereum trên Azure blockchain, bạn sẽ thấy được các thông tin về mạng ethereum blockchain đã deploy trên Azure


Trên Metask mask, sau khi kết nối tới Azure blockchain, bạn có thể tạo một account và lấy public address bằng cách dưới


Nhập address này vào trang admin để thực hiện chuyển 1000 Ether từ một account mặc định trên Azure ethereum blockchain đến account bạn vừa tạo ở Metamask
Giao dịch sẽ mất khoảng vài giây để hoàn thành, bạn sẽ thấy account giaosucan được cập nhật lượng ether mới
Trên Javascript console của Ethereum, dùng script sau đó check balance của account
eth.getBalance("0x72f8ceeeba0f091fe811151487654f08cab75666")
0x72f8ceeeba0f091fe811151487654f08cab75666 là account đã chuyển 1000 ether đến account giaosucan trên metamask.
Balance của account đã được update
Trên đây là một số hướng dẫn cơ bản cách build và deploy một ethereum blockchain trên local và cloud, một số những Javascript đơn giản để thực hiện giao dịch trên Ethereum blockchain. Bài tiếp theo sẽ hướng dẫn các bạn các bước để phát triển một ứng dụng phân tán trên blockchain.

Đăng nhận xét

0 Nhận xét