Skip to content

Commit

Permalink
Update binary files and add Transaction class
Browse files Browse the repository at this point in the history
  • Loading branch information
rah committed Mar 6, 2024
1 parent c48a660 commit c42be26
Show file tree
Hide file tree
Showing 15 changed files with 74 additions and 110 deletions.
42 changes: 35 additions & 7 deletions Abacus.Blockchain.Observables/Blockchain.cs
Original file line number Diff line number Diff line change
@@ -1,26 +1,48 @@
using System;
using System.ComponentModel;
using System.Reactive.Linq;
using Abacus.Observables.Blockchain;

public interface IBitcoinChain {}
public interface IBitcoin: IObservable<IBlock<IBitcoin>> {
string Name { get; }
string Symbol { get; }
string Description { get; }
}

public class BSV : IBitcoinChain {
public class BSV : IBitcoin {
public string Name => "Bitcoin SV";
public string Symbol => "BSV";
public string Description => "Bitcoin SV is a full-node implementation for Bitcoin Cash (BCH) and will maintain the vision of Bitcoin set out by Satoshi Nakamoto’s white paper in 2008: Bitcoin: A Peer-to-Peer Electronic Cash System.";
}public class BTC : IBitcoinChain {

public IDisposable Subscribe(IObserver<IBlock<IBitcoin>> observer)
{
throw new NotImplementedException();
}
}
public class BTC : IBitcoin {
public string Name => "Bitcoin";
public string Symbol => "BTC";
public string Description => "Bitcoin is a decentralized digital currency...";

public IDisposable Subscribe(IObserver<IBlock<IBitcoin>> observer)
{
throw new NotImplementedException();
}
}

public class BCH : IBitcoinChain {
public class BCH : IBitcoin {
public string Name => "Bitcoin Cash";
public string Symbol => "BCH";
public string Description => "Bitcoin Cash is a peer-to-peer electronic cash system that aims to become sound global money with fast payments, micro fees, privacy, and high transaction capacity (big blocks).";
}

public IDisposable Subscribe(IObserver<IBlock<IBitcoin>> observer)
{
throw new NotImplementedException();
}
}

// This interface represents the contract for a service that can provide observable queries over blockchain entities.
public interface IBlockchainQueryService<T> where T : IBitcoinChain {
public interface IBlockchainQueryService<T> where T : IBitcoin {
IQbservable<T> AsQueryable();
}

Expand All @@ -33,7 +55,13 @@ public IQbservable<BTC> AsQueryable() {
}
}

public class Blockchain<T> where T : IBitcoinChain, new()
public class Timechain<T> where T : IChain<T>, new()
{
public DateTime Time { get; set; }
public TimeSpan Duration { get; set; }
}

public class Blockchain<T> where T : Timechain<T>, new()
{
public IObservable<string> CreateObservable()
{
Expand Down
21 changes: 21 additions & 0 deletions Abacus.Blockchain.Observables/Transaction.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;

namespace Abacus.Observables.Blockchain
{
public interface ITransaction<TId, TData>
{
TId GetTransactionId();
TData SetData(TData input);
TData GetData();
}

public class Transaction<TId, TData> : ITransaction<TId, TData>
{
public TId TransactionId { get; set; }
public TData Data { get; set; }

public TId GetTransactionId() => this.TransactionId;
public TData GetData() => this.Data;
public TData SetData(TData input) => this.Data = input;
}
}
19 changes: 14 additions & 5 deletions Abacus/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,20 @@ public static void Main(string[] args)

Console.WriteLine("Mining ... hit CTRL-C to exit.");


var blockObservable = BlockGenerator<Block<BSV>>
.Generate(BlockHelper.ParseMagicNumber(Bitcoin.BSV), Configuration.DataDirPath)
.Do(block =>
Console.WriteLine($"Block: {((Block<BSV>)block).Height}, Hash: {((Block<BSV>)block).Hash}, Previous Hash: {((Block<BSV>)block).PreviousBlockHash}"))
var bitcoinChains =
from bsv in BlockGenerator<Block<BSV>>.Generate(BlockHelper.ParseMagicNumber(Bitcoin.BSV), Configuration.DataDirPath)
from bch in BlockGenerator<Block<BCH>>.Generate(BlockHelper.ParseMagicNumber(Bitcoin.BCH), Configuration.DataDirPath)
from btc in BlockGenerator<Block<BTC>>.Generate(BlockHelper.ParseMagicNumber(Bitcoin.BTC), Configuration.DataDirPath)
select new { bsv, bch, btc }; // Could be any combination of chains

bitcoinChains.Do(block => {
Console.WriteLine($"Block: {((Block<BSV>)block.bsv).Height}, Hash: {((Block<BSV>)block.bsv).Hash}, Previous Hash: {((Block<BSV>)block.bsv).PreviousBlockHash}");
block.bsv.Transactions.ForEach(tx => Console.WriteLine($"Transaction: {tx.Hash}, Block: {tx.BlockHash}, Amount: {tx.Amount}"));
Console.WriteLine($"Block: {((Block<BCH>)block.bch).Height}, Hash: {((Block<BCH>)block.bch).Hash}, Previous Hash: {((Block<BCH>)block.bch).PreviousBlockHash}");
block.bch.Transactions.ForEach(tx => Console.WriteLine($"Transaction: {tx.Hash}, Block: {tx.BlockHash}, Amount: {tx.Amount}"));
Console.WriteLine($"Block: {((Block<BTC>)block.btc).Height}, Hash: {((Block<BTC>)block.btc).Hash}, Previous Hash: {((Block<BTC>)block.btc).PreviousBlockHash}");
block.btc.Transactions.ForEach(tx => Console.WriteLine($"Transaction: {tx.Hash}, Block: {tx.BlockHash}, Amount: {tx.Amount}"));
})
.Do(block =>
{
var sb = block.Serialize();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
[assembly: System.Reflection.AssemblyCompanyAttribute("MauiBlazorNode")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5c5f16c177326faabf3a1cf59535650815b48dec")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("MauiBlazorNode")]
[assembly: System.Reflection.AssemblyTitleAttribute("MauiBlazorNode")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Android33.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Android24.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("android0.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("android24.0")]

// Generated by the MSBuild WriteCodeFragment class.

Original file line number Diff line number Diff line change
@@ -1 +1 @@
4c1f0195616b3c8c972c0f1561887cf50f0b163cdb31c274fb55914d34a5e239
8b675778f989cc60ff061c34f3a8be9bacae3282
Original file line number Diff line number Diff line change
Expand Up @@ -10,80 +10,40 @@ build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = MauiBlazorNode
build_property.RootNamespace = MauiBlazorNode
build_property.ProjectDir = /Users/rah/repos/abacus0/MauiBlazorNode/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.RazorLangVersion = 7.0
build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = /Users/rah/repos/abacus0/MauiBlazorNode
build_property._RazorSourceGeneratorDebug =

[/Users/rah/repos/abacus0/MauiBlazorNode/App.xaml]
build_metadata.AdditionalFiles.GenKind = Xaml
build_metadata.AdditionalFiles.ManifestResourceName = MauiBlazorNode.App.xaml
build_metadata.AdditionalFiles.TargetPath = App.xaml
build_metadata.AdditionalFiles.RelativePath = App.xaml
build_metadata.AdditionalFiles.CssScope =

[/Users/rah/repos/abacus0/MauiBlazorNode/MainPage.xaml]
build_metadata.AdditionalFiles.GenKind = Xaml
build_metadata.AdditionalFiles.ManifestResourceName = MauiBlazorNode.MainPage.xaml
build_metadata.AdditionalFiles.TargetPath = MainPage.xaml
build_metadata.AdditionalFiles.RelativePath = MainPage.xaml
build_metadata.AdditionalFiles.CssScope =

[/Users/rah/repos/abacus0/MauiBlazorNode/Main.razor]
build_metadata.AdditionalFiles.GenKind =
build_metadata.AdditionalFiles.ManifestResourceName =
build_metadata.AdditionalFiles.TargetPath = TWFpbi5yYXpvcg==
build_metadata.AdditionalFiles.RelativePath =
build_metadata.AdditionalFiles.CssScope =

[/Users/rah/repos/abacus0/MauiBlazorNode/Pages/Counter.razor]
build_metadata.AdditionalFiles.GenKind =
build_metadata.AdditionalFiles.ManifestResourceName =
build_metadata.AdditionalFiles.TargetPath = UGFnZXMvQ291bnRlci5yYXpvcg==
build_metadata.AdditionalFiles.RelativePath =
build_metadata.AdditionalFiles.CssScope =

[/Users/rah/repos/abacus0/MauiBlazorNode/Pages/FetchData.razor]
build_metadata.AdditionalFiles.GenKind =
build_metadata.AdditionalFiles.ManifestResourceName =
build_metadata.AdditionalFiles.TargetPath = UGFnZXMvRmV0Y2hEYXRhLnJhem9y
build_metadata.AdditionalFiles.RelativePath =
build_metadata.AdditionalFiles.CssScope =

[/Users/rah/repos/abacus0/MauiBlazorNode/Pages/Index.razor]
build_metadata.AdditionalFiles.GenKind =
build_metadata.AdditionalFiles.ManifestResourceName =
build_metadata.AdditionalFiles.TargetPath = UGFnZXMvSW5kZXgucmF6b3I=
build_metadata.AdditionalFiles.RelativePath =
build_metadata.AdditionalFiles.CssScope =

[/Users/rah/repos/abacus0/MauiBlazorNode/Shared/SurveyPrompt.razor]
build_metadata.AdditionalFiles.GenKind =
build_metadata.AdditionalFiles.ManifestResourceName =
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkL1N1cnZleVByb21wdC5yYXpvcg==
build_metadata.AdditionalFiles.RelativePath =
build_metadata.AdditionalFiles.CssScope =

[/Users/rah/repos/abacus0/MauiBlazorNode/_Imports.razor]
build_metadata.AdditionalFiles.GenKind =
build_metadata.AdditionalFiles.ManifestResourceName =
build_metadata.AdditionalFiles.TargetPath = X0ltcG9ydHMucmF6b3I=
build_metadata.AdditionalFiles.RelativePath =
build_metadata.AdditionalFiles.CssScope =

[/Users/rah/repos/abacus0/MauiBlazorNode/Shared/MainLayout.razor]
build_metadata.AdditionalFiles.GenKind =
build_metadata.AdditionalFiles.ManifestResourceName =
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkL01haW5MYXlvdXQucmF6b3I=
build_metadata.AdditionalFiles.RelativePath =
build_metadata.AdditionalFiles.CssScope = b-oq7846zel2

[/Users/rah/repos/abacus0/MauiBlazorNode/Shared/NavMenu.razor]
build_metadata.AdditionalFiles.GenKind =
build_metadata.AdditionalFiles.ManifestResourceName =
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkL05hdk1lbnUucmF6b3I=
build_metadata.AdditionalFiles.RelativePath =
build_metadata.AdditionalFiles.CssScope = b-npzm2j1ti7
Original file line number Diff line number Diff line change
@@ -1,22 +1,4 @@
// <auto-generated/>
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Maui;
global using global::Microsoft.Maui.Accessibility;
global using global::Microsoft.Maui.ApplicationModel;
global using global::Microsoft.Maui.ApplicationModel.Communication;
global using global::Microsoft.Maui.ApplicationModel.DataTransfer;
global using global::Microsoft.Maui.Authentication;
global using global::Microsoft.Maui.Controls;
global using global::Microsoft.Maui.Controls.Hosting;
global using global::Microsoft.Maui.Controls.Xaml;
global using global::Microsoft.Maui.Devices;
global using global::Microsoft.Maui.Devices.Sensors;
global using global::Microsoft.Maui.Dispatching;
global using global::Microsoft.Maui.Graphics;
global using global::Microsoft.Maui.Hosting;
global using global::Microsoft.Maui.Media;
global using global::Microsoft.Maui.Networking;
global using global::Microsoft.Maui.Storage;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,22 +1,4 @@
// <auto-generated/>
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Maui;
global using global::Microsoft.Maui.Accessibility;
global using global::Microsoft.Maui.ApplicationModel;
global using global::Microsoft.Maui.ApplicationModel.Communication;
global using global::Microsoft.Maui.ApplicationModel.DataTransfer;
global using global::Microsoft.Maui.Authentication;
global using global::Microsoft.Maui.Controls;
global using global::Microsoft.Maui.Controls.Hosting;
global using global::Microsoft.Maui.Controls.Xaml;
global using global::Microsoft.Maui.Devices;
global using global::Microsoft.Maui.Devices.Sensors;
global using global::Microsoft.Maui.Dispatching;
global using global::Microsoft.Maui.Graphics;
global using global::Microsoft.Maui.Hosting;
global using global::Microsoft.Maui.Media;
global using global::Microsoft.Maui.Networking;
global using global::Microsoft.Maui.Storage;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
Expand Down
Binary file modified MauiBlazorNode/obj/Debug/net7.0-ios/MauiBlazorNode.assets.cache
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,22 +1,4 @@
// <auto-generated/>
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Maui;
global using global::Microsoft.Maui.Accessibility;
global using global::Microsoft.Maui.ApplicationModel;
global using global::Microsoft.Maui.ApplicationModel.Communication;
global using global::Microsoft.Maui.ApplicationModel.DataTransfer;
global using global::Microsoft.Maui.Authentication;
global using global::Microsoft.Maui.Controls;
global using global::Microsoft.Maui.Controls.Hosting;
global using global::Microsoft.Maui.Controls.Xaml;
global using global::Microsoft.Maui.Devices;
global using global::Microsoft.Maui.Devices.Sensors;
global using global::Microsoft.Maui.Dispatching;
global using global::Microsoft.Maui.Graphics;
global using global::Microsoft.Maui.Hosting;
global using global::Microsoft.Maui.Media;
global using global::Microsoft.Maui.Networking;
global using global::Microsoft.Maui.Storage;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
Expand Down
Binary file not shown.
Binary file not shown.

0 comments on commit c42be26

Please sign in to comment.