paint-brush
WASM của Blockchain ❤️: Quyết định của chươngtừ tác giả@glaze
1,445 lượt đọc
1,445 lượt đọc

WASM của Blockchain ❤️: Quyết định của chương

từ tác giả Glaze8m2023/11/06
Read on Terminal Reader

dài quá đọc không nổi

Arbitrum gần đây đã ra mắt Stylus, máy ảo hợp đồng thông minh dựa trên WebAssugging (WASM). Điều này mang lại một số lợi ích như hỗ trợ ngôn ngữ mở rộng, chi phí thấp hơn, trình biên dịch trước có thể tùy chỉnh và khả năng tương tác với EVM. WASM đang trở nên phổ biến nhờ hiệu suất, kích thước nhỏ gọn, tính di động và hỗ trợ ngôn ngữ. Các chuỗi khác như Polkadot và Cosmos cũng sử dụng nó. Tuy nhiên, Stylus hiện có một số hạn chế. Nó chỉ hỗ trợ C++ và Rust, thiếu hỗ trợ JavaScript/Python. SDK vẫn còn non trẻ. Chưa có mạng thử nghiệm địa phương hoặc xác minh hợp đồng. Chọn ngôn ngữ phù hợp là rất quan trọng - eDSL JavaScript/Python có thể thu hút nhiều nhà phát triển hơn. Điểm chuẩn hiệu suất cho thấy WASM có thể nhanh hơn EVM 4-8 lần. Nhưng có giới hạn kích thước hợp đồng 128KB. Khả năng tương tác EVM-WASM khá toàn diện. Biên dịch trước tùy chỉnh chưa được triển khai. Reentrancy là tùy chọn nhưng bị tắt theo mặc định. Nhìn chung, WASM giúp tăng hiệu suất cho Arbitrum so với zk-rollup. Nhưng EVM vẫn là nền tảng, với WASM hiện là phần bổ sung "EVM+".
featured image - WASM của Blockchain ❤️: Quyết định của chương
Glaze HackerNoon profile picture
0-item

Bản cập nhật gần đây của Arbitrum có tính năng nâng cấp Stylus VM, có một số cải tiến:


  • Hỗ trợ ngôn ngữ mở rộng
  • Giảm chi phí và sử dụng bộ nhớ
  • Trình biên dịch trước có thể tùy chỉnh
  • Khả năng tương thích EVM


Những cải tiến này bắt nguồn từ việc tích hợp WASM, vốn nổi tiếng với nhiều lợi ích trong môi trường dựa trên nền tảng đám mây. Thông tin chi tiết hơn về vai trò của WASM sẽ được đề cập trong các phần tiếp theo.

Người tiên phong

Arbitrum đã giới thiệu WASM cho chuỗi của mình, nhưng đây không phải là nền tảng đầu tiên để làm điều đó. Polkadot trước đây đã cho phép tạo hợp đồng thông minh WASM. Nó cung cấp hai ngôn ngữ cho việc này: một tập lệnh hợp ngữ tương tự như DSL nhúng và một ngôn ngữ lấy cảm hứng từ Rust có tên là ink!


Tương tự, Cosmos sử dụng CosmWasm để thực hiện hợp đồng thông minh của mình. Các nhà phát triển có thể tạo hợp đồng thông minh bằng Rust tại đây.


Trước khi khám phá blockchain ái lực dành cho WASM, chúng ta hãy xem lại lý do cơ bản của Cosmos và Polkadot khi chọn WASM.


Cosmos chào mời WASM vì những ưu điểm sau:

  • Khả năng tương thích thư viện Rust
  • Một cộng đồng nhà phát triển rộng lớn
  • Tăng cường bảo mật, bao gồm ngăn chặn tấn công reentrancy
  • Thủ tục kiểm tra đơn giản hóa
  • Hiệu suất vượt trội


