Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
maciejka committed Aug 2, 2024
1 parent 1d7b6c5 commit 9e2ad3d
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 254 deletions.
181 changes: 0 additions & 181 deletions src/engine.cairo

This file was deleted.

4 changes: 2 additions & 2 deletions src/lib.cairo
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
pub mod engine;
pub mod state;
mod state;
mod validation;
mod main;
33 changes: 0 additions & 33 deletions src/main.cairo
Original file line number Diff line number Diff line change
@@ -1,36 +1,3 @@
use raito::engine::BlockHeaderEngineTrait;
use raito::engine::BlockHeaderEngineImpl;
use raito::engine::BlockHeaderValidationContextTrait;
use raito::engine::BlockHeaderValidationContextImpl;
use raito::engine::BlockHeaderTrait;
use raito::engine::BlockHeaderImpl;
use raito::engine::ChainStateTrait;
use raito::engine::ChainStateImpl;
use raito::engine::ChainState;

fn main() {
println!("Running Raito Bitcoin ZK client");
let block_header = BlockHeaderImpl::new(0, "", "", 0, 0, 0);

// The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
let GENESIS = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f";

let chain_state = ChainState {
block_height: 0,
total_work: 0,
best_block_hash: GENESIS,
current_target: 0,
epoch_start_time: 0,
prev_timestamps: ArrayTrait::new()
};

let mut context = BlockHeaderValidationContextImpl::new(block_header, "", 0, chain_state, 0);
let mut engine = BlockHeaderEngineImpl::new(context);

let res = engine.validate_and_apply_block_header();
if res.is_ok() {
println!("Execution successful");
} else {
println!("Execution failed");
}
}
105 changes: 67 additions & 38 deletions src/state.cairo
Original file line number Diff line number Diff line change
@@ -1,57 +1,86 @@
// https://developer.bitcoin.org/reference/block_chain.html#block-headers
#[derive(Drop, Clone)]
/// Represents the state of the blockchain.
#[derive(Drop, Copy)]
pub struct ChainState {
/// Height of the current block.
pub block_height: u32, // not u256?
/// Total work done.
pub total_work: u256,
/// Best block.
pub best_block_hash: u256,
/// Current block.
pub current_target: u32,
/// Start of the current epoch.
pub epoch_start_time: u32,
/// Previous timestamps.
pub prev_timestamps: Span<u32>,
// TODO: utreexo_roots?
}

/// Represents a block in the blockchain.
///
#[derive(Drop, Copy)]
pub struct Block {
/// block header
pub header: Header,
// TODO: how to handle coinbase transactions?

/// Transactions
pub txs: Span<Transaction>,
}

/// Block header
/// https://developer.bitcoin.org/reference/block_chain.html#block-headers
#[derive(Drop, Copy)]
struct Header {
/// The version of the block.
pub version: u32,
/// The hash of the previous block in the blockchain.
pub prev_block_hash: u256,
/// The Merkle root hash of the transactions in the block.
pub merkle_root_hash: u256,
/// The timestamp of the block.
pub time: u32,
/// The difficulty target for mining the block.
pub bits: u32,
pub nonce: u32
}

// https://developer.bitcoin.org/reference/transactions.html#txin-a-transaction-input-non-coinbase
#[derive(Drop, Clone)]
pub struct TxIn {
txid: u256,
index: u32,
script: ByteArray,
sequence: u32,
/// The nonce used in mining the block.
pub nonce: u32,
}

// https://developer.bitcoin.org/reference/transactions.html#txout-a-transaction-output
#[derive(Drop, Clone)]
pub struct TxOut {
value: i64, // TODO: why signed?
pk_script: ByteArray
}

// https://developer.bitcoin.org/reference/transactions.html#raw-transaction-format
#[derive(Drop, Clone)]
/// Transaction
/// https://developer.bitcoin.org/reference/transactions.html#raw-transaction-format
#[derive(Drop, Copy)]
pub struct Transaction {
/// The version of the transaction.
pub version: i32,
/// The inputs of the transaction.
pub inputs: Span<TxIn>,
/// The outputs of the transaction.
pub outputs: Span<TxOut>,
/// The lock time of the transaction.
pub lock_time: u32,
}

#[derive(Drop, Clone)]
pub struct Block {
pub header: Header,
// TODO: how to handle coinbase transactions?
pub txs: Span<Transaction>
/// Output of a transaction.
/// https://developer.bitcoin.org/reference/transactions.html#txout-a-transaction-output
#[derive(Drop, Copy)]
pub struct TxOut {
/// The value of the output.
value: i64,
/// The public key script of the output.
pk_script: @ByteArray,
}

#[derive(Drop, Clone)]
pub struct ChainState {
pub block_height: u32, // not u256?
pub total_work: u256,
pub best_block_hash: u256,
pub current_target: u32,
pub epoch_start_time: u32,
pub prev_timestamps: Span<u32>,
// TODO: utreexo_roots?
/// Input of a transaction.
/// https://developer.bitcoin.org/reference/transactions.html#txin-a-transaction-input-non-coinbase
#[derive(Drop, Copy)]
pub struct TxIn {
/// The transaction ID of the input.
txid: u256,
/// The index of the input.
index: u32,
/// The script of the input.
script: @ByteArray,
/// The sequence of the input.
sequence: u32,
}

trait BlockValidator {
fn validate_and_apply(self: ChainState, block: Block) -> Result<ChainState, ByteArray>;
}

0 comments on commit 9e2ad3d

Please sign in to comment.