安装substrate-node-template 这篇文章的内容基于substrate-node-template,安装该项目的方法在之前的文章:《创建第一条Substrate区块链》介绍过,可按文中方法自行安装。 更新Runtime 当节点运行逻辑变更后,旧版本节点生成的区块仍然存在,可以使用purge-chain子命令清除之前生成的区块,以便开发: cd substrate-node-template ./target/release/node-template purge-chain --dev 再次启动最近更改的节点: ./target/release/node-template --dev substrate-node-template还提供了一个init.sh脚本,可以保持在进行Substrate开发时使用最新的Rust stable和nightly版本。 ./scripts/init.sh 创建自定义pallet 现在开始在template模块的基础上修改代码,创建自己的模块。 1、打开substrate-node-template/pallets/template/src/lib.rs,修改代码如下: #![cfg_attr(not(feature = "std"), no_std)] use frame_support::{debug, decl_module, dispatch::DispatchResult}; use frame_system::{ensure_signed}; use sp_runtime::print; pub trait Trait: frame_system::Trait {} decl_module! { pub struct Module<T: Trait> for enum Call where origin: T::Origin { #[weight = 10_000] pub fn say_hello(origin) -> DispatchResult { let caller = ensure_signed(origin)?; print("Hello World"); debug::info!("Request sent by: {:?}", caller); Ok(()) } } } 2、这里使用了sp_runtime,需要在pallets/template/Cargo.toml修改配置: (1)、[dependencies]下添加: sp-runtime = { default-features = false, version = '2.0.0' } sp-runtime原来在[dev-dependencies]下,移过来即可。 (2)、[features]的std下添加: 'sp-runtime/std', 3、还有两个文件,pallets/template/src/mock.rs和pallets/template/src/tests.rs暂时用不上,可以删除。 4、修改runtime/src/lib.rs的代码: (1)、修改第265行代码: impl pallet_template::Trait for Runtime { type Event = Event; } 改为: impl pallet_template::Trait for Runtime {} 这里是配置模块使用的类型,template模块默认是使用Event的,现在不使用,需要删除。 (2)、修改第285行代码: TemplateModule: pallet_template::{Module, Call, Storage, Event<T>}, 改为: TemplateModule: pallet_template::{Module, Call}, 同样是template模块使用的类型,这里是修改construct_runtime!宏中的配置。 编译、启动模板节点 使用cargo build命令编译源码为可执行文件: cargo +nightly-2020-08-23 build --release 然后启动模板节点: ./target/release/node-template --dev -lruntime=debug 注意,这里增加了一个选项-lruntime=debug,这样才会在控制台打印Debug信息。 在polkadot.js Apps中提交交易 打开https://polkadot.js.org/apps,切换网络为DEVELOPMENT-Local Node: 选项卡选择开发者-交易,“提交下面的外部信息”选择templateModule,会自动获取到定义的函数sayHello(): 点击右下角“提交交易”按钮,点击“签名并提交”: 可以看到,使用了125.0001 nano Unit的交易费用。 查看控制台,可以看到打印出了“Hello World”和调试信息: 错误处理 模块函数必须返回Result类型用来处理函数中的错误,返回Ok()表示成功,返回Err()表示失败。 在返回Result的函数末尾使用?运算符,可以将函数进行扩展,例如: my_function()? 表示 match my_function() { Ok(value) => value, Err(msg) => return Err(msg), } 上面源码中的 ensure_signed(origin)? 就使用了这种错误处理机制。 创建Runtime存储 Runtime是基于Substrate的区块链的执行逻辑,也称为状态转换函数(State Transition Function,STF),以WebAssembly二进制文件格式存储在区块链上。 这篇文章介绍Substrate版本的Hello World,只使用了decl_module!宏,没有涉及到存储。 下一篇文章会创建Runtime存储,会使用到decl_storage!宏。 —- 编译者/作者:松果 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
【Substrate开发教程】15 - 创建Substrate版本的Hello World!
2020-10-29 松果 来源:区块链网络
LOADING...
相关阅读:
- 纸贵科技中标苏州企业征信“区块链+征信”项目2020-10-29
- 【昨日币乎1028】低调幽默的猴哥数据调研2020-10-29
- 【昨日币乎1025】今天我870w持仓了,二季度消失的观链哥分析2020-10-29
- Ethereum开发速成课程Part One2020-10-29
- 【昨日币乎1027】仅用7个月就稳坐大佬之位的王大有2020-10-29