Thời gian chạy WASM của Polkadot có các tính năng như:

  • Màn biểu diễn hiếm có
  • Khả năng tương tác EVM
  • Độc lập nền tảng phần cứng và phần mềm
  • Kích thước nhỏ gọn
  • Hỗ trợ Rust và Assembly Script, giống như Typescript


Polkadot, Cosmos và Arbitrum chia sẻ một số lợi ích do WASM mang lại. Tuy nhiên, Arbitrum có những dịch vụ đặc biệt mà chúng ta sẽ thảo luận sau, cùng với các chi tiết cụ thể của Cosmos.

ĐÃ M

Hãy cùng tìm hiểu WASM là gì và động lực đằng sau nó.

WASM là gì?

WebAssembly (WASM) là định dạng lệnh nhị phân. Nó cho phép mã thực thi ở tốc độ tương đương với các ứng dụng gốc, đặc biệt là trong các trình duyệt web. Là mục tiêu biên dịch cho các ngôn ngữ như C và Rust, nó được tối ưu hóa về tốc độ, hiệu quả và bảo mật. WASM cải thiện đáng kể hiệu suất web và mở rộng các chức năng web.


WASM gắn chặt với web vì nó hoạt động trong môi trường JavaScript giống như trình duyệt. Trong các môi trường này, các nhà phát triển có toàn quyền truy cập vào API WASM cũng như hỗ trợ API Web hoàn chỉnh. Kiểm soát này cho phép các nhà phát triển tinh chỉnh các tương tác trên web.

Sự phát triển của WASM

Khái niệm WASM xoay quanh ý tưởng viết mã một lần để chạy ở mọi nơi.


Trong năm 2016, các chương trình thường xuyên giới thiệu các tính năng mới thông qua Ngôn ngữ dành riêng cho miền (DSL). Việc tạo DSL liên quan đến việc cân bằng giữa bảo trì, hiệu quả và an toàn. Ngành đã tìm kiếm một phương pháp để triển khai các chức năng trên nhiều máy chủ mà không ảnh hưởng đến các khía cạnh này.


Nhiều giải pháp khác nhau đã được xem xét kỹ lưỡng, mỗi giải pháp đều có những thách thức riêng:

  • Máy ảo hệ thống phải vật lộn với chi phí chung, thiếu khả năng hiển thị mã để đảm bảo an toàn và quá trừu tượng để có hiệu suất cao.
  • Các vùng chứa cũng thiếu khả năng hiển thị mã và cũng trừu tượng tương tự, với chi phí đáng kể.
  • Máy ảo cấp độ ngôn ngữ cần phải sửa đổi thường xuyên để đảm bảo an toàn, phát sinh chi phí từ các máy ảo nhúng như V8 và chậm áp dụng ngôn ngữ mới để phù hợp với các mô hình bảo mật.
  • Kiến trúc tập lệnh (ISA) rất khó sửa đổi để tạo hộp cát hiệu quả và thiếu các triển khai hoàn thiện.


WASM nổi lên như một giải pháp. Việc phát triển trình biên dịch WASM bắt đầu và đến năm 2018, khái niệm về khả năng tương thích mã phổ quát trên nhiều kiến trúc và thiết bị khác nhau đã được mở rộng. Không giống như Java, mục tiêu không phải là thỏa hiệp về mặt an toàn.


Năm 2019, mô hình thành phần đã được giới thiệu, nâng cao các mô-đun WASM cho khả năng tương tác đa ngôn ngữ. Ví dụ: sự đổi mới này đã cho phép tạo ra một thư viện HTTP phổ quát có thể áp dụng trên các ngôn ngữ khác nhau, giải quyết các vấn đề phức tạp một cách sáng tạo.

WASM hôm nay

