Skip to content

Blockchain based sample docment workflow app.

Notifications You must be signed in to change notification settings

adamtrepka/Factum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Factum

Blockchain

About

Factum is a demonstration of a document workflow based on blockchain. The application was built as Modular Monolith, written in .NET 6.0. Each module is an independent vertical slice with its custom architecture. In order to enhance autonomy between modules, the Integration is based on the event-driven approach.

Starting the application

Start project and infrastructure using docker

docker-compose build
docker-compose up -d

Start API located under Bootstrapper project:

cd src\Bootstrapper\Factum.Bootstrapper
dotnet run

Solution structure

Bootstrapper

Web application responsible for initializing and starting all the modules - loading configurations, running DB migrations, exposing public APIs etc.

Modules

Autonomous modules with the different set of responsibilities, highly decoupled from each other - there's no reference between the modules at all (such as shared projects for the common data contracts), and the synchronous communication & asynchronous integration (via events) is based on local contracts approach.

  • Documents - managing the documents.
  • Ledger - saving business-important operations in the blockchain structure.
  • Validation - validation of newly created blockchain blocks.
  • Saga - transactional handling for the creation and validation of new blockchain blocks.
  • Access - managing access to documents.
  • Users - managing the users/identity.

Each module contains its own HTTP requests definitions file (.rest) using REST Client extension.

Saga

An example implementation of the Saga pattern using the Chronicle package for transactional handling of business processes involving different modules.

Ledger blockchain

Operation of adding documents and changing access is recorded in the form of ledger entries. Each entry contains a set of metadata of the operation.

Each block contains data about previous block and merkle tree root hash build from entries metadata.

Blockchain

TODO

Additional resources

  • Modular Framework - project containing the shared components used in this project.
  • Inflow - the project that inspired the Factum

About

Blockchain based sample docment workflow app.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published