Blockchain

We had 2 engineering meetings where we discussed blockchain in general:

There are many different blockchains out there, and while they have a lot of similarities, the programming model for each is fairly distinct. For now, FP Complete is specializing in Cosmos development. Please see the dedicated Cosmos training docs for more information.

Blockchain architecture

This diagram is meant to be shared externally in some form as a marketing message around our abilities with blockchain. I've tried to make it more generic by not referring to specific service providers (like AWS) or chain-specific tools (like Rust or CosmWasm).

graph LR
    subgraph "Chain"
        node(Node Provider) -->|Broadcast transaction| validators(Chain Validators)
        validators -->|Produce blocks| node
        sc(Smart Contracts) -->|Modify| state(Chain State)
        sc -->|Query| state
        node -->|Execute| sc
        node -->|Query| sc
    end

    subgraph "Team"
        dev(fa:fa-user Developers)
        scDeployer(fa:fa-user Smart Contract Deployer)
        frontendDeployer(fa:fa-user Frontend Deployer)
        sre(fa:fa-user Site Reliability Engineer)
    end

    subgraph "Code Management"
        git -->|Trigger Build| ci(Continuous Integration)
        ci -->|Push image| registry(Docker Registry)
        ci -->|Compile| scArtifacts(Smart Contract storage)
    end

    dev -->|Push Code| git(Git Repo)
    sre -->|Deploy Service| orchestration
    orchestration -->|Pull image| registry
    frontendDeployer -->|Manual frontend deploy| web

    scDeployer -->|Download| scArtifacts
    scDeployer -->|Deploy contracts| node

    subgraph "Cloud Provider"
        orchestration(Orchestration service)

        indexerProcessor(Indexer event Processor)

        subgraph indexerAsg[Indexer Auto-scaling Group]
            indexerRest(RESTful API Server)
        end

        indexerProcessor -->|Store events| sql(Managed SQL Database)
        indexerRest -->|Query| sql

        subgraph queryAsg[Query Optimizer ASG]
            querier(Query Optimizer)
        end

        orchestration -->|Update image| indexerAsg
        orchestration -->|Update image| queryAsg
    end

    indexerProcessor -->|Load events| node
    querier --> node

    subgraph "Content Delivery Network (CDN)"
        web(Web Application)
    end

    subgraph "fa:fa-user End User"
        mobileWallet(fa:fa-wallet Mobile Wallet) --> web
        mobileBrowser(fa:fa-mobile Mobile Browser) --> web
        desktopBrowser(fa:fa-desktop Desktop Browser) --> web
    end

    web -->|Query| indexerRest
    web -->|Query| querier