[Tài liệu] Kiến trúc LISK - Phần 1

Thảo luận trong 'LISK' bắt đầu bởi Cờ ríp tô cơ rừn si, 1/3/18. Trả lời: 0 Xem: 308.

  1. Cờ ríp tô cơ rừn si
    Liskcoin (LSK) là một nền tảng blockchain công cộng cung cấp các ứng dụng blockchain phân tán. Lisk được tách từ Crypto của Max Kordek và Olivier Beddows vào đầu năm 2016. Lisk cho phép các nhà phát triển để xây dựng một loạt các ứng dụng trên mạng Lisk bằng cách phát triển các chuỗi bên ngoài. Lisk tương tự như Ethereum nhưng thay vì tạo ra các smart contract như Ethereum, Lisk lại tạo ra các ứng dụng và chức năng độc lập bằng cách sử dụng bộ phát triển Lisk SDK của mình.

    lisk-p1.jpg
    Xem thêm: Tiền ảo LISK (LSK) là gì

    Lisk là gì

    Lisk là hệ thống cryptocurrency cung cấp một nền tảng thế hệ mới cho phép phát triển và phân phối các ứng dụng blockchain dựa trên JavaScript. Lisk cung cấp một giao diện dễ sử dụng và dễ dàng truy cập vào hệ sinh thái với đầy đủ tính năng. Thông qua Lisk, các nhà phát triển có thể xây dựng, xuất bản, phân phối và kiếm tiền từ các ứng dụng của họ trong một hệ thống hỗ trợ cryptocurrency cho phép họ sử dụng các tùy biến blockchains, hợp đồng thông minh, lưu trữ đám mây và các nút mạng máy tính.

    Token Lisk

    Trong hệ sinh thái của mình Lisk cung cấp đồng tiền điện tử cho hệ thống của mình gọi là LSK. Token này được sử dụng để thanh toán các khoản phí khác nhau và để tạo ra các giao dịch sử dụng hệ thống. Các token LSK có thể được mua thông qua các phương thức khác nhau, chẳng hạn như mua chúng từ các sàn giao dịch hoặc từ một cá nhân khác sử dụng tiền thực hoặc Bitcoin (BTC).

    Nền tảng kỹ thuật


    Lisk được thiết kế như là một phần mềm có ba thành phần chính, mã JavaScript, thư viện NodeJS như là một công cụ tính toán và PostgreSQL đóng vai trò như một giải pháp lưu trữ cơ sở dữ liệu.

    1. JavaScript

    Không thể phủ nhận rằng JavaScript đã trở thành một ngôn ngữ của internet. Gần như mọi trang web trên Internet đều sử dụng một số function của JavaScript để cung cấp các tính năng phong phú cho người dùng. Lisk được viết bằng JavaScript cũng vì những lý do tương tự này và bởi đây là ngôn ngữ được dùng rất nhiều và quen thuộc đối với bất kỳ nhà phát triển nào. Gần như với bất kỳ trình duyệt nào người dùng cũng có thể viết và thử nghiệm mã JavaScript, và với mục tiêu của Lisk là ra mắt nền tảng ứng dụng blockchain, nó rất có ý nghĩa khi sử dụng một ngôn ngữ mà có thể chạy trên mọi máy tính.

    2. NodeJS

    Lisk sử dụng NodeJS làm công cụ tính toán phụ trợ cho mã JavaScript. Bản thân NodeJS rất linh hoạt và có thể được triển khai tới tất cả các kiến trúc máy tính để bàn và nhiều thiết bị IoT (Internet Of Things). Tính linh hoạt này cho Lisk khả năng chạy trên bất kỳ thiết bị nào có phần cứng hỗ trợ trình duyệt khách.

    3. PostgreSQL

    Tất cả các blockchains lưu trữ dữ liệu theo những cách khác nhau, một số chọn sử dụng SQLite trong khi những người khác sử dụng LevelDB. Các giải pháp cơ sở dữ liệu này có thể đáp ứng được cho blockchain thuần túy nhưng không cung cấp các tính năng mạnh mẽ như PostgreSQL.

    PostgreSQL là một trong những hệ cơ sở dữ liệu quan hệ nguồn mở lâu đời nhất. Với Postgres, người dùng có thể lưu trữ thông tin của bất kỳ loại dữ liệu nào, chẳng hạn như các tập tin nhị phân hoặc thậm chí các tập tin âm nhạc.

    Điều này làm cho PostgreSQL hoàn toàn phù hợp với hệ thống Lisk và cung cấp một công cụ cơ sở dữ liệu cần thiết để hỗ trợ cho các ứng dụng blockchain. Ngoài các tính năng này, tính năng sao lưu và phục hồi lỗi Postgres cũng là những tính năng chưa từng có trong cộng đồng nguồn mở.

    Khối Block

    Một sổ cái phân tán blockchain được hình thành bởi các khối block, và một khối block sẽ chứa một đầu đề header và một danh sách các giao dịch đã được xác nhận. Khi một ủy viên delegate được gán một vùng slot và có một nút chạy thì delegate sẽ tạo khối block tiếp theo và xác nhận tới 25 giao dịch từ pool giao dịch. Các giao dịch đã được xác nhận này sẽ được thêm vào mục đo tải của khối và sau đó được ký vào khối đó.

    1. Block Header

    Tiêu đề khối chứa tất cả thông tin về khối. Các trường sau đây nằm trong tiêu đề khối Block Header:
    • Một số nguyên 32 bit xác định phiên bản của khối
    • 32 bit tiếp theo chứa thời gian mà khối được tạo
    • 64 bit tiếp theo chứa ID của khối trước đó
    • 32 bit tương ứng với số lượng giao dịch được xử lý trong khối
    • 64 bit tương ứng với tổng lượng Lisk được chuyển
    • 64 bit tương ứng với tổng số phí liên quan đến khối
    • 64 bit tương ứng với phần reward mà Lisk chao cho các delegate
    • 32 bit tương ứng với chiều dài tải
    • Mã băm hash 256 bit của tải
    • Khóa công khai 256 bit của delegate đã tạo ra khối
    Hình ảnh sau đây là biểu thị cấu trúc hoàn chỉnh của một tiêu đề khối

    lisk-1.png
    Block-Header
    Mã:
      {
      "id": "15787022670460703397",
      "version": 0,
      "timestamp": 23039010,
      "height": 1574052,
      "previousBlock": "4576781903037947065",
      "numberOfTransactions": 0,
      "totalAmount": 0,
      "totalFee": 0,
      "reward": 500000000,
      "payloadLength": 0,
      "payloadHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "generatorPublicKey": "c0ab189f5a4746725415b17f8092edd3c266d1e758e840f02a3c99547b3a527f",
      "blockSignature": "c6b2bcc960066be078efbfffed625f61553a7bc18ebde3892636c2f36850de234a9c70ba3e33b606db2eff724398026984e4d391c1fbbe70c94dd9d07ff0060b",
      "totalForged": "500000000"
      }
    
    Quá trình ký tiêu đề khối cũng giống như quá trình ký một giao dịch. Một mã băm SHA-256 của tiêu đề khối được tạo ra và được ký sử dụng khóa bí mật của các ủy viên delegate. Một khi tiêu đề khối đã được ký, hệ thống sẽ tạo blockId theo logic giống như các giao dịch. Tiêu đề khối hoàn chỉnh được mã hóa băm bằng SHA-256 và 8 byte đầu tiên của hàm băm được đảo ngược và sử dụng làm blockId.

    Một khối ký và tạo block Id của nó như sau

    Blocks-Lisk-2.png
    2. Tải của khối Block

    Các đơn vị tải payload của khối block chứa đến 25 giao dịch chưa xác nhận trong hệ thống. Số lượng tối đa cho tới giới hạn của các giao dịch này sẽ được thêm vào và qua đó đảm bảo tải cho một giao dịch không vượt quá kích thước tối đa cho mỗi loại giao dịch.

    Các kích thước tối đa được liệt kê dưới đây
    Transaction Type --- Maximum Size (bytes)
    Loại 0 ------------- 220
    Loại 1 ------------- 149
    Loại 2 ------------- 201
    Loại 3 ------------- 2.326
    Loại 4 ------------- 1.223

    Như vậy nếu các giao dịch là kiểu 3 và block này chứa tối đa 25 giao dịch thì khích thước tải payload tối đa là 58150 bytes. Khối dữ liệu block được tạo ra bằng cách thu thập các khối dữ liệu của nhóm các giao dịch chưa được xác nhận và các chữ ký. Hệ thống sau đó sẽ mã hóa băm các khối dữ liệu chứa các giao dịch để tạo khối payload.

    3. Tạo khối


    Quy trình tạo khối Block diễn ra sau mỗi 10 giây trong mạng Lisk sử dụng thuật toán đồng thuận của DPoS, như mô tả trong mục Thuật Toán Đồng Thuận. Một ủy viên chính là một tài khoản đã được cấp quyền tạo ra các khối block thông qua một quá trình bầu cử từ các chủ sở hữu khác của Lisk. Việc tạo khối đòi hỏi 51% các nốt phải duy trì sự đồng thuận broadhash. Cơ chế về sự đồng thuận này được mô tả trong mục Cơ Chế Đồng Thuận Broadhash. Một khi sự đồng thuận broadhash được thiết lập node đó sẽ tạo ra một khối block bằng cách sử dụng các kỹ thuật được mô tả trong mục Blocks.

    Bảo mật

    Lisk sử dụng kỹ thuật mật mã học để đảm bảo tất cả các yếu tố của hệ thống được an toàn và bảo mật. Theo đó hệ thống sử dụng kỹ thuật EdDSA vì nó cung cấp cơ chế nhanh hơn để mã hóa băm và tăng tính bảo mật thay vì dùng ECDSA như nhiều đồng tiền điện tử khác chẳng hạn như Bitcoin.

    1. Cặp khóa Keypair

    Keypair bao gồm một khoá cá nhân và khóa công khai. Khóa cá nhân là phần thông tin chỉ được biết bởi chủ sở hữu khóa. Khóa công khai có nguồn gốc từ khóa cá nhân và có thể được sử dụng để xác nhận rằng khóa cá nhân thuộc về chủ sở hữu, nhưng không cung cấp quyền truy cập vào khóa cá nhân của chủ sở hữu. Kỹ thuật mật mã học theo đường cong Elliptic được sử dụng để tạo ra các cặp khoá bảo mật.

    Quá trình này sử dụng để tạo cặp khóa hoạt động dưới các giả định sau

    Khi người dùng tạo một tài khoản, một mật mã dạng câu BIP39 (passphrase) được tạo ra cho người dùng. Cụm từ mật khẩu này được mã hóa băm bằng chức năng băm SHA-256 thành chuỗi 256 bit. Mã hóa băm này sau đó được sử dụng như một nhân tố trong ed25519 để tạo ra khóa cá nhân ks và khóa công khai kp của nó.

    Blocks-Lisk-3.png
    Với khóa cá nhân này, người dùng có thể ký các giao dịch và nhóm vào một đối tượng giao dịch sau đó phát tán đối tượng đó vào mạng. Khóa công khai được sử dụng như là một phần của giao dịch và các nút nhận được giao dịch có thể xác minh tính hợp lệ của chữ ký sử dụng kp. Điều này cung cấp tính năng bảo mật hiệu quả cho cả người dùng và mạng lưới bởi ks chỉ được biết bởi người dùng và nhờ kp mà mạng lưới có thể xác nhận rằng chữ ký đó là hợp lệ.

    2. Lớp bảo mật thứ 2

    Lisk cung cấp thêm một lớp bảo mật cho người dùng. Sử dụng một lớp giao dịch cụ thể, người dùng có thể đăng ký một cụm từ passphrase thứ hai liên quan đến kp. Bằng khóa này hệ thống sẽ yêu cầu tất cả các giao dịch tuần tự phải được ký bằng cách sử dụng cụm từ passphrase thứ hai để được coi là hợp lệ. Quy trình tạo ra cặp khoá thứ hai giống quá trình tạo cặp khoá chính.

    3. Ký tập thể multisignature

    Lisk hỗ trợ tài khoản đa chữ ký multisignature đây là một hệ thống an ninh cho người dùng đòi hỏi bảo mật cao hơn. Tài khoản đa chữ ký multisignature là một tài khoản yêu cầu nhiều người ký phải gửi các giao dịch chứa chữ ký lên.

    Bất kỳ người dùng nào cũng có thể kích hoạt tính năng đa chữ ký trong tài khoản của mình bằng cách phát đi một giao dịch đặc biệt (xem mục giao dịch đăng ký đa chữ ký) chỉ định một nhóm ksn và yêu cầu số chữ ký tối thiểu cần thiết để xác nhận giao dịch là hợp lệ. Sau đó nó được ủy thác trong blockchain rằng bất kỳ giao dịch nào có nguồn gốc từ tài khoản này phải được ký bởi một số lượng tối thiểu các tài khoản liên kết trước khi bất kỳ giao dịch từ tài khoản này được xử lý.

    4. Địa chỉ

    Một địa chỉ hoặc ID ví điện tử được lấy từ khóa công khai. Khóa công khai được mã hóa băm bằng cách sử dụng SHA-256 sau đó 8 byte đầu tiên của hash được đảo ngược. ID tài khoản là số đại diện cho 8 byte này, với ký tự 'L' được gắn vào cuối. Dưới đây là thể hiện của một địa chỉ và chi tiết tài khoản liên quan.
    Mã:
    {
      "address": "16009998050678037905L",
      "unconfirmedBalance": "0",
      "balance": "0",
      "publicKey": "73ec4adbd8f99f0d46794aeda3c3d86b245bd9d27be2b282cdd38ad21988556b",
      "unconfirmedSignature": 0,
      "secondSignature": 0,
      "secondPublicKey": null,
      "multisignatures": [],
      "u_multisignatures": []
      }
    
    Truyền thông ngang hàng

    Truyền thông ngang hàng là một chức năng quan trọng trong mạng Lisk. Các cơ chế ngang hàng cung cấp kiến trúc cần thiết để tạo thuận lợi cho sự đồng thuận của mạng lưới, truyền block và truyền giao dịch.

    1. Header hệ thống


    Trong hệ thống mạng Lisk, Header được sử dụng để xác định các nút đầy đủ và cung cấp một bộ thông tin cơ bản về phần mềm đang chạy trên hệ thống. Trong quá trình truyền thông ngang hàng, các tiêu đề này được thêm vào tất cả các thông điệp và được gửi giữa các nốt.

    Đối tượng JSON sau đây được tạo ra từ dữ liệu hệ thống và sẽ được phát tán tới mạng trong suốt quá trình truyền thông:
    Mã:
    {
      "os": "darwin16.3.0",
      "phiên bản": "0.6.0a",
      "cổng": 7000,
      "chiều cao": 1574654,
      "nethash": "da3ed6a45429278bac2666961289ca17ad86595d33b31037615d4b8e8f158bba",
      "broadhash": "c7e0902a7016205d456a427edda2b09f4b875f98ef40a224018a0274347146ac",
      "minVersion": ">= 0.5.0 "
    }
    
    2. Cơ chế Đồng thuận Broadhash

    Cơ chế đồng thuận Broadhash nhằm thống nhất phục vụ một chức năng sống còn cho mạng lưới Lisk và để ngăn chặn sự phân nhánh. Trong hệ thống DPoS, các ủy viên được gán các slot dựa trên các quãng thời gian và sẽ cố gắng sản sinh một khối block khi hệ thống chỉ định slot ủy viên đó là đã sẵn sàng. Sự đồng thuận của Broadhash đảm bảo rằng đa số các nốt ngang hàng có sự đồng ý và sẵn sàng tạo ra block.

    Broadhash được thiết lập như là một mã hóa băm tổng hợp của năm khối block trước đó được lưu trong cơ sở dữ liệu. Tất cả các nốt ngang hàng có cùng khối block sẽ tạo ra cùng một broadhash và phổ biến thông tin đó thông qua Header hệ thống được mô tả trong phần 8.1.

    3. Truyền Block

    Việc truyền khối block thực hiện một chức năng quan trọng trong mạng Lisk. Các khối block được tạo ra theo mô hình phân tán phải được gửi đến tất cả các nút trên mạng lưới để tạo sự đồng thuận. Khi một khối được tạo ra, nó sẽ được phát tán tới các nốt khác. Nếu không có cơ chế truyền khối block trong mạng lưới, hệ thống sẽ phân mảnh và blockchain sẽ ngừng hoạt động.

    4. Hàng đợi phát tán

    Hàng đợi phát tán phục vụ một vai trò cơ bản cho mạng lưới Lisk. Các giao dịch phải di chuyển từ một nốt tới tất cả các nốt khác để được nhóm vào trong các khối. Hàng đợi phát tán hoạt động bằng cách nhóm tối đa đến 25 giao dịch từ các pool giao dịch và tập hợp chúng thành một nhóm. Gói này sau đó sẽ được phát tán tới mạng lưới trong một khoảng thời gian nhất định: hiện tại được chỉ định là 5 giây một lần.

    Ngoài việc phát tán các đối tượng, nhóm còn được cung cấp một giới hạn để ngăn chặn việc phát tán quá nhiều dữ liệu. Trong quá trình thực hiện, giới hạn chuyển tiếp được thiết lập là 2, điều đó có nghĩa là mỗi gói sẽ được phát tán một lần từ nút gốc, và hai lần nữa từ nút tiếp nhận.

    (còn nữa...)
    Xem tiếp: Kiến trúc LISK - Phần 2

    Nguồn tài liệu https://goo.gl/cVtyD4
     
    #1 Cờ ríp tô cơ rừn si, 1/3/18
    Chỉnh sửa cuối: 30/5/18
    Tags:

Chia sẻ trang này lên mạng xã hội:

Đang tải...