Move serai-client off serai-runtime, MIT licensing it

Uses a full-fledged serai-abi to do so.

Removes use of UncheckedExtrinsic as a pointlessly (for us) length-prefixed
block with a more complicated signing algorithm than advantageous.

In the future, we should considering consolidating the various primitives
crates. I'm not convinced we benefit from one primitives crate per pallet.
This commit is contained in:
Luke Parker
2023-12-07 02:30:09 -05:00
parent 6416e0079b
commit c511a54d18
38 changed files with 484 additions and 378 deletions

View File

@@ -67,7 +67,7 @@ serai_test!(
let serai = serai.coins();
assert_eq!(
serai.mint_events().await.unwrap(),
vec![CoinsEvent::Mint { to: address.into(), balance }]
vec![CoinsEvent::Mint { to: address, balance }]
);
assert_eq!(serai.coin_supply(coin).await.unwrap(), amount);
assert_eq!(serai.coin_balance(coin, address).await.unwrap(), amount);

View File

@@ -7,7 +7,7 @@ use blake2::{
use scale::Encode;
use serai_runtime::coins::primitives::OutInstructionWithBalance;
use serai_abi::coins::primitives::OutInstructionWithBalance;
use sp_core::Pair;
use serai_client::{
@@ -68,7 +68,7 @@ serai_test!(
assert_eq!(
serai.coins().mint_events().await.unwrap(),
vec![CoinsEvent::Mint { to: address.into(), balance }]
vec![CoinsEvent::Mint { to: address, balance }]
);
assert_eq!(serai.coins().coin_supply(coin).await.unwrap(), amount);
assert_eq!(serai.coins().coin_balance(coin, address).await.unwrap(), amount);
@@ -86,22 +86,17 @@ serai_test!(
balance,
instruction: OutInstruction { address: external_address, data: Some(data) },
};
let serai = serai.into_inner();
let block = publish_tx(
serai,
&serai
.sign(
&pair,
&SeraiCoins::burn_with_instruction(instruction.clone()),
0,
0,
)
&serai.sign(&pair, SeraiCoins::burn_with_instruction(instruction.clone()), 0, 0),
)
.await;
let serai = serai.as_of(block).coins();
let events = serai.burn_with_instruction_events().await.unwrap();
assert_eq!(events, vec![CoinsEvent::BurnWithInstruction { from: address.into(), instruction }]);
assert_eq!(events, vec![CoinsEvent::BurnWithInstruction { from: address, instruction }]);
assert_eq!(serai.coin_supply(coin).await.unwrap(), Amount(0));
assert_eq!(serai.coin_balance(coin, address).await.unwrap(), Amount(0));
})

View File

@@ -1,4 +1,4 @@
use serai_runtime::primitives::{Coin, Amount};
use serai_abi::primitives::{Coin, Amount};
use serai_client::{Serai, SeraiDex};
use sp_core::{sr25519::Pair, Pair as PairTrait};
@@ -18,7 +18,7 @@ pub async fn add_liquidity(
let tx = serai.sign(
&pair,
&SeraiDex::add_liquidity(coin, coin_amount, sri_amount, Amount(1), Amount(1), address.into()),
SeraiDex::add_liquidity(coin, coin_amount, sri_amount, Amount(1), Amount(1), address.into()),
nonce,
0,
);
@@ -40,7 +40,7 @@ pub async fn swap(
let tx = serai.sign(
&pair,
&SeraiDex::swap(from_coin, to_coin, amount_in, amount_out_min, address.into()),
SeraiDex::swap(from_coin, to_coin, amount_in, amount_out_min, address.into()),
nonce,
Default::default(),
);

View File

@@ -2,12 +2,10 @@ use core::time::Duration;
use tokio::time::sleep;
use scale::Encode;
use serai_client::Serai;
use serai_client::{Transaction, Serai};
#[allow(dead_code)]
pub async fn publish_tx(serai: &Serai, tx: &[u8]) -> [u8; 32] {
pub async fn publish_tx(serai: &Serai, tx: &Transaction) -> [u8; 32] {
let mut latest = serai
.block(serai.latest_finalized_block_hash().await.unwrap())
.await
@@ -39,8 +37,8 @@ pub async fn publish_tx(serai: &Serai, tx: &[u8]) -> [u8; 32] {
block.unwrap()
};
for transaction in block.transactions() {
if transaction.encode() == tx {
for transaction in &block.transactions {
if transaction == tx {
return block.hash();
}
}

View File

@@ -3,7 +3,7 @@ use scale::Encode;
use sp_core::{Pair as PairTrait, bounded_vec::BoundedVec, hashing::blake2_256};
use serai_runtime::in_instructions::primitives::DexCall;
use serai_abi::in_instructions::primitives::DexCall;
use serai_client::{
primitives::{
@@ -37,22 +37,22 @@ serai_test!(
vec![
DexEvent::PoolCreated {
pool_id: Coin::Bitcoin,
pool_account: PublicKey::from_raw(blake2_256(&Coin::Bitcoin.encode())),
pool_account: PublicKey::from_raw(blake2_256(&Coin::Bitcoin.encode())).into(),
lp_token: Coin::Bitcoin,
},
DexEvent::PoolCreated {
pool_id: Coin::Ether,
pool_account: PublicKey::from_raw(blake2_256(&Coin::Ether.encode())),
pool_account: PublicKey::from_raw(blake2_256(&Coin::Ether.encode())).into(),
lp_token: Coin::Ether,
},
DexEvent::PoolCreated {
pool_id: Coin::Dai,
pool_account: PublicKey::from_raw(blake2_256(&Coin::Dai.encode())),
pool_account: PublicKey::from_raw(blake2_256(&Coin::Dai.encode())).into(),
lp_token: Coin::Dai,
},
DexEvent::PoolCreated {
pool_id: Coin::Monero,
pool_account: PublicKey::from_raw(blake2_256(&Coin::Monero.encode())),
pool_account: PublicKey::from_raw(blake2_256(&Coin::Monero.encode())).into(),
lp_token: Coin::Monero,
},
]
@@ -91,8 +91,8 @@ serai_test!(
assert_eq!(
events,
vec![DexEvent::LiquidityAdded {
who: pair.public(),
mint_to: pair.public(),
who: pair.public().into(),
mint_to: pair.public().into(),
pool_id: Coin::Monero,
coin_amount: coin_amount.0,
sri_amount: sri_amount.0,
@@ -140,8 +140,8 @@ serai_test!(
assert_eq!(
events,
vec![DexEvent::SwapExecuted {
who: pair.clone().public(),
send_to: pair.public(),
who: pair.clone().public().into(),
send_to: pair.public().into(),
path,
amount_in: amount_in.0,
amount_out: 16633299966633
@@ -160,8 +160,8 @@ serai_test!(
assert_eq!(
events,
vec![DexEvent::SwapExecuted {
who: pair.clone().public(),
send_to: pair.public(),
who: pair.clone().public().into(),
send_to: pair.public().into(),
path,
amount_in: amount_in.0,
amount_out: 17254428681101
@@ -220,8 +220,8 @@ serai_test!(
assert_eq!(
events,
vec![DexEvent::SwapExecuted {
who: pair.clone().public(),
send_to: pair.public(),
who: pair.clone().public().into(),
send_to: pair.public().into(),
path,
amount_in: amount_in.0,
amount_out: 12453103964435,
@@ -275,8 +275,8 @@ serai_test!(
assert_eq!(
events,
vec![DexEvent::LiquidityAdded {
who: IN_INSTRUCTION_EXECUTOR.into(),
mint_to: pair.public(),
who: IN_INSTRUCTION_EXECUTOR,
mint_to: pair.public().into(),
pool_id: Coin::Bitcoin,
coin_amount: 10_000_000_000_000, // half of sent amount
sri_amount: 6_947_918_403_646,
@@ -363,8 +363,8 @@ serai_test!(
assert_eq!(
events,
vec![DexEvent::SwapExecuted {
who: IN_INSTRUCTION_EXECUTOR.into(),
send_to: IN_INSTRUCTION_EXECUTOR.into(),
who: IN_INSTRUCTION_EXECUTOR,
send_to: IN_INSTRUCTION_EXECUTOR,
path,
amount_in: 20_000_000_000_000,
amount_out: 11066655622377
@@ -402,8 +402,8 @@ serai_test!(
assert_eq!(
events,
vec![DexEvent::SwapExecuted {
who: IN_INSTRUCTION_EXECUTOR.into(),
send_to: out_address.as_native().unwrap().into(),
who: IN_INSTRUCTION_EXECUTOR,
send_to: out_address.as_native().unwrap(),
path,
amount_in: 20_000_000_000_000,
amount_out: 26440798801319
@@ -440,8 +440,8 @@ serai_test!(
assert_eq!(
events,
vec![DexEvent::SwapExecuted {
who: IN_INSTRUCTION_EXECUTOR.into(),
send_to: out_address.as_native().unwrap().into(),
who: IN_INSTRUCTION_EXECUTOR,
send_to: out_address.as_native().unwrap(),
path,
amount_in: 10_000_000_000_000,
amount_out: 10711005507065