diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a04649a757e..40f276a373a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,6 +1,6 @@ name: Bug report πŸ› description: Report a bug -title: "fix: INSERT_DESCRIPTIVE_TITLE" +title: "fix: " labels: ["bug", "triage"] body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000000..6165e279041 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: Community support + url: https://discord.gg/taikoxyz + about: This issue tracker is only for feature requests and bug reports. Community support is available on Discord! diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 7712a2c658d..5acb1890e5e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,6 +1,6 @@ name: Feature request πŸ’‘ description: Request a feature -title: "feat: INSERT_DESCRIPTIVE_TITLE" +title: "feat: " labels: ["feat", "triage"] body: - type: markdown diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8d6d5aa2693..ca4bf56374c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ Here are some ways you can contribute: -- Open a new issue [here](https://github.com/taikoxyz/taiko-mono/issues). +- Open a new issue [here](https://github.com/taikoxyz/taiko-mono/issues) (please check the issue does not already exist). - Work on an existing issue (check out the [good first issues list](https://github.com/taikoxyz/taiko-mono/labels/good%20first%20issue)). > Check out the [coding standards](#coding-standards) and [documentation standards](#documentation-standards) before you start working on a pull request. @@ -26,9 +26,11 @@ After your pull request is merged, a bot will automatically leave a comment with ### Pull requests -Specify the scope of your change with a [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) in the PR title (for example, `feat(scope): description of feature`). This will be squashed and merged into the `main` branch. +Specify the scope of your change with a [conventional commit](https://www.conventionalcommits.org/en/v1.0.0/) in the PR title (for example, `feat(scope): description of feature`). This will be squashed and merged into the `main` branch. You can find the full list of allowed scopes [here](https://github.com/taikoxyz/taiko-mono/blob/main/.github/workflows/lint-pr.yml#L19). -Because we squash all of the changes into a single commit, please try to keep the PR limited to the scope specified in the commit message. This commit message will end up in the automated changelog by checking which packages are affected by the commit. For example, `feat(scope): description of feature` should only impact the `scope` package. If your change is a global one, you can use `feat: description of feature`, for example. +Because we squash all of the changes into a single commit, please try to keep the PR limited to the scope specified in the commit message. This commit message will end up in the automated changelog by checking which packages are affected by the commit. + +For example, `feat(scope): description of feature` should only impact the `scope` package. If your change is a global one, you can use `feat: description of feature`, for example. ### Source code comments @@ -40,7 +42,7 @@ Follow the [NatSpec format](https://docs.soliditylang.org/en/latest/natspec-form # Documentation standards -Use the [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style-guide/welcome/) as a base point of reference. +Use the [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style-guide/welcome/) as a base point of reference for writing style. ### Philosophy @@ -52,12 +54,13 @@ Use the [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style- Group documentation under one of the four categories (adopted from [DiΓ‘taxis](https://diataxis.fr/)): -- How to - Concepts -- Tutorials +- Guides - Reference +- Resources + +### Creating content -### Images +If you are interested in creating some content (video, blog post, tweet thread, visuals, etc.), you are absolutely free to do so. It's useful to get a peer review on these, if you need a peer review please reach out to the community / team on the [Taiko Discord](https://discord.gg/taikoxyz). -- Use SVG files or crushed PNG images. -- Provide alt text. +If you are looking for some more guidance on creating content, you can consult the [Taiko content guide](https://hackmd.io/@taikolabs/BJurgF1bn). diff --git a/README.md b/README.md index e8d6d6e930c..791d6b40fb8 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

- A decentralized, Ethereum-equivalent ZK-Rollup. + A fully decentralized, Ethereum-equivalent ZK-Rollup.
Explore the website

@@ -17,15 +17,7 @@ [![Twitter Follow](https://img.shields.io/twitter/follow/taikoxyz?style=social)](https://twitter.com/taikoxyz) [![Discord](https://img.shields.io/discord/984015101017346058?color=%235865F2&label=Discord&logo=discord&logoColor=%23fff)](https://discord.gg/taikoxyz) [![GitPOAP Badge](https://public-api.gitpoap.io/v1/repo/taikoxyz/taiko-mono/badge)](https://www.gitpoap.io/gh/taikoxyz/taiko-mono) - -[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/taikoxyz/taiko-mono/protocol.yml?branch=main&label=Protocol&logo=github)](https://github.com/taikoxyz/taiko-mono/actions/workflows/protocol.yml) -[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/taikoxyz/taiko-mono/relayer.yml?branch=main&label=Relayer&logo=github)](https://github.com/taikoxyz/taiko-mono/actions/workflows/relayer.yml) -[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/taikoxyz/taiko-mono/bridge-ui.yml?branch=main&label=Bridge%20UI&logo=github)](https://github.com/taikoxyz/taiko-mono/actions/workflows/bridge-ui.yml) -[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/taikoxyz/taiko-mono/website.yml?branch=main&label=Website&logo=github)](https://github.com/taikoxyz/taiko-mono/actions/workflows/website.yml) - -[![Codecov](https://img.shields.io/codecov/c/github/taikoxyz/taiko-mono?flag=protocol&label=Protocol&logo=codecov&token=E468X2PTJC)](https://app.codecov.io/gh/taikoxyz/taiko-mono/tree/main/packages/protocol) -[![Codecov](https://img.shields.io/codecov/c/github/taikoxyz/taiko-mono?flag=relayer&label=Relayer&logo=codecov&token=E468X2PTJC)](https://app.codecov.io/gh/taikoxyz/taiko-mono/tree/main/packages/relayer) -[![Codecov](https://img.shields.io/codecov/c/github/taikoxyz/taiko-mono?flag=bridge-ui&label=Bridge%20UI&logo=codecov&token=E468X2PTJC)](https://app.codecov.io/gh/taikoxyz/taiko-mono/tree/main/packages/bridge-ui) +[![License](https://img.shields.io/github/license/taikoxyz/taiko-mono)](https://github.com/taikoxyz/taiko-mono/blob/main/LICENSE.md) @@ -36,11 +28,11 @@ Most documentation can be found on the website, at [taiko.xyz](https://taiko.xyz ## Project structure
-taiko-mono
+taiko-mono/
+β”œβ”€β”€ CHANGELOG.md
 β”œβ”€β”€ CONTRIBUTING.md
 β”œβ”€β”€ LICENSE.md
 β”œβ”€β”€ README.md
-...
 β”œβ”€β”€ packages
 β”‚   β”œβ”€β”€ branding: Taiko branding materials
 β”‚   β”œβ”€β”€ bridge-ui: Taiko Bridge frontend UI
diff --git a/packages/bridge-ui/src/App.svelte b/packages/bridge-ui/src/App.svelte
index c8a30429341..cfa1d1e26cd 100644
--- a/packages/bridge-ui/src/App.svelte
+++ b/packages/bridge-ui/src/App.svelte
@@ -140,7 +140,7 @@
       );
       successToast('Transaction completed!');
       let s = store;
-      s = s.slice(confirmedPendingTxIndex, 0);
+      s.splice(confirmedPendingTxIndex, 1);
       pendingTransactions.set(s);
     })();
   });
diff --git a/packages/bridge-ui/src/bridge/ERC20Bridge.spec.ts b/packages/bridge-ui/src/bridge/ERC20Bridge.spec.ts
index d2b8ddd56d3..aa0b69b6366 100644
--- a/packages/bridge-ui/src/bridge/ERC20Bridge.spec.ts
+++ b/packages/bridge-ui/src/bridge/ERC20Bridge.spec.ts
@@ -427,7 +427,7 @@ describe('bridge tests', () => {
         srcBridgeAddress: '0x',
         destBridgeAddress: '0x',
         signer: wallet,
-        destProvider: new ethers.providers.JsonRpcProvider(),
+        destProvider: new ethers.providers.StaticJsonRpcProvider(),
         srcTokenVaultAddress: '0x',
       }),
     ).rejects.toThrowError('message already processed');
@@ -462,7 +462,7 @@ describe('bridge tests', () => {
       srcBridgeAddress: '0x',
       destBridgeAddress: '0x',
       signer: wallet,
-      destProvider: new ethers.providers.JsonRpcProvider(),
+      destProvider: new ethers.providers.StaticJsonRpcProvider(),
       srcTokenVaultAddress: '0x',
     });
 
