Công bố ví MultiChain mới PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Thông báo ví MultiChain mới

Một bước tiến quan trọng về hiệu suất và khả năng mở rộng

Sau hai tháng phát triển và thử nghiệm chuyên sâu, chúng tôi tự hào phát hành bản alpha mới nhất của MultiChain, với ví in-node được viết lại hoàn toàn. Ví mới này thay đổi hiệu suất và khả năng mở rộng của việc tạo, nhận và lưu trữ giao dịch trong MultiChain.

Trước khi chúng ta đi vào chi tiết, hãy để tôi cung cấp một số bối cảnh. Khi chúng tôi bắt đầu phát triển MultiChain, chúng tôi đã quyết định sử dụng Bitcoin Core, nút tiêu chuẩn cho mạng bitcoin công cộng, làm điểm khởi đầu. Về mặt lập trình, điều này có nghĩa là MultiChain là một “phân nhánh” của phần mềm bitcoin. Lý do chính của chúng tôi là bitcoin đã (và tiếp tục là) hệ sinh thái tiền điện tử có giá trị cao nhất và được thử nghiệm nhiều nhất, theo một cách nào đó.

Về mặt tích cực, quyết định này đã giúp chúng tôi tiếp cận thị trường một cách nhanh chóng, so với việc lập trình một nút blockchain từ đầu. Mặc dù có nhiều khác biệt giữa các chuỗi khối công khai và riêng tư, nhưng chúng có nhiều điểm chung về mặt kỹ thuật, bao gồm giao thức ngang hàng, cấu trúc giao dịch và khối, tạo và xác minh chữ ký số, quy tắc đồng thuận, quản lý khóa và nhu cầu về một API nút. Việc phân tách từ Bitcoin Core cho phép chúng tôi tận dụng sự trưởng thành của nó và tập trung vào những gì MultiChain bổ sung vào chuỗi khối – khả năng định cấu hình, quyền và hỗ trợ tài sản gốc. Kết quả là chúng tôi đã có thể phát hành bản alpha đầu tiên vào tháng 2015 năm 6, chỉ XNUMX tháng sau khi bắt đầu phát triển.

Tuy nhiên, bên cạnh những lợi ích này, chúng tôi cũng phải chấp nhận thực tế là một số khía cạnh của Bitcoin Core được thiết kế kém. Mặc dù chúng chỉ hoạt động tốt ở quy mô nhỏ nhưng hiệu suất của chúng giảm đáng kể khi mức độ sử dụng tăng lên. Với mạng bitcoin công cộng vẫn bị giới hạn ở một vài giao dịch mỗi giây, đây sẽ không phải là vấn đề đối với hầu hết người dùng Bitcoin Core trong một thời gian dài. Nhưng với các blockchain riêng tư nhắm tới hàng trăm hoặc hàng nghìn giao dịch mỗi giây, chúng tôi biết rằng, sớm hay muộn, những nút thắt này sẽ cần phải được gỡ bỏ.

Ví của Bitcoin Core

“Ví” trong Bitcoin Core luôn là vấn đề quan trọng nhất trong số những điểm yếu này. Công việc của nó là lưu trữ các giao dịch có liên quan đặc biệt đến nút, vì chúng liên quan đến địa chỉ blockchain mà nó sở hữu hoặc “chỉ xem” địa chỉ có hoạt động mà nó đang theo dõi. Ví dụ: mọi giao dịch gửi tiền đến hoặc từ một nút phải được lưu trữ trong ví của nút đó. Và mỗi khi một nút tạo một giao dịch, nó phải tìm kiếm một hoặc nhiều “đầu ra chưa chi tiêu” của các giao dịch ví trước đó mà giao dịch mới sẽ chi tiêu.

Vậy có vấn đề gì với chiếc ví mà chúng tôi kế thừa từ Bitcoin Core? Thực ra có ba điều:

  • Tất cả các giao dịch ví được lưu giữ trong bộ nhớ. Điều này khiến thời gian khởi động chậm và mức sử dụng bộ nhớ tăng nhanh.
  • Nhiều hoạt động thực hiện “quét toàn bộ” không hiệu quả mọi giao dịch trong ví, dù cũ hay mới.
  • Mọi giao dịch trong ví đều được lưu trữ đầy đủ, bao gồm mọi “siêu dữ liệu” tùy ý không có ý nghĩa theo quan điểm của nút và đã được lưu trữ trong chuỗi khối trên đĩa. Điều này rất lãng phí.

