Thực chiến lập trình core blockchain - MerkleTree

Thảo luận trong 'ACM/Programming' bắt đầu bởi Testthuthoi, 17/12/19, 11:12 PM.

  1. Testthuthoi

    Testthuthoi Moderator Thành viên BQT

    Tham gia: 26/06/18, 10:06 AM
    Bài viết: 26
    Đã được thích: 20
    Điểm thành tích:
    3
    Bài viết có xu hướng cá nhân và nhiều tình tiết ngáo. Nên các bác chịu khó đọc e viết hơi dài.
    Tâm sự chút nhỉ: không biết các bác có nhớ được tên tài khoản chém gió của em không testthuthoi. Nếu thấy hay hãy share và like là động lực cho em viết tiếp chứ em post hoài chẳng thấy bình luận buồn!
    Đi chém gió về lý thuyết thôi! Bài viết này tập trung vào một thành phần của đồng bitcoin.

    Trong cấu trúc của 1 khối dữ liệu điển hình như bitcoin. Một Block còn có một số trường nữa nhưng cái mình cần quan tâm là 6 trường ở dưới đây vì 1 Block chính là giá trị Hash của 6 trường dưới đây. Thuật toán Hash sử dụng ở đây là thuật toán SHA-256. Mình cũng giải thích luôn thuật toán này một chút.
    upload_2019-12-17_23-27-10.png
    Quan tâm nhất đó chính là Merkle Root là giá trị hash của tất cả các transaction trong Block. Merkle tree, cũng như được biết đến là cây hash nhị phân, là một dạng cấu trúc dữ liệu sử dụng để lưu trữ hash của các thông tin cá nhân trong bộ dữ liệu lớn đồng thời đảm bảo việc xác minh hiệu quả bộ dữ liệu.

    Merkle tree được sử dụng như một cơ chế chống phá hoại, đảm bảo rằng bộ dữ liệu không bị thay đổi.

    Thôi lý thuyết nấy thôi đi vào lập trình luôn. Các bác cài cắm theo em nhé.

    Việc đầu tiên cài Node.Js trên Ubuntu thôi.

    upload_2019-12-17_23-27-44.png

    Truy cập vào trang chủ rồi thực hiện tải phiên bản dành cho ubuntu nhớ xài 12.13.0 thôi cho ổn định, các bác xài cao hơn lỗi khó fix lắm ☹

    Thực hiện cấp quyền 755 cho thư mục /opt

    Di chuyển vào thư mục opt:

    cd /opt

    Thực hiện lệnh cấp quyền đọc ghi cho thư mục này:

    Sudo chmod – R 755

    upload_2019-12-17_23-30-53.png
    Tiếp theo copy file nén vừa tải về vào thư mục /opt:

    upload_2019-12-17_23-31-17.png

    Tiếp đến trong thư mục /otp chúng ta giải nén:

    upload_2019-12-17_23-31-34.png

    Tiếp đến chúng ta cài đặt các biến môi trường để Ubuntu biết Node.JS của chúng ta để ở đâu.

    Thực hiện lệnh

    Sudo nano ~/.profile

    Ghi vào file 2 dòng

    export NODEJS_HOME=/opt/node-v12.13.0-linux-x64/bin

    export PATH=$NODEJS_HOME:$PATH

    upload_2019-12-17_23-31-51.png

    Lưu lại và thực hiện lệnh cập nhật lại file biến môi trường.

    . ~/.profile

    Sau bước đó mà mọi thứ cứ êm xịt thì các bác chạy lệnh Node để kiểm tra xem các bác cài thành công.

    upload_2019-12-17_23-32-6.png
    Thế là cài xong rồi chuẩn bị cho các công đoạn tiếp theo thôi!

    Tiếp đến chúng ta cài npm quản lý các package của node.

    Sudo apt-get install npm

    upload_2019-12-17_23-32-22.png

    Thực hiện tạo ra project node

    Npm init

    Thực hiện

    Npm install merkletreejs

    Cài thư viện tạo ra cây merletree.

    Để tăng phần thú vị chúng ta sẽ tải file JSON gốc từ dữ liệu của blockchain
    https://blockchain.info/block-height/606718?format=json
    Chúng ta sẽ code sử dụng thư viện trên tính toán ra merkleroot kiểm tra tính đúng đắn của thư viện.

    upload_2019-12-17_23-33-58.png
    upload_2019-12-17_23-34-10.png

    Thực hiện chạy và kiểm tra nếu đúng sẽ in ra merkel root.

    upload_2019-12-17_23-34-28.png

    Theo file 606718.json

    upload_2019-12-17_23-36-19.png

    Hai giá trị hoàn toàn giống nhau như vậy thư viện trên hoàn toàn tin cậy và sử dụng chúc các bác sử dụng được vào dự án lớn.
    2 tệp gồm code và file dữ liệu được đính kèm là code.zip bác nào thích thì tải về nghiên cứu nhớ comment cho em vui nhé, buồn tím người.
     

    Các file đính kèm:

    • Code.zip
      Kích thước:
      106.6 KB
      Đọc:
      48
    Last edited by a moderator: 19/12/19, 09:12 AM
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
    whf and DiepNV88 like this.