WASM tự hào có một loạt các tính năng ấn tượng:


  • Hiệu suất cao : Mã WASM chạy hiệu quả và nhanh chóng.
  • Kích thước nhỏ gọn : Định dạng nhị phân của WASM đảm bảo dung lượng nhỏ.
  • Tính di động : Nó cho phép cùng một mã byte hoạt động trên mọi thời gian chạy tương thích với WASM.
  • Hỗ trợ ngôn ngữ : WASM hỗ trợ nhiều ngôn ngữ, từ C/C++ và Rust đến Go và Swift, cùng nhiều ngôn ngữ khác.
  • Khả năng tương thích với Công cụ JavaScript : WASM hoạt động trơn tru trong các công cụ JS.
  • Hộp cát : Hộp cát mặc định mạnh mẽ hạn chế quyền truy cập bộ nhớ và CPU để ngăn chặn sự can thiệp từ bên ngoài.
  • Khởi động nhanh : Các mô-đun WASM thường khởi động trong một phần nghìn giây.


Cộng đồng WASM đang tích cực tăng cường tích hợp và hiệu suất trên các ngôn ngữ lập trình khác nhau.

bút cảm ứng

Việc khám phá tiềm năng của WASM và việc sử dụng nó trong các chuỗi khối đưa chúng ta quay trở lại những hạn chế của Arbitrum Stylus.

Chức năng của bút stylus

Đây là bảng phân tích đơn giản về cách hoạt động của Stylus:


  1. Các nhà phát triển sử dụng trình biên dịch WASM tiêu chuẩn, như Clang hoặc Rustc, để biên dịch hợp đồng thông minh của họ thành WASM.
  2. Mã byte WASM thu được sau đó được tải lên chuỗi Arbitrum ở trạng thái nén.
  3. Thông qua phương thức compileProgram trước của ArbWasm , mã byte trải qua quá trình đo đạc để bảo mật, đo khí và được biên dịch thành mã gốc được điều chỉnh cho phần cứng của trình xác thực. Bước này rất quan trọng để nâng cao hiệu suất và bảo mật.
  4. Sau khi gọi, hợp đồng sẽ chạy trên thời gian chạy WASM, chẳng hạn như Wasmer, nhanh hơn đáng kể và tiết kiệm gas hơn EVM.


Trên thực tế, bước thứ ba dường như bổ sung này rất quan trọng. Việc chuyển đổi mã WASM sang mã máy gốc sẽ tăng tốc độ thực thi. Hơn nữa, giai đoạn biên dịch bổ sung này giúp ngăn chặn "bom biên dịch".


"Bom biên dịch" là mã độc được thiết kế nhằm làm cạn kiệt tài nguyên hệ thống trong quá trình biên dịch, có khả năng làm hỏng hoặc làm đình trệ trình biên dịch. Điều này hoạt động như một cuộc tấn công từ chối dịch vụ nhằm cản trở quá trình phát triển phần mềm.

Mối quan tâm về bút stylus

Hỗ trợ ngôn ngữ

Stylus đã mở rộng cộng đồng nhà phát triển của Arbitrum bao gồm C++ và Rust. Tuy nhiên, nó vẫn chưa bao trùm được cộng đồng nhà phát triển phổ biến nhất hiện nay. Nó tạo điều kiện thực hiện hợp đồng thông minh trong trình duyệt nhưng chưa hỗ trợ JavaScript và Python.


Người dùng ngôn ngữ lập trình


Có những dự án ở giai đoạn đầu đang cố gắng kết nối Python và JavaScript với WASM. Tuy nhiên, những thứ này chưa sẵn sàng để áp dụng rộng rãi do sự phức tạp trong việc thu gom rác và lo ngại về hiệu suất.

Khả năng tương thích ngôn ngữ

Stylus hiện hỗ trợ C/C++ và Rust thông qua SDK của nó. Các SDK này tương thích với các công cụ của ngôn ngữ tương ứng. Chúng cũng cho phép tích hợp các thư viện của bên thứ ba, chẳng hạn như mật mã gốc. Hạn chế chính là chi phí gas liên quan đến các thư viện này.


