背景介绍 WebAssembly(Wasm)在Polkadot和Substrate中被用作Runtime的编译对象,但它也是一个新的智能合约平台,并作为Ethereum虚拟机(EVM)的替代品而构建。它是用C、C++或Rust编写的,在执行速度上有很大的改进,并且能够使用Solidity以外的其他语言。 目标 SubQuery的目标是为Substrate/Polkadot的所有执行环境提供支持,包括在链上数据、EVM中的智能合约和WebAssembly(Wasm)中的智能合约。这将使所有DAPP开发人员能够利用相同的优秀的基础设施工具,跨生态系统来构建下一代DAPP。
你将创建一个新的数据处理器的实例,类似于现有的Substrate Frontier EVM处理器。它必须连接到Gear Wasm合约平台(最好也能在其他Wasm合约平台上工作),并以类似于处理来自Substrate Frontier EVM处理器的消息的方式,处理来自Wasm执行的消息。然后,你可以在处理程序中使用这些信息,就像传统的SubQuery项目一样。
一个运行中的项目如下所示:
dataSources:
- kind: substrate/Wasm
startBlock: 1
processor:
file: "./node_modules/@subql/contract-processors/dist/substrateWasm.js"options:
# Any options relating to the smart contract we are executing
mapping:
file: "./dist/index.js"handlers:
- handler: handleWasmEvent
kind: substrate/SubstrateWasmEvent
filter:
# Any filters that make sense
- handler: handleWasmMessage
kind: substrate/SubstrateWasmMessage
filter:
# Any filters that make sense
使用Moonbeam预编译开发DApp,允许各类应用或Solidity智能合约通过Solidity接口与Substrate功能交互。Precompiles是预编译的一段代码或智能合约,最初是由以太坊使用的,用于常用的加密和哈希算法,如SHA256、RIPEMD56、Keccak256等。
Moonbeam目前实现的预编译包括:Parachain Staking、Pallet Democracy、XCM transactor、xTokens、Author Mapping、Asset-ERC-20等等。通过使用这些预编译,开发者可以搭建轻松与波卡底层功能交互的DApp,例如: