lt_blockchain 0.1.0

Blockchain written with educational purpose by Learn Together Community.
Documentation
// #![allow(dead_code)]
#![allow(non_snake_case)]

use super::digest::*;
use super::transaction::*;
use std::borrow::{ Borrow, BorrowMut };

#[ repr( C ) ]
#[ derive( Debug, Clone, Serialize, Deserialize ) ]
pub struct BlockGeneric< Body >
{
  pub time : i64,
  pub nonce : u32,
  pub pre_hash : Digest,
  pub merkle_hash : Digest,
  pub difficulty : u32,
  pub body : Body,
}

pub type BlockHeader = BlockGeneric< () >;

#[ derive( Debug, Clone, Serialize, Deserialize ) ]
pub struct BlockBody
{
  pub transactions : Vec< Transaction >,
  pub hash : Digest,
}

pub type Block = BlockGeneric< BlockBody >;

//

impl BlockHeader
{
  pub fn proof_of_work( &mut self ) -> Digest
  {
    /*
    issue : https://github.com/Learn-Together-Pro/Blockchain/issues/2
    complexity : difficult
    stage : early
    */
    Digest::new()
  }
  pub fn form( self ) -> Block
  {
    Block::new( self )
  }
}

//

impl Block
{

  pub fn new( header : BlockHeader ) -> Self
  {
    let body = BlockBody
    {
      transactions : vec![],
      hash : Digest::new(),
    };
    Self
    {
      time : header.time,
      nonce : header.nonce,
      pre_hash : header.pre_hash,
      merkle_hash : header.merkle_hash,
      difficulty : header.difficulty,
      body,
    }
  }

  pub fn header( &mut self ) -> &mut BlockHeader
  {
    self.borrow_mut()
  }

}

//

impl Borrow< BlockHeader > for Block
{
  fn borrow<'a>( &'a self ) -> &'a BlockHeader
  {
    // we want zero-copy. instead of making a copy we reinterpret the larget structure containg smaller
    unsafe
    {
      std::mem::transmute::< &'a Block, &'a BlockHeader >( self )
    }
  }
}

//

impl BorrowMut< BlockHeader > for Block
{
  fn borrow_mut<'a>( &'a mut self ) -> &'a mut BlockHeader
  {
    // we want zero-copy. instead of making a copy we reinterpret the larget structure containg smaller
    unsafe
    {
      std::mem::transmute::< &'a mut Block, &'a mut BlockHeader >( self )
    }
  }
}