mirror of
https://github.com/serai-dex/serai.git
synced 2024-12-23 12:09:37 +00:00
c511a54d18
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.
75 lines
1.9 KiB
Rust
75 lines
1.9 KiB
Rust
use rand_core::{RngCore, OsRng};
|
|
|
|
use blake2::{
|
|
digest::{consts::U32, Digest},
|
|
Blake2b,
|
|
};
|
|
|
|
use scale::Encode;
|
|
|
|
use serai_client::{
|
|
primitives::{Amount, NetworkId, Coin, Balance, BlockHash, SeraiAddress},
|
|
in_instructions::{
|
|
primitives::{InInstruction, InInstructionWithBalance, Batch},
|
|
InInstructionsEvent,
|
|
},
|
|
coins::CoinsEvent,
|
|
Serai,
|
|
};
|
|
|
|
mod common;
|
|
use common::in_instructions::provide_batch;
|
|
|
|
serai_test!(
|
|
publish_batch: (|serai: Serai| async move {
|
|
let network = NetworkId::Bitcoin;
|
|
let id = 0;
|
|
|
|
let mut block_hash = BlockHash([0; 32]);
|
|
OsRng.fill_bytes(&mut block_hash.0);
|
|
|
|
let mut address = SeraiAddress::new([0; 32]);
|
|
OsRng.fill_bytes(&mut address.0);
|
|
|
|
let coin = Coin::Bitcoin;
|
|
let amount = Amount(OsRng.next_u64().saturating_add(1));
|
|
let balance = Balance { coin, amount };
|
|
|
|
let batch = Batch {
|
|
network,
|
|
id,
|
|
block: block_hash,
|
|
instructions: vec![InInstructionWithBalance {
|
|
instruction: InInstruction::Transfer(address),
|
|
balance,
|
|
}],
|
|
};
|
|
|
|
let block = provide_batch(&serai, batch.clone()).await;
|
|
|
|
let serai = serai.as_of(block);
|
|
{
|
|
let serai = serai.in_instructions();
|
|
let latest_finalized = serai.latest_block_for_network(network).await.unwrap();
|
|
assert_eq!(latest_finalized, Some(block_hash));
|
|
let batches = serai.batch_events().await.unwrap();
|
|
assert_eq!(
|
|
batches,
|
|
vec![InInstructionsEvent::Batch {
|
|
network,
|
|
id,
|
|
block: block_hash,
|
|
instructions_hash: Blake2b::<U32>::digest(batch.instructions.encode()).into(),
|
|
}]
|
|
);
|
|
}
|
|
|
|
let serai = serai.coins();
|
|
assert_eq!(
|
|
serai.mint_events().await.unwrap(),
|
|
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);
|
|
})
|
|
);
|