Hậu quả là, với khoảng 20,000 giao dịch được lưu trữ, ví Bitcoin Core chậm lại đáng kể. Sau khoảng 200,000, nó thực tế sẽ dừng lại. Tệ hơn nữa, vì chuỗi khối MultiChain cho phép tối đa 8 MB siêu dữ liệu cho mỗi giao dịch (so với 80 byte của bitcoin), yêu cầu bộ nhớ của ví có thể tăng nhanh ngay cả với một số lượng giao dịch nhỏ.

Điều quan trọng cần làm rõ là những thiếu sót này chỉ áp dụng cho Bitcoin Core. , thay vì khả năng xử lý giao dịch chung của nó. Nói cách khác, nó có thể thoải mái xử lý và lưu trữ hàng triệu (thậm chí hàng tỷ) giao dịch không liên quan đến địa chỉ của chính nó, vì chúng được lưu trên đĩa chứ không phải trong bộ nhớ. Ví dụ: nhiều sàn giao dịch và ví bitcoin phổ biến sử dụng Bitcoin Core nguyên trạng nhưng lưu trữ các giao dịch của riêng họ ở bên ngoài thay vì bên trong nút.

Ví mới của MultiChain

Chúng tôi lẽ ra có thể đưa ra yêu cầu tương tự đối với người dùng MultiChain, đó là lưu trữ các giao dịch của riêng họ bên ngoài nút. Tuy nhiên, đây có vẻ không phải là giải pháp phù hợp vì nó sẽ làm phức tạp đáng kể việc thiết lập và bảo trì cho từng người tham gia chuỗi. Vì vậy, thay vào đó, chúng tôi quyết định viết lại chiếc ví từ đầu.

Ví mới khác nhau như thế nào? Nếu bạn có bất kỳ kinh nghiệm nào về cơ sở dữ liệu, câu trả lời có thể hiển nhiên:

  • Thay vì lưu giữ các giao dịch ví trong bộ nhớ, chúng được lưu trữ trên đĩa ở định dạng phù hợp, với các giao dịch quan tâm sẽ được truy xuất khi cần thiết.
  • Thay vì thực hiện quét toàn bộ ví, các giao dịch được “lập chỉ mục” theo nhiều cách khác nhau để cho phép những giao dịch đáp ứng các tiêu chí cụ thể được xác định nhanh chóng.
  • Bất kỳ phần siêu dữ liệu giao dịch nào lớn hơn 256 byte đều không được lưu trữ trong ví. Thay vào đó, ví chứa một con trỏ tới vị trí của siêu dữ liệu đó trong chính chuỗi khối.

Nói cách khác, chúng tôi đã xây dựng lại ví trong nút để được điều khiển cơ sở dữ liệu chính xác (sử dụng Cấp độDB), thay vì dựa vào cấu trúc trong bộ nhớ ngây thơ không thể tìm kiếm một cách hiệu quả. Không có gì đáng ngạc nhiên, sự khác biệt (được đo trên Intel Core i3.4 7 GHz) là khá ấn tượng:

Thông lượng giao dịch ví MultiChain

Sử dụng bộ nhớ

Các biểu đồ cho thấy rằng, khi ví cũ chứa 250,000 giao dịch, tốc độ gửi của nó giảm xuống 3 tx/giây và nó tăng thêm 600 MB vào mức sử dụng bộ nhớ của nút. Ngược lại, ví mới duy trì tốc độ trên 100 tx/giây và chỉ thêm 90 MB. Chúng tôi đã ngừng thử nghiệm ví cũ vào thời điểm này, nhưng ngay cả với 6-8 triệu giao dịch được lưu trữ, ví mới vẫn tiếp tục gửi hơn 100 tx/giây và sử dụng tối đa khoảng 250 MB RAM (do bộ nhớ đệm cơ sở dữ liệu).

