# Amberdata WB3 - Cosmos & Polkadot Blockchain Support
### Goal:
Integrate Cosmos and/or Polkadot blockchains into Amberdata, utilizing the public Amberdata inbound API, by extending the wb3 & wb3-model package that can be run to collect and interact directly with a blockchain node.
### Background:
Amberdata provides context for multiple blockchains, and delivers APIs for interfacing, metrics, full RPC, etc. The core business model is providing the full scope of a full node with all of its capabilities, as well as additional contexts & metrics.
#### How does this work?
Amberdata or partners/private blockchains run full nodes, which keep track of the entire state and data of a blockchain. This node is accessed from a process or proxy directly connecting to read previous data, validate ongoing data, and aggregate all confirmed state as it finalizes. This process keeps track internally about current state and is responsible for signaling re-organized blocks, forks, or any custom logic to a specific blockchain.
### Inbound API Docs:
https://blockchains.amberdata.io/api-explorer/
#### Reference Resources:
* WB3: https://github.com/amberdata/wb3
* WB3-Model: https://github.com/amberdata/wb3-model
* Architecture Diagram for WB3: https://drive.google.com/file/d/1ewZRGwRnHmoW-IRTJA8aOCNYg3Xn40kS/view?usp=sharing
##### Old References:
* Core: https://github.com/amberdata/inbound-core
* A set of utilities which simplifies interacting with the Inbound API
* Model: https://github.com/amberdata/inbound-domain-model
* Global blockchain data models, with raw and derived types
* Stellar: https://github.com/amberdata/stellar-ingestion-api-module
* Example integration using the above two packages
### Current Project Details:
We have been working on two projects:
1. Core data model definitions that work for multi-blockchain. These are definitions that are an abstraction of many blockchain features for consensus, function and state. All definitions are made in protocol buffers, as it is a good base to generate all other uses (Typescript, OpenApi, GraphQL, JSON, etc).
2. Blockchain Instance Module - An extendable library that bootstraps all core data model types, formats raw blockchain data into the standard models, and provides to plugins or aggregations. This allows us to define a blockchain connection to a node, define mappings between data models, then utilize data in plugins without writing lots of similar blockchain logic. Main use case currently is to send the formatted data sets to Amberdata inbound API for indexing.
### Deliverables:
* Language Preferences: Typescript, Go
* Chain Configuration:
* Node connection variables
* Supported blockchain data types
* Supported blockchain features (EX: IBC, RPC, mainnet/sidechain/parachain)
* **Extended Module: Adapter**
* Setup Adapter, that connects to node (see Adapter example for Ripple)
* **Cosmos:**
* Support Blockchain Data Types: Blocks, Transactions, Validators, Genesis (Needs BRD finalization) Each data type needs to extend current functionality, and sending data to the formatters.
* RPC Proxy (support all methods except any account/wallet methods)
* Base cryptocurrency support: ATOM
* IBC Proxy (optional, discussion needed)
* Logic for handling connections, blockchain events, runtime, etc.
* Question: Are there token standards for cosmos?
* Question: Can this support DEX functionality with our Order & Trade data types?
* **Polkadot:**
* Support Blockchain Data Types: Addresses/Accounts, Blocks, Transactions, logs/events, Validators, Slots/Proposals, Genesis (Needs BRD finalization) Each data type needs to extend current functionality, and sending data to the formatters.
* RPC Proxy (support all methods except any account/wallet methods)
* Base cryptocurrency support: DOT
* IBC Proxy (optional, discussion needed)
* Logic for handling connections, blockchain events, runtime, etc.
* Question: What other features are we missing?