From e45f89cac1b2ba114616cb176a1d2082016bb8df Mon Sep 17 00:00:00 2001 From: QustomQure Date: Sun, 23 Jul 2023 02:50:10 +0300 Subject: [PATCH 1/3] feat(website): Update eldfell-l3-node-runner-manual.mdx (#14247) Co-authored-by: dave | d1onys1us <13951458+d1onys1us@users.noreply.github.com> --- .../pages/docs/guides/run-a-node/enable-a-prover.mdx | 2 +- .../eldfell-l3-node-runner-manual.mdx | 10 +++++----- .../grimsvotn-l2-node-runner-manual.mdx | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/website/pages/docs/guides/run-a-node/enable-a-prover.mdx b/packages/website/pages/docs/guides/run-a-node/enable-a-prover.mdx index c991df6181c..89ab33acb1b 100644 --- a/packages/website/pages/docs/guides/run-a-node/enable-a-prover.mdx +++ b/packages/website/pages/docs/guides/run-a-node/enable-a-prover.mdx @@ -47,7 +47,7 @@ To stake your TTKOe try using the [staking dashboard](https://staking.l3test.tai Verify you have some prover logs: - `💰 Your block proof was accepted` means you are the first prover and receive the reward. -- `✅ Valid block proven` just means a proposed block was successfully proved on TaikoL1 (by anyone). +- `✅ Block proven` just means a proposed block was successfully proved on TaikoL1 (by anyone). If you are running a node in the background, you can view the logs with `docker compose logs -f`. diff --git a/packages/website/pages/docs/manuals/node-runner-manuals/eldfell-l3-node-runner-manual.mdx b/packages/website/pages/docs/manuals/node-runner-manuals/eldfell-l3-node-runner-manual.mdx index a68fa366b01..8b9b0873ff7 100644 --- a/packages/website/pages/docs/manuals/node-runner-manuals/eldfell-l3-node-runner-manual.mdx +++ b/packages/website/pages/docs/manuals/node-runner-manuals/eldfell-l3-node-runner-manual.mdx @@ -39,29 +39,29 @@ docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f ## View execution logs ```sh -docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f l2_execution_engine +docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f l3_execution_engine ``` ## View client driver logs ```sh -docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f taiko_client_driver +docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f l3_taiko_client_driver ``` ## View client proposer logs ```sh -docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f taiko_client_proposer +docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f l3_taiko_client_proposer ``` ## View client prover relayer logs ```sh -docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f taiko_client_prover_relayer +docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f l3_taiko_client_prover_relayer ``` ## View zkevm prover logs ```sh -docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f zkevm-chain-prover-rpcd +docker compose -f ./docker-compose.l3.yml --env-file .env.l3 logs -f l3_zkevm_chain_prover_rpcd ``` diff --git a/packages/website/pages/docs/manuals/node-runner-manuals/grimsvotn-l2-node-runner-manual.mdx b/packages/website/pages/docs/manuals/node-runner-manuals/grimsvotn-l2-node-runner-manual.mdx index 4b481bca7b7..a93d62311f9 100644 --- a/packages/website/pages/docs/manuals/node-runner-manuals/grimsvotn-l2-node-runner-manual.mdx +++ b/packages/website/pages/docs/manuals/node-runner-manuals/grimsvotn-l2-node-runner-manual.mdx @@ -63,5 +63,5 @@ docker compose logs -f taiko_client_prover_relayer ## View zkevm prover logs ```sh -docker compose logs -f zkevm-chain-prover-rpcd +docker compose logs -f zkevm_chain_prover_rpcd ``` From cc35f5bfb7efa2b3e3b56525425034ffeaada7d7 Mon Sep 17 00:00:00 2001 From: iofq Date: Sat, 22 Jul 2023 23:51:09 +0000 Subject: [PATCH 2/3] chore(website): create index page for node runner manuals (#14245) Co-authored-by: dave | d1onys1us <13951458+d1onys1us@users.noreply.github.com> --- packages/website/pages/docs/manuals/node-runner-manuals.mdx | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/website/pages/docs/manuals/node-runner-manuals.mdx diff --git a/packages/website/pages/docs/manuals/node-runner-manuals.mdx b/packages/website/pages/docs/manuals/node-runner-manuals.mdx new file mode 100644 index 00000000000..2aac7c80447 --- /dev/null +++ b/packages/website/pages/docs/manuals/node-runner-manuals.mdx @@ -0,0 +1,6 @@ +# Node runner manuals + +These manuals list commonly used commands for node operation and troubleshooting. To setup a node, see the [Guides](/docs/guides). + +- [Grimsvotn L2 node runner manual](/docs/manuals/node-runner-manuals/grimsvotn-l2-node-runner-manual) +- [Eldfell L3 node runner manual](/docs/manuals/node-runner-manuals/grimsvotn-l2-node-runner-manual) From ac52f575b6ac5a173bc6e96679f0614fcd61aa27 Mon Sep 17 00:00:00 2001 From: Marcus Wentz <52706599+MarcusWentz@users.noreply.github.com> Date: Sat, 22 Jul 2023 19:53:34 -0400 Subject: [PATCH 3/3] feat(website): Docs Taiko L2 EIP-1559 high level overview (#14187) Co-authored-by: d1onys1us <13951458+d1onys1us@users.noreply.github.com> Co-authored-by: d1onys1us Co-authored-by: Daniel Wang <99078276+dantaik@users.noreply.github.com> --- .../protocol/contracts/L1/TaikoEvents.sol | 2 +- .../website/pages/docs/concepts/overview.mdx | 101 +++++- .../contract-documentation/L1/TaikoConfig.md | 17 + .../contract-documentation/L1/TaikoData.md | 166 ++++++++++ .../contract-documentation/L1/TaikoErrors.md | 131 ++++++++ .../contract-documentation/L1/TaikoEvents.md | 87 +++++ .../contract-documentation/L1/TaikoL1.md | 149 +++++++++ .../contract-documentation/L1/TaikoToken.md | 165 ++++++++++ .../contract-documentation/L2/LibL2Consts.md | 11 + .../contract-documentation/L2/TaikoL2.md | 215 ++++++++++++ .../L2/TaikoL2Signer.md | 29 ++ .../contract-documentation/bridge/Bridge.md | 311 ++++++++++++++++++ .../bridge/BridgeErrors.md | 182 ++++++++++ .../bridge/BridgedERC20.md | 160 +++++++++ .../bridge/EtherVault.md | 118 +++++++ .../contract-documentation/bridge/IBridge.md | 113 +++++++ .../bridge/TokenVault.md | 246 ++++++++++++++ .../common/AddressManager.md | 113 +++++++ .../common/AddressResolver.md | 111 +++++++ .../common/ICrossChainSync.md | 55 ++++ .../common/IMintableERC20.md | 17 + .../contract-documentation/common/Proxied.md | 11 + .../gov/TaikoGovernor.md | 77 +++++ .../signal/ISignalService.md | 57 ++++ .../signal/SignalService.md | 117 +++++++ .../diagrams/concepts/eip-1559/fee-layout.png | Bin 0 -> 154233 bytes 26 files changed, 2755 insertions(+), 6 deletions(-) create mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/TaikoConfig.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/TaikoErrors.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/TaikoEvents.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/TaikoL1.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/TaikoToken.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/L2/LibL2Consts.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2Signer.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/bridge/Bridge.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/bridge/BridgeErrors.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/bridge/BridgedERC20.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/bridge/EtherVault.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/bridge/IBridge.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/bridge/TokenVault.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/common/AddressManager.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/common/AddressResolver.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/common/ICrossChainSync.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/common/IMintableERC20.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/common/Proxied.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/gov/TaikoGovernor.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/signal/ISignalService.md create mode 100644 packages/website/pages/docs/reference/contract-documentation/signal/SignalService.md create mode 100644 packages/website/public/images/diagrams/concepts/eip-1559/fee-layout.png diff --git a/packages/protocol/contracts/L1/TaikoEvents.sol b/packages/protocol/contracts/L1/TaikoEvents.sol index 26ed96e9786..e77c1c7173c 100644 --- a/packages/protocol/contracts/L1/TaikoEvents.sol +++ b/packages/protocol/contracts/L1/TaikoEvents.sol @@ -51,7 +51,7 @@ abstract contract TaikoEvents { /// @param proofTimeTarget The target time of proof generation /// @param proofTimeIssued The actual time of proof generation /// @param blockFee The fee associated with the proposed block - /// @param adjustmentQuotient The quotient used for adjusting future + /// @param adjustmentQuotient The quotient used for adjusting future /// proof generation time to the target time event ProofParamsChanged( uint64 proofTimeTarget, diff --git a/packages/website/pages/docs/concepts/overview.mdx b/packages/website/pages/docs/concepts/overview.mdx index ab0bd77dfb2..b82d98a0fd7 100644 --- a/packages/website/pages/docs/concepts/overview.mdx +++ b/packages/website/pages/docs/concepts/overview.mdx @@ -1,16 +1,107 @@ +import Image from "next/image"; + # What is Taiko? -Taiko aims to build a secure, decentralized, and permissionless [rollup](https://www.youtube.com/watch?v=7pWxCklcNsU) on Ethereum. These requirements dictate the following properties: +Taiko is a secure, decentralized, and permissionless [rollup](https://www.youtube.com/watch?v=7pWxCklcNsU) on Ethereum. Taiko achieves this by: -1. All block data required to reconstruct the post-block state needs to be put on Ethereum so it is publicly available. If this would not be the case, Taiko would not only fail to be a rollup but would also fail to be fully decentralized. This data is required so that anyone can know the latest chain state and so that useful new blocks can be appended to the chain. For the decentralization of the proof generation Taiko requires an even stronger requirement: all block data needed to be able to re-execute all work in a block in a step-by-step fashion needs to be made public. This makes it possible for provers to generate a proof for a block using only publicly known data. -2. Creating and proposing blocks should be a fast and efficient process. Anyone should be able to add blocks to the chain on a level playing field, having access to the same chain data at all times. Proposers, of course, should be able to compete on e.g. transaction fees and [Maximal Extractable Value (MEV)](https://ethereum.org/en/developers/docs/mev/). +1. writing all block data required to reconstruct the post-block state to Ethereum. Recording block data to Ethereum as an L1 makes the data decentralized and public. This data is needed for everyone to know the latest chain state to add new blocks to Taiko. Taiko's proof generation requires an even stricter requirement: all executable data must be saved publicly in sequence. Consequently, provers can generate proofs for a block using only publicly known data. +2. creating and proposing blocks should be a fast and efficient process. Anyone should be able to add blocks to the chain on a level playing field, having access to the same chain data at all times. Proposers, of course, should be able to compete on e.g., transaction fees and [Maximal Extractable Value (MEV)](https://ethereum.org/en/developers/docs/mev/). -We achieve this by splitting the block submission process in two parts: +We achieve this by splitting the block submission process into two parts: ## Block proposal -When a block gets proposed the block data is published on Ethereum and the block is appended to the proposed blocks list stored in the [TaikoL1](/docs/reference/contract-documentation/L1/TaikoL1) contract. Once registered, the protocol ensures that _all_ block properties are immutable. This makes the block execution _deterministic_: the post-block state can now be calculated by anyone. As such, the block is immediately _verified_. This also ensures that no one knows more about the latest state than anyone else, as that would create an unfair advantage. +When a block gets proposed, the block data is published on Ethereum, and the block is appended to the proposed blocks list stored in the [TaikoL1](/docs/reference/contract-documentation/L1/TaikoL1) contract. Once registered, the protocol ensures that _all_ block properties are immutable. This makes the block execution _deterministic_: the post-block state can now be calculated by anyone. As such, the block is immediately _verified_. This also ensures that no one knows more about the latest state than anyone else, which would create an unfair advantage. ## Block verification Because the block should already be verified once proposed, it should _not_ be possible for the prover to have any impact on how the block is executed and what the post-block state is. All relevant inputs for the proof generation are verified on L1 directly or indirectly to achieve deterministic block transitions. As all proposed blocks are deterministic, they can be proven in parallel, because all intermediate states between blocks are known and unique. Once a proof is submitted for the block and its parent block, we call the block _on-chain verified_. + +## The L2 block space + +Although block space is much +cheaper than on L1, it is still necessary to adjust +its price in a way to avoid L2 space being abused. +EIP-1559 on Taiko dynamically adjusts the block space price. + +## Rate Limiting using EIP-1559 + +Although rollups can have significantly +higher network capacity than L1s, +this capacity is not without limit. As such the protocol +needs to be able to limit how much work the L2 network +needs to do to keep up with the tip of the chain. Ethereum +already has a mechanism in place to do just that with +that we can use as well. + +
+ proposed +
+At block proposal we keep track of how much work (measured in gas) is required to +process the block, while subtracting the amount of work the Taiko network can handle. +This effectively creates a market for network capacity (in gas) per ETH. This will +impact how expensive Taiko block space is (paid by the block proposer), the higher +the demand the higher the network fee (a fee paid to the Taiko DAO). This way, rate +limiting is achieved in a way that does not simply impose a hard and inefficient +cap on the network, instead this mechanism allows users to utilize the network in +a fair way while allowing the Taiko network to capture the created value. And because +the same mechanism is used on Ethereum it allows Taiko to be Ethereum equivalent +(with some small implementation detail changes) even for this part of its network, +which is not obviously the case for L2s. + +## EIP-1559 Powered Prover fees + +Proving blocks requires significant compute power to calculate the proof +to submit and verify the proof on Ethereum. Provers need +to be compensated for this work as the network needs to +attract provers that are willing to do this work. How much +to pay for a proof is not obvious however: + +1. The Ethereum gas cost to publish/verify a proof + on Ethereum is unpredictable. +2. The proof generation cost does not necessarily + match perfectly with the gas cost. +3. The proof generation cost keeps changing as proving software is optimized and the hardware used + gets faster and cheaper. +4. The proof generation cost depends on how fast a + proof needs to be generated. + +Because the proving cost impacts the transaction fees +paid by the users, the goal is to pay only as much as +required for the network to function well. This means not +underpaying provers because blocks may remain unproven, +but certainly also not overpaying provers so that it doesn’t +make sense to incur very high costs to try and generate +proofs as quickly as absolutely possible. A good balance is +key to a well working solution that takes into account the +needs of the different network participants. +It’s clear that a fixed proving fee does not work. The +protocol should also not be dependent on a single prover +for a block because this will put too much power in the +hands of a single entity that can impact the stable progress +of the chain. + +The network, somehow, has to find the correct price between +two resources where the demand/supply is ever changing. +We can model this problem as a market between the proving +fee (per gas) per proof delay (per time unit), striking +a dynamic balance between proving cost and proof delay. +An additional complication is that the protocol expects +the block proposer to pay the proving fee at block proposal +time. As such, the baseFee of this model is used to charge +the proposer of a block using the total gas used in the block. +This is only an estimate of the actual cost because the +actual cost is only known when the proof is submitted. If +the estimated cost was too high the difference is returned +to the block proposer and the baseFee is decreased. If +the estimated cost was too low extra Taiko tokens are +minted to make up the difference and the baseFee is +increased. To lower the chance that the estimated cost is too +low and extra Taiko tokens need to be minted, a slightly +higher baseFee can be charged to the proposer than the +one predicted by the model. diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoConfig.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoConfig.md new file mode 100644 index 00000000000..1082417944d --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoConfig.md @@ -0,0 +1,17 @@ +--- +title: TaikoConfig +--- + +## TaikoConfig + +### getConfig + +```solidity +function getConfig() internal pure returns (struct TaikoData.Config) +``` + +#### Return Values + +| Name | Type | Description | +| ---- | ----------------------- | ------------------------------------- | +| [0] | struct TaikoData.Config | config The Taiko configuration object | diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md new file mode 100644 index 00000000000..b808389cc50 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md @@ -0,0 +1,166 @@ +--- +title: TaikoData +--- + +## TaikoData + +### Config + +```solidity +struct Config { + uint256 chainId; + uint256 maxNumProposedBlocks; + uint256 ringBufferSize; + uint256 maxVerificationsPerTx; + uint64 blockMaxGasLimit; + uint64 maxTransactionsPerBlock; + uint64 maxBytesPerTxList; + uint256 txListCacheExpiry; + uint256 proofCooldownPeriod; + uint256 systemProofCooldownPeriod; + uint256 realProofSkipSize; + uint256 ethDepositGas; + uint256 ethDepositMaxFee; + uint256 ethDepositRingBufferSize; + uint64 ethDepositMinCountPerBlock; + uint64 ethDepositMaxCountPerBlock; + uint96 ethDepositMaxAmount; + uint96 ethDepositMinAmount; + bool relaySignalRoot; +} +``` + +### StateVariables + +```solidity +struct StateVariables { + uint64 blockFee; + uint64 genesisHeight; + uint64 genesisTimestamp; + uint64 numBlocks; + uint64 lastVerifiedBlockId; + uint64 nextEthDepositToProcess; + uint64 numEthDeposits; +} +``` + +### BlockMetadataInput + +```solidity +struct BlockMetadataInput { + bytes32 txListHash; + address beneficiary; + uint32 gasLimit; + uint24 txListByteStart; + uint24 txListByteEnd; + uint8 cacheTxListInfo; +} +``` + +### BlockMetadata + +```solidity +struct BlockMetadata { + uint64 id; + uint64 timestamp; + uint64 l1Height; + bytes32 l1Hash; + bytes32 mixHash; + bytes32 txListHash; + uint24 txListByteStart; + uint24 txListByteEnd; + uint32 gasLimit; + address beneficiary; + address treasury; + struct TaikoData.EthDeposit[] depositsProcessed; +} +``` + +### BlockEvidence + +```solidity +struct BlockEvidence { + bytes32 metaHash; + bytes32 parentHash; + bytes32 blockHash; + bytes32 signalRoot; + bytes32 graffiti; + address prover; + uint32 parentGasUsed; + uint32 gasUsed; + uint16 verifierId; + bytes proof; +} +``` + +### ForkChoice + +```solidity +struct ForkChoice { + bytes32 key; + bytes32 blockHash; + bytes32 signalRoot; + uint64 provenAt; + address prover; + uint32 gasUsed; +} +``` + +### Block + +```solidity +struct Block { + mapping(uint256 => struct TaikoData.ForkChoice) forkChoices; + uint64 blockId; + uint64 proposedAt; + uint24 nextForkChoiceId; + uint24 verifiedForkChoiceId; + bytes32 metaHash; + address proposer; +} +``` + +### TxListInfo + +```solidity +struct TxListInfo { + uint64 validSince; + uint24 size; +} +``` + +### EthDeposit + +```solidity +struct EthDeposit { + address recipient; + uint96 amount; + uint64 id; +} +``` + +### State + +```solidity +struct State { + mapping(uint256 => struct TaikoData.Block) blocks; + mapping(uint256 => mapping(bytes32 => mapping(uint32 => uint256))) forkChoiceIds; + mapping(address => uint256) taikoTokenBalances; + mapping(bytes32 => struct TaikoData.TxListInfo) txListInfo; + mapping(uint256 => uint256) ethDeposits; + uint64 genesisHeight; + uint64 genesisTimestamp; + uint16 __reserved70; + uint48 __reserved71; + uint64 __reserved72; + uint64 __reserved80; + uint64 numEthDeposits; + uint64 numBlocks; + uint64 nextEthDepositToProcess; + uint64 blockFee; + uint64 __reserved90; + uint64 lastVerifiedBlockId; + uint64 __reserved91; + uint256[42] __gap; +} +``` diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoErrors.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoErrors.md new file mode 100644 index 00000000000..d03d35973ed --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoErrors.md @@ -0,0 +1,131 @@ +--- +title: TaikoErrors +--- + +## TaikoErrors + +### L1_ALREADY_PROVEN + +```solidity +error L1_ALREADY_PROVEN() +``` + +### L1_BLOCK_ID + +```solidity +error L1_BLOCK_ID() +``` + +### L1_EVIDENCE_MISMATCH + +```solidity +error L1_EVIDENCE_MISMATCH(bytes32 expected, bytes32 actual) +``` + +### L1_FORK_CHOICE_NOT_FOUND + +```solidity +error L1_FORK_CHOICE_NOT_FOUND() +``` + +### L1_INVALID_CONFIG + +```solidity +error L1_INVALID_CONFIG() +``` + +### L1_INVALID_ETH_DEPOSIT + +```solidity +error L1_INVALID_ETH_DEPOSIT() +``` + +### L1_INVALID_EVIDENCE + +```solidity +error L1_INVALID_EVIDENCE() +``` + +### L1_INVALID_METADATA + +```solidity +error L1_INVALID_METADATA() +``` + +### L1_INVALID_PARAM + +```solidity +error L1_INVALID_PARAM() +``` + +### L1_INVALID_PROOF + +```solidity +error L1_INVALID_PROOF() +``` + +### L1_INVALID_PROOF_OVERWRITE + +```solidity +error L1_INVALID_PROOF_OVERWRITE() +``` + +### L1_NOT_SPECIAL_PROVER + +```solidity +error L1_NOT_SPECIAL_PROVER() +``` + +### L1_ORACLE_PROVER_DISABLED + +```solidity +error L1_ORACLE_PROVER_DISABLED() +``` + +### L1_SAME_PROOF + +```solidity +error L1_SAME_PROOF() +``` + +### L1_SYSTEM_PROVER_DISABLED + +```solidity +error L1_SYSTEM_PROVER_DISABLED() +``` + +### L1_SYSTEM_PROVER_PROHIBITED + +```solidity +error L1_SYSTEM_PROVER_PROHIBITED() +``` + +### L1_TOO_MANY_BLOCKS + +```solidity +error L1_TOO_MANY_BLOCKS() +``` + +### L1_TX_LIST_NOT_EXIST + +```solidity +error L1_TX_LIST_NOT_EXIST() +``` + +### L1_TX_LIST_HASH + +```solidity +error L1_TX_LIST_HASH() +``` + +### L1_TX_LIST_RANGE + +```solidity +error L1_TX_LIST_RANGE() +``` + +### L1_TX_LIST + +```solidity +error L1_TX_LIST() +``` diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoEvents.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoEvents.md new file mode 100644 index 00000000000..94cc7597597 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoEvents.md @@ -0,0 +1,87 @@ +--- +title: TaikoEvents +--- + +## TaikoEvents + +### BlockProposed + +```solidity +event BlockProposed(uint256 id, struct TaikoData.BlockMetadata meta, uint64 blockFee) +``` + +_Emitted when a block is proposed_ + +#### Parameters + +| Name | Type | Description | +| -------- | ------------------------------ | ------------------------------------------ | +| id | uint256 | The ID of the proposed block | +| meta | struct TaikoData.BlockMetadata | The metadata of the proposed block | +| blockFee | uint64 | The fee associated with the proposed block | + +### BlockProven + +```solidity +event BlockProven(uint256 id, bytes32 parentHash, bytes32 blockHash, bytes32 signalRoot, address prover, uint32 parentGasUsed) +``` + +_Emitted when a block is proven_ + +#### Parameters + +| Name | Type | Description | +| ------------- | ------- | ----------------------------------- | +| id | uint256 | The ID of the proven block | +| parentHash | bytes32 | The hash of the parent block | +| blockHash | bytes32 | The hash of the proven block | +| signalRoot | bytes32 | The signal root of the proven block | +| prover | address | The address of the prover | +| parentGasUsed | uint32 | The gas used by the parent block | + +### BlockVerified + +```solidity +event BlockVerified(uint256 id, bytes32 blockHash, uint64 reward) +``` + +_Emitted when a block is verified_ + +#### Parameters + +| Name | Type | Description | +| --------- | ------- | ------------------------------------------------ | +| id | uint256 | The ID of the verified block | +| blockHash | bytes32 | The hash of the verified block | +| reward | uint64 | The amount of token rewarded to the verification | + +### EthDeposited + +```solidity +event EthDeposited(struct TaikoData.EthDeposit deposit) +``` + +_Emitted when an Ethereum deposit is made_ + +#### Parameters + +| Name | Type | Description | +| ------- | --------------------------- | ----------------------------------------- | +| deposit | struct TaikoData.EthDeposit | The information of the deposited Ethereum | + +### ProofParamsChanged + +```solidity +event ProofParamsChanged(uint64 proofTimeTarget, uint64 proofTimeIssued, uint64 blockFee, uint16 adjustmentQuotient) +``` + +_Emitted when the proof parameters are changed_ + +#### Parameters + +| Name | Type | Description | +| ------------------ | ------ | ------------------------------------------------------------------------------- | +| proofTimeTarget | uint64 | The target time of proof generation | +| proofTimeIssued | uint64 | The actual time of proof generation | +| blockFee | uint64 | The fee associated with the proposed block | +| adjustmentQuotient | uint16 | The quotient used for adjusting future proof generation time to the target time | diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoL1.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoL1.md new file mode 100644 index 00000000000..e340c6aaf10 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoL1.md @@ -0,0 +1,149 @@ +--- +title: TaikoL1 +--- + +## TaikoL1 + +### state + +```solidity +struct TaikoData.State state +``` + +### receive + +```solidity +receive() external payable +``` + +### init + +```solidity +function init(address _addressManager, bytes32 _genesisBlockHash, uint64 _initBlockFee) external +``` + +Initialize the rollup. + +#### Parameters + +| Name | Type | Description | +| ------------------ | ------- | ------------------------------------- | +| \_addressManager | address | The AddressManager address. | +| \_genesisBlockHash | bytes32 | The block hash of the genesis block. | +| \_initBlockFee | uint64 | Initial (reasonable) block fee value. | + +### proposeBlock + +```solidity +function proposeBlock(bytes input, bytes txList) external returns (struct TaikoData.BlockMetadata meta) +``` + +Propose a Taiko L2 block. + +#### Parameters + +| Name | Type | Description | +| ------ | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| input | bytes | An abi-encoded BlockMetadataInput that the actual L2 block header must satisfy. | +| txList | bytes | A list of transactions in this block, encoded with RLP. Note, in the corresponding L2 block an _anchor transaction_ will be the first transaction in the block -- if there are `n` transactions in `txList`, then there will be up to `n + 1` transactions in the L2 block. | + +### proveBlock + +```solidity +function proveBlock(uint256 blockId, bytes input) external +``` + +Prove a block with a zero-knowledge proof. + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ---------------------------------------------------------------------------------------------- | +| blockId | uint256 | The index of the block to prove. This is also used to select the right implementation version. | +| input | bytes | An abi-encoded TaikoData.BlockEvidence object. | + +### verifyBlocks + +```solidity +function verifyBlocks(uint256 maxBlocks) external +``` + +Verify up to N blocks. + +#### Parameters + +| Name | Type | Description | +| --------- | ------- | ------------------------------- | +| maxBlocks | uint256 | Max number of blocks to verify. | + +### depositEtherToL2 + +```solidity +function depositEtherToL2(address recipient) public payable +``` + +### canDepositEthToL2 + +```solidity +function canDepositEthToL2(uint256 amount) public view returns (bool) +``` + +### getTaikoTokenBalance + +```solidity +function getTaikoTokenBalance(address addr) public view returns (uint256) +``` + +### getBlockFee + +```solidity +function getBlockFee() public view returns (uint64) +``` + +### getBlock + +```solidity +function getBlock(uint256 blockId) public view returns (bytes32 _metaHash, address _proposer, uint64 _proposedAt) +``` + +### getForkChoice + +```solidity +function getForkChoice(uint256 blockId, bytes32 parentHash, uint32 parentGasUsed) public view returns (struct TaikoData.ForkChoice) +``` + +### getCrossChainBlockHash + +```solidity +function getCrossChainBlockHash(uint256 blockId) public view returns (bytes32) +``` + +### getCrossChainSignalRoot + +```solidity +function getCrossChainSignalRoot(uint256 blockId) public view returns (bytes32) +``` + +### getStateVariables + +```solidity +function getStateVariables() public view returns (struct TaikoData.StateVariables) +``` + +### getConfig + +```solidity +function getConfig() public pure virtual returns (struct TaikoData.Config) +``` + +### getVerifierName + +```solidity +function getVerifierName(uint16 id) public pure returns (bytes32) +``` + +--- + +## title: ProxiedTaikoL1 + +## ProxiedTaikoL1 diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoToken.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoToken.md new file mode 100644 index 00000000000..a362df0036a --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoToken.md @@ -0,0 +1,165 @@ +--- +title: LibTaikoTokenConfig +--- + +## LibTaikoTokenConfig + +### DECIMALS + +```solidity +uint8 DECIMALS +``` + +--- + +## title: TaikoToken + +## TaikoToken + +### Mint + +```solidity +event Mint(address account, uint256 amount) +``` + +### Burn + +```solidity +event Burn(address account, uint256 amount) +``` + +### TKO_INVALID_ADDR + +```solidity +error TKO_INVALID_ADDR() +``` + +### TKO_INVALID_PREMINT_PARAMS + +```solidity +error TKO_INVALID_PREMINT_PARAMS() +``` + +### TKO_MINT_DISALLOWED + +```solidity +error TKO_MINT_DISALLOWED() +``` + +### init + +```solidity +function init(address _addressManager, string _name, string _symbol, address[] _premintRecipients, uint256[] _premintAmounts) public +``` + +### snapshot + +```solidity +function snapshot() public +``` + +### pause + +```solidity +function pause() public +``` + +### unpause + +```solidity +function unpause() public +``` + +### mint + +```solidity +function mint(address to, uint256 amount) public +``` + +### burn + +```solidity +function burn(address from, uint256 amount) public +``` + +### transfer + +```solidity +function transfer(address to, uint256 amount) public returns (bool) +``` + +\_See {IERC20-transfer}. + +Requirements: + +- `to` cannot be the zero address. +- the caller must have a balance of at least `amount`.\_ + +### transferFrom + +```solidity +function transferFrom(address from, address to, uint256 amount) public returns (bool) +``` + +\_See {IERC20-transferFrom}. + +Emits an {Approval} event indicating the updated allowance. This is not +required by the EIP. See the note at the beginning of {ERC20}. + +NOTE: Does not update the allowance if the current allowance +is the maximum `uint256`. + +Requirements: + +- `from` and `to` cannot be the zero address. +- `from` must have a balance of at least `amount`. +- the caller must have allowance for `from`'s tokens of at least + `amount`.\_ + +### decimals + +```solidity +function decimals() public pure returns (uint8) +``` + +\_Returns the number of decimals used to get its user representation. +For example, if `decimals` equals `2`, a balance of `505` tokens should +be displayed to a user as `5.05` (`505 / 10 ** 2`). + +Tokens usually opt for a value of 18, imitating the relationship between +Ether and Wei. This is the value {ERC20} uses, unless this function is +overridden; + +NOTE: This information is only used for _display_ purposes: it in +no way affects any of the arithmetic of the contract, including +{IERC20-balanceOf} and {IERC20-transfer}.\_ + +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer(address from, address to, uint256 amount) internal +``` + +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer(address from, address to, uint256 amount) internal +``` + +### \_mint + +```solidity +function _mint(address to, uint256 amount) internal +``` + +### \_burn + +```solidity +function _burn(address from, uint256 amount) internal +``` + +--- + +## title: ProxiedTaikoToken + +## ProxiedTaikoToken diff --git a/packages/website/pages/docs/reference/contract-documentation/L2/LibL2Consts.md b/packages/website/pages/docs/reference/contract-documentation/L2/LibL2Consts.md new file mode 100644 index 00000000000..ab814286e09 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L2/LibL2Consts.md @@ -0,0 +1,11 @@ +--- +title: LibL2Consts +--- + +## LibL2Consts + +### ANCHOR_GAS_COST + +```solidity +uint64 ANCHOR_GAS_COST +``` diff --git a/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2.md b/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2.md new file mode 100644 index 00000000000..533e2c0650c --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2.md @@ -0,0 +1,215 @@ +--- +title: TaikoL2 +--- + +## TaikoL2 + +### VerifiedBlock + +```solidity +struct VerifiedBlock { + bytes32 blockHash; + bytes32 signalRoot; +} +``` + +### EIP1559Params + +```solidity +struct EIP1559Params { + uint64 basefee; + uint64 gasIssuedPerSecond; + uint64 gasExcessMax; + uint64 gasTarget; + uint64 ratio2x1x; +} +``` + +### EIP1559Config + +```solidity +struct EIP1559Config { + uint128 yscale; + uint64 xscale; + uint64 gasIssuedPerSecond; +} +``` + +### publicInputHash + +```solidity +bytes32 publicInputHash +``` + +### parentTimestamp + +```solidity +uint64 parentTimestamp +``` + +### latestSyncedL1Height + +```solidity +uint64 latestSyncedL1Height +``` + +### gasExcess + +```solidity +uint64 gasExcess +``` + +### Anchored + +```solidity +event Anchored(uint64 number, uint64 basefee, uint64 gaslimit, uint64 timestamp, bytes32 parentHash, uint256 prevrandao, address coinbase, uint32 chainid) +``` + +### L2_BASEFEE_MISMATCH + +```solidity +error L2_BASEFEE_MISMATCH(uint64 expected, uint64 actual) +``` + +### L2_INVALID_1559_PARAMS + +```solidity +error L2_INVALID_1559_PARAMS() +``` + +### L2_INVALID_CHAIN_ID + +```solidity +error L2_INVALID_CHAIN_ID() +``` + +### L2_INVALID_SENDER + +```solidity +error L2_INVALID_SENDER() +``` + +### L2_PUBLIC_INPUT_HASH_MISMATCH + +```solidity +error L2_PUBLIC_INPUT_HASH_MISMATCH(bytes32 expected, bytes32 actual) +``` + +### L2_TOO_LATE + +```solidity +error L2_TOO_LATE() +``` + +### M1559_UNEXPECTED_CHANGE + +```solidity +error M1559_UNEXPECTED_CHANGE(uint64 expected, uint64 actual) +``` + +### M1559_OUT_OF_STOCK + +```solidity +error M1559_OUT_OF_STOCK() +``` + +### init + +```solidity +function init(address _addressManager, struct TaikoL2.EIP1559Params _param1559) external +``` + +### anchor + +```solidity +function anchor(bytes32 l1Hash, bytes32 l1SignalRoot, uint64 l1Height, uint64 parentGasUsed) external +``` + +Persist the latest L1 block height and hash to L2 for cross-layer +message verification (eg. bridging). This function will also check +certain block-level global variables because they are not part of the +Trie structure. + +A circuit will verify the integrity among: + +- l1Hash, l1SignalRoot, and l1SignalServiceAddress +- (l1Hash and l1SignalServiceAddress) are both hashed into of the + ZKP's instance. + +This transaction shall be the first transaction in every L2 block. + +#### Parameters + +| Name | Type | Description | +| ------------- | ------- | --------------------------------------------------------- | +| l1Hash | bytes32 | The latest L1 block hash when this block was proposed. | +| l1SignalRoot | bytes32 | The latest value of the L1 "signal service storage root". | +| l1Height | uint64 | The latest L1 block height when this block was proposed. | +| parentGasUsed | uint64 | the gas used in the parent block. | + +### getBasefee + +```solidity +function getBasefee(uint32 timeSinceParent, uint64 gasLimit, uint64 parentGasUsed) public view returns (uint256 _basefee) +``` + +### getCrossChainBlockHash + +```solidity +function getCrossChainBlockHash(uint256 number) public view returns (bytes32) +``` + +Returns the cross-chain block hash at the given block number. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | --------------------------------------------- | +| number | uint256 | The block number. Use 0 for the latest block. | + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | --------------------------- | +| [0] | bytes32 | The cross-chain block hash. | + +### getCrossChainSignalRoot + +```solidity +function getCrossChainSignalRoot(uint256 number) public view returns (bytes32) +``` + +Returns the cross-chain signal service storage root at the given +block number. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | --------------------------------------------- | +| number | uint256 | The block number. Use 0 for the latest block. | + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | -------------------------------------------- | +| [0] | bytes32 | The cross-chain signal service storage root. | + +### getBlockHash + +```solidity +function getBlockHash(uint256 number) public view returns (bytes32) +``` + +### getEIP1559Config + +```solidity +function getEIP1559Config() public view virtual returns (struct TaikoL2.EIP1559Config) +``` + +_Overide this funciton to return a constant EIP1559Config object_ + +--- + +## title: ProxiedTaikoL2 + +## ProxiedTaikoL2 diff --git a/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2Signer.md b/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2Signer.md new file mode 100644 index 00000000000..f918f32a6e2 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2Signer.md @@ -0,0 +1,29 @@ +--- +title: TaikoL2Signer +--- + +## TaikoL2Signer + +### GOLDEN_TOUCH_ADDRESS + +```solidity +address GOLDEN_TOUCH_ADDRESS +``` + +### GOLDEN_TOUCH_PRIVATEKEY + +```solidity +uint256 GOLDEN_TOUCH_PRIVATEKEY +``` + +### L2_INVALID_GOLDEN_TOUCH_K + +```solidity +error L2_INVALID_GOLDEN_TOUCH_K() +``` + +### signAnchor + +```solidity +function signAnchor(bytes32 digest, uint8 k) public view returns (uint8 v, uint256 r, uint256 s) +``` diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/Bridge.md b/packages/website/pages/docs/reference/contract-documentation/bridge/Bridge.md new file mode 100644 index 00000000000..5afa35c36bd --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/bridge/Bridge.md @@ -0,0 +1,311 @@ +--- +title: Bridge +--- + +## Bridge + +This contract is a Bridge contract which is deployed on both L1 and L2. Mostly +a thin wrapper +which calls the library implementations. See _IBridge_ for more details. + +_The code hash for the same address on L1 and L2 may be different._ + +### MessageStatusChanged + +```solidity +event MessageStatusChanged(bytes32 msgHash, enum LibBridgeStatus.MessageStatus status, address transactor) +``` + +### DestChainEnabled + +```solidity +event DestChainEnabled(uint256 chainId, bool enabled) +``` + +### receive + +```solidity +receive() external payable +``` + +Allow Bridge to receive ETH from the TaikoL1, TokenVault or EtherVault. + +### init + +```solidity +function init(address _addressManager) external +``` + +Initializer to be called after being deployed behind a proxy. + +_Initializer function to setup the EssentialContract._ + +#### Parameters + +| Name | Type | Description | +| ---------------- | ------- | ------------------------------------------- | +| \_addressManager | address | The address of the AddressManager contract. | + +### sendMessage + +```solidity +function sendMessage(struct IBridge.Message message) external payable returns (bytes32 msgHash) +``` + +Sends a message from the current chain to the destination chain specified +in the message. + +_Sends a message by calling the LibBridgeSend.sendMessage library +function._ + +#### Parameters + +| Name | Type | Description | +| ------- | ---------------------- | ---------------------------------- | +| message | struct IBridge.Message | The message to send. (See IBridge) | + +#### Return Values + +| Name | Type | Description | +| ------- | ------- | -------------------------------------- | +| msgHash | bytes32 | The hash of the message that was sent. | + +### releaseEther + +```solidity +function releaseEther(struct IBridge.Message message, bytes proof) external +``` + +Releases the Ether locked in the bridge as part of a cross-chain +transfer. + +_Releases the Ether by calling the LibBridgeRelease.releaseEther +library function._ + +#### Parameters + +| Name | Type | Description | +| ------- | ---------------------- | ----------------------------------------------------------------------- | +| message | struct IBridge.Message | The message containing the details of the Ether transfer. (See IBridge) | +| proof | bytes | The proof of the cross-chain transfer. | + +### processMessage + +```solidity +function processMessage(struct IBridge.Message message, bytes proof) external +``` + +Processes a message received from another chain. + +_Processes the message by calling the LibBridgeProcess.processMessage +library function._ + +#### Parameters + +| Name | Type | Description | +| ------- | ---------------------- | -------------------------------------- | +| message | struct IBridge.Message | The message to process. | +| proof | bytes | The proof of the cross-chain transfer. | + +### retryMessage + +```solidity +function retryMessage(struct IBridge.Message message, bool isLastAttempt) external +``` + +Retries sending a message that previously failed to send. + +_Retries the message by calling the LibBridgeRetry.retryMessage +library function._ + +#### Parameters + +| Name | Type | Description | +| ------------- | ---------------------- | --------------------------------------------------------------- | +| message | struct IBridge.Message | The message to retry. | +| isLastAttempt | bool | Specifies whether this is the last attempt to send the message. | + +### isMessageSent + +```solidity +function isMessageSent(bytes32 msgHash) public view virtual returns (bool) +``` + +Check if the message with the given hash has been sent. + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ------------------------ | +| msgHash | bytes32 | The hash of the message. | + +#### Return Values + +| Name | Type | Description | +| ---- | ---- | ----------------------------------------------------------- | +| [0] | bool | Returns true if the message has been sent, false otherwise. | + +### isMessageReceived + +```solidity +function isMessageReceived(bytes32 msgHash, uint256 srcChainId, bytes proof) public view virtual returns (bool) +``` + +Check if the message with the given hash has been received. + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ----------------------------- | +| msgHash | bytes32 | The hash of the message. | +| srcChainId | uint256 | The source chain ID. | +| proof | bytes | The proof of message receipt. | + +#### Return Values + +| Name | Type | Description | +| ---- | ---- | --------------------------------------------------------------- | +| [0] | bool | Returns true if the message has been received, false otherwise. | + +### isMessageFailed + +```solidity +function isMessageFailed(bytes32 msgHash, uint256 destChainId, bytes proof) public view virtual returns (bool) +``` + +Check if the message with the given hash has failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | ------- | ----------------------------- | +| msgHash | bytes32 | The hash of the message. | +| destChainId | uint256 | The destination chain ID. | +| proof | bytes | The proof of message failure. | + +#### Return Values + +| Name | Type | Description | +| ---- | ---- | -------------------------------------------------------- | +| [0] | bool | Returns true if the message has failed, false otherwise. | + +### getMessageStatus + +```solidity +function getMessageStatus(bytes32 msgHash) public view virtual returns (enum LibBridgeStatus.MessageStatus) +``` + +Get the status of the message with the given hash. + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ------------------------ | +| msgHash | bytes32 | The hash of the message. | + +#### Return Values + +| Name | Type | Description | +| ---- | ---------------------------------- | ---------------------------------- | +| [0] | enum LibBridgeStatus.MessageStatus | Returns the status of the message. | + +### context + +```solidity +function context() public view returns (struct IBridge.Context) +``` + +Get the current context + +#### Return Values + +| Name | Type | Description | +| ---- | ---------------------- | ---------------------------- | +| [0] | struct IBridge.Context | Returns the current context. | + +### isEtherReleased + +```solidity +function isEtherReleased(bytes32 msgHash) public view returns (bool) +``` + +Check if the Ether associated with the given message hash has been +released. + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ------------------------ | +| msgHash | bytes32 | The hash of the message. | + +#### Return Values + +| Name | Type | Description | +| ---- | ---- | ------------------------------------------------------------- | +| [0] | bool | Returns true if the Ether has been released, false otherwise. | + +### isDestChainEnabled + +```solidity +function isDestChainEnabled(uint256 _chainId) public view returns (bool enabled) +``` + +Check if the destination chain with the given ID is enabled. + +#### Parameters + +| Name | Type | Description | +| --------- | ------- | -------------------- | +| \_chainId | uint256 | The ID of the chain. | + +#### Return Values + +| Name | Type | Description | +| ------- | ---- | ------------------------------------------------------------------ | +| enabled | bool | Returns true if the destination chain is enabled, false otherwise. | + +### hashMessage + +```solidity +function hashMessage(struct IBridge.Message message) public pure returns (bytes32) +``` + +Compute the hash of a given message. + +#### Parameters + +| Name | Type | Description | +| ------- | ---------------------- | ------------------------------------ | +| message | struct IBridge.Message | The message to compute the hash for. | + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | -------------------------------- | +| [0] | bytes32 | Returns the hash of the message. | + +### getMessageStatusSlot + +```solidity +function getMessageStatusSlot(bytes32 msgHash) public pure returns (bytes32) +``` + +Get the slot associated with a given message hash status. + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ------------------------ | +| msgHash | bytes32 | The hash of the message. | + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | --------------------------------------------------------------- | +| [0] | bytes32 | Returns the slot associated with the given message hash status. | + +--- + +## title: ProxiedBridge + +## ProxiedBridge diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/BridgeErrors.md b/packages/website/pages/docs/reference/contract-documentation/bridge/BridgeErrors.md new file mode 100644 index 00000000000..0ad96574b02 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/bridge/BridgeErrors.md @@ -0,0 +1,182 @@ +--- +title: BridgeErrors +--- + +## BridgeErrors + +### B_CANNOT_RECEIVE + +```solidity +error B_CANNOT_RECEIVE() +``` + +Emitted when the contract is not intended to receive Ether + +### B_DENIED + +```solidity +error B_DENIED() +``` + +Emitted when an operation is denied due to incorrect permissions + +### B_ERC20_CANNOT_RECEIVE + +```solidity +error B_ERC20_CANNOT_RECEIVE() +``` + +Emitted when the contract is not designed to receive ERC20 tokens + +### B_ETHER_RELEASED_ALREADY + +```solidity +error B_ETHER_RELEASED_ALREADY() +``` + +Emitted when Ether has already been released as part of a transfer + +### B_EV_DO_NOT_BURN + +```solidity +error B_EV_DO_NOT_BURN() +``` + +Emitted when attempting to burn Ether in EtherVault + +### B_EV_NOT_AUTHORIZED + +```solidity +error B_EV_NOT_AUTHORIZED() +``` + +Emitted when an unauthorized action is attempted in EtherVault + +### B_EV_PARAM + +```solidity +error B_EV_PARAM() +``` + +Emitted when an incorrect parameter is passed in EtherVault + +### B_FAILED_TRANSFER + +```solidity +error B_FAILED_TRANSFER() +``` + +Emitted when an ERC20 token transfer fails + +### B_FORBIDDEN + +```solidity +error B_FORBIDDEN() +``` + +Emitted when an action is forbidden + +### B_GAS_LIMIT + +```solidity +error B_GAS_LIMIT() +``` + +Emitted when the gas limit for an operation is exceeded + +### B_INCORRECT_VALUE + +```solidity +error B_INCORRECT_VALUE() +``` + +Emitted when an incorrect value is used in an operation + +### B_INIT_PARAM_ERROR + +```solidity +error B_INIT_PARAM_ERROR() +``` + +Emitted when an incorrect parameter is passed during initialization + +### B_MSG_HASH_NULL + +```solidity +error B_MSG_HASH_NULL() +``` + +Emitted when a null message hash is used + +### B_MSG_NON_RETRIABLE + +```solidity +error B_MSG_NON_RETRIABLE() +``` + +Emitted when a non-retriable message is retried + +### B_MSG_NOT_FAILED + +```solidity +error B_MSG_NOT_FAILED() +``` + +Emitted when a message that hasn't failed is retried + +### B_NULL_APP_ADDR + +```solidity +error B_NULL_APP_ADDR() +``` + +Emitted when a null address is used in an application + +### B_OWNER_IS_NULL + +```solidity +error B_OWNER_IS_NULL() +``` + +Emitted when a null owner address is used + +### B_SIGNAL_NOT_RECEIVED + +```solidity +error B_SIGNAL_NOT_RECEIVED() +``` + +Emitted when a signal has not been received + +### B_STATUS_MISMATCH + +```solidity +error B_STATUS_MISMATCH() +``` + +Emitted when the status of an operation does not match the expected +status + +### B_WRONG_CHAIN_ID + +```solidity +error B_WRONG_CHAIN_ID() +``` + +Emitted when an incorrect chain ID is used + +### B_WRONG_TO_ADDRESS + +```solidity +error B_WRONG_TO_ADDRESS() +``` + +Emitted when an incorrect recipient address is used + +### B_ZERO_SIGNAL + +```solidity +error B_ZERO_SIGNAL() +``` + +Emitted when a signal of zero is used diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/BridgedERC20.md b/packages/website/pages/docs/reference/contract-documentation/bridge/BridgedERC20.md new file mode 100644 index 00000000000..d00e4948bef --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/bridge/BridgedERC20.md @@ -0,0 +1,160 @@ +--- +title: BridgedERC20 +--- + +## BridgedERC20 + +This contract is an upgradeable ERC20 contract that represents tokens bridged +from another chain. + +### srcToken + +```solidity +address srcToken +``` + +### srcChainId + +```solidity +uint256 srcChainId +``` + +### BridgeMint + +```solidity +event BridgeMint(address account, uint256 amount) +``` + +### BridgeBurn + +```solidity +event BridgeBurn(address account, uint256 amount) +``` + +### init + +```solidity +function init(address _addressManager, address _srcToken, uint256 _srcChainId, uint8 _decimals, string _symbol, string _name) external +``` + +Initializes the contract. + +_Different BridgedERC20 Contract to be deployed +per unique \_srcToken i.e. one for USDC, one for USDT etc._ + +#### Parameters + +| Name | Type | Description | +| ---------------- | ------- | ------------------------------------------------- | +| \_addressManager | address | The address manager. | +| \_srcToken | address | The source token address. | +| \_srcChainId | uint256 | The source chain ID. | +| \_decimals | uint8 | The number of decimal places of the source token. | +| \_symbol | string | The symbol of the token. | +| \_name | string | The name of the token. | + +### bridgeMintTo + +```solidity +function bridgeMintTo(address account, uint256 amount) public +``` + +Mints tokens to an account. + +_Only a TokenVault can call this function._ + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | ------------------------------ | +| account | address | The account to mint tokens to. | +| amount | uint256 | The amount of tokens to mint. | + +### bridgeBurnFrom + +```solidity +function bridgeBurnFrom(address account, uint256 amount) public +``` + +Burns tokens from an account. + +_Only a TokenVault can call this function._ + +#### Parameters + +| Name | Type | Description | +| ------- | ------- | -------------------------------- | +| account | address | The account to burn tokens from. | +| amount | uint256 | The amount of tokens to burn. | + +### transfer + +```solidity +function transfer(address to, uint256 amount) public returns (bool) +``` + +Transfers tokens from the caller to another account. + +_Any address can call this. Caller must have at least 'amount' to +call this._ + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ---------------------------------- | +| to | address | The account to transfer tokens to. | +| amount | uint256 | The amount of tokens to transfer. | + +### transferFrom + +```solidity +function transferFrom(address from, address to, uint256 amount) public returns (bool) +``` + +Transfers tokens from one account to another account. + +_Any address can call this. Caller must have allowance of at least +'amount' for 'from's tokens._ + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ------------------------------------ | +| from | address | The account to transfer tokens from. | +| to | address | The account to transfer tokens to. | +| amount | uint256 | The amount of tokens to transfer. | + +### decimals + +```solidity +function decimals() public view returns (uint8) +``` + +Gets the number of decimal places of the token. + +#### Return Values + +| Name | Type | Description | +| ---- | ----- | ------------------------------------------ | +| [0] | uint8 | The number of decimal places of the token. | + +### source + +```solidity +function source() public view returns (address, uint256) +``` + +Gets the source token address and the source chain ID. + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | ------------------------------------------------- | +| [0] | address | The source token address and the source chain ID. | +| [1] | uint256 | | + +--- + +## title: ProxiedBridgedERC20 + +## ProxiedBridgedERC20 diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/EtherVault.md b/packages/website/pages/docs/reference/contract-documentation/bridge/EtherVault.md new file mode 100644 index 00000000000..4530e4c27a4 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/bridge/EtherVault.md @@ -0,0 +1,118 @@ +--- +title: EtherVault +--- + +## EtherVault + +This contract is initialized with 2^128 Ether and allows authorized addresses +to release Ether. + +_Only the contract owner can authorize or deauthorize addresses._ + +### Authorized + +```solidity +event Authorized(address addr, bool authorized) +``` + +### EtherReleased + +```solidity +event EtherReleased(address to, uint256 amount) +``` + +### onlyAuthorized + +```solidity +modifier onlyAuthorized() +``` + +### receive + +```solidity +receive() external payable +``` + +Function to receive Ether + +_Only authorized addresses can send Ether to the contract_ + +### init + +```solidity +function init(address addressManager) external +``` + +Initialize the contract with an address manager + +#### Parameters + +| Name | Type | Description | +| -------------- | ------- | ---------------------------------- | +| addressManager | address | The address of the address manager | + +### releaseEther + +```solidity +function releaseEther(uint256 amount) public +``` + +Transfer Ether from EtherVault to the sender, checking that the sender +is authorized. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ------------------------ | +| amount | uint256 | Amount of Ether to send. | + +### releaseEther + +```solidity +function releaseEther(address recipient, uint256 amount) public +``` + +Transfer Ether from EtherVault to a designated address, checking that the +sender is authorized. + +#### Parameters + +| Name | Type | Description | +| --------- | ------- | ------------------------- | +| recipient | address | Address to receive Ether. | +| amount | uint256 | Amount of ether to send. | + +### authorize + +```solidity +function authorize(address addr, bool authorized) public +``` + +Set the authorized status of an address, only the owner can call this. + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ---------------------------------------- | +| addr | address | Address to set the authorized status of. | +| authorized | bool | Authorized status to set. | + +### isAuthorized + +```solidity +function isAuthorized(address addr) public view returns (bool) +``` + +Get the authorized status of an address. + +#### Parameters + +| Name | Type | Description | +| ---- | ------- | ---------------------------------------- | +| addr | address | Address to get the authorized status of. | + +--- + +## title: ProxiedEtherVault + +## ProxiedEtherVault diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/IBridge.md b/packages/website/pages/docs/reference/contract-documentation/bridge/IBridge.md new file mode 100644 index 00000000000..c159a78bdc4 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/bridge/IBridge.md @@ -0,0 +1,113 @@ +--- +title: IBridge +--- + +## IBridge + +Bridge interface. + +_Ether is held by Bridges on L1 and by the EtherVault on L2, +not TokenVaults._ + +### Message + +```solidity +struct Message { + uint256 id; + address sender; + uint256 srcChainId; + uint256 destChainId; + address owner; + address to; + address refundAddress; + uint256 depositValue; + uint256 callValue; + uint256 processingFee; + uint256 gasLimit; + bytes data; + string memo; +} +``` + +### Context + +```solidity +struct Context { + bytes32 msgHash; + address sender; + uint256 srcChainId; +} +``` + +### SignalSent + +```solidity +event SignalSent(address sender, bytes32 msgHash) +``` + +### MessageSent + +```solidity +event MessageSent(bytes32 msgHash, struct IBridge.Message message) +``` + +### EtherReleased + +```solidity +event EtherReleased(bytes32 msgHash, address to, uint256 amount) +``` + +### sendMessage + +```solidity +function sendMessage(struct IBridge.Message message) external payable returns (bytes32 msgHash) +``` + +Sends a message to the destination chain and takes custody +of Ether required in this contract. All extra Ether will be refunded. + +### releaseEther + +```solidity +function releaseEther(struct IBridge.Message message, bytes proof) external +``` + +### isMessageSent + +```solidity +function isMessageSent(bytes32 msgHash) external view returns (bool) +``` + +Checks if a msgHash has been stored on the bridge contract by the +current address. + +### isMessageReceived + +```solidity +function isMessageReceived(bytes32 msgHash, uint256 srcChainId, bytes proof) external view returns (bool) +``` + +Checks if a msgHash has been received on the destination chain and +sent by the src chain. + +### isMessageFailed + +```solidity +function isMessageFailed(bytes32 msgHash, uint256 destChainId, bytes proof) external view returns (bool) +``` + +Checks if a msgHash has been failed on the destination chain. + +### context + +```solidity +function context() external view returns (struct IBridge.Context context) +``` + +Returns the bridge state context. + +### hashMessage + +```solidity +function hashMessage(struct IBridge.Message message) external pure returns (bytes32) +``` diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/TokenVault.md b/packages/website/pages/docs/reference/contract-documentation/bridge/TokenVault.md new file mode 100644 index 00000000000..22a0eb5c082 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/bridge/TokenVault.md @@ -0,0 +1,246 @@ +--- +title: TokenVault +--- + +## TokenVault + +This vault holds all ERC20 tokens (but not Ether) that users have deposited. +It also manages the mapping between canonical ERC20 tokens and their bridged +tokens. + +_Ether is held by Bridges on L1 and by the EtherVault on L2, not +TokenVaults._ + +### CanonicalERC20 + +```solidity +struct CanonicalERC20 { + uint256 chainId; + address addr; + uint8 decimals; + string symbol; + string name; +} +``` + +### MessageDeposit + +```solidity +struct MessageDeposit { + address token; + uint256 amount; +} +``` + +### isBridgedToken + +```solidity +mapping(address => bool) isBridgedToken +``` + +### bridgedToCanonical + +```solidity +mapping(address => struct TokenVault.CanonicalERC20) bridgedToCanonical +``` + +### canonicalToBridged + +```solidity +mapping(uint256 => mapping(address => address)) canonicalToBridged +``` + +### messageDeposits + +```solidity +mapping(bytes32 => struct TokenVault.MessageDeposit) messageDeposits +``` + +### BridgedERC20Deployed + +```solidity +event BridgedERC20Deployed(uint256 srcChainId, address canonicalToken, address bridgedToken, string canonicalTokenSymbol, string canonicalTokenName, uint8 canonicalTokenDecimal) +``` + +### EtherSent + +```solidity +event EtherSent(bytes32 msgHash, address from, address to, uint256 destChainId, uint256 amount) +``` + +### ERC20Sent + +```solidity +event ERC20Sent(bytes32 msgHash, address from, address to, uint256 destChainId, address token, uint256 amount) +``` + +### ERC20Released + +```solidity +event ERC20Released(bytes32 msgHash, address from, address token, uint256 amount) +``` + +### ERC20Received + +```solidity +event ERC20Received(bytes32 msgHash, address from, address to, uint256 srcChainId, address token, uint256 amount) +``` + +### TOKENVAULT_INVALID_TO + +```solidity +error TOKENVAULT_INVALID_TO() +``` + +Thrown when the `to` address in an operation is invalid. +This can happen if it's zero address or the address of the token vault. + +### TOKENVAULT_INVALID_VALUE + +```solidity +error TOKENVAULT_INVALID_VALUE() +``` + +Thrown when the value in a transaction is invalid. +The value can be an Ether amount or the amount of a token being +transferred. + +### TOKENVAULT_INVALID_TOKEN + +```solidity +error TOKENVAULT_INVALID_TOKEN() +``` + +Thrown when the token address in a transaction is invalid. +This could happen if the token address is zero or doesn't conform to the +ERC20 standard. + +### TOKENVAULT_INVALID_AMOUNT + +```solidity +error TOKENVAULT_INVALID_AMOUNT() +``` + +Thrown when the amount in a transaction is invalid. +This could happen if the amount is zero or exceeds the sender's balance. + +### TOKENVAULT_CANONICAL_TOKEN_NOT_FOUND + +```solidity +error TOKENVAULT_CANONICAL_TOKEN_NOT_FOUND() +``` + +Thrown when a canonical token address could not be found for a bridged +token. +This could happen when trying to send a bridged token back to its +original chain. + +### TOKENVAULT_INVALID_OWNER + +```solidity +error TOKENVAULT_INVALID_OWNER() +``` + +Thrown when the owner address in a message is invalid. +This could happen if the owner address is zero or doesn't match the +expected owner. + +### TOKENVAULT_INVALID_SRC_CHAIN_ID + +```solidity +error TOKENVAULT_INVALID_SRC_CHAIN_ID() +``` + +Thrown when the source chain ID in a message is invalid. +This could happen if the source chain ID doesn't match the current +chain's ID. + +### TOKENVAULT_MESSAGE_NOT_FAILED + +```solidity +error TOKENVAULT_MESSAGE_NOT_FAILED() +``` + +Thrown when a message has not failed. +This could happen if trying to release a message deposit without proof of +failure. + +### TOKENVAULT_INVALID_SENDER + +```solidity +error TOKENVAULT_INVALID_SENDER() +``` + +Thrown when the sender in a message context is invalid. +This could happen if the sender isn't the expected token vault on the +source chain. + +### init + +```solidity +function init(address addressManager) external +``` + +### sendERC20 + +```solidity +function sendERC20(uint256 destChainId, address to, address token, uint256 amount, uint256 gasLimit, uint256 processingFee, address refundAddress, string memo) external payable +``` + +Transfers ERC20 tokens to this vault and sends a message to the +destination chain so the user can receive the same amount of tokens +by invoking the message call. + +#### Parameters + +| Name | Type | Description | +| ------------- | ------- | -------------------------------------- | +| destChainId | uint256 | Chain ID of the destination chain | +| to | address | Address of the receiver | +| token | address | The address of the token to be sent. | +| amount | uint256 | The amount of token to be transferred. | +| gasLimit | uint256 | Gas limit for the transaction | +| processingFee | uint256 | Processing fee for the transaction | +| refundAddress | address | Address for refunds | +| memo | string | Any additional data or notes | + +### releaseERC20 + +```solidity +function releaseERC20(struct IBridge.Message message, bytes proof) external +``` + +Release deposited ERC20 back to the owner on the source TokenVault with +a proof that the message processing on the destination Bridge has failed. + +#### Parameters + +| Name | Type | Description | +| ------- | ---------------------- | ---------------------------------------------------------------------- | +| message | struct IBridge.Message | The message that corresponds to the ERC20 deposit on the source chain. | +| proof | bytes | The proof from the destination chain to show the message has failed. | + +### receiveERC20 + +```solidity +function receiveERC20(struct TokenVault.CanonicalERC20 canonicalToken, address from, address to, uint256 amount) external +``` + +This function can only be called by the bridge contract while +invoking a message call. See sendERC20, which sets the data to invoke +this function. + +#### Parameters + +| Name | Type | Description | +| -------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| canonicalToken | struct TokenVault.CanonicalERC20 | The canonical ERC20 token which may or may not live on this chain. If not, a BridgedERC20 contract will be deployed. | +| from | address | The source address. | +| to | address | The destination address. | +| amount | uint256 | The amount of tokens to be sent. 0 is a valid value. | + +--- + +## title: ProxiedTokenVault + +## ProxiedTokenVault diff --git a/packages/website/pages/docs/reference/contract-documentation/common/AddressManager.md b/packages/website/pages/docs/reference/contract-documentation/common/AddressManager.md new file mode 100644 index 00000000000..9f4d1f555c1 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/common/AddressManager.md @@ -0,0 +1,113 @@ +--- +title: IAddressManager +--- + +## IAddressManager + +Interface to set and get an address for a name. + +### setAddress + +```solidity +function setAddress(uint256 domain, bytes32 name, address newAddress) external +``` + +Changes the address associated with a particular name. + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | -------------------------------------------- | +| domain | uint256 | Uint256 domain to assiciate an address with. | +| name | bytes32 | Name to associate an address with. | +| newAddress | address | Address to associate with the name. | + +### getAddress + +```solidity +function getAddress(uint256 domain, bytes32 name) external view returns (address) +``` + +Retrieves the address associated with a given name. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | --------------------------------- | +| domain | uint256 | Class to retrieve an address for. | +| name | bytes32 | Name to retrieve an address for. | + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | --------------------------------------- | +| [0] | address | Address associated with the given name. | + +--- + +## title: AddressManager + +## AddressManager + +### AddressSet + +```solidity +event AddressSet(uint256 _domain, bytes32 _name, address _newAddress, address _oldAddress) +``` + +### EOAOwnerAddressNotAllowed + +```solidity +error EOAOwnerAddressNotAllowed() +``` + +### init + +```solidity +function init() external +``` + +_Initializer to be called after being deployed behind a proxy._ + +### setAddress + +```solidity +function setAddress(uint256 domain, bytes32 name, address newAddress) external virtual +``` + +Changes the address associated with a particular name. + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | -------------------------------------------- | +| domain | uint256 | Uint256 domain to assiciate an address with. | +| name | bytes32 | Name to associate an address with. | +| newAddress | address | Address to associate with the name. | + +### getAddress + +```solidity +function getAddress(uint256 domain, bytes32 name) external view virtual returns (address addr) +``` + +Retrieves the address associated with a given name. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | --------------------------------- | +| domain | uint256 | Class to retrieve an address for. | +| name | bytes32 | Name to retrieve an address for. | + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | --------------------------------------- | +| addr | address | Address associated with the given name. | + +--- + +## title: ProxiedAddressManager + +## ProxiedAddressManager diff --git a/packages/website/pages/docs/reference/contract-documentation/common/AddressResolver.md b/packages/website/pages/docs/reference/contract-documentation/common/AddressResolver.md new file mode 100644 index 00000000000..169e6f93ab9 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/common/AddressResolver.md @@ -0,0 +1,111 @@ +--- +title: AddressResolver +--- + +## AddressResolver + +This abstract contract provides a name-to-address lookup. Under the hood, +it uses an AddressManager to manage the name-to-address mapping. + +### \_addressManager + +```solidity +contract IAddressManager _addressManager +``` + +### AddressManagerChanged + +```solidity +event AddressManagerChanged(address addressManager) +``` + +### RESOLVER_DENIED + +```solidity +error RESOLVER_DENIED() +``` + +### RESOLVER_INVALID_ADDR + +```solidity +error RESOLVER_INVALID_ADDR() +``` + +### RESOLVER_ZERO_ADDR + +```solidity +error RESOLVER_ZERO_ADDR(uint256 chainId, bytes32 name) +``` + +### onlyFromNamed + +```solidity +modifier onlyFromNamed(bytes32 name) +``` + +### resolve + +```solidity +function resolve(bytes32 name, bool allowZeroAddress) public view virtual returns (address payable) +``` + +Resolves a name to an address on the current chain. + +_This function will throw if the resolved address is `address(0)`._ + +#### Parameters + +| Name | Type | Description | +| ---------------- | ------- | ------------------------------------------ | +| name | bytes32 | The name to resolve. | +| allowZeroAddress | bool | True to allow zero address to be returned. | + +#### Return Values + +| Name | Type | Description | +| ---- | --------------- | --------------------------------- | +| [0] | address payable | The name's corresponding address. | + +### resolve + +```solidity +function resolve(uint256 chainId, bytes32 name, bool allowZeroAddress) public view virtual returns (address payable) +``` + +Resolves a name to an address on the specified chain. + +_This function will throw if the resolved address is `address(0)`._ + +#### Parameters + +| Name | Type | Description | +| ---------------- | ------- | ------------------------------------------ | +| chainId | uint256 | The chainId. | +| name | bytes32 | The name to resolve. | +| allowZeroAddress | bool | True to allow zero address to be returned. | + +#### Return Values + +| Name | Type | Description | +| ---- | --------------- | --------------------------------- | +| [0] | address payable | The name's corresponding address. | + +### addressManager + +```solidity +function addressManager() public view returns (address) +``` + +Returns the AddressManager's address. + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | ----------------------------- | +| [0] | address | The AddressManager's address. | + +### \_init + +```solidity +function _init(address addressManager_) internal virtual +``` diff --git a/packages/website/pages/docs/reference/contract-documentation/common/ICrossChainSync.md b/packages/website/pages/docs/reference/contract-documentation/common/ICrossChainSync.md new file mode 100644 index 00000000000..b1c8ee28a16 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/common/ICrossChainSync.md @@ -0,0 +1,55 @@ +--- +title: ICrossChainSync +--- + +## ICrossChainSync + +Interface implemented by both the TaikoL1 and TaikoL2 contracts. It exposes +the methods needed to access the block hashes of the other chain. + +### CrossChainSynced + +```solidity +event CrossChainSynced(uint256 srcHeight, bytes32 blockHash, bytes32 signalRoot) +``` + +### getCrossChainBlockHash + +```solidity +function getCrossChainBlockHash(uint256 number) external view returns (bytes32) +``` + +Returns the cross-chain block hash at the given block number. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | --------------------------------------------- | +| number | uint256 | The block number. Use 0 for the latest block. | + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | --------------------------- | +| [0] | bytes32 | The cross-chain block hash. | + +### getCrossChainSignalRoot + +```solidity +function getCrossChainSignalRoot(uint256 number) external view returns (bytes32) +``` + +Returns the cross-chain signal service storage root at the given +block number. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | --------------------------------------------- | +| number | uint256 | The block number. Use 0 for the latest block. | + +#### Return Values + +| Name | Type | Description | +| ---- | ------- | -------------------------------------------- | +| [0] | bytes32 | The cross-chain signal service storage root. | diff --git a/packages/website/pages/docs/reference/contract-documentation/common/IMintableERC20.md b/packages/website/pages/docs/reference/contract-documentation/common/IMintableERC20.md new file mode 100644 index 00000000000..0c9d4cf636b --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/common/IMintableERC20.md @@ -0,0 +1,17 @@ +--- +title: IMintableERC20 +--- + +## IMintableERC20 + +### mint + +```solidity +function mint(address account, uint256 amount) external +``` + +### burn + +```solidity +function burn(address account, uint256 amount) external +``` diff --git a/packages/website/pages/docs/reference/contract-documentation/common/Proxied.md b/packages/website/pages/docs/reference/contract-documentation/common/Proxied.md new file mode 100644 index 00000000000..a3bdc134b3b --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/common/Proxied.md @@ -0,0 +1,11 @@ +--- +title: Proxied +--- + +## Proxied + +### constructor + +```solidity +constructor() internal +``` diff --git a/packages/website/pages/docs/reference/contract-documentation/gov/TaikoGovernor.md b/packages/website/pages/docs/reference/contract-documentation/gov/TaikoGovernor.md new file mode 100644 index 00000000000..06df08d5a6c --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/gov/TaikoGovernor.md @@ -0,0 +1,77 @@ +--- +title: TaikoGovernor +--- + +## TaikoGovernor + +### init + +```solidity +function init(address _addressManager, contract IVotesUpgradeable _token, contract TimelockControllerUpgradeable _timelock) public +``` + +### propose + +```solidity +function propose(address[] targets, uint256[] values, bytes[] calldatas, string description) public returns (uint256) +``` + +### votingDelay + +```solidity +function votingDelay() public view returns (uint256) +``` + +### votingPeriod + +```solidity +function votingPeriod() public view returns (uint256) +``` + +### quorum + +```solidity +function quorum(uint256 blockNumber) public view returns (uint256) +``` + +### state + +```solidity +function state(uint256 proposalId) public view returns (enum IGovernorUpgradeable.ProposalState) +``` + +### proposalThreshold + +```solidity +function proposalThreshold() public view returns (uint256) +``` + +### supportsInterface + +```solidity +function supportsInterface(bytes4 interfaceId) public view returns (bool) +``` + +### \_execute + +```solidity +function _execute(uint256 proposalId, address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) internal +``` + +### \_cancel + +```solidity +function _cancel(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) internal returns (uint256) +``` + +### \_executor + +```solidity +function _executor() internal view returns (address) +``` + +--- + +## title: ProxiedTaikoGovernor + +## ProxiedTaikoGovernor diff --git a/packages/website/pages/docs/reference/contract-documentation/signal/ISignalService.md b/packages/website/pages/docs/reference/contract-documentation/signal/ISignalService.md new file mode 100644 index 00000000000..3f342e78a44 --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/signal/ISignalService.md @@ -0,0 +1,57 @@ +--- +title: ISignalService +--- + +## ISignalService + +### sendSignal + +```solidity +function sendSignal(bytes32 signal) external returns (bytes32 storageSlot) +``` + +Send a signal by storing the key with a value of 1. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ------------------- | +| signal | bytes32 | The signal to send. | + +#### Return Values + +| Name | Type | Description | +| ----------- | ------- | -------------------------------------------------- | +| storageSlot | bytes32 | The slot in storage that this signal is persisted. | + +### isSignalSent + +```solidity +function isSignalSent(address app, bytes32 signal) external view returns (bool) +``` + +Check if a signal has been sent (key stored with a value of 1). + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ----------------------------------- | +| app | address | The address that sent this message. | +| signal | bytes32 | The signal to check. | + +### isSignalReceived + +```solidity +function isSignalReceived(uint256 srcChainId, address app, bytes32 signal, bytes proof) external view returns (bool) +``` + +Check if signal has been received on the destination chain (current). + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ------------------------------------------------------- | +| srcChainId | uint256 | The source chain ID. | +| app | address | The address that sent this message. | +| signal | bytes32 | The signal to check. | +| proof | bytes | The proof of the signal being sent on the source chain. | diff --git a/packages/website/pages/docs/reference/contract-documentation/signal/SignalService.md b/packages/website/pages/docs/reference/contract-documentation/signal/SignalService.md new file mode 100644 index 00000000000..5b70469788e --- /dev/null +++ b/packages/website/pages/docs/reference/contract-documentation/signal/SignalService.md @@ -0,0 +1,117 @@ +--- +title: SignalService +--- + +## SignalService + +### SignalProof + +```solidity +struct SignalProof { + uint256 height; + bytes proof; +} +``` + +### B_ZERO_SIGNAL + +```solidity +error B_ZERO_SIGNAL() +``` + +### B_NULL_APP_ADDR + +```solidity +error B_NULL_APP_ADDR() +``` + +### B_WRONG_CHAIN_ID + +```solidity +error B_WRONG_CHAIN_ID() +``` + +### init + +```solidity +function init(address _addressManager) external +``` + +_Initializer to be called after being deployed behind a proxy._ + +### sendSignal + +```solidity +function sendSignal(bytes32 signal) public returns (bytes32 storageSlot) +``` + +Send a signal by storing the key with a value of 1. + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ------------------- | +| signal | bytes32 | The signal to send. | + +#### Return Values + +| Name | Type | Description | +| ----------- | ------- | -------------------------------------------------- | +| storageSlot | bytes32 | The slot in storage that this signal is persisted. | + +### isSignalSent + +```solidity +function isSignalSent(address app, bytes32 signal) public view returns (bool) +``` + +Check if a signal has been sent (key stored with a value of 1). + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ----------------------------------- | +| app | address | The address that sent this message. | +| signal | bytes32 | The signal to check. | + +### isSignalReceived + +```solidity +function isSignalReceived(uint256 srcChainId, address app, bytes32 signal, bytes proof) public view returns (bool) +``` + +Check if signal has been received on the destination chain (current). + +#### Parameters + +| Name | Type | Description | +| ---------- | ------- | ------------------------------------------------------- | +| srcChainId | uint256 | The source chain ID. | +| app | address | The address that sent this message. | +| signal | bytes32 | The signal to check. | +| proof | bytes | The proof of the signal being sent on the source chain. | + +### getSignalSlot + +```solidity +function getSignalSlot(address app, bytes32 signal) public pure returns (bytes32 signalSlot) +``` + +#### Parameters + +| Name | Type | Description | +| ------ | ------- | ------------------------------------------- | +| app | address | The srcAddress of the app (eg. the Bridge). | +| signal | bytes32 | The signal to store. | + +#### Return Values + +| Name | Type | Description | +| ---------- | ------- | ----------------------------------------------------- | +| signalSlot | bytes32 | The storage key for the signal on the signal service. | + +--- + +## title: ProxiedSignalService + +## ProxiedSignalService diff --git a/packages/website/public/images/diagrams/concepts/eip-1559/fee-layout.png b/packages/website/public/images/diagrams/concepts/eip-1559/fee-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..f6dcd511a2143be69df340b950d29299f6ba0224 GIT binary patch literal 154233 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 literal 0 HcmV?d00001