Các thử nghiệm này được thực hiện trong điều kiện thực tế, với nhiều địa chỉ và tài sản (và do đó có nhiều đầu ra giao dịch chưa được chi tiêu) trong ví của nút. Trong một kịch bản lý tưởng hóa (một địa chỉ, một nội dung, một vài UTXO), tốc độ gửi liên tục là hơn 400 tx/s. Dù bằng cách nào, như một phần của việc viết lại này, chúng tôi cũng đã tóm tắt chính xác tất cả chức năng của ví đằng sau một giao diện nội bộ rõ ràng. Điều này sẽ giúp dễ dàng hỗ trợ các công cụ cơ sở dữ liệu khác trong tương lai, thậm chí còn mạnh mẽ và tốc độ hơn nữa.

Xin nhắc lại, tất cả những con số này đề cập đến tốc độ mà một nút có thể tạo, gửi và lưu trữ các giao dịch trong ví cục bộ của nó, thay vì thông lượng xử lý các giao dịch do người khác tạo ra. Đối với thông lượng mạng chung, MultiChain hiện có thể xử lý 200 đến 800 tx/giây, tùy thuộc vào phần cứng mà nó đang chạy. (Hãy hoài nghi về bất kỳ phần mềm blockchain nào hứa hẹn những con số như 100,000 tx/giây trên phần cứng thông thường, vì nút thắt cổ chai là xác minh chữ ký số, việc này cần thời gian thực để thực hiện. Nếu các nút không xác minh chữ ký giao dịch riêng lẻ, thì không thể sử dụng blockchain trên toàn độ tin cậy ranh giới, làm cho nó không tốt hơn cơ sở dữ liệu phân tán thông thường.)

Để kết thúc, tôi muốn đề cập đến tính năng chính tiếp theo của MultiChain, tính năng này yêu cầu viết lại ví này. Tính năng này, được gọi là luồng, cung cấp khả năng trừu tượng hóa và API cấp cao để lưu trữ dữ liệu cho mục đích chung trên blockchain. Bạn có thể coi luồng như một cơ sở dữ liệu chuỗi thời gian hoặc khóa-giá trị, với các lợi ích bổ sung liên quan đến blockchain về phân cấp, chữ ký số, dấu thời gian và tính bất biến. Chúng tôi biết nhiều trường hợp sử dụng blockchain có thể sử dụng chức năng này và chúng tôi đang nỗ lực xây dựng nó. Xem không gian này.

Xin vui lòng gửi bất kỳ ý kiến trên LinkedIn.

Phụ lục kỹ thuật

Bắt đầu từ MultiChain alpha 22, bạn có thể xác minh phiên bản nào của ví hiện đang chạy bằng cách kiểm tra walletdbversion lĩnh vực getinfo or getwalletinfo Cuộc gọi API. Một giá trị của 1 có nghĩa là ví Bitcoin Core ban đầu và 2 có nghĩa là ví MultiChain mới.

Nếu bạn chạy phiên bản mới của MultiChain trên chuỗi hiện có, nó sẽ không chuyển sang ví mới ngay lập tức. Bạn có thể nâng cấp ví bằng cách dừng nút và sau đó chạy lại multichaind với các tham số -walletdbversion=2 –rescan. Bạn có thể hạ cấp tương tự bằng cách sử dụng –walletdbversion=1 –rescan.

Theo mặc định, khi bạn bắt đầu một nút trên chuỗi mới, nó sẽ tự động sử dụng ví mới. Bạn có thể thay đổi điều này bằng cách chạy multichaind lần đầu tiên với tham số –walletdbversion=1.

Với ví mới, tất cả API đa chuỗi hoạt động chính xác theo cách tương tự như trước, ngoại trừ các API truy vấn giao dịch cũ getreceivedbyaddress, listreceivedbyaddresslisttransactions (sử dụng listwallettransactions or listaddresstransactions thay vì). Ngoài ra, ví mới không hỗ trợ các lệnh gọi API và tham số liên quan đến cơ chế “tài khoản” được triển khai kém và sắp bị ngừng sử dụng của Bitcoin Core, cơ chế này chưa bao giờ được MultiChain hỗ trợ đúng cách. Các cuộc gọi này bị vô hiệu hóa một cách an toàn kèm theo thông báo lỗi.

Nguồn: https://www.multichain.com/blog/2016/07/announce-the-new-multichain-wallet/

Dấu thời gian:

Thêm từ Đa sắc