3个版本
0.1.3 | 2021年8月17日 |
---|---|
0.1.2 | 2021年8月17日 |
0.1.0 | 2021年7月20日 |
#117 in #encode-decode
165KB
984 行
gekko
⚠️ 此项目正在进行中,尚未准备好投入生产 => 预期API可能发生更改!
Gekko提供了解析substrate元数据、生成相应的Rust接口、创建交易以及编码/解码这些交易的功能。
该项目分为多个crate,尽管所有功能都可以通过仅使用gekko
来暴露。
gekko
- 包含与Kusama、Polkadot和Westend交互的运行时接口,包括创建交易。gekko-metadata
- 解析和处理substrate元数据的实用工具。- 也可以通过在
gekko
中使用"metadata"
特性来启用。
- 也可以通过在
gekko-generator
- 在编译时基于解析的substrate元数据生成Rust接口的宏。- 也可以通过在
gekko
中使用"generator"
特性来启用。
- 也可以通过在
与运行时交互
Gekko公开了多个接口与Kusama/Polkadot交互,如外设、存储条目、事件、常量和错误。
关于类型的免责声明
此库不假设参数类型,必须手动指定为泛型类型。每个字段都包含一个类型描述,可以作为预期类型的提示,由运行时元数据提供。有关可用的常用类型,请参阅[common
]模块。
外设。
可以通过使用[transaction
]模块中的事务构建器来创建交易。事务格式是分版本的,反映了Substrate历史中的变化。除非您正在处理历史数据,否则您可能希望使用最新版本。
可以从[runtime
]模块中选择外设并相应构建。请参阅[common
]模块,其中包含用于创建事务的实用工具。
示例
use gekko::common::*;
use gekko::transaction::*;
use gekko::runtime::polkadot::extrinsics::balances::TransferKeepAlive;
// In this example, a random key is generated. You probably want to *import* one.
let (keypair, _) = KeyPairBuilder::<Sr25519>::generate();
let currency = BalanceBuilder::new(Currency::Polkadot);
// The destination address.
let destination =
AccountId::from_ss58_address("12eDex4amEwj39T7Wz4Rkppb68YGCDYKG9QHhEhHGtNdDy7D")
.unwrap();
// Send 50 DOT to the destination.
let call = TransferKeepAlive {
dest: destination,
value: currency.balance(50),
};
// Transaction fee.
let payment = currency.balance_as_metric(Metric::Milli, 10).unwrap();
// Build the final transaction.
let transaction: PolkadotSignedExtrinsic<_> = SignedTransactionBuilder::new()
.signer(keypair)
.call(call)
.nonce(0)
.payment(payment)
.network(Network::Polkadot)
.spec_version(9050)
.build()
.unwrap();
解析元数据
Gekko提供实用工具,允许您搜索特定的外设或遍历所有这些。
示例
use gekko::metadata::*;
// Parse runtime metadata
let content = std::fs::read_to_string("metadata_kusama_9080.hex").unwrap();
let data = parse_hex_metadata(content).unwrap().into_inner();
// Get information about the extrinsic.
let extr = data
.find_module_extrinsic("Balances", "transfer_keep_alive")
.unwrap();
assert_eq!(extr.module_id, 4);
assert_eq!(extr.dispatch_id, 3);
assert_eq!(
extr.args,
vec![
("dest", "<T::Lookup as StaticLookup>::Source"),
("value", "Compact<T::Balance>"),
]
);
在 gekko::generator
中可用的宏会自动为您解析元数据,并在编译时生成Rust接口。
许可协议:MIT
依赖项
约14MB
约221K SLoC