Rust SDK đang ở giai đoạn sơ khai, thiếu một số chức năng. SDK C không hỗ trợ các chức năng xuất bằng ABI. Ngoài ra, cả SDK đều không hỗ trợ việc sử dụng công cụ sửa đổi.


Hiện tại, Stylus không có môi trường thử nghiệm cục bộ. Các nhà phát triển được khuyến khích tiến hành thử nghiệm trong SDK. Testnet là lựa chọn duy nhất để chạy hợp đồng thông minh trên Stylus. Tuy nhiên, testnet vẫn chưa triển khai xác minh hợp đồng thông minh.


Hiện đang có công việc chuyển các token và nền tảng ERC khác nhau như Uniswap V2 sang Stylus.

Lựa chọn ngôn ngữ

Việc lựa chọn giữa Ngôn ngữ dành riêng cho miền (DSL), DSL nhúng (eDSL) hoặc ngôn ngữ lập trình chung là một thách thức. Các nhà phát triển phải cân nhắc lợi ích của việc làm việc "gần với kim loại" để kiểm soát tính dễ sử dụng do tính trừu tượng ở cấp độ cao hơn mang lại, điều này có thể hạn chế tính linh hoạt.


Việc tạo DSL mới cần có thời gian để phát triển chuỗi công cụ và hệ sinh thái của nó. eDSL, là một tập hợp con của ngôn ngữ lập trình chung, duy trì cùng ngữ nghĩa và cú pháp. Nó cho phép các nhà phát triển sử dụng các ngôn ngữ và công cụ hiện có, có thể đơn giản hóa quá trình học tập. eDSL cũng cung cấp khả năng tương tác tốt hơn với mã có mục đích chung. Ví dụ: eDSL dành cho JavaScript hoặc Python sẽ là chiến lược để thu hút cộng đồng nhà phát triển lớn nhất.


Các ngôn ngữ lập trình chung yêu cầu sử dụng SDK để phát triển. Điều này bổ sung thêm các lớp công cụ, tăng tính chi tiết và giảm tính biểu cảm. Nó cũng có thể dẫn đến các lệnh gọi API dài và các hoạt động đối tượng phức tạp.


Chọn ngôn ngữ phù hợp và tạo eDSL có thể là một sự thỏa hiệp lý tưởng. Nó có thể thu hút các nhà phát triển từ các cộng đồng phổ biến và cung cấp các công cụ thân thiện với người dùng. Dữ liệu hiện tại cho thấy cộng đồng Ethereum vẫn là cộng đồng lớn nhất trong số các nhà phát triển tiền điện tử. Tuy nhiên, các hệ sinh thái như Polkadot, Cosmos và Solana sử dụng Rust cho hợp đồng thông minh cũng đang thu hút một số lượng đáng kể các nhà phát triển và đang có tốc độ tăng trưởng nhanh chóng. Nhà phát triển toàn thời gian



Tổng số nhà phát triển


Hiệu suất

WASM có khả năng tăng cường đáng kể tốc độ thực thi và giảm kích thước gói. Mặc dù Stylus chưa được triển khai trên mạng chính nhưng điểm chuẩn từ các mạng khác đóng vai trò là tài liệu tham khảo hữu ích.


Các điểm chuẩn này cho thấy thời gian thực hiện có thể giảm từ 4 đến 8 lần và kích thước được biên dịch có thể giảm một nửa.

Thời gian thực hiện WASM


Kích thước hợp đồng WASM


Stylus áp đặt giới hạn về kích thước hợp đồng, đó là khoảng 128KB không nén. Hạn chế này khiến việc di chuyển các hợp đồng thông minh rất lớn từ các ngôn ngữ như Solidity sang Stylus trở nên khó khăn. Hạn chế này thể hiện rõ trong cơ sở mã Stylus:


 // arbos/programs/programs.go const MaxWasmSize = 128 * 1024 // Maximum WASM size allowed const initialFreePages = 2 // Number of initial free pages const initialPageGas = 1000 // Gas cost for an initial page const initialPageRamp = 620674314 // Adjusts for a target size cost const initialPageLimit = 128 // Maximum number of pages allowed const initialInkPrice = 10000 // Ink price per EVM gas const initialCallScalar = 8 // Scalar for call cost