diff --git a/packages/bridge-ui/src/bridge/ETHBridge.spec.ts b/packages/bridge-ui/src/bridge/ETHBridge.spec.ts
index 9172f6f802b..1b0e95fb44b 100644
--- a/packages/bridge-ui/src/bridge/ETHBridge.spec.ts
+++ b/packages/bridge-ui/src/bridge/ETHBridge.spec.ts
@@ -311,7 +311,7 @@ describe('bridge tests', () => {
         srcBridgeAddress: '0x',
         destBridgeAddress: '0x',
         signer: wallet,
-        destProvider: new ethers.providers.JsonRpcProvider(),
+        destProvider: new ethers.providers.StaticJsonRpcProvider(),
         srcTokenVaultAddress: '0x',
       }),
     ).rejects.toThrowError('message already processed');
@@ -346,7 +346,7 @@ describe('bridge tests', () => {
       srcBridgeAddress: '0x',
       destBridgeAddress: '0x',
       signer: wallet,
-      destProvider: new ethers.providers.JsonRpcProvider(),
+      destProvider: new ethers.providers.StaticJsonRpcProvider(),
       srcTokenVaultAddress: '0x',
     });
 
diff --git a/packages/bridge-ui/src/components/Transaction.svelte b/packages/bridge-ui/src/components/Transaction.svelte
index 00135090699..749cfc1ab5c 100644
--- a/packages/bridge-ui/src/components/Transaction.svelte
+++ b/packages/bridge-ui/src/components/Transaction.svelte
@@ -189,13 +189,13 @@
         providers[chains[transaction.toChainId].id],
       );
 
-      transaction.status = await contract.getMessageStatus(transaction.msgHash);
-
       if (transaction.receipt && transaction.receipt.status !== 1) {
         clearInterval(interval);
         return;
       }
 
