daLayer
+1 -1
{
"consensusAlgorithm": {
"name": "BABE/GRANDPA",
"description": "Avail uses the BABE/GRANDPA consensus algorithm. BABE is a block production mechanism that is used to create new blocks in the Avail blockchain. GRANDPA is a finality gadget that is used to finalize blocks.",
"blockTime": 20,
"consensusFinality": 60,
"unbondingPeriod": 1814400
},
"dataAvailabilitySampling": {
"erasureCodingScheme": "2D Reed-Solomon",
"erasureCodingProof": "Validity proofs"
},
"economicSecurity": {
"token": {
"symbol": "AVAIL",
"decimals": 18,
"coingeckoId": "avail"
}
},
"finality": 40,
"pruningWindow": 0,
"risks": {
"economicSecurity": {
"value": {
"value": "Staked assets",
"sentiment": "good",
"description": "There are staked assets on the DA layer that can be slashed in case of a data withholding attack. A dishonest supermajority of validators must collude to finalize a block with missing or invalid data. The invalid block would be added to the chain but rejected by honest full nodes.\n "
},
"adjustSecurityRisk": true
},
"fraudDetection": {
"value": "DAS",
"sentiment": "warning",
"description": "The DA layer uses data availability sampling (DAS) to protect against data withholding attacks. However, the block reconstruction protocol, which enables the minimum number of light nodes to collectively reconstruct the block, is still under development.",
"secondLine": ""
}
},
"sovereignProjectsTrackingConfig": [
{
"projectId": "avail-main",
"name": "Avail",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"0"
]
}
]
},
{
"projectId": "reserved-1",
"name": "Reserved-1",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"1"
]
}
]
},
{
"projectId": "reserved-2",
"name": "Reserved-2",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"2"
]
}
]
},
{
"projectId": "reserved-3",
"name": "Reserved-3",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"3"
]
}
]
},
{
"projectId": "reserved-4",
"name": "Reserved-4",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"4"
]
}
]
},
{
"projectId": "reserved-5",
"name": "Reserved-5",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"5"
]
}
]
},
{
"projectId": "reserved-6",
"name": "Reserved-6",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"6"
]
}
]
},
{
"projectId": "reserved-7",
"name": "Reserved-7",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"7"
]
}
]
},
{
"projectId": "reserved-8",
"name": "Reserved-8",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"8"
]
}
]
},
{
"projectId": "reserved-9",
"name": "Reserved-9",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"9"
]
}
]
},
{
"projectId": "0x84e96bb748abb8a16c28ecc",
"name": "0x84e96bb748abb8a16c28ecc",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"10"
]
}
]
},
{
"projectId": "leouarz-test-app",
"name": "Leouarz test app",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"11"
]
}
]
},
{
"projectId": "bling",
"name": "bling",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"12"
]
}
]
},
{
"projectId": "hello-world",
"name": "hello world",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"13"
]
}
]
},
{
"projectId": "azeazeqsdhfgkjkk",
"name": "azeazeqsdhfgkjkk",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"14"
]
}
]
},
{
"projectId": "jjjtkekznfnxkeke",
"name": "Jjjtkekznfnxkeke",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"15"
]
}
]
},
{
"projectId": "crestal",
"name": "CRESTAL",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"16"
]
}
]
},
{
"projectId": "170889",
"name": "170889",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"18"
]
}
]
},
{
"projectId": "skate-mainnet",
"name": "skate-mainnet",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"19"
]
}
]
},
{
"projectId": "lc85p",
"name": "lc85p",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"20"
]
}
]
},
{
"projectId": "dragonft",
"name": "Dragonft",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"21"
]
}
]
},
{
"projectId": "fuse-l2",
"name": "fuse-l2",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"22"
]
}
]
},
{
"projectId": "antonio",
"name": "antonio",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"23"
]
}
]
},
{
"projectId": "se-avail",
"name": "se-avail",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"24"
]
}
]
},
{
"projectId": "527d69c3",
"name": "527d69c3",
"name": "Rooch Network",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"25"
]
}
]
},
{
"projectId": "kayabey",
"name": "kayabey",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"27"
]
}
]
},
{
"projectId": "kms",
"name": "KMS",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"28"
]
}
]
},
{
"projectId": "dans-awesome-app",
"name": "Dan's Awesome App",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"29"
]
}
]
},
{
"projectId": "up-or-down",
"name": "Up or Down",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"30"
]
}
]
},
{
"projectId": "svmbnb-mainnet",
"name": "svmbnb-mainnet",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"31"
]
}
]
},
{
"projectId": "odysphere",
"name": "odysphere",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"32"
]
}
]
},
{
"projectId": "uwu",
"name": "UwU",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"33"
]
}
]
},
{
"projectId": "space-and-time",
"name": "Space and Time",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"34"
]
}
]
},
{
"projectId": "art-peace",
"name": "art-peace",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"35"
]
}
]
},
{
"projectId": "lens-historical-data",
"name": "lens-historical-data",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"39"
]
}
]
},
{
"projectId": "ody-playground",
"name": "ody_playground",
"daTrackingConfig": [
{
"type": "avail",
"sinceBlock": 0,
"appIds": [
"40"
]
}
]
}
],
"systemCategory": "public",
"technology": {
"description": "\n## Architecture\n\n\n\n\n## Consensus\nAvail implements a Nominated Proof-of-Stake (NPoS) Sybil resistance mechanism, combined with the BABE/GRANDPA consensus protocol. \nBABE handles block production by assigning block production slots according to validators' stake and using a Verifiable Random Function (VRF). \nAt the start of each epoch, nodes run the Block-Production-Lottery algorithm to assign block production slots and share the results with other nodes. \nSlots are randomly assigned, meaning multiple validators might be selected for the same slot (with a 'race' determining who gets to propose the block) and some slots may remain empty. \nTo ensure liveness, secondary block producers are pre-determined and can step in if necessary, preventing any slot from being skipped. \nFinality is achieved through GRANDPA, a GHOST-based finality gadget that provides finality through consecutive rounds of validators voting.\n\n## Blobs\nData submitted to the Avail blockchain through submitData transactions is organized into a data matrix, with each block data divided into equal-sized cells. \nThis matrix is erasure coded using Reed-Solomon (RS) codes and committed using Kate-Zaverucha-Goldberg (KZG) polynomial commitments. \nEach block header on Avail includes two types of attestations: KZG polynomial commitments of the submitted data and the root of a Merkle tree, where the leaves represent the data blobs. \n\n## Data Availability Sampling (DAS)\nAvail ensures data availability through a data availability sampling (DAS) mechanism, which involves both Light clients and App clients.\nLight clients sample the data matrix by requesting data cells, and for each cell they then check the KZG polynomial openings against the commitments in the block header.\nLight clients first attempt to fetch cells using a Kademlia-based Distributed Hash Table (DHT) within a light clients peer-to-peer (P2P) network.\nIf the randomly selected cells are not available via DHT, the light client resorts to RPC calls to the Avail node(s) to obtain the data. Cells retrieved this way are then shared back into the DHT network, enhancing the overall availability of block data.\nAfter gathering the data, the light client verifies the cells and calculates a confidence level, which is stored locally for reference.\n\nApp clients focus on data specific to a given application ID. They reconstruct entire rows of the data matrix by requesting and assembling any missing cells from the network.\n\n## Erasure Coding Proof\n\nAvail uses Kate-Zaverucha-Goldberg (KZG) polynomial commitments as validity proofs of erasure-coded data. Light clients verify the commitments by checking the KZG polynomial openings against the commitments in the block header.\n\n## L2s Data Availability\n\nL2s can post application-specific data blobs to the Avail blockchain through submitData transactions. \nEach transaction contains an application ID that identifies the L2 and adheres to a size limit based on the Avail blockchain’s block size. \nApp-specific data can be reconstructed by app clients, which request and assemble missing cells from the network to complete the data reconstruction process.\n ",
"references": [
{
"title": "Avail Documentation",
"url": "https://docs.availproject.org/docs/welcome-to-avail-docs"
},
{
"title": "Avail Light Client - Source Code",
"url": "https://github.com/availproject/avail-light/blob/main/core/src/light_client.rs"
},
{
"title": "Avail App Client - Source Code",
"url": "https://github.com/availproject/avail-light/blob/a9e1741a6c7579d6ab1988eb409808b33f999180/core/src/app_client.rs"
}
],
"risks": [
{
"category": "Funds can be lost if",
"text": "a dishonest supermajority of Avail validators finalizes an unavailable block, and there aren't light nodes on the network verifying data availability, or they fail at social signaling unavailable data."
},
{
"category": "Funds can be lost if",
"text": "a dishonest supermajority of Avail validators finalizes an unavailable block, and the light nodes on the network cannot collectively reconstruct the block."
}
]
},
"throughput": [
{
"size": 4194304,
"frequency": 20,
"sinceTimestamp": 1739883920
},
{
"size": 2097152,
"frequency": 20,
"sinceTimestamp": 1721692800
}
],
"type": "Public Blockchain",
"usedWithoutBridgeIn": [],
"validators": {
"type": "dynamic"
}
}