Kiểm tra tính toàn vẹn của Blockchain

Một phần của tài liệu (LUẬN văn THẠC sĩ) ứng dụng công nghệ blockchain trong ví điện tử (Trang 74)

Hàm isChainValid() dùng trong Class NoobChain, nó sẽ lặp qua tất cả các Block trong chuỗi và so sánh tất cả các hash. Hàm này sẽ cần thiết để kiểm tra tính toàn vẹn của Blockchain.

Public static Boolean isChainValid() { Block currentBlock; Block previousBlock;

for (int i = 1; i < blockchain.size(); i++) { currentBlock = blockchain.get(i); previousBlock = blockchain.get(i - 1); if !currentBlock.hash.equals(currentBlock.calculateHash())) {

System.out.println("Current Hashes not equal"); return false;

}

if (!previousBlock.hash.equals(currentBlock.previousHash)) {

System.out.println("Previous Hashes not equal"); return false; } } return true; } 3.2.1.5. Tạo Blockchain

Hãy tạo một class NoobChain chứa main method như sau và thực hiện nút lệnh Tạo Blockchain để tạo ra một chuỗi Blockchain gồm 3 Block.

Public void TaoBlockchain() {

blockchain1.add(new Block1("Chào bạn tôi là block thứ 1", "0")); blockchain1.get(0).mineBlock(difficulty);

blockchain1.get(blockchain1.size() - 1).hash)); blockchain1.get(1).mineBlock(difficulty);

blockchain1.add(new Block1("Chào bạn tôi là block thứ 3", blockchain1.get(blockchain1.size() - 1).hash));

blockchain1.get(2).mineBlock(difficulty); String blockchainJson = new

GsonBuilder().setPrettyPrinting().create().toJson(blockchain1); txtLog.append("\nThe block chain: ");

txtLog.append(blockchainJson);

txtLog.append("\n- Chain count: " + blockchain1.size());

txtLog.setCaretPosition(txtLog.getDocument().getLength()); }

Kết quả như sau:

Hình 3.4. Kết quả tạo ra chuỗi Blockchain

Để thêm một Block tiếp theo vào chuỗi Blockchain đã có thực hiện nút lệnh Thêm Block với code sau:

Private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { if (blockchain1.size()>0){

cursor1 = blockchain1.size()+1;

blockchain1.add(new Block1("Chào bạn tôi là block thứ "+ cursor1 , blockchain1.get(blockchain1.size() - 1).hash)); blockchain1.get(blockchain1.size() - 1).mineBlock(difficulty); Block1 b = blockchain1.get(blockchain1.size() - 1); txtBlocknum1.setText(0 + ""); txtHash1.setText(b.hash); txtPrevhash1.setText(b.previousHash); txtData1.setText(b.data);

Date date = new Date(b.timeStamp);

txtTimestamp1.setText(date.toGMTString()); txtNonce1.setText(b.nonce + "");

String page = (cursor1) + "/" + this.blockchain1.size(); txtBlocknum1.setText(cursor1 + "");

txtBlock1.setText(page); String blockchainJson = new

GsonBuilder().setPrettyPrinting().create().toJson(blockchain1); txtLog.append("\nThe block chain: ");

txtLog.append(blockchainJson);

txtLog.append("\n- Chain count: " + blockchain1.size()); txtLog.setCaretPosition(txtLog.getDocument().getLength()); }

}

Hình 3.5. Kết quả thêm một Block vào chuỗi Blockchain 3.2.2. Giao dịch trong Ví Blockchain

Ta tiến hành giao dịch chuyển tiền giữa hai Ví A và Ví B dựa vào quá trình tạo một giao dịch ban đầu từ Block Genesis chuyển cho Ví A 100 coin, sau đó giao dịch giữa Ví A và Ví B được thực hiện để thêm các Block tiếp theo thuật toán giao dịch được cài đặt bởi code sau:

Public static void GiaodichVi() {

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); walletA = new Wallet();

walletB = new Wallet();

Wallet coinbase = new Wallet();

genesisTransaction = new Transaction(coinbase.publicKey, walletA.publicKey, 100f, null);

genesisTransaction.transactionId = "0";genesisTransaction.outputs.add(new TransactionOutput(genesisTransaction.reciepient, genesisTransaction.value, genesisTransaction.transactionId));

UTXOs.put(genesisTransaction.outputs.get(0).id, genesisTransaction.outputs.get(0));

NoobChain.log += "\n***** GIAO DỊCH GIỮA 2 VÍ A VA B *****"; Block genesis = new Block("0");

genesis.addTransaction(genesisTransaction); addBlock(genesis);

Block block1 = new Block(genesis.hash);

NoobChain.log += "\nWalletA's balance is: " + walletA.getBalance(); NoobChain.log += "\nWalletA is Attempting to send funds (40) to WalletB..."; block1.addTransaction(walletA.sendFunds(walletB.publicKey, 40f)); NoobChain.log += "\nWalletA is Attempting to send funds (20) to WalletB..."; block1.addTransaction(walletA.sendFunds(walletB.publicKey, 20f)); addBlock(block1);

