Báo cáo đồ án môn học Thương mại điện tử đề tài Blockchain và lập trình Solidity (tham khảo) * Nội dung báo cáo: - Chương 1: Tổng quan về công nghệ Blockchain - Chương 2: Tính chất, hệ sinh thái Blockchain, giải thuật của Blockchain, tiền mã hóa (Cryptocurrency), hợp đồng thông minh (Smart Contract) và Ethereum - Chương 3: Metamask và lập trình Solidity, sử dụng Remix trong lập trình Solidity - Chương 4: Phân công công việc - Chương 5: Tài liệu tham khảo Lưu ý: Tài liệu mang tính chất tham khảo, vui lòng không sao chép hoặc copy
ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN BÁO CÁO ĐỒ ÁN MÔN HỌC: THƯƠNG MẠI ĐIỆN TỬ MÃ LỚP: IS334.L21.TMCL TÊN THÀNH VIÊN NHÓM NGUYỄN HỮU THẮNG - 19522209 TRẦN DƯƠNG THÙY NGÂN - 19521889 NGUYỄN QUANG THÁI - 19522190 GIẢNG VIÊN HƯỚNG DẪN THS.ĐỖ DUY THANH ĐỂ TÀI: CƠNG NGHỆ BLOCKCHAIN – LẬP TRÌNH SOLIDITY Mục lục NHẬN XÉT CỦA GIÁO VIÊN CHƯƠNG 1: TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN .5 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN 1.1 Giới thiệu sơ lược công nghệ Blockchain 1.2 Lich sử công nghệ Blockchain 1.3 Kiến trúc Blockchain 1.4 Công nghệ Blockchain hoạt động nào? .13 1.5 Ứng dụng Blockchain đời sống 14 PHIÊN BẢN BLOCKCHAIN .19 CÁC LOẠI BLOCKCHAIN 20 THUẬT NGỮ BLOCKCHAIN .21 CHƯƠNG 2: TÍNH CHẤT, HỆ SINH THÁI BLOCKCHAIN, GIẢI THUẬT CỦA BLOCKCHAIN, TIỀN MÃ HÓA, SMART CONTRACT VÀ ETHEREUM 28 ĐẶC ĐIỂM CỦA BLOCKCHAIN .28 HỆ SINH THÁI BLOCKCHAIN 34 CƠ CHẾ MÃ HÓA BLOCKCHAIN 46 3.1 Cryptography .46 3.2 Hằm băm tầm quan trọng 47 3.3 Merkle Tree and Merkle Root 49 GIAO THỨC ĐỒNG THUẬN BLOCKCHAIN 52 TIỀN MÃ HÓA (CRYPTOCURRENCY), SMART CONTRACT 53 5.1 Tiền mã hóa (Cryptocurrency) 53 5.1 Hợp đồng thông minh (Smart Contract) 54 ETHEREUM VÀ HỆ SINH THÁI ETHEREUM 56 6.1 Ethereum network .58 6.2 Ethereum node client 58 6.3 Solidity 60 6.4 Swarm & IPFS 61 6.5 ENS 61 NFTs TRONG ETHEREUM 61 CHƯƠNG 3: METAMASK VÀ LẬP TRÌNH SOLIDITY, SỬ DỤNG REMIX LẬP TRÌNH SOLIDITY 63 METAMASK 63 TRÌNH SOẠN THẢO REMIX 68 LẬP TRÌNH SOLIDITY 70 Trang | Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ 2.1 Solidity gì? 70 2.2 Kiểu liệu 71 2.3 Contract 74 2.4 Phương thức 74 2.5 Thuộc tính 77 2.6 Các công cụ mà Solidity cung cấp .78 2.7 Các trường hợp sử dụng Solidity 78 VIẾT THỬ CHƯƠNG TRÌNH BẰNG SOLIDITY 79 3.1 Smart Contract cho HelloWorld 79 3.2 Viết thử chương trình quản lý khách hàng đưa lên mạng Ethereum 83 CHƯƠNG 4: PHÂN CÔNG CÔNG VIỆC 90 CHƯƠNG 5: TÀI LIỆU THAM KHẢO .91 NHẬN XÉT CỦA GIÁO VIÊN Trang | Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… ……………………………………………………………………………………………………………………… …………………………………… Trang | Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ CHƯƠNG 1: TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN TỔNG QUAN VỀ CÔNG NGHỆ BLOCKCHAIN 1.1 Giới thiệu sơ lược công nghệ Blockchain Hình 1.1 Chuyển tiền hệ thống ngân hàng Giả sử, ta gửi tiền vào ngân hàng thảm họa xảy tất sổ sách ngân hàng bị cháy rụi, máy chủ lưu thông tin ngân hàng bị đánh sập Và điều hiển nhiên chẳng biết ta gửi tiền vào ngân hàng số tiền ta gửi bị hồn tồn “Tại khơng tạo nhiều máy chủ, không lưu thông tin nhiều nơi nhiều bản?” Điều tốn kém, giấy khơng khả thi hàng ngày có hàng trăm hàng ngàn khách hàng đến ngân hàng để thực việc giao dịch Trang | Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ Vì vậy, cơng nghệ Blockchain đời nhằm khắc phục nhược điểm Đơn giản việc lưu thông tin file lại phân bổ cho tất máy tính có kết nối với Thơng tin lưu trữ cách minh bạch, bảo mật an tồn mà khơng lo bị Thế Blockchain? Hình 1.2 Mơ hình cơng nghệ Blockchain - Blockchain nghe phức tạp trừu tượng khái niệm cốt lõi thật đơn giản Blockchain loại sở liệu - Cơ sở liệu hệ thống liệu có cấu trúc, lưu trữ thiết bị lưu trữ nhằm thỏa mãn yêu cầu khai thác thông tin đồng thời nhiều người sử dụng hay nhiều chương trình ứng dụng với mục đích khác - Tuy nhiên, Blockchain khác với sở liệu điển hình cách lưu trữ thơng tin Trang | Đồ án Thương mại điện tử Duy Thanh - Giảng viên hướng dẫn: ThS Đỗ Blockchain số kế tốn cơng cộng Trong đó, thơng tin lưu trữ truyền tải cách minh bạch, tồn vẹn, khơng thể thay đổi hay gian lận Đây công nghệ mới, giúp cải thiện nhiều mặt hạn chế cách lưu trữ trao đổi thông tin truyền thống CHAIN CHAIN BLOCK BLOCK BLOCK Hình 1.3 Blockchain - Hiểu mặt kỹ thuật thì: ▪ Block: khối (có hình vng hình chữ nhật) ▪ Chain: chuỗi ▪ Blockchain: chuỗi khối (có hình vng hình chữ nhật) liên kết với tạo thành hệ thống chuỗi lớn 1.2 Lich sử công nghệ Blockchain 1991 – 2008: Những năm đầu công nghệ Blockchain[ CITATION htt \l 1066 ] - Vào năm 1991 Stuart Haber W Scott Stornetta hình dung thứ mà nhiều người biết đến blockchain Công việc họ liên quan đến việc nghiên cứu chuỗi khối bảo mật mật mã, theo khơng giả mạo dấu thời gian tài liệu Trang | Đồ án Thương mại điện tử Duy Thanh - Giảng viên hướng dẫn: ThS Đỗ Vào năm 1992, họ nâng cấp hệ thống để kết hợp Merkle nhằm nâng cao hiệu cho phép thu thập nhiều tài liệu khối Tuy nhiên, đến năm 2008, Lịch sử Blockchain bắt đầu có liên quan, nhờ vào cơng việc người nhóm có tên Satoshi Nakamoto - Satoshi Nakamoto công nhận não đằng sau cơng nghệ blockchain Rất thơng tin Nakamoto người tin ơng người nhóm người làm việc Bitcoin, ứng dụng công nghệ sổ kỹ thuật số - Vào năm 2008, Nakamoto hình thành ý tưởng blockchain đầu tiên, từ cơng nghệ phát triển tìm thấy đường vào nhiều ứng dụng tiền điện tử Vào năm 2009, Satoshi Nakamoto phát hành whitepaper công nghệ Trong whitepaper, ông cung cấp chi tiết cách công nghệ trang bị tốt để nâng cao niềm tin kỹ thuật số dựa khía cạnh phân quyền có nghĩa khơng kiểm sốt điều 1.3 Kiến trúc Blockchain Một khối block lưu trữ gồm phần: - Thành phần liệu (Data): liệu tùy thuộc vào loại blockchain Chẳng hạn Blockchain Bitcoin chứa giao dịch - Thành phần mã hóa (Hash): Hash khối đặc điểm để nhận dạng Nó khơng trùng giống vân tay - Thành phần mã hóa node trước (Hash of previous block): block kết nối với thông qua mã hash khối block trước tạo thành chuỗi hệ thống gọi Blockchain Trang | Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ Hình 1.4 Các block liên kết với thông qua mã Hash khối block trước Chuỗi liên kết: - Một chuỗi, hay danh sách liên kết, tạo đơn vị liệu đồng thời lưu trữ giá trị Hash đơn vị liệu trước Chỉ cần có thay đổi liệu trước đó, giá trị hash bị thay đổi mối liên kết bị phá vỡ Một cấu trúc phù hợp cho việc lưu trữ liên kết khối liệu không xuất đồng thời mà xảy thời điểm Hình 1.5 Chuỗi liên kết liệu - Trên hình 1.5, mã Hash R3 dùng để truy xuất ngược lại toàn liệu chuỗi đến giá trị R3 gọi đỉnh chuỗi Trang | Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ Cấu trúc block: Ví dụ ta có block sau: Hình 1.6 Cấu trúc block số 8779340 - BLOCK HEIGHT 8779340 số thứ tự block ( cho biết chiều dài blockchain ) Trang | 10 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ Fallback function Mỗi contract có phương thức khơng có tên (gọi fallback-function) Phương thức khơng có tham số (tuy nhiên sử dụng msg.data để lấy liệu truyền theo lời gọi), khơng có giá trị trả Phương thức gọi khơng có phương thức contract khớp với lời gọi contract Sink { // fallback function function() public payable { // executable code here } } 2.5 Thuộc tính Khác với phương thức, thuộc tính contract có mức visibility (mặc định internal): public: contract khác truy cập thuộc tính public thơng qua getter function Ex: Đối với mapping: contract Complex { mapping (uint => address) public data; Trang | 83 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ } getter function tương ứng: function data(uint key) public returns (address) private, internal: tương tự visibility phương thức Data location: memory/storage/calldata Trong EVM, có dạng lưu trữ: memory (lưu trữ không bền lâu), storage (lưu trữ bền vững), calldata (lưu trữ không bên vững, áp dụng để lưu trữ tham số phương thức external) Forced data location: o Tham số phương thức external: calldata o Thuộc tính: storage Default data location: o Thuộc tính giá trị trả phương thức: memory o Biến cục bộ: storage Đối với kiểu liệu phức tạp (struct, array), phép gán vùng lưu trữ memory storage (giữa tham số thuộc tính) ln tạo chép độc lập Phép gán vào biến cục phép gán trỏ, trỏ vào thuộc tính contract Hiểu chế để kiểm soát việc gán chép liệu phức tạp (do chi phí cấp phát chép liệu cao) để kiểm soát gas cần cho transaction 2.6 Các công cụ mà Solidity cung cấp Trang | 84 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ Các công cụ mà nhà lập trình viên Solidity sử dụng để xây dựng contract thơng minh dựa Solidity là: Solgraph: Nó sử dụng để tạo đồ thị DOT hiển thị luồng điều khiển chức contracts Solidity nêu lỗ hổng bảo mật Solidity REPL: Solidity REPL sử dụng để viết mã dòng lệnh Solidity Console EVM Lab: Đây gói cơng cụ phong phú kèm với khả tương tác với Máy ảo Ethereum (EVM) Nó bao gồm API Etherchain, trình xem theo dõi máy ảo Evmdis: Evmdis viết tắt EVM Disassembler thực phân tích tĩnh bytecode để cung cấp mức độ trừu tượng cao so với hoạt động EVM thô 2.7 Các trường hợp sử dụng Solidity Solidity sử dụng phổ biến trường hợp cụ thể sau đây: • Voting - Biểu Hiện tại, bỏ phiếu giải nhiều vấn đề bao gồm thao túng liệu, cử tri giả mạo, thay đổi máy bỏ phiếu chụp gian hàng Liên hệ thơng minh Solidity tạo triển khai để làm cho trình bỏ phiếu trở nên minh bạch hợp lý • Blind Auctions - Đấu giá mù Trong đấu giá mở, cá nhân xem giá thầu nhau, dẫn đến tranh chấp gian lận Bằng cách sử dụng contracts thông minh Solidity, phiên đấu giá mù thiết kế người dùng khơng thể thấy đặt giá thầu kết thúc • Crowdfunding - Huy động vốn từ cộng đồng Huy động vốn cộng đồng thực thông qua smart contracts giải vấn đề hoa hồng bên thứ ba quản lý liệu Contracts thông minh vững để huy động vốn từ cộng đồng không yêu cầu hệ thống tập trung để xây dựng lịng tin, giảm chi phí Trang | 85 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ bổ sung VIẾT THỬ CHƯƠNG TRÌNH BẰNG SOLIDITY 3.1 Smart Contract cho HelloWorld • Viết chương trình: Tạo file có tên HelloWorld.sol song song file 3_Ballot.sol.Ss pragma solidity ^0.4.23; contract HelloWorld { string private message; function contructor(string mes) public { message = mes; } function setMessage(string mes) public { message = mes; } function getMessage() view public returns(string) { return message; } } Giải thích cho code trên: - Dịng (pragma solidity >=0.4.22 < 0.7.0) định nghĩa phiên Solidity - muốn sử dụng phiên thấp phiên cao Tiếp theo khai báo tên contract HelloWorld Định nghĩa biến biến message string private (string private message) Khai báo hàm thứ với từ khóa contructor với tham số gán giá trị cho biến - message Tiếp theo hàm setMessage getMessage với chức tương ứng gán giá trị lấy giá trị cho biến message Ngồi cịn từ khóa returns để định nghĩa kiểu trả hàm Trang | 86 Đồ án Thương mại điện tử Duy Thanh • Giảng viên hướng dẫn: ThS Đỗ Biên dịch chương trình: để biên dịch code, ta chọn vào tab chứa icon Solidity, nhấn Compile HelloWorld.sol Nếu biên dịch xuất tích xanh tích vào Auto Compile để khơng phải compile lại sửa code Hình 3.4 Màn hình hiển thị Compiler Deploy lên Remix: Để deploy, sau compile thành công, chọn tab Deploy Tại ENVIRONMENT chọn JavaScript VM (Đây môi trường máy ảo dùng để chạy thử chương trình), phần account bên có tài khoản chứa 100 Ether Ether đơn vị tiền kỹ thuật số mạng lưới Ethereum Trang | 87 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ Thực tế muốn triển khai mạng lưới phải mua lượng ether Hiểu cách đon giản phí để máy ảo chạy đoạn code bạn muốn deploy Hình 3.5 Màn hình hiển thị Deploy Ether: - Ether đơn vị tiền kỹ thuật số mạng lưới Ethereum Thực tế để triển khai mạng lưới - phải mua lượng Ether Giao dịch máy ảo thực máy ảo có tên Ethereum Virtual Machine (EVM) Do đó, để sử dụng phải trả lượng nhiên liệu để chạy máy ảo Lượng nhiên liệu gọi gas Hiểu gas lượng Ether bạn phải trả Gas Limit: - Gas Limit lượng Ether tối đa để sẵn sàng trả để thực Smart Constract Nếu xét - lượng gas limit thấp, lượng gas không đủ để chạy máy ảo Ethereum Gas Limit tính theo đơn vị wei Wei đơn vị nhỏ ether quy đổi ether có giá trị wei Để kiểm thử, ta nhập đoạn vào contructor, thực hàm setMessage getMessage Trang | 88 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ Hình 3.6 Màn hình deploy thành cơng • Testing: Thực hiện: nhập nội dung vào contructor getMessage setMessage getMessgage Hình 3.7 Chạy hàm contructor Hìn 3.8 h Kết getMessage Hình 3.9 Kết setMessage Hình 3.10 Kết getMessage 3.2 Viết thử chương trình quản lý khách hàng đưa lên mạng Ethereum Trang | 89 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ Yêu cầu đề ra: viết chương trình quản lý khách hàng sản phẩm cửa hàng với thông tin: - Nhập vào thông tin khách hàng (id, tên khách hàng, tuổi khách hàng số tiền mua - hàng) Nhập vào thông tin sản phẩm (id, tên sản phẩm, đơn giá sản phẩm số lượng sản - phẩm) Chương trình cho phép thêm khách hàng mới, tìm kiếm thơng tin khách hàng, cập nhật thơng tin khách hàng, xóa thơng tin khách hàng thêm sản phẩm mới, - tìm kiếm thông tin sản phẩm, cập nhật thông tin sản phẩm xóa thơng tin sản phẩm In dach sách thông tin tất khách hàng In danh sách khách hàng mua hóa đơn 1.000.000 đồng In danh sách tất sản phẩm In tổng doanh thu Viết chương trình: pragma solidity ^0.4.23; pragma experimental ABIEncoderV2; contract StoreManager{ struct Customer{ uint id; string name; uint age; uint money; } struct Product{ uint id; string name; uint money; uint amount; } Customer[] public Customers; uint public nextId; uint public nextId2; Product[] public Products; /*Thêm thông tin khách hàng(tên, tuổi, số tiền mua hàng)*/ Trang | 90 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ function AddCustomer(string name, uint age, uint money) public{ Customers.push(Customer(nextId, name, age, money)); ++nextId; } /*Tìm kiếm thơng tin khách hàng*/ function FindCustomer(uint id) view public returns(uint, string){ uint index = find(id); return (Customers[index].id, Customers[index].name); } /*Cập nhật thông tin khách hàng(id, tên, tuổi, số tiền mua hàng)*/ function UpdateCustomer(uint id, string name, uint age,uint money) public { uint index = find(id); Customers[index].name = name; Customers[index].age = age; Customers[index].money = money; } /*Xóa thơng tin khách hàng*/ function DeleteCustomer(uint id) public{ uint index = find(id); delete Customers[index]; } /*Thêm thông tin sản phẩm(tên sản phẩm, đơn giá, số lượng)*/ function AddProduct(string name, uint money, uint amount) public{ Products.push(Product(nextId2, name, money, amount)); ++nextId2; } /*Tìm kiếm thông tin sản phẩm*/ function FindProduct(uint id) view public returns(uint, string){ uint index = find(id); return (Products[index].id, Products[index].name); } /*Cập nhật thông tin sản phẩm(id, tên, đơn giá, số lượng)*/ function UpdateProduct(uint id, string name, uint money, uint amount) public { uint index = find(id); Products[index].name = name; Products[index].money = money; Products[index].amount = amount; } /*Xóa thơng tin sản phẩm*/ function DeleteProduct(uint id) public{ uint index = find(id); delete Products[index]; } Trang | 91 Đồ án Thương mại điện tử Duy Thanh Giảng viên hướng dẫn: ThS Đỗ function find(uint id) view internal returns(uint){ for(uint i = 0; i < Customers.length; i++){ if(Customers[i].id == id) return i; } revert('Customer/Product does not exist'); } /*In danh sách thông tin khách hàng*/ function GetListOfCustomer() public view returns(Customer[] memory) { return Customers; } /*In danh sách khách hàng có đơn mua 1000000 đồng*/ function GetCustomerByMoney() public view returns(Customer[] memory) { uint temp = 0; for(uint i=0;i< Customers.length;i++) { if (Customers[i].money>1000000) temp = temp + 1; } Customer[] memory cus1 = new Customer[](temp); uint index = 0; for (uint j=0;j1000000) { cus1[index]=Customers[j]; index++; } } return cus1; } /*In danh sách thông tin sản phẩm*/ function GetListOfProduct() public view returns(Product[] memory) { return Products; } /*In tổng doanh thu*/ function TotalIncome() public view returns(uint) { uint total = 0; for(uint i=0;i