3 releases
0.1.2 | Aug 17, 2021 |
---|---|
0.1.1 | Jul 20, 2021 |
0.1.0 | Jul 20, 2021 |
#12 in #extrinsic
Used in 2 crates
13KB
288 lines
gekko
⚠️ This project is heavily work-in-progress and not ready for production ⚠️
Gekko offers utilities to parse substrate metadata, generate the corresponding Rust interfaces, create transactions and the ability to encode/decode those transaction.
The project is split into multiple crates, although all functionality can be
exposed by just using gekko
.
gekko
- Contains runtime interfaces to interact with Kusama, Polkadot and Westend, including creating transactions.gekko-metadata
- Utilities to parse and process substrate metadata.- Can be enabled in
gekko
with the"metadata"
feature.
- Can be enabled in
gekko-generator
- Macro to generate Rust interfaces during compile time based on the the parsed substrate metadata.- Can be enabled in
gekko
with the"generator"
feature.
- Can be enabled in
Interacting with the runtime
Gekko exposes multiple interfaces to interact with Kusama/Polkadot, such as extrinsics, storage entires, events, constants and errors.
Disclaimer about types
This library makes no assumptions about parameter types and must be
specified manually as generic types. Each field contains a type description
which can serve as a hint on what type is being expected, as provided by the
runtime meatadata. See the [common
] module for common types which can be
used.
Extrinsics.
Transactions can be created by using a transaction builder from the
[transaction
] module. The transaction formats are versioned, reflecting
the changes during Substrates history. Unless you're working with historic
data, you probably want the latest version.
Extrinsics can chosen from the [runtime
] module and constructed
accordingly. Take a look at the [common
] module which contains utilities
for creating transaction.
Example
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(9080)
.build()
.unwrap();
Parsing Metadata and generating interfaces
Builder type for creating signed transactions.
License: MIT
Dependencies
~5MB
~101K SLoC