use avail_rust_client::prelude::*;
use avail_rust_core::avail::proxy::types::ProxyType;
use std::time::{SystemTime, UNIX_EPOCH};
#[tokio::main]
async fn main() -> Result<(), Error> {
normal_proxy().await?;
println!("");
pure_proxy().await?;
println!("");
failed_proxy().await?;
Ok(())
}
async fn normal_proxy() -> Result<(), Error> {
let client = Client::new(LOCAL_ENDPOINT).await?;
let proxy_account = bob();
let main_account = ferdie();
let submittable = client
.tx()
.proxy()
.add_proxy(proxy_account.account_id(), ProxyType::Any, 0);
let submitted = submittable.sign_and_submit(&main_account, Default::default()).await?;
let receipt = submitted.receipt(true).await?.expect("Should be there");
let events = receipt.events().await?;
assert_eq!(events.is_extrinsic_success_present(), true);
let event = events
.first::<avail::proxy::events::ProxyAdded>()
.expect("Should be there");
println!(
"Delegatee: {}, Delegator: {}, ProxyType: {}, Delay: {}",
event.delegatee, event.delegator, event.proxy_type, event.delay
);
let call = client
.tx()
.balances()
.transfer_keep_alive(proxy_account.account_id(), ONE_AVAIL);
let submittable = client.tx().proxy().proxy(main_account.account_id(), None, call);
let submitted = submittable.sign_and_submit(&proxy_account, Default::default()).await?;
let receipt = submitted.receipt(true).await?.expect("Should be there");
let events = receipt.events().await?;
assert_eq!(events.is_extrinsic_success_present(), true);
assert_eq!(events.proxy_executed_successfully(), Some(true));
let event = events
.first::<avail::proxy::events::ProxyExecuted>()
.expect("Should be there");
println!("Result: {:?}", event.result);
let submittable = client
.tx()
.proxy()
.remove_proxy(proxy_account.account_id(), ProxyType::Any, 0);
let submitted = submittable.sign_and_submit(&main_account, Default::default()).await?;
let receipt = submitted.receipt(true).await?.expect("Should be there");
let events = receipt.events().await?;
assert_eq!(events.is_extrinsic_success_present(), true);
let event = events
.first::<avail::proxy::events::ProxyRemoved>()
.expect("Should be there");
println!(
"Delegatee: {}, Delegator: {}, ProxyType: {}, Delay: {}",
event.delegatee, event.delegator, event.proxy_type, event.delay
);
Ok(())
}
async fn pure_proxy() -> Result<(), Error> {
let client = Client::new(LOCAL_ENDPOINT).await?;
let main_account = bob();
let proxy_type = ProxyType::Any;
let index = 0;
let submittable = client.tx().proxy().create_pure(proxy_type, 0, index);
let submitted = submittable.sign_and_submit(&main_account, Default::default()).await?;
let receipt = submitted.receipt(true).await?.expect("Should be there");
let events = receipt.events().await?;
assert_eq!(events.is_extrinsic_success_present(), true);
let event = events
.first::<avail::proxy::events::PureCreated>()
.expect("Should be there");
println!(
"Pure: {}, Who: {}, Proxy Type: {}, index: {}",
event.pure, event.who, event.proxy_type, event.disambiguation_index
);
let proxy_account_id = event.pure;
let key: String = std::format!("{}", SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs());
let call = client.tx().data_availability().create_application_key(key);
let submittable = client.tx().proxy().proxy(proxy_account_id.clone(), None, call);
let submitted = submittable.sign_and_submit(&main_account, Default::default()).await?;
let receipt = submitted.receipt(true).await?.expect("Should be there");
let events = receipt.events().await?;
assert_eq!(events.is_extrinsic_success_present(), true);
assert_eq!(events.proxy_executed_successfully(), Some(true));
let event = events
.first::<avail::proxy::events::ProxyExecuted>()
.expect("Should be there");
println!("Result: {:?}", event.result);
Ok(())
}
async fn failed_proxy() -> Result<(), Error> {
let client = Client::new(LOCAL_ENDPOINT).await?;
let proxy_account = bob();
let main_account = ferdie();
let submittable = client
.tx()
.proxy()
.add_proxy(proxy_account.account_id(), ProxyType::NonTransfer, 0);
let submitted = submittable.sign_and_submit(&main_account, Default::default()).await?;
let receipt = submitted.receipt(true).await?.expect("Should be there");
let events = receipt.events().await?;
assert_eq!(events.is_extrinsic_success_present(), true);
let event = events
.first::<avail::proxy::events::ProxyAdded>()
.expect("Should be there");
println!(
"Delegatee: {}, Delegator: {}, ProxyType: {}, Delay: {}",
event.delegatee, event.delegator, event.proxy_type, event.delay
);
let call = client
.tx()
.balances()
.transfer_keep_alive(proxy_account.account_id(), ONE_AVAIL);
let submittable = client.tx().proxy().proxy(main_account.account_id(), None, call);
let submitted = submittable.sign_and_submit(&proxy_account, Default::default()).await?;
let receipt = submitted.receipt(true).await?.expect("Should be there");
let events = receipt.events().await?;
assert_eq!(events.is_extrinsic_success_present(), true);
assert_eq!(events.proxy_executed_successfully(), Some(false));
let event = events
.first::<avail::proxy::events::ProxyExecuted>()
.expect("Should be there");
println!("Result: {:?}", event.result);
let submittable = client
.tx()
.proxy()
.remove_proxy(proxy_account.account_id(), ProxyType::NonTransfer, 0);
let submitted = submittable.sign_and_submit(&main_account, Default::default()).await?;
let receipt = submitted.receipt(true).await?.expect("Should be there");
let events = receipt.events().await?;
assert_eq!(events.is_extrinsic_success_present(), true);
let event = events
.first::<avail::proxy::events::ProxyRemoved>()
.expect("Should be there");
println!(
"Delegatee: {}, Delegator: {}, ProxyType: {}, Delay: {}",
event.delegatee, event.delegator, event.proxy_type, event.delay
);
Ok(())
}