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

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

  1. Cờ ríp tô cơ rừn si
    Lisk sử dụng giải thuật khai thác theo cổ phần ủy viên (DPOS). Theo đó các ủy viên sẽ đảm nhiệm nhiệm vụ tạo ra các khối giao dịch block cho toàn bộ hệ thống trong đó các ủy viên được lựa chọn thông qua một cơ chế bầu chọn có tính cạnh tranh cao. Những cá thể nắm giữ cổ phần sẽ là người bầu chọn cho hệ thống, giá trị mỗi phiếu bầu nằm ở số lượng Token LSK mà các cổ đông nắm giữ.

    Kiến trúc LISK - Phần 1

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

    (tiếp)
    Pool chia sẻ giao dịch

    Các pool chia sẻ giao dịch cung cấp cho mạng Lisk một giải pháp rất mạnh mẽ để bảo vệ nhằm tránh các giao dịch không được xác nhận tràn vào khối tiếp theo. Như đã đề cập trong phần 6, mỗi khối chỉ có chứa tối đa 25 giao dịch và Pool giao dịch cho phép lên đến 5.000 giao dịch được xếp hàng đợi cho (các) khối tiếp theo. Các pool giao dịch có thể được xem như là một pool bộ nhớ giữ cho các giao dịch sẵn sàng cho đến khi chúng được ký vào một khối block.

    Tính năng thứ hai của pool giao dịch là cung cấp một cơ chế để truyền các giao dịch. Khi một nút chuẩn bị một nhóm các giao dịch, nút đó sẽ kéo về 25 giao dịch từ pool và thực hiện xác nhận tính hợp lệ đối với những giao dịch đó. Các giao dịch này sau đó được phát đến các nút khác trong một đối tượng JSON đi kèm. Điều này có thể được biểu diễn dưới dạng một mảng các đối tượng của giao dịch được đề cập trong phần 5

    Để giữ cho các giao dịch pool gọn gàng, tất cả các giao dịch được gán một thời gian tồn tại. Thời gian tồn tại này được định nghĩa là 10800 giây, hoặc 1080 khối block.

    Chức năng cuối của pool giao dịch là lưu trữ các giao dịch đợi để được ký. Các giao dịch này với các chữ ký đang chờ xử lý theo cùng mô hình với các giao dịch chưa được xác nhận. Theo cách này các giao dịch ký tập thể sẽ được tách riêng ra khỏi pool giao dịch. Giống như giao dịch chưa được xác nhận, các giao dịch này sẽ hết hạn trong pool dựa trên thời gian tồn tại được chỉ định từ khi giao dịch được tạo ra.

    Giao dịch

    Trong Lisk, các giao dịch được chỉ định theo loại. Các loại giao dịch này bao gồm:
    Loại giao dịch hoạt động
    • Loại 0: Gửi tiền đến một địa chỉ Lisk đã xác định
    • Loại 1: Đăng ký mã bảo mật thứ hai
    • Loại 2: Đăng ký một đại biểu
    • Loại 3: Gửi phiếu bầu cho các đại biểu
    • Loại 4: Đăng ký ký tập thể
    Loại giao dịch không được chấp nhận
    • Loại 5: Đăng ký một ứng dụng trên Blockchain
    • Loại 6: Chuyển Lisk vào Sidechain
    • Loại 7: Chuyển Lisk ra khỏi một Sidechain
    1. Ký kết giao dịch

    Mỗi giao dịch, bất kể loại, phải được ký bởi người gửi trước khi được chấp nhận bởi mạng lưới LISK. Quá trình ký kết giao dịch là tương đồng đối với mỗi giao dịch. Đầu tiên, một khối dữ liệu đại diện cho giao dịch được tạo ra. Mỗi khối dữ liệu chứa một bộ thông tin chuẩn cụ thể. Thông tin bổ sung trong khối dữ liệu sẽ là khác nhau tùy thuộc vào loại giao dịch.

    Các trường sau phải có trong tất cả các loại hình giao dịch
    • Một số nguyên 8 bit xác định loại giao dịch
    • Khoảng thời gian được lưu trong 32 bit khi giao dịch được tạo ra
    • Khóa công khai 256 bit của người thực hiện giao dịch
    • Một số nguyên 64 bit đại diện cho số lượng Lisk sẽ được chuyển
    Các trường khác sẽ được thêm vào lược đồ này tùy thuộc vào từng loại giao dịch. Khi khối dữ liệu được tạo, nó được mã hóa băm bằng thuật toán SHA-256, và mã hóa băm này được ký bằng cách sử dụng cặp khóa của tổ chức phát hành. Nếu người phát hành bật passphrase thứ hai, thì chữ ký đầu tiên được nối vào cuối khối dữ liệu và quá trình lặp lại một lần nữa với chữ ký thứ hai.

    Các quá trình tương tự áp dụng cho tài khoản chữ ký tập thể. TransactionId được tạo ra từ khối dữ liệu. Để tính toán transactionId, hệ thống sẽ lấy khối dữ liệu với thông tin chữ ký đã hoàn thành và mã hóa băm khối này bằng cách sử dụng SHA-256 và 8 byte đầu tiên của hash sẽ được đảo ngược và sau đó được sử dụng làm transactionId.

    Ký một giao dịch có chu trình như sau

    Blocks-Lisk-4.png
    Với chữ ký thứ hai, chu trình sẽ như sau

    Blocks-Lisk-5.png
    2. Giao dịch chuyển khoản

    Giao dịch chuyển khoản (loại 0) là chuyển Lisk từ tài khoản này sang tài khoản khác. Để tạo ra một giao dịch chuyển khoản, phải xác định các trường sau:
    • Id tài khoản của người nhận
    • Số lượng LSK chuyển
    • Mã bí mật của tài khoản
    Khi ba trường đã được xác định, hệ thống sẽ bắt đầu xây dựng đối tượng giao dịch. Đầu tiên, khoá công khai của người gửi được tính bằng mã bảo mật của họ. Sau đó, khối dữ liệu được tạo ra sử dụng quy trình được nêu trong mục Ký giao dịch và trường bổ sung recipientId sẽ được thêm vào đối tượng. Sau đó khối dữ liệu 53 byte sẽ được tạo ra.

    Khối này được ký bằng cách sử dụng phương pháp mô tả trong phần 2.1. Bước cuối cùng của quy trình tạo giao dịch là tính phí giao dịch. Trong hệ thống hiện hành, phí giao dịch cố định là 0,1 Lisk. Một khi tất cả các bước này được hoàn thành và giao dịch được xác thực thì giao dịch này có thể được phát tán trên mạng.

    Mặc dù giao dịch có thể có mặt trên mạng, nó vẫn ở trạng thái chưa được xác nhận cho đến khi nó được xử lý bởi một đại biểu. Khi giao dịch được phát tán tới mạng lưới thì nó sẽ được gửi như một đối tượng JSON sử dụng giao thức API HTTP.

    Hình ảnh dưới đây là một đại diện của một đối tượng giao dịch

    Blocks-Lisk-6.png
    Đối tượng JSON
    Mã:
    {
      "type": 0,
      "amount": Số tiền,
      "senderPublicKey": Khóa công khai của người gửi,
      "timestamp": Quãng thời gian,
      "recipientId": Id của người nhận,
      "signature": Chữ ký của khối dữ liệu,
      "ID": Id của giao dịch,
      "fee": 10000000,
      "senderId": Id của người gửi,
      ...
    }
    
    Kích thước cuối cùng của giao dịch chuyển khoản không có passphrase thứ hai là 117 byte, và 181 byte với passphrase thứ hai.

    3. Giao dịch Đăng ký Chữ ký Thứ hai


    Một giao dịch đăng ký chữ ký thứ hai (loại 1) được sử dụng để đăng ký một cụm từ passphrase thứ hai trên blockchain. Để tạo ra loại giao dịch này phải xác định các trường sau:
    • Mã bí mật: Mã bí mật của tài khoản.
    • SecondSecret: Các cụm từ passphrase mong muốn.
    Khi hai trường này được chỉ định, hệ thống sẽ bắt đầu tạo giao dịch. Quy trình được mô tả trong phần 5.1 Khóa công khai thứ hai được tạo ra từ cụm từ passphrase thứ hai và hệ thống sẽ xây dựng khối dữ liệu là 85 byte.

    Khối dữ liệu này sau đó được ký bằng cách sử dụng mã bí mật của người dùng, và chữ ký được gắn vào đối tượng. Dưới đây là mô tả về quá trình tính toán phí cho các loại giao dịch. Trong quá trình thực hiện, phí cho một giao dịch chữ ký được ấn định là 5 Lisk.

    Đối tượng được biểu diễn bằng sơ đồ sau:

    Blocks-Lisk-7.png
    Đối tượng JSON sẽ được phát tán trên mạng được biểu diễn bằng biểu đồ sau:
    Mã:
    {
      "type”: 1,
      "amount": 0,
      "senderPublicKey": Khóa công khai của người gửi,
      "timestamp": Quãng thời gian,
      "recipientId": null,
      "signature": Chữ ký của khối dữ liệu,
      "ID": Id của giao dịch,
      "fee": 500000000,
      "senderId": Id của người gửi,
      "asset": {
      "signature": {
      "publicKey": Khóa công khai liên quan đến cụm mật khẩu passphrase thứ hai
      }
      }
      ...
    }
    
    Kích thước cuối cùng của giao dịch chữ ký là 149 byte.

    4. Giao dịch đăng ký ủy viên

    Giao dịch ủy viên (loại 2) được sử dụng để đăng ký tài khoản cho ủy viên. Xem phần 6.1 để biết thêm thông tin về khái niệm ủy viên. Để tạo giao dịch đăng ký ủy viên, các trường sau đây là bắt buộc:
    • Mã bí mật: Mã bí mật của tài khoản.
    • username: Tên ủy viên.
    Chiều dài của tên người dùng phải có ít nhất một ký tự và tối đa là 20 ký tự. Khi các trường đó đã được chỉ định, hệ thống có thể tính toán khóa công khai của tài khoản và bắt đầu xây dựng khối dữ liệu của giao dịch với tối đa là 73 byte.

    Khối dữ liệu này sau đó được ký sử dụng mã bí mật của tài khoản, và chữ ký được nối vào đối tượng giao dịch. Hệ thống sau đó sẽ tính phí của giao dịch. Trong quá trình thực hiện, phí cho một giao dịch chữ ký là cố định là 25 Lisk.

    Đối tượng được biểu diễn bằng sơ đồ sau:
    Blocks-Lisk-8.png
    Đối tượng JSON sẽ được phát tán tới mạng là theo định dạng dưới đây:
    Mã:
    {
      "type": 2,
      "amount": 0,
      "senderPublicKey": Khóa công khai của người gửi,
      "timestamp": Quãng thời gian,
      "recipientId": null,
      "signature": Chữ ký của khối dữ liệu,
      "ID": Id của giao dịch,
      "fee": 10000000000,
      "senderId": Id của người gửi,
      "asset": {
      "delegate": {
      "username": Tên người dùng đã chọn
      "publicKey": Khóa công khai của ủy viên (người gửi)
      }
      }
      ...
    }
    
    Kích thước tối đa cuối cùng của giao dịch cùng với chữ ký là 137 byte, và với chữ ký thứ hai là 201 byte.

    5. Giao dịch bỏ phiếu

    Một giao dịch bỏ phiếu (loại 3) là một giao dịch được sử dụng để bỏ phiếu cho các đại biểu. Để tạo một giao dịch bỏ phiếu hệ thống yêu cầu hai trường sau:
    • Mã bí mật: Mã bí mật của tài khoản.
    • delegates: Một mảng các phiếu bầu.
    Một phiếu bầu được thêm vào với ký tự '+' để thêm cổ phần vào khóa công khai của ủy viên và ký tự '-' được thêm vào trước khoá công khai của ủy viên nếu tài khoản muốn hủy phiếu bầu của ủy viên. Trong một giao dịch số phiếu bầu tối đa là 33. Khi các trường này được chỉ định, hệ thống có thể tính toán khóa công khai của tài khoản và bắt đầu xây dựng khối dữ liệu của giao dịch với tối đa là 2198 byte.

    Khối dữ liệu này sau đó được ký sử dụng mã bí mật của tài khoản, và chữ ký được nối vào đối tượng giao dịch. Hệ thống sau đó sẽ tính phí của giao dịch. Trong quá trình thực hiện, phí cho một giao dịch bỏ phiếu được ấn định là 1 Lisk.

    Đối tượng được biểu diễn bằng sơ đồ sau:
    Blocks-Lisk-9.png
    Đối tượng JSON sẽ được phát tán tới mạng là theo định dạng dưới đây:
    Mã:
    {
      "type": 3,
      "amount": 0,
      "senderPublicKey": Khóa công khai của người gửi,
      "timestamp": Quãng thời gian,
      "recipientId": Id của người gửi,
      "signature": Chữ ký của khối dữ liệu,
      "ID": Id của giao dịch,
      "fee": 100000000,
      "senderId": Id của người gửi,
      "asset": {
      "votes": Mảng chứa phiếu bầu
      }
      ...
    }
    
    Kích thước tối đa cuối cùng của giao dịch có chữ ký là 2262 byte và với chữ ký thứ hai là 2326 byte.

    6. Giao dịch đăng ký ký tập thể


    Một giao dịch đăng ký ký tập thể(loại 4) là một giao dịch được sử dụng để thêm chữ ký tập thể vào một tài khoản. Tham khảo mục 3.3 để biết thêm thông tin về ký tập thể. Các trường sau đây là cần thiết để tạo một giao dịch đăng ký multisignature:
    • Mã bí mật: Mã bí mật của tài khoản ký tập thể sẽ được áp dụng.
    • Keysgroup: Mảng của các khóa để thêm hoặc xoá khỏi tài khoản multisignature.
    • Min: Số chữ ký tối thiểu cần thiết để xác nhận tính hợp lệ một giao dịch (Tối thiểu là 2)
    • Lifetime: Thời gian chờ đợi đủ chữ ký trước khi loại bỏ giao dịch.
    Mỗi khóa công khai trong nhóm khóa nếu được thêm dấu '+' vào thì sẽ cho phép khóa công khai đó được thêm vào tài khoản multisignature. Số chữ ký tối thiểu cần thiết để xác nhận tính hợp lệ một giao dịch phải từ 2 đến tối đa là 16. Số tiền tối thiểu của các khóa trong nhóm khóa là hai.

    Lifetime được quy định theo giờ và tối thiểu phải là 1 giờ và tối đa là 24 giờ. Khi các trường đó được xác định thì hệ thống sẽ tính toán khóa công khai của tài khoản và bắt đầu tạo khối dữ liệu của giao dịch. Kích thước của khối dữ liệu phụ thuộc vào số lượng khóa được thêm vào giao dịch đăng ký multisignature. Mỗi khóa là 65 byte do bổ sung các bộ sửa đổi.

    Khối dữ liệu này sau đó được ký sử dụng mã bí mật của người dùng, và chữ ký được nối vào đối tượng giao dịch. Hệ thống sau đó sẽ tính phí của giao dịch. Trong quá trình thực hiện, phí cho một giao dịch đăng ký multisignature là 5 Lisk cho mỗi khóa trong nhóm keygsgroup. Lưu ý rằng khóa của tài khoản tạo giao dịch được thêm ngầm định vào trong multisignature.

    Đối tượng được biểu diễn bằng sơ đồ sau:

    Blocks-Lisk-10.png
    Đối tượng JSON sẽ được phát tán tới mạng và theo định dạng dưới đây:
    Mã:
    {
      "type": 4,
      "amount": 0,
      "senderPublicKey": Khóa công khai của người gửi,
      "timestamp": Dấu thời gian,
      "recipientId": null,
      "signature": Chữ ký của khối dữ liệu,
      "ID": Id của giao dịch,
      "fee": Phí giao dịch,
      "senderId": Id của người gửi,
      "asset": {
      "multisignature": {
      "min": Số chữ ký tối thiểu yêu cầu,
      "lifetime": Lifetime của giao dịch,
      "keysgroup": Mảng của các khóa để thêm vào multisignature
      }
      }
      ...
    }
    
    Kích thước cuối cùng của một giao dịch với hai khóa trong nhóm khóa là 249 byte và 313 byte nếu tài khoản bật tính năng passphrase thứ hai.

    Giải thuật đồng thuận

    Lisk sử dụng giải thuật đồng thuận Delegated Proof of Stake (DPoS). Các ủy viên là người tạo ra tất cả các khối block trong hệ thống và các ủy viên này được lựa chọn thông qua một hệ thống bầu cử cạnh tranh cao do các bên liên quan thúc đẩy. Số lượng N (hiện nay là N = 101) các ủy viên được lựa chọn để xây dựng khối.

    Mỗi người nắm giữ cổ phần có thể bỏ phiếu cho tối đa 101 ủy viên, và trọng lượng các phiếu bầu phụ thuộc vào số Lisk mà chủ sở hữu cổ phần nắm giữ. Một cổ đông có thể bỏ phiếu cho một ủy viên thông qua giao dịch bỏ phiếu.

    Đồng thuận là một cơ chế bắt buộc của bất kỳ hệ thống blockchain nào. Nó đáp ứng cho một mục đích quan trọng của hệ thống có nhiều nút và tất cả các nút phải đồng ý về tính toàn vẹn của dữ liệu. Tất cả các nút tham gia phải đồng ý về những dữ liệu giao dịch hợp pháp để đẩy chuỗi khối blockchain về phía trước.

    1. Ủy viên

    Một ủy viên là một loại tài khoản mà đã đăng ký thông qua giao dịch đăng ký đại biểu, được đề cập trong mục 5.4. Các tài khoản này có một mục đích đặc biệt trong Lisk vì chúng được phép tạo các khối cho hệ thống với điều kiện là các đại biểu đã được phân bổ đủ số cổ phần của những người dùng trong hệ thống. Bất kỳ tài khoản nào cũng có thể trở thành một đại biểu, nhưng chỉ các tài khoản có cổ phần bắt buộc mới được phép tạo các khối.

    2. Vòng ủy quyền

    Một vòng trong hệ thống có chiều dài chính xác là N khối (N là số xác định tổng số ủy viên tạo khối). Trong một vòng, mỗi ủy viên sẽ tạo chính xác một khối. Nếu một ủy viên được bầu không thể tạo khối trong một vòng thì một đại biểu khác sẽ thay thế và làm chủ khối của họ.

    Vào đầu mỗi vòng, mỗi đại biểu được gán một vị trí cho biết vị trí của họ trong quá trình tạo khối. Khi một nút với một ủy viên đã kích hoạt tạo một khối thì nút gắn kết với ủy viên này sẽ nhóm tối đa 25 giao dịch vào khối, ký nó và phát tán khối đó ra mạng lưới. Khi khối đã được chuyển đến mạng, ủy viên kế tiếp sẽ tiếp tục xử lý chúng.

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

    Xem thêm: Kiến trúc LISK - Phần 1
    Tiền ảo LISK (LSK) là gì

    Nguồn tài liệu https://goo.gl/cVtyD4
     
    #1 Cờ ríp tô cơ rừn si, 2/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...