NoobChain.log += block1.getLog();

NoobChain.log += "\nWalletA's balance is: " + walletA.getBalance(); NoobChain.log += "\nWalletB's balance is: " + walletB.getBalance(); Block block2 = new Block(block1.hash);

NoobChain.log += "\nWalletA Attempting to send more funds (1000) than it has..."; block2.addTransaction(walletA.sendFunds(walletB.publicKey, 1000f));

NoobChain.log += "\nWalletA Attempting to send more funds (10) to WalletB..."; block2.addTransaction(walletA.sendFunds(walletB.publicKey, 10f));

addBlock(block2);

NoobChain.log += block2.getLog();

NoobChain.log += "\nWalletA's balance is: " + walletA.getBalance(); NoobChain.log += "\nWalletB's balance is: " + walletB.getBalance();

NoobChain.log += "\nWalletB is Attempting to send funds (20) to WalletA..."; block3.addTransaction(walletB.sendFunds( walletA.publicKey, 20));

addBlock(block3);

NoobChain.log += block3.getLog();

NoobChain.log += "\nWalletA's balance is: " + walletA.getBalance(); NoobChain.log += "\nWalletB's balance is: " + walletB.getBalance(); System.out.println("\n\nLOG"+ NoobChain.log);

}

Kết quả giao dịch sẽ được hiển thị như sau:

KẾT LUẬN

Công nghệ Blockchain đang chuyển đổi thành một nguồn tài nguyên đáng tin cậy và có giá trị trong thế giới kỹ thuật số và kinh doanh. Nó có các ứng dụng trong hầu hết các ngành công nghiệp. Thậm chí các tập đoàn lớn nhất cũng đang theo đuổi việc sử dụng công nghệ này để nâng cấp các quy trình hoạt động của họ.

Để bắt kịp xu hướng phát triển của công nghệ, luận văn chọn nghiên cứu “Ứng dụng công nghệ Blockchain trong ví điện tử” nhằm giúp hiểu rỏ hơn về cách tạo ra Blockchain và việc giao dịch giữa các Ví như thế nào.

Sau một thời gian thực hiện, luận văn đã đạt được một số kết quả như:  Tìm hiểu công nghệ Blockchain và công nghệ Ví điện tử Blockchain.  Tìm hiểu mô hình xác thực trong giao dịch Blockchain.

 Thực nghiệm mô phỏng Blockchain và ví bằng công nghệ Blockchain. Mục tiêu phát triển của nghiên cứu này chính là cách tạo ra Blockchain và việc giao dịch giữa các Ví như thế nào, nhằm giúp người dùng hiểu rỏ hơn về công nghệ Blockchain.

Hướng phát triển trong tương lai:

 Xây dựng API Ví Blockchain tương tác để dễ triển khai rộng rãi.  Xây dựng qui chế sử dụng Ví Blockchain hiệu quả.

Trong quá trình thực hiện, do thời gian và hạn chế về kiến thức, kinh nghiệm thực tiễn nên luận văn của tôi còn nhiều thiếu sót, tôi rất mong được sự đánh giá, góp ý của thầy cô.

DANH MỤC TÀI LIỆU THAM KHẢO

[1] Satoshi Nakamoto (2009), “Bitcoin: A Peer-to-Peer Electronic Cash System, ” https://bitcoin.org/bitcoin.pdf

[2] Don Tapscott and Alex Tapscott (2016), "Blockchain Revolution: How the Technology Behind Bitcoin Is Changing Money, Business and the World“, http://blockchain-revolution.com/

[3] Narayan Prusty (April 2017), Building Blockchain Projects: Develop real- time practical DApps using Ethereum and JavaScript, Packt Publishing [4] Sesaria Kikitamara (August 23, 2017): MASTER’S THESIS

INFORMATION SCIENCES - Digital Identity Management on Blockchain for Open Model Energy System

[5] Mukesh Thakur (September 13, 2017): Master’s Thesis UNIVERSITY OF HELSINKI Department of Computer Science - Authentication, Authorization and Accounting with Ethereum Blockchain - Helsinki [6] Building new state machines with Virtualchain,

http://blockstack.ghost.io/virtualchain-research-paper-published-at- dccl16

[7] Bitcoin multisig the hard way: Understanding raw P2SH multisig transactions, https://www.soroushjp.com/2014/12/20/bitcoin-multisig- the-hard-way-understanding-raw-multisignature-bitcoin-transactions

[8] BlockCypher Python, https://github.com/blockcypher/blockcypher-python

[9] Transaction, http://adrenaline2017.hatenablog.com/entry/2017/05/29/120701

[10] Understanding Blockchains (and Bitcoin)– Part 2: Technology,

https://luxsci.com/blog/understanding-blockchains-and-bitcoin- technology.html

Một phần của tài liệu (LUẬN văn THẠC sĩ) ứng dụng công nghệ blockchain trong ví điện tử (Trang 74)

Tải bản đầy đủ (PDF)

(81 trang)