Điều quan trọng cần lưu ý là WASM phải chịu một số phí tổn khi khởi động và tắt. Đối với các hoạt động rất nhẹ, EVM có thể tiết kiệm chi phí hơn WASM.

Khả năng tương tác EVM-WASM

EVM và WASM sử dụng cùng một khe lưu trữ và cây trạng thái. Stylus đạt được khả năng tương tác với EVM bằng cách triển khai API EVM trong WASM. Sự tích hợp này sử dụng chế độ I/O máy chủ được áp dụng rộng rãi trong WASM. Dưới đây là danh sách đầy đủ các API EVM được hỗ trợ trong WASM, cho biết khả năng hỗ trợ tương tác toàn diện.


 read_args write_result storage_load_bytes32 storage_store_bytes32 call_contract delegate_call_contract static_call_contract do_call create1 create2 do_create read_return_data return_data_size emit_log account_balance account_codehash evm_gas_left evm_ink_left block_basefee block_coinbase block_gas_limit block_number block_timestamp chainid contract_address msg_reentrant msg_sender msg_value native_keccak256 tx_gas_price tx_ink_price tx_prigin memoery_grow console_log_text console_log console_tee

Biên dịch trước tùy chỉnh

Biên dịch trước tùy chỉnh là một khái niệm sáng tạo. Họ có tiềm năng tích hợp các tiền điện tử nguyên thủy tiên tiến trên chuỗi với chi phí thực hiện giảm. Ví dụ: các phép tính tensor có thể được biên dịch trước để giảm chi phí cho việc học máy trên chuỗi. Tuy nhiên, không có bằng chứng nào về chức năng biên dịch trước tùy chỉnh trong cơ sở mã hiện tại. Mặc dù các phần biên dịch trước tồn tại cho EVM nhưng chúng không được thiết kế để có thể hoán đổi được.


Có vẻ như những tính năng này vẫn đang được phát triển nhằm tận dụng khả năng của WASM. Điều này sẽ cho phép EVM gọi các hàm do WASM viết, sau đó được biên dịch thành mã máy.

Tái nhập

Ngược lại với mô hình diễn viên của CosmWasm, không hỗ trợ tính năng đăng ký lại, Rust SDK của Stylus bao gồm tính năng đăng ký lại như một tính năng tùy chọn. Theo mặc định, tính năng này bị tắt. Các nhà phát triển có quyền lựa chọn cho phép đăng ký lại trong hợp đồng của họ.


Việc kích hoạt tính năng truy cập lại sẽ ảnh hưởng đến API vì nhà phát triển phải đảm bảo rằng họ xóa bộ nhớ đệm lưu trữ trong khi gọi và xem xét các biện pháp an toàn khác. Biện pháp phòng ngừa này là cần thiết để ngăn chặn các lỗ hổng tiềm ẩn liên quan đến các cuộc gọi lại.


Tái nhập

Phần kết luận

WASM đang trở nên phổ biến trong miền gốc đám mây, với nhiều blockchain áp dụng nó để thực hiện hợp đồng thông minh. Mặc dù Arbitrum không phải là công ty tiên phong trong việc tích hợp này nhưng việc triển khai nó có thể có tác động lớn. WASM không được định vị để đại tu hoàn toàn bối cảnh blockchain hoặc thay thế EVM. Tuy nhiên, nó có thể nâng cao lợi thế của Arbitrum trước các đợt zk-rollup mới nổi. Thuật ngữ "EVM+" của Arbitrum mô tả chính xác tình huống này. EVM đặt nền tảng cho nền tảng hợp đồng thông minh và WASM có thể tăng cường hiệu suất bổ sung cho Arbitrum.