Welcome to the Oiler Fossil documentation. This page explains the basic concepts of Fossil
Starknet is an Ethereum L1 settled L2 operated and developed by StarkWare Industries Ltd.
Currently Starknet is a so called zkRollup, you can read more about rollups and scaling solutions here.
Smart contracts on Starknet are interoperable which means they can call each others and access their storage.
Starknet by default does not have a mechanism that allows it's smart contracts to read data from Ethereum, for that reason Fossil has been built.
Ethereum has two types of accounts:
- EOAs - This type of account is able to originate transactions by signing them with the corresponding cryptographic key.
- Smart contracts - An account containing storage and code that executes whenever it receives a transaction originated by an EOA or is called by another smart contract.
No matter if an account is an EOA or a smart contract it will have the following properties:
- Balance - ETH balance denominated in wei.
- Code hash - The keccak256 hash of the bytecode.
- Nonce - a transaction counter in each account. That prevents replay attacks.
- Storage hash - Root of the storage Merkel Patricia Tree.
All Ethereum account are committed to the state of the blockchain.
As mentioned above smart contracts have storage. The Storage structure of an Ethereum smart contract is a key-value store, where the key is also called a slot and has it's corresponding value that can change over time.
Storage slots are a deterministic numeric value, you can read more about how those are computed here. The smart contract storage is committed in a form of a hash to its corresponding account's
Merkle Patricia Trees(MPTs) are data structure derived from standard Merkle trees. These are widely used in Ethereum to commit large amounts of data to a single hash, you can read more about MPTs here.
Ethereum blocks contain the following properties but not all of them are included in the header:
Part of the header
Any ethereum block has it's header which does not include transactions and receipts making it much much smaller than the entire block. Ethereum block headers have a size of ~1kb.
An Ethereum block hash is computed by hashing the RLP serialized header with keccak256.
Fossil takes advantage of the fact that Ethereum commits it's state, receipts and transactions to MPT, that makes proving existence of accounts, storage slots values, receipt and transactions possible. You can read more about these tries here.