
Linera 上手实战从零创建微链钱包、部署第一个 Wasm 应用并通过 GraphQL 查询【免费下载链接】linera-protocolMain repository for the Linera protocol项目地址: https://gitcode.com/GitHub_Trending/li/linera-protocol导读本指南基于 Linera 官方入门文档 hello_linera.md带你走通 Linera 协议开发的第一条完整链路初始化开发者钱包、接入最新 Testnet测试网或本地开发网络、编译counter示例应用、发布到链上最后通过 GraphQL 查询应用状态。读完本篇你将拥有一个属于自己的 Linera 微链microchain以及一个可查询、可交互的可运行应用。前置准备安装 Linera 工具链在开始之前需要先安装 Linera 开发工具链详细步骤见 安装指南。概括来说Linera 工具链由以下几个 crate 组成linera-sdk编写 Linera 应用Wasm 合约的核心 Rust 库linera-service提供linera主客户端用于操作开发者钱包、启动本地测试网络linera-storage-service为本地测试与开发提供简单数据库用于运行验证节点。当前仓库对应的发布版本为0.16.0见 RELEASE_VERSION安装时建议使用与当前 Testnet 兼容的版本。安装完成后可用linera --version验证并确保本机已添加wasm32-unknown-unknown编译目标rustup target add wasm32-unknown-unknown。在最新 Testnet 上创建开发者钱包与 Linera 网络交互的第一步是获得一个开发者钱包、一条新的微链以及一些初始代币。这三者可以一次性通过查询 Testnet 的faucet水龙头服务获得linera wallet init --faucet https://faucet.testnet-conway.linera.net linera wallet request-chain --faucet https://faucet.testnet-conway.linera.net其中testnet-conway对应当前发布域见 RELEASE_DOMAIN。两条命令的作用分别是linera wallet init初始化本地钱包文件含密钥库并接入指定的 faucet 服务linera wallet request-chain向 faucet 请求分配一条带有初始余额的新微链并将其记录到钱包中。如果执行时返回错误请确认使用的 Linera 工具链版本与当前 Testnet 兼容参考 安装指南 中的从 crates.io 安装一节使用与 RELEASE_VERSION0.16.0一致的版本。什么是 Linera TestnetLinera Testnet 是用于测试的 Linera 协议部署。一次部署由多个 验证器validators 组成每个验证器运行一个前端服务即linera-proxy、若干 worker即linera-server以及一个共享数据库默认是linera-storage-service。使用本地测试网络如果不想依赖公共 Testnet也可以在本机启动一个完整的本地开发网络linera net up --with-faucet --faucet-port 8080该命令会以默认分片shard数量启动一个验证器并同时启动一个 faucet 服务监听8080端口。然后在另一个终端窗口中创建钱包linera wallet init --faucet http://localhost:8080 linera wallet request-chain --faucet http://localhost:8080与 Testnet 唯一的区别只是 faucet 的地址从 HTTPS 域名换成了本地端口。⚠️重要提醒钱包仅在它所属网络的整个生命周期内有效。每当本地网络重启都必须删除旧钱包文件并重新创建详见下文多钱包管理中的环境变量方式方便快速切换。使用多个开发者钱包与多个网络默认情况下linera命令会在由操作系统决定的配置路径下寻找钱包文件。如果你希望自己指定钱包文件的存放位置例如为了同时维护多个网络的钱包可以设置以下三个环境变量DIR$HOME/my_directory mkdir -p $DIR export LINERA_WALLET$DIR/wallet.json export LINERA_KEYSTORE$DIR/keystore.json export LINERA_STORAGErocksdb:$DIR/wallet.dbLINERA_WALLET钱包文件路径保存链与应用的映射关系LINERA_KEYSTORE密钥库文件路径保存密钥对LINERA_STORAGE客户端本地存储后端示例中使用rocksdb:前缀指定 RocksDB 数据库文件。由于钱包总是与创建它的网络绑定选择独立目录存放不同网络的钱包可以避免在 Testnet 与本地网络之间切换时互相污染。⚠️开发者钱包 vs 生产钱包由lineraCLI 创建的开发者钱包由开发者工具操作仅用于测试与开发。生产环境的用户钱包通常由浏览器扩展、移动应用或硬件设备托管二者不可混为一谈。与 Linera 网络交互钱包就绪后可以通过两条命令确认网络工作正常——先将本地链与网络其余部分同步再查询链上余额linera sync linera query-balance如果一切正常第二条命令会输出一个数字例如10表示 faucet 为你分配的初始代币余额。构建示例应用counterLinera 上的应用以WasmWebAssembly字节码形式运行每个验证器与客户端都内置了 Wasm 虚拟机VM来执行这些字节码。也就是说你写的应用会先编译成.wasm文件再发布到链上。先构建examples/目录下的counter示例应用该示例的完整源码位于仓库 examples/countercd examples/counter cargo build --release --target wasm32-unknown-unknown编译产物为target/wasm32-unknown-unknown/release/counter_contract.wasm与counter_service.wasm两个文件。从 examples/counter/Cargo.toml 可以看到counter 应用定义了两个二进制目标counter_contract合约入口 src/contract.rs与counter_service服务入口 src/service.rs。从源码结构看counter 应用的代码组织遵循 Linera 应用的标准分层ABI 层src/lib.rs定义CounterAbi与操作类型CounterOperation::Increment { value }声明合约操作返回u64服务查询使用 GraphQL 的Request/Response状态层src/state.rs通过RegisterViewu64定义唯一状态字段value并标注为 GraphQLSimpleObject使value自动成为可查询字段合约层src/contract.rsinstantiate(value)用初始化参数写入计数器初始值execute_operation处理Increment操作并返回新值服务层src/service.rs基于async-graphql构建 schema提供value查询并定义了increment变更mutation通过schedule_operation把操作提交回合约执行。合约与服务的单元测试也一并在仓库中提供见 src/contract.rs 的operation/message/cross_application_call测试以及 src/service.rs 的query测试可作为编写自有应用时的参考模板。发布你的应用编译完成后使用linera客户端的publish-and-create命令将字节码发布到本地网络并创建应用实例。该命令需要提供三个要素合约字节码contract bytecode的位置服务字节码service bytecode的位置JSON 编码的初始化参数。linera publish-and-create \ target/wasm32-unknown-unknown/release/counter_{contract,service}.wasm \ --json-argument 42其中counter_{contract,service}.wasm是 bash 的花括号展开语法等价于依次传入两个 wasm 文件--json-argument 42指定初始化参数为42——对应instantiate中self.state.value.set(value)写入的初始计数。命令成功执行后你的第一个 Linera 应用就发布到链上了查询你的应用接下来验证应用是否可用。为此需要把linera客户端运行在service 模式下——此时客户端同时充当一个节点node具备执行区块、暴露 GraphQL API、监听验证器通知并自动更新本地链等能力详见 节点服务linera service --port 8080在浏览器中打开http://localhost:8080即可进入GraphiQLGraphQL 交互式 IDE。首先列出默认链上部署的所有应用先通过linera wallet show查看你的 chain ID然后执行query { applications(chainId: ...) { id description link } }由于只部署了一个应用返回结果只有一条记录。注意返回 JSON 底部的link字段——将它复制到新浏览器标签页打开就能进入该应用的专属 GraphiQL 界面其底层地址形如localhost:8080/chains/chain-id/applications/application-id。最后查询计数器当前值query { value }结果返回42正是我们在publish-and-create时指定的初始化参数。至此你已经完成了建钱包 → 连网络 → 编应用 → 发布 → 查询的完整闭环。如果你想进一步体验交互性可以试试服务层暴露的变更操作在 src/service.rs 中MutationRoot定义了increment(value: u64)变更它通过schedule_operation把CounterOperation::Increment提交回合约执行执行后再查询value就会看到计数增加。小结通过本指南你掌握了 Linera 开发的基础工作流环节关键命令 / 操作接入 Testnetlinera wallet init --faucet faucet-urllinera wallet request-chain --faucet faucet-url启动本地网络linera net up --with-faucet --faucet-port 8080多网络隔离LINERA_WALLET/LINERA_KEYSTORE/LINERA_STORAGE环境变量网络自检linera synclinera query-balance编译应用cargo build --release --target wasm32-unknown-unknown发布应用linera publish-and-create ... --json-argument 42查询应用linera service --port 8080 GraphiQL 查询下一步可以继续阅读 核心概念微链 理解 Linera 的并行执行模型或通过 节点服务 深入了解 GraphQL API 的完整能力也可以直接阅读 examples/counter/README.md 以及仓库中 examples 目录下的fungible、crowd-funding、matching-engine等更多示例应用。【免费下载链接】linera-protocolMain repository for the Linera protocol项目地址: https://gitcode.com/GitHub_Trending/li/linera-protocol创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考