Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Subscribe to Runtime upgrades for proper extrinsic construction #513

Merged
merged 38 commits into from
May 11, 2022
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
94fa3c3
subxt: Add subscription to runtime upgrades
lexnv Apr 20, 2022
dc8e0af
subxt: Synchronize and expose inner `RuntimeVersion` of the `Client`
lexnv Apr 20, 2022
934d6b5
examples: Add runtime update example
lexnv Apr 20, 2022
155f738
Merge remote-tracking branch 'origin/master' into 509_runtime_upgrades
lexnv May 2, 2022
cebb74b
subxt: Expose `RuntimeVersion` as locked
lexnv May 2, 2022
fea8441
subxt: Expose `Metadata` as locked
lexnv May 2, 2022
532a2e8
subxt/storage: Use locked metadata
lexnv May 2, 2022
90b69fc
subxt: Use parking lot RwLock variant for locked metadata
lexnv May 2, 2022
3402f6d
subxt: Utilize locked metadata variant
lexnv May 2, 2022
90c9f62
subxt/transaction: Use locked metadata variant
lexnv May 2, 2022
f344206
Update subxt to use locked version of the Metadata
lexnv May 2, 2022
997a358
subxt: Add runtime update client wrapper
lexnv May 2, 2022
c4a3da1
examples: Modify runtime update example
lexnv May 2, 2022
363b191
Merge remote-tracking branch 'origin/master' into 509_runtime_upgrades
lexnv May 2, 2022
66907a8
Fix clippy
lexnv May 2, 2022
ef0610d
Fix cargo check
lexnv May 3, 2022
8834279
codegen: Keep consistency with cargo check fix
lexnv May 3, 2022
f92bed7
subxt: Remove unnecessary Arc
lexnv May 3, 2022
9af2a6c
subxt: Remove MetadataInner and use parking_lot::RwLock
lexnv May 3, 2022
33879a0
Update polkadot.rs
lexnv May 3, 2022
988f758
Update polkadot.rs generation comment
lexnv May 3, 2022
f5bde9b
subxt: Switch to async::Mutex
lexnv May 4, 2022
8b3ba4a
subxt: Block executor while decoding dynamic events
lexnv May 4, 2022
ced4646
codegen: Use async API to handle async locking
lexnv May 4, 2022
e8ecbab
Remove unused dependencies
lexnv May 4, 2022
5423f6e
Update examples and integration-tests
lexnv May 4, 2022
4a79933
Fix test deadlock
lexnv May 5, 2022
d328f55
Revert back to sync lock
lexnv May 5, 2022
d2ab196
subxt: Perform RuntimeVersion update before fetching metadata
lexnv May 5, 2022
c7a6382
Reintroduce MetadataInner
lexnv May 5, 2022
aef753c
Use parking lot instead of std::RwLock
lexnv May 5, 2022
68bf00d
subxt: Reduce lock metadata time when decoding events
lexnv May 5, 2022
4a95623
Merge remote-tracking branch 'origin/master' into 509_runtime_upgrades
lexnv May 9, 2022
43f00c9
codegen: Update `validate_metdata` locking pattern
lexnv May 9, 2022
3a390ae
subxt/examples: Update polkadot download link
lexnv May 9, 2022
b9f9d0c
tests: Wrap metadata in a helper function
lexnv May 9, 2022
b1692cd
Update examples/examples/subscribe_runtime_updates.rs
lexnv May 10, 2022
00827ac
subxt/updates: Update runtime if version is different
lexnv May 10, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions codegen/src/api/calls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,13 @@ pub fn generate_calls(
};
let client_fn = quote! {
#docs
pub async fn #fn_name(
pub fn #fn_name(
&self,
#( #call_fn_args, )*
) -> Result<::subxt::SubmittableExtrinsic<'a, T, X, #struct_name, DispatchError, root_mod::Event>, ::subxt::BasicError> {
let runtime_call_hash = {
let locked_metadata = self.client.metadata();
let metadata = locked_metadata.lock().await;
let metadata = locked_metadata.read();
metadata.call_hash::<#struct_name>()?
};
if runtime_call_hash == [#(#call_hash,)*] {
Expand Down
4 changes: 2 additions & 2 deletions codegen/src/api/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ pub fn generate_constants(

quote! {
#( #[doc = #docs ] )*
pub async fn #fn_name(&self) -> ::core::result::Result<#return_ty, ::subxt::BasicError> {
pub fn #fn_name(&self) -> ::core::result::Result<#return_ty, ::subxt::BasicError> {
let locked_metadata = self.client.metadata();
let metadata = locked_metadata.lock().await;
let metadata = locked_metadata.read();
if metadata.constant_hash(#pallet_name, #constant_name)? == [#(#constant_hash,)*] {
jsdw marked this conversation as resolved.
Show resolved Hide resolved
let pallet = metadata.pallet(#pallet_name)?;
let constant = pallet.constant(#constant_name)?;
Expand Down
4 changes: 2 additions & 2 deletions codegen/src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -311,9 +311,9 @@ impl RuntimeGenerator {
T: ::subxt::Config,
X: ::subxt::extrinsic::ExtrinsicParams<T>,
{
pub async fn validate_metadata(&'a self) -> Result<(), ::subxt::MetadataError> {
pub fn validate_metadata(&'a self) -> Result<(), ::subxt::MetadataError> {
let locked_metadata = self.client.metadata();
let metadata = locked_metadata.lock().await;
let metadata = locked_metadata.read();
if metadata.metadata_hash(&PALLETS) != [ #(#metadata_hash,)* ] {
Err(::subxt::MetadataError::IncompatibleMetadata)
} else {
Expand Down
4 changes: 2 additions & 2 deletions codegen/src/api/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ fn generate_storage_entry_fns(
) -> ::core::result::Result<::subxt::KeyIter<'a, T, #entry_struct_ident #lifetime_param>, ::subxt::BasicError> {
let runtime_storage_hash = {
let locked_metadata = self.client.metadata();
let metadata = locked_metadata.lock().await;
let metadata = locked_metadata.read();
metadata.storage_hash::<#entry_struct_ident>()?
};
if runtime_storage_hash == [#(#storage_hash,)*] {
Expand Down Expand Up @@ -307,7 +307,7 @@ fn generate_storage_entry_fns(
) -> ::core::result::Result<#return_ty, ::subxt::BasicError> {
let runtime_storage_hash = {
let locked_metadata = self.client.metadata();
let metadata = locked_metadata.lock().await;
let metadata = locked_metadata.read();
metadata.storage_hash::<#entry_struct_ident>()?
};
if runtime_storage_hash == [#(#storage_hash,)*] {
Expand Down
3 changes: 1 addition & 2 deletions examples/examples/balance_transfer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let hash = api
.tx()
.balances()
.transfer(dest, 123_456_789_012_345)
.await?
.transfer(dest, 123_456_789_012_345)?
.sign_and_submit_default(&signer)
.await?;

Expand Down
3 changes: 1 addition & 2 deletions examples/examples/balance_transfer_with_params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let hash = api
.tx()
.balances()
.transfer(dest, 123_456_789_012_345)
.await?
.transfer(dest, 123_456_789_012_345)?
.sign_and_submit(&signer, tx_params)
.await?;

Expand Down
3 changes: 1 addition & 2 deletions examples/examples/custom_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let hash = api
.tx()
.balances()
.transfer(dest, 10_000)
.await?
.transfer(dest, 10_000)?
.sign_and_submit_default(&signer)
.await?;

Expand Down
2 changes: 1 addition & 1 deletion examples/examples/metadata_compatibility.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
//
// To make sure that all of our statically generated pallets are compatible with the
// runtime node, we can run this check:
api.validate_metadata().await?;
api.validate_metadata()?;

Ok(())
}
9 changes: 3 additions & 6 deletions examples/examples/submit_and_watch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ async fn simple_transfer() -> Result<(), Box<dyn std::error::Error>> {
let balance_transfer = api
.tx()
.balances()
.transfer(dest, 10_000)
.await?
.transfer(dest, 10_000)?
.sign_and_submit_then_watch_default(&signer)
.await?
.wait_for_finalized_success()
Expand Down Expand Up @@ -93,8 +92,7 @@ async fn simple_transfer_separate_events() -> Result<(), Box<dyn std::error::Err
let balance_transfer = api
.tx()
.balances()
.transfer(dest, 10_000)
.await?
.transfer(dest, 10_000)?
.sign_and_submit_then_watch_default(&signer)
.await?
.wait_for_finalized()
Expand Down Expand Up @@ -145,8 +143,7 @@ async fn handle_transfer_events() -> Result<(), Box<dyn std::error::Error>> {
let mut balance_transfer_progress = api
.tx()
.balances()
.transfer(dest, 10_000)
.await?
.transfer(dest, 10_000)?
.sign_and_submit_then_watch_default(&signer)
.await?;

Expand Down
1 change: 0 additions & 1 deletion examples/examples/subscribe_all_events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
api.tx()
.balances()
.transfer(AccountKeyring::Bob.to_account_id().into(), transfer_amount)
.await
.expect("compatible transfer call on runtime node")
.sign_and_submit_default(&signer)
.await
Expand Down
1 change: 0 additions & 1 deletion examples/examples/subscribe_one_event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
api.tx()
.balances()
.transfer(AccountKeyring::Bob.to_account_id().into(), 1_000_000_000)
.await
.expect("compatible transfer call on runtime node")
.sign_and_submit_default(&signer)
.await
Expand Down
1 change: 0 additions & 1 deletion examples/examples/subscribe_runtime_updates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
AccountKeyring::Bob.to_account_id().into(),
123_456_789_012_345,
)
.await
.unwrap()
.sign_and_submit_default(&signer)
.await
Expand Down
1 change: 0 additions & 1 deletion examples/examples/subscribe_some_events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
api.tx()
.balances()
.transfer(AccountKeyring::Bob.to_account_id().into(), 1_000_000_000)
.await
.expect("compatible transfer call on runtime node")
.sign_and_submit_default(&signer)
.await
Expand Down
Loading