tinydancer_program_library/
lib.rs

1use 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], // signed root
38 pub validator_identity: Pubkey,
39 pub slot_start: u64, // inclusive
40 pub slot_end: u64 // exclusive
41}
42
43impl Superblock{
44    pub const LEN: usize = 8 + 32 + 64 + 32 + 8 + 8;
45}