+      transaction.status = await contract.getMessageStatus(transaction.msgHash);
+
       if (transaction.status === MessageStatus.Failed) {
         if (transaction.message?.data !== '0x') {
           const srcTokenVaultContract = new ethers.Contract(
diff --git a/packages/bridge-ui/src/proof/ProofService.spec.ts b/packages/bridge-ui/src/proof/ProofService.spec.ts
index ee8fe7f2c26..343a1820f83 100644
--- a/packages/bridge-ui/src/proof/ProofService.spec.ts
+++ b/packages/bridge-ui/src/proof/ProofService.spec.ts
@@ -116,7 +116,7 @@ const destChain = 31336;
 const map = {
   [srcChain]: mockProvider,
   [destChain]: mockProvider,
-} as unknown as Record;
+} as unknown as Record;
 
 describe('prover tests', () => {
   beforeEach(() => {
diff --git a/packages/bridge-ui/src/proof/ProofService.ts b/packages/bridge-ui/src/proof/ProofService.ts
index 62bd491488a..e1fce0dffb4 100644
--- a/packages/bridge-ui/src/proof/ProofService.ts
+++ b/packages/bridge-ui/src/proof/ProofService.ts
@@ -10,9 +10,14 @@ import type {
 } from '../domain/proof';
 
 export class ProofService implements Prover {
-  private readonly providers: Record;
+  private readonly providers: Record<
+    number,
+    ethers.providers.StaticJsonRpcProvider
+  >;
 
-  constructor(providers: Record) {
+  constructor(
+    providers: Record,
+  ) {
     this.providers = providers;
   }
 
@@ -29,7 +34,7 @@ export class ProofService implements Prover {
 
   private static async getBlockAndBlockHeader(
     contract: ethers.Contract,
-    provider: ethers.providers.JsonRpcProvider,
+    provider: ethers.providers.StaticJsonRpcProvider,
   ): Promise<{ block: Block; blockHeader: BlockHeader }> {
     const latestSyncedHeader = await contract.getLatestSyncedHeader();
 
diff --git a/packages/bridge-ui/src/provider/providers.ts b/packages/bridge-ui/src/provider/providers.ts
index baf9839b761..fc4b455fbc8 100644
--- a/packages/bridge-ui/src/provider/providers.ts
+++ b/packages/bridge-ui/src/provider/providers.ts
@@ -2,7 +2,16 @@ import { ethers } from 'ethers';
 import type { ChainID } from '../domain/chain';
 import { L1_CHAIN_ID, L1_RPC, L2_CHAIN_ID, L2_RPC } from '../constants/envVars';
 
-export const providers: Record = {
-  [L1_CHAIN_ID]: new ethers.providers.JsonRpcProvider(L1_RPC),
-  [L2_CHAIN_ID]: new ethers.providers.JsonRpcProvider(L2_RPC),
+export const providers: Record<
+  ChainID,
+  ethers.providers.StaticJsonRpcProvider
+> = {
+  [L1_CHAIN_ID]: new ethers.providers.StaticJsonRpcProvider(
+    L1_RPC,
+    L1_CHAIN_ID,
+  ),
+  [L2_CHAIN_ID]: new ethers.providers.StaticJsonRpcProvider(
+    L2_RPC,
+    L2_CHAIN_ID,
+  ),
 };
diff --git a/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts b/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts
index 7e8d03f9fa5..3430bd62cf0 100644
--- a/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts
+++ b/packages/bridge-ui/src/relayer-api/RelayerAPIService.ts
@@ -18,12 +18,15 @@ import { tokenVaults } from '../vault/tokenVaults';
 import type { ChainID } from '../domain/chain';
 
 export class RelayerAPIService implements RelayerAPI {
-  private readonly providers: Record;
+  private readonly providers: Record<
+    ChainID,
+    ethers.providers.StaticJsonRpcProvider
+  >;
   private readonly baseUrl: string;
 
   constructor(
     baseUrl: string,
-    providers: Record,
+    providers: Record,
   ) {
     this.providers = providers;
 
diff --git a/packages/bridge-ui/src/storage/StorageService.ts b/packages/bridge-ui/src/storage/StorageService.ts
index 45848f209c7..f632b61a7a9 100644
--- a/packages/bridge-ui/src/storage/StorageService.ts
+++ b/packages/bridge-ui/src/storage/StorageService.ts
@@ -10,11 +10,14 @@ import type { ChainID } from '../domain/chain';
 
 export class StorageService implements Transactioner {
   private readonly storage: Storage;
-  private readonly providers: Record;
+  private readonly providers: Record<
+    ChainID,
+    ethers.providers.StaticJsonRpcProvider
+  >;
 
   constructor(
     storage: Storage,
-    providers: Record,
+    providers: Record,
   ) {
     this.storage = storage;
     this.providers = providers;
diff --git a/packages/bridge-ui/src/utils/checkIfTokenIsDeployedCrossChain.ts b/packages/bridge-ui/src/utils/checkIfTokenIsDeployedCrossChain.ts
index 925121def42..902453ea61e 100644
--- a/packages/bridge-ui/src/utils/checkIfTokenIsDeployedCrossChain.ts
+++ b/packages/bridge-ui/src/utils/checkIfTokenIsDeployedCrossChain.ts
@@ -6,7 +6,7 @@ import type { Token } from '../domain/token';
 
 export const checkIfTokenIsDeployedCrossChain = async (
   token: Token,
-  provider: ethers.providers.JsonRpcProvider,
+  provider: ethers.providers.StaticJsonRpcProvider,
   destTokenVaultAddress: string,
   toChain: Chain,
   fromChain: Chain,
diff --git a/packages/protocol/solidity-docgen/templates/contract.hbs b/packages/protocol/solidity-docgen/templates/contract.hbs
index b380ffcbb1b..2ec09e84d37 100644
--- a/packages/protocol/solidity-docgen/templates/contract.hbs
+++ b/packages/protocol/solidity-docgen/templates/contract.hbs
@@ -1,6 +1,3 @@
----
-title: {{name}}
----
 {{>common}}
 
 {{#each items}}
diff --git a/packages/website/pages/docs/guides/enable-a-prover.mdx b/packages/website/pages/docs/guides/enable-a-prover.mdx
index c0e6b7786df..efb111f1ba1 100644
--- a/packages/website/pages/docs/guides/enable-a-prover.mdx
+++ b/packages/website/pages/docs/guides/enable-a-prover.mdx
@@ -1,7 +1,9 @@
 import { Callout, Steps } from "nextra-theme-docs";
 
 
- Only the first prover can get the reward, and others will be rejected by the protocol smart contract. This means the fastest prover will be able to prove the block and earn the reward, **if you have just the minimum hardware outlined in the prerequisited below, it's unlikely you will be able to prove any blocks if there are many other high-performance provers**.
+ Only the first prover can get the reward, and others will be rejected by the protocol smart contract. This means the fastest prover will be able to prove the block and earn the reward, **if you have just the minimum hardware outlined in the prerequisited below, running a single prover, it's unlikely you will be able to prove any blocks (because you will be competing against other high-performance provers)**.
+
+Meaning, if you do not have a powerful prover, the primary purpose of running a prover is to help test out and provide community feedback on running the node software. Keep in mind this will have a cost in electricity on your computer, and if you are not proving blocks, it's unlikely you will receive a reward to offset that electricity cost.
 
 
 
diff --git a/packages/website/pages/docs/guides/run-a-node.mdx b/packages/website/pages/docs/guides/run-a-node.mdx
index 2e76ff0dbc8..b17dcc51b15 100644
--- a/packages/website/pages/docs/guides/run-a-node.mdx
+++ b/packages/website/pages/docs/guides/run-a-node.mdx
@@ -58,7 +58,7 @@ Finally, set the following environment variables:
 
 
   You can get a Sepolia L1 endpoint from a few places,
-  [Alchemy](https://www.alchemy.com/) is one popular example.
+  [Alchemy](https://www.alchemy.com/) and [Infura](https://www.infura.io/) are two popular RPC providers. **Make sure you select the RPC as Sepolia testnet, and not Ethereum mainnet**.
 
 
 ### Enable your node as a prover (optional)
diff --git a/packages/website/pages/docs/guides/swap-tokens.mdx b/packages/website/pages/docs/guides/swap-tokens.mdx
index 64a88e1329c..b94e97ff4ae 100644
--- a/packages/website/pages/docs/guides/swap-tokens.mdx
+++ b/packages/website/pages/docs/guides/swap-tokens.mdx
@@ -1,6 +1,6 @@
 import { Steps } from "nextra-theme-docs";
 
-This guide will you help you interact with Swap, which is a fork of Uniswap v2 which Taiko has deployed only for testing purposes.
+This guide will help you interact with Swap, which is a fork of Uniswap v2 which Taiko has deployed only for testing purposes.
 
 > The HORSE token and BLL token are both dummy test tokens that are used for testing the bridge and swap.
 
diff --git a/packages/website/pages/docs/index.mdx b/packages/website/pages/docs/index.mdx
index 312864df457..2f734d888da 100644
--- a/packages/website/pages/docs/index.mdx
+++ b/packages/website/pages/docs/index.mdx
@@ -2,6 +2,8 @@
 
 Taiko is a fully decentralized, Ethereum-equivalent ZK-Rollup ([Type 1 ZK-EVM](https://mirror.xyz/labs.taiko.eth/w7NSKDeKfJoEy0p89I9feixKfdK-20JgWF9HZzxfeBo)). Taiko is working on the full Ethereum [ZK-EVM circuits](https://github.com/privacy-scaling-explorations/zkevm-circuits) as part of a community effort led by the EF's PSE team.
 
+Check the Taiko Roadmap [here](/images/roadmaps/taiko-roadmap.png).
+
 ## Use the Askja testnet
 
 All the fun tasks can be found under [guides](/docs/guides). Read the full [blog post](https://mirror.xyz/labs.taiko.eth/A6G6TNN-CXDAhl42k_bNHg_20fyGcT0xH-LBBSOPNzU) for more details.
diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/ProofVerifier.md b/packages/website/pages/docs/reference/contract-documentation/L1/ProofVerifier.md
index d4790fd2a48..13e112f9238 100644
--- a/packages/website/pages/docs/reference/contract-documentation/L1/ProofVerifier.md
+++ b/packages/website/pages/docs/reference/contract-documentation/L1/ProofVerifier.md
@@ -1,7 +1,3 @@
----
-title: IProofVerifier
----
-
 ## IProofVerifier
 
 ### verifyZKP
@@ -16,10 +12,6 @@ function verifyZKP(string verifierId, bytes zkproof, bytes32 instance) external
 function verifyMKP(bytes key, bytes value, bytes proof, bytes32 root) external pure returns (bool verified)
 ```
 
----
-
-## title: ProofVerifier
-
 ## ProofVerifier
 
 ### init
diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoCustomErrors.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoCustomErrors.md
index 11961f15341..2d3b5bb44e6 100644
--- a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoCustomErrors.md
+++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoCustomErrors.md
@@ -1,7 +1,3 @@
----
-title: TaikoCustomErrors
----
-
 ## TaikoCustomErrors
 
 ### L1_0_FEE_BASE
diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md
index e17be308bd3..1661d795c3b 100644
--- a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md
+++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md
@@ -1,7 +1,3 @@
----
-title: TaikoData
----
-
 ## TaikoData
 
 ### Config
diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoEvents.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoEvents.md
index 119dc77917e..f2b99c35a8a 100644
--- a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoEvents.md
+++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoEvents.md
@@ -1,7 +1,3 @@
----
-title: TaikoEvents
----
-
 ## TaikoEvents
 
 ### BlockVerified
diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoL1.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoL1.md
index aab1821ccf6..50364027ef5 100644
--- a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoL1.md
+++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoL1.md
@@ -1,7 +1,3 @@
----
-title: TaikoL1
----
-
 ## TaikoL1
 
 ### state
diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoToken.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoToken.md
index b7a083af748..c9dda484814 100644
--- a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoToken.md
+++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoToken.md
@@ -1,7 +1,3 @@
----
-title: TaikoToken
----
-
 ## TaikoToken
 
 _This is Taiko's governance and fee token._
diff --git a/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2.md b/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2.md
index b6656f19616..81499340a97 100644
--- a/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2.md
+++ b/packages/website/pages/docs/reference/contract-documentation/L2/TaikoL2.md
@@ -1,7 +1,3 @@
----
-title: TaikoL2
----
-
 ## TaikoL2
 
 ### latestSyncedL1Height
diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/Bridge.md b/packages/website/pages/docs/reference/contract-documentation/bridge/Bridge.md
index 1fbb8458da1..f12027a2ace 100644
--- a/packages/website/pages/docs/reference/contract-documentation/bridge/Bridge.md
+++ b/packages/website/pages/docs/reference/contract-documentation/bridge/Bridge.md
@@ -1,7 +1,3 @@
----
-title: Bridge
----
-
 ## Bridge
 
 Bridge contract which is deployed on both L1 and L2. Mostly a thin wrapper
diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/BridgeErrors.md b/packages/website/pages/docs/reference/contract-documentation/bridge/BridgeErrors.md
index aead9b69527..1f208e9a07d 100644
--- a/packages/website/pages/docs/reference/contract-documentation/bridge/BridgeErrors.md
+++ b/packages/website/pages/docs/reference/contract-documentation/bridge/BridgeErrors.md
@@ -1,7 +1,3 @@
----
-title: BridgeErrors
----
-
 ## BridgeErrors
 
 ### B_CANNOT_RECEIVE
diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/BridgedERC20.md b/packages/website/pages/docs/reference/contract-documentation/bridge/BridgedERC20.md
index 6cead8c425f..9c16648f21b 100644
--- a/packages/website/pages/docs/reference/contract-documentation/bridge/BridgedERC20.md
+++ b/packages/website/pages/docs/reference/contract-documentation/bridge/BridgedERC20.md
@@ -1,7 +1,3 @@
----
-title: BridgedERC20
----
-
 ## BridgedERC20
 
 ### srcToken
diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/EtherVault.md b/packages/website/pages/docs/reference/contract-documentation/bridge/EtherVault.md
index 45723cb3d30..38da927ee29 100644
--- a/packages/website/pages/docs/reference/contract-documentation/bridge/EtherVault.md
+++ b/packages/website/pages/docs/reference/contract-documentation/bridge/EtherVault.md
@@ -1,7 +1,3 @@
----
-title: EtherVault
----
-
 ## EtherVault
 
 EtherVault is a special vault contract that:
diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/IBridge.md b/packages/website/pages/docs/reference/contract-documentation/bridge/IBridge.md
index c159a78bdc4..539e73ef00d 100644
--- a/packages/website/pages/docs/reference/contract-documentation/bridge/IBridge.md
+++ b/packages/website/pages/docs/reference/contract-documentation/bridge/IBridge.md
@@ -1,7 +1,3 @@
----
-title: IBridge
----
-
 ## IBridge
 
 Bridge interface.
diff --git a/packages/website/pages/docs/reference/contract-documentation/bridge/TokenVault.md b/packages/website/pages/docs/reference/contract-documentation/bridge/TokenVault.md
index a41b923110d..78f01cc9c00 100644
--- a/packages/website/pages/docs/reference/contract-documentation/bridge/TokenVault.md
+++ b/packages/website/pages/docs/reference/contract-documentation/bridge/TokenVault.md
@@ -1,7 +1,3 @@
----
-title: TokenVault
----
-
 ## TokenVault
 
 This vault holds all ERC20 tokens (but not Ether) that users have deposited.
diff --git a/packages/website/pages/docs/reference/contract-documentation/common/AddressResolver.md b/packages/website/pages/docs/reference/contract-documentation/common/AddressResolver.md
index 94bf6628bbc..85c90638fdb 100644
--- a/packages/website/pages/docs/reference/contract-documentation/common/AddressResolver.md
+++ b/packages/website/pages/docs/reference/contract-documentation/common/AddressResolver.md
@@ -1,7 +1,3 @@
----
-title: AddressResolver
----
-
 ## AddressResolver
 
 This abstract contract provides a name-to-address lookup. Under the hood,
diff --git a/packages/website/pages/docs/reference/contract-documentation/common/IAddressManager.md b/packages/website/pages/docs/reference/contract-documentation/common/IAddressManager.md
index 3a664d206ec..7b3385956e6 100644
--- a/packages/website/pages/docs/reference/contract-documentation/common/IAddressManager.md
+++ b/packages/website/pages/docs/reference/contract-documentation/common/IAddressManager.md
@@ -1,7 +1,3 @@
----
-title: IAddressManager
----
-
 ## IAddressManager
 
 Interface to set and get an address for a name.
diff --git a/packages/website/pages/docs/reference/contract-documentation/common/IHeaderSync.md b/packages/website/pages/docs/reference/contract-documentation/common/IHeaderSync.md
index 4c5f827a760..7d42157a897 100644
--- a/packages/website/pages/docs/reference/contract-documentation/common/IHeaderSync.md
+++ b/packages/website/pages/docs/reference/contract-documentation/common/IHeaderSync.md
@@ -1,7 +1,3 @@
----
-title: IHeaderSync
----
-
 ## IHeaderSync
 
 Interface implemented by both the TaikoL1 and TaikoL2 contracts. It exposes
diff --git a/packages/website/pages/docs/reference/contract-documentation/common/IMintableERC20.md b/packages/website/pages/docs/reference/contract-documentation/common/IMintableERC20.md
index 0c9d4cf636b..e3cc948939e 100644
--- a/packages/website/pages/docs/reference/contract-documentation/common/IMintableERC20.md
+++ b/packages/website/pages/docs/reference/contract-documentation/common/IMintableERC20.md
@@ -1,7 +1,3 @@
----
-title: IMintableERC20
----
-
 ## IMintableERC20
 
 ### mint
diff --git a/packages/website/pages/docs/reference/contract-documentation/signal/ISignalService.md b/packages/website/pages/docs/reference/contract-documentation/signal/ISignalService.md
index 3f342e78a44..cefc65a8d6d 100644
--- a/packages/website/pages/docs/reference/contract-documentation/signal/ISignalService.md
+++ b/packages/website/pages/docs/reference/contract-documentation/signal/ISignalService.md
@@ -1,7 +1,3 @@
----
-title: ISignalService
----
-
 ## ISignalService
 
 ### sendSignal
diff --git a/packages/website/pages/docs/reference/contract-documentation/signal/SignalService.md b/packages/website/pages/docs/reference/contract-documentation/signal/SignalService.md
index c6c13eb467f..3c4baa7cbd5 100644
--- a/packages/website/pages/docs/reference/contract-documentation/signal/SignalService.md
+++ b/packages/website/pages/docs/reference/contract-documentation/signal/SignalService.md
@@ -1,7 +1,3 @@
----
-title: SignalService
----
-
 ## SignalService
 
 ### SignalProof
diff --git a/packages/website/public/images/roadmaps/taiko-roadmap.png b/packages/website/public/images/roadmaps/taiko-roadmap.png
new file mode 100644
index 00000000000..941ae7bd41f
Binary files /dev/null and b/packages/website/public/images/roadmaps/taiko-roadmap.png differ