tinydancer_program_library/
lib.rs1use anchor_lang::prelude::*;
2
3declare_id!("8iRs7VTbXwErab5vUjRH1tzJoUKLJpe2crYPXMZQKFpR");
4
5#[program]
6pub mod tinydancer_program_library {
7 use super::*;
8
9 pub fn push_superblock(ctx: Context<PushSuperblock>, slot_start: u64,random_hash: [u8;32], root: [u8;32], signature: [u8;64], slot_end: u64, ) -> Result<()> {
10
11 ctx.accounts.superblock.validator_identity = ctx.accounts.signer.key();
12 ctx.accounts.superblock.slot_start = slot_start;
13 ctx.accounts.superblock.slot_end = slot_end;
14
15 ctx.accounts.superblock.signature = signature;
16 ctx.accounts.superblock.root = root;
17
18 Ok(())
19 }
20}
21
22#[derive(Accounts)]
23#[instruction(slot_start: u64,random_hash: [u8;32])]
24pub struct PushSuperblock<'info> {
25 #[account(init,seeds=[b"superblock",signer.key().as_ref(),&slot_start.to_be_bytes(),&random_hash],bump,payer=signer,space=Superblock::LEN)]
26 pub superblock: Account<'info,Superblock>,
27
28 #[account(mut)]
29 pub signer: Signer<'info>,
30
31 pub system_program: Program<'info, System>,
32}
33
34#[account]
35pub struct Superblock{
36 pub root: [u8;32],
37 pub signature: [u8;64], pub validator_identity: Pubkey,
39 pub slot_start: u64, pub slot_end: u64 }
42
43impl Superblock{
44 pub const LEN: usize = 8 + 32 + 64 + 32 + 8 + 8;
45}