General idea is to make abstraction level for common usage of DAG, Blockchain and No-Chain mode. In the code its present pseudo object *dap_chain_t* that holds all the abstractions.
Chain structure: atoms, organization
Chain consists from atomic chain elements - chain atoms. Atom is only abstraction: it could be block, event or just id for database record for no-chain storage. An atom could hold inside one or more datums - custom data that stores in chain. It could be transaction, certificate, smart contract, token declaration, token emission or any another custom data.
Celled, non-celled chains
Chain itself could be celled (sharded) or non-celled. So it could be single set of consistent data or lot of them. Keep in mind: cell is not a part of chain. Its part of the network. Chain could be or not to be associated with cell. For CellFrame Network and CellFrame Chain the cell its just kind of id thats used for breaking down the network on independent segemnts thats has its own datasets - chains, [[gdb | whitelist (GDB - GlobalDB) ], mempools and etc
One of the variant of realization for chain. If its blockchain, every atom is block with lot of datums inside and usualy only one hash link to the previous block. Usualy its prefered for PoW consensus chains but possible to use it for PoS or anything else. More details here
Directed acyclic graph is most used chain variant. DAG consists from events, every event nests only one datum and usualy few more hash links to another events. Events are adding by sets, forming connected graphs and called "round". Round while forming is in GDB, not in chains and could have different rules for the forming (Hashgraph, PoT). More details here