diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 0000000000..4133c9c98e
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,14 @@
+# Lines starting with '#' are comments.
+# Each line is a file pattern followed by one or more owners.
+# See [Github Documentation](https://help.github.com/articles/about-codeowners/).
+
+* @celo-org/devrel
+/docs/cli/ @celo-org/devrel @celo-org/devtooling
+/docs/developer/contractkit/ @celo-org/devrel @celo-org/devtooling
+/docs/developer/deploy/ @celo-org/devrel @celo-org/primitives
+/docs/developer/rainbowkit-celo/ @celo-org/devrel @celo-org/devtooling
+/docs/developer/sdks/ @celo-org/devrel @celo-org/devtooling
+/docs/developer/viem/ @celo-org/devrel @celo-org/devtooling
+/docs/network/node/ @celo-org/devrel @celo-org/devopsre
+/docs/protocol/identity/ @celo-org/devrel @celo-org/primitives
+/docs/cel2 @celo-org/blockchain
diff --git a/.github/renovate.json5 b/.github/renovate.json5
new file mode 100644
index 0000000000..2674a9662e
--- /dev/null
+++ b/.github/renovate.json5
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": ["github>celo-org/.github:renovate-config"]
+}
diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml
new file mode 100644
index 0000000000..119e09062d
--- /dev/null
+++ b/.github/workflows/links.yml
@@ -0,0 +1,56 @@
+name: Check Broken Links
+
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: "0 5 * * SUN" # at 5am on Sundays
+
+jobs:
+ linkChecker:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Restore lychee cache
+ id: restore-cache
+ uses: actions/cache@v4
+ with:
+ path: .lycheecache
+ key: cache-lychee-${{ github.sha }}
+ restore-keys: cache-lychee-
+
+ - uses: actions/checkout@v4
+
+ - name: Link Checker
+ id: lychee
+ uses: lycheeverse/lychee-action@v2
+ with:
+ fail: false
+ args: >-
+ --verbose
+ --no-progress
+ --cache --max-cache-age 1d
+ './**/*.html'
+ './**/*.js'
+ './**/*.md'
+ './**/*.rst'
+ './**/*.tsx'
+ env:
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
+
+ - name: Check Output Size and Exit If Too Large
+ id: wc
+ shell: bash
+ run: |
+ # See https://github.com/peter-evans/create-issue-from-file/issues/1049
+ if [ "$(wc -m < ./lychee/out.md)" -gt 65536 ]; then
+ echo "Link Checker output is too big (> 65536 characters) for a GitHub Issue descriptions."
+ exit 1
+ fi
+
+ - name: Create Issue From File
+ if: steps.lychee.outputs.exit_code != 0
+ uses: peter-evans/create-issue-from-file@v5
+ with:
+ title: Link Checker Report
+ content-filepath: ./lychee/out.md
+ labels: bug, automated issue
diff --git a/.gitignore b/.gitignore
index ca07f1f481..7408c345d8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,4 +21,5 @@ yarn-debug.log*
yarn-error.log*
# Translations
-i18n/
\ No newline at end of file
+i18n/
+.netlify
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000..2fa44adf5c
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "submodules/developer-tooling"]
+ path = submodules/developer-tooling
+ url = https://github.com/celo-org/developer-tooling.git
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000000..0967ef424b
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1 @@
+{}
diff --git a/babel.config.js b/babel.config.js
index e00595dae7..bfd75dbdfc 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,3 +1,3 @@
module.exports = {
- presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
+ presets: [require.resolve("@docusaurus/core/lib/babel/preset")],
};
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/1.png b/blog/03-28-2023-introducing-prosperity-passport/images/1.png
new file mode 100644
index 0000000000..0348fdbf95
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/1.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/2.png b/blog/03-28-2023-introducing-prosperity-passport/images/2.png
new file mode 100644
index 0000000000..dd30503e6f
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/2.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/3.png b/blog/03-28-2023-introducing-prosperity-passport/images/3.png
new file mode 100644
index 0000000000..6920ceb076
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/3.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/4.png b/blog/03-28-2023-introducing-prosperity-passport/images/4.png
new file mode 100644
index 0000000000..b5cbd239c1
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/4.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/5.png b/blog/03-28-2023-introducing-prosperity-passport/images/5.png
new file mode 100644
index 0000000000..3baba2da1c
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/5.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/6.png b/blog/03-28-2023-introducing-prosperity-passport/images/6.png
new file mode 100644
index 0000000000..3ac63c191f
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/6.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/7.png b/blog/03-28-2023-introducing-prosperity-passport/images/7.png
new file mode 100644
index 0000000000..009b66056d
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/7.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/8.png b/blog/03-28-2023-introducing-prosperity-passport/images/8.png
new file mode 100644
index 0000000000..e628e6eeb2
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/8.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/images/9.png b/blog/03-28-2023-introducing-prosperity-passport/images/9.png
new file mode 100644
index 0000000000..88cc7c1c3d
Binary files /dev/null and b/blog/03-28-2023-introducing-prosperity-passport/images/9.png differ
diff --git a/blog/03-28-2023-introducing-prosperity-passport/introducing-prosperity-passport.md b/blog/03-28-2023-introducing-prosperity-passport/introducing-prosperity-passport.md
new file mode 100644
index 0000000000..35bb3c30ee
--- /dev/null
+++ b/blog/03-28-2023-introducing-prosperity-passport/introducing-prosperity-passport.md
@@ -0,0 +1,96 @@
+---
+title: Introducing Prosperity Passport - The First Soulbound Token-Powered Web3 Identity Solution for Celo Blockchain
+description: Introducing Prosperity Passport - a groundbreaking Web3 identity solution for Celo blockchain. The first-ever soulbound token-powered platform to enable secure, decentralized identity verification.
+authors:
+ - name: Kunal Dawar
+ title: Community Member, Celo Foundation
+ url: https://github.com/developerkunal
+ image_url: https://avatars.githubusercontent.com/u/35455566?v=4
+tags: ["beginner", "celosage", "celo"]
+hide_table_of_contents: false
+slug: /tutorials/introducing-prosperity-passport-the-first-soulbound-token-powered-web3-identity-solution-for-celo-blockchain
+---
+
+
+
+## 🌱 Introduction
+
+The rise of Web3 technologies has created new opportunities for decentralized identity solutions that provide more privacy, security, and control for users. One such solution is Prosperity Passport, the first soulbound token-powered identity solution for the Celo blockchain.
+
+## What is Prosperity Passport?
+
+Prosperity Passport is a decentralized identity solution that allows users to create and manage their own digital identity on the Celo blockchain. It leverages the power of soulbound tokens to secure and authenticate users' identities, making it more difficult for hackers and bad actors to steal or manipulate them.
+
+Soulbound tokens are unique digital assets that are created when a user's identity is verified on the Celo blockchain. These tokens are then bound to the user's identity and cannot be transferred to anyone else. This means that only the rightful owner of the token can access their digital identity, making it more secure and tamper-proof.
+
+## How does Prosperity Passport work?
+
+To use Prosperity Passport, users first need to verify their identity on the Celo blockchain. This can be done by providing some basic information, such as their name, address, and phone number. Once their identity is verified, a soulbound token is created and bound to their identity.
+
+Users can then use their soulbound token to access various services and applications on the Celo blockchain. For example, they can use it to authenticate themselves on decentralized finance (DeFi) platforms, access decentralized marketplaces, and participate in decentralized governance.
+
+## What are the benefits of using Prosperity Passport?
+
+There are several benefits to using Prosperity Passport as your decentralized identity solution:
+
+- Increased privacy: With Prosperity Passport, users have more control over their personal data and can choose which information to share with which applications.
+
+- Improved security: Soulbound tokens make it more difficult for bad actors to steal or manipulate users' identities, making Prosperity Passport a more secure solution.
+
+- Seamless user experience: With Prosperity Passport, users only need to verify their identity once and can then access various services and applications on the Celo blockchain without having to repeat the process.
+
+- Interoperability: Prosperity Passport is designed to be interoperable with other decentralized identity solutions, making it easier for users to switch between different solutions as needed.
+
+## How to Claim a .Celo Domain & Mint a Prosperity Passport
+
+To get started with Prosperity Passport, users can mint their Prosperity Passport, which automatically creates their soulbound identity on Celo. Users can also mint a .celo domain, similar to an ENS domain, but on the Celo blockchain.
+
+**Here are the steps to claim a .Celo domain and mint a Prosperity Passport:**
+
+1. Visit [app.prosperity.global](https://app.prosperity.global)
+ Connect your wallet and authenticate it on the Prosperity Passport dashboard. If you are not yet on Celo, add Celo Mainnet to your MetaMask and switch to Celo Mainnet.
+
+ 
+
+2. You’ll be prompted to create and mint your unique .celo domains (e.g. refi.celo; green.celo). Pick a domain name for your Prosperity Passport, and the time-frame you’d like to register it for. You can use any combination of numbers, letters and emojis.
+
+ 
+
+ 
+
+ 
+
+ 
+
+3. Five-character .celo domains and above are free — you just need to pay the Celo gas gee. The average gas fee is $0.0005, according to Celo’s website.
+
+ 
+
+ 
+
+4. Approve the transaction & success, that’s it! Don’t forget to share your newly minted .celo domain on social.
+ .Celo Domains
+
+ 
+
+ 
+
+5. Once you create your Prosperity Passport, you can give it a domain name in the format of .celo, similar to an ENS. Up next, Masa will be working to integrate full .celo domain names within the Celo ecosystem wallet infrastructure, so you can use your .celo as your human-readable address across Celo.
+
+**_Feel free to mint as many .celo domains as you like. Use any creative combination of letters, numbers and emojis to create fun, unique, and rare .celo domains. Don’t forget to share your newly minted .celo on social!_**
+
+## Rewards
+
+Masa has some exciting rewards, perks, and partnerships lined up within the Celo Ecosystem in the near future. Get started by creating your Prosperity Passport at app.prosperity.passport.
+
+## Conclusion
+
+Prosperity Passport is a promising decentralized identity solution that leverages the power of soulbound tokens to provide more privacy, security, and control for users on the Celo blockchain. As Web3 technologies continue to evolve, it's exciting to see innovative solutions like Prosperity Passport emerge to help users take back control of their digital identities.
+
+## About Author
+
+Hi! My name is Kunal Dawar and I am a Full Stack web2/web3 Developer. I have participated in numerous hackathons and have been fortunate enough to win many of them.
+
+One thing that I am truly passionate about is creating things that are reliable and don't break easily. I believe that creating high-quality products is important not only for the users but also for the overall growth and success of a business.
+
+In my free time, I enjoy learning about new technologies and staying up-to-date with the latest trends in the field. I also love to share my knowledge with others and mentor those who are interested in pursuing a career in web development.
\ No newline at end of file
diff --git a/blog/04-01-2023-How-To-Build-A-Multi-Signature-Wallet/How-To-Build-A-Multi-Signature-Wallet-Contract.md b/blog/04-01-2023-How-To-Build-A-Multi-Signature-Wallet/How-To-Build-A-Multi-Signature-Wallet-Contract.md
new file mode 100644
index 0000000000..4c21a09973
--- /dev/null
+++ b/blog/04-01-2023-How-To-Build-A-Multi-Signature-Wallet/How-To-Build-A-Multi-Signature-Wallet-Contract.md
@@ -0,0 +1,409 @@
+---
+title: How To Build A Multi Signature Wallet Contract That Requires Multiple Approvals For Transactions On Celo
+description: In this tutorial, we will walk through the process of building a multi-signature wallet contract using Solidity and Remix IDE
+authors:
+ - name: ✍️ Jonathan Iheme
+ url: https://github.com/4undRaiser
+ image_url: https://avatars.githubusercontent.com/u/87926451?s=96&v=4
+tags: [celosage, solidity, celo, intermediate]
+hide_table_of_contents: true
+slug: "/tutorials/how-to-build-a-multi-signature-wallet-contract-that-requires-multiple-approvals-for-transactions-on-celo"
+---
+
+
+
+## Introduction
+
+A multi-signature wallet contract is a type of smart contract that requires multiple approvals before executing a transaction. This can be useful for organizations or groups that want to maintain shared control over funds or resources. In this tutorial we'll create a simple multi-signature wallet contract written with Solidity:
+
+Here's the github repo of our code. [source code](https://github.com/4undRaiser/celo-multi-signature-wallet)
+
+## Prerequisites
+
+To follow this tutorial, you will need the following:
+
+- Basic knowledge of Solidity programming language.
+- A Development Environment Like Remix.
+- The celo Extension Wallet.
+
+## SmartContract
+
+Let's begin writing our smart contract in Remix IDE
+
+The completed code Should look like this.
+
+```solidity
+ // SPDX-License-Identifier: MIT
+ pragma solidity ^0.8.0;
+
+contract MultiSigWallet {
+ address[] public owners;
+ uint256 public required;
+
+ struct Transaction {
+ address destination;
+ uint256 value;
+ bytes data;
+ bool executed;
+ }
+
+ mapping(uint256 => Transaction) public transactions;
+ mapping(uint256 => mapping(address => bool)) public confirmations;
+ uint256 public transactionCount;
+
+ modifier validRequirement(uint256 _ownerCount, uint256 _required) {
+ require(_required > 0, "Required should be greater than 0");
+ require(_ownerCount >= _required, "Owners count should be greater than or equal to required");
+ _;
+ }
+
+ modifier ownerExists(address _owner) {
+ require(isOwner(_owner), "Not an owner");
+ _;
+ }
+
+ modifier notNull(address _address) {
+ require(_address != address(0), "Address should not be null");
+ _;
+ }
+
+ constructor(address[] memory _owners, uint256 _required) validRequirement(_owners.length, _required) {
+ for (uint256 i = 0; i < _owners.length; i++) {
+ require(!isOwner(_owners[i]), "Duplicate owner");
+ owners.push(_owners[i]);
+ }
+ required = _required;
+ }
+
+ function isOwner(address _owner) public view returns (bool) {
+ for (uint256 i = 0; i < owners.length; i++) {
+ if (owners[i] == _owner) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function submitTransaction(address _destination, uint256 _value, bytes memory _data)
+ public
+ ownerExists(msg.sender)
+ notNull(_destination)
+ returns (uint256)
+ {
+ uint256 transactionId = addTransaction(_destination, _value, _data);
+ confirmTransaction(transactionId);
+ return transactionId;
+ }
+
+ function confirmTransaction(uint256 _transactionId) public ownerExists(msg.sender) {
+ require(!confirmations[_transactionId][msg.sender], "Transaction already confirmed by this owner");
+ confirmations[_transactionId][msg.sender] = true;
+ executeTransaction(_transactionId);
+ }
+
+ function executeTransaction(uint256 _transactionId) public {
+ require(transactions[_transactionId].executed == false, "Transaction already executed");
+ if (isConfirmed(_transactionId)) {
+ transactions[_transactionId].executed = true;
+ (bool success, ) = transactions[_transactionId].destination.call{value: transactions[_transactionId].value}(
+ transactions[_transactionId].data
+ );
+ require(success, "Transaction execution failed");
+ }
+ }
+
+ function isConfirmed(uint256 _transactionId) public view returns (bool) {
+ uint256 count = 0;
+ for (uint256 i = 0; i < owners.length; i++) {
+ if (confirmations[_transactionId][owners[i]]) {
+ count += 1;
+ }
+ if (count == required) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function addTransaction(address _destination, uint256 _value, bytes memory _data)
+ internal
+ notNull(_destination)
+ returns (uint256)
+ {
+ uint256 transactionId = transactionCount;
+ transactions[transactionId] = Transaction({
+ destination: _destination,
+ value: _value,
+ data: _data,
+ executed: false
+ });
+ transactionCount += 1;
+ return transactionId;
+}
+
+function getOwners() public view returns (address[] memory) {
+ return owners;
+}
+
+function getTransaction(uint256 _transactionId) public view returns (address destination, uint256 value, bytes memory data, bool executed) {
+ Transaction memory transaction = transactions[_transactionId];
+ return (transaction.destination, transaction.value, transaction.data, transaction.executed);
+}
+
+function getConfirmationCount(uint256 _transactionId) public view returns (uint256) {
+ uint256 count = 0;
+ for (uint256 i = 0; i < owners.length; i++) {
+ if (confirmations[_transactionId][owners[i]]) {
+ count += 1;
+ }
+ }
+ return count;
+}
+
+function isConfirmedBy(uint256 _transactionId, address _owner) public view returns (bool) {
+ return confirmations[_transactionId][_owner];
+}
+
+receive() external payable {}
+}
+```
+
+### Breakdown
+
+First, we declared our license and the solidity version.
+
+```solidity
+// SPDX-License-Identifier: MIT
+ pragma solidity ^0.8.0;
+```
+
+**State Variables**
+
+The state variables of the contract are defined next:
+
+```solidity
+contract MultiSigWallet {
+ address[] public owners;
+ uint256 public required;
+
+ struct Transaction {
+ address destination;
+ uint256 value;
+ bytes data;
+ bool executed;
+}
+
+mapping(uint256 => Transaction) public transactions;
+mapping(uint256 => mapping(address => bool)) public confirmations;
+uint256 public transactionCount;
+
+}
+```
+
+The `owners` variable is an array of addresses that represent the owners of the multi-signature wallet. The `required` variable represents the number of signatures required to execute a transaction.
+
+The `Transaction` struct defines the properties of a transaction, including the destination address, value, data, and execution status.
+
+The `transactions` mapping stores the transactions by their IDs. The `confirmations` mapping stores the confirmations for each transaction by the owner address. The `transactionCount` variable keeps track of the number of transactions.
+
+**Modifiers**
+
+```solidity
+ modifier validRequirement(uint256 _ownerCount, uint256 _required) {
+ require(_required > 0, "Required should be greater than 0");
+ require(_ownerCount >= _required, "Owners count should be greater than or equal to required");
+ _;
+ }
+
+ modifier ownerExists(address _owner) {
+ require(isOwner(_owner), "Not an owner");
+ _;
+ }
+
+ modifier notNull(address _address) {
+ require(_address != address(0), "Address should not be null");
+ _;
+ }
+```
+
+Modifiers are used to add conditions to functions. The `validRequirement` modifier checks if the number of owners and the required number of signatures are valid. The `ownerExists` modifier checks if the address passed is one of the owners. The `notNull` modifier checks if an address is not null.
+
+**Constructor**
+
+```solidity
+ constructor(address[] memory _owners, uint256 _required) validRequirement(_owners.length, _required) {
+ for (uint256 i = 0; i < _owners.length; i++) {
+ require(!isOwner(_owners[i]), "Duplicate owner");
+ owners.push(_owners[i]);
+ }
+ required = _required;
+ }
+```
+
+The constructor takes an array of addresses representing the owners and the required number of signatures. It calls the `validRequirement` modifier to check if the parameters are valid.
+
+The constructor adds each owner to the `owners` array and sets the required number of signatures.
+
+**Functions**
+
+The contract defines several functions:
+
+```solidity
+ function isOwner(address _owner) public view returns (bool) {
+ for (uint256 i = 0; i < owners.length; i++) {
+ if (owners[i] == _owner) {
+ return true;
+ }
+ }
+ return false;
+ }
+```
+
+The `isOwner` function checks if the address passed is one of the owners.
+
+```solidity
+ function submitTransaction(address _destination, uint256 _value, bytes memory _data)
+ public
+ ownerExists(msg.sender)
+ notNull(_destination)
+ returns (uint256)
+ {
+ uint256 transactionId = addTransaction(_destination, _value, _data);
+ confirmTransaction(transactionId);
+ return transactionId;
+ }
+```
+
+The `submitTransaction` function creates a new `transaction` and adds it to the transactions mapping using the `addTransaction` function. It then calls the `confirmTransaction` function to confirm the transaction.
+
+```solidity
+ function confirmTransaction(uint256 _transactionId) public ownerExists(msg.sender) {
+ require(!confirmations[_transactionId][msg.sender], "Transaction already confirmed by this owner");
+ confirmations[_transactionId][msg.sender] = true;
+ executeTransaction(_transactionId);
+ }
+```
+
+The `confirmTransaction` function confirms a transaction by setting the confirmation for the transaction ID and the owner address to true. It then calls the `executeTransaction` function to execute the transaction if it has been confirmed by all required owners.
+
+```solidity
+ function executeTransaction(uint256 _transactionId) public {
+ require(transactions[_transactionId].executed == false, "Transaction already executed");
+ if (isConfirmed(_transactionId)) {
+ transactions[_transactionId].executed = true;
+ (bool success, ) = transactions[_transactionId].destination.call{value: transactions[_transactionId].value}(
+ transactions[_transactionId].data
+ );
+ require(success, "Transaction execution failed");
+ }
+ }
+```
+
+The `executeTransaction` function executes a transaction if it has not been executed yet and if it has been confirmed by all required owners. It uses the `call` function to send the value and data to the destination address.
+
+```solidity
+ function isConfirmed(uint256 _transactionId) public view returns (bool) {
+ uint256 count = 0;
+ for (uint256 i = 0; i < owners.length; i++) {
+ if (confirmations[_transactionId][owners[i]]) {
+ count += 1;
+ }
+ if (count == required) {
+ return true;
+ }
+ }
+ return false;
+ }
+```
+
+The `isConfirmed` function checks if a transaction has been confirmed by all required owners.
+
+```solidity
+ function addTransaction(address _destination, uint256 _value, bytes memory _data)
+ internal
+ notNull(_destination)
+ returns (uint256)
+ {
+ uint256 transactionId = transactionCount;
+ transactions[transactionId] = Transaction({
+ destination: _destination,
+ value: _value,
+ data: _data,
+ executed: false
+ });
+ transactionCount += 1;
+ return transactionId;
+}
+```
+
+The `addTransaction` function adds a new `transaction` to the transactions mapping and returns the transaction ID.
+
+```solidity
+function getOwners() public view returns (address[] memory) {
+ return owners;
+}
+```
+
+The `getOwners` function returns the array of owner addresses.
+
+```solidity
+function getTransaction(uint256 _transactionId) public view returns (address destination, uint256 value, bytes memory data, bool executed) {
+ Transaction memory transaction = transactions[_transactionId];
+ return (transaction.destination, transaction.value, transaction.data, transaction.executed);
+}
+```
+
+The `getTransaction` function returns the properties of a transaction by its ID.
+
+```solidity
+function getConfirmationCount(uint256 _transactionId) public view returns (uint256) {
+ uint256 count = 0;
+ for (uint256 i = 0; i < owners.length; i++) {
+ if (confirmations[_transactionId][owners[i]]) {
+ count += 1;
+ }
+ }
+ return count;
+}
+```
+
+The `getConfirmationCount` function returns the number of confirmations for a transaction by its ID.
+
+```solidity
+function isConfirmedBy(uint256 _transactionId, address _owner) public view returns (bool) {
+ return confirmations[_transactionId][_owner];
+}
+```
+
+The `isConfirmedBy` function checks if a transaction has been confirmed by a specific owner.
+
+```solidity
+receive() external payable {}
+```
+
+The `receive` function allows the contract to receive Ether.
+
+## Deployment
+
+To deploy our smart contract successfully, we need the celo extention wallet which can be downloaded from [here](https://chrome.google.com/webstore/detail/celoextensionwallet/kkilomkmpmkbdnfelcpgckmpcaemjcdh?hl=en)
+
+Next, we need to fund our newly created wallet which can done using the celo alfojares faucet [Here](https://celo.org/developers/faucet)
+
+You can now fund your wallet and deploy your contract using the celo plugin in remix.
+
+## Conclusion
+
+In this tutorial, we created a MultiSigWallet contract written in Solidity. We have covered the state variables, modifiers, constructor, and functions in detail. This contract is an example of how multi-signature wallets can be implemented in decentralized applications to ensure secure and transparent management of funds.
+
+## Next Steps
+
+I hope you learned a lot from this tutorial. Here are some relevant links that would aid your learning further.
+
+- [Celo Docs](https://docs.celo.org/)
+- [Solidity Docs](https://docs.soliditylang.org/en/v0.8.17/)
+
+## About the author
+
+I'm Jonathan Iheme, A full stack block-chain Developer from Nigeria.
+
+Thank You!!
diff --git a/blog/2021-11-08-contributing.md b/blog/2021-11-08-contributing.md
deleted file mode 100644
index 806365514c..0000000000
--- a/blog/2021-11-08-contributing.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: Contributing to the Blog
-description: How to contribute to the blog
-slug: blog-contributions
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [contribute]
-image: https://i.imgur.com/mErPwqL.png
-hide_table_of_contents: false
----
-
-Contribute to Celo.
-
-## Open Source
-
-Celo is an open source project and without community contributions from people like you Celo wouldn't exist. We welcome contributions to our [codebase](https://github.com/celo-org), [documentation](https://github.com/celo-org/docs), [translations](https://celo.crowdin.com/) and [blog](https://github.com/celo-org/docs/blog).
-
-It can be difficult to find ways to meaningfully contribute to a new project, but writing a guest post on our blog is a great way to get started!
-
-Write about your experience as a member of the Celo community, whether you're a CELO owner or a project founder. Your experience and perspective is valuable and can help others.
-
-
-
-## Blog Ideas
-
-Here are some topics that you could write about:
-
-- Document your experience onboarding to Celo
-- Share how Celo has impacted your life
-- Using DeFi on Celo
-- Minting tokens on Celo
-- How to build a product or service on Celo
-- How to debug transactions using the Truffle debugger
-- Getting events using the Graph protocol
-- How to contribute to specific Celo packages
-- Project spotlights (your own project or researching another)
-
-## How to Contribute
-
-### File naming
-
-Creating a new post in the blog is straightforward. Create a new file in the [blog directory](https://github.com/celo-org/docs/tree/main/blog) in the documentation repository. Filenames follow the format of `YYYY-MM-DD-post-name.md`. For example, this post was written November 8th, 2021 so it has the filename `2021-11-08-contributing.md`.
-
-### Front Matter
-
-Posts are written in [Markdown](https://www.markdownguide.org/). Posts include front matter. Front matter is file metadata at the top of the file that provides more information about the post. The front matter for this post looks like this:
-
-```md
----
-title: Contributing to the Blog
-description: How to contribute to the blog
-slug: blog-contributions
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [contribute]
-image: https://i.imgur.com/mErPwqL.png
-hide_table_of_contents: false
----
-```
-
-### Post summary
-
-Pages can also include a `` tag that specifies what text will be shown along with the post title on the post list page. Any text above `` will appear as the post summary.
-
-### Adding static assets
-
-If you would like to include images or other static assets in a post, you can create a folder following the naming convention described above (YYYY-MM-DD-post-name). The contents of the folder can include the images and the post (with filename index.md).
-
-For examples of how other posts do this and to see how other features are implemented (like [live coding](./2021-11-15-code-playground.md)), check out other posts source code in the [blog directory on GitHub](https://github.com/celo-org/docs/tree/main/blog).
-
-## Reach out
-
-If you have any questions, feel free to join our Discord server at [https://chat.celo.org](https://chat.celo.org) and feel free to reach out to me. My username is joshc#0001.
diff --git a/blog/2021-11-15-code-playground.md b/blog/2021-11-15-code-playground.md
deleted file mode 100644
index 80a4c92601..0000000000
--- a/blog/2021-11-15-code-playground.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: Intro to the Code Playground
-description: Playing with Code
-slug: code-playground
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [code playground]
-image: https://dl.airtable.com/.attachmentThumbnails/a7e530eb72ac8f30f37c0a3447ef0e7d/72e944da
-hide_table_of_contents: false
----
-
-This post provides an introduction to the live code editor that is included as a feature in this blog. It allows you to see working examples of things like connecting to the Celo network with Metamask and initiating user transactions with the SDK.
-
-If you have any suggestions for examples that you'd like to see, or if you'd like to create one yourself and have it included in the blog, please reach out to me at [josh@clabs.co](mailto:josh@clabs.co) or on Discord at joshc#0001.
-
-## Live coding
-
-This is a live, editable code block. You can update the code right on this page and it will be compiled and executed as you updated it. This is a powerful feature for learning and testing code in real time--you get immediate feedback about what works and what doesn't.
-
-:::note
-
-The code is rendered using [React Live](https://github.com/FormidableLabs/react-live). This means that the code is rendered as a React component, which gives you access to React features like hooks, but also limits what is possible.
-
-:::
-
-
-### Hello World
-
-Try it out:
-
-```jsx live
-function helloWorld(){
-
- return
Hello World!
-
-}
-```
-
-Edit the code to return some new text. Try rendering different HTML.
-
-You can see that the result is a simple rendering of the return statement, which is just HTML. The component must include a return statement, although you can return an empty string. You can also log stuff to your browser console from the environment.
-
-### Logging
-
-See this example that returns an empty string and logs the browser `Window` object.
-
-```jsx live
-function logger(){
- console.log(window)
- return ""
-}
-```
-
-Cool!
-
-This is just a small preview into what code sharing and learning experiences we can build with this tool. Check out this post about [Connecting to Metamask](2021-11-16-connect-to-metamask.md) to learn more.
diff --git a/blog/2021-11-16-connect-to-metamask.md b/blog/2021-11-16-connect-to-metamask.md
deleted file mode 100644
index c1a37631ae..0000000000
--- a/blog/2021-11-16-connect-to-metamask.md
+++ /dev/null
@@ -1,157 +0,0 @@
----
-title: Code Playground -- Metamask
-description: Playing with Metamask
-slug: code-metamask
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [code playground]
-image: https://dl.airtable.com/.attachmentThumbnails/a7e530eb72ac8f30f37c0a3447ef0e7d/72e944da
-hide_table_of_contents: false
----
-
-Let's see how we can interact with Metamask from the code playground. We can connect to Metamask, switch networks, add tokens to the Metamask asset list and send them to other accounts.
-
-This post uses a live code editor. Check out [this post](2021-11-15-code-playground.md) to learn more about how it works.
-
-:::tip
-
-Make sure that you have have [Metamask installed](https://metamask.io) in your browser.
-
-:::
-
-## Connect to Metamask
-
-The following example shows how to connect Metamask to this browser page.
-
-:::note
-
-This function will only trigger an action if Metamask is not yet connect to the site. If you've already connected, nothing will happen.
-
-:::
-
-```jsx live
-function connect() {
- function connectMetamask() {
- ethereum.request({ method: "eth_requestAccounts" });
- }
-
- return ;
-}
-```
-
-
-
-### Switch Networks
-
-This example shows how you can prompt a user to connect to a specific Celo network. This component renders two buttons, one to connect to Celo mainnet and one to connect to the Alfajores testnet. If you try to connect to a network that you are already connected to, nothing happens.
-
-Try it out:
-
-```jsx live
-function MetamaskSwitchNetwork() {
- const NETWORK_PARAMS = {
- chainName: "Celo",
- nativeCurrency: {
- name: "Celo",
- symbol: "CELO",
- decimals: 18,
- },
- };
-
- const MAINNET_PARAMS = {
- ...NETWORK_PARAMS,
- chainId: "0xa4ec", // 42220
- rpcUrls: ["https://forno.celo.org"],
- blockExplorerUrls: ["https://explorer.celo.org/"],
- };
-
- const ALFAJORES_PARAMS = {
- ...NETWORK_PARAMS,
- chainId: "0xaef3", // 44787
- rpcUrls: ["https://alfajores-forno.celo-testnet.org"],
- blockExplorerUrls: ["https://alfajores-blockscout.celo-testnet.org/"],
- };
-
- function addMainnet() {
- window.ethereum.request({
- method: "wallet_addEthereumChain",
- params: [MAINNET_PARAMS],
- });
- }
-
- function addAlfajores() {
- window.ethereum.request({
- method: "wallet_addEthereumChain",
- params: [ALFAJORES_PARAMS],
- });
- }
-
- return (
-
-
-
-
-
-
- );
-}
-```
-
-### Add Tokens
-
-The following code example shows how you can add the cUSD token on the Alfajores testnet to Metamask. To add other tokens, just update the parameter options. You can read more about the Metamask API [here](https://docs.metamask.io/guide/rpc-api.html#wallet-watchasset).
-
-```jsx live
-function MetamaskAddToken() {
- const TOKEN_PARAMS = {
- type: "ERC20",
- options: {
- address: "0x874069Fa1Eb16D44d622F2e0Ca25eeA172369bC1",
- symbol: "cUSD",
- decimals: 18,
- },
- };
-
- function addToken() {
- window.ethereum.request({
- method: "wallet_watchAsset",
- params: TOKEN_PARAMS,
- });
- }
-
- return ;
-}
-```
-
-### Send Tokens
-
-Let's try to send some CELO on Alfajores. Make sure you are connected to the Alfajores testnet, you can double check by clicking the `Connect to Alfajores Testnet` button above again.
-
-Make sure you have some Alfajores CELO to send. If you need some, you can get some from [the faucet here](https://celo.org/developers/faucet).
-
-```jsx live
-function MetamaskSendCelo() {
- const TX_PARAMS = {
- to: "0x5038ae19CDf0B623e6e8015249ecF58A1165D653",
- from: ethereum.selectedAddress,
- value: "0x11111111111111",
- };
-
- async function send() {
- let txID = await window.ethereum.request({
- method: "eth_sendTransaction",
- params: [TX_PARAMS],
- });
- console.log(txID);
- }
-
- return ;
-}
-```
-
-Click the button to send some CELO. Once you click submit, the transaction id will be logged in the browser console!
-
-To send cUSD or interact with any other smart contract, you will have to encode the data and include it in the transaction data field. Libraries like [web3.js](https://web3js.readthedocs.io/en/v1.5.2/) and [contractkit](https://www.npmjs.com/package/@celo/contractkit) make this easier. We will go over using web3.js and contractkit in future posts.
diff --git a/blog/2021-11-18-observable-intro/index.md b/blog/2021-11-18-observable-intro/index.md
deleted file mode 100644
index 2b28383faf..0000000000
--- a/blog/2021-11-18-observable-intro/index.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-title: Demos with ObservableHQ
-description: Learn more about Observable notebooks and how they can be used in a blog
-slug: observable-intro
-authors: [josh]
-tags: [observable]
-image: https://dl.airtable.com/.attachmentThumbnails/7d8f17f343965c3ed93eafadc818c0f5/427cd0fe
-hide_table_of_contents: false
----
-
-## What is Observable?
-
-[Observable HQ](https://observablehq.com/) is a Javascript notebook tool that makes it easy to share executable Javascript code right in the browser. This greatly reduces the friction around introducing and educating people about tools or features. Observable is designed primarily as a data visualization tool, but I have found it to be helpful for explaining and demonstrating concepts and behaviors for web3 as well.
-
-For the official introduction to Observable, [check out the 5 minute introduction.](https://observablehq.com/@observablehq/five-minute-introduction?collection=@observablehq/introduction)
-
-## Why I like it
-
-### Easy to setup
-
-First of all, there is nothing to download! This is a huge benefit when introducing developers to new technology. I can show off features and techniques for using new tech without requiring developers to have to download anything or set up an environment. This makes it easier to spark curiosity and inspire people to continue on their learning journey.
-
-
-
-### Code + Visualizations + Text
-
-Observable supports Javascript, Markdown and HTML in cells. This means I can write executable Javascript surrounded by markdown that helps explain the context in which this code can be used and may be useful. The notebooks are also easy to embed into other contexts (like this blog).
-
-Here is an example from a post on Merkle Trees. You can [view the full notebook here.](https://observablehq.com/@critesjosh/merkle-trees)
-
-
-
-### Executable Javascript
-
-Observable allows anyone inspect the Javascript in the notebook and displays the results of the code execution. This is particularly useful to demo interactions with a connected web3 wallet or reviewing the structure of responses from API calls. Also, when code in one cell is updated, all other cells that use the code are referenced as well, kind of like hot reloading.
-
-For example, in the [graph post](../2021-11-18-using-the-graph/index.md), I make a query to the Graph and the notebook shows a live response. Viewers can click through the notebook response to insepct the results.
-
-[](https://observablehq.com/@critesjosh/query-the-graph)
-
-### Remix + Share
-
-Viewers can edit the Javascript in the notebook and execute their own code to see the results. They can fork their changes and save them in their own notebook to be worked on later or to share with others.
-
-I can import common node packages into a notebook and run them as I would in an application. This allows me to quickly test things and share them.
-
-## What I don't like
-
-Using Observable isn't great for everything--it has its limitations.
-
-### Limited packages
-
-While many npm packages work with observable, not all of them do. You may need to build packages to work specifically for Observable or import minified versions from a CDN. [This tool](https://observablehq.com/@observablehq/module-require-debugger) can help you figure out how to import packages that you want to use.
-
-### Simple, specific actions
-
-Observable is great for showing simple interactions with packages or creating visualizations, but is not well suited for demonstrating how to design or build an application. It is a unique environment where Javascript syntax may be different than what developers are used to, so it is useful for specific things.
-
-### Iframe limitations
-
-Observable notebooks are easiest to embed in other pages using an [iframe](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe). This means the context of the notebook is limited by the same things as an iframe, which may or may not be a problem, depending on what you are trying to do. There are ways around this as well, you can link readers directly to your notebook or embed the notebook using a React component or vanilla Javascript. You can read more about embedding on the [Observable site here](https://observablehq.com/@observablehq/introduction-to-embedding).
diff --git a/blog/2021-11-18-observable-intro/query.gif b/blog/2021-11-18-observable-intro/query.gif
deleted file mode 100644
index 6f513519a6..0000000000
Binary files a/blog/2021-11-18-observable-intro/query.gif and /dev/null differ
diff --git a/blog/2021-11-18-using-the-graph/dashboard.png b/blog/2021-11-18-using-the-graph/dashboard.png
deleted file mode 100644
index 61bd936e38..0000000000
Binary files a/blog/2021-11-18-using-the-graph/dashboard.png and /dev/null differ
diff --git a/blog/2021-11-18-using-the-graph/index.md b/blog/2021-11-18-using-the-graph/index.md
deleted file mode 100644
index 80c1abaaa2..0000000000
--- a/blog/2021-11-18-using-the-graph/index.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-title: Using the Graph w/ Celo
-description: Learn about what the Graph is and how to use it in your Celo DApp
-slug: using-the-graph
-authors: [josh]
-tags: [The Graph, DApps]
-image: https://dl.airtable.com/.attachmentThumbnails/dd1b24f2e572bdf951dcc727ddf043ac/76b5253c
-hide_table_of_contents: false
----
-
-import styles from '../styles.css'
-
-[The Graph protocol](https://thegraph.com/) makes it easy to get historical blockchain data. This can be useful when you want to check a users history of using a specific token or interacting with a specific contract. It may also be useful when collecting data about the activity around a specific contract, or set of contracts. The Graph also makes this data easy to transform, organize and share across applications.
-
-In this post I explore
-
-- [What the Graph is](index.md#what-is-the-graph)
-- [How to get started using the Graph with Celo](index.md#using-the-graph)
-- [What a subgraph is and how to create one](index.md#initialize-your-subgraph)
-- [How to deploy a subgraph to the Graph's hosted service](index.md#deploy-subgraph)
-- [How to query a subgraph](index.md#query-the-subgraph)
-
-## What is the Graph?
-
-From the Graph website:
-
-*The Graph is a decentralized protocol for indexing and querying data from blockchains, starting with Ethereum. It makes it possible to query data that is difficult to query directly.*
-
-The problem that the Graph solves is that indexing blockchain data is actually very difficult. Additionally, the Graph makes it easy to get historical blockchain data without having to run your own archive node or paying to access an archive node through a node service provider, like [Quicknode](https://www.quicknode.com/chains/celo).
-
-
-
-## Using the Graph
-
-I will be using [this GitHub repository](https://github.com/critesjosh/the-graph-hello-world) as a reference throughout this post. This repo contains a simple [HelloWorld contract](https://github.com/critesjosh/the-graph-hello-world/blob/master/HelloWorld.sol) that stores a string that can be updated.
-
-`HelloWorld.sol`
-```js
-// HelloWorld.sol
-
-// Learn more about Solidity here: https://solidity.readthedocs.io
-pragma solidity >=0.5.0;
-
-contract HelloWorld {
-
- event NameUpdated(string newName, address updater);
-
- // Define a string called name
- string name;
-
- // Declares a function called getName
- // The 'public' label means the function can be called internally, by transactions or other contracts
- // The 'view' label indicates that the function does not change the state of the contract
- // The function returns a string, from the memory data location
- function getName()
- public
- view
- returns (string memory)
- {
- // Return the storage variable 'name'
- return name;
- }
-
- // Declare a function called setName
- // The function takes 1 parameter, a string, called newName, with the calldata data location in the Ethereum Virtual Machine
- // The 'external' label means the function can only be called from an external source
- function setName(string calldata newName)
- external
- {
- emit NameUpdated(newName, msg.sender);
- // Set the storage variable, name, to the value passed in as newName
- name = newName;
- }
-}
-```
-
-The contract emits an event every time the storage sting is updated. Event handlers in the subgraph are triggered by contract events, so setting up a contract with events is required.
-
-It is easiest to get started using the Graph hosted service, which supports queries on the Celo network.
-
-:::tip
-
-You can [learn more about the Graph's hosted service here](https://thegraph.com/docs/hostedservice/what-is-hosted-service).
-
-:::
-
-### Install the Graph CLI
-
-The first step is to install the graph command line tool.
-
-```bash
-npm install -g @graphprotocol/graph-cli
-```
-
-or
-
-```bash
-yarn global add @graphprotocol/graph-cli
-```
-
-:::tip
-
-Learn more about the `graph-cli` package [here](https://www.npmjs.com/package/@graphprotocol/graph-cli).
-
-:::
-
-### Initialize your Subgraph
-
-*A subgraph defines which data The Graph will index from Ethereum, and how it will store it. Once deployed, it will form a part of a global graph of blockchain data.*
-
-:::tip
-
-[Read more about subgraphs on the Graph website.](https://thegraph.com/docs/developer/define-subgraph-hosted)
-
-:::
-
-In a new, empty project directory, run the following command in the terminal:
-
-```bash
-graph init --product hosted-service --from-contract 0xd2dC7E59971E934bF479B8eA86B9Ec1627B0F3D6 --network celo-alfajores --abi critesjosh/Hello-World
-```
-
-The CLI tool will prompt you for some additional information. Use the "Hosted Service" for creating subgraphs that query contracts on the Celo network.
-
-For the subgraph name, enter your GitHub username followed by the name of your project. In my case this is `critesjosh/Hello-World`.
-
-The tool will ask you to specify a directory, network and contract address that you would like to query. I chose the default directory (Hello-World), the `celo-alfajores` network, the address of my deployed Solidity contract and the path to my [contract ABI](https://docs.soliditylang.org/en/latest/abi-spec.html).
-
-The tool sets up my subgraph in the specified directory. Open `subgraph.yml` in the new subgraph project folder to see how it is configured. You can find more information about the [Subgraph Manifest file here](https://thegraph.com/docs/developer/create-subgraph-hosted#the-subgraph-manifest).
-
-### Define the schema
-
-The next step is to define your graphql schema in `schema.graphql` in the new project directory.
-
-A graphql schema is like a dictionary that defines the types of entities to map from the data and how the entities are related. This is an important step to spend some time thinking about because this will define how your data is structured and linked. Here is [sushiswap's subgraph repo](https://github.com/sushiswap/sushiswap-subgraph) as a complex project reference.
-
-For the simple HelloWorld contract that we are querying with this subgraph, I defined the schema like this:
-
-```graphql
-type Name @entity {
- id: ID!
- newName: String
- updater: Bytes!
-}
-```
-
-This will tell us the new name that is being stored in the contract, `newName`, and the account address that updated the name, `udpater`.
-
-:::tip
-
-[Read more about the Graph schemas here.](https://thegraph.com/docs/developer/create-subgraph-hosted#the-graphql-schema)
-
-:::
-
-### Define Mappings
-
-Mappings are defined in `./src/mappings.ts` and transform the contract data (events) into the entities that are defined in `schema.graphql`. These mappings are written in a subset of Typescript.
-
-In this example, there is only one event being indexed, so there is only one mapping.
-
-```ts
-import { NameUpdated } from '../generated/HelloWorld/HelloWorld'
-import { Name } from '../generated/schema'
-
-export function handleNameUpdated(event: NameUpdated): void {
- let id = event.transaction.hash.toHex()
- let name = Name.load(id)
- if (name == null) {
- name = new Name(id)
- }
- name.newName = event.params.newName
- name.updater = event.params.updater
- name.save()
-}
-```
-
-This mapping sets the entity `id` as the transaction hash, the entity `newName` as the newName from the event parameter and the entity `updater` as the updater from the event parameter. The mapping will update an entity if one with a known `id` already exists, but since transaction hashes are unique, each event emitted from the contract will create a new entity.
-
-:::tip
-
-You can find more information about mappings on [the Graph website here](https://thegraph.com/docs/developer/create-subgraph-hosted#writing-mappings).
-
-:::
-
-Once the mapping is defined, you can generate the Graph AssemblyScript by running
-
-```bash
-graph codegen
-```
-
-"This will generate an AssemblyScript class for every smart contract in the ABI files mentioned in subgraph.yaml, allowing you to bind these contracts to specific addresses in the mappings and call read-only contract methods against the block being processed. It will also generate a class for every contract event to provide easy access to event parameters as well as the block and transaction the event originated from."
-
-*--[The Graph codegen docs](https://thegraph.com/docs/developer/create-subgraph-hosted#code-generation)*
-
-### Deploy Subgraph
-
-To deploy the subgraph to the hosted service, you will need to create an account on [the Graph's hosted service site](https://thegraph.com/hosted-service).
-
-From the [dashboard](https://thegraph.com/hosted-service/dashboard), you can find your Access Token for deploying the subgraph. Once you have that, you can authenticate with:
-
-```bash
-graph auth --product hosted-service
-```
-
-Next, click the "Add Subgraph" button. Fill out the subgraph info with the appropriate information and deploy it with:
-
-```bash
-graph deploy --product hosted-service /
-```
-
-Once your subgraph is deployed, you should be able to view it on the hosted service dashboard. You can view my [Hello World subgraph page here](https://thegraph.com/hosted-service/subgraph/critesjosh/hello-world).
-
-
-
-Once the subgraph is deployed, the service will take some time to sync the events from the contract. Once it has been fully synced, you can run queries in the playground to test it out.
-
-### Query the subgraph
-
-You can learn more about [querying your subgraph from the hosted service here](https://thegraph.com/docs/hostedservice/query-hosted-service).
-
-The following embedded code notebook from [Observable HQ](https://observablehq.com/) shows how to query the subgraph I deployed with basic Javascript. You can [view the notebook on Observable here](https://observablehq.com/@critesjosh/query-the-graph). I wrote a post that goes into more detail about Observable, you can [read it here](../2021-11-18-observable-intro/index.md).
-
-You can inspect the JavaScript objects in the notebook by clicking on them. Try clicking on the `result` object. Click on the `names` array in the `data` object.
-
-
-
-You can see the entities that were defined in the `schema.graphql`, populated with event information like the `newName` and `updater` from each transaction!
diff --git a/blog/2021-11-30-hardhat-deploy-verify/index.md b/blog/2021-11-30-hardhat-deploy-verify/index.md
deleted file mode 100644
index 4cad2c2f5a..0000000000
--- a/blog/2021-11-30-hardhat-deploy-verify/index.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-title: Verifying Contracts with Hardhat
-description: Learn to verify contracts on Sourcify using the hardhat-deploy plugin
-slug: hardhat-deploy-verify
-authors: [josh]
-tags: [hardhat, sourcify, verification]
-image: https://dl.airtable.com/.attachmentThumbnails/22e935b11333f80ed706c943717d0b49/24fbfa2e
-hide_table_of_contents: false
----
-
-Hardhat is one of the most popular developer tools for writing contracts for EVM compatible blockchains. Hardhat is a great tool for developing smart contracts for Celo--you can find more information about this in the Celo documentation [here](/developer-resources/deploy-hardhat).
-
-In this tutorial I will go over how to use the [hardhat-deploy plugin](https://github.com/wighawag/hardhat-deploy) for hardhat, specifically to verify deployed contracts on the [Celo block explorer](https://explorer.celo.org/) via [Sourcify](https://sourcify.dev/). You can verify contracts with the plugin whether you deployed them using the plugin or not.
-
-In this post I will cover
-
-- setting up a hardhat project with the hardhat-deploy plugin
-- deploying contracts using the plugin
-- how to verify the contracts on sourcify
-
-
-
-## Verify contracts using hardhat-deploy
-
-### Setup
-
-First, I will cover how to deploy contracts using the plugin. This will help provide some context around how a project using this plugin is different from a regular hardhat project. This guide assumes that you already have a hardhat project set up. If you don’t, refer to [this page](https://docs.celo.org/developer-resources/deploy-hardhat).
-
-:::tip
-
-You can reference the 'hardhat-deploy' branch of [this github repo](https://github.com/critesjosh/celo-hardhat/tree/hardhat-deploy) to see how the project is structured.
-
-:::
-
-Install the plugin in your hardhat project:
-
-```shell
-npm install -D hardhat-deploy
-```
-
-Import the plugin in your `hardhat.config.js` file.
-
-```js
-require('hardhat-deploy');
-```
-
-Since `hardhat-deploy-ethers` is a fork of `@nomiclabs/hardhat-ethers` and that other plugin might have an hardcoded dependency on `@nomiclabs/hardhat-ethers` the best way to install `hardhat-deploy-ethers` and ensure compatibility is the following:
-
-```shell
-npm install --save-dev @nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers ethers
-```
-
-Which means you then need to do `require("@nomiclabs/hardhat-ethers")` instead of `require("hardhat-deploy-ethers")` in your `hardhat.config.js` file.
-
-The plugin also supports Typescript, which you can find more information about [here](https://github.com/wighawag/hardhat-deploy#typescript-support).
-
-The plugin also has a concept of `namedAccounts` which makes it easier to reference available accounts. You can read more about the details [here](https://github.com/wighawag/hardhat-deploy#1-namedaccounts-ability-to-name-addresses). For our purposes, keep it simple and add `namedAccounts` to the exports in `hardhat.config.js` like so
-
-```js
-//hardhat.config.js
-...
-module.exports = {
- defaultNetwork: "alfajores",
- namedAccounts: {
- deployer: 0
- },
- networks: {
-...
-```
-
-You can see my source file [here](https://github.com/critesjosh/celo-hardhat/blob/085cf7bc304ec3b0924de1419fe32e37b57e7185/hardhat.config.js#L23).
-
-### Deploy
-
-Deployment scripts used by `hardhat-deploy` live in a folder called `deploy` in the root of the project. The deployment scripts will save deployment information in a `deployments` folder in the project root as well.
-
-[Here](https://github.com/critesjosh/celo-hardhat/blob/hardhat-deploy/deploy/00-deploy.js) is the deployment script for deploying the [Greeter contract](https://github.com/critesjosh/celo-hardhat/blob/hardhat-deploy/contracts/Greeter.sol) in the example repo.
-
-```js
-// deploy/00_deploy_my_contract.js
-module.exports = async ({getNamedAccounts, deployments}) => {
- const {deploy} = deployments;
- const {deployer} = await getNamedAccounts();
- await deploy('Greeter', {
- from: deployer,
- args: ["hello world"],
- log: true,
- });
- };
- module.exports.tags = ['Greeter'];
-```
-
-It is a simple function that takes the `namedAccounts`, configuration info and the contract constructor arguments and deploys the contract. You can read more about deploy scripts [here](https://github.com/wighawag/hardhat-deploy#deploy-scripts).
-
-To run the deployment, use the command
-
-```bash
-npx hardhat --network alfajores deploy
-```
-
-There should be terminal output similar to this:
-
-```shell
-Downloading compiler 0.8.4
-Compiling 1 file with 0.8.4
-Compilation finished successfully
-deploying "Greeter" (tx: 0x7fedbd14877cdca23485a96108e22ae6764b65348eddbaa1cbec9504707b7186)...: deployed at 0x9F163C9138faA5cdc731b94E1e9632C05764C23e with 493178 gas
-```
-
-### Verify
-
-Once the contract is deployed, you can verify it with the command:
-
-```shell
-npx hardhat --network alfajores sourcify
-```
-
-Which should output
-
-```shell
-verifying Greeter (0x9F163C9138faA5cdc731b94E1e9632C05764C23e on chain 44787) ...
- => contract Greeter is now verified
-```
-
-You can check the verification on the block explorer, [https://alfajores-blockscout.celo-testnet.org/address/0x9F163C9138faA5cdc731b94E1e9632C05764C23e/contracts](https://alfajores-blockscout.celo-testnet.org/address/0x9F163C9138faA5cdc731b94E1e9632C05764C23e/contracts) in this case.
-
-I hope this is helpful and feel free to [join the Celo Discord](https://chat.celo.org) server and reach out if you have any questions. My handle is joshc#0001.
-
-You can view my hardhat-deploy repository for reference on GitHub here: [https://github.com/critesjosh/celo-hardhat/tree/hardhat-deploy](https://github.com/critesjosh/celo-hardhat/tree/hardhat-deploy )
diff --git a/blog/2021-12-06-addtokentocelowallet.md b/blog/2021-12-06-addtokentocelowallet.md
deleted file mode 100644
index 49bc8b73c4..0000000000
--- a/blog/2021-12-06-addtokentocelowallet.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: Add Your ERC20 Token to Your Celo Wallet
-description: Learn How to Add Your ERC20 Token to Your Celo Wallet
-slug: add-token-celo-wallet
-authors:
- - name: Connor Fabiano
- url: https://github.com/vissequ
- image_url: https://github.com/vissequ.png
-tags: [tokens, celo wallet]
-image: https://user-images.githubusercontent.com/93226346/144900871-cc2ffa50-d7f2-46c3-94dd-15126d71f57b.png
-hide_table_of_contents: false
----
-
-# How to Add Your ERC20 Token to Your Celo Wallet
-
-If you are trying to add your own token please make sure you have already read Josh's tutorial on [how to make your own ERC20 Token on Celo](https://docs.celo.org/developer-resources/walkthroughs/no-code-erc20).
-
-Now that you’ve made your own ERC20 Token, you will want to have it displayed in your Celo Wallet. If you don’t currently have Celo Wallet you will need to [download it](https://celowallet.app/setup) first.
-
-
-
-1) Open up Cello Wallet and make sure you can see “Account Balance Details” then select “Add a new currency/token.”
-
-
-
-If you don’t see the above screen then click the green “More” button in the upper left of the Celo Wallet app.
-
-
-
-Then select "Balance - View Balances"
-
-
-
-2) Copy your token’s address and paste it into the “Token name or address” text field. If you don’t remember your Token’s address you can search for it by name on [Celo’s Explorer](https://explorer.celo.org/).
-
-
-
-3) Click “Add” and you should then see the token listed. The token I added for this example is “BCN.” If you look to the far right you’ll see that only “BCN” has an “X” after its address. This is because I manually added “BCN” and the other listed coins are native assets from Celo.
-
-
-
-4) If you wish to send your token to another Celo Wallet click the green “Send” button in the upper left.
-
-
-
-5) Enter the recipient’s address and select your token from the Currency dropdown. You can then enter the amount of tokens you wish to send.
-
-
-
-6) You’ll be charged a fee in Celo for your transaction. Make sure you are sending this to another Cello Wallet! If the address, token and amount are all correct click “Send Payment.”
-
-
-
-Congratulations! You’ve just sent your own token to somebody! Your token should be automatically added to their list. If for some reason it is not automatically added, they can simply follow the above steps.
-
-If you have any questions feel free to message me on Discord at vissequ#1301 or on Twitter at [@connorfabiano](https://twitter.com/connorfabiano)
-
-(Tutorials for using different wallets such as Metamask will be added in the future.)
diff --git a/blog/2021-12-31-using-js-keystores.md b/blog/2021-12-31-using-js-keystores.md
deleted file mode 100644
index 54207e91c8..0000000000
--- a/blog/2021-12-31-using-js-keystores.md
+++ /dev/null
@@ -1,160 +0,0 @@
----
-title: Using Keystores Library for Local Key Management
-description: Introduction to the keystores library and how to use it for local key management.
-slug: /developer-guide/start/using-js-keystores
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [keystores]
-image: https://dl.airtable.com/.attachmentThumbnails/a7e530eb72ac8f30f37c0a3447ef0e7d/72e944da
-hide_table_of_contents: false
----
-
-# Keystores Library
-
-Introduction to the keystores library and how to use it for local key management.
-
-
-
-## Getting Started
-
-This is a JavaScript library that provides functions for creating and interacting with encrypted keystores for private key management. To do this, this library wraps the existing [`ethereumjs-wallet` library](https://github.com/ethereumjs/ethereumjs-wallet), which is a standard library for managing keystores according to the [Web3 Secret Storage Definition](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition). As specified, secrets are encrypted using the Scrypt KDF (Key Derivation Function); in this case, the private key is encrypted with a passphrase (that should be kept secret) and can be decrypted later by the same phrase. Note that a keystore generated for the same (private key, passphrase) multiple times will not yield the same output due to how the KDF works. Keystore files generated by a geth node can be decrypted and accessed with this library, and vice versa.
-
-**Note that keystore files generated by this library do not contain BLS public keys, meaning that these should not be used for validator signer keys used in consensus.**
-
-The components of the library are roughly as follows:
-
-- `KeystoreBase` which wraps the functionality of `ethereumjs-wallet` and exposes functions to:
- - import PKs (into encrypted keystores)
- - decrypt and get a PK from an encrypted keystore
- - change the passphrase on a keystore
-- `FileKeystore`, `InMemoryKeystore` which specifiy the IO in addition to the above base class
-- `KeystoreWalletWrapper`: (not stable; likely to structurally change) a very simple wrapper for a `Keystore` and `LocalWallet`, which allows a user to decrypt a keystore and pass the key to the `LocalWallet` in order to sign transactions.
-
-## Usage
-
-:::warning
-
-For accounts containing significant funds or otherwise requiring a high degree of security, we **do not** recommend this keystore library! This is only for managing keys for low-risk hot wallets and signers.
-
-For more stringent security requirements, check out the guide to [Choosing a Wallet](/getting-started/wallets).
-
-:::
-
-Depending on your use case, you can either interact directly with the `FileKeystore` (purely for creating and interacting with keystore files, importing or accessing private keys) or else use the `KeystoreWalletWrapper` (combines the keystore functionality with convenient access to the `LocalWallet` for signing tranactions).
-
-### Using the FileKeystore
-
-#### Create new keystore and import private key
-
-This snippet will create a `keystore` directory in the `parentDirectory` and create an encrypted file in the `keystore` directory containing the private key. Note that you can only create a new encrypted file for a private key if there is not already an existing file for that private key. If it already exists, you can change the passphrase (see below), but you may not have multiple files for the same private key in the same `keystore` directory.
-
-```js
-import * as readline from "readline";
-import { FileKeystore } from "@celo/keystores";
-
-// This is the directory that will contain a "keystore" directory
-const parentDirectory = "";
-// This creates a "keystore" directory if one does not already exist in the parentDirectory
-const keystore = new FileKeystore(parentDirectory);
-
-// Prompt to enter private key and passphrase on the command line
-let rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout,
-});
-const privateKey: string = await new Promise((resolve) =>
- rl.question("Enter private key:", (answer) => {
- resolve(answer);
- })
-);
-const passphrase: string = await new Promise((resolve) =>
- rl.question("Enter secret passphrase:", (answer) => {
- rl.close();
- resolve(answer);
- })
-);
-// Import private key into the keystore, which is then stored as an encrypted file
-// Should create a file with a name like `UTC--`
-await keystore.importPrivateKey(privateKey, passphrase);
-// Retrieve all addresses contained in the keystore
-console.log("Addresses in keystore: ", await keystore.listKeystoreAddresses());
-```
-
-#### Accessing an existing keystore file
-
-```js
-// Keystore already exists
-const parentDirectory = ''
-const keystore = new FileKeystore(parentDirectory)
-const address = ''
-const oldPassphrase = ''
-
-// Decrypt file and retrieve private key
-await keystore.getPrivateKey(address, oldPassphrase)
-
-// Change the passphrase encrypting the file
-const newPassphrase = ''
-await.keystore.changeKeystorePassphrase(address, oldPassphrase, newPassphrase)
-
-// Decrypt file and retrieve private key using new passphrase
-console.log(await keystore.getPrivateKey(address, newPassphrase))
-```
-
-#### Remove (delete) a keystore file for a particular address
-
-```js
-const parentDirectory = "";
-const keystore = new FileKeystore(parentDirectory);
-const address = "";
-
-// When you know the address
-// Get the filename (keystore name)
-const keystoreName = await keystore.getKeystoreName(address);
-await keystore.removeKeystore(keystoreName);
-
-// Alternatively, you can do this by passing in the filename directly
-keystore.removeKeystore("");
-```
-
-### Using the KeystoreWalletWrapper
-
-This example will instantiate a `KeystoreWalletWrapper`, import a private key, and use the inner `LocalWallet` within the wrapper to sign and send a transaction with `ContractKit`.
-
-```js
-import { newKit } from "@celo/contractkit";
-import { FileKeystore, KeystoreWalletWrapper } from "@celo/keystores";
-
-// This is the directory that will contain a "keystore" directory
-const parentDirectory =
- "/celo/celo-monorepo/packages/sdk/wallets/wallet-keystore/test-keystore-dir";
-// Instantiate a KeystoreWalletWrapper using a FileKeystore
-const keystoreWalletWrapper = new KeystoreWalletWrapper(
- new FileKeystore(parentDirectory)
-);
-// Make sure to not commit this if using real funds!
-// You can also get this as input on the command-line using `readline`
-// as in the example above for FileKeystore
-const privateKey = "YOUR_TEST_PRIVATE_KEY";
-const passphrase = "test-passphrase1! ";
-
-// Import private key or unlock account
-await keystoreWalletWrapper.importPrivateKey(privateKey, passphrase);
-// If the keystore file already exists for an address, simply unlock:
-// const address = 'YOUR_TEST_ADDRESS'
-// await keystoreWalletWrapper.unlockAccount(address, passphrase)
-
-// Get the wrapper's `LocalWallet` instance and pass this into ContractKit
-const wallet = keystoreWalletWrapper.getLocalWallet();
-const kit = newKit("https://alfajores-forno.celo-testnet.org", wallet);
-const [from] = wallet.getAccounts();
-
-// Send a test transaction
-const gold = await kit.contracts.getGoldToken();
-await gold
- .transfer("0x22579ca45ee22e2e16ddf72d955d6cf4c767b0ef", "1")
- .sendAndWaitForReceipt({ from });
-console.log("Transaction sent!");
-```
diff --git a/blog/2022-01-02-hellocontracts.md b/blog/2022-01-02-hellocontracts.md
deleted file mode 100644
index 1754278e9d..0000000000
--- a/blog/2022-01-02-hellocontracts.md
+++ /dev/null
@@ -1,219 +0,0 @@
----
-title: "Deploy a Contract on Celo (local node)"
-description: How to deploy your own smart contracts onto Celo from a local node.
-slug: /developer-guide/start/hellocontracts
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [smart contract]
-image: https://dl.airtable.com/.attachmentThumbnails/a7e530eb72ac8f30f37c0a3447ef0e7d/72e944da
-hide_table_of_contents: false
----
-
-# Deploy a Contract (Local Node)
-
-How to deploy your own smart contracts onto a Celo local node.
-
-
-
-:::tip
-
-As Celo is fully EVM compliant, we inherit the rich developer ecosystem and tooling of the Ethereum community. We will be deploying a typical hello world smart contract onto the Alfajores testnet with typical Ethereum tools like Truffle and Ganache.
-
-:::
-
-## Setup
-
-This guide assumes that you have a basic Node/[NPM](https://www.npmjs.com/get-npm) setup (Node.js v12.x). If so, you can install truffle with:
-
-```
-npm install -g truffle
-```
-
-In your desired project folder, intiialize a new truffle project:
-
-```
-truffle init
-```
-
-## Hello World!
-
-Let's add a contract with
-
-```
-truffle create contract HelloWorld
-```
-
-Our contract will just store a name for now:
-
-```solidity
-pragma solidity >=0.5.0 <0.7.0;
-
-contract HelloWorld {
- string name = 'Celo';
-
- function getName() public view returns (string memory) {
- return name;
- }
-
- function setName(string calldata newName) external {
- name = newName;
- }
-}
-```
-
-## Deploy locally
-
-Let's create a migration to deploy the contract. For that, we need to create a file in the `migrations` folder named `2_deploy_helloworld.js`:
-
-```javascript
-var HelloWorld = artifacts.require("HelloWorld");
-
-module.exports = function (deployer) {
- deployer.deploy(HelloWorld);
-};
-```
-
-To be able to actually deploy it though, we need a blockchain. For local development and testing, you can use our fork of ganache:
-
-```
-npm install -g @celo/ganache-cli
-```
-
-And then start ganache with:
-
-```
-ganache-cli --port 7545
-```
-
-In your `truffle-config.js`, you'll want to add your local test network under networks:
-
-```
- networks: {
- test: {
- host: "127.0.0.1",
- port: 7545,
- network_id: "*"
- }
- }
-```
-
-Then you can deploy your contract to your local network first:
-
-```
-truffle migrate --network test
-```
-
-You can interact with your contract by running the truffle console:
-
-```
-truffle console --network test
-truffle(test)> contract = await HelloWorld.deployed()
-undefined
-truffle(test)> contract.getName()
-'Celo'
-truffle(test)> contract.setName('MyName')
-{ tx:
-...
-truffle(test)> contract.getName()
-'MyName'
-```
-
-## Deploy to Alfajores
-
-When you are ready to deploy your contract to Alfajores, you'll need a Celo client connected to the testnet. We'll run a node somewhat similarly to the [Instructions of running a full node on Baklava](/getting-started/baklava-testnet/running-a-full-node-in-baklava):
-
-```bash
-export CELO_IMAGE=us.gcr.io/celo-org/geth:alfajores
-```
-
-### Pull the Celo Docker image
-
-We're going to use a Docker image containing the Celo node software in this tutorial.
-
-If you are re-running these instructions, the Celo Docker image may have been updated, and it's important to get the latest version.
-
-```bash
-docker pull $CELO_IMAGE
-```
-
-### Set up a data directory
-
-First, create the directory that will store your node's configuration and its copy of the blockchain. This directory can be named anything you'd like, but here's a default you can use. The commands below create a directory and then navigate into it. The rest of the steps assume you are running the commands from inside this directory.
-
-```bash
-mkdir celo-data-dir
-cd celo-data-dir
-```
-
-### Create an account and get its address
-
-In this step, you'll create an account on the network. If you've already done this and have an account address, you can skip this and move on to configuring your node.
-
-Run the command to create a new account:
-
-```bash
-docker run -v $PWD:/root/.celo --rm -it $CELO_IMAGE account new
-```
-
-It will prompt you for a passphrase, ask you to confirm it, and then will output your account address: `Address: {`
-
-Save this address to an environment variables, so that you can reference it below (don't include the braces):
-
-```bash
-export CELO_ACCOUNT_ADDRESS=
-```
-
-_Note: this environment variable will only persist while you have this terminal window open. If you want this environment variable to be available in the future, you can add it to your `~/.bash_profile_
-
-### Start the node
-
-This command specifies the settings needed to run the node, and gets it started.
-
-```bash
-docker run --name celo-ultralight-node -d --restart unless-stopped -p 127.0.0.1:8545:8545 -v $PWD:/root/.celo $CELO_IMAGE --verbosity 3 --syncmode lightest --http --http.addr 0.0.0.0 --http.api eth,net,web3,debug,admin,personal --etherbase $CELO_ACCOUNT_ADDRESS --alfajores --datadir=/root/.celo --allow-insecure-unlock
-```
-
-You can follow the logs with
-
-```bash
-docker logs -f celo-ultralight-node
-```
-
-After a few seconds of syncing (with [Celo's ultralight sync](/celo-codebase/protocol/consensus/ultralight-sync)), you should be able to query the balance of your account:
-
-```bash
-docker exec celo-ultralight-node geth attach --exec 'eth.getBalance("")'
-```
-
-If you go to our [Alfajores Faucet Page](https://celo.org/build/faucet), you should be able to faucet your account some CELO and see your balance increase with the above command.
-
-### Deploy the contract
-
-We are finally ready to deploy the contract. First let's unlock the account:
-
-```bash
-docker exec celo-ultralight-node geth attach --exec 'personal.unlockAccount("", "")'
-```
-
-In your `truffle-config.js` reference your node:
-
-```
-alfajores: {
- host: "127.0.0.1",
- port: 8545,
- network_id: 44787
-}
-```
-
-Then you should be able to deploy your contract with:
-
-```
-truffle migrate --network alfajores
-```
-
-You can verify your contract deployment on [Blockscout](https://alfajores-blockscout.celo-testnet.org/), as well as interact with your new contract with the `truffle console --network alfajores`. Congratulations!
-
-As you can see, all the goodies from Ethereum apply to Celo, so virtually all tutorials and other content should be easily translatable to Celo. Check out [https://celo.org/build](https://celo.org/build) for more resources!
diff --git a/blog/2022-01-03-hello-contract-remote-node.md b/blog/2022-01-03-hello-contract-remote-node.md
deleted file mode 100644
index ffeccdbf5d..0000000000
--- a/blog/2022-01-03-hello-contract-remote-node.md
+++ /dev/null
@@ -1,329 +0,0 @@
----
-title: Deploy and Interact with Contracts (Remotely)
-description: How to deploy and interact your own smart contracts using a remote node.
-slug: /developer-guide/start/hello-contract-remote-node
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [smart contract, remote, deploy]
-image: https://dl.airtable.com/.attachmentThumbnails/a7e530eb72ac8f30f37c0a3447ef0e7d/72e944da
-hide_table_of_contents: false
----
-
-import PageRef from '@components/PageRef'
-
-# Hello Contract \(Truffle + Remote Node\)
-
-How to deploy and interact your own smart contracts using a remote node.
-
-
-
-:::tip
-
-As Celo is fully EVM compatible, we inherit the rich developer ecosystem and tooling of the Ethereum community. You will be deploying a typical hello world smart contract onto the Alfajores testnet with the common Ethereum tool, Truffle.
-
-:::
-
-:::note
-
-This page is similar to the Hello Contracts page, but this one will connect to a remote node (Forno) and do key management in the Truffle project.
-
-:::
-
-## Setup
-
-This guide assumes that you have a basic Node/[NPM](https://www.npmjs.com/get-npm) setup.
-
-:::info
-
-[Learn more about the Truffle development framework here.](https://www.trufflesuite.com/docs/truffle/overview)
-
-:::
-
-As you may know, Truffle is built for Ethereum developers. Because Celo has a similar network architecture and runs the Ethereum Virtual Machine, Celo developers are able to leverage many Ethereum developer tools. But it is important to keep in mind the differences. If you haven't already, please review the Celo overview.
-
-
-
-[Clone this Truffle project from GitHub to get started](https://github.com/critesjosh/hello_contract-truffle).
-
-```
-git clone https://github.com/critesjosh/hello_contract-truffle.git
-```
-
-This is a basic truffle project, with some additional files to help us with account management and deploying to a remote Celo test net node. Run `npm install` to install of the project dependencies.
-
-## Hello World!
-
-Add a contract with the command
-
-```text
-truffle create contract HelloWorld
-```
-
-We will not go into the details of how to write Solidity in this exercise, but you can learn more at the [Solidity documentation page](https://solidity.readthedocs.io/en/latest/).
-
-The contract will just store a name for now:
-
-```solidity title="contracts/HelloWorld.sol"
-
-pragma solidity >=0.5.0 <0.8.0;
-
-contract HelloWorld {
- string name = 'Celo';
-
- function getName() public view returns (string memory) {
- return name;
- }
-
- function setName(string calldata newName) external {
- name = newName;
- }
-}
-```
-
-## Prepare Deployment
-
-### Compile the contract
-
-Before you deploy the contract, you need to compile the Solidity code into Ethereum bytecode. The following truffle command will look in the `./contracts` directory and compile any new or updated Solidity (`.sol`) contracts.
-
-```
-truffle compile
-```
-
-After compiling the contract, you need to create a migration to deploy the contract. For that, create a file in the `./migrations/` folder named `2_deploy_helloworld.js`:
-
-:::info
-
-[Learn more about Truffle migrations here.](https://www.trufflesuite.com/docs/truffle/getting-started/running-migrations)
-
-:::
-
-```javascript title="migrations/2_deploy_helloworld.js"
-var HelloWorld = artifacts.require("HelloWorld");
-
-module.exports = function (deployer) {
- deployer.deploy(HelloWorld);
-};
-```
-
-:::info
-
-You can [learn more about Truffle configuration options here.](https://www.trufflesuite.com/docs/truffle/reference/configuration)
-
-:::
-
-## Deploy to Alfajores \(Remotely\)
-
-When you deploy contracts to the Celo network with a remote node, you have to sign the contract deployment transaction locally before sending it to the remote node to be broadcast to the network. This presents some unique challenges when using Ethereum development tools \(like Truffle\) because Celo transaction objects are slightly different than Ethereum transaction objects.
-
-When you are ready to deploy your contract to Alfajores, you'll need a Celo client connected to the testnet. In this exercise you will connect to a remote node to read and write to the public testnet (Alfajores), but you could also run a testnet node locally to perform the same actions.
-
-Here are the steps to go through to deploy the contract to the Alfajores testnet.
-
-1. Connect to Forno \(a remote Celo node service provider\)
-2. Get personal account information \(generate a private key if required, stored in `./.env`\)
-3. Get your personal account address and fund it via the [faucet](https://celo.org/build/faucet)
-4. Get the compiled contract bytecode
-5. Create and sign the contract deployment transaction
-6. Send transaction to the network
-
-Make sure the dependencies are installed with:
-
-```text
-yarn install
-```
-
-Run the createAccount.js script with:
-
-```text
-node createAccount.js
-```
-
-```javascript title="createAccount.js"
-const Web3 = require("web3");
-const web3 = new Web3("http://localhost:8545");
-
-console.log(web3.eth.accounts.create());
-```
-
-The provided code will print a private key / account pair in the terminal. Copy and paste the printed `priavteKey` into a `PRIVATE_KEY` variable in a file called `.env`, similar to what is shown in the `.envexample` file. The `address` that is printed with the private key is the account that we will fund with the faucet.
-
-If you go to the [Alfajores Faucet Page](https://celo.org/build/faucet), you can faucet your account some CELO and see your balance increase.
-
-### Deploy the contract
-
-#### Truffle Deployment
-
-Before you can use truffle for the migration, you need to set up the proper configuration in `./truffle-config.js`. At the top of `./truffle-config.js`, set up the `kit` by connecting to the test network and adding the account you just funded.
-
-```javascript title="truffle.config.js"
-const ContractKit = require("@celo/contractkit");
-const Web3 = require("web3");
-require("dotenv").config();
-
-const web3 = new Web3("https://alfajores-forno.celo-testnet.org");
-const kit = ContractKit.newKitFromWeb3(web3);
-
-kit.connection.addAccount(process.env.PRIVATE_KEY);
-```
-
-Then, in the `networks` object, you can add the initialized `kit`provider to an `alfajores` property.
-
-```javascript title="truffle.config.js"
- networks: {
- test: {
- host: "127.0.0.1",
- port: 7545,
- network_id: "*"
- },
- alfajores: {
- provider: kit.connection.web3.currentProvider, // CeloProvider
- network_id: 44787, // Alfajores network id
- gas: 4000000, // You need to include the gas limit
- }
- }
-```
-
-:::info
-
-Truffle doesn't estimate the gas properly, so you need to specify a gas limit in `truffle.config.js`.
-
-:::
-
-Now, deploy the contracts to Alfajores with this command:
-
-```javascript
-truffle migrate --network alfajores
-```
-
-#### Custom Node.js Deployment
-
-In this section, you will deploy a contract using a simple Node.js script to show how you can do it without using Truffle.
-
-You need to compile the `HelloWorld.sol` contract using \(if it isn't already\):
-
-```javascript
-truffle compile
-```
-
-This command will generate a `HelloWorld.json` file in the `./build/contracts/` directory. `HelloWorld.json` contains a lot of data about the contract, compiler and low level details. Import this file into the deployment script `celo_deploy.js` with:
-
-```javascript
-const HelloWorld = require("./build/contracts/HelloWorld.json");
-```
-
-You are finally ready to deploy the contract. Use the `kit`to create a custom transaction that includes the contract bytecode.
-
-```javascript title="celo_deploy.js"
-let tx = await kit.connection.sendTransaction({
- from: address,
- data: HelloWorld.bytecode, // from ./build/contracts/HelloWorld.json
-});
-```
-
-:::info
-
-To deploy a contract on Celo, use the `kit.connection.sendTransaction()` function with no `to:` field and the contract bytecode in the `data` field. The account that you are sending the transaction from must have enough CELO to pay the transaction fee, unless you specify another currency as the `feeCurrency`, then you need enough of that currency to pay the transaction fee.
-
-:::
-
-The entire deployment script is about 20 lines of code.
-
-```javascript title="celo_deploy.js"
-const Web3 = require("web3");
-const ContractKit = require("@celo/contractkit");
-const web3 = new Web3("https://alfajores-forno.celo-testnet.org");
-const privateKeyToAddress =
- require("@celo/utils/lib/address").privateKeyToAddress;
-const kit = ContractKit.newKitFromWeb3(web3);
-require("dotenv").config();
-const HelloWorld = require("./build/contracts/HelloWorld.json");
-
-async function awaitWrapper() {
- kit.connection.addAccount(process.env.PRIVATE_KEY); // this account must have a CELO balance to pay transaction fees
-
- // This account must have a CELO balance to pay tx fees
- // get some testnet funds at https://celo.org/build/faucet
- const address = privateKeyToAddress(process.env.PRIVATE_KEY);
- console.log(address);
-
- let tx = await kit.connection.sendTransaction({
- from: address,
- data: HelloWorld.bytecode,
- });
-
- const receipt = await tx.waitReceipt();
- console.log(receipt);
-}
-
-awaitWrapper();
-```
-
-Congratulations! You have deployed your first contract onto Celo! You can verify your contract deployment on [Blockscout](https://alfajores-blockscout.celo-testnet.org/). You can get the transaction hash from the receipt and look it up on the block explorer.
-
-### Interacting with Custom Contracts
-
-Now HelloWorld.sol is deployed onto the Alfajores testnet. How can you interact with the deployed contract using ContractKit? `helloWorld.js` includes some example code that shows how you can do this.
-
-There are 3 functions defined in `helloWorld.js` that accomplish this.
-
-The first function, `initContract()`, reads the deployed contract information from the Truffle artifact at `HelloWorld.json`. With this information, you can create a new web3.js Contract instance:
-
-```javascript title="helloWorld.js"
-async function initContract() {
- // Check the Celo network ID
- const networkId = await web3.eth.net.getId();
-
- // Get the contract associated with the current network
- const deployedNetwork = HelloWorld.networks[networkId];
-
- // Create a new contract instance with the HelloWorld contract info
- let instance = new kit.web3.eth.Contract(
- HelloWorld.abi,
- deployedNetwork && deployedNetwork.address
- );
-
- getName(instance);
- setName(instance, "hello world!");
-}
-```
-
-After creating the contract instance, the `initContract()` function calls `getName()` and `setName()`.
-
-The `getName()` function will call, return and print the `getName()` function of the provided instance of the HelloWorld contract.
-
-```javascript title="helloWorld.js"
-async function getName(instance) {
- let name = await instance.methods.getName().call();
- console.log(name);
-}
-```
-
-The `setName()` function is a bit more involved. First, it gets the account key from the provided `./secret` file, just like in `celo_deploy.js`. Then it creates a `txObject` that encodes a smart contract transaction call to `setName()` with the provided `newName` to the provided instance of the HelloWorld contract. Then the function sends the encoded transaction object to the network, waits for a reciept and prints it to the console.
-
-```javascript title="helloWorld.js"
-async function setName(instance, newName) {
- // Add your account to ContractKit to sign transactions
- // This account must have a CELO balance to pay tx fees, get some https://celo.org/build/faucet
- kit.connection.addAccount(process.env.PRIVATE_KEY);
- const address = privateKeyToAddress(process.env.PRIVATE_KEY);
-
- // Encode the transaction to HelloWorld.sol according to the ABI
- let txObject = await instance.methods.setName(newName);
-
- // Send the transaction
- let tx = await kit.sendTransactionObject(txObject, { from: address });
-
- let receipt = await tx.waitReceipt();
- console.log(receipt);
-}
-```
-
-The above method shows a more detail about how to create custom deployment transactions and scripts than the previous method.
-
-As you can see, all the goodies from Ethereum apply to Celo, so virtually all tutorials and other content should be easily translatable to Celo.
-
-Check out [https://celo.org/build](https://celo.org/build) for more resources!
diff --git a/blog/2022-01-05-no-code-erc721.md b/blog/2022-01-05-no-code-erc721.md
deleted file mode 100644
index da105c4be1..0000000000
--- a/blog/2022-01-05-no-code-erc721.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-title: "Deploy an NFT to Celo"
-description: How to deploy ERC721 tokens (NFTs) on the Celo network using autogenerated code.
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [tokens, ERC721, mint, NFT, ipfs, pinata, solidity, remix]
-image: https://dl.airtable.com/.attachmentThumbnails/a7e530eb72ac8f30f37c0a3447ef0e7d/72e944da
-hide_table_of_contents: false
----
-
-# Deploy an NFT to Celo
-
-How to deploy ERC721 tokens (NFTs) on the Celo network using autogenerated code.
-
-
-
-## Getting Started
-
-In this example, we will be using IPFS for off-chain storage, but you can use whatever off-chain storage mechanism you want.
-
-## Set up your wallet
-
-1. Install [Metamask](https://metamask.io/).
-2. [Add the Celo network](/getting-started/wallets/using-metamask-with-celo/manual-setup#adding-a-celo-network-to-metamask) to Metamask. We suggest adding the Alfajores testnet to Metamask as well, so you can test contract deployments before deploying to mainnet.
-3. Add a small amount of CELO to your Metamask account. In this example, we will deploy to the Alfajores testnet, so we need Alfajores CELO, which you can get from the faucet [here](https://celo.org/developers/faucet).
-
-## Prepare the NFT metadata
-
-4. Go to [https://app.pinata.cloud/](https://app.pinata.cloud/) and sign up for an account if you don’t have one already. Pinata is a service that allows you to easily upload files to [IPFS](https://ipfs.io/).
-5. Upload your NFT images to IPFS. Because storing data on a blockchain can be expensive, NFTs often reference off-chain data. In this example, We are creating a set of NFTs that reference pictures of trees. We uploaded all of the images of trees to IPFS individually. The names of the images correspond to the token ID. This isn’t necessary, we just did it for convenience. Notice that each image has a corresponding CID hash, this is the unique identifier for that file or folder. 
-6. Once all of your images have been uploaded, you will need to prepare the token metadata in a new folder.
- 1. We created a folder called “prosper factory metadata”. You can view the contents of the folder [here](https://gateway.pinata.cloud/ipfs/QmdmA3gwGukA8QDPH7Ypq1WAoVfX82nx7SaXFvh1T7UmvZ). The folder contains 14 files, numbered 0-13. **The names of these files are important.** These file names correspond to the token ID of each NFT that will be created by the contract. Make sure that there are no extensions (.txt, .json, .jpeg, .png) on your files. 
- 2. Click on one of the files. The files contain the NFT metadata. In this simple example, the metadata only contains a reference to the unique tree image. You can view the image in a browser that supports IPFS (we are using Brave) here. Each file should have a unique image reference.  You will need to create a similarly structured folder containing metadata for all of the NFTs that you want to create.
-7. Upload the folder containing all of the token metadata to IPFS. This will make your NFT data publicly available. We called ours “prosper factory metadata”. Note the CID of this folder. We will need it shortly. 
-
-## Design and Deploy the Smart Contracts
-
-8. Go to [https://docs.openzeppelin.com/contracts/4.x/wizard](https://docs.openzeppelin.com/contracts/4.x/wizard)
-9. Select ERC721 as your token choice.
-10. Enter your token information.
- 1. We are calling our token the ProsperityFactory, symbol PF.
- 2. We entered the IPFS CID of our token metadata folder (prosper factory metadata) in the “Base URI” field. Be sure to add a trailing “/” to the base URI, the token ID will be appended to the end of the base URI to get the IPFS metadata file. So the complete Base URI for our NFT contract is `ipfs://QmdmA3gwGukA8QDPH7Ypq1WAoVfX82nx7SaXFvh1T7UmvZ/`. Again, you can view the folder [here](https://gateway.pinata.cloud/ipfs/QmdmA3gwGukA8QDPH7Ypq1WAoVfX82nx7SaXFvh1T7UmvZ).
- 3. We made the token mintable and it will automatically increment the token IDs as the tokens are minted. The counter starts at 0 and adds 1 to each successive token. It is important that the file contents of the IPFS metadata folder are labeled accordingly (ie. 0-13) and correspond to the token IDs.
- 4. The contract is also marked Ownable, meaning that only the owner of the contract (which is initially set to the account that deploys the contract) can mint new NFTs. 
-11. Click “Open in Remix”. Remix will pop open with your contract code already filled in.
-12. Click the big blue button on the left side of Remix that says “Compile contract-xxxx.sol”. 
-13. Once the contract is compiled, click the Ethereum logo on the left side of the window. A new sidebar will appear. 
-14. In the “Environment” dropdown, select “Injected Web3”. This will connect Remix and Metamask. Make sure that Metamask is connected to the correct network. In this example, We are deploying to the Alfajores testnet, so we see a textbox below the dropdown that says `Custom (44787) network`. 44787 is the network id for Alfajores. 
-15. Select the contract that you want to deploy. We titled the contract the ProsperityFactory. 
-16. Click Deploy. Metamask will pop up asking you to confirm the transaction. 
-17. Once the contract is deployed, Remix will show a newly deployed contract on the bottom left corner of the window. Expand the ProsperityFactory dropdown to see all of the contract functions. You can see the deployed ProsperityFactory NFT contract [here](https://alfajores-blockscout.celo-testnet.org/address/0xD8ea7beC4820dbC22aCf87EB0cCFE50203a45A6F/transactions). 
-18. Let’s mint the first NFT. To do that we will call the safeMint function. The safeMint function needs an account address as an input, so it knows who to mint the token to. I’ll just enter the first Metamask address and click the orange button. Metamask will pop up, confirm the transaction. When the transaction is confirmed, this will have minted the first NFT, with token ID 0. 
-19. Check the token metadata. You can verify that the token was minted by calling the “tokenURI” function with the expected token ID. We call the contract with token ID 0 and it returns an IPFS reference. 
-20. Navigating to this IPFS reference will show the token metadata for that NFT. 
-21. Going to that IPFS reference will show the image for the token.
-
-We went through the same process and minted all 14 NFTs from this contract.
-
-That’s it! You now know how to create your own NFT contract with corresponding metadata!
-
-Let me know what you end up building and reach out if you have any questions, [@critesjosh\_](https://twitter.com/critesjosh_) on Twitter or joshc#0001 on Discord. Join the Celo discord at [https://chat.celo.org](https://chat.celo.org).
diff --git a/blog/2022-01-07-on-chain-randomness.md b/blog/2022-01-07-on-chain-randomness.md
deleted file mode 100644
index d0cca15dbd..0000000000
--- a/blog/2022-01-07-on-chain-randomness.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: "Use onchain randomness"
-description: How to use onchain randomness in your smart contracts.
-slug: /developer-guide/start/randomness
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [solidity, randomness, oracle]
-image: https://dl.airtable.com/.attachmentThumbnails/a7e530eb72ac8f30f37c0a3447ef0e7d/72e944da
-hide_table_of_contents: false
----
-
-import PageRef from '@components/PageRef';
-
-Onchain randomness is used for selecting validators to perform phone number verification. Read more about how onchain randomness is produced at the provided page.
-
-
-
-
-
-This randomness can be used by any smart contracts deployed to a Celo network.
-
-```solidity
-import "celo-monorepo/packages/protocol/identity/interfaces/IRandom.sol";
-import "celo-monorepo/packages/protocol/common/interfaces/IRegistry.sol";
-
-contract Example {
- function test() external view returns (bytes32 randomness) {
- randomness = IRandom(
- IRegistry(0x000000000000000000000000000000000000ce10)
- .getAddressFor(keccak256(abi.encodePacked("Random")))
- ).random();
- }
-}
-```
-
-Alternatively, through inheritance of `UsingRegistry`.
-
-```solidity
-import "celo-monorepo/packages/protocol/common/UsingRegistryV2.sol";
-
-contract Example is UsingRegistryV2 {
- function test() external view returns (bytes32 randomness) {
- randomness = getRandom().random();
- }
-}
-```
diff --git a/blog/2022-01-08-valora-wc-v1.md b/blog/2022-01-08-valora-wc-v1.md
deleted file mode 100644
index 06f1520989..0000000000
--- a/blog/2022-01-08-valora-wc-v1.md
+++ /dev/null
@@ -1,132 +0,0 @@
----
-title: Celo Valora + WalletConnect v1
-description: How to use Wallet Connect version 1 in a DApp to connect to Valora.
-authors:
- - name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
-tags: [react, valora, wallet connect]
-image: https://dl.airtable.com/.attachmentThumbnails/a7e530eb72ac8f30f37c0a3447ef0e7d/72e944da
-hide_table_of_contents: false
----
-
-import ImageWrapper from '@components/ImageWrapper'
-
-# Valora + WalletConnect v1
-
-How to use [WalletConnect version 1](https://docs.walletconnect.com/1.0/) in a DApp to connect to [Valora](https://valoraapp.com/).
-
-
-
-## Getting Started
-
-In this example, we will demonstrate how to add WalletConnect to a simple React app.
-
-This is a simple DApp that focuses on demonstrating how to connect WalletConnect to Valora, but also shows how to set up [ContractKit](/developer-guide/contractkit) and make a simple cUSD transfer. You can view the DApp code [here](https://github.com/critesjosh/valora-wallet-connect-v1).
-
-## Add Packages
-
-Add the packages that you need to your project.
-
-- [@walletconnect/web3-provider](https://www.npmjs.com/package/@walletconnect/web3-provider)
-- [Contractkit](https://www.npmjs.com/package/@celo/contractkit)
-- [Web3](https://www.npmjs.com/package/web3)
-
-```shell
-yarn add @wallet-connect/web3-provider web3 @celo/contractkit
-```
-
-Import the packages to your project code.
-
-```js
-import WalletConnectProvider from "@walletconnect/web3-provider";
-import Web3 from "web3";
-import { newKitFromWeb3 } from "@celo/contractkit";
-```
-
-## Connect
-
-If the DApp does not detect a [wallet connect provider](https://docs.walletconnect.com/1.0/quick-start/dapps/web3-provider), the user will be presented with a button to initiate a wallet connection.
-
-If the DApp is being accessed on a computer or device other than the mobile device with the wallet, the user can connect to the mobile wallet by scanning the presented QR code. If the DApp is being accessed on the same device as the wallet, the connection will be made via the appropriate linking mechanism (iOS and Android are different). You can read more about that [here](https://docs.walletconnect.com/1.0/mobile-linking#wallet-support).
-
-When a provider is detected, the DApp will show a button to send some cUSD.
-
-
-
-The connect function sets up the WalletConnect Provider and initializes ContractKit with the provider and user account. It also sets up a listener that will log when the user changes accounts. The DApp then saves the provider and initialized Contractkit in the [React component state](https://reactjs.org/docs/faq-state.html).
-
-```js
-connect = async () => {
- const provider = new WalletConnectProvider({
- rpc: {
- 44787: "https://alfajores-forno.celo-testnet.org",
- 42220: "https://forno.celo.org",
- },
- });
-
- await provider.enable();
- const web3 = new Web3(provider);
- let kit = newKitFromWeb3(web3);
-
- kit.defaultAccount = provider.accounts[0];
-
- provider.on("accountsChanged", (accounts) => {
- console.log(accounts);
- });
-
- this.setState({ provider, kit });
-};
-```
-
-**DApp:**
-
-
-
-**Valora:**
-
-
-
-When the provider has been set and the DApp is connected to Valora, the UI will update the button and display the user account address below.
-
-
-
-## Send cUSD
-
-Clicking the new button will prompt the user to send 0.001 cUSD to a hard-coded address. The user will have to click Allow to send the transaction. Once the transaction is confirmed, the transaction receipt will be printed in the DApp browser console.
-
-You can code the transaction approval request with just a few lines, demonstrated in the `sendcUSD` function.
-
-- Get the saved instance of ContractKit from `this.state.kit`
-- Get the stabletoken (cUSD) contract
-- Call `transfer` and `send` with the recipient and amount
-
-```js
-sendcUSD = async () => {
- let kit = this.state.kit;
-
- let amount = kit.web3.utils.toWei("0.001", "ether");
-
- const stabletoken = await kit.contracts.getStableToken();
- const tx = await stabletoken.transfer(this.state.someAddress, amount).send();
- const receipt = await tx.waitReceipt();
-
- console.log(receipt);
-};
-```
-
-
-
-The receipt will be logged once the user approves the transaction and it is confirmed on the network.
-
-## Pay Fees in Stable currencies
-
-Specifying the `feeCurrency` field in the transaction will allow users to pay transaction fees in that currency. Here's how you can have users pay transaction fees in cUSD, for example:
-
-```js
-const stabletoken = await kit.contracts.getStableToken();
-let tx = await stabletoken
- .transfer(this.state.someAddress, amount)
- .send({ feeCurrency: stabletoken.address });
-```
diff --git a/blog/2022-02-21-introduction-to-celo-progressive-dappstarter.md b/blog/2022-02-21-introduction-to-celo-progressive-dappstarter.md
deleted file mode 100644
index 436372c470..0000000000
--- a/blog/2022-02-21-introduction-to-celo-progressive-dappstarter.md
+++ /dev/null
@@ -1,230 +0,0 @@
----
-title: Introduction to Celo Progressive DAppstarter
-description: Quickly develop full-stack progressive web applications on Celo.
-tags: [react, material-ui, dappstarter, progressive]
-hide_table_of_contents: false
----
-
-import ImageWrapper from '@components/ImageWrapper'
-import YouTube from '@components/YouTube';
-
-# Introduction to Celo Progressive DAppstarter
-
-Quickly develop full-stack progressive web applications on the Celo blockchain.
-
----
-
-## Getting started
-
-Welcome to the [Celo Progressive Dappstarter](https://celo-progressive-dapp-starter.netlify.app/)—a starter pack to get you up and running fast with Celo DApp development. The goal of this post is to get you up and running [Celo Progressive Dapp starter](https://github.com/celo-org/celo-progressive-dapp-starter) in about 15 minutes or less. From there you can quickly build, iterate, and deploy new DApps on the Celo blockchain.
-
-**Here's a quick look at what you'll build**
-
-
-
-
-
-## Watch the video
-
-Check out this video for an overview of the topics covered in this post.
-
-
-
-:::info README
-
-View the project [README](https://github.com/celo-org/celo-progressive-dapp-starter) for a quick summary of steps in this video.
-
-:::
-
-## Prerequisites
-
-To start building, you’ll need a basic understanding of web development, Node (v12), yarn, and Git.
-
-- Node (v12), [NVM](https://github.com/nvm-sh/nvm)
-- Yarn
-- Git
-
-## Project stack
-
-The Celo Progressive Dappstarter uses the [Next.js](https://nextjs.org/) React framework with [Material UI](https://mui.com/), and [use-contractkit](https://www.npmjs.com/package/@celo-tools/use-contractkit) Celo library to get you started with building a responsive, web3 DApp quickly. The goal is to get you started quickly for ha reference and extend it with any web3 packages you are familiar with.
-
-## Set up your project repo
-
-Navigate to the [project repo](https://github.com/celo-org/celo-progressive-dapp-starter) and select **Use this template**
-
-
-
-Add a repository **name**, **description **and click **Create repository from template.**
-
-
-
-:::info Include all branches
-
-This template will soon include additional branches with new features. If you would like to include these branches in your repository, select **Include all branches**.
-
-:::
-
-## Create a local project
-
-From your new GitHub repository, select code, and copy the GitHub URL for your project.
-
-
-
-Open your terminal, navigate to your project directory, and `git clone` your project using the GitHub URL.
-
-```
-git clone https://github.com/path-to-your-project-repo
-```
-
-
-
-Navigate into your Celo project and run `nvm use` to switch to a Celo compatible Node version. Celo is compatible with Node v12 as specified in `.nvmrc` of the project folder.
-
-```
-cd celo-progressive-dapp-starter
-nvm use
-```
-
-
-
-## Setup your testnet account
-
-Create a new account and print the account number and private key using [hardhat](https://hardhat.org/) `create-account`.
-
-```
-npx hardhat create-account
-```
-
-
-
-Copy the testnet account address, paste it into the [Celo Testnet Faucet](https://celo.org/developers/faucet) and select **Get Started** to transfer funds into your testnet account.
-
-
-
-Import a new MetaMask account using your private key to view your newly funded Testnet Account.
-
-
-
-:::info MetaMask Setup
-
-Learn more about setting up your Alfajores Testnet with MetaMask [here](https://docs.celo.org/getting-started/wallets/using-metamask-with-celo/manual-setup#adding-a-celo-network-to-metamask)
-
-:::
-
-## Deploy smart contracts
-
-Change into the hardhat directory and install the project dependencies.
-
-```
-cd packages/hardhat
-yarn install
-```
-
-
-
-Open your projects `.env` file and replace `PRIVATE_KEY` with the account **private key** from your terminal.
-
-
-
-Return to your terminal and run `yarn deploy` to deploy your smart contracts.
-
-:::info Redeploy contracts
-
-You can run **yarn deploy --reset** to force re-deploy your contracts to any chain.
-
-:::
-
-
-
-## Start the front-end
-
-Navigate into the react-app directory and run `yarn install` to install the project front-end dependencies.
-
-```
-cd packages/react-app
-yarn install
-yarn dev
-```
-
-
-
-Run `yarn dev` to start your development environment.
-
-```
-yarn dev
-```
-
-
-
-Open [localhost:3000 ](http://localhost:3000/)to view your project.
-
-
-
-## Explore your dApp
-
-Enter a value in the **write contract **function and confirm the transaction to store a value.
-
-
-
-Once the transaction has been complete (approximately 5 seconds) you may view the transaction using the alert that appears with a link to the [Celo Alfajores Block Explorer](https://alfajores-blockscout.celo-testnet.org/).
-
-
-
-You should now be able to view the updated storage value using the **Read Storage Contract **function.
-
-
-
-View the **Greeter Contract **using the tabs to interact with a similar contract that allows you to read and write string values rather than numbers.
-
-
-
-## Customize your dApp
-
-Smart contracts for this project are in the **packages/hardhat/contracts **folder.
-
-
-
-The deploy scripts for each smart contract are found in** packages/hardhat/deploy/00-deploy.js**.
-
-
-
-The front-end code for each smart contract interface are found in **packages/react-app/components **and are named as components that should be similar to the name of the smart contract.
-
-
-
-:::info Redeploy contracts
-
-You can run **yarn deploy --reset** to force re-deploy your contracts to any chain.
-
-:::
-
-## View on Mobile
-
-Serve your React app to your mobile device for testing via a tunnel. Next.js defaults to serving your app on `port 3000`.
-
-```
-npx localtunnel --port 3000
-```
-
-:::info Local Tunnel
-
-Read more about localtunnel [here](https://www.npmjs.com/package/localtunnel).
-
-:::
-
-
-
-Your Celo dApp is now available on your mobile device at the URL provided in your terminal.
-
-## Contribute to the project
-
-We welcome contributions to this repository! If you decide to try this out and find something confusing, consider opening a pull request to make things more clear for the next developer. If you improve the user interface or create new components that you think might be useful for other developers, consider opening a PR.
-
-We will happily compensate you for your contributions. Anywhere between 5 and 50 cUSD (or more) will be awarded to contributors depending on the scope of the work as determined by the Celo Foundation Developer Relations team.
-
-:::info Get Support
-
-Join the [Celo Discord server](https://chat.celo.org/) or reach out on the dedicated repo channel
-[here](https://discord.com/channels/600834479145353243/941003424298856448).
-
-:::
diff --git a/blog/authors.yml b/blog/authors.yml
deleted file mode 100644
index 6632b7f9b8..0000000000
--- a/blog/authors.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-josh:
- name: Josh Crites
- title: Developer Relations, cLabs
- url: https://github.com/critesjosh
- image_url: https://github.com/critesjosh.png
\ No newline at end of file
diff --git a/blog/styles.css b/blog/styles.css
deleted file mode 100644
index e01be5ec0a..0000000000
--- a/blog/styles.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.observable-notebook {
- background: white;
-}
\ No newline at end of file
diff --git a/crowdin.yml b/crowdin.yml
index d0b7477fcb..1dbe5eb06c 100644
--- a/crowdin.yml
+++ b/crowdin.yml
@@ -1,18 +1,21 @@
-# project_id: '478619'
-project_id: '9'
+project_id: "9"
+api_token_env: "CROWDIN_PERSONAL_TOKEN"
preserve_hierarchy: true
-# api_token_env: "CROWDIN_PERSONAL_TOKEN"
-api_token_env: "ENT_CROWDIN_PERSONAL_TOKEN"
base_url: "https://celo.crowdin.com"
files: [
# JSON translation files
{
- source: '/i18n/en/**/*',
- translation: '/i18n/%two_letters_code%/**/%original_file_name%',
+ source: "/i18n/en/**/*",
+ translation: "/i18n/%two_letters_code%/**/%original_file_name%",
},
# Docs Markdown files
{
- source: '/docs/**/*',
- translation: '/i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%',
+ source: "/docs/**/*",
+ translation: "/i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%",
},
- ]
\ No newline at end of file
+ # Blog Markdown files
+ {
+ source: "/blog/**/*",
+ translation: "/i18n/%two_letters_code%/blog/**/%original_file_name%",
+ },
+ ]
diff --git a/docs/.node-version b/docs/.node-version
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/FAQs.md b/docs/FAQs.md
deleted file mode 100644
index f4fa1dd699..0000000000
--- a/docs/FAQs.md
+++ /dev/null
@@ -1,180 +0,0 @@
----
-title: Celo FAQ
-description: Answers to frequently asked questions about Celo.
-id: faqs
----
-
-# FAQ
-
-Answers to frequently asked questions about Celo.
-
----
-
-## Introduction and Overview
-
-### What is Celo (CELO)?
-
-Celo is an open platform that makes financial tools accessible to anyone with a mobile phone. Celo is a mobile-first platform that makes financial dApps and crypto payments accessible to anyone with a mobile phone Let's dig a little deeper into some of the terms:
-
-**Open**
-
-- The platform is an open-source project where everyone is invited to contribute
-- Celo is connecting to decentralized ecosystems like Ethereum, Bitcoin, and Cosmos, and improving blockchain interoperability with Optics
-
-**Mobile**
-
-- Phone numbers are mapped to addresses using a decentralized identity protocol, which facilitates the user experience
-- The ultra-light client allows all smartphones, including those with low memory and connectivity, to easily connect to the Celo network
-
-**Real**
-
-- The platform is designed with communities around the world where are innovations are based on 150+ user interviews in 20+ cities across 10+ countries
-- Celo hosts a rich ecosystem of dApps, from DeFI to payments, catering to users across 6 continents
-- Celo is a blockchain ecosystem focused on increasing cryptocurrency adoption among smartphone users.
-- By using phone numbers as public keys, Celo hopes to introduce the world’s billions of smartphone owners, including those without banking access, to transacting in cryptocurrency.
-
-### When was Celo Launched?
-
-The project started in the fall of 2017 when the whitepaper was first published. The first test network, called Alfajores (named after the famous Argentian cookie), launched in July 2019. The incentivized testnet, called Baklava (named after the delicious Turkish dessert), launched in December 2019. Mainnet launched on Earth Day Apr 22, 2020.
-
-Today Alfajores is a testnet for dApp developers and Baklava a testnet for node operators.
-
-### Who are the Founders of Celo?
-
-Celo was originally founded by a team comprised of people from MIT, Stanford, Google, Square, Circle, Visa, GoDaddy, World Bank, Federal Reserve Bank, Harvard University, University of Pennsylvania Law School, Cambridge University, U.S. Department of Justice, Bank Of America, Capital One, Twitter, Give Directly, and the Gates Foundation
-
-Separate entities are aimed at Celo’s promotion and preservation. The dedicated Celo Foundation is a non-profit which launched along with the mainnet, while the Celo Alliance for Prosperity is what the company describes as an “ecosystem of mission-aligned organizations.”
-
-### Where can I see a list with all the apps developed on Celo?
-
-[Celo DApp Gallery](./developer-guide/celo-dapp-gallery)
-
-### What is the unique selling point of Celo?
-
-Celo’s main unique selling point lies in making financial tools and global digital payments accessible to all using crypto. It focuses on making crypto mobile and usable taking a user-centric approach to platform design and innovation.
-
----
-
-## General Questions
-
-### Do you have an Announcement Channel?
-
-At the moment there is none on telegram, best to follow Celo on Twitter or any other social media channels for Celo. Every announcement is always posted there.
-
-### Celo Token
-
-### What token does CELO have?
-
-The platform has three native tokens. CELO is a proof-of-stake (PoS) token used for transaction fees, governance participation, and related activities. In the future, the platform aims to host various stablecoins, with Celo Dollar & Celo Euro, already in use.
-
-### What is cUSD/cEUR backed by?
-
-Both stable coins are backed by Celo reserve [celoreserve.org](https://celoreserve.org/) composed of BTC, ETH, CELO, and DAI.
-
-### Do you have a Mobile Wallet?
-
-Go to the App Store and search "Valora" to find the Celo mobile wallet. Alternatively, you can directly follow app links available at [Valoraapp.com ](https://valoraapp.com/)
-
-### What's the difference between cEUR and cUSD?
-
-cEUR is a stablecoin that tracks the value of 1 euro while cUSD follows the value of 1 USD.
-
----
-
-## Exchanges
-
-### Where can I purchase Celo?
-
-There are a number of exchanges that listed Celo, you can find us on Binance and Coinbase. You can also visit Coingecko and CMC for the full list of exchanges that listed us.
-
-### Where can I swap tokens related to Celo’s ecosystem?
-
-[Ubeswap](https://docs.ubeswap.org/tutorial/swapping-tokens) and [Sushiswap](https://sushi.com/).
-
-### What is Celo's supply?
-
-CELO has a capped supply of 1 billion (1,000,000,000) tokens, of which 600 million were available when the mainnet launched in April 2020.
-
-The last 40% of the supply will be released gradually via fees and rewards, and various vesting schedules are in place depending on how initial investors received their tokens.
-
-In addition, up to 120 million CELO will go towards a reserve designed to maintain the validity and price stability of cUSD. As a stablecoin, cUSD is envisioned as a convenient payment method for Celo users who will not have to worry about their holdings fluctuating in value.
-
----
-
-## Technical Questions
-
-### How is Celo Secured?
-
-Celo uses proof-of-stake to maintain security and has a complex election process to determine validators of its blockchain. Holders of CELO are able to use their holdings as a means of participating in elections by voting for groups of validators.
-
-### Regarding Celo Blockchain, do we have another source for on-chain data apart from [explorer.celo.org](https://explorer.celo.org/)?
-
-[https://www.thecelo.com/](https://www.thecelo.com/) is an alternative source for on-chain data.
-
-### How does Celo handle Governance?
-
-All CELO owners can participate in on-chain governance which votes on Celo Governance Proposals (visible here [https://celo.stake.id/#/](https://celo.stake.id/#/) ). One of the first governance proposals was to [re-name Celo Gold (cGLD) to CELO](https://forum.celo.org/t/proposal-to-rename-celo-gold-to-celo-native-asset/528) (Coinbase still hasn’t been renamed to CELO so you’ll see it listed at cGLD there)
-
-The (DAO of) CELO owners also govern the [Community fund](https://celocommunityfund.org/). [25% (governable parameter) ](./celo-codebase/protocol/proof-of-stake/epoch-rewards/community-fund)of the minted block rewards go to this fund. The community can decide how to spend it. It’s also worth noting, that 0.1% of block rewards go to a carbon offset fund, currently, those go-to project [Wren](https://www.wren.co/profile/celo) for planting trees.
-
-Can I access DeFi DApps using Valora?
-
-The Valora team just spun out of cLabs and their CEO is currently reviewing their product strategy. Originally Valora was designed as a Venmo payments app based on user research in emerging markets
-
-For DeFi - today the easiest experience is to visit a dApp’s website and either use Valora on mobile or Metamask chrome plugin on desktop (advanced users only)
-
-[How to add Celo to MetaMask docs here](./getting-started/wallets/using-metamask-with-celo)
-
----
-
-## Staking Questions
-
-### How do I stake CELO?
-
-You can stake CELO via [CeloWallet.app](https://celowallet.app/), [CeloVote.com](https://celovote.com/), [Celo.dance](https://celo.dance/), or [Celoterminal.com](https://celoterminal.com/).
-
-### Can people without technical knowledge also participate in the staking process?
-
-Yes, staking and governance are possible using [celowallet.app](https://celowallet.app/) and [celoterminal.com](https://celoterminal.com/)
-
-### Is there a step-by-step on how to stake Celo?
-
-Here is a [step by step guide regarding Celo staking](https://stakeservice.medium.com/hey-guys-today-well-take-a-look-at-how-you-can-use-the-cello-wallet-to-stake-your-own-cello-92730ac24aa5)
-
----
-
-## DeFi (Lending, pooling, liquidity mining, farming)
-
-### What are liquidity provision and farming?
-
-Pools are a way to provide liquidity, or the ability to trade, between two different tokens. They allow you to get exposure to the price of two tokens while earning trading fees on your tokens.
-
-Staking tokens in a pool gives you a token called a liquidity provider token (or LP token for short). These LP tokens are extremely useful, as they can be used to provide loan collateral, earn rewards in a yield farming platform, and many other use cases.
-
-### How can I provide liquidity and farm tokens of Celo’s ecosystem?
-
-[Ubeswap](https://ubeswap.org/) (more info [here](https://docs.ubeswap.org/tutorial/providing-liquidity))and [SushiSwap](https://sushi.com/) offer liquidity provision and farming functionalities on Celo.
-
-### What about borrowing, lending, and interest-earning on Celo?
-
-[Moola](https://moola.market/) is a non-custodial liquidity protocol built on the Celo blockchain that is democratizing access to yield and credit. Depositors earn passive yield which is paid for by borrowers who are able to take over-collateralized loans in perpetuity or under-collateralized flash loans. Moola has shared ancestry with Aave v1.
-
-### Are there risks associated with using Celo’s DeFi platforms?
-
-As with any new technology, not all risks can be eliminated. Some of them are smart contract risk (unknown vulnerability with the code) and liquidation risks.
-
----
-
-## Developers
-
-### How is Celo different from Ethereum?
-
-You can see the key differences between Celo and Ethereum [here](./developer-guide/celo-for-eth-devs).
-
-### When building for mobile, what native SDKs are available?
-
-- [Java](https://github.com/blaize-tech/celo-sdk-java)
-
-### When building for web2 what SDKs or libraries are available?
-
-A basic example of using wallet connect with Valora can be found [here](/developer-resources/walkthroughs/valora-wc-v1). If you prefer more granular control, take a look at [use-contractkit](https://github.com/celo-tools/use-contractkit).
diff --git a/docs/build/build-on-socialconnect.md b/docs/build/build-on-socialconnect.md
new file mode 100644
index 0000000000..eebe0261fc
--- /dev/null
+++ b/docs/build/build-on-socialconnect.md
@@ -0,0 +1,50 @@
+---
+title: Introduction to SocialConnect
+description: A beginner's guide to understanding and using SocialConnect
+---
+
+By the conclusion of this guide, you will have a basic understanding of SocialConnect and how to get started with it.
+
+This document will cover:
+
+- What is SocialConnect?
+- Key Features
+- Getting Started
+- Further Reading
+
+## 🚀 What is SocialConnect?
+
+SocialConnect is an open-source protocol that maps off-chain personal identifiers (such as phone numbers, Twitter handles, etc.) to on-chain account addresses. This enables a convenient and interoperable user experience for various use cases, including:
+
+- **Payments**: Send money directly to your friend's phone number.
+- **Social Discovery**: Find someone's account based on their Twitter handle or other identity applications.
+
+For a short demo of a payment from a Kaala wallet user to a Libera wallet user using only a phone number, check out the [SocialConnect documentation](https://socialconnect-docs.vercel.app/).
+
+## 🔑 Key Features
+
+- **Interoperability**: Seamlessly map off-chain identifiers to on-chain addresses.
+- **Convenience**: Simplify user interactions by using familiar identifiers like phone numbers and social media handles.
+- **Privacy**: Ensure user privacy with features like phone number privacy and key hardening.
+
+## 🛠️ Getting Started
+
+To start using SocialConnect, follow these steps:
+
+1. **Buy Odis Quota and Check Balance**: Learn how to purchase Odis quota and check your balance.
+2. **Lookup Identifier**: Find on-chain addresses using off-chain identifiers.
+3. **Register Identifier**: Register new identifiers to map them to on-chain addresses.
+4. **Revoke Identifier**: Remove mappings of identifiers when they are no longer needed.
+5. **Setup Issuer**: Configure an issuer for managing identifiers.
+
+For detailed guides and examples, refer to the [SocialConnect documentation](https://socialconnect-docs.vercel.app/).
+
+## 📚 Further Reading
+
+To dive deeper into SocialConnect, explore the following sections in the documentation:
+
+- **Introduction to SocialConnect**: [Read more](https://socialconnect-docs.vercel.app/)
+- **Guides**: Step-by-step instructions for various tasks.
+- **Protocol**: Detailed information about the protocol's architecture and components.
+- **Examples**: Practical examples, including a Next.js example.
+- **Contracts**: Information about the smart contracts used in SocialConnect.
diff --git a/docs/build/build-with-ai/build-with-goat/mint-nft-agent.md b/docs/build/build-with-ai/build-with-goat/mint-nft-agent.md
new file mode 100644
index 0000000000..ea016beb04
--- /dev/null
+++ b/docs/build/build-with-ai/build-with-goat/mint-nft-agent.md
@@ -0,0 +1,279 @@
+# Tutorial: Build an AI-Powered NFT Minting Agent on Celo
+
+This tutorial guides you through building an AI-powered agent capable of minting NFTs on the Celo blockchain. We will adapt the structure from the previous [token swapping tutorial](./token-swap-agent.md) to create an agent that can mint NFTs based on natural language prompts.
+
+This approach provides direct control over the minting process and utilizes core blockchain interaction libraries. We will use `@ai-sdk/openai` for AI capabilities, `viem` for direct blockchain interaction, and `@goat-sdk` for agent framework components.
+
+### Understanding the Code: AI Agent for NFT Minting (Direct Contract Interaction)
+
+Let's examine the code structure, building upon the token swapping agent example and focusing on NFT minting.
+
+#### 1. Importing Libraries:
+
+```javascript
+import readline from "node:readline";
+
+import { openai } from "@ai-sdk/openai";
+import { generateText } from "ai";
+
+import { http } from "viem";
+import { createWalletClient } from "viem";
+import { privateKeyToAccount } from "viem/accounts";
+import { celo } from "viem/chains"; // Using Celo chain
+
+import { getOnChainTools } from "@goat-sdk/adapter-vercel-ai";
+
+import { viem } from "@goat-sdk/wallet-viem";
+
+require("dotenv").config();
+```
+
+- **Libraries**: We use the core libraries: readline, @ai-sdk/openai, ai, viem, and @goat-sdk.
+- **Chain Import**: We directly import celo from viem/chains to configure for the Celo network.
+- **Focused Approach**: We are focusing solely on NFT minting in this version with a generic mintNFT tool.
+
+#### 2. Wallet Client Creation:
+
+```javascript
+// 1. Create a wallet client
+const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
+
+const walletClient = createWalletClient({
+ account: account,
+ transport: http(process.env.RPC_PROVIDER_URL),
+ chain: celo, // Using Celo chain
+});
+```
+
+- **Wallet Client**: This section sets up a viem wallet client connected to the Celo network.
+
+#### 3. Getting On-Chain Tools (NFT Minting Focus):
+
+```javascript
+// 2. Get your onchain tools for your wallet
+const tools = await getOnChainTools({
+ wallet: viem(walletClient),
+ plugins: [
+ // We define a custom mintNFT tool here
+ {
+ name: "mintNFT",
+ description:
+ "Use this tool to mint an NFT to a specified address. Input should be the recipient address and (optionally) NFT metadata.",
+ async execute({ recipientAddress, metadata }) {
+ // Implementation for minting NFT will be added here using viem
+ // This is a placeholder - actual minting logic needs to be implemented
+ console.log(
+ `Minting NFT to address: ${recipientAddress} with metadata:`,
+ metadata,
+ );
+ return "NFT minting initiated (placeholder - not actually minted). Implement actual minting logic in the execute function.";
+ },
+ },
+ ],
+});
+```
+
+- **On-Chain Tools for NFT Minting**: We define a custom mintNFT tool directly within the plugins array.
+ - **name: "mintNFT"**: The name of the tool, which the AI agent will use to identify and call it.
+ - **description**: A crucial description that tells the AI agent when and how to use this tool. It specifies that the tool is for minting NFTs and expects recipientAddress and optional metadata as input.
+ - **execute(recipientAddress, metadata)**: This is the function that will be executed when the AI agent decides to use the mintNFT tool.
+ - **Placeholder Implementation**: Currently, the execute function is a placeholder. It logs a message indicating that NFT minting is initiated but does not contain actual minting logic.
+ - **Implementation using viem** (To be added - see "Implementing the mintNFT Tool" section below): The actual implementation of NFT minting within this execute function will involve using viem to interact with an NFT smart contract on Celo. This will include:
+ - Connecting to the NFT Contract: Using viem to get an instance of your deployed NFT contract using its address and ABI.
+ - Calling the Mint Function: Using viem to call the minting function of your NFT contract. This will likely involve sending a transaction from your walletClient and paying gas fees in CELO.
+ - Handling NFT Metadata: If your NFT contract supports metadata, you'll need to incorporate the metadata input into the minting transaction.
+
+#### 4. Command Line Interface and AI Interaction Loop:
+
+```javascript
+// 3. Create a readline interface to interact with the agent
+const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+});
+
+while (true) {
+ const prompt =
+ (await new Promise()) <
+ string >
+ ((resolve) => {
+ rl.question('Enter your prompt (or "exit" to quit): ', resolve);
+ });
+
+ if (prompt === "exit") {
+ rl.close();
+ break;
+ }
+
+ console.log("\n-------------------\n");
+ console.log("TOOLS CALLED");
+ console.log("\n-------------------\n");
+ try {
+ const result = await generateText({
+ model: openai("gpt-4o-mini"),
+ tools: tools,
+ maxSteps: 10, // Maximum number of tool invocations per request
+ prompt: prompt,
+ onStepFinish: (event) => {
+ console.log(event.toolResults);
+ },
+ });
+
+ console.log("\n-------------------\n");
+ console.log("RESPONSE");
+ console.log("\n-------------------\n");
+ console.log(result.text);
+ } catch (error) {
+ console.error(error);
+ }
+ console.log("\n-------------------\n");
+}
+```
+
+- **Interactive Loop**: This provides the command-line interface and AI interaction using generateText.
+
+### Setup Guide for Celo NFT Minting Agent
+
+Follow these steps to set up the AI-powered NFT minting agent on Celo:
+
+#### 1. Clone Repository and Navigate to Example Directory:
+
+Follow steps 1-5 from the [previous tutorial](./token-swap-agent.md) to clone the GOAT repository, navigate to the typescript directory, install dependencies, build the project, and go to the example directory: examples/by-use-case/evm-mint-nft.
+
+#### 2. Configure Environment Variables:
+
+```bash
+cp .env.template .env
+```
+
+Copy .env.template to .env and populate the following environment variables:
+
+- **OPENAI_API_KEY**: Your OpenAI API key from OpenAI.
+- **WALLET_PRIVATE_KEY**: Your private key for the wallet that will mint NFTs on Celo. Security Best Practices: Use a test wallet and handle private keys with extreme caution.
+- **RPC_PROVIDER_URL**: The RPC URL for the Celo network (e.g., Celo Alfajores Testnet: https://alfajores-forno.celo-testnet.org). See previous articles for more Celo RPC options.
+
+Example .env file (for Celo Alfajores Testnet):
+
+```
+OPENAI_API_KEY=YOUR_OPENAI_API_KEY
+WALLET_PRIVATE_KEY=YOUR_PRIVATE_KEY
+RPC_PROVIDER_URL=https://alfajores-forno.celo-testnet.org
+```
+
+#### 3. Adapt Code for Celo and NFT Minting:
+
+- **Chain Configuration**: In index.ts, ensure you have celo chain imported and configured in createWalletClient as shown in the code examples above.
+
+- **Implement the mintNFT Tool's execute Function**: This is the crucial step to enable actual NFT minting. You need to replace the placeholder implementation in the mintNFT tool's execute function with the actual logic to interact with your NFT smart contract on Celo using viem.
+
+**Implementing the mintNFT Tool's execute Function (Conceptual Steps):**
+
+```javascript
+// ... inside the plugins array in getOnChainTools:
+{
+ name: "mintNFT",
+ description: "...",
+ async execute({ recipientAddress, metadata }) {
+ try {
+ // 1. NFT Contract Address and ABI:
+ const nftContractAddress = "YOUR_NFT_CONTRACT_ADDRESS"; // Replace with your NFT contract address on Celo
+ const nftContractAbi = [...]; // Replace with your NFT contract ABI (interface)
+
+ // 2. Get Contract Instance using viem:
+ const nftContract = getContract({
+ address: nftContractAddress,
+ abi: nftContractAbi,
+ publicClient: walletClient, // or use publicClient if you only need to read
+ });
+
+ // 3. Call the mint function (Adapt to your contract's mint function name and parameters):
+ const mintTxHash = await walletClient.writeContract({
+ address: nftContractAddress,
+ abi: nftContractAbi,
+ functionName: 'mint', // Replace with your contract's mint function name
+ account: walletClient.account,
+ args: [recipientAddress, metadata], // Adapt arguments based on your contract's mint function parameters
+ gas: 2000000, // Adjust gas limit as needed
+ });
+
+ console.log("Mint Transaction Hash:", mintTxHash);
+ return `NFT mint transaction initiated. Transaction hash: ${mintTxHash}. (Remember to check transaction status on a Celo block explorer.)`;
+
+
+ } catch (error) {
+ console.error("Error minting NFT:", error);
+ return `NFT minting failed. Error: ${error.message}`;
+ }
+ },
+}
+```
+
+**Explanation of mintNFT Tool Implementation:**
+
+- **NFT Contract Address and ABI**:
+
+ - **nftContractAddress**: You MUST replace "YOUR_NFT_CONTRACT_ADDRESS" with the actual address of your deployed NFT smart contract on the Celo network (Alfajores Testnet or Mainnet).
+ - **nftContractAbi**: You MUST replace [...] with the ABI (Application Binary Interface) of your NFT smart contract. The ABI defines how to interact with your contract's functions. You can usually get the ABI from your smart contract compilation output (e.g., from Hardhat or Truffle).
+
+- **getContract**: We use viem's getContract function to create a contract instance, allowing us to interact with your deployed NFT contract. We provide the address, abi, and publicClient (or walletClient if you need to send transactions).
+
+- **walletClient.writeContract**: This is the core viem function to send a transaction to your smart contract to call the minting function.
+
+ - **address**: NFT contract address.
+ - **abi**: NFT contract ABI.
+ - **functionName**: 'mint': Replace 'mint' with the actual name of your minting function in your NFT contract.
+ - **account**: walletClient.account: Specifies the account (your wallet) that will send the transaction.
+ - **args**: [recipientAddress, metadata]: Adapt args to match the parameters of your NFT contract's mint function. The example assumes your mint function takes a recipientAddress and metadata. You might need to adjust this based on your contract. Metadata handling will also depend on how your NFT contract stores or handles metadata (e.g., you might pass a URI, or metadata might be handled differently).
+ - **gas**: 2000000: Sets a gas limit for the transaction. Adjust this value as needed based on your contract's gas requirements. You can estimate gas using viem functions or start with a generous limit and adjust down if needed.
+
+- **Transaction Hash and Error Handling**: The code logs the transaction hash and returns a message. It also includes basic error handling.
+
+**Important Considerations for mintNFT Implementation:**
+
+- **NFT Contract Deployment**: You need to have a deployed NFT smart contract on Celo (Alfajores or Mainnet) to use this agent. You'll need the contract address and ABI.
+- **NFT Contract mint Function**: Understand the exact function name, parameters, and any access control or requirements of your NFT contract's minting function.
+- **Metadata Handling**: Determine how your NFT contract handles metadata. You might need to adjust the metadata parameter and how you pass it to the mint function.
+- **Gas Fees**: Minting transactions require CELO to pay for gas fees. Ensure your wallet has sufficient CELO.
+- **Error Handling**: Implement more robust error handling in the execute function to catch potential issues during contract interaction.
+- **Security**: Be extremely cautious when dealing with smart contracts and blockchain transactions, especially in production. Thoroughly test your contract and agent in a test environment before deploying to mainnet.
+
+#### 4. Usage Instructions:
+
+**Run the Interactive CLI:**
+
+From the examples/by-use-case/evm-mint-nft directory, run:
+
+```bash
+pnpm ts-node index.ts
+```
+
+**Chat with the Agent for NFT Minting:**
+
+Interact with the agent using natural language prompts to mint NFTs. Here are example prompts:
+
+- "Mint an NFT for address 0x1234...5678" - Instruct the agent to mint an NFT to the specified recipient address. (Replace 0x1234...5678 with an actual Celo address).
+- "Mint an NFT with metadata `{'name': 'My NFT', 'description': 'A test NFT'}`" - Instruct the agent to mint an NFT with specific metadata. (The exact format of metadata and how it's handled will depend on your mintNFT tool implementation and NFT contract).
+
+**Example Interaction:**
+
+```
+Enter your prompt (or "exit" to quit): Mint an NFT for address 0xRecipientAddressHere
+-------------------
+TOOLS CALLED
+-------------------
+// Output of tool calls will be logged here (from onStepFinish callback)
+-------------------
+RESPONSE
+-------------------
+// AI agent's response based on the prompt and tool execution
+-------------------
+Enter your prompt (or "exit" to quit): exit
+```
+
+### Conclusion
+
+This tutorial has provided a guide to building an AI-powered NFT minting agent on Celo. By directly interacting with an NFT smart contract using viem, you gain more control over the minting process.
+
+Remember that the provided mintNFT tool's execute function is a placeholder. You MUST implement the actual NFT minting logic using viem and your deployed NFT smart contract on Celo as described in the "Implementing the mintNFT Tool" section.
+
+Thoroughly test your agent and smart contract in a test environment before deploying to the Celo mainnet. Explore the viem documentation and experiment with different prompts and metadata handling to create a powerful and user-friendly AI-driven NFT minting experience on Celo!
diff --git a/docs/build/build-with-ai/build-with-goat/send-token-agent.md b/docs/build/build-with-ai/build-with-goat/send-token-agent.md
new file mode 100644
index 0000000000..2ff859eb55
--- /dev/null
+++ b/docs/build/build-with-ai/build-with-goat/send-token-agent.md
@@ -0,0 +1,224 @@
+# Tutorial: Build an AI Agent to Send Tokens on Celo
+
+This tutorial will guide you through creating an AI-powered agent capable of sending tokens on the Celo blockchain. We will adapt the provided code, which demonstrates sending tokens on the Sepolia test network, to function seamlessly on Celo. This will allow you to build an interactive agent that can send both native CELO and ERC20 tokens based on natural language prompts.
+
+We will utilize `@ai-sdk/openai` for AI capabilities, `viem` for blockchain interaction, and `@goat-sdk` to simplify the development of our on-chain agent. We will be using `@goat-sdk/wallet-evm` for sending native tokens and `@goat-sdk/plugin-erc20` for handling ERC20 tokens.
+
+### Understanding the Code: AI Agent for Sending Tokens
+
+Let's dissect the provided code, which forms the foundation for our token sending agent.
+
+**1. Importing Libraries:**
+
+```javascript
+import readline from "node:readline";
+
+import { openai } from "@ai-sdk/openai";
+import { generateText } from "ai";
+
+import { http } from "viem";
+import { createWalletClient } from "viem";
+import { privateKeyToAccount } from "viem/accounts";
+import { baseSepolia } from "viem/chains"; // We will change 'baseSepolia' to 'celo'
+
+import { getOnChainTools } from "@goat-sdk/adapter-vercel-ai";
+import { PEPE, USDC, erc20 } from "@goat-sdk/plugin-erc20";
+
+import { sendETH } from "@goat-sdk/wallet-evm"; // We will adapt sendETH for CELO
+import { viem } from "@goat-sdk/wallet-viem";
+
+require("dotenv").config();
+```
+
+- **Libraries:** The imports are similar to previous examples, including `readline`, `@ai-sdk/openai`, `ai`, `viem`, and `@goat-sdk`.
+- **Chain Import:** `baseSepolia` is imported from `viem/chains`, which we will replace with `celo` to target the Celo network.
+- **Token Imports:** `PEPE` and `USDC` are imported from `@goat-sdk/plugin-erc20`. We will need to ensure these or similar tokens are relevant and available on Celo, or configure for other ERC20 tokens on Celo.
+- **`sendETH` Import:** `sendETH` from `@goat-sdk/wallet-evm` is imported to enable sending native tokens. We will adapt this to send CELO.
+
+**2. Wallet Client Creation:**
+
+```javascript
+// 1. Create a wallet client
+const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
+
+const walletClient = createWalletClient({
+ account: account,
+ transport: http(process.env.RPC_PROVIDER_URL),
+ chain: baseSepolia, // We will change 'baseSepolia' to 'celo'
+});
+```
+
+- **Wallet Client Setup:** This section sets up a `viem` wallet client, retrieving the private key from the `WALLET_PRIVATE_KEY` environment variable and connecting to the blockchain using the `RPC_PROVIDER_URL`. We will modify `chain` to `celo` for Celo.
+
+**3. Getting On-Chain Tools (Token Sending Focus):**
+
+```javascript
+// 2. Get your onchain tools for your wallet
+const tools = await getOnChainTools({
+ wallet: viem(walletClient),
+ plugins: [
+ sendETH(), // Enable ETH transfers - Adapt for CELO
+ erc20({ tokens: [USDC, PEPE] }), // Enable ERC20 token operations - Review for Celo tokens
+ ],
+});
+```
+
+- **On-Chain Tools for Token Sending:** This section configures the tools for sending tokens:
+ - `sendETH()`: Enables sending native ETH on Sepolia. We will adapt this to send native CELO on Celo.
+ - `erc20({ tokens: [USDC, PEPE] })`: Enables ERC20 token operations for USDC and PEPE. We will need to review and potentially replace these tokens with relevant ERC20 tokens on Celo.
+
+**4. Command Line Interface and AI Interaction Loop:**
+
+```javascript
+// 3. Create a readline interface to interact with the agent
+ const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+ });
+
+ while (true) {
+ const prompt = await new Promise((resolve) => {
+ rl.question('Enter your prompt (or "exit" to quit): ', resolve);
+ });
+
+ if (prompt === "exit") {
+ rl.close();
+ break;
+ }
+
+ console.log("\n-------------------\n");
+ console.log("TOOLS CALLED");
+ console.log("\n-------------------\n");
+ try {
+ const result = await generateText({
+ model: openai("gpt-4o-mini"),
+ tools: tools,
+ maxSteps: 10, // Maximum number of tool invocations per request
+ prompt: prompt,
+ onStepFinish: (event) => {
+ console.log(event.toolResults);
+ },
+ });
+
+ console.log("\n-------------------\n");
+ console.log("RESPONSE");
+ console.log("\n-------------------\n");
+ console.log(result.text);
+ } catch (error) {
+ console.error(error);
+ }
+ console.log("\n-------------------\n");
+ }
+})();
+```
+
+- **Interactive Loop:** This section sets up the command-line interface and the AI interaction loop, identical to previous examples, using `generateText` to process prompts and interact with the configured tools.
+
+### Setup Guide for Celo Token Sending Agent
+
+Follow these steps to set up the AI-powered token sending agent on Celo:
+
+**1. Clone Repository and Navigate to Example Directory:**
+
+Follow steps 1-5 from the [NFT minting tutorial](./mint-nft-agent.md) (or previous tutorials) to clone the GOAT repository, navigate to the `typescript` directory, install dependencies, build the project, and go to the example directory: `examples/by-use-case/evm-mint-nft`. You can reuse this directory or create a new one if you prefer.
+
+**2. Configure Environment Variables:**
+
+```bash
+cp .env.template .env
+```
+
+Copy `.env.template` to `.env` and populate the following environment variables in the `.env` file:
+
+- **`OPENAI_API_KEY`**: Your OpenAI API key from [OpenAI](https://www.google.com/url?sa=E&source=gmail&q=https://platform.openai.com/).
+- **`WALLET_PRIVATE_KEY`**: Your private key for the wallet that will send tokens on Celo. **Security Best Practices:** Use a test wallet and handle private keys with extreme caution.
+- **`RPC_PROVIDER_URL`**: The RPC URL for the Celo network. Use a Celo Alfajores Testnet RPC URL for testing (e.g., `https://alfajores-forno.celo-testnet.org`). Refer to previous articles for more Celo RPC options.
+
+**Example `.env` file (for Celo Alfajores Testnet):**
+
+```
+OPENAI_API_KEY=YOUR_OPENAI_API_KEY
+WALLET_PRIVATE_KEY=YOUR_PRIVATE_KEY
+RPC_PROVIDER_URL=[https://alfajores-forno.celo-testnet.org](https://alfajores-forno.celo-testnet.org)
+```
+
+**Note:** We only need `OPENAI_API_KEY`, `WALLET_PRIVATE_KEY`, and `RPC_PROVIDER_URL` for this token sending agent.
+
+**3. Adapt Code for Celo Token Sending:**
+
+1. **Chain Configuration:** In `index.ts`, replace `baseSepolia` with `celo` from `viem/chains`:
+
+ ```javascript
+ import { celo } from "viem/chains"; // Import Celo chain
+
+ // ...
+
+ const walletClient = createWalletClient({
+ account: account,
+ transport: http(process.env.RPC_PROVIDER_URL),
+ chain: celo, // Use Celo chain configuration
+ });
+ ```
+
+2. **Adapt `sendETH()` to `sendCELO()`:** The `@goat-sdk/wallet-evm` might have a function specifically for sending CELO. Check the `@goat-sdk` documentation for `sendCELO()`. If it exists, replace `sendETH()` with `sendCELO()` in the `plugins` array:
+
+ ```javascript
+ plugins: [
+ sendCELO(), // Enable CELO transfers (if available in @goat-sdk)
+ erc20({ tokens: [USDC, PEPE] }), // ERC20 token operations - Review tokens for Celo
+ // ...
+ ];
+ ```
+
+ If `sendCELO()` is not directly available in `@goat-sdk/wallet-evm`, it's likely that `sendETH()` is designed to be chain-aware and will send the native token of the configured chain (`celo` in this case). In that case, you might not need to change `sendETH()`. **Test sending CELO after setup to confirm if `sendETH()` works for CELO or if you need to find an alternative.** If `sendETH()` does not work for CELO, you might need to create a custom tool using `viem`'s `sendTransaction` function to send CELO directly.
+
+3. **Review ERC20 Tokens for Celo:** `USDC` and `PEPE` might not be ideal for Celo. Research popular ERC20 tokens on Celo Alfajores Testnet or Celo Mainnet (e.g., `cUSD`, `cEUR`, `USDT`, `DAI` on Celo). Update the `erc20` plugin configuration with relevant tokens:
+
+ ```javascript
+ erc20({ tokens: [cUSD, cEUR, USDT] }), // Example: Use cUSD, cEUR, USDT if relevant on Celo
+ ```
+
+ You might need to define or import configurations for `cUSD`, `cEUR`, `USDT` similar to `USDC` and `PEPE`, potentially using their token contract addresses on Celo. For a more generic approach, you can remove the `tokens` array to allow the agent to handle any ERC20 token specified by symbol or address in the prompt.
+
+**4. Usage Instructions:**
+
+1. **Run the Interactive CLI:**
+
+ From the `examples/by-use-case/evm-mint-nft` directory (or your chosen directory), run:
+
+ ```bash
+ pnpm ts-node index.ts
+ ```
+
+2. **Chat with the Agent for Token Sending:**
+
+ Interact with the agent using natural language prompts to send tokens. Here are example prompts:
+
+ - **Send CELO:**
+ - `"Send 1 CELO to 0xRecipientAddressHere"` (Replace `0xRecipientAddressHere` with a Celo address)
+ - `"Transfer 0.5 CELO to my friend at 0xFriendAddress"`
+ - **Send ERC20 Tokens (e.g., cUSD, cEUR, USDT - adjust based on your configuration):**
+ - `"Send 10 cUSD to 0xRecipientAddress"` (Assuming `cUSD` is configured)
+ - `"Transfer 5 EURC to address 0xAnotherAddress"` (Assuming `cEUR` is configured)
+ - `"Send 2 USDT to 0xYetAnotherAddress"` (Assuming `USDT` is configured)
+
+**Example Interaction:**
+
+```
+Enter your prompt (or "exit" to quit): Send 0.1 CELO to 0xRecipientAddressHere
+-------------------
+TOOLS CALLED
+-------------------
+// Output of tool calls will be logged here (from onStepFinish callback) - will show details of the sendETH/sendCELO tool execution.
+-------------------
+RESPONSE
+-------------------
+// AI agent's response based on the prompt and tool execution - will confirm the token sending action or indicate success/failure.
+-------------------
+Enter your prompt (or "exit" to quit): exit
+```
+
+### Conclusion
+
+This tutorial has guided you through building an AI-powered agent capable of sending tokens on the Celo blockchain. By adapting the provided code, configuring for Celo, and utilizing the `@goat-sdk/wallet-evm` and `@goat-sdk/plugin-erc20` tools, you can create an interactive agent that can understand natural language prompts to send both native CELO and ERC20 tokens. Remember to test thoroughly on the Celo Alfajores Testnet before using on Mainnet and always handle private keys securely. Explore the `@goat-sdk` documentation to understand more advanced configurations and error handling for your token sending agent on Celo!
+
diff --git a/docs/build/build-with-ai/build-with-goat/token-swap-agent.md b/docs/build/build-with-ai/build-with-goat/token-swap-agent.md
new file mode 100644
index 0000000000..7533977cb4
--- /dev/null
+++ b/docs/build/build-with-ai/build-with-goat/token-swap-agent.md
@@ -0,0 +1,233 @@
+# Building an AI-Powered Token Swap Agent on Celo Using GOAT SDK
+
+This article provides a detailed guide on how to build an AI-powered token swap agent on the Celo blockchain using GOAT SDK. You'll learn how to create an interactive agent capable of performing token swaps through natural language prompts.
+
+## Understanding GOAT SDK for Token Swapping
+
+GOAT SDK provides tools to simplify on-chain interactions for AI agents. This example demonstrates how to use GOAT to swap ERC-20 tokens on Celo. You can use this approach with any EVM-compatible blockchain by simply changing the chain configuration and RPC URL.
+
+Let's examine the code step-by-step:
+
+### 1. Importing Libraries
+
+```javascript
+import readline from "node:readline";
+import { openai } from "@ai-sdk/openai";
+import { generateText } from "ai";
+import { http } from "viem";
+import { createWalletClient } from "viem";
+import { privateKeyToAccount } from "viem/accounts";
+import { celo } from "viem/chains"; // Using Celo chain
+import { getOnChainTools } from "@goat-sdk/adapter-vercel-ai";
+import { cUSD, CELO, erc20 } from "@goat-sdk/plugin-erc20"; // Celo tokens
+import { uniswap } from "@goat-sdk/plugin-uniswap";
+import { sendETH } from "@goat-sdk/wallet-evm";
+import { viem } from "@goat-sdk/wallet-viem";
+require("dotenv").config();
+```
+
+#### Library Descriptions:
+
+- **readline**: This Node.js module is used to create an interactive command-line interface, allowing the user to input prompts and interact with the agent.
+- **@ai-sdk/openai and ai**: These libraries facilitate the integration with OpenAI's models (like gpt-4o-mini) to generate text responses and process natural language prompts.
+- **viem**: A popular Javascript library for interacting with Ethereum-compatible blockchains, including Celo.
+- **http, createWalletClient, privateKeyToAccount**: These are viem modules used to create a wallet client for blockchain interactions.
+- **celo**: This imports the chain configuration for the Celo blockchain.
+- **@goat-sdk**: This SDK provides tools to simplify on-chain interactions for AI agents.
+- **getOnChainTools**: A function to bundle various on-chain tools for the agent.
+- **@goat-sdk/plugin-erc20, erc20, cUSD, CELO**: Modules for handling ERC20 tokens on Celo.
+- **@goat-sdk/plugin-uniswap, uniswap**: Modules for interacting with decentralized exchanges.
+- **@goat-sdk/wallet-evm, viem**: Wallet adapters to connect viem wallet client with @goat-sdk tools.
+- **dotenv**: This library loads environment variables from a .env file.
+
+### 2. Wallet Client Creation
+
+```javascript
+// 1. Create a wallet client
+const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
+
+const walletClient = createWalletClient({
+ account: account,
+ transport: http(process.env.RPC_PROVIDER_URL),
+ chain: celo, // Using Celo chain configuration
+});
+```
+
+This section creates a viem wallet client:
+
+- It retrieves the private key from the `WALLET_PRIVATE_KEY` environment variable.
+- `privateKeyToAccount` converts the private key into a viem account object.
+- `createWalletClient` initializes a wallet client connected to the Celo blockchain using the RPC URL from the `RPC_PROVIDER_URL` environment variable.
+
+### 3. Setting Up On-Chain Tools for Token Swapping
+
+```javascript
+// 2. Get your onchain tools for your wallet
+const tools = await getOnChainTools({
+ wallet: viem(walletClient),
+ plugins: [
+ sendETH(), // Enable CELO transfers (native token)
+ erc20({ tokens: [cUSD, CELO] }), // Enable Celo token operations
+ uniswap({
+ baseUrl: process.env.UNISWAP_BASE_URL as string,
+ apiKey: process.env.UNISWAP_API_KEY as string,
+ }),
+ ],
+});
+```
+
+`getOnChainTools` is used to assemble the tools the AI agent can use for token swapping:
+
+- `wallet: viem(walletClient)`: Provides the viem wallet client to the toolset.
+- `plugins`: An array of plugins that extend the agent's capabilities:
+ - `sendETH()`: Enables sending native CELO (although named ETH in the function, it handles the native token).
+ - `erc20({ tokens: [cUSD, CELO] })`: Enables ERC20 token operations for Celo-specific tokens.
+ - `uniswap(...)`: Enables interaction with Uniswap, configured with a baseUrl and apiKey from environment variables.
+
+### 4. Command Line Interface and AI Interaction Loop
+
+```javascript
+// 3. Create a readline interface to interact with the agent
+const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+});
+
+while (true) {
+ const prompt =
+ (await new Promise()) <
+ string >
+ ((resolve) => {
+ rl.question('Enter your prompt (or "exit" to quit): ', resolve);
+ });
+
+ if (prompt === "exit") {
+ rl.close();
+ break;
+ }
+
+ console.log("\n-------------------\n");
+ console.log("TOOLS CALLED");
+ console.log("\n-------------------\n");
+ try {
+ const result = await generateText({
+ model: openai("gpt-4o-mini"),
+ tools: tools,
+ maxSteps: 10, // Maximum number of tool invocations per request
+ prompt: prompt,
+ onStepFinish: (event) => {
+ console.log(event.toolResults);
+ },
+ });
+
+ console.log("\n-------------------\n");
+ console.log("RESPONSE");
+ console.log("\n-------------------\n");
+ console.log(result.text);
+ } catch (error) {
+ console.error(error);
+ }
+ console.log("\n-------------------\n");
+}
+```
+
+This sets up the interactive loop where users can input natural language prompts to swap tokens:
+
+- The agent accepts commands like "Swap cUSD for CELO" or "Check my token balance"
+- `generateText()` processes these commands through the AI model (gpt-4o-mini)
+- The AI determines which tools to call to fulfill the request
+- Results are returned in natural language
+
+## Setting Up Your Celo Token Swap Agent
+
+Follow these steps to set up your own token swap agent on Celo:
+
+### 1. Clone the Repository
+
+```bash
+git clone https://github.com/goat-sdk/goat.git && cd goat
+```
+
+### 2. Install and Build Dependencies
+
+```bash
+cd typescript
+pnpm install
+pnpm build
+```
+
+### 3. Navigate to the Example Directory
+
+```bash
+cd examples/by-use-case/evm-swap-tokens
+```
+
+### 4. Configure Environment Variables
+
+Create a `.env` file with your credentials:
+
+```bash
+cp .env.template .env
+```
+
+Edit the `.env` file to include:
+
+```plaintext
+OPENAI_API_KEY=your_openai_api_key
+WALLET_PRIVATE_KEY=your_wallet_private_key
+RPC_PROVIDER_URL=https://forno.celo.org # Celo Mainnet
+# or use https://alfajores-forno.celo-testnet.org for Testnet
+UNISWAP_BASE_URL=provided_value # Will be populated from template
+UNISWAP_API_KEY=provided_value # Will be populated from template
+```
+
+For production use, you can get your own Uniswap API key from [Uniswap Hub](https://www.uniswap.org/developers).
+
+### 5. Run the Interactive CLI
+
+```bash
+pnpm ts-node index.ts
+```
+
+## Using the Token Swap Agent on Celo
+
+Once your agent is running, you can interact with it using natural language. Here are some examples specifically for Celo tokens:
+
+```
+Swap cUSD for CELO
+Swap CELO for cUSD
+Check my token balance
+What's the current exchange rate between cUSD and CELO?
+```
+
+The agent will interpret your commands, call the appropriate tools, and execute the token swaps on your behalf.
+
+## Production Considerations for Token Swap Agents
+
+When deploying token swap agents in production environments, consider using smart wallets to:
+
+### Enhance Security with Programmable Permissions
+
+- Limit fund amounts for transactions
+- Restrict contract interactions to trusted protocols
+- Define required signatures for high-value transactions
+
+### Maintain Regulatory Compliance with Non-Custodial Wallets
+
+- Ensure agent platforms never have access to users' wallets
+- Avoid money transmitter license requirements
+- Improve user trust and control
+
+### Celo-Specific Considerations
+
+When implementing token swap functionality on Celo, keep these additional considerations in mind:
+
+- **Gas Fees**: Celo uses CELO as gas for transactions, so ensure your wallet has sufficient CELO.
+- **Liquidity Sources**: Consider using Celo-specific DEXes like Ubeswap or Uniswap.
+- **Stable Tokens**: Celo offers several stable tokens (cUSD, cEUR, cREAL) that might be useful for your swap use cases.
+
+## Conclusion
+
+By following this guide, you've learned how to create an AI-powered token swap agent on Celo using GOAT SDK. This agent can understand natural language commands and execute token swaps on your behalf, providing a seamless bridge between AI and blockchain functionality.
+
+As Celo continues to grow as an ecosystem, these types of AI agents can significantly improve user experience by abstracting away the complexities of interacting with DeFi protocols and token swaps, making blockchain technology more accessible to everyone.
diff --git a/docs/build/build-with-ai/examples/ai-memecoins.md b/docs/build/build-with-ai/examples/ai-memecoins.md
new file mode 100644
index 0000000000..8e7d422b22
--- /dev/null
+++ b/docs/build/build-with-ai/examples/ai-memecoins.md
@@ -0,0 +1,120 @@
+---
+title: Launching Tokens on Celo using Gaia AI Agent Framework
+---
+
+## Prerequisites
+
+- Node (v20 or higher)
+- A wallet with some test tokens (more on this later)
+
+## Create a Wallet and get your Gaia API Keys
+
+1. Visit the [Gaia Homepage](https://www.gaianet.ai/) and click **`Launch App`**.
+2. Click **`Connect`**, then install the [MetaMask](https://metamask.io/download/) extension.
+3. Once installed, create your wallet and securely store your recovery keys.
+4. Finally, navigate to [Gaia API Keys](https://www.gaianet.ai/setting/gaia-api-keys) to generate your API keys.
+
+## Create you Celo Private Key
+
+1. Install the [Celo CLI](npm install -g @celo/celocli)
+2. Make sure you're working on Alfajores network
+```
+celocli config:set --node https://alfajores-forno.celo-testnet.org/
+```
+3. Create an account and store it well formatted in an .env file
+```
+celocli account:new | sed -E 's/: (.+)/="\1"/g' | grep '=' > .env`
+source .env
+```
+4. Copy the account address to your clipboard
+```
+echo $accountAddress | pbcopy
+```
+5. Head to the faucet to get some money and paste your account address there
+```
+open https://faucet.celo.org
+```
+6. Verify you got money successfully
+```
+celocli account:balance $accountAddress
+```
+7. Register your account
+```
+celocli account:register --from $accountAddress -k $privateKey
+```
+
+If you open your **`.env`** file, you will find your **`Celo private key`**
+
+## Clone the Celo Meme Token Generator
+
+1. Clone this repository
+```
+git clone https://github.com/harishkotra/celo-token-agent
+cd celo-token-agent
+```
+2. Install dependencies
+```
+npm install
+```
+3. Create a .env file:
+```
+PRIVATE_KEY=your_celo_private_key
+GAIA_API_KEY=your_gaia_api_keys
+```
+4. Compile the contract
+```
+npx hardhat compile
+```
+5. Deploy your token
+```
+node deploy.js
+```
+
+The script will
+
+1. Generate a token name
+2. Check your balance
+3. Deploy the contract
+4. Provide you with the contract address and transaction details
+
+## Understanding the Code
+
+The project uses three main components
+
+1. Token Generation **`(tokenGenerator.js)`**
+ - Generates creative token names
+ - Uses AI with a fallback to random generation
+ - Configures initial token supply
+2. Contract Deployment **`(tokenDeployer.sol)`**
+ - Uses viem to interact with Celo
+ - Handles gas estimation and transaction monitoring
+ - Provides deployment status updates
+3. Smart Contract **`(tokenDeployer.js)`**
+ - Standard ERC20 implementation
+ - Built with OpenZeppelin for security
+ - Deployable to Celo's Alfajores testnet
+
+## Example response
+
+```
+Generated fallback token: { name: 'Mega Gem', symbol: 'MG' }
+Reading artifacts from: /Users/blag/Documents/GitHub/celo-token-agent/artifacts/contracts/MemeToken.sol/MemeToken.json
+Deploying from account: 0x5A96d23F76440C099F22327D1324786f6abe459A
+Account balance:
+A-CELO: 1.08303052 A-CELO
+Sending deployment transaction...
+Transaction sent! Hash: 0x035457c46ef5118db065b0a2ccc6bae1ce62f1c8ef688bbaf2d2596a6dd0fbd8
+Deployment confirmed in block: 38170881
+Token deployed successfully!
+{
+ name: 'Mega Gem',
+ symbol: 'MG',
+ address: '0x5e473F7650ABD9B6A5b28b2B0B64ebBd1ef01D94',
+ transactionHash: '0x035457c46ef5118db065b0a2ccc6bae1ce62f1c8ef688bbaf2d2596a6dd0fbd8',
+ explorer: 'https://alfajores.celoscan.io/address/0x5e473F7650ABD9B6A5b28b2B0B64ebBd1ef01D94'
+}
+```
+
+## Support
+
+Join the [Celo Discord server](https://chat.celo.org). Reach out in the #general-dev channel with your questions and feedback.
\ No newline at end of file
diff --git a/docs/build/build-with-ai/examples/building_with_goat.md b/docs/build/build-with-ai/examples/building_with_goat.md
new file mode 100644
index 0000000000..c0f52692c5
--- /dev/null
+++ b/docs/build/build-with-ai/examples/building_with_goat.md
@@ -0,0 +1,296 @@
+---
+title: Building a conversational AI agent for Celo transactions with GOAT
+---
+
+## Introduction
+
+This tutorial guides you through creating a Node.js application using TypeScript that leverages the GOAT AI agent framework to interact with the Celo blockchain. GOAT allows you to use natural language prompts to perform on-chain actions, such as transferring tokens and checking allowances. We'll cover setup, configuration, code explanation, and common usage scenarios.
+
+## Prerequisites
+
+Before you begin, ensure you have the following:
+
+- **Node.js (v16 or higher) and npm (or yarn) installed.** You can download Node.js from [https://nodejs.org/](https://nodejs.org/).
+- **A Celo wallet with a private key.** You'll need a wallet with some CELO and cUSD for testing. _Never commit your private key to version control._
+- **An RPC provider URL for the Celo network.** We'll use [Forno](https://forno.celo.org/) in this example, which is a public provider. For production, consider using a dedicated RPC provider like [Ankr](https://www.ankr.com/), [QuickNode](https://www.quicknode.com/), or others.
+- **An OpenAI API key.** GOAT utilizes OpenAI's language models. Obtain an API key from [https://platform.openai.com/](https://platform.openai.com/).
+- **A code editor or IDE.** VS Code, Sublime Text, or any other code editor will work.
+
+## Project Setup
+
+1. **Create a new project directory:**
+
+ ```bash
+ mkdir goat-celo-tutorial
+ cd goat-celo-tutorial
+ ```
+
+2. **Initialize a Node.js project:**
+
+ ```bash
+ npm init -y
+ ```
+
+3. **Install dependencies:**
+
+ ```bash
+ npm install typescript @ai-sdk/openai @goat-sdk/adapter-vercel-ai @goat-sdk/plugin-erc20 @goat-sdk/wallet-viem ai dotenv viem @types/node
+ ```
+
+ - `typescript`: For using TypeScript.
+ - `@ai-sdk/openai`: The OpenAI adapter for AI-SDK.
+ - `@goat-sdk/adapter-vercel-ai`: GOAT's adapter for using AI-SDK.
+ - `@goat-sdk/plugin-erc20`: GOAT plugin for interacting with ERC-20 tokens.
+ - `@goat-sdk/wallet-viem`: GOAT's wallet integration using Viem.
+ - `ai`: The core AI-SDK library.
+ - `dotenv`: For loading environment variables from a `.env` file.
+ - `viem`: A lightweight Ethereum library for interacting with the blockchain.
+ - `@types/node`: TypeScript definitions for Node.js.
+
+4. **Initialize TypeScript configuration:**
+
+ ```bash
+ npx tsc --init
+ ```
+
+5. **Configure `tsconfig.json`:**
+
+ Open `tsconfig.json` and update it with the following settings (adjusting paths as needed):
+
+ ```json
+ {
+ "compilerOptions": {
+ "target": "ES2020", // Or a later version if supported by your environment
+ "module": "commonjs",
+ "lib": ["ESNext"],
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "skipLibCheck": true,
+ "outDir": "./dist", // Output directory for compiled JavaScript
+ "rootDir": "./src", // Source directory for TypeScript files
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "sourceMap": true
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules"]
+ }
+ ```
+
+ - `outDir`: Specifies where the compiled JavaScript files will be placed.
+ - `rootDir`: Specifies the root directory for your TypeScript source files.
+ - `sourceMap`: Enables source map generation, helpful for debugging.
+ - `resolveJsonModule`: allows importing JSON files
+ - `moduleResolution`: Specifies how modules are resolved. "node" is standard for Node.js projects.
+
+## Project Structure
+
+Organize your project files as follows:
+
+```text
+goat-celo-tutorial/
+├── src/
+│ ├── index.ts <- Main application file
+│ └── tokens.ts <- Definitions for Celo tokens
+├── .env <- Environment variables (KEEP THIS PRIVATE)
+├── package.json
+├── package-lock.json
+└── tsconfig.json
+```
+
+## Code Implementation
+
+### 1. `src/tokens.ts`:
+
+This file defines the Celo tokens we'll be interacting with (CELO, cUSD, and USDC).
+
+```typescript
+// src/tokens.ts
+import { Token } from "@goat-sdk/plugin-erc20";
+
+export const tokens: Token[] = [
+ {
+ decimals: 6,
+ symbol: "USDC",
+ name: "USD Coin",
+ chains: {
+ "42220": {
+ contractAddress: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
+ },
+ },
+ },
+ {
+ decimals: 18,
+ symbol: "CELO",
+ name: "Celo",
+ chains: {
+ "42220": {
+ contractAddress: "0x471EcE3750Da237f93B8E339c536989b8978a438",
+ },
+ },
+ },
+ {
+ decimals: 18,
+ symbol: "cUSD",
+ name: "Celo Dollar",
+ chains: {
+ "42220": {
+ contractAddress: "0x765de816845861e75a25fca122bb6898b8b1282a",
+ },
+ },
+ },
+];
+```
+
+### 2. `src/index.ts`:
+
+This is the main application file where we set up GOAT, the wallet, and the interactive prompt.
+
+```typescript
+// src/index.ts
+import { openai } from "@ai-sdk/openai";
+import { getOnChainTools } from "@goat-sdk/adapter-vercel-ai";
+import { erc20 } from "@goat-sdk/plugin-erc20";
+import { viem } from "@goat-sdk/wallet-viem";
+import { generateText } from "ai";
+import dotenv from "dotenv";
+import readline from "node:readline";
+import { createWalletClient, http } from "viem";
+import { privateKeyToAccount } from "viem/accounts";
+import { celo } from "viem/chains";
+import { tokens } from "./tokens";
+
+dotenv.config();
+
+// --- Wallet Setup ---
+const account = privateKeyToAccount(
+ process.env.WALLET_PRIVATE_KEY as `0x${string}`,
+);
+
+const walletClient = createWalletClient({
+ account: account,
+ transport: http(process.env.RPC_PROVIDER_URL),
+ chain: celo,
+});
+
+(async () => {
+ // --- GOAT Setup ---
+ const tools = await getOnChainTools({
+ wallet: viem(walletClient),
+ plugins: [erc20({ tokens })],
+ });
+
+ // --- Interactive Prompt ---
+ const rl = readline.createInterface({
+ input: process.stdin,
+ output: process.stdout,
+ });
+
+ while (true) {
+ const prompt = await new Promise((resolve) => {
+ rl.question('Enter your prompt (or "exit" to quit): ', resolve);
+ });
+
+ if (prompt === "exit") {
+ rl.close();
+ break;
+ }
+
+ try {
+ const result = await generateText({
+ model: openai("gpt-4o"), // Use "gpt-4o" for better performance, or another model
+ tools: tools,
+ maxSteps: 10, // Maximum number of tool invocations per request
+ prompt: prompt,
+ onStepFinish: (event) => {
+ console.log(event.toolResults); // Log the results of each tool invocation
+ },
+ });
+ console.log(result.text);
+ } catch (error) {
+ console.error("An error occurred:", error); // Improved error handling
+ }
+ console.log("\n-------------------\n");
+ }
+})();
+```
+
+### 3. `.env`
+
+Create a `.env` file in the root of your project and add the following, replacing the placeholders with your actual values:
+
+```bash
+WALLET_PRIVATE_KEY=your_wallet_private_key
+RPC_PROVIDER_URL=https://forno.celo.org # Or your preferred provider
+OPENAI_API_KEY=your_openai_api_key
+```
+
+Important Security Note: Never commit your `.env` file or your private key to version control (e.g., Git). Add `.env` to your `.gitignore` file.
+
+## Running the Application
+
+Compile the TypeScript code:
+
+```bash
+pnpm dev
+```
+
+The application will start, and you'll see the prompt: `Enter your prompt (or "exit" to quit):`. You can now enter natural language commands.
+
+## Example Prompts and Explanations
+
+Here are some example prompts you can use and explanations of what's happening:
+
+- "Transfer 1 cUSD to 0x13F6b54c5491cd4745fF4cFfaA9EfEe59E628657"
+
+ - GOAT uses the `get_address` tool (implicitly, you don't need to specify it).
+ - It then uses `get_token_info_by_symbol` to find the cUSD token details.
+ - `convert_to_base_unit` converts 1 cUSD to its base unit (1 \* 10^18).
+ - Finally, the `transfer` tool is called with the token address, recipient, and amount.
+ - The transaction hash is returned.
+
+- "What is my allowance on USDC?"
+
+ - `get_address` is called to get the user's address.
+ - `get_token_info_by_symbol` finds the USDC token.
+ - `get_chain` is used to get the current chain
+ - `get_token_allowance` is called to check the allowance of your address to spend USDC. The spender, in this case, is also your address, so you get 0. This is by design.
+ - The allowance amount is returned.
+
+- "Approve 0x13F6b54c5491cd4745fF4cFfaA9EfEe59E628657 to spend 10 USDC on my behalf"
+
+ - This prompt would use the `approve` tool from the ERC-20 plugin. You'd see similar steps to the transfer, but instead of transferring, it would set an allowance for the specified address to spend your USDC.
+
+- "What is my CELO balance?"
+
+ - `get_address` will be used to get the current user address.
+ - `get_token_info_by_symbol` finds the CELO token.
+ - `get_balance` is used to get the current address balance.
+ - The balance amount is returned.
+
+## Troubleshooting
+
+- `TypeError: Cannot read properties of undefined (reading 'call')` or similar errors: Double-check your `tsconfig.json` settings, particularly `module`, `target`, and `lib`. Make sure your Node.js version is compatible. Reinstall your dependencies (`rm -rf node_modules && npm install`).
+
+- `Error: Invalid ABI`: Ensure your contract addresses in `tokens.ts` are correct for the Celo network (chain ID 42220).
+
+- OpenAI API errors (e.g., 401 Unauthorized): Verify your `OPENAI_API_KEY` is correct and that your OpenAI account has sufficient credits.
+
+- Transaction failures:
+
+ - Check that your wallet has enough CELO to pay for gas.
+ - Verify your `RPC_PROVIDER_URL` is correct and functioning.
+ - If you're using a custom RPC provider, ensure it supports the necessary methods.
+
+- Type errors after installation: If you encounter persistent type errors, you can try adding `// @ts-ignore` comments above the lines causing issues as a temporary workaround. However, it's best to resolve the underlying type issues if possible. The provided code avoids this, but it's a useful debugging technique.
+
+## Conclusion
+
+This tutorial demonstrated how to build a Celo blockchain AI agent with GOAT, Node.js, and TypeScript. You've learned to set up a project, integrate a wallet, define tokens, and use natural language to execute on-chain actions. This provides a foundation for creating powerful, user-friendly Web3 applications that simplify complex blockchain interactions. Remember to prioritize security and continue exploring the possibilities!
+
+## Next Steps
+
+- Explore more examples and documentation for GOAT and the ERC-20 plugin and ERC-721 plugin.
+- Build a more complex application using GOAT and other Celo tools.
+- Contribute to the GOAT project and provide feedback.
diff --git a/docs/build/build-with-ai/overview.mdx b/docs/build/build-with-ai/overview.mdx
new file mode 100644
index 0000000000..cd7827e94f
--- /dev/null
+++ b/docs/build/build-with-ai/overview.mdx
@@ -0,0 +1,51 @@
+# Getting Started with AI Agents
+
+## Table of Contents
+- [Introduction](#introduction)
+- [Why AI Agents?](#why-ai-agent)
+- [What is an AI Agent?](#what-is-an-ai-agent)
+- [Types of AI Agents](#types-of-ai-agents)
+
+## Introduction {#introduction}
+
+Welcome to the world of AI Agents. This guide provides an overview of AI agents, the tools and infrastructure needed to build them, and examples to help get you started. Whether you’re starting with simple automation or building complex systems, this guide will help you navigate the ecosystem.
+
+## Why AI Agents? {#why-ai-agent}
+
+AI Agents are making blockchain interactions more accessible and user friendly.
+
+| Feature | Without AI Agents ❌ | With AI Agents ✅ |
+|---------|----------------------|-------------------|
+| **Easier Onchain Transactions** | Users manually open wallets, find bridges, navigate menus, and execute swaps. | Users prompt AI Agents to swap tokens automatically. |
+| **24/7 Participation in Global Markets** | Users manually track DeFi yields and farming opportunities. | AI Agents operate nonstop, detect high-yield options, and reallocate funds. |
+| **Fewer Scams and Errors** | Users are vulnerable to phishing attacks and human errors. | AI Agents detect scams, block malicious contracts, and prevent errors. |
+
+## What is an AI Agent? {#what-is-an-ai-agent}
+
+AI Agents are software systems that perceive environments, make decisions, and take actions to achieve specific goals. Shaw (creator of Eliza/ai16z) describes them as "a new kind of website" offering interfaces that interact with APIs for solving complex tasks more effectively than traditional interfaces.
+
+**Key Characteristics:**
+- Goal-oriented behavior
+- Environment perception and interaction
+- Decision-making capabilities
+- Ability to learn and adapt (in advanced implementations)
+
+AI agents are particularly relevant to blockchain builders, as they simplify complex tasks like managing smart contracts, automating transactions, and interacting with decentralized protocols. They bridge the gap between blockchain infrastructure and intuitive user experiences.
+
+## Types of AI Agents {#types-of-ai-agents}
+
+**1. Basic AI Agents**
+- Simple tasks like chatbots with decision trees.
+- Examples: Command processors, basic I/O automation.
+
+**2. Functional Agents**
+- Specialized agents with defined purposes.
+- Examples: Code review agents, research assistants, or domain-specific solvers.
+
+**3. Autonomous Agents**
+- Operate with minimal human intervention.
+- Capabilities: Multi-step reasoning, task automation, self-improvement.
+
+**4. Multi-Agent Systems**
+- Collaborative systems where agents work together.
+- Examples: Collective problem-solving, distributed decision-making, or agent-to-agent communication.
diff --git a/docs/build/build-with-ai/resources.md b/docs/build/build-with-ai/resources.md
new file mode 100644
index 0000000000..9d2e0d9812
--- /dev/null
+++ b/docs/build/build-with-ai/resources.md
@@ -0,0 +1,103 @@
+# Resources for Building AI Agents on Celo
+
+Resources for learning how to craft intelligent, blockchain-powered agents on Celo.
+
+---
+
+# Learning Resources
+
+### 📝 Tutorials
+
+- [Machine Learning](https://www.coursera.org/specializations/machine-learning-introduction?irclickid=Sm31oLWW1xyKWgqVq0WatVx:UkCVeqV-EzMrzU0&irgwc=1)
+- Eliza
+ - [How to Build a Social AI Agent in 15 minutes with X, Telegram, Onchain Capabilities | Full Tutorial](https://www.youtube.com/watch?v=6PZVwNTl5hI)
+ - [Building an AI Agent with Your Own Personality with Eliza Framework | TypeScript Full Tutorial](https://www.youtube.com/watch?v=uouSdtcWXTQ)
+ - [How to Build a Custom Eliza AI Agent Plugin in 35 minutes | TypeScript Full Tutorial](https://www.youtube.com/watch?v=25FxjscBHuo)
+ - [Eliza - AI Agent Dev School](https://www.youtube.com/playlist?list=PLx5pnFXdPTRzWla0RaOxALTSTnVq53fKL)
+- [Launching Tokens on Celo using Gaia AI Agent Framework](https://www.youtube.com/watch?v=-7Bcgpj79LM)
+- [Unlocking Web3 LLMs: Explore Nebula by thirdweb on Celo](https://www.youtube.com/watch?v=FeubfHwfJcM)
+
+### 🎓 Courses
+
+- [Web3 AI Agents Guide](https://www.aiagenttoolkit.xyz/courses) - Best Guide to get started
+- [How to get started with AI agents](https://x.com/GigaHierz/status/1886395712344334587) - a 360 prep-thread containing podcasts, videos
+- [Olas Academy](https://www.youtube.com/playlist?list=PLXztsZv11CTfXiQK9OJhMwBkfgf4ETZkl)
+
+### 🏆 Hackathons
+
+- [Safe Agentathon](https://safe.global/ai)
+- [ETH Global Agentic Hackathon](https://ethglobal.com/events/agents)
+- [Proof of Ship](https://celo.lemonade.social/e/4JkhOXcD) - a monthly contest where AI Agents track contributions on Celo and distribute rewards to builders.
+
+### 🤖 Famous Agents
+
+- Luna - Virtuals
+ - first agent to pay another agent for doing work
+- [aixbt](https://x.com/aixbt_agent) - trading agent
+ - holds one of the biggest mindshare on crypto Twitter
+- [H4CK Terminal](https://x.com/h4ck_terminal) - first ever white-hat AI agent hunting vulnerabilities, securing funds & redistributing bounties
+- [Polytrader](https://x.com/polytraderAI)
+- [artto](https://x.com/artto_ai): Agent that collects NFTs
+- [Soleng](https://x.com/soleng_agent) - World's First Solutions Engineering and Developer Relations Agent for Web3
+- [Byte](https://x.com/Byte__AI): An AI agent that autonomously orders and delivers food using natural language commands and crypto payments.
+- [opencordai](https://x.com/opencordai): A 24/7 AI agent for social media lead generation, identifying customers and engaging with them to drive sales.
+- [Infinite Regen](https://x.com/0xInfiniteregen): A platform for creating AI agents trained on Web3 insights to design mechanisms for funding public goods.
+
+
+For a full comprehensive list, checkout the [AI Agent Demo Days](https://x.com/GigaHierz/status/1881401460082274395) hosted by Nader Dabit.
+
+### 💡 Project Ideas
+- [25+ AI Agent Product Ideas](https://x.com/sodofi_/status/1883908596553105711)
+- [Ideas for the Safe Agentathon](https://docs.google.com/document/d/1HSBfxkb5AWPZo6YDefDVjBrHVl-Nh4DQVElyLhy4y7A/edit?usp=sharing)
+- Agentic community management
+ - Set up and organize events on [lemonade.social](http://lemonade.social) as mentioned in this [podcast](https://open.spotify.com/episode/40XcJxe9RfwtPIOq3KHy7s?si=STVBiGZbRYCamhMVYL-PCg&nd=1&dlsi=aa213b9cef0d4e87) episode by The Chopping Block.
+- Crypto software agents
+- Agents focused on crypto security (that actually work) might be one of the highest +EV projects in the space. 24/7 security, patching ability, monitoring systems, etc. would totally change the narrative on how crypto is perceived.
+- Agent verifiability
+ - identity
+ - data
+ - models
+
+### 🛠️ Technical Resources
+
+- Starter Kit (including Lit + Gaia): https://github.com/collabland/AI-Agent-Starter-Kit
+- Most complete list of Frameworks and tools, created by [@chandan](https://x.com/chandan1_)
+ - [AIAgentToolkit.xyz](http://aiagenttoolkit.xyz/)
+- Celo - [Getting Started with AI Agents](https://docs.celo.org/build/build-with-ai/overview)
+- Safe Agentathon Partners:
+ - [Brahma ConsoleKit: Safe Agentathon Guide](https://www.notion.so/18ea53ecb04c80649c4be0657c031959?pvs=21)
+ - Automating DeFi across chains: https://www.enso.build/
+- [Mode Network Hackathon Starter Kit](https://www.notion.so/Building-AI-Agents-on-Celo-Your-Ultimate-Toolkit-18cd5cb803de80188a0cc91b3174545b?pvs=21)
+- [The AI Model Layer of Crypto](https://cryptopond.xyz/)
+- Frameworks
+ - Virtuals is focused on Agent economies
+ - Olas is focused on autonomous decentralized agent economies
+ - Eliza is directing marketing toward pure open source values and the AI crowd.
+ - ZerePy is the most accessible framework for people looking to get started in Python
+- TEEs (trusted execution environments)
+- SDK & APIs
+ - GOAT
+
+
+### 📖 Articles
+
+- [AI x Crypto Models](https://doc.cryptopond.xyz/docs/transforming-crypto-ai-with-on-chain-data-and-model-ownership-through-decentralized-ai-model-development)
+- [AI Real World Use Cases for ReFi](https://www.daviddao.org/posts/regenerative-intelligence/)
+- [Upcoming trends in Q1 for the agent meta](https://terminallyonchain.xyz/q1trends)
+- [Allora Powers Virtuals](https://www.allora.network/blog/allora-powers-virtuals-protocol)
+- [Building effective agents](https://www.anthropic.com/research/building-effective-agents)
+
+### 🎙️ Podcasts
+
+- Learn about the history of the first viral AI Agent with a token: The Truth Terminal
+ - [Bankless: How Crypto Al Agents Will Take Over the World | Ejaaz Ahamadeen](https://open.spotify.com/episode/5jVhVuzb5HNZdZz11b1cc1?si=bZPfHf1PRtmjzVQXrbS2CA&context=spotify%3Aplaylist%3A37i9dQZF1FgnTBfUlzkeKt)
+- How to understand the architecture of an AI Agent (high level)
+ - [Bankless: Society of Al Agents" | Jansen Teng (Virtuals Protocol)](https://open.spotify.com/episode/4kMubklNG3xBMYR0mWijNy?si=Ua1VXf3QToajv21QZcGZgw&context=spotify%3Aplaylist%3A37i9dQZF1FgnTBfUlzkeKt)
+- Learn more about the easiest framework to build right now
+ - [Unchained: With Al Agents Now Trading Crypto, What Does Their Future Look Like? - Ep. 758](https://open.spotify.com/episode/5UDhqnOziBkcfaQ55ZJ7Bg?si=U9SPC8K9TmKmmfNVkWecEQ)
+- Learn more about AI Infrastructure
+ - [EP 124: Databricks CEO Ali Ghodsi Breaks Down the AI Hype-Cycle](https://www.notion.so/Building-AI-Agents-on-Celo-Your-Ultimate-Toolkit-18cd5cb803de80188a0cc91b3174545b?pvs=21)
+- Predictions for the industry
+ - [AI + a16z](https://podcasts.apple.com/in/podcast/ai-a16z/id1740178076)
+
+Have another resource you want to add? Click the ['Edit this page'](https://github.com/celo-org/docs/edit/main/docs/build/build-with-ai/usecases.md) button below to submit a PR.
diff --git a/docs/build/build-with-ai/tools.md b/docs/build/build-with-ai/tools.md
new file mode 100644
index 0000000000..820de76e34
--- /dev/null
+++ b/docs/build/build-with-ai/tools.md
@@ -0,0 +1,107 @@
+# AI Agents Tools & Infrastructure
+
+This article provides an overview of essential tools for building AI agents. Given the rapid advancements in this space, this is not an exhaustive list but rather a snapshot of tools available on Celo.
+
+## AI Agent Frameworks
+
+Frameworks define how AI agents interact, collaborate, and execute tasks. For a full list of frameworks, tools, and infrastructure, check out this [comprehensive table](https://www.aiagenttoolkit.xyz/).
+
+**On Celo:**
+- [**Olas**](https://docs.autonolas.network/open-autonomy/): Framework for autonomous economic agents in decentralized markets.
+ - [Implement MECH client into your dApp](https://www.youtube.com/watch?v=fuDteQqsf2A)
+ - [Celo Trader Agent](https://www.youtube.com/watch?v=WSB0H0dDc78&t=1740s)
+ - can do transfers (for advanced Python developers)
+- [**Gaia**](https://www.gaianet.ai/): Building intelligent ecosystems for evolving AI applications
+ - Meme Token Generator - an AI Agent that autonomously deploys tokens on Celo.
+ - [Twitter Thread](https://github.com/harishkotra/celo-token-agent) - short intro
+ - [Video Tutorial](https://www.youtube.com/watch?v=-7Bcgpj79LM)
+ - [Example Repository](https://github.com/harishkotra/celo-token-agent/)
+ - [EternalAI](https://eternalai.org/): A Decentralized Autonomous Agent protocol running AI agents on Solidity smart contracts — exactly as programmed — without censorship, interference, or downtime.
+ - [GT Protocol](https://www.gt-protocol.io/): AI Agents Builder, powered by GT Protocol AI Executive Technology, delivers customized AI agents tailored to enhance both business operations and personal daily tasks.
+ - [**ElizaOS**](https://elizaos.github.io/eliza/): TypeScript-based framework with multi-agent simulation capabilities.
+ - To build on Celo use the [EVM plugin](https://github.com/elizaOS/eliza/tree/main/packages/plugin-evm)
+ - Tutorial [coming soon].
+
+**Other:**
+- [**LangChain**](https://www.langchain.com/): Framework for LLM-powered applications.
+- [**MetaGPT**](https://github.com/geekan/MetaGPT): Multi-agent meta programming framework, mimicks organizational roles at a software company.
+
+## Launchpads
+
+No-code platforms simplify AI agent deployment, making it easier to integrate social agents with tokens.
+
+- [**Virtuals**](https://app.virtuals.io/): No-code AI Launchpad with LLP context system.
+- [**Vapor**](https://alpha.vaporware.fun/): Platform built on ai16z Eliza Framework
+
+## Essential Tools
+
+A variety of tools are available for building autonomous agents, including blockchain integration, machine learning, memory systems, simulation, monitoring, and security.
+
+For a quick start, focus on:
+- Blockchain tools for onchain operations.
+- Memory systems for learning and adapting.
+- LLMs optimized for Web3 data.
+
+When scaling, consider:
+
+- Frameworks for multi-agent systems.
+- Access controls and prompt verification.
+- Support for videos, PDFs, and research papers.
+- Effective use of LLMs, NLP, and RAG tools.
+
+## Intelligence Tools
+
+**Machine Learning Tools:**
+- **Purpose**: Training, deploying, debugging and managing ML models
+- **Examples**: LiteLLM, ModelZoo, TensorServe, GPT-Explorer
+- **Use Cases**: Pattern recognition, classification, prediction
+
+**Natural Language Processing Tools:**
+- **Purpose**: Language understanding and processing
+- **Examples**: NeuralSpace, LangFlow
+- **Use Cases**: Text analysis, grammar checking, entity recognition
+
+**Retrieval Augmented Generation Tools:**
+- **Purpose**: Combining LLMs with knowledge bases
+- **Examples**: Autonomous RAG, Agentic RAG, Local RAG Agent
+- **Use Cases**: Enhanced chatbots, documentation search, context-aware responses
+
+## Infrastructure
+
+**Blockchain Tools:**
+- **[GOAT](https://ohmygoat.dev/introduction)**: GOAT 🐐 (Great Onchain Agent Toolkit) is an open-source framework for adding blockchain capabilities like wallets and smart contracts to AI agents.
+- **[Nebula](https://portal.thirdweb.com/nebula)**: Web3 LLM by thirdweb
+ - [Tutorial](https://www.youtube.com/watch?v=FeubfHwfJcM)
+ - [Example Respository](https://github.com/cromewar/nebula-telegram-demo)
+- **[Kaito](https://www.kaito.ai/)**: Unified crypto news data.
+- **[GOAT](https://ohmygoat.dev/introduction)**: GOAT 🐐 (Great Onchain Agent Toolkit) is an open-source framework for adding blockchain capabilities like wallets and smart contracts to AI agents.
+- **[ChainGPT](https://www.chaingpt.org/)**: Is an advanced AI infrastructure that develops AI-powered technologies for the Web3, Blockchain, and Crypto space, developing solutions from Chatbots, NFT, Smart Contract Generators and AI Trading Assistants
+- [EigenLayer](https://www.eigenlayer.xyz/): Autonomous Verifiable Service (AVS) on EigenLayer is a decentralized service built on Ethereum that provides custom verification mechanisms of off-chain operations.
+- **[Nebula](https://portal.thirdweb.com/nebula)**: Web3 LLM by thirdweb
+ - [Tutorial](https://www.youtube.com/watch?v=FeubfHwfJcM)
+ - [Example Respository](https://github.com/cromewar/nebula-telegram-demo)
+- [Safe](https://safe.global/safenet): Smart Accounts for Agents
+- **[Kaito](https://www.kaito.ai/)**: Unified crypto news data.
+
+**Memory Systems:**
+- **[Mem0](https://github.com/mem0ai/mem0)**: Intelligent memory layer for AI assistants.
+- **[Eliza Agent Memory](https://github.com/elizaOS/agentmemory)**: Knowledge graphing and document search.
+- **[LLM App with Personalized Memory](https://github.com/Shubhamsaboo/awesome-llm-apps/tree/main/llm_apps_with_memory_tutorials/llm_app_personalized_memory)**: Individual user adaptation.
+- **[Mem0](https://github.com/mem0ai/mem0)**: Intelligent memory layer for AI assistants.
+- **[Eliza Agent Memory](https://github.com/elizaOS/agentmemory)**: Knowledge graphing and document search.
+- **[LLM App with Personalized Memory](https://github.com/Shubhamsaboo/awesome-llm-apps/tree/main/llm_apps_with_memory_tutorials/llm_app_personalized_memory)**: Individual user adaptation.
+
+**Security and Policy:**
+- **[Predicate](https://x.com/0xPredicate)**: Define rules for onchain interactions
+- **[Functor Network](https://www.functor.sh/)**: Policy framework for autonomous agents
+- **Access Controls**: Environmental permissions
+- **Prompt Verification**: Input validation and control
+
+**Data:**
+When working with AI agents, it's essential to train models and collect the right data. For unique character creation, ensure you have sufficient training data. Some useful tools include:
+- **[DataSphere](https://github.com/datasphere/datasphere)**: Visualizes large datasets for analysis.
+- **[JinAI's LLM-friendly Markdown Tool](https://github.com/jina-ai/serve)**: Converts websites into LLM-friendly markdown.
+- **[Masa](https://www.masa.ai/)**: The #1 real-time data network for AI Agents & Apps
+- **[Vana](https://www.vana.org/)**: The first open protocol for data sovereignty. User-owned AI through user-owned data. Growing the DataDAO ecosystem.
+- **[DataSphere](https://github.com/datasphere/datasphere)**: Visualizes large datasets for analysis.
+- **[JinAI's LLM-friendly Markdown Tool](https://github.com/jina-ai/serve)**: Converts websites into LLM-friendly markdown.
\ No newline at end of file
diff --git a/docs/build/build-with-ai/usecases.md b/docs/build/build-with-ai/usecases.md
new file mode 100644
index 0000000000..b66bf516fb
--- /dev/null
+++ b/docs/build/build-with-ai/usecases.md
@@ -0,0 +1,40 @@
+# AI Agents Examples
+
+## Use Cases
+AI Agents are transforms how people interact with onchain applications. Here's a list of 25+ use cases.
+
+
+
+Do you have an AI Agent project, tool, or hackathon you want to share? Add it to the GitHub resources list [here](https://github.com/celo-org/ai-agent-ideas).
+
+
+## Ideas to Build
+
+#### Onchain Foreign Exchange (FX) Trading with Autonomous Agents
+- Celo, known as the "Home of Stablecoins," supports several dollar-pegged stablecoins like USDT, USDC, and 13 native stablecoins tracking currencies such as the US Dollar, Euro, Brazilian Real, and Kenyan Shilling.
+- Build AI agents that facilitate seamless onchain FX trading, leveraging Celo's native stable assets and incentivized liquidity pairs on [Uniswap](https://app.uniswap.org/explore/pools/celo) (powered by [Merkl campaigns](https://merkl.angle.money/?chain=42220) and managed through Steer Protocol).
+- **Arbitrage Bots**
+ - Develop AI-driven arbitrage bots that identify and execute profitable trades across decentralized exchanges (DEXs) on Celo, optimizing for low fees and fast transaction times.
+- **Liquidity Pool (LP) Management**
+ - Create AI tools to automate LP management, ensuring optimal allocation of assets, rebalancing, and yield maximization.
+- **Merkle Rewards Optimization with Steer Protocol**
+ - Find the Merkl campaigns with the highest rewards and provide liquidity through Steer Protocol.
+
+#### Prediction Markets
+- Design AI-powered prediction markets that leverage Celo's stablecoins for low-cost, high-efficiency betting and forecasting.
+
+#### Automated Savings and Dollar-Cost Averaging (DCA)
+- Develop AI agents that help users automate savings strategies or execute DCA plans using Celo's stablecoins, making financial planning effortless.
+
+#### Automated Data Collection Payments
+- Today, 82.7% of collected biodiversity data comes from North America and Europe, leaving massive data gaps in emerging markets.
+- AI agents can automate payments for individuals and communities in Celo’s ecosystem, ensuring fair, real-time compensation for valuable data collection.
+ - See a [case study](https://www.daviddao.org/posts/regenerative-intelligence/) on how GainForest is using AI to drive regenerative finance and intelligent data economies.
+
+#### Optimized Retroactive Funding
+- The Celo ecosystem has hosted multiple retroactive funding rounds to reward top contributors for their impact.
+- AI agents can automate and optimize this process by analyzing onchain activity, GitHub contributions, and deployed contracts to fairly distribute funding.
+ - Check out [Proof-of-Ship](https://github.com/celo-org/Proof-of-Ship) for a list of projects deployed on Celo this month.
+ - Check out [EasyRetroPGF](https://easyretropgf.xyz/celo-citizen-retro/stats) for a list of all contributors who received retroactive funding on Celo last month.
+
+
diff --git a/docs/build/build-with-self.md b/docs/build/build-with-self.md
new file mode 100644
index 0000000000..863181b591
--- /dev/null
+++ b/docs/build/build-with-self.md
@@ -0,0 +1,32 @@
+---
+title: Build with Self
+description: A beginner's guide to understanding and using Self
+---
+
+By the conclusion of this guide, you will have a basic understanding of Self and how to get started with it.
+
+This document will cover:
+
+- What is Self?
+- Technical Resources
+- Opportunities for Builders
+
+## What is Self?
+
+Self is a privacy-first, open-source identity protocol that uses zero-knowledge proofs for secure identity verification.
+
+Verify your digital identity seamlessly and securely.
+
+Prove who you are. Prove where you’re from. All without sharing any private information with third party applications.
+
+## Technical Resources
+
+- [Self Website](https://self.xyz/)
+- [Self Documentation](https://docs.self.xyz/)
+- [Self Playground](https://playground.self.xyz/)
+- [Self Quickstart](https://docs.self.xyz/use-self/quickstart)
+
+## Opportunities for Builders
+
+- [ETHSF 2025](https://ethsf2025.devfolio.co/prizes?partner=Self+Protocol+by+Celo)
+- [Build with Celo - Proof of Ship](https://celoplatform.notion.site/Build-With-Celo-Proof-of-Ship-17cd5cb803de8060ba10d22a72b549f8)
diff --git a/docs/build/build-with-thirdweb/celo-nft-drop-tutorial.md b/docs/build/build-with-thirdweb/celo-nft-drop-tutorial.md
new file mode 100644
index 0000000000..625c9d9921
--- /dev/null
+++ b/docs/build/build-with-thirdweb/celo-nft-drop-tutorial.md
@@ -0,0 +1,85 @@
+---
+title: Celo NFT Drop Tutorial
+---
+
+Create and deploy your own Web3 app effortlessly with Thirdweb and Celo.
+
+---
+
+## Objectives
+
+By the end of this tutorial, you will:
+
+* Have a set of **NFT Drops**.
+* Build an **NFT gallery** with **`Thirdweb`** and **`Celo`**.
+
+## Prerequisites
+
+* Node (v20 or higher)
+* A wallet with some test tokens (more on this later)
+
+## Fund Your Wallet
+
+1. Ensure you have sufficient funds to cover the transaction fees.
+2. Visit the [Alfajores Faucet](https://faucet.celo.org/alfajores) to claim test tokens using your wallet address. ***Remember to claim only what you need.***
+
+## Create a Contract on Thirdweb
+
+1. Visit [Thirdweb](https://thirdweb.com/login) and log in or create a new account.
+2. Navigate to **`Contracts`** and click **`Deploy Contract`**.
+3. Since multiple smart contracts have already been audited, we don’t need to write them from scratch.
+4. Select **`NFT Drop`** and click **`Deploy`**.
+5. Configure your token by setting its **Name** (mandatory), **Symbol**, and optionally adding an **Image** and **Description**.
+6. In the **Deploy Options** section, choose **`Celo Alfajores`** as the Chain (if not selected by default).
+7. Click **`Deploy Now`** to finalize the process.
+8. After deployment, you’ll be redirected to the dashboard to upload your NFTs.
+9. Provide a **name**, upload an **image**, add a **description**, and define **traits** for your NFT.
+10. **Lazy Mint** your NFT.
+11. Repeat steps 9 and 10 a few times—we need at least **3 NFTs**.
+12. Copy your **`contract address`** from the NFT dashboard.
+
+## Get a Thirdweb Client ID
+
+1. Open the **Thirdweb Dashboard** and click **`Add New`** in the **Projects** section.
+2. Select **`Project`** from the dropdown menu.
+3. Enter a **project name** and add **`localhost:5173`** under **`Allowed Domains`**. Click **`Create`**.
+4. A **`Client ID`** and **`Secret ID`** will be generated. Copy both to a secure location—we’ll only need the **`Client ID`**.
+
+## Clone the Thirdweb Celo NFT Repository
+
+1. Clone the repository:
+
+ ```sh
+ git clone https://github.com/atejada/thirdweb-celo-nft
+ cd celo-token-agent
+ ```
+2. Install dependencies:
+
+
+ ```sh
+ npm install
+ ```
+3. Create a .env file with the following content:
+
+
+ ```sh
+ VITE_CLIENTID=your_thirdweb_client_id
+ VITE_ADDRESS=your_nft_contract_address
+ ```
+
+4. Run the project:
+
+
+ ```sh
+ npm run dev
+ ```
+
+Once the project is running, you’ll see the first NFT displayed along with a dropdown menu. You can select any other NFT from your collection to view its image, name, and description.
+
+## Join Build with Celo - Proof of Ship
+
+1. Create your application using an audited contract on Thirdweb.
+2. Check the Github repo [Proof-of-Ship](https://github.com/celo-org/Proof-of-Ship?tab=readme-ov-file).
+3. Sign up to join [Build with Celo - Proof of Ship](https://celo.lemonade.social/e/4JkhOXcD).
+4. You can win up to **`5k cUSD`**.
+5. Build with **`Celo`**.
diff --git a/docs/build/build-with-thirdweb/one-click quickstart.md b/docs/build/build-with-thirdweb/one-click quickstart.md
new file mode 100644
index 0000000000..519af6e654
--- /dev/null
+++ b/docs/build/build-with-thirdweb/one-click quickstart.md
@@ -0,0 +1,97 @@
+---
+title: One-Click Quickstart
+---
+
+Create and deploy Web3 apps effortlessly with Thirdweb and Celo.
+
+---
+
+## Objectives
+
+By the end of this tutorial, you will:
+
+* Be able to transfer Celo to another address
+* Have a mintable **NFT Drop**.
+
+## Prerequisites
+
+* Node (v20 or higher)
+* A wallet with some test tokens (more on this later)
+
+## Fund Your Wallet
+
+1. Ensure you have sufficient funds to cover the transaction fees.
+2. Visit the [Alfajores Faucet](https://faucet.celo.org/alfajores) to claim test tokens using a wallet address. ***Remember to claim only what you need.***
+
+## Create a Contract on Thirdweb
+
+1. Visit [Thirdweb](https://thirdweb.com/login) and log in or create a new account.
+2. Navigate to **`Contracts`** and click **`Deploy Contract`**.
+3. Since multiple smart contracts have already been audited, there's no need to write them from scratch.
+4. Select **`NFT Drop`** and click **`Deploy`**.
+5. Configure the token by setting its **Name** (mandatory), **Symbol**, and optionally adding an **Image** and **Description**.
+6. In the **Deploy Options** section, choose **`Celo Alfajores`** as the Chain (if not selected by default).
+7. Click **`Deploy Now`** to finalize the process.
+8. After deployment, well’ll be redirected to the dashboard to upload your NFTs.
+9. Provide a **name**, upload an **image**, add a **description**, and define **traits** for the NFT.
+10. **Lazy Mint** the NFT.
+11. Copy the **`contract address`** from the NFT dashboard.
+
+## Make the NFT Mintable
+
+1. On the dashboard, go to **Claim Conditions**
+2. Click on **Add Phase**.
+2. Specify the **Default Price (0.1)** and the **Limit per wallet (3)**.
+3. Click on **Save Phases**.
+
+## Get a Thirdweb Client ID
+
+1. Open the **Thirdweb Dashboard** and click **`Add New`** in the **Projects** section.
+2. Select **`Project`** from the dropdown menu.
+3. Enter a **project name** and add **`localhost:5173`** under **`Allowed Domains`**. Click **`Create`**.
+4. A **`Client ID`** and **`Secret ID`** will be generated. Copy both to a secure location—we’ll only need the **`Client ID`**.
+
+## Clone the Thirdweb Celo NFT Repository
+
+1. Clone the repository:
+
+ ```sh
+ git clone https://github.com/celo-org/one-click-quickstart
+ cd one-click-quickstart
+ ```
+
+2. Install dependencies:
+
+
+ ```sh
+ npm install
+ ```
+
+3. Create a .env file with the following content:
+
+
+ ```sh
+ VITE_CLIENTID=your_thirdweb_client_id
+ VITE_ADDRESS=your_nft_contract_address
+ VITE_ADRESS_TO=your_wallet_address
+ ```
+
+4. Run the project:
+
+
+ ```sh
+ npm run dev
+ ```
+
+Once the project is running, there will be two links, the first named **Send Celo** and the second named **Mint NFT**.
+The first one will be displayed by default. Click on the **Connect** button to connect the wallet. Enter an
+address and an amount of Celo to transfer. The second link will display an NFT along with its description and by pressing
+the mint button, 0.1 Celo will be paid.
+
+## Join Build with Celo - Proof of Ship
+
+1. Create your application using an audited contract on Thirdweb.
+2. Check the Github repo [Proof-of-Ship](https://github.com/celo-org/Proof-of-Ship?tab=readme-ov-file).
+3. Sign up to join [Build with Celo - Proof of Ship](https://celo.lemonade.social/e/4JkhOXcD).
+4. You can win up to **`5k cUSD`**.
+5. Build with **`Celo`**.
diff --git a/docs/build/build-with-thirdweb/overview.md b/docs/build/build-with-thirdweb/overview.md
new file mode 100644
index 0000000000..51b6904d6e
--- /dev/null
+++ b/docs/build/build-with-thirdweb/overview.md
@@ -0,0 +1,27 @@
+# Getting Started with Thirdweb
+
+---
+
+## Table of Contents
+- [Introduction](#introduction)
+- [Why Thirdweb?](#why-thirdweb)
+- [Resources](#resources)
+
+## Introduction {#introduction}
+
+Thirdweb streamlines blockchain development with pre-built contracts, SDKs, and a user-friendly dashboard. Deploy dApps, NFTs, and tokens effortlessly across multiple chains—fast, secure, and developer-friendly.
+
+## Why Thirdweb? {#why-thirdweb}
+
+Using Thirdweb is recommended because it eliminates the complexity of Web3 development, focusing on building rather than managing blockchain intricacies.
+
+* Pre-built Smart Contracts
+* SDKs & APIs
+* Multi-chain Support
+* Wallet & Payments
+* Dashboard Management
+
+## Resources {#resources}
+
+* [Thirdweb main page](https://thirdweb.com/)
+* [Thirdweb Docs](https://portal.thirdweb.com/)
diff --git a/docs/build/fund-your-project.md b/docs/build/fund-your-project.md
new file mode 100644
index 0000000000..533a418b58
--- /dev/null
+++ b/docs/build/fund-your-project.md
@@ -0,0 +1,48 @@
+# Fund your Project
+
+Discover funding opportunities in the Celo ecosystem.
+
+---
+
+The Celo ecosystem offers a variety of funding mechanisms, with a strong focus on retroactive funding, rewarding impactful contributions after they’ve been made. Grants and sustainable revenue models are also available to support projects at different stages.
+
+Explore these opportunities to maximize your funding potential.
+
+## Build Your Onchain Reputation
+
+Establishing a strong onchain reputation increases your chances of securing retroactive funding.
+
+Here’s how you can get started:
+
+ 1. **Create a project profile on [Karma GAP](https://docs.gap.karmahq.xyz/how-to-guides/integrations/celo-proof-of-ship)**: Build credibility by showcasing your contributions and activity.
+
+ 2. **Apply for monthly rewards with [Proof of Ship](https://celoplatform.notion.site/Build-With-Celo-Proof-of-Ship-17cd5cb803de8060ba10d22a72b549f8)** Demonstrate consistent progress for automated retroactive rewards.
+
+
+## Apply for Grant Opportunities
+
+There are various grant opportunities for builders in the Celo ecosystem, with funding available at different stages of your project. To maximize your chances of receiving rewards, include your Karma GAP project profile when applying.
+
+ 1. [CPG Gitcoin Grants](https://www.celopg.eco/programs)
+
+ 2. [CPG Retroactive Funding](https://www.celopg.eco/programs)
+
+ 3. [Prezenti Grants](https://www.prezenti.xyz/)
+
+## Ecosystem-Led Funding Opportunities
+
+Expand your funding sources with ecosystem partner initiatives.
+
+ 1. **[Divvi](https://www.divvi.xyz/)**: Automate gas fee revenue splits to fund your app.
+
+ 2. **[Commons Builder Income](https://www.commonsprotocol.xyz/)**: Apply for CBI and earn daily rewards.
+
+ 3. **[GoodBuilders Program](https://gooddollar.notion.site/GoodBuilders-Program-1a6f258232f080fea8a6e3760bb8f53d)**: A year-long initiative offering \$220k in rewards for building with G$
+
+ 4. **[Verda Ventures](https://verda.ventures/)**: Building for MiniPay & raising funding? Reach out to [team@verda.ventures](mailto:team@verda.ventures) with a deck and product demo.
+
+If you want to add another ecosystem-led funding program, [edit this page](https://github.com/celo-org/docs/edit/main/docs/build/fund-your-project.md) to include it.
+
+## Get Funding Updates
+
+Stay up to date with the latest funding opportunities by [joining our newsletter](https://embeds.beehiiv.com/eeadfef4-2f0c-45ce-801c-b920827d5cd2).
diff --git a/docs/build/index.md b/docs/build/index.md
new file mode 100644
index 0000000000..a7059bb186
--- /dev/null
+++ b/docs/build/index.md
@@ -0,0 +1,27 @@
+---
+title: Building dApps on Celo
+description: A guide for building on Celo.
+---
+import ColoredText from '/src/components/ColoredText';
+
+Celo was created to enable real-world uses cases on Ethereum.
+
+Whether you're building your first dApp or looking to integrate an existing protocol onto Celo, we have all the resources and tools you need to get started.
+
+---
+
+## Why Build on Celo?
+
+- **EVM Compatibile:** Celo is fully EVM-compatible, offering the same development experience as Ethereum with improved scalability and lower costs.
+- **Fast Transactions:** After the migrations to an L2 Celo now has a 1 second block finality compared to formerly 5 seconds.
+- **Easy, Low-Cost Payments:** Celo's seemless payment infrastructure, including Fee Abstraction, sub-cent fees, and native stablecoins, enables simple and affordable transactions.
+- **Global Reach:** Celo supports 1,000+ projects in 150+ countries, providing a vibrant, global community that helps developers build, test, and scale their applications to millions of everyday users.
+
+
+### Getting Started
+
+- Quickstart with Celo Composer CLI
+- Deploy a smart contract on Celo
+- Receive testnet funds
+- Explore developer tooling
+
diff --git a/docs/build/quickstart.md b/docs/build/quickstart.md
new file mode 100644
index 0000000000..0ce2f45ad6
--- /dev/null
+++ b/docs/build/quickstart.md
@@ -0,0 +1,129 @@
+---
+title: Quickstart
+---
+
+To test out deploying a dApp on Celo, we recommend using [Celo Composer](https://github.com/celo-org/celo-composer), which allows you to quickly build, deploy, and iterate on decentralized applications using Celo. It provides a number of frameworks, examples, templates and Celo specific functionality to help you get started with your next dApp.
+
+## Prerequisites
+
+- Node (v20 or higher)
+- Git (v2.38 or higher)
+
+## How to use Celo Composer
+
+The easiest way to start with Celo Composer is using `@celo/celo-composer`. This CLI tool lets you quickly start building dApps on Celo for multiple frameworks, including React (and rainbowkit). To get started, just run the following command, and follow the steps:
+
+```bash
+npx @celo/celo-composer@latest create
+```
+
+### Provide the Project Name:
+
+You will be prompted to enter the name of your project
+
+```bash
+What is your project name:
+```
+
+### Choose a smart contract development environment:
+
+You will be asked if you want to use Hardhat. Select Yes or No
+
+```bash
+Do you want to use Hardhat? (Y/n)
+```
+
+### Choose to Use a Pre-Built Template, highlighting Celo's unique features:
+
+You will be asked if you want to use a [template](#supported-templates), check [below](#supported-templates) for the options. Select Yes or No
+
+```bash
+Do you want to use a template?
+```
+
+### Select a Template:
+
+If you chose to use a template, you will be prompted to select a template from the list provided
+
+```bash
+# built in frontend logic to use your dapp in MiniPay, pre-built example functions for sign, transact and mint
+- MiniPay
+# template built for easy Valora connectivity
+- Valora
+# example project for matching your social Identifier to your wallet address, using GitHub
+- Social Connect
+```
+
+### Provide the Project Owner's Name:
+
+You will be asked to enter the project owner's name
+
+```bash
+Project Owner name:
+```
+
+### Wait for Project Creation:
+
+The CLI will now create the project based on your inputs. This may take a few minutes.
+
+### Follow the instructions to start the project.
+
+The same will be displayed on the console after the project is created
+
+```bash
+🚀 Your starter project has been successfully created!
+
+Before you start the project, please follow these steps:
+
+1. Rename the file:
+ packages/react-app/.env.template
+ to
+ packages/react-app/.env
+
+2. Open the newly renamed .env file and add all the required environment variables.
+
+Once you've done that, you're all set to start your project!
+
+Run the following commands from the packages/react-app folder to start the project:
+
+ yarn install
+ yarn dev
+
+If you prefer npm, you can run:
+
+ npm install
+ npm run dev
+
+Thank you for using Celo Composer! If you have any questions or need further assistance, please refer to the README or reach out to our team.
+```
+
+🔥Voila, you have a dApp ready to go. Start building your dApp on Celo.
+
+Once your custom dApp has been created, just install dependencies, either with yarn or npm i, and run the respective script from the package.json file.
+
+## Supported Templates
+
+### MiniPay
+
+- Pre-built template for creating a mini-payment application.
+- Seamless integration with Celo blockchain for handling payments.
+
+Checkout [minipay docs](https://docs.celo.org/developer/build-on-minipay/overview) to learn more about it.
+
+### Valora
+
+- Template designed for Valora wallet integration.
+- Facilitates easy wallet connectivity and transaction management.
+
+Checkout [valora docs](https://docs.valora.xyz/) to learn more about it.
+
+### Social Connect
+
+- Template for building applications with social connectivity features.
+- Supports various social login methods and user interactions.
+
+Checkout [social connect docs](https://github.com/celo-org/social-connect) to learn more about it.
+
+## Support
+
+Join the [Celo Discord server](https://chat.celo.org). Reach out in the #general-dev channel with your questions and feedback.
diff --git a/docs/build/support.md b/docs/build/support.md
new file mode 100644
index 0000000000..42aaedc08c
--- /dev/null
+++ b/docs/build/support.md
@@ -0,0 +1,22 @@
+---
+title: Get Support
+description: A comprehensive guide on how to reach out for support
+---
+
+import ColoredText from '/src/components/ColoredText';
+
+# Get Support
+
+This section explains how you can get support and stay up-to-date with Celo developer news.
+
+:::tip
+Help us improve by sharing your feedback on missing tools, unclear sections, or any challenges you encounter by creating an issue or by clicking on "Edit Page" on the bottom of each page.
+:::
+
+## How to Get Support?
+
+- For general questions, join our [Discord](https://discord.com/invite/celo) and claim the developer role to ask questions in our #general-dev channel. Our moderators can provide guidance and answers.
+
+- For advanced questions, create issues and participate in [GitHub Discussions](https://github.com/orgs/celo-org/discussions).
+
+For the latest updates, sign up for the [DevDesk Mailing List](https://embeds.beehiiv.com/eeadfef4-2f0c-45ce-801c-b920827d5cd2) and follow [CeloDevs on X](https://x.com/CeloDevs).
diff --git a/docs/cel2/builders.md b/docs/cel2/builders.md
new file mode 100644
index 0000000000..4f56b1602d
--- /dev/null
+++ b/docs/cel2/builders.md
@@ -0,0 +1,51 @@
+# Builders
+
+The Celo L2 upgrade introduces no breaking changes but many improvements for builders.
+Among them are higher compatibility with Ethereum tooling and interfaces, support of the latest EVM versions and integration into the Optimism ecosystem.
+
+Celo L2 enables the [Cancun hardfork](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md) for the EVM, enabling builders to use the latest opcodes to make smart contracts cheaper and more secure. It also enables new use-cases by supporting new precompiles and streamlined bridging to the Celo ecosystem. For more details see the [Celo specs](https://specs.celo.org/l2_migration.html#state-changes-during-the-migration).
+
+## Alfajores testnet
+
+The Alfajores testnet allows you to test the new environment.
+
+- Network Name: Celo Alfajores Testnet
+- RPC URL: [https://alfajores-forno.celo-testnet.org](https://alfajores-forno.celo-testnet.org)
+- Chain ID: 44787
+- Currency Symbol: CELO
+- Block explorer: [https://explorer.celo.org/alfajores](https://explorer.celo.org/alfajores)
+
+The following node providers are available for Alfajores:
+
+- [Infura](https://www.infura.io/networks/celo)
+- [dRPC](https://drpc.org/chainlist/celo)
+
+If none of the above work for you, you can use cLabs best effort hosted node: [Forno](https://docs.celo.org/network/node/forno).
+
+You can get funds from the [Alfajores Faucet](https://faucet.celo.org/alfajores).
+
+## I use ContractKit or Fee Abstraction (ERC-20 gas tokens)
+
+**Required** versions for SDK and libraries:
+
+- [@celo/connect >=6.1.0](https://www.npmjs.com/package/@celo/connect)
+- [@celo/contractkit >=8.1.1](https://www.npmjs.com/package/@celo/contractkit)
+- [@celo/celocli >=5.1.1](https://www.npmjs.com/package/@celo/celocli)
+- [@viem >=2](https://www.npmjs.com/package/viem)
+
+Additionally, have a look at the [ContractKit Celo L2 Guide](https://docs.google.com/document/d/1F-9OtZeFOhB7SbgWyUHjOgxBwF-749URZDK0OpgtAqE/edit)
+
+## Getting help
+
+Reach out to us!
+
+- Technical question? [celo-org discussions on GitHub](https://github.com/orgs/celo-org/discussions/categories/cel2)
+- Any type of question? Reach out on [Discord](https://chat.celo.org) in the [#celo-L2-support](https://discord.com/channels/600834479145353243/1286649605798367252) channel.
+
+Also check out these resources:
+
+- [Celo Docs](../welcome.md)
+- [Celo L2 Specifications](https://specs.celo.org/)
+- [Transaction types on Celo](https://github.com/celo-org/txtypes)
+- [Celo Forum](https://forum.celo.org/)
+
\ No newline at end of file
diff --git a/docs/cel2/faq.md b/docs/cel2/faq.md
new file mode 100644
index 0000000000..b768f19c9f
--- /dev/null
+++ b/docs/cel2/faq.md
@@ -0,0 +1,110 @@
+---
+title: Cel2 FAQ
+description: Frequently Asked Questions about Cel2
+---
+
+## Mainnet
+
+### When is Celo mainnet becoming an L2?
+
+:spiral_calendar: Celo L2 Mainnet Date: March 26, 2025, 3:00 AM UTC
+
+:chains: Hardfork Block Height: 31056500
+
+### How do I run a node or upgrade an existing node?
+
+See the guides for [running a node](./operators/run-node.md) or the guide on [how to migrate an L1 node](./operators/migrate-node.md).
+
+### Will the migration happen immediately, or will there be a grace period for projects to transition to the new version?
+
+There should be no grace period needed, as nothing should change for common users. Expect a period with no block production of at least 20 minutes during the transition.
+
+### Will it be necessary to withdraw funds from Celo L1 in advance or will they be transferred to L2?
+
+No. All balances will carry over to the L2 unchanged.
+
+### Will there be multiple RPC node providers?
+
+There will be multiple RPC providers supporting Celo L2. Please see [Day 1 Partners](https://docs.celo.org/cel2/notices/day-1-partners)
+for a list of RPC providers comfirmed for Day 1.
+
+### How will ERC-20 tokens and the native CELO token work after the migration?
+
+There will be no change and it will continue to work as it does now.
+
+### Will already deployed smart contracts need to be redeployed?
+
+No, they will not.
+
+### Will Celo be able to support solidity versions above 0.8.19?
+
+Yes. This will work the same as with Ethereum
+
+### What data model changes will happen in the RPC specs (esp. which gas tokens)?
+
+We are going to have the same RPC specs as Optimism (e.g. we won't have block receipts)
+
+### What happens to Validators?
+
+Validators are becoming [Community RPC providers](./operators/community-rpc-node).
+
+### What happens to governance?
+
+[Governance](/general/ecosystem/governance) remains a pillar of the Celo blockchain. The Validator Hotfix process has been adapted, see [Updated Governance Hotfix](https://specs.celo.org/l2_migration.html#updated-governance-hotfix) for the changes.
+
+### What happened to these features?
+
+- CELO token duality? Supported, see [Token Duality](https://specs.celo.org/token_duality.html).
+- Fee currencies? Supported, see [Fee Abstraction](https://specs.celo.org/fee_abstraction.html).
+- Epoch rewards? No more epochs, but rewards stay, see [Epochs and Rewards](https://specs.celo.org/smart_contract_updates_from_l1.html#epochs-and-rewards).
+
+### How is the Celo L2 different to Optimism?
+
+See [What's Changed Optimism -> Celo L2](./whats-changed/op-l2).
+Also see [Celo L2 Specification](https://specs.celo.org/root.html) for greater detail.
+
+### What are the costs for L1 data and how are they paid?
+
+See [What's changed section covering L1 fees](./whats-changed/op-l2#l1-fees).
+
+### I saw EigenDA mentioned, is it used?
+
+Yes! See [EigenDA](https://specs.celo.org/eigenda.html).
+
+### What's the block time?
+
+The block period is 1 second.
+
+### What's the throughput?
+
+The gas limit per block is 30 million, so the maximum throughput is 30M gas/s.
+
+### Is there anything that used to work that doesn’t anymore?
+
+See [What's Changed Celo L1 -> L2](./whats-changed/l1-l2.md) and [L1 -> L2 Migration Changes](https://specs.celo.org/l2_migration.html) in the spec for greater detail.
+
+## Alfajores
+
+### What RPC endpoints are available for the Alfajores testnet?
+
+See the Alfajores network info [here](/network#celo-alfajores-l2-testnet).
+
+### Is there an Alfajores faucet? Where? How do I get funds?
+
+See the Alfajores network info [here](/network#celo-alfajores-l2-testnet).
+
+### Is there an Alfajores explorer?
+
+See the Alfajores network info [here](/network#celo-alfajores-l2-testnet).
+
+### How can I use the native bridge with Alfajores?
+
+See the Alfajores network info [here](/network#celo-alfajores-l2-testnet).
+
+### What’s the difference between Dango and Alfajores?
+
+Dango was a short-lived testnet forked from Alfajores at block [24940100](https://celo-alfajores.blockscout.com/block/0xc0e521a7b7326064ec12f51449de16d3218de161335daaa4ae8bbed1790b4a6c) to test the migration to L2. It was shut down in October 2024.
+
+Alfajores is a long running Celo network testnet that was [launched in July 2019](https://blog.celo.org/introducing-alfajores-1b162ebcb44d) and upgraded to L2 in September 2024.
+
+See the Alfajores network info [here](/network#celo-alfajores-l2-testnet).
diff --git a/docs/cel2/guides/bridging-celo-from-l1-to-l2.mdx b/docs/cel2/guides/bridging-celo-from-l1-to-l2.mdx
new file mode 100644
index 0000000000..86830c9f15
--- /dev/null
+++ b/docs/cel2/guides/bridging-celo-from-l1-to-l2.mdx
@@ -0,0 +1,216 @@
+---
+title: Bridging CELO from L1 to L2
+---
+
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+
+In this guide, you'll learn how to programmatically bridge CELO from Holesky to Alfajores using the [viem OP Stack](https://viem.sh/op-stack).
+
+## Steps to Bridge CELO
+
+Before transferring tokens, you must authorize the `OptimismPortalProxy` contract to spend CELO on your behalf. Without this approval, the bridging transaction cannot proceed.
+
+Call the [`depositERC20Transaction`](https://viem.sh/op-stack/actions/depositTransaction#deposittransaction) function on the `OptimismPortalProxy` contract on Holesky. This function moves CELO tokens from your account to the Alfajores testnet.
+
+## Code Example
+The following example demonstrates how to configure a file with all the details you need for interacting with the Alfajores testnet.
+
+
+
+
+
+ ```js
+ import { createWalletClient, createPublicClient, http, parseEther } from "viem";
+ import { privateKeyToAccount } from "viem/accounts";
+ import { holesky } from "viem/chains";
+ import { getL2TransactionHashes, publicActionsL2 } from "viem/op-stack";
+ import { alfajores } from "./alfajores.js";
+
+ const CELOL1 = "0xDEd08f6Ec0A57cE6Be62d1876d2CE92AF37eddA0";
+
+ // https://docs.celo.org/cel2/contract-addresses
+ const OptimismPortalProxy = "0xB29597c6866c6C2870348f1035335B75eEf79d07";
+
+ const account = privateKeyToAccount(
+ "...",
+ );
+
+ export const walletClientL1 = createWalletClient({
+ account,
+ chain: holesky,
+ transport: http(),
+ });
+
+ export const publicClientL1 = createPublicClient({
+ account,
+ chain: holesky,
+ transport: http(),
+ });
+
+ export const publicClientL2 = createPublicClient({
+ chain: alfajores,
+ transport: http(),
+ }).extend(publicActionsL2());
+
+ async function main() {
+ // Approve OptimismPortal to pull CELO on Holesky
+ const approve = await walletClientL1.writeContract({
+ address: CELOL1,
+ abi: [
+ {
+ inputs: [
+ { name: "spender", type: "address" },
+ { name: "amount", type: "uint256" },
+ ],
+ name: "approve",
+ type: "function",
+ },
+ ],
+ functionName: "approve",
+ args: [OptimismPortalProxy, parseEther("0.0001")],
+ });
+
+ console.log(`Approval TX Hash: ${approve}`);
+
+ let approveReceipt = await publicClientL1.waitForTransactionReceipt({
+ hash: approve,
+ });
+ console.log(`Approve Transaction Receipt: ${approveReceipt}`);
+
+ // Call depositERC20Transaction on OptimismPortal
+ const deposit = await walletClientL1.writeContract({
+ address: OptimismPortalProxy,
+ abi: [
+ {
+ inputs: [
+ {
+ name: "_to",
+ type: "address",
+ },
+ {
+ name: "mint",
+ type: "uint256",
+ },
+ {
+ name: "_value",
+ type: "uint256",
+ },
+ {
+ name: "_gasLimit",
+ type: "uint64",
+ },
+ {
+ name: "_isCreation",
+ type: "bool",
+ },
+ {
+ name: "_data",
+ type: "bytes",
+ },
+ ],
+ name: "depositERC20Transaction",
+ type: "function",
+ },
+ ],
+ functionName: "depositERC20Transaction",
+ args: [
+ account.address, // Account where you want to receive CELO on L2
+ parseEther("0.0001"), // Amount you are transferring to the Portal
+ parseEther("0.0001"), // Amount you want on L2
+ 100_000, // Amount of L2 gas to purchase by burning gas on L1.
+ false, // Whether the transaction is a contract creation
+ "", // Data to trigger the recipient with
+ ],
+ });
+
+ console.log(`Deposit Transaction: ${deposit}`);
+
+
+ let depositReceipt = await publicClientL1.waitForTransactionReceipt({
+ hash: deposit,
+ });
+ console.log(`Deposit Transaction Receipt: ${depositReceipt}`);
+
+ // Get the L2 transaction hash from the L1 transaction receipt.
+ const [l2Hash] = getL2TransactionHashes(depositReceipt);
+
+ // Wait for the L2 transaction to be processed.
+ const l2Receipt = await publicClientL2.waitForTransactionReceipt({
+ hash: l2Hash,
+ });
+
+ console.log(`L2Receipt: ${l2Receipt}`);
+ }
+
+ main();
+ ```
+
+
+
+
+
+ ```js
+ import { defineChain } from "viem";
+
+ const sourceId = 17000;
+
+ export const alfajores = defineChain({
+ name: "Alfajores Testnet",
+ id: 44_787,
+ nativeCurrency: {
+ decimals: 18,
+ name: "CELO",
+ symbol: "CELO",
+ },
+ rpcUrls: {
+ default: {
+ http: ["https://alfajores-forno.celo-testnet.org"],
+ },
+ },
+ contracts: {
+ gasPriceOracle: { address: "0x420000000000000000000000000000000000000F" },
+ l1Block: { address: "0x4200000000000000000000000000000000000015" },
+ l2CrossDomainMessenger: {
+ address: "0x4200000000000000000000000000000000000007",
+ },
+ l2Erc721Bridge: { address: "0x4200000000000000000000000000000000000014" },
+ l2StandardBridge: { address: "0x4200000000000000000000000000000000000010" },
+ l2ToL1MessagePasser: {
+ address: "0x4200000000000000000000000000000000000016",
+ },
+ disputeGameFactory: {
+ [sourceId]: {
+ address: "0x831f39053688f05698ad0fB5f4DE7e56B2949c55",
+ },
+ },
+ l2OutputOracle: {
+ [sourceId]: {
+ address: "0x419577592C884868C3ed85B97169b93362581855",
+ },
+ },
+ portal: {
+ [sourceId]: {
+ address: "0xB29597c6866c6C2870348f1035335B75eEf79d07",
+ },
+ },
+ l1StandardBridge: {
+ [sourceId]: {
+ address: "0x9FEBd0F16b97e0AEF9151AF07106d733E87B1be4",
+ },
+ },
+ },
+ blockExplorers: {
+ default: {
+ name: "Celo Explorer",
+ url: "https://explorer.celo.org/alfajores",
+ apiUrl: "https://explorer.celo.org/api",
+ },
+ },
+ testnet: true,
+ });
+
+ ```
+
+
+
diff --git a/docs/cel2/guides/fee-abstraction.md b/docs/cel2/guides/fee-abstraction.md
new file mode 100644
index 0000000000..e0ac31a13d
--- /dev/null
+++ b/docs/cel2/guides/fee-abstraction.md
@@ -0,0 +1,137 @@
+---
+title: Fee Abstraction on Celo L2
+---
+
+## Fee Abstraction Addresses
+
+Celo allows paying gas fees in currencies other than the native currency. The tokens that can be used to pay gas fees are controlled via governance and the list of tokens allowed is maintained in `FeeCurrencyWhitelist.sol`.
+
+Fee abstraction on Celo works with EOAs. No paymaster required!
+
+### Get a list of whitelisted Fee Currencies
+
+```bash
+celocli network:whitelist --node https://alfajores-forno.celo-testnet.org
+```
+
+### Using Fee Abstraction with Celo CLI
+
+Transfer 1 USDC using USDC as fee currency, with the [`celocli`](https://docs.celo.org/cli) using the `--gasCurrency` flag
+
+```bash
+celocli transfer:erc20 --erc20Address 0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B --from 0x22ae7Cf4cD59773f058B685a7e6B7E0984C54966 --to 0xDF7d8B197EB130cF68809730b0D41999A830c4d7 --value 1000000 --gasCurrency 0x4822e58de6f5e485eF90df51C41CE01721331dC0 --privateKey [PRIVATE_KEY]
+```
+
+| Symbol | Token | Adapter |
+| :----: | :----------------------------------------: | :----------------------------------------: |
+| cUSD | 0x874069Fa1Eb16D44d622F2e0Ca25eeA172369bC1 | |
+| cEUR | 0x10c892A6EC43a53E45D0B916B4b7D383B1b78C0F | |
+| cREAL | 0xE4D517785D091D3c54818832dB6094bcc2744545 | |
+| cKES | 0x1E0433C1769271ECcF4CFF9FDdD515eefE6CdF92 | |
+| USDC | 0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B | 0x4822e58de6f5e485eF90df51C41CE01721331dC0 |
+| USD₮ | 0xC4f86E9B4A588D501c1c3e25628dFd50Bc8D615e | |
+| G$ | 0x03d3daB843e6c03b3d271eff9178e6A96c28D25f | |
+
+### Using Fee Abstraction Programmatically
+
+You can use Fee Abstraction by specifying a token/adapter address as a value for the `feeCurrency` property in the transaction object. The `feeCurrency` property in the transaction object is exclusive to Celo and allows paying gas fees using assets other than the native currency of the network.
+
+:::info
+Wallets will overwrite the `feeCurrency`, which is why this is recommended for wallet developers or backend developers.
+:::
+
+When using Fee Abstraction for a wallet or inside your dApp we recommend using [viem](https://viem.sh/docs/introduction.html) or [wagmi](https://wagmi.sh/).
+
+:::info
+While we recommend viem, [web3.js](https://docs.web3js.org/) has added as of 4.13.1 support for `feeCurrency` via the usage of [plugins](https://docs.web3js.org/#packages--plugins). There is a celo-specific [plugin for web3@4 available on github](https://github.com/celo-org/web3-plugin-transaction-types).
+
+:::warning
+Currently, ethers.js doesn't support the `feeCurrency` property
+:::
+
+### Sending transaction using Fee Abstraction
+
+Sending transactions with fee currency other than the native currency of the network is pretty straightforward. All you need to do is set the `feeCurrency` property in the transaction object with the address of the token/adapter you want to use to pay for gas fees.
+
+The below code snippet demonstrates transferring 1 USDC using USDC as gas currency.
+
+```js
+import { createWalletClient, http } from "viem";
+import { celo } from "viem/chains";
+import { privateKeyToAccount } from "viem/accounts";
+import { stableTokenAbi } from "@celo/abis";
+
+// Creating account from private key, you can choose to do it any other way.
+const account = privateKeyToAccount("0x432c...");
+
+// WalletClient can perform transactions.
+const client = createWalletClient({
+ account,
+
+ // Passing chain is how viem knows to try serializing tx as cip42.
+ chain: celo,
+ transport: http(),
+});
+
+const USDC_ADAPTER_MAINNET = "0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B";
+const USDC_MAINNET = "0xcebA9300f2b948710d2653dD7B07f33A8B32118C";
+
+/*
+ The UI of the wallet should calculate the transaction fees, show it and consider the amount to not be part of the asset that the user i.e the amount corresponding to transaction fees should not be transferrable.
+*/
+async function calculateTransactionFeesInUSDC(transaction) {
+ // Implementation of getGasPriceInUSDC is in the above code snippet
+ const gasPriceInUSDC = await getGasPriceInUSDC();
+
+ // Implementation of estimateGasInUSDC is in the above code snippet
+ const estimatedGasPrice = await estimateGasInUSDC(transaction);
+
+ return gasPriceInUSDC * estimatedGasPrice;
+}
+
+async function send(amountInWei) {
+ const to = USDC_MAINNET;
+
+ // Data to perform an ERC20 transfer
+ const data = encodeFunctionData({
+ abi: stableTokenAbi,
+ functionName: "transfer",
+ args: [
+ "0xccc9576F841de93Cd32bEe7B98fE8B9BD3070e3D",
+ // Different tokens can have different decimals, cUSD (18), USDC (6)
+ amountInWei,
+ ],
+ });
+
+ const transactionFee = await calculateTransactionFeesInUSDC({ to, data });
+
+ const tokenReceivedbyReceiver = parseEther("1") - transactionFee;
+
+ /*
+ Now the data has to be encode again but with different transfer value because the receiver receives the amount minus the transaction fee.
+ */
+ const dataAfterFeeCalculation = encodeFunctionData({
+ abi: stableTokenAbi,
+ functionName: "transfer",
+ args: [
+ "0xccc9576F841de93Cd32bEe7B98fE8B9BD3070e3D",
+ // Different tokens can have different decimals, cUSD (18), USDC (6)
+ tokenReceivedbyReceiver,
+ ],
+ });
+
+ // Transaction hash
+ const hash = await client.sendTransaction({
+ ...{ to, data: dataAfterFeeCalculation },
+
+ /*
+ In case the transaction request does not include the feeCurrency property, the wallet can add it or change it to a different currency based on the user balance.
+
+ Notice that we use the USDC_ADAPTER_MAINNET address not the token address this is because at the protocol level only 18 decimals tokens are supported, but USDC is 6 decimals, the adapter acts a unit converter.
+ */
+ feeCurrency: USDC_ADAPTER_MAINNET,
+ });
+
+ return hash;
+}
+```
diff --git a/docs/cel2/guides/withdrawing-celo-from-l2-to-l1.mdx b/docs/cel2/guides/withdrawing-celo-from-l2-to-l1.mdx
new file mode 100644
index 0000000000..8da2f9ca18
--- /dev/null
+++ b/docs/cel2/guides/withdrawing-celo-from-l2-to-l1.mdx
@@ -0,0 +1,217 @@
+---
+title: Withdrawing CELO from L2 to L1
+---
+
+import Tabs from "@theme/Tabs";
+import TabItem from "@theme/TabItem";
+
+In this tutorial, you will learn how to programmatically withdraw CELO from Alfajores to Holesky using the [viem OP Stack](https://viem.sh/op-stack).
+
+## Steps to Withdraw CELO
+
+Withdrawals require the user to submit three transactions:
+
+1. [Withdrawal initiating a transaction](https://viem.sh/op-stack/actions/initiateWithdrawal), which the user submits on L2.
+2. [Withdrawal proving transaction](https://viem.sh/op-stack/actions/proveWithdrawal), which the user submits on L1 to prove that the withdrawal is legitimate.
+3. [Withdrawal finalizing transaction](https://viem.sh/op-stack/actions/finalizeWithdrawal), which the user submits on L1 after the fault challenge period has passed, to actually run the transaction on L1.
+
+## Code Example
+
+The following example demonstrates how to configure a file with all the details you need for interacting with the Alfajores testnet.
+
+
+
+
+ ```js
+ import {
+ createPublicClient,
+ createWalletClient,
+ http,
+ parseEther,
+ } from "viem";
+ import { privateKeyToAccount } from "viem/accounts";
+ import { holesky } from "viem/chains";
+ import {
+ publicActionsL1,
+ walletActionsL2,
+ walletActionsL1,
+ publicActionsL2,
+ } from "viem/op-stack";
+ import { alfajores } from "./alfajores.js";
+
+ const account = privateKeyToAccount(
+ "[PRIVATE_KEY]",
+ );
+
+ const value = parseEther("0.0001"); // Amount to Withdraw
+
+ export const publicClientL1 = createPublicClient({
+ chain: holesky,
+ transport: http(),
+ }).extend(publicActionsL1());
+
+ export const publicClientL2 = createPublicClient({
+ chain: alfajores,
+ transport: http(),
+ }).extend(publicActionsL2());
+
+ export const walletClientL1 = createWalletClient({
+ chain: holesky,
+ transport: http(),
+ account,
+ }).extend(walletActionsL1());
+
+ export const walletClientL2 = createWalletClient({
+ chain: alfajores,
+ transport: http(),
+ account,
+ }).extend(walletActionsL2());
+
+ export default async function main() {
+ console.log("Building Initiate Withdrawal...");
+ const args = await publicClientL1.buildInitiateWithdrawal({
+ account,
+ to: account.address, // Receive on the same address on L1.
+ value,
+ });
+
+ console.log("Initiaiting Withdrawal...");
+ const hash = await walletClientL2.initiateWithdrawal(args);
+
+ const initiateWithdrawalReceipt = await publicClientL2.waitForTransactionReceipt({
+ hash
+ });
+ console.log(`Withdrawal Initiated: ${initiateWithdrawalReceipt}`);
+
+ /**
+ * The below step can take upto 2 hours!
+ *
+ * Hence, you may want to use viem's `getTimeToProve`.
+ *
+ * https://viem.sh/op-stack/actions/getTimeToProve
+ *
+ * Store the wait time in a database
+ * and let the user know to come back later.
+ *
+ * */
+ console.log("Waiting to prove...");
+ const { output, withdrawal } = await publicClientL1.waitToProve({
+ receipt: initiateWithdrawalReceipt,
+ targetChain: walletClientL2.chain,
+ });
+
+ console.log("Building Prove Withdrawal...");
+ const proveArgs = await publicClientL2.buildProveWithdrawal({
+ output,
+ withdrawal,
+ });
+
+ console.log("Proving Withdrawal...");
+ const proveHash = await walletClientL1.proveWithdrawal(proveArgs);
+
+ const proveReceipt = await publicClientL1.waitForTransactionReceipt({
+ hash: proveHash,
+ });
+ console.log(`Withdrawal Proved: ${proveReceipt}`);
+
+ /**
+ * The below step can take a few minutes, ideally 2 minutes.
+ *
+ * Hence, you may want to use viem's `getTimeToFinalize`.
+ *
+ * https://viem.sh/op-stack/actions/getTimeToFinalize
+ *
+ * Store the wait time in a database
+ * and let the user know to come back later.
+ *
+ *
+ */
+ console.log("Waiting To Finalize...");
+ await publicClientL1.waitToFinalize({
+ targetChain: walletClientL2.chain,
+ withdrawalHash: withdrawal.withdrawalHash,
+ });
+
+ console.log("Finalizing Withdrawal...");
+ const finalizeWithdrawalHash = await walletClientL1.finalizeWithdrawal({
+ targetChain: walletClientL2.chain,
+ withdrawal,
+ });
+
+ const finalizeWithdrawalReceipt = await publicClientL1.waitForTransactionReceipt({
+ hash: finalizeWithdrawalHash,
+ });
+ console.log(`Withdrawal Finalized: ${finalizeWithdrawalReceipt}`)
+ }
+
+
+ ```
+
+
+
+
+
+```js
+import { defineChain } from "viem";
+
+const sourceId = 17000; // Holesky
+
+export const alfajores = defineChain({
+ name: "Alfajores Testnet",
+ id: 44_787,
+ nativeCurrency: {
+ decimals: 18,
+ name: "CELO",
+ symbol: "CELO",
+ },
+ rpcUrls: {
+ default: {
+ http: ["https://alfajores-forno.celo-testnet.org"],
+ },
+ },
+ contracts: {
+ gasPriceOracle: { address: "0x420000000000000000000000000000000000000F" },
+ l1Block: { address: "0x4200000000000000000000000000000000000015" },
+ l2CrossDomainMessenger: {
+ address: "0x4200000000000000000000000000000000000007",
+ },
+ l2Erc721Bridge: { address: "0x4200000000000000000000000000000000000014" },
+ l2StandardBridge: { address: "0x4200000000000000000000000000000000000010" },
+ l2ToL1MessagePasser: {
+ address: "0x4200000000000000000000000000000000000016",
+ },
+ disputeGameFactory: {
+ [sourceId]: {
+ address: "0x831f39053688f05698ad0fB5f4DE7e56B2949c55",
+ },
+ },
+ l2OutputOracle: {
+ [sourceId]: {
+ address: "0x419577592C884868C3ed85B97169b93362581855",
+ },
+ },
+ portal: {
+ [sourceId]: {
+ address: "0xB29597c6866c6C2870348f1035335B75eEf79d07",
+ },
+ },
+ l1StandardBridge: {
+ [sourceId]: {
+ address: "0x9FEBd0F16b97e0AEF9151AF07106d733E87B1be4",
+ },
+ },
+ },
+ blockExplorers: {
+ default: {
+ name: "Celo Explorer",
+ url: "https://explorer.celo.org/alfajores",
+ apiUrl: "https://explorer.celo.org/alfajores/api/v2",
+ },
+ },
+ testnet: true,
+});
+```
+
+
+
+
diff --git a/docs/cel2/index.md b/docs/cel2/index.md
new file mode 100644
index 0000000000..49a9a2a168
--- /dev/null
+++ b/docs/cel2/index.md
@@ -0,0 +1,98 @@
+# Overview
+
+## Celo L2 Mainnet
+
+:spiral_calendar: Celo L2 Mainnet Date: March 26, 2025, 3:00 AM UTC
+
+:chains: Hardfork Block Height: 31056500
+
+**Node Operators:** Please refer to the mainnet releases below and [Node Operator Guide](./operators/overview.md) for additional migration instructions.
+
+* Minimum `celo-blockchain` version: [v1.8.9](https://github.com/celo-org/celo-blockchain/releases/tag/v1.8.9)
+* `op-geth`: [celo-v2.0.0](https://github.com/celo-org/op-geth/releases/tag/celo-v2.0.0)
+* `op-node`: [celo-v2.0.0](https://github.com/celo-org/optimism/releases/tag/celo-v2.0.0)
+
+Celo is currently operating two Layer 2 testnets, Alfajores and Baklava, both of which have been successfully migrated from Layer 1.
+
+
+## Celo’s Transition to Ethereum Layer 2
+
+Celo is transitioning from a standalone EVM-compatible Layer 1 blockchain to an Ethereum Layer 2.
+This shift, [proposed by cLabs in July
+2023](https://forum.celo.org/t/clabs-proposal-for-celo-to-transition-to-an-ethereum-l2/6109), aims
+to maintain the seamless user experience that Celo is known for—characterized by speed, low costs,
+and ease of use—while leveraging Ethereum’s security and ecosystem. As part of this transition,
+Celo is currently operating a Layer 2 testnet, Alfajores, which launched on September 26, 2024.
+
+:::info
+While most applications should remain unaffected, node operators, validators, and RPC providers must ensure their systems are prepared for the transition to maintain seamless operations.
+
+See the following documents for more details:
+
+* [Celo L2 migration](notices/l2-migration.md)
+* [Pectra upgrade for Alfajores](notices/pectra-upgrade.md)
+
+:::
+
+## What does this mean for our ecosystem?
+
+Celo's evolution from an L1 EVM-compatible chain to an L2 solution marks a significant milestone in our ongoing relationship with the Ethereum ecosystem. As an L1 chain, Celo has always maintained close ties with Ethereum, sharing its commitment to decentralization, security, and innovation. By transitioning to an L2, Celo strengthens this bond, allowing our developers and protocols to immerse themselves even deeper into the vibrant, collaborative Ethereum community. This integration enhances opportunities for open-source contributions, joint initiatives, and the development of public goods, ensuring that Celo's impact resonates widely across the blockchain space.
+
+### Technical Changes
+
+From a technical standpoint, this shift brings substantial benefits. Native bridging between Celo and Ethereum, which was previously not possible, will now be a reality. This advancement significantly enhances the security of token transfers by reducing reliance on external bridges, which have often been a point of vulnerability. With native bridging, Celo can offer a more secure and streamlined experience for users, ensuring that transactions within our ecosystem are both safe and reliable. In essence, becoming an L2 not only aligns Celo more closely with Ethereum's expansive network but also empowers our community to innovate with greater confidence and reach.
+
+The table below summarizes the technical changes involved in transitioning from Celo's Layer 1 to Layer 2:
+
+| **Aspect** | **Layer 1** | **Layer 2** |
+|----------------------|---------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
+| **Architecture** | Single service, providing execution, consensus, and data availability. | Multiple services built on the op-stack with separate execution, data availability, and settlement layers. |
+| **Bridging** | Third-party bridges connecting to various chains. | Additional native bridge with Ethereum alongside existing third-party bridges. |
+| **CELO Token** | Lived on the Celo L1. | Lives on Ethereum; CELO on L2 represents CELO bridged from Ethereum. |
+| **Blocks** | 5s long, 50M gas. | 1s long, 30M gas. |
+| **Extra Fields** | — | Withdrawals & withdrawalsRoot, blobGasUsed & excessBlobGas, parentBeaconBlockRoot. |
+| **Removed Fields** | — | Randomness, epochSnarkData. |
+| **Validator Duties**| Operated the consensus protocol. | Validators will temporarily operate community RPC nodes. |
+| **Validator Rewards**| Distributed at epoch blocks. | Distributed periodically via smart contract execution. |
+| **Sequencing** | Determined by the output of consensus, run by validators. | Initially handled by a centralized sequencer with plans for decentralized sequencing later. |
+| **Precompiles** | — | All Celo precompiles removed except for the transfer precompile which supports token duality. |
+| **EIP1559** | Governable implementation on-chain. | Upgraded implementation with modified parameters across networks. |
+| **Hardforks** | — | Cel2 hardfork for transition to L2 alongside other op-stack hardforks. |
+| **Transactions** | — | Deprecated transactions include Type 0 with feeCurrency field and Type 124. |
+| **Finality** | One block finality, instantaneous once block is produced. | Finality depends on trust in sequencer, batcher, proposer, and eigenDA, or ultimately on Ethereum. |
+
+For more detailed technical changes, see [Celo's L2 Migration Documentation](https://specs.celo.org/l2_migration.html).
+
+## Important Dates
+
+:::note
+These dates are subject to change. This documentation will be continuously updated as new dates become available.
+:::
+
+#### Early July, 2024: Dango L2 Testnet Launch
+
+The Dango Testnet announced on the 7th of July 2024, Celo’s first L2 public test network, went live. Dango allowed developers and infrastructure providers to familiarize themselves with the L2 environment. It was shut down on the 9th of October 2024.
+
+#### 26th September, 2024: Alfajores L2 Testnet Launch
+
+The Celo L2 testnet, Alfajores, went live! This provides a testing environment for node operators and developers to ensure compatibility before the Mainnet launch.
+
+#### October 2024: Code Freeze and Audits
+
+The core dev team froze all feature development by mid-October and underwent a thorough external audit. The result is available at https://celo.org/audits.
+
+#### 20th February, 2025: Baklava L2 Testnet Launch
+
+Using the final audited release, the Celo validator community will perform a dry run of the L2 upgrade on the Baklava network.
+
+#### 26th March, 2025 (3:00 AM UTC): Celo L2 Mainnet Launch
+
+Following a successful Baklava upgrade, the Celo L2 Mainnet will officially go live. All nodes must be updated by this time to avoid disruption.
+
+## Useful Links
+
+* [Layer 2 Specification](https://specs.celo.org/root.html)
+* [Node Operator Guide](./operators/overview.md)
+* [What's Changed?](./whats-changed/overview.md)
+* [Cel2 Code](https://github.com/celo-org/optimism)
+* [FAQ](/cel2/faq)
diff --git a/docs/cel2/notices/day-1-partners.md b/docs/cel2/notices/day-1-partners.md
new file mode 100644
index 0000000000..7c0d4ba2b7
--- /dev/null
+++ b/docs/cel2/notices/day-1-partners.md
@@ -0,0 +1,45 @@
+# Celo L2 Mainnet Day 1 Partners
+
+Day 1 partners are **Node Providers, RPC Providers, Indexers, Bridges and Exchanges** that have committed to upgrading within **2 hours** of the first L2 block.
+These partners ensure network stability and seamless user experience from the moment the upgrade goes live.
+
+Below is the list of confirmed Day 1 partners:
+
+### Node and RPC Providers
+- Forno
+- Quicknode
+- Ankr
+- Infura
+- The Graph
+- Tatum
+- Thirdweb
+- DRPC
+- Nirvana Labs
+- Pokt
+
+### Indexers
+- Blockscout
+- Celoscan
+
+### Bridges
+- Hyperlane
+- Superbridge
+- LayerZero
+- Wormhole
+
+### Exchanges
+- Coinbase
+- Binance
+- Kraken
+- Bitfinex
+- Anchorage
+- Ubeswap
+- Upbit
+
+We appreciate the commitment of these partners in supporting a seamless and successful launch!
+
+---
+
+### Become a Day 1 Partner
+If you are interested in becoming a **Day 1 partner**, please fill out this form:
+[**Apply Here**](https://docs.google.com/forms/d/e/1FAIpQLScFhKXF08dQON9N58iNq7H1xrZ0URrFozUZOFKwXj7uXjg2dg/viewform?usp=dialog)
diff --git a/docs/cel2/notices/l2-migration.md b/docs/cel2/notices/l2-migration.md
new file mode 100644
index 0000000000..0389d88d6f
--- /dev/null
+++ b/docs/cel2/notices/l2-migration.md
@@ -0,0 +1,115 @@
+# Preparing for the L2 migration
+
+:::info
+This page will be kept updated with key information about the hardfork.
+
+* The Alfajores testnet has been migrated on block **26384000**, September 26, 2024.
+* The Baklava testnet has been migrated on block **28308600**, February 20, 2025.
+* Mainnet will be migrated on block **31056500**, March 26, 2025, 3:00 AM UTC.
+
+:::
+
+Node operators should review this page along with [Migrating a Celo L1 Node](../operators/migrate-node.md) and [Running a Celo Node](../operators/run-node.md).
+
+The two main steps to prepare for the hardfork are
+
+1. Upgrading L1 nodes
+2. Running a pre-migration (Or choosing to use `snap` sync to start your L2 node, in which case no migrations are needed. See [Running a Celo Node](../operators/run-node.md).)
+
+## Upgrade L1 nodes
+
+Prior to the L2 hardfork, all node operators must upgrade their existing L1 (`celo-blockchain`) nodes to version [v1.8.9](https://github.com/celo-org/celo-blockchain/releases/tag/v1.8.9). This release defines hardfork block numbers such that nodes will stop producing or accepting blocks immediately before the hardfork.
+
+## Run a pre-migration
+
+Note that you may choose to start an L2 node from scratch using `snap` sync, in which case you don't need to run any data migrations. See [Running a Celo Node](../operators/run-node.md) for more information.
+
+Node operators who plan to migrate their pre-hardfork data to an L2 node are strongly encouraged to run a pre-migration ~1-2 days before the hardfork. This will migrate the majority of data and minimize downtime during the full migration. To learn more about the migration process and tooling, see [Migrating a Celo L1 Node](../operators/migrate-node.md).
+
+:::warning
+**Migrating archive data is not recommended.**
+
+Both the pre-migration and full migration must be run on full node data. If you only have Celo archive nodes, we recommend syncing a full node in preparation for the L2 hardfork. You should not migrate archive data even if you plan to run an L2 archive node. See [Running an archive node](../operators/run-node.md#running-an-archive-node) for more information.
+:::
+
+We recommend running the migration script (which includes commands for both the pre-migration and full migration) using [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose). If necessary, the script can also be run from source.
+
+### Run pre-migration with docker
+
+1. Stop your node.
+2. Pull the latest version of [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) and `cd` into the root of the project.
+
+ ```bash
+ git clone https://github.com/celo-org/celo-l2-node-docker-compose.git
+ cd celo-l2-node-docker-compose
+ ```
+
+3. Run pre-migration command, where `` is one of `alfajores`, `baklava`, or `mainnet`.
+
+ :::warning
+ Please ensure your node is stopped before running the migration tool.
+ :::
+
+ ```bash
+ ./migrate pre []
+ ```
+
+ If a destination datadir is specified, ensure the value of `DATADIR_PATH` inside `.env` is updated to match when you start your node.
+
+### Run pre-migration from source
+
+If you'd like to run the pre-migration manually without Docker, you can do so by running the migration tool from source:
+
+1. Stop your node.
+
+2. Checkout and build migration script.
+
+ ```bash
+ git clone https://github.com/celo-org/optimism.git
+ cd optimism/op-chain-ops
+ make celo-migrate
+ ```
+
+3. Run the pre-migration.
+
+ ```bash
+ go run ./cmd/celo-migrate pre \
+ --old-db /celo/chaindata \
+ --new-db /geth/chaindata
+ ```
+
+Once the pre-migration is complete, you can start your L1 node again. The pre-migration may take several hours to complete.
+
+#### Notes
+
+* You can repeat this process as many times as needed leading up to the full migration. We highly recommend pre-migrating at least once for mainnet, as migrating mainnet chaindata can take over 2 hours.
+
+* When you run the full migration, you must use the same destination datadir in order to benefit from the pre-migration.
+
+* The full migration will also run a pre-migration, so you will see logs from the pre-migration when running the full migration even if you already ran a pre-migration.
+
+## Key Information
+
+### Alfajores testnet
+
+* Block number: `26384000`
+* Date: September 26, 2024
+* Minimum `celo-blockchain` version: [v1.8.7](https://github.com/celo-org/celo-blockchain/releases/tag/v1.8.7)
+* `op-geth`: [celo-v2.0.0-rc4](https://github.com/celo-org/op-geth/releases/tag/celo-v2.0.0-rc4)
+* `op-node`: [celo-v2.0.0-rc4](https://github.com/celo-org/optimism/releases/tag/celo-v2.0.0-rc4)
+
+### Baklava testnet
+
+* Block number: `28308600`
+* Date: February 20, 2025
+* Minimum `celo-blockchain` version: [v1.8.8](https://github.com/celo-org/celo-blockchain/releases/tag/v1.8.8)
+* `op-geth`: [celo-v2.0.0-rc4](https://github.com/celo-org/op-geth/releases/tag/celo-v2.0.0-rc4)
+* `op-node`: [celo-v2.0.0-rc4](https://github.com/celo-org/optimism/releases/tag/celo-v2.0.0-rc4)
+
+### Mainnet
+
+* Block number: `31056500`
+* Date: March 26, 2025 (3:00 AM UTC)
+* Minimum `celo-blockchain` version: [v1.8.9](https://github.com/celo-org/celo-blockchain/releases/tag/v1.8.9)
+* `op-geth`: [celo-v2.0.0](https://github.com/celo-org/op-geth/releases/tag/celo-v2.0.0)
+* `op-node`: [celo-v2.0.0](https://github.com/celo-org/optimism/releases/tag/celo-v2.0.0)
diff --git a/docs/cel2/notices/pectra-upgrade.md b/docs/cel2/notices/pectra-upgrade.md
new file mode 100644
index 0000000000..1e772027b7
--- /dev/null
+++ b/docs/cel2/notices/pectra-upgrade.md
@@ -0,0 +1,38 @@
+# Preparing for Pectra L1 hardfork
+
+This page outlines breaking changes related to the Ethereum Pectra (Prague-Electra) L1 hard fork for node operators on the Celo Alfajores & Baklava L2 Testnets. Please also have a look at the [Optimism Pectra update information](https://docs.optimism.io/notices/pectra-changes).
+
+The Pectra upgrade for Holesky L1 was activated on slot: 3710976 (Mon, Feb 24 at 21:55:12 UTC).
+
+## Testnet issues
+
+Holesky, the L1 chain that both Alfajores and Baklava testnets use, suffered from a chain split shortly after the Pectra hardfork. The network now produces blocks again, but is not yet finalizing again. For more information see the [Post-Mortem](https://github.com/ethereum/pm/blob/master/Pectra/holesky-postmortem.md).
+
+This chain split caused problems on the Celo testnets. Those problems have been solved and both testnets work as expected.
+
+Until Holesky finalizes again, the testnet sequencers will not use finalized blocks as the L1 origin. Please let us know if you run into any problems.
+
+## For node operators on Alfajores
+
+Node operators will need to upgrade to the respective releases before the activation dates.
+
+The following versions are necessary for every node operator:
+
+* `op-geth`: [celo-v2.0.0-rc4](https://github.com/celo-org/op-geth/releases/tag/celo-v2.0.0-rc4)
+* `op-node`: [celo-v2.0.0-rc4](https://github.com/celo-org/optimism/releases/tag/celo-v2.0.0-rc4)
+
+### Breaking changes
+
+This version includes a fix which requires breaking changes to the configuration in `rollup.json`. You need to add the new `chain_op_config` field. You can do this by adding the following field to `rollup.json` or by downloading the [updated config](https://storage.googleapis.com/cel2-rollup-files/alfajores/rollup.json).
+
+```json
+"chain_op_config": {
+ "eip1559Elasticity": 5,
+ "eip1559Denominator": 400,
+ "eip1559DenominatorCanyon": 400
+}
+```
+
+## For node operators on Baklava
+
+The releases for the Baklava L2 upgrade already include the changes required for Pectra compatibility. Please follow the [L2 migration instructions](./l2-migration.md).
diff --git a/docs/cel2/operators/architecture.md b/docs/cel2/operators/architecture.md
new file mode 100644
index 0000000000..de07f0ea18
--- /dev/null
+++ b/docs/cel2/operators/architecture.md
@@ -0,0 +1,16 @@
+# Node architecture
+
+This page reviews node architecture for all nodes running on the Celo network. All L2 Celo nodes are composed of two core software services, the Rollup Node and the Execution Client. Celo also optionally supports a third component, Legacy L1 Celo, that can serve stateful queries for blocks and transactions created before the L2 Upgrade.
+
+## Rollup node
+
+The Rollup Node is responsible for deriving L2 block payloads from L1 data and passing those payloads to the Execution Client. The Rollup Node can also optionally participate in a peer-to-peer network to receive blocks directly from the Sequencer before those blocks are submitted to L1. The Rollup Node is largely analogous to a [consensus client](https://ethereum.org/en/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) in Ethereum.
+
+## Execution client
+
+The Execution Client is responsible for executing the block payloads it receives from the Rollup Node over JSON-RPC via the standard [Ethereum Engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md#engine-api----common-definitions). The Execution Client exposes the standard JSON-RPC API that Ethereum developers are familiar with, and can be used to query blockchain data and submit transactions to the network. The Execution Client is largely analogous to an [execution client](https://ethereum.org/en/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) in Ethereum.
+
+## Next steps
+
+- To get your node up and running, start with the [operator guide](run-node.md).
+- If you've already got a Celo node up and running, check out [how to migrate it to a L2 node](migrate-node.md).
diff --git a/docs/cel2/operators/community-rpc-node.md b/docs/cel2/operators/community-rpc-node.md
new file mode 100644
index 0000000000..f28fb7e57f
--- /dev/null
+++ b/docs/cel2/operators/community-rpc-node.md
@@ -0,0 +1,60 @@
+# Running a Community RPC Node
+
+After Celo Mainnet transitions to L2, validators that are eligible, registered and elected must run RPC nodes in order to be eligible for rewards.
+
+## Registering
+
+To register as a validator, follow [the instructions](/validator/run/mainnet#registering-as-a-validator). The only difference is that BLS signatures are not required.
+
+## Run a node
+
+See the guides for [running a node](run-node.md) or the guide on [how to migrate a L1 node](migrate-node.md).
+
+## Register as RPC provider
+
+To register as a RPC provider, a public HTTPS URL needs to be registered on-chain, in a signed metadata file in the Celo Account.
+
+:::info
+
+Make sure to use [Celo CLI](/cli/index.md) at version `6.1.0` or later
+
+:::
+
+The `--from` flag in the CLI can either be the validator account itself, or the validator signer.
+
+1. Create a new metadata file. If, instead, you want to update an existing one, download it instead of creating it.
+
+ ```bash
+ $ celocli account:create-metadata ./metadata.json --from $VALIDATOR_SIGNER
+ ```
+
+2. Register your public RPC URL:
+
+ ```bash
+ $ celocli account:claim-rpc-url ./metadata.json --from $VALIDATOR_SIGNER --rpcUrl $RPC_URL
+ ```
+
+3. Upload this metadata file to a publicly available URL with high availability.
+4. Now link this URL to the validator Celo account:
+
+ ```bash
+ $ celocli account:register-metadata --url $METADATA_URL --from $ACCOUNT_ADDRESS
+ ```
+
+ :::info
+
+ If your account is a [ReleaseGold contract](/holder/manage/release-gold), you should use the command `$ celocli releasecelo:set-account`. Docs can be found [here](/cli/releasecelo#celocli-releaseceloset-account).
+
+ :::
+
+5. Verify that the metadata registration was successful by retrieving it:
+
+ ```bash
+ $ celocli account:get-metadata $ACCOUNT_ADDRESS
+ ```
+
+6. To list all registered RPC URLs:
+
+ ```bash
+ $ celocli network:rpc-urls [--node $NETWORK]
+ ```
diff --git a/docs/cel2/operators/migrate-node.md b/docs/cel2/operators/migrate-node.md
new file mode 100644
index 0000000000..b99d263b44
--- /dev/null
+++ b/docs/cel2/operators/migrate-node.md
@@ -0,0 +1,187 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Migrating a Celo L1 node
+
+This guide is designed to help Celo L1 node operators migrate their nodes to the Celo L2. Specifically, it describes how to run the [migration tool](https://github.com/celo-org/optimism/tree/celo-rebase-12/op-chain-ops/cmd/celo-migrate) in order to transform a pre-hardfork db snapshot into a format from which a Celo L2 node can `full` sync.
+
+If you want to run a fresh L2 node, you may skip to the [node operator guide](run-node.md) for instructions on how to `snap` sync from an empty datadir.
+
+If you would like to use `full` sync but don't want to migrate your own pre-hardfork datadir, you can also download a migrated datadir from the links provided in the [Network Config & Assets](run-node.md#network-config--assets) section. Note that migrated datadirs won't be available until after the hardfork. For minimal downtime, we recommend migrating your own data for the hardfork.
+
+:::note
+The terms L1 and pre-hardfork are used interchangeably to reference Celo before the L2 transition. L1 does not refer to Ethereum in this document.
+:::
+
+## Migration Overview
+
+Migrating a pre-hardfork datadir involves these high-level steps:
+
+1. Upgrade your L1 node to the [latest client release](run-node.md#network-config--assets) so it will stop producing blocks at the hardfork.
+2. 1-2 days before the hardfork, stop your node and run a pre-migration to migrate the majority of data. This is not required, but is highly recommended for minimizing downtime. See [Preparing for the L2 migration](../notices/l2-migration.md).
+3. Restart your node and wait for the hardfork.
+4. Shut down your node once the hardfork block number is reached.
+5. Run the migration tool to migrate your L1 datadir and produce the hardfork block.
+6. Launch your L2 node with the migrated datadir.
+
+### Important Notes
+
+- The migration tool can be run multiple times as the L1 chain data grows and will continue migrating from where it last left off.
+
+- All migrations writing to a given destination datadir must use the same node's source datadir. That is, you should not run the pre-migration with a db snapshot from node A and then run the full migration with a db snapshot from node B.
+
+- Your node must be stopped before the migration tool is run, even once it has reached the hardfork.
+
+- You should not attempt to migrate archive node data, only full node data.
+
+- While the pre-migration can be run multiple times and will get faster each time, you should avoid running the full migration more than once as it will be slower the second time.
+
+## Before the hardfork
+
+There are some important steps node operators should take ahead of the L2 hardfork. These include upgrading to the [latest client release](run-node.md#network-config--assets) so that the L1 network will stop producing blocks at the hardfork, and __running a pre-migration 1-2 days before the hardfork__. If you have not yet read the [Preparing for the L2 migration](../notices/l2-migration.md) page, please do so before continuing.
+
+## Running the migration
+
+:::warning
+__It is not recommended to migrate from an L1 archive datadir.__
+
+If you only have an L1 archive node, we recommend syncing an L1 full node in preparation for the Mainnet migration. You can still run an L2 archive node after migrating from an L1 full node datadir. See [Running a Celo archive node](run-node.md#running-an-archive-node) for more.
+:::
+
+The full migration process constists of a pre-migration followed by some additional finalization steps, such as building the first L2 block. The pre-migration step will always run during a full migration, but will be significantly faster if a pre-migration has already been performed. See [Preparing for the L2 migration](../notices/l2-migration.md) for instructions on running a pre-migration 1-2 days ahead of the hardfork.
+
+Once the hardfork block number is reached, we recommend node operators migrate using [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose). Alternatively, the migration tool can be [run from source](#run-migration-from-source).
+
+### Hardware requirements
+
+- Make sure you have enough storage to accomodate 2x the pre-hardfork chaindata. Chaindata size can vary, so please double check your node.
+
+- We recommend using local storage for the source and destination datadirs.
+
+- 16GB+ RAM recommended
+
+### Run migration with docker
+
+To simplify migrating and running L2 nodes, Celo has created the [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) repo with all the necessary configuration files and docker compose templates. You can use it to migrate your L1 node as follows.
+
+1. Run a pre-migration 1-2 days before the hardfork. It may take 3 or more hours to migrate during the hardfork otherwise. See [Preparing for the L2 migration](../notices/l2-migration.md) for instructions.
+
+2. Once the hardfork block number is reached, stop your L1 node.
+
+3. Pull the latest version of [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) and `cd` into the root of the project.
+
+ ```bash
+ git clone https://github.com/celo-org/celo-l2-node-docker-compose.git
+ cd celo-l2-node-docker-compose
+ ```
+
+4. Run the full migration command, where `` is one of `alfajores`, `baklava`, or `mainnet`.
+
+ :::warning
+ Please ensure your node is stopped before running the migration tool.
+ :::
+
+ ```bash
+ ./migrate full []
+ ```
+
+ If a destination datadir is specified, ensure that `DATADIR_PATH` inside `.env` is updated to match when you start your node.
+
+### Run migration from source
+
+If you'd prefer not to use Docker, you can run the migration script directly from source:
+
+1. Run a pre-migration 1-2 days before the hardfork. It may take 3 or more hours to migrate during the hardfork otherwise. See [Preparing for the L2 migration](../notices/l2-migration.md) for instructions.
+
+2. Once the hardfork block number is reached, stop your L1 node.
+
+3. Checkout and build the migration script
+
+ ```bash
+ git clone https://github.com/celo-org/optimism.git
+ cd optimism/op-chain-ops
+ make celo-migrate
+ ```
+
+4. Run the full migration
+
+
+
+ ```bash
+ go run ./cmd/celo-migrate full \
+ --deploy-config \
+ --l1-deployments \
+ --l1-rpc \
+ --l2-allocs \
+ --outfile.rollup-config \
+ --outfile.genesis \
+ --migration-block-number \
+ --old-db /celo/chaindata \
+ --new-db /geth/chaindata \
+ --l1-beacon-rpc=
+ ```
+
+ Note the L1-beacon-RPC-URL must support querying historical `finality_checkpoints`. We are using https://ethereum-beacon-api.publicnode.com in [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose).
+
+ You can check support for historical `finality_checkpoints` by retrieving some suitably old finality_checkpoints, for example slot 5000000.
+ ```
+ curl https://ethereum-beacon-api.publicnode.com/eth/v1/beacon/states/5000000/finality_checkpoints | jq
+ ```
+
+
+ ```bash
+ go run ./cmd/celo-migrate full \
+ --deploy-config \
+ --l1-deployments \
+ --l1-rpc \
+ --l2-allocs \
+ --outfile.rollup-config \
+ --outfile.genesis \
+ --migration-block-number \
+ --old-db /celo/chaindata \
+ --new-db /geth/chaindata
+ ```
+
+
+
+ You can find the required input artifacts posted in the [Network config & Assets](./run-node.md#network-config--assets) section once they're available.
+
+ We recommend using the [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) codebase as an additional reference for running the migration from source.
+
+The full migration process will take at least 5 minutes to complete for mainnet, assuming most data has been pre-migrated. If no pre-migration was performed it could take several hours.
+
+Congrats! Your datadir is now ready to use with a Celo L2 node. See [Running a Celo Node](run-node.md) for instructions on how to start your Celo L2 node.
+
+### Troubleshooting
+
+If you encounter difficulties during the migration that are not covered below, please reach out to our team. You can also checkout the `celo-l2-node-docker-compose` [README](https://github.com/celo-org/celo-l2-node-docker-compose/blob/30ee2c4ec2dacaff10aaba52e59969053c652f05/README.md#L1) and the `celo-migrate` [README](https://github.com/celo-org/optimism/blob/celo-rebase-12/op-chain-ops/cmd/celo-migrate/README.md) for more information on how the migration tooling works.
+
+#### Missing Data / DB continuity check failures
+
+Both the `pre` and `full` migration commands will first run a script to check whether the source db provided has any gaps in data. This check may fail with an error indicating that data is missing from your source db.
+
+To resolve this:
+
+- Try re-running the migration with a different source datadir if available.
+ - We will post a full pre-hardfork database snapshot in the [Network config & Assets](./run-node.md#network-config--assets) section shortly after the hardfork, but we recommend having your own backup datadir available as well.
+- Ensure the datadir is fully synced to just before the hardfork block.
+
+To check if a db has gaps, you can simply re-run the migration command which will automatically perform the check each time.
+
+If needed, you can also run the `check-db` script on its own as follows.
+
+1. Check out and build the latest version of the script in [celo optimism monorepo](https://github.com/celo-org/optimism).
+
+ ```bash
+ git clone https://github.com/celo-org/optimism
+ cd optimism/op-chain-ops
+ make celo-migrate
+ ```
+
+2. Run the script
+
+ ```bash
+ go run ./cmd/celo-migrate check-db --db-path [--fail-fast]
+ ```
+
+ This command takes in an optional `--fail-fast` flag that will make it exit at the first gap detected like it does when run via [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose). If the `--fail-fast` flag is not provided then the script will collect all the gaps it finds and print them out at the end.
diff --git a/docs/cel2/operators/overview.md b/docs/cel2/operators/overview.md
new file mode 100644
index 0000000000..29fe02b81b
--- /dev/null
+++ b/docs/cel2/operators/overview.md
@@ -0,0 +1,10 @@
+# Node operators & Validators
+
+While most applications should remain unaffected, node operators, validators, and RPC providers must ensure their systems are prepared for the transition to maintain seamless operations.
+
+See the following documents for more details:
+
+* [Celo L2 migration](../notices/l2-migration.md)
+* [Pectra upgrade for Alfajores](../notices/pectra-upgrade.md)
+
+See the guides for [running a node](./run-node.md) or the guide on [how to migrate a L1 node](./migrate-node.md).
diff --git a/docs/cel2/operators/run-node.md b/docs/cel2/operators/run-node.md
new file mode 100644
index 0000000000..253f7296f9
--- /dev/null
+++ b/docs/cel2/operators/run-node.md
@@ -0,0 +1,362 @@
+# Running a Celo node
+
+This guide is designed to help node operators run a Celo L2 node, and assumes you have already migrated data from a Celo L1 node or plan to `snap` sync from scratch. If you wish to migrate data from a Celo L1 node and have not yet done so, please see the [migration guide](migrate-node.md) before continuing.
+
+:::note
+This guide only covers L2 Celo. Currently, only the Alfajores and Baklava testnets have been hardforked to L2 networks.
+:::
+
+## Recommended Hardware
+
+### Testnets (Alfajores and Baklava)
+
+- 16GB+ RAM
+- 500GB SSD (NVME Recommended)
+- 100mb/s+ Download
+
+### Mainnet
+
+- 16GB+ RAM
+- 1TB+ SSD (NVME Recommended)
+- 100mb/s+ Download
+
+:::warning
+Storage size requirements will increase over time, especially for archive nodes.
+
+If running an archive node, please make sure you also have enough storage for the legacy Celo L1 archive datadir. See [Running an archive node](#running-an-archive-node).
+:::
+
+## Run node with docker
+
+To simplify running nodes, Celo has created the [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) repo with all the necessary configuration files and docker compose templates to make migrating and running a Celo L2 node easy.
+
+See the [README](https://github.com/celo-org/celo-l2-node-docker-compose/blob/main/README.md) for instructions on installing docker and docker compose if needed.
+
+:::note
+If using Docker Desktop on MacOS you will most likely need to increase the virtual disk limit in order to accomodate the chaindata directory. This can be done by opening Docker Desktop, going to Settings -> Resources -> Advanced and increasing the disk image size.
+:::
+
+For node operators interested in using Kubernetes, we recommend using [Kompose](https://kompose.io) to convert the docker compose template to Kubernetes helm charts.
+
+### Running a full node
+
+Follow these steps to run a full node. If you would like to run an archive node, see [below](#running-an-archive-node).
+
+1. Pull the latest version of [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) and `cd` into the root of the project.
+
+ ```bash
+ git clone https://github.com/celo-org/celo-l2-node-docker-compose.git
+ cd celo-l2-node-docker-compose
+ ```
+
+2. Configure your `.env` file.
+
+ __Copy default configurations__
+
+ The [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) repo contains a `.env` file for each Celo network (`alfajores`, `baklava`, and `mainnet`). Start by copying the default configuration for the appropriate network.
+
+ ```bash
+ export NETWORK=
+ cp $NETWORK.env .env
+ ```
+
+ __Configure sync mode__
+
+ By default, [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) will start your node with `snap` sync. This allows your node to start without a migrated L1 datadir, as pre-hardfork block data will be automatically downloaded from peers during syncing. This is the easiest way to start an L2 node.
+
+ Alternatively, you can start your node with `full` sync if you have a migrated L1 datadir. For instructions on obtaining a migrated L1 datadir, please see [Migrating an L1 Node](migrate-node.md).
+
+ To use `full` sync, configure `.env` as follows:
+
+ ```md
+ OP_GETH__SYNCMODE=full
+ DATADIR_PATH=
+ ```
+
+ __Configure node type__
+
+ Your node will run as a `full` node by default, but can also be configured as an `archive` node if you wish to preserve access to all historical state. Note that `full` has a different meaning here than in the context of syncing. See [Running an archive node](#running-an-archive-node) for more information.
+
+3. Start the node.
+
+ ```bash
+ docker-compose up -d --build
+ ```
+
+4. Check the progress of the node as it syncs.
+
+ ```bash
+ docker-compose logs -n 50 -f op-geth
+ ```
+
+ This will display and follow the last 50 lines of logs. In a syncing node, you would expect to see `Syncing beacon headers downloaded=...` where the downloaded number is increasing and later lines such as `"Syncing: chain download in progress","synced":"21.07%"` where the percentage is increasing. Once the percentage reaches 100%, the node should be synced.
+
+5. Check that node is fully synced.
+
+ Once the node is fully synced, you can validate that it's following the network by fetching the current block number via the RPC API and seeing that it's increasing as expected.
+
+ ```bash
+ cast block-number --rpc-url http://localhost:9993
+ ```
+
+ Note that until fully synced, the RPC API will return 0 for the head block number.
+
+### Running an archive node
+
+__Even if you plan to run an archive node, we do not recommend running the migration tool on archive node data. If you only have L1 archive nodes, we recommend syncing an L1 full node for the Mainnet migration.__
+
+The L2 execution client cannot use pre-hardfork state, so migrating an archive datadir will copy large amounts of data unnecessarily. The migration script will also run slowly and consume lots of memory when run on archive data, regardless of whether a pre-migration was performed. For these reasons, we recommend only running the migration script on a full node L1 datadir, even if you plan to run an L2 archive node.
+
+#### Overview
+
+To run an L2 archive node, you should migrate from an L1 full node datadir but still start the L2 execution client in archive mode. This will allow the node to accept RPC requests that require archive data, even though it doesn't have any archive data from before the hardfork. You can then configure your node to forward requests for pre-hardfork archive data to a legacy archive node.
+
+#### Instructions
+
+Here are step-by-step instructions for using [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) to run an archive node:
+
+:::note
+These instructions assume you already have
+
+1. A migrated full node datadir that has been synced to the migration block. See [Migrating an L1 Node](migrate-node.md) if you do not have this.
+2. A non-migrated L1 archive node datadir. Again, please do not attempt to migrate an archive datadir.
+
+Please ensure neither datadir is being used by a running node before proceeding.
+:::
+
+1. Pull the latest version of [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) and `cd` into the root of the project.
+
+ ```bash
+ git clone https://github.com/celo-org/celo-l2-node-docker-compose.git
+ cd celo-l2-node-docker-compose
+ ```
+
+2. Configure your `.env` file.
+
+ __Copy default configurations__
+
+ The [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) repo contains a `.env` file for each Celo network (`alfajores`, `baklava`, and `mainnet`). Start by copying the default configuration for the appropriate network.
+
+ ```bash
+ export NETWORK=
+ cp $NETWORK.env .env
+ ```
+
+ __Configure sync mode__
+
+ By default, [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) will start your node with `snap` sync. While `archive` nodes can technically run with `snap` sync, they will only store archive data from the point that `snap` sync completes. This will leave a gap in the archive data after the hardfork, so we recommend running archive nodes with `full` sync and a migrated pre-hardfork datadir.
+
+ To use `full` sync, configure `.env` as follows:
+
+ ```md
+ OP_GETH__SYNCMODE=full
+ DATADIR_PATH=
+ ```
+
+ __Configure node type__
+
+ To enable `archive` mode, configure `.env` as follows:
+
+ ```md
+ NODE_TYPE=archive
+ ```
+
+ __Configure Historical RPC Service__
+
+ To handle RPC requests for pre-hardfork state and execution, an L2 archive node proxy out to a legacy archive node or "Historical RPC Service".
+
+ There are two ways to configure a Historical RPC Service for your archive node:
+
+ 1. You can supply a pre-hardfork archive datadir and have [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) start a legacy archive node for you. To do this, simply configure `.env` as follows:
+
+ ```md
+ HISTORICAL_RPC_DATADIR_PATH=
+ ```
+
+ When you start your L2 node, a legacy archive node will also start using the pre-hardfork archive datadir. Your L2 node will be configured to use the legacy archive node as its Historical RPC Service.
+
+ 2. If you would prefer to start the legacy archive node yourself, you can configure `.env` as follows:
+
+ ```md
+ OP_GETH__HISTORICAL_RPC=
+ ```
+
+ This will cause any value you set for `HISTORICAL_RPC_DATADIR_PATH` to be ignored, and the tool will not start a legacy archive node when it starts your L2 archive node.
+ Note that if you choose to run your own legacy archive node, you should do so with different flags than before the hardfork as the node will no longer be syncing blocks or communicating with other nodes. To see how we recommend re-starting a legacy archive node as a Historical RPC Service, see this [script](https://github.com/celo-org/celo-l2-node-docker-compose/blob/30ee2c4ec2dacaff10aaba52e59969053c652f05/scripts/start-historical-rpc-node.sh#L19).
+
+3. Start the node(s).
+
+ ```bash
+ docker-compose up -d --build
+ ```
+
+4. Check the progress of your L2 archive node as it syncs.
+
+ ```bash
+ docker-compose logs -n 50 -f op-geth
+ ```
+
+ This will display and follow the last 50 lines of logs. In a syncing node, you would expect to see `Syncing beacon headers downloaded=...` where the downloaded number is increasing and later lines such as `"Syncing: chain download in progress","synced":"21.07%"` where the percentage is increasing. Once the percentage reaches 100%, the node should be synced.
+
+5. Check that node is fully synced.
+
+ Once the node is fully synced, you can validate that it's following the network by fetching the current block number via the RPC API and seeing that it's increasing as expected.
+
+ ```bash
+ cast block-number --rpc-url http://localhost:9993
+ ```
+
+ Note that until fully synced, the RPC API will return 0 for the head block number.
+
+6. Try querying historical state to test archive functionality.
+
+ ```bash
+ cast balance --block --rpc-url http://localhost:9993
+ ```
+
+## Building a node from source
+
+Docker images are the easiest way to run a Celo node, but you can always build your own node from source code. You might wish to do this if you want to run on a specific architecture or inspect the source code.
+
+The [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) codebase is still the best reference for how to run your nodes from source, and below you can find all the [Network config & Assets](#network-config--assets) needed to participate in the hardfork.
+
+Please reach out to our team on [Discord](https://chat.celo.org) in the [#celo-L2-support](https://discord.com/channels/600834479145353243/1286649605798367252) channel if you have any questions.
+
+## Network config & Assets
+
+### Mainnet
+
+:::note
+The `rollup.json` and `genesis.json` files are created during the migration and will be listed here once the migration has been finished.
+:::
+
+- [Rollup deploy config](https://storage.googleapis.com/cel2-rollup-files/celo/config.json)
+- [L1 contract addresses](https://storage.googleapis.com/cel2-rollup-files/celo/deployment-l1.json)
+- [L2 allocs](https://storage.googleapis.com/cel2-rollup-files/celo/l2-allocs.json)
+- P2P peers
+ - op-geth bootnode/peers, to be used with op-geth `--bootnodes` flag:
+
+ ```text
+ enode://28f4fcb7f38c1b012087f7aef25dcb0a1257ccf1cdc4caa88584dc25416129069b514908c8cead5d0105cb0041dd65cd4ee185ae0d379a586fb07b1447e9de38@34.169.39.223:30303
+ enode://a9077c3e030206954c5c7f22cc16a32cb5013112aa8985e3575fadda7884a508384e1e63c077b7d9fcb4a15c716465d8585567f047c564ada2e823145591e444@34.169.212.31:30303
+ enode://029b007a7a56acbaa8ea50ec62cda279484bf3843fae1646f690566f784aca50e7d732a9a0530f0541e5ed82ba9bf2a4e21b9021559c5b8b527b91c9c7a38579@34.82.139.199:30303
+ enode://f3c96b73a5772c5efb48d5a33bf193e58080d826ba7f03e9d5bdef20c0634a4f83475add92ab6313b7a24aa4f729689efb36f5093e5d527bb25e823f8a377224@34.82.84.247:30303
+ enode://daa5ad65d16bcb0967cf478d9f20544bf1b6de617634e452dff7b947279f41f408b548261d62483f2034d237f61cbcf92a83fc992dbae884156f28ce68533205@34.168.45.168:30303
+ enode://c79d596d77268387e599695d23e941c14c220745052ea6642a71ef7df31a13874cb7f2ce2ecf5a8a458cfc9b5d9219ce3e8bc6e5c279656177579605a5533c4f@35.247.32.229:30303
+ enode://4151336075dd08eb6c75bfd63855e8a4bd6fd0f91ae4a81b14930f2671e16aee55495c139380c16e1094a49691875e69e40a3a5e2b4960c7859e7eb5745f9387@35.205.149.224:30303
+ enode://ab999db751265c714b171344de1972ed74348162de465a0444f56e50b8cfd048725b213ba1fe48c15e3dfb0638e685ea9a21b8447a54eb2962c6768f43018e5c@34.79.3.199:30303
+ enode://9d86d92fb38a429330546fe1aefce264e1f55c5d40249b63153e7df744005fa3c1e2da295e307041fd30ab1c618715f362c932c28715bc20bed7ae4fc76dea81@34.77.144.164:30303
+ enode://c82c31f21dd5bbb8dc35686ff67a4353382b4017c9ec7660a383ccb5b8e3b04c6d7aefe71203e550382f6f892795728570f8190afd885efcb7b78fa398608699@34.76.202.74:30303
+ enode://3bad5f57ad8de6541f02e36d806b87e7e9ca6d533c956e89a56b3054ae85d608784f2cd948dc685f7d6bbd5a2f6dd1a23cc03e529ea370dd72d880864a2af6a3@104.199.93.87:30303
+ enode://1decf3b8b9a0d0b8332d15218f3bf0ceb9606b0efe18f352c51effc14bbf1f4f3f46711e1d460230cb361302ceaad2be48b5b187ad946e50d729b34e463268d2@35.240.26.148:30303
+ ```
+
+ - op-node static peers, to be used with op-node `--p2p.static` flag:
+
+ ```text
+ /ip4/34.83.180.111/tcp/9222/p2p/16Uiu2HAkxBYxPd4eDFJzwm84XPzymkXud847vu65eju4UCDRpDSM
+ /ip4/34.169.135.64/tcp/9222/p2p/16Uiu2HAm6oVW1YeKheAuhnJSySnVvbXZ5gXL4g36XrWb1imF9K3m
+ /ip4/34.169.201.36/tcp/9222/p2p/16Uiu2HAmCqAFUoq72tjGJfCkkzHoNbjTjshjEED4kWtRKMSxcMgb
+ /ip4/34.83.127.51/tcp/9222/p2p/16Uiu2HAmBqKBoxkk95CsZiXQmQHv9WMiHXU4Di6wzFuYEKo1i7dg
+ /ip4/35.227.175.30/tcp/9222/p2p/16Uiu2HAmTNVkin4vogHsqwJwShUkHtx48aDoxygGwgp9Tv5zQWTM
+ /ip4/34.82.198.98/tcp/9222/p2p/16Uiu2HAmS6CeFPUXMztLf4VDh9NLbauuXLSYx9YkXfyiscqoxsKt
+ /ip4/34.38.181.223/tcp/9222/p2p/16Uiu2HAmH3xfYGjaJDw6sxa8ds3bVwMYLZRpPzpTtTrYq7G4nZs3
+ /ip4/34.76.38.6/tcp/9222/p2p/16Uiu2HAm6yXZ9oRTSJfZzXe8wXJ165X3pfzAKdLB9sa27eRZgTwD
+ /ip4/35.187.106.54/tcp/9222/p2p/16Uiu2HAmPFucuARxzAqtXcD3evFoutKh7tSmfQCxwPKUXfkoyaqY
+ /ip4/34.76.16.183/tcp/9222/p2p/16Uiu2HAmS8NybNYedzHf4nuFfqyCDH9xiMpgMWxctMtau8dTUxeP
+ /ip4/104.199.39.59/tcp/9222/p2p/16Uiu2HAmGfwjf1XPikWYDN4NFpTBuuvs6C7eF2iyyKvvjK2MGrVM
+ /ip4/34.140.117.79/tcp/9222/p2p/16Uiu2HAkwSVN7WHohhoE1sh932y2q3Pv7AFiSugM8K6iFZLALq66
+ ```
+
+- Container images:
+ - [Celo L1 client](https://us-docker.pkg.dev/celo-org/us.gcr.io/geth-all:1.8.9)
+ - [op-geth](https://us-west1-docker.pkg.dev/devopsre/celo-blockchain-public/op-geth:celo-v2.0.0)
+ - [op-node](https://us-west1-docker.pkg.dev/devopsre/celo-blockchain-public/op-node:celo-v2.0.0)
+ - [eigenda-proxy](https://ghcr.io/layr-labs/eigenda-proxy:v1.6.4)
+
+### Alfajores
+
+- [Full migrated chaindata](https://storage.googleapis.com/cel2-rollup-files/alfajores/alfajores-migrated-datadir.tar.zst)
+- [Rollup deploy config](https://storage.googleapis.com/cel2-rollup-files/alfajores/config.json)
+- [L1 contract addresses](https://storage.googleapis.com/cel2-rollup-files/alfajores/deployment-l1.json)
+- [L2 allocs](https://storage.googleapis.com/cel2-rollup-files/alfajores/l2-allocs.json)
+- [rollup.json](https://storage.googleapis.com/cel2-rollup-files/alfajores/rollup.json)
+- [Genesis](https://storage.googleapis.com/cel2-rollup-files/alfajores/genesis.json) used for snap syncing
+- P2P peers:
+ - op-geth bootnode/peers, to be used with op-geth `--bootnodes` flag:
+
+ ```text
+ enode://ac0f42fa46f8cc10bd02a103894d71d495537465133e7c442bc02dc76721a5f41761cc2d8c69e7ba1b33e14e28f516436864d3e0836e2dcdaf032387f72447dd@34.83.164.192:30303
+ enode://596002969b8b269a4fa34b4709b9600b64201e7d02e2f5f1350affd021b0cbda6ce2b913ebe24f0fb1edcf66b6c730a8a3b02cd940f4de995f73d3b290a0fc92@34.82.177.77:30303
+ enode://3619455064ef1ce667171bba1df80cfd4c097f018cf0205aaad496f0d509611b7c40396893d9e490ee390cd098888279e177a4d9bb09c58387bb0a6031d237f1@34.19.90.27:30303
+ enode://e3c54db6004a92d4ee87504f073f3234a25759b485274cc224037e3e5ee792f3b482c3f4fffcb764af6e1859a1aea9710b71e1991e32c1dee7f40352124bb182@35.233.249.87:30303
+ enode://674410b34fd54c8406a4f945292b96111688d4bab49aecdc34b4f1b346891f4673dcb03ed44c38ab467ef7bec0b20f6031ad88aa1d35ce1333b343d00fa19fb1@34.168.43.76:30303
+ ```
+
+ - op-node static peers, to be used with op-node `--p2p.static` flag:
+
+ ```text
+ /ip4/35.197.25.52/tcp/9222/p2p/16Uiu2HAmQEdyLRSAVZDr5SqbJ1RnKmNDhtQJcEKmemrVxe4FxKwR
+ /ip4/34.105.22.4/tcp/9222/p2p/16Uiu2HAm1SZBDSugT5MMu7vBY8auDgfZFNhoDeXPLc9Me5FsAxwT
+ /ip4/34.83.209.168/tcp/9222/p2p/16Uiu2HAmGJAiUX6HLSo4nLh8T984qxzokwL23cVsYuNZy2SrK7C6
+ /ip4/34.83.214.149/tcp/9222/p2p/16Uiu2HAmAko2Kr3eAjM7tnshtEhYrxQYfKUvN2kwiygeFoBAoi8S
+ /ip4/34.169.5.52/tcp/9222/p2p/16Uiu2HAmKc6YKHzYgsjBDaj36uAufxpgZFgrzDqVBt6zTPwdhhJD
+ ```
+
+- Container images:
+ - [Celo L1 client](https://us-docker.pkg.dev/celo-org/us.gcr.io/geth-all:1.8.7)
+ - [op-geth](https://us-west1-docker.pkg.dev/devopsre/celo-blockchain-public/op-geth:celo-v2.0.0-rc3)
+ - [op-node](https://us-west1-docker.pkg.dev/devopsre/celo-blockchain-public/op-node:celo-v2.0.0-rc3)
+ - [eigenda-proxy](https://ghcr.io/layr-labs/eigenda-proxy:v1.6.4)
+
+### Baklava
+
+- [Final Celo L1 chaindata](https://storage.googleapis.com/cel2-rollup-files/baklava/baklava-l1-final.tar.zst)
+- [Full migrated chaindata](https://storage.googleapis.com/cel2-rollup-files/baklava/baklava-migrated-datadir.tar.zst)
+- [Rollup deploy config](https://storage.googleapis.com/cel2-rollup-files/baklava/config.json)
+- [L1 contract addresses](https://storage.googleapis.com/cel2-rollup-files/baklava/deployment-l1.json)
+- [L2 allocs](https://storage.googleapis.com/cel2-rollup-files/baklava/l2-allocs.json)
+- [rollup.json](https://storage.googleapis.com/cel2-rollup-files/baklava/rollup.json)
+- [Genesis](https://storage.googleapis.com/cel2-rollup-files/baklava/genesis.json) used for snap syncing
+- P2P peers:
+ - op-geth bootnode/peers, to be used with op-geth `--bootnodes` flag:
+
+ ```text
+ enode://6017c373a4151250e166ee7205b78cf845caff6a2003b3be38af8a09a569e413e31b21667d38a065f747a3662aec4920f122ad1bf1d46605cacf2d3d19f0ff5b@34.19.52.198:30303
+ enode://e0ab5ed2071b0ea0d57a52e3cd3da7c97db1a0754e00e91a32a1ca9dab6bf040fa1dd8775e8d6812a557d75760b1b90d18a8d69cbf8cfc2b7acdacf0b47fce96@34.168.70.112:30303
+ enode://b6d21edf251da32ffc1527092045ad3beba435f8ba27373dba8ce35f3ee54a411dc8327b57ebce9dc5c53e29825ea9e62356289a849fc4a048cce64da771aed8@34.82.194.102:30303
+ enode://339acdcbc3961b11f5458bab3c931e1bbb41548d9cea7692311db1543deac1f4a9efc1e6cff93f745865988d16bdc6bbb38cd59a8dde71bafd236eec0d5e0fea@34.82.75.77:30303
+ enode://616429f584575f8da463c18e5e2d38ec028b95446bffd607ebf8ac3d2dd3bbe9b859c91efbbbea6cf51ad78fb0d5db178f66ca57e647bd46bfe6692cc06127e9@34.53.24.17:30303
+ ```
+
+ - op-node static peers, to be used with op-node `--p2p.static` flag:
+
+ ```text
+ /ip4/34.105.121.84/tcp/9222/p2p/16Uiu2HAmK86WJyCXu8j9vHa2AbEDRmJe8DfzAaHPVsVEhnPvq3cE
+ /ip4/35.199.167.200/tcp/9222/p2p/16Uiu2HAmAYgs8bWPgVoQmAR7jPDn1n2Gn83Y44LuBpkzJDPyVsqy
+ /ip4/34.145.111.30/tcp/9222/p2p/16Uiu2HAm7jL1h1hDUMAC4zpa6VwfVeF6ugF1BcaPMAHuAf176aGG
+ /ip4/35.233.246.129/tcp/9222/p2p/16Uiu2HAkxu7gWGs3ZGUpevwU74tuRvjoqAw2ZSEZNCvWaYrK6YkK
+ /ip4/34.127.45.21/tcp/9222/p2p/16Uiu2HAmKDAUxJftKBgi8sfD1kyVHHhqMy9Z6Ee4XYyQ7NhwmKgC
+ ```
+
+- Container images:
+ - [Celo L1 client](https://us-docker.pkg.dev/celo-org/us.gcr.io/geth-all:1.8.8)
+ - [op-geth](https://us-west1-docker.pkg.dev/devopsre/celo-blockchain-public/op-geth:celo-v2.0.0-rc4)
+ - [op-node](https://us-west1-docker.pkg.dev/devopsre/celo-blockchain-public/op-node:celo-v2.0.0-rc4)
+ - [eigenda-proxy](https://ghcr.io/layr-labs/eigenda-proxy:v1.6.4)
+
+## Troubleshooting
+
+Please reach out to our team on [Discord](https://chat.celo.org) in the [#celo-L2-support](https://discord.com/channels/600834479145353243/1286649605798367252) channel if your problem is not answered below.
+
+### Transactions are not being executed when submitted to a node
+
+If your node is synced but transactions submitted to it are not executed, make sure the `--rollup.sequencerhttp` flag is correctly set.
+
+- Mainnet: `--rollup.sequencerhttp=https://cel2-sequencer.celo.org/`
+- Alfajores: `--rollup.sequencerhttp=https://sequencer.alfajores.celo-testnet.org`
+- Baklava: `--rollup.sequencerhttp=https://sequencer.baklava.celo-testnet.org`
+
+### Self-hosted public RPC does not retrieve transactions by hash
+
+If you are hosting a public RPC node, please make sure the flag `--history.transactions` is set to 0 in op-geth (i.e. `--history.transactions=0`), so all transactions are indexed. Otherwise, transactions will not be retrievable by hash.
diff --git a/docs/cel2/operators/validator-rpc-faq.md b/docs/cel2/operators/validator-rpc-faq.md
new file mode 100644
index 0000000000..4f0c7ebef9
--- /dev/null
+++ b/docs/cel2/operators/validator-rpc-faq.md
@@ -0,0 +1,45 @@
+---
+title: Community RPC Provider FAQ
+description: Frequently Asked Questions about Community RPC Providers
+---
+
+### After the migration, validators will no longer validate any blocks, but they’ll still hold CELO, receive delegations, and vote on governance, is that correct?
+
+Correct. Validators will move to become Community RPC providers.
+
+### Does migrating a validator node to an RPC node automatically transfers the stake? Is that enabled by the token duality mechanism?
+
+The status onchain does not change after the migration, only the kind of node you’re supposed to run will change. This is not related to token duality.
+
+### Can operators migrate after the hardfork (i.e. register an RPC node after March 26th, 3:00AM UTC)?
+
+Operators will need to register their RPC or deregister completely before the migration block, however, the actual RPC node can only be started after the L2 starts.
+[See Running a Community RPC Node](https://docs.celo.org/cel2/operators/community-rpc-node#register-as-rpc-provider)
+
+### Are there any penalties, of any kind, for validators who chose not to migrate/register RPC nodes? Slashing, jailing, any impact on staked funds?
+
+If a validator chooses to not run the RPC nodes after the transition, and does not deregister, they will get slashed and rewards will eventually drop to zero for the voters and the validators.
+
+### In order to fulfill the role of an RPC provider, does the RPC node need to be a full node, an archive node, or a L1 legacy node?
+
+Only full node or archive node.
+
+### For those who do not migrate, do they continue operating as validators alongside RPC nodes, just without any validating responsibilities?
+
+No, there will no longer be any validator nodes on the L2.
+
+### How will rewards be distributed after the hard fork, will earnings be limited to delegators (stakers) and RPC node operators?
+
+Rewards are limited to validators who register as a community RPC provider. There is a proposal in draft that will outline all thhe details on the monitoring.
+
+### What will happen to the staked CELO if a validator does not migrate the validator node by March March 26th, 3:00AM UTC?
+
+Migrations need to happen by the time the L2 is activated. If RPC is consistently offline / unregistered, it will eventually get slashed.
+
+### If validators who haven’t migrated are subject to slashing, would they need to deregister their validator before the hard fork?
+
+You can make the group ineligible for election by removing all its members, after that you can move forward with deregistering and waiting for the unlock period.
+
+### Are there penalties for validators who choose not to migrate to RPC nodes, can they remain in their current state and continue earning rewards from their staked CELO?
+
+If validators choose to not run the RPC nodes after the transition, rewards will eventually drop to zero for the voters and the validators.
diff --git a/docs/cel2/whats-changed/cel2-architecture.md b/docs/cel2/whats-changed/cel2-architecture.md
new file mode 100644
index 0000000000..872635d7dd
--- /dev/null
+++ b/docs/cel2/whats-changed/cel2-architecture.md
@@ -0,0 +1,75 @@
+# L2 Architecture
+
+Celo’s architecture is a multi-layered system that includes a Layer 2 blockchain, core smart contracts, user applications, and a dynamic network topology, all optimized for scalability, security, and ease of use.
+
+---
+
+## Introduction to the Celo Stack
+
+The Celo stack consists of three main components that work together to deliver a seamless blockchain experience:
+
+### Celo Blockchain
+
+The Celo blockchain operates as a Layer 2 (L2) solution using the OP Stack, with distinct layers for optimal performance and security:
+
+- **Execution Layer**: EVM-compatible, allowing easy deployment of Ethereum smart contracts.
+- **Data Availability Layer**: Utilizes EigenDA to ensure transaction data is accessible and cost-efficient.
+- **Settlement Layer**: Leverages Ethereum to finalize transactions, benefiting from its security.
+
+### Celo Core Contracts
+
+Celo Core Contracts are essential smart contracts on the Celo blockchain, managed through decentralized governance. Key contracts include:
+
+- **Attestations**: Links users' phone numbers to their blockchain addresses for secure identity verification and Social Connect features.
+- **Governance**: Allows community voting on protocol upgrades and changes.
+- **StableToken** (e.g., cUSD, cEUR): Manages native stablecoin issuance and stability for seamless transactions.
+- **Exchange**: Facilitates asset trading and liquidity within the Celo ecosystem.
+- **SortedOracles**: Provides external data, like price feeds, critical for stability and DeFi applications.
+- **Validators**: Manages validator operations and network security.
+
+### Applications
+
+The Application Layer connects users directly to the blockchain. Developers can build user-friendly applications that are secure, transparent, and decentralized by utilizing Celo’s blockchain.
+
+## Our Network Topology
+
+The Celo network topology consists of various nodes running the Celo blockchain software in different configurations to support the decentralized infrastructure of the network.
+
+### Sequencers
+
+Sequencers replace the traditional validator role in the L2 architecture. They are responsible for:
+
+- Gathering transactions from other nodes
+- Executing associated smart contracts to form new blocks
+- Submitting these blocks to the Ethereum L1 for final settlement
+
+Sequencers operate on a faster 2-second block time, improving transaction speed and throughput.
+
+### Full Nodes
+
+Full nodes in the Celo L2 network serve multiple important functions:
+
+- Relaying transactions and responding to queries from light clients
+- Maintaining a copy of the L2 blockchain state
+- Interacting with Ethereum L1 to read and verify L2 block data
+- Optionally running an Ethereum node or using a third-party Ethereum node service
+
+Full nodes can join or leave the network at any time, providing a decentralized infrastructure for the network.
+
+### Light Clients
+
+Light clients, such as those running on mobile apps with limited data, continue to play a crucial role:
+
+- Connecting to full nodes to request account and transaction data
+- Signing and submitting new transactions
+- Operating without maintaining a full copy of the blockchain state
+
+Light clients benefit from the improved speed and lower costs of the L2 architecture while maintaining a similar user experience.
+
+### Data Availability Layer
+
+Celo L2 incorporates EigenDA as its Data Availability (DA) layer:
+
+- Ensures transaction data remains accessible and cost-efficient
+- Operates separately from the execution and settlement layers
+- Contributes to lower transaction costs and improved scalability
diff --git a/docs/cel2/whats-changed/l1-l2.md b/docs/cel2/whats-changed/l1-l2.md
new file mode 100644
index 0000000000..371b5a94cf
--- /dev/null
+++ b/docs/cel2/whats-changed/l1-l2.md
@@ -0,0 +1,96 @@
+# Celo L1 → L2
+
+## Node operators
+
+In the Celo L1 node, operators simply needed to run the celo-blockchain client, a single service that was a fork of go-ethereum. Moving to the Celo L2 node operators need to run an op-geth instance for execution, an op-node instance for consensus and an eigenda-proxy for data availability. Instructions on operating nodes are [here](../operators/overview.md).
+
+## Deprecated transaction types
+
+Sending these transaction types is no longer be supported, however you can still retrieve any historical instances of these transactions.
+
+* __Type 0 (`0x0`) _Celo_ legacy transaction__. These are type 0 transactions that had some combination of the following fields set ("feeCurrency", "gatewayFee", "gatewayFeeRecipient") and "ethCompatible" set to false.
+* __Type 124 (`0x7c`) Celo dynamic fee transaction__.
+
+More details on supported transaction types [here](https://specs.celo.org/tx_types.html).
+
+## Native bridge to Ethereum
+
+An important benefit of becoming an L2 is having a native bridge to Ethereum. Celo will become an ERC20 token on Ethereum and users will be able to use the native bridge to move between the Celo L2 and Ethereum. The Alfajores testnet bridge can be accessed [here](https://testnets.superbridge.app/celo-alfajores).
+
+## Consensus
+
+The BFT consensus protocol has been removed and replaced with a centralized sequencer. Although validators are no longer needed to secure consensus, the election / voting mechanism and validator set will remain for the time being.
+
+This is a temporary situation, and we will be working on re-introducing active roles for validators after Mainnet launch. For now, validators will serve as community rpc providers and do not need to run any special L2 infrastructure beyond full nodes.
+
+## Validator fees and staking rewards
+
+After the L2 transition, transaction fees will go to the sequencer but validators and stakers will still receive some rewards. Previously, rewards were emitted on epoch blocks but as Celo L2 does not have epoch blocks, rewards will be distributed through periodic calls to a smart contract.
+The amount of rewards to be distributed has not been decided. However, rewards will likely be lower than in the Celo L1 to reflect lower infrasture requirements.
+
+## Hardforks
+
+See [here](https://specs.celo.org/l2_migration.html#changes-for-contracts-developers) for the list of hardforks that will be enabled in the first block of the L2.
+
+## Precompiled contracts
+
+All Celo specific precompiles have been removed except for the transfer precompile which supports Celo [token duality](https://specs.celo.org/token_duality.html) (the native asset CELO is also an ERC20 token)
+
+## Randomness
+
+The random contract has been removed. If randomness is needed then the PREVRANDAO opcode can be used. See [here](https://specs.celo.org/l2_migration.html#deactivated-random-contract) for more details.
+
+## Blocks
+
+* Block interval has changed from 5s to 1s
+* Block gas limit has changed from 50m to 30m
+
+:::note
+Note this results in a 300% increase in gas per second due to the shortened block time
+:::
+
+### Added fields
+
+* __withdrawals__ & __withdrawalsRoot__ - These fields are inherited from Ethereum but not used by the op-stack or Celo. Withdrawals will always be an empty list and `withdrawalsRoot` will always be the empty withdrawals root (`0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421`).
+* __blobGasUsed__ & __excessBlobGas__ - These fields are also inherited from Ethereum but not used by the op-stack or Celo. They will always be zero.
+* __parentBeaconBlockRoot__ - Set to the `parentBeaconRoot` of the L1 origin block.
+
+### Removed fields
+
+* __randomness__ - Not needed since the [randomness](#randomness) feature has been removed
+* __epochSnarkData__ - Not needed since the Celo L2 does not support Plumo.
+* __extraData__ - The BLS aggregated signature has been removed as it is no longer required.
+
+## EIP-1559 implementation
+
+Previously our implementation used a smart contract [(here)](https://github.com/celo-org/celo-monorepo/blob/faca88f6a48cc7c8e6104393e49ddf7c2d7d20e3/packages/protocol/contracts-0.8/common/GasPriceMinimum.sol#L162) to calculate the base fee which allowed for governable parameters. Now we use the standard EIP1559 algorithm with the parameter values being defined in the chain config.
+
+For chain specific parameters see the [deployment information in the Celo specs](https://specs.celo.org/deployments.html).
+
+## RPC API
+
+### Pre-transition data
+
+Old blocks, transactions, receipts and logs are still be accessible via the RPC API but differ a bit from the corresponding objects retrieved from the L1 RPC API.
+
+In general the changes involve additional extra unset fields that have been added upstream but were not present on historical Celo L1 objects, and the removal of some unnecessarily set fields on Celo L1 objects.
+
+For in depth details of what has changed see [here](https://specs.celo.org/l2_migration.html).
+
+### Block receipts
+
+Historically, the Celo L1 generated block receipts when system contract calls emitted logs. The Celo L2 does not have block receipts, but pre-migration block receipts are still retrievable via the RPC API `eth_getBlockReceipt` method.
+
+### Pre-transition execution and state access
+
+RPC API calls for pre-transition blocks that are performing execution or accessing state are not directly supported by the new Celo L2 implementation. However, you can configure your Celo L2 node to proxy to an archive Celo L1 node for these calls. See the [archive node docs](../operators/run-node.md#running-an-archive-node).
+
+## Unsupported geth keystore API
+
+The old geth keystore API is not supported anymore, but you can extract your private key by using [cast](https://book.getfoundry.sh/cast/)'s `decrypt-keystore` keystore command.
+Just give it the path to your keystore and the name of your key, e.g.
+```
+> cast wallet decrypt-keystore -k validator-00/keystore/ testkey
+Enter password:
+testkey's private key is: 0x2089e0db913b30b1c4084f3bd32ca3fd53e28437d76dbd0e609b0884b2c540ef
+```
diff --git a/docs/cel2/whats-changed/op-l2.md b/docs/cel2/whats-changed/op-l2.md
new file mode 100644
index 0000000000..04db3ee628
--- /dev/null
+++ b/docs/cel2/whats-changed/op-l2.md
@@ -0,0 +1,51 @@
+# Optimism → Celo L2
+
+## Blocks
+
+Celo L2 block times are 1s as opposed to 2s for Optimism. The gas limit per block remains the same.
+
+## Native token
+
+The native token is CELO as opposed to ETH. The native token is also an ERC20 token.
+
+## New transaction type
+
+Type 123 (`0x7b`) transaction type allows paying for gas in currencies other than the native asset (CELO). It has an additional field `feeCurrency` which allows the sender to choose the gas currency. See [here](https://specs.celo.org/fee_abstraction.html) for details on using fee currencies.
+
+The fee currencies available at Mainnet launch will be:
+
+ - USDC (USDC)
+ - Tether USD (USD₮)
+ - PUSO (PUSO)
+ - ECO CFA (eXOF)
+ - Celo Kenyan Shilling (cKES)
+ - Celo Dollar (cUSD)
+ - Celo Euro (cEUR)
+ - Celo Brazilian Real (cREAL)
+
+More details on supported transaction types [here](https://specs.celo.org/tx_types.html).
+
+## L1 fees
+
+In the Optimism model, an extra fee is added in order to cover the cost of transactions on the L1. This can be surprising to users as it is not included in the results of calling `eth_estimateGas` and is challenging to predict.
+
+The Celo L2 improves upon this experience by always keeping the L1 fee at zero. The L1 costs are covered by raising or lowering the [base fee floor](#eip-1559-implementation). This approach allows the full transaction cost to be estimated ahead of time.
+
+## EIP-1559 implementation
+
+The Celo L2 adds a base fee floor, which imposes a lower limit on the base fee. This is currently configured via the chain config.
+
+The starting base fee floor values are:
+
+- Alfajores testnet:
+ - base fee floor: 25 gwei
+- Baklava testnet:
+ - base fee floor: 25 gwei
+
+## MaxCodeSize
+
+The hardcoded protocol parameter `MaxCodeSize` is raised from 24576 to 65536.
+
+## Improved finality guarantees
+
+Celo L2 blocks reference L1 blocks that are finalized, which fully protects against L1 re-orgs. In contrast, Optimism blocks reference only 4 blocks behind the L1 head.
diff --git a/docs/cel2/whats-changed/overview.md b/docs/cel2/whats-changed/overview.md
new file mode 100644
index 0000000000..b3871ab1bd
--- /dev/null
+++ b/docs/cel2/whats-changed/overview.md
@@ -0,0 +1,13 @@
+---
+title: What's changed?
+description: Changes from L1 to L2 and from op-stack to L2
+---
+
+# What's changed
+
+Celo is moving from being a POS (proof of stake) based L1 blockchain to an L2 built on the OP Stack. In Celo L1 both ordering and data availability were provided by the validators participating in the POS consensus mechanism, being an L2 means that Celo will instead rely on the L1 (Ethereum) for ordering and on [EigenDA](https://www.eigenda.xyz/) for data availability. Outsourcing those components allows Celo to offer increased scalability while focussing on providing value for users. See below for more details about all the changes involved.
+
+## Details
+
+* [Celo L1 → L2 changes](l1-l2.md)
+* [Optimism → Celo L2 changes](./op-l2.md)
diff --git a/docs/celo-codebase/protocol/bridging/bridging-native-assets.md b/docs/celo-codebase/protocol/bridging/bridging-native-assets.md
deleted file mode 100644
index d660691b5b..0000000000
--- a/docs/celo-codebase/protocol/bridging/bridging-native-assets.md
+++ /dev/null
@@ -1,63 +0,0 @@
----
-title: Bridge Native Assets with Etherscan
-description: How to bridge native assets from ETH and Matic to Celo with Etherscan.
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-# Bridge Native Assets with Etherscan
-
-How to bridge native assets from ETH and Matic to Celo with Etherscan.
-
-___
-## Call the EthHelper
-
-Navigate to the [Etherscan](https://etherscan.io/) (or [Polygonscan](https://polygonscan.com/)) page for the EthHelper.
-
-
-
- Ethereum EthHelper Address = [0x2784a755690453035f32Ac5e28c52524d127AfE2](https://etherscan.io/address/0x2784a755690453035f32Ac5e28c52524d127AfE2)
-
-
- Polygon EthHelper Address = [0xa489b8981ae5652C9Dd6515848cB8Dbecae5E1B0](https://polygonscan.com/address/0xa489b8981ae5652C9Dd6515848cB8Dbecae5E1B0)
-
-
-
-* Open the **Write Contract** pane > **connect your wallet** > then select **sendToEVMLike**
- * Optics is designed to support multiple non-EVM chains
- * This function helps you send ETH to another chain that uses EVM-style addresses
-
-
-
-* For **payableAmount** enter the amount you'd like to send in ETH.
-
-:::tip
-
-1 wei = 1 / 10 ** 18 ETH.
-
-:::
-
-* For **_domain**, enter the domain ID of the chain to which you'd like to send tokens.
-
-Domain IDs are like phone numbers. They represent the chain you're going to call.
-
-
-
- Celo Domain ID = 1667591279
-
-
- Polygon Domain ID = 1886350457
-
-
- Ethereum Domain ID = 6648936
-
-
-
-* For **_to**, enter the address of the recipient on the destination chain.
-* Select **write** > **sign the transaction** > then **send** it to the network.
-
-
-## Wait
-
-Wait for a moment for your transaction to finalize on the network.
diff --git a/docs/celo-codebase/protocol/bridging/bridging-to-celo.md b/docs/celo-codebase/protocol/bridging/bridging-to-celo.md
deleted file mode 100644
index ca0b2054a2..0000000000
--- a/docs/celo-codebase/protocol/bridging/bridging-to-celo.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Celo Bridges
-description: How to bridge from Ethereum, Polygon, and Solana to Celo.
----
-
-# Celo Bridges
-
-How to bridge assets from Ethereum, Polygon, and Solana to Celo.
-
-___
-
-## Bridges Available on Celo
-
-There are several bridges developed by the community for bridging tokens from other chains to Celo.
-
-:::caution
-
-Be sure you understand and review the risks pages when bridging assets between chains.
-
-:::
-
-* [Optics Bridge](../optics.md)
- * Optics Web UIs
- * [cLabs Optics Bridge](https://optics.app)
- * View the tutorial: [en](./optics-gui.md), [zh-cn](./optics-gui-zh_cn.md), [kr](./optics-gui-kr.md)
- * [Ubeswap Optics Web UI](https://app.ubeswap.org/#/bridge)
- * Manually Using Etherscan
- * [Bridge Native Tokens via Etherscan](bridging-native-assets.md)
- * [Bridge ERC-20 Tokens via Etherscan](bridging-tokens-with-etherscan.md)
-* [AllBridge](https://app.allbridge.io/bridge?from=ETH&to=POL&asset=USDC)
-* [Moss](https://bridge.moss.earth/)
-* _Wormhole coming soon!_
diff --git a/docs/celo-codebase/protocol/bridging/bridging-tokens-with-etherscan.md b/docs/celo-codebase/protocol/bridging/bridging-tokens-with-etherscan.md
deleted file mode 100644
index 927c8a8379..0000000000
--- a/docs/celo-codebase/protocol/bridging/bridging-tokens-with-etherscan.md
+++ /dev/null
@@ -1,128 +0,0 @@
----
-title: Bridge Tokens with Etherscan
-description: Bridging ERC-20 tokens from Ethereum and Polygon to Celo.
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-# Bridge Tokens with Etherscan
-
-How to bridge ERC-20 tokens from Ethereum and Polygon to Celo.
-
-___
-
-## Approve the Bridge
-
-Start by approving token usage on the bridge.
-
-* Navigate to the [Etherscan](https://etherscan.io/) (or [Polygonscan](https://polygonscan.com/)) page for the token you want to send
-* Open the **Write Contract** pane > **connect your wallet** > and select **approve**
-
-
-
-* For **spender** enter the BridgeRouter address:
-
-
-
- Ethereum BridgeRouter Address = 0x4fc16De11deAc71E8b2Db539d82d93BE4b486892
-
-
- Polygon BridgeRouter Address = 0x3a5846882C0d5F8B0FA4bB04dc90C013104d125d
-
-
-
-* For **amount** enter the number of tokens you'd like to send in that token's smallest unit.
-
-:::tip
-
-If you're unsure, check the decimals in the Read Contract pane
-* For most tokens the number of digits is 18
-* The + button next will help you fill in the right number
-
-:::
-
-:::info
-
-Approving too much is usually ok, but not approving enough will cause your next transaction to fail.
-
-:::
-
-* Select **write** > sign the transaction > then send it to the network.
-
-## Call the Bridge
-
-You can now start sending tokens on the approved Bridge.
-
-1. Navigate to the appropriate page for the router
-
-
-
- Address = [0x4fc16De11deAc71E8b2Db539d82d93BE4b486892](https://etherscan.io/address/0x4fc16De11deAc71E8b2Db539d82d93BE4b486892)
-
-
- Address = [0x3a5846882C0d5F8B0FA4bB04dc90C013104d125d](https://polygonscan.com/address/0x3a5846882C0d5F8B0FA4bB04dc90C013104d125d)
-
-
- Address = [0x1548cf5cf7dBd93f4dA11f45fCce315573d21B60](https://explorer.celo.org/address/0x1548cf5cf7dBd93f4dA11f45fCce315573d21B60/transactions)
-
-
- Address = [0xB6bB41B1fb8c381b002C405B8abB5D1De0C0abFE](https://polygonscan.com/address/0xB6bB41B1fb8c381b002C405B8abB5D1De0C0abFE)
-
-
-
-* Open the **Write as Proxy** pane > connect your wallet > and select send
-
-
-
-* For **_token**, enter the address of the token you want to send
-* For **_amount**, enter the amount of tokens you'd like to send in that token's smallest unit.
-
-:::info
-
-This should be the same number you approved earlier.
-
-:::
-
-* For **_destination**, enter the domain ID of the chain to which you'd like to send tokens.
-
-
-
- Celo Domain ID = 1667591279
-
-
- Polygon Domain ID = 1886350457
-
-
- Ethereum Domain ID = 6648936
-
-
- Avalanche Domain ID = 1635148152
-
-
-
-:::tip
-
-Domain IDs are like phone numbers. They represent the chain you're going to call.
-
-:::
-
-* For **_recipient**, enter the address of the recipient on the destination chain.
- * To help support future chains with longer addresses, Optics uses 32-byte addresses.
- * To convert an Ethereum, Celo, or Polygon address to bytes32 you can add 24 0s after the 0x prefix
-
-:::tip
-
-**Before: bytes32**
-0x6a39909e805A3eaDd2b61fFf61147796ca6aBB47
-
-**After: 24 Zeros after 0x Prefix**
-0x0000000000000000000000006a39909e805A3eaDd2b61fFf61147796ca6aBB47
-
-:::
-
-* Select **write** > **sign the transaction** > then **send** it to the network.
-
-## Wait
-
-Wait for a moment for your transaction to finalize on the network.
diff --git a/docs/celo-codebase/protocol/bridging/migrating-to-optics-v2.md b/docs/celo-codebase/protocol/bridging/migrating-to-optics-v2.md
deleted file mode 100644
index 7c3677d58f..0000000000
--- a/docs/celo-codebase/protocol/bridging/migrating-to-optics-v2.md
+++ /dev/null
@@ -1,218 +0,0 @@
----
-title: Migrating to Optics v2
-description: How to migrate tokens from Optics v1 to v2.
-
----
-
-import YouTube from '@components/YouTube';
-import ImageWrapper from '@components/ImageWrapper'
-
-# Migrating to Optics v2
-
-This tutorial will guide you from Optics v1 to Optics v2.
-
----
-
-The v2 Optics Bridge is live! The launch of v2 was announced in [this post to the Celo Forum](https://forum.celo.org/t/optics-v2-is-live/2554).
-
-All v1 Optics Bridge users should migrate their v1 tokens to v2 tokens. Learn more [here](https://forum.celo.org/t/optics-recovery-mode/2452/34).
-
-You have three options to choose from:
-
-[Option 1](#option-1): **VERY EASY** Use the Mobius Migrator to swap Optics v1 for Optic v2 (1 for 1).
-
-* [1 Easily Migrate Optics Bridge Tokens to v2](#1---easily-migrate-optics-bridge-tokens-to-v2)
-
-[Option 2](#option-2): **MODERATE** You can swap your v1 tokens to a an alternative token on Celo using Ubeswap, Mobius, or Sushiswap, then swap those tokens for Optics v2 tokens. __Please note that as more tokens are bridged out of v1, it will become harder and possibly more expensive to swap your tokens.__
-
-* 2a — [Swap Affected Token for Unaffected Token](#2a---swap-affected-tokens-for-unaffected-tokens)
-* 2b — [Swap Unaffected Tokens for Optics v2 Tokens](#2b---swap-unaffected-tokens-for-optics-v2-tokens)
-
-[Option 3](#option-3): **HARDEST** You can bridge your affected v1 tokens to Ethereum or Polygon, and then back to Celo over the Optics v2 Bridge.
-
-* 3a — [Bridge Affected Tokens Out and Back](#3a---bridge-affected-tokens-out-and-back)
-* 3b — [Bridge Back to Celo](#3b---bridge-back-from-ethereum-to-celo-using-optics-v2)
-
-Depending on the available liquidity on AMMs, gas fees on the Ethereum network, and the total amount of tokens to be migrated, and the amount of effort you’re willing to spend you must choose whichever option makes the most sense.
-
----
-
-## Option 1
-
-
-
-### 1 - Easily Migrate Optics Bridge Tokens to v2
-
-The easiest way to migrate your v1 token to v2 is by using the [Mobius Migrate tab](https://www.mobius.money/#/opensum).
-
-1. Visit [Mobius's Migrate tab](https://www.mobius.money/#/opensum)
-
-2. Connect your wallet.
-
-
-
-3. Select cUSDCxV1, wETHxV1, or wBTCxV1 token to swap.
-
-
-
-4. Input the amount to swap.
-
-
-
-5. Approve accessing your tokens (cUSDCxV1 in this example).
-
-
-
-6. Swap.
-
-
-
-7. Now visit the Swap tab to verify that you have swapped all your v1 token for v2 cUSDC, wETH, and wBTC.
-
-
-
-## Option 2
-
-### 2a - Swap Affected Tokens for Unaffected Tokens
-
-You can migrate to Optics v2 by first swapping affected tokens for unaffected tokens like cUSD, cEUR, CELO, cBTC, or cETH.
-
-Swapping helps you save on gas fees from bridging out and bridging back to Celo.
-
-There are several AMMs you may use to perform these swaps: Mobius, Ubeswap, and Sushiswap are the primary methods for performing these swaps on the Celo network.
-
-
-#### [Mobius](https://mobius.money)
-
-
-
-* cUSDC (Optics) → cUSD
-* wETH (Optics) → cETH
-* wBTC (Optics) → cBTC
-
-_cETH and cBTC tokens may be unwrapped by visiting wrapped.com. At this time, only institutions and accredited investors may apply for an account. For others, they will be offering OTC unwrapping in early December 2021._
-
-
-#### [Sushi](https://sushi.com)
-
-You can use Sushi to swap the following pairs:
-
-* wETH (Optics) → cUSD
-* wETH (Optics) → cEUR
-* wETH (Optics) → CELO
-* DAI (Optics) → cUSD
-
-#### [Ubeswap](https://ubeswap.org)
-
-You can use Ubeswap to swap the following pairs:
-
-* TFBX (Optics) → UBE → cUSD
-* CRV (Optics) → cUSD
-* AAVE (Optics) → cUSD
-* SUSHI (Optics) → cUSD
-* USDC (Optics) → CELO
-* WBTC (Optics) → cUSD
-* WBTC (Optics) → CELO
-* WETH (Optics) → cUSD
-* WETH (Optics) → CELO
-
-:::warning
-
-As liquidity on v1 pools is removed, the market depth will decrease and the price impact for making these swaps will increase dramatically. Pay close attention to slippage, price impact, and overall cost when making a swap.
-
-:::
-
-
----
-
-
-### 2b - Swap Unaffected Tokens for Optics v2 Tokens
-
-As Optics v2 Liquidity Pools come online on Mobius, Sushi, and Ubeswap you may swap your cUSD, cEUR, CELO, cBTC, cETH for wBTC, wETH and other v2 tokens.
-
-To find a list of tokens supported by Optics v2, you may visit Optics v2, [https://optics.app](https://optics.app).
-
-
-
-* Connect using Metamask
-* Tap or click on your wallet address
-* View the list of available v2 tokens and their smart contract addresses.
-
-
-
----
-# Option 3
-
-### 3a - Bridge Affected Tokens Out and Back
-
-
-#### Bridge Tokens from Celo back to Ethereum or Polygon using Optics v1
-
-:::info
-When bridging from Celo to Ethereum network:
-* Send only wETH, wBTC, DAI, USDC, TFBX, Sushi, CRV, AAVE, USDT or Ethereum based tokens.
-
-When bridging from Celo to Polygon network:
-* Send only USDC (PoS) and WMATIC or Polygon based tokens.
-:::
-
-* Install Metamask from [metamask.io](https://metamask.io/)
-* Make sure you have the desired token in your Celo account
-* Go to the [Optics Bridge v1 app](https://old.optics.app/)
- * Connect **Metamask**
- * Make sure Metamask is connected to the **Celo network**
- * In the **From** section, select the desired token on **Celo**. This indicates that you want to send the desired token currently on Celo.
- * Enter the **amount**, **destination chain** (Ethereum in this case), and **destination address**. The sending address is filled in by default.
-
-
-
-* Click **Bridge** and confirm the transaction from the MetaMask Notification. This approves the Optics Bridge to send WETH on your behalf.
-
-
-
-* Once the approval transaction is confirmed, Metamask will ask for you to confirm the desired token transfer to the bridge. Select **Confirm**.
-
-
-
-* Wait for Optics to send your assets to the destination network
-
-:::note
-
-Once your transaction is approved your transaction details may not appear in the transaction history immediately. This does not mean that your transaction wasn’t successful. If you don’t see your transaction details, check a block explorer of the source network to verify that your transaction to the bridge was successful.
-
-:::
-
-
-### 3b - Bridge back from Ethereum to Celo using Optics v2
-
-Next, bridge your Ethereum network tokens back to Celo using Optics v2 will follow the same path as v1. v2 smart contract representations will be different from v1.
-
-
-
-* Install Metamask from [metamask.io](https://metamask.io/)
-* Check that you have the desired token in your account
-* Go to the [Optics Bridge v2](https://optics.app/)
- * Connect **Metamask**
- * Make sure Metamask is connected to **Ethereum Mainnet**.
- * In the **From** section, select the desired token on **Ethereum**. This indicates that you want to send the desired token that is currently on Ethereum.
- * Enter the **amount**, **destination chain** (Celo in this case), and **destination address**. The sending address is filled in by default.
-
-
-
-* Click **Bridge** and confirm the transaction using the MetaMask Notification
-
-
-
-* Click **Confirm**
-* Once your transaction is confirmed, you will be taken to the Transaction History tab where you can see your pending transactions through the bridge
- * You can view the status of the transfer by mousing over the **Status** of the transaction
-
-
-
-* Wait for the desired token to be bridged. Your desired token will show up at the specified account address when bridging is complete.
-
-:::note
-
-Once your transaction is approved your transaction details may not appear in the transaction history immediately. This does not mean that your transaction wasn’t successful. If you don’t see your transaction details, check a block explorer of the source network to verify that your transaction to the bridge was successful.
-
-:::
diff --git a/docs/celo-codebase/protocol/bridging/optics-bridge-faq.md b/docs/celo-codebase/protocol/bridging/optics-bridge-faq.md
deleted file mode 100644
index f21f4c69eb..0000000000
--- a/docs/celo-codebase/protocol/bridging/optics-bridge-faq.md
+++ /dev/null
@@ -1,182 +0,0 @@
----
-title: Optics Bridge FAQs
-description: Common questions about the Optics Bridge.
----
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-import ImageWrapper from '@components/ImageWrapper'
-
-
-# Optics Bridge FAQs
-
-
-## What is the Optics Bridge?
-
-Optics is a protocol for sending messages between EVM chains. It can be used to securely send tokens cross-chain using the burn/mint token model.
-
-
-## How long does it take to send a transaction?
-
-It typically takes 1 hour for funds to arrive at the destination chain, but can take longer. Optics uses an optimistic model that includes a 30-minute period. We are working on ways to significantly reduce latency for users.
-
-
-## How do I convert my v1 tokens into v2?
-
-For converting Optics Bridge v1 wETH, wBTC, cUSDC to v2 you should use the Mobius + Celo one-for-one [migration tool](https://mobius.money/#/opensum). [This tutorial](https://docs.celo.org/celo-codebase/protocol/bridging/migrating-to-optics-v2) guides you through the process.
-
-
-## How can I check the status of my transaction?
-
-Go to [optics.app/search-transaction](https://optics.app/search-transaction) and select the network you bridged FROM and enter the transaction hash.
-
-
-
-## I’m unable to check the status of the transaction?
-
-Make sure you are searching the transaction within the correct version of Optics. Within the Optics.app site, located on the top right & left side of the window you can choose between Optics v1 and v2.
-
-
-## I’m unable to obtain a transaction update with a transaction using Polygon, how do I check status?
-
-This often happens when the RPC server on Polygon is not responding to requests. To check status, use a block explorer to verify the transaction was sent successfully. Next, check the receiving network with block explorer to view if you received the tokens. The typical time to process is 30 minutes for Optics v2 and 4 hours for Optics v1.
-
-
-## I get “Error fetching transaction” when searching my transaction?
-
-Make sure you have the right network selected and the correct hash. If you are still seeing the error, try again in a few minutes. Your funds are safe, this does not indicate an error with your transaction.
-
-
-## My funds haven’t arrived after 5+ hours
-
-Your funds are safe. Sometimes the agent that processes messages gets stuck. Reach out to us in [#bridge-support](https://discord.gg/Rp8TYetc) and we will get your transaction back on track. We are working to improve agent stability.
-
-
-## I filled out the form but haven’t gotten a response
-
-We will be deprecating the form and migrating to our new discord server. Please reach out to us in [#bridge-support](https://discord.gg/Rp8TYetc).
-
-
-## It shows my transaction was processed, but I haven’t received the funds
-
-Your transaction was a success, you are likely looking at the wrong token address. Go to optics.app and click on your address in the top right corner. It will open up a modal with a list of tokens on each chain and the ability to add them to Metamask.
-
-
-## The app doesn’t recognize my token balance
-
-Some tokens are not currently supported (Polygon WETH, Polygon SUSHI, etc)
-
-
-## My newly-added token has an ugly name, can it be changed?
-
-Yes, reach out to us on [#bridge-support](https://discord.gg/Rp8TYetc) and we’ll request a name change.
-
-
-## I sent USDC to Polygon but I think I received the wrong token, how do I resolve?
-
-If you obtained USDC tokens which are not recognized on the Polygon network, you might have sent the wrong token. There are two core USDC token contracts, one that is native to the Ethereum network and the another that represents USDC on the Polygon network. There are multiple USDC contracts on different networks, each corresponding to the bridge that was used to send the token. For example, with Polygon, USDC sent via the [Polygon Bridge](https://wallet.polygon.technology/) will have a different address than USDC sent via the Optics Bridge (and it doesn’t matter if the USDC is comes from Celo or directly from Ethereum). On Polygon, there are greater incentives for users to bridge USDC via the polygon bridge, so that is the more popular token with greater liquidity. To transfer the popular version of Polygon USDC from Celo to Polygon via Optics, make sure that you use USDC PoS. In the event you sent the wrong token, bridge back the tokens to convert to USDC PoS and then bridge USDC PoS to Polygon.
-
-
-## How do I transfer value from Celo to Polygon?
-
-It’s recommended to use USDC PoS.
-
-To get USDC using token with address 0x2791bca1f2de4661ed88a30c99a7a9449aa84174 on Polygon you should send USDC PoS with token address 0x1bfc26cE035c368503fAE319Cc2596716428ca44 from Celo.
-
-
-## How do I verify token addresses?
-
-Within the Optics.app dashboard, on the top right side of the page, select your wallet address to bring up the contract validation window to view token addresses.
-
-
-After connecting your wallet, tap your wallet address:
-
-
-This will display the list of tokens:
-
-
-
-
-## Resources
-
-
-### Dashboards
-
-[https://optics.app/](https://optics.app/)
-
-[https://bridge.mobius.money/#/](https://bridge.mobius.money/#/)
-
-
-
-### Token Addresses
-
-
-
-
-
-
SUSHI:
0x29dFce9c22003A4999930382Fd00f9Fd6133Acd1
-
WETH:
0x122013fd7dF1C6F636a5bb8f03108E876548b455
-
WBTC:
0xBAAB46E28388d2779e6E31Fd00cF0e5Ad95E327B
-
USDC:
0xef4229c8c3250C675F21BCefa42f58EfbfF6002a
-
USDCPOS (Polygon):
0x1bfc26cE035c368503fAE319Cc2596716428ca44
-
USDT:
0x88eeC49252c8cbc039DCdB394c0c2BA2f1637EA0
-
DAI:
0x90Ca507a5D4458a4C6C6249d186b6dCb02a5BCCd
-
CELO:
0x471ece3750da237f93b8e339c536989b8978a438
-
CUSD:
0x765DE816845861e75A25fCA122bb6898B8B1282a
-
CEUR:
0xD8763CBa276a3738E6DE85b4b3bF5FDed6D6cA73
-
WMATIC:
0x2E3487F967DF2Ebc2f236E16f8fCAeac7091324D
-
-
-
-
-
CUSD:
0xd8f3208c045dd69d27938346275165998359d8ff
-
CELO:
0xc95dc0eceec11ab8b2bfa1aff3c223c5dc006fad
-
SUSHI:
0x6b3595068778dd592e39a122f4f5a5cf09c90fe2
-
WETH:
0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-
WBTC:
0x2260fac5e5542a773aa44fbcfedf7c193bc2c599
-
UNI:
0x1f9840a85d5af5bf1d1762f925bdaddc4201f984
-
LINK:
0x514910771af9ca656af840dff83e8264ecf986ca
-
USDC:
0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
-
USDT:
0xdac17f958d2ee523a2206206994597c13d831ec7
-
DAI:
0x6b175474e89094c44da98b954eedeac495271d0f
-
CEUR:
0x977453366b8d205f5c9266b6ba271e850a814a50
-
-
-
-
-
SUSHI:
0xa84b7d339570eb053939810f56ab6eef2e0b38cd
-
WETH:
0xac24381947d4f44c2da58881547c0c38196beb07
-
WBTC:
0x15d25a3c47037c133210ab90adae4d51365a1108
-
USDC:
0x22d9c9fc91ebd595af762ed4c9d5cc1d92cabf59
-
USDCPOS (Polygon):
0x2791bca1f2de4661ed88a30c99a7a9449aa84174
-
USDT:
0x91ff78ae858498e6f6e884f78b6e5be892c706af
-
DAI:
0x795a8ec05f0c4f0eea7388378b1b890f851c5001
-
CELO:
0x4764ea6d06ce4e503d0bb323913c1e96dcd1a943
-
CUSD:
0x151517af77b06d9593f3ed41abecdd349316e006
-
CEUR:
0x2f0173dfe97a7dc670d5a10b35c4263cfecfa853
-
WMATIC:
0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270
-
-
-
-
-
-### Optics Contracts
-
-Optics replica contracts are configured for each network within: [https://github.com/celo-org/optics-monorepo/tree/main/rust/config/production-community](https://github.com/celo-org/optics-monorepo/tree/main/rust/config/production-community)
-
-
-
- https://github.com/celo-org/optics-monorepo/blob/main/rust/config/production-community/celo_contracts.json
-
-
- https://github.com/celo-org/optics-monorepo/blob/main/rust/config/production-community/avalanche_contracts.json
-
-
- https://github.com/celo-org/optics-monorepo/blob/main/rust/config/production-community/ethereum_contracts.json
-
-
- https://github.com/celo-org/optics-monorepo/blob/main/rust/config/production-community/polygon_verification.json
-
-
-
-
diff --git a/docs/celo-codebase/protocol/bridging/optics-gui-kr.md b/docs/celo-codebase/protocol/bridging/optics-gui-kr.md
deleted file mode 100644
index 467a4c4295..0000000000
--- a/docs/celo-codebase/protocol/bridging/optics-gui-kr.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-title: Optics Bridge GUI - Korean
-description: Sending ETH From Ethereum to Celo
----
-
-# Sending ETH From Ethereum to Celo
-
-## Ethereum에서 Celo#로 ETH 전송하기
-
-- Install Metamask from [https://metamask.io](https://metamask.io).
-- [https://metamask.io](https://metamask.io)에서 메타마스크를 설치합니다.
-- Make sure you have ETH in your account.
-- 계정에 ETH가 있는지 확인합니다.
-
-
-- Go to the Optics Bridge app.
-- Optics Bridge 앱으로 이동합니다.
- - Connect Metamask
- - 메타마스크 연결
- - Make sure Metamask is connected to Ethereum Mainnet.
- - 메타마스크가 Ethereum Mainnet에 연결되어 있는지 확인합니다.
- - In the top From section, Select “ETH on Ethereum”. This indicates that you want to send the ETH asset that is currently on Ethereum.
- - 상단 섹션에서 "ETH on Ethereum"을 선택합니다. 이는 현재 Ethereum에 있는 ETH 자산을 전송하고자 함을 나타냅니다.
- - Enter the amount, destination chain (Celo in this case), and destination address. The sending address is filled in by default.
- - 금액, 대상 체인(이 경우 Celo) 및 대상 주소를 입력합니다. 발송 주소는 기본적으로 입력되어 있습니다.
-
-
-
-- Click “Bridge”. Metamask will pop up asking for confirmation.
-- "브리지"를 클릭합니다. 메타마스크에서 확인을 요청하는 메시지가 나타납니다.
-
-
-
-- Click “Confirm”.
-- 확인을 클릭합니다.
-- Once your transaction is confirmed, you will be taken to the Transaction History tab where you can see your pending transactions through the bridge.
-- 트랜잭션이 확인되면 브리지에서 보류 중인 트랜잭션을 볼 수 있는 트랜잭션 기록 탭으로 이동합니다.
- - You can view the status of the transfer by mousing over the “Status” of the transaction.
- - 트랜잭션의 "상태" 위에 마우스를 놓으면 전송 상태를 볼 수 있습니다.
-
-
-
-- Once your transaction is approved your transaction details may not appear in the transaction history immediately. This does not mean that your transaction wasn’t successful. If you don’t see your transaction details, check a block explorer of the source network to verify that your transaction to the bridge was successful.
-- 거래가 승인되면 거래 내역이 즉시 나타나지 않을 수 있습니다. 그렇다고 해서 거래가 성공하지 못한 것은 아닙니다. 트랜잭션 세부 정보가 표시되지 않으면 소스 네트워크의 블록 탐색기를 확인하여 브리지로의 트랜잭션이 성공했는지 확인합니다.
-- Wait for your ETH to be bridged. WETH will show up at the specified account address when bridging is complete.
-- ETH가 연결되기를 기다립니다. 브리징이 완료되면 WETH가 지정된 계정 주소에 표시됩니다.
-
-## Sending WETH from Celo to Ethereum
-### Celo에서 Ethereum#으로 WETH를 보내기
-
-- Install Metamask from [https://metamask.io](https://metamask.io).
-- [https://metamask.io](https://metamask.io) 메타마스크를 설치합니다.
-- Make sure you have [WETH](https://explorer.celo.org/address/0xE919F65739c26a42616b7b8eedC6b5524d1e3aC4/transactions) in your Celo account.
-- Celo 계정에 [WETH](https://explorer.celo.org/address/0xE919F65739c26a42616b7b8eedC6b5524d1e3aC4/transactions)가 있는지 확인합니다.
-- Go to the Optics Bridge app.
-- Optics Bridge 앱으로 이동합니다.
- - Connect Metamask.
- - 메타마스크를 연결합니다.
- - Make sure Metamask is connected to the Celo network.
- - 메타마스크가 Celo 네트워크에 연결되어 있는지 확인합니다.
- - In the top From section, Select “WETH on Celo”. This indicates that you want to send the WETH asset that is currently on Celo.
- - 상단 시작 섹션에서 "WETH on Celo"를 선택합니다. 이는 현재 Celo에 있는 WETH 자산을 전송하고자 함을 나타냅니다.
- - Enter the amount, destination chain (Ethereum in this case), and destination address. The sending address is filled in by default.
- - 금액, 대상 체인(이 경우 기준) 및 대상 주소를 입력합니다. 발송 주소는 기본적으로 입력되어 있습니다.
-
-
-
-- Click “Bridge”. Metamask will pop up asking for you to approve the Optics Bridge to send WETH on your behalf.
-- "브리지"를 클릭합니다. 메타마스크에서 WETH를 대신 보낼 Optics Bridge를 승인해 달라는 메시지가 나타납니다.
-
-
-
-- Once the approval transaction is confirmed, Metamask will pop up asking for you to confirm the WETH transfer to the bridge.
-- 승인 거래가 확인되면 메타마스크에서 브리지로 WETH 전송 확인을 요청하는 팝업창이 나타날 것입니다.
-
-
-
-- Once your transaction is approved your transaction details may not appear in the transaction history immediately. This does not mean that your transaction wasn’t successful. If you don’t see your transaction details, check a block explorer of the source network to verify that your transaction to the bridge was successful.
-- 거래가 승인되면 거래 내역이 즉시 나타나지 않을 수 있습니다. 그렇다고 해서 거래가 성공하지 못한 것은 아닙니다. 트랜잭션 세부 정보가 표시되지 않으면 소스 네트워크의 블록 탐색기를 확인하여 브리지로의 트랜잭션이 성공했는지 확인합니다.
-- Wait for Optics to send your assets to the destination network.
-- Optics가 자산을 대상 네트워크로 보낼 때까지 기다립니다.
-
-## Sending Assets from Celo to Polygon#
-### 자산을 Celo에서 Polygon#으로 보내기
-
-We demo how to send assets from Celo to Polygon, but the process is the same for sending between other networks as well.
-
-Celo에서 Polygon으로 자산을 보내는 방법을 시연하지만, 다른 네트워크 간 전송 과정도 동일합니다.
-
-- Install Metamask from [https://metamask.io](https://metamask.io/).
-- [https://metamask.io](https://metamask.io/)에서 메타마스크를 설치합니다.
-- [Add the Celo network to Metamask](https://docs.celo.org/getting-started/wallets/using-metamask-with-celo/manual-setup)
-- [Celo 네트워크를 메타마스크에 추가합니다.](https://docs.celo.org/getting-started/wallets/using-metamask-with-celo/manual-setup)
-
-
-
-- [Add Polygon to Metamask](https://docs.polygon.technology/docs/develop/metamask/config-polygon-on-metamask/#configure-polygon-on-metamask)
-- [메타마스크에 Polygon을 추가하세요](https://docs.polygon.technology/docs/develop/metamask/config-polygon-on-metamask/#configure-polygon-on-metamask)
-
-
-
-- Make sure you have Celo assets to send.
-- 보낼 Celo 자산이 있는지 확인합니다.
-- Go to the Optics Bridge app.
-- 앱으로 이동합니다.
- - Connect metamask
- - 메타마스크를 연결합니다.
- - Make sure metamask is connected to the Celo network
- - 메타 마스크가 Celo 네트워크에 연결되어 있는지 확인하십시오.
-- Enter the amount, destination chain (Polygon in this case) and destination address. The sending address is filled by default.
-- 금액, 대상 체인(이 경우 폴리곤) 및 대상 주소를 입력하십시오. 송신 주소는 기본적으로 채워집니다.
-
-
-
-- Allow the bridge application to send CELO on your behalf.
-- 브리지 응용 프로그램이 사용자를 대신하여 CELO를 보내도록 허용합니다.
-
-
-
-- Approve the transaction to send CELO to the Optics bridge.
-- 트랜잭션을 승인하여 CELO를 Optics 브리지로 보냅니다.
-
-
-
-- You can view your transaction history in the corresponding tab.
-- 해당 탭에서 트랜잭션 기록을 볼 수 있습니다.
- - You can view the status of the transfer by mousing over the “Status” of the transaction.
- - 트랜잭션의 "상태" 위에 마우스를 놓으면 전송 상태를 볼 수 있습니다.
-
-
-
-- Once your transaction is approved your transaction details may not appear in the transaction history immediately. This does not mean that your transaction wasn’t successful. If you don’t see your transaction details, check a block explorer of the source network to verify that your transaction to the bridge was successful.
-- 거래가 승인되면 거래 내역이 즉시 나타나지 않을 수 있습니다. 그렇다고 해서 거래가 성공하지 못한 것은 아닙니다. 트랜잭션 세부 정보가 표시되지 않으면 소스 네트워크의 블록 탐색기를 확인하여 브리지로의 트랜잭션이 성공했는지 확인합니다.
-
-
-- Wait for Optics to send your assets to the destination network.
-- Optics가 자산을 대상 네트워크로 보낼 때까지 기다립니다.
-
diff --git a/docs/celo-codebase/protocol/bridging/optics-gui-zh_cn.md b/docs/celo-codebase/protocol/bridging/optics-gui-zh_cn.md
deleted file mode 100644
index e64a69e524..0000000000
--- a/docs/celo-codebase/protocol/bridging/optics-gui-zh_cn.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-title: Optics Bridge GUI - gui-zh-cn
-description: Sending ETH From Ethereum to Celo
----
-# Optics 跨链桥使用指南
-
-## ETH从以太坊跨链到Celo主网
-
-- 首先您需要已经正确安装了小狐狸钱包 [https://metamask.io](https://metamask.io)。
-- 准备跨链之前您需要确保账户里有ETH。
-- 进入Optics 跨链桥的界面,如下:[Optics Bridge app](https://optics.app/)。
- - 连接小狐狸钱包
- - 点击小狐狸钱包把网络切换至以太坊主网。
- - 在顶部“发送”位置,选择相应的链和链上的代币“以太坊,ETH”。也就是你希望把以太坊上的ETH跨链到Celo上。
- - 接着依次输入跨链的金额、目标链“Celo”、Celo钱包地址(默认已自动输入)。
-
-
-
-- 点击“交易”,等待小狐狸钱包弹出确认请求。
-
-
-
-- 点击“确认”
-
-- 交易确认后,页面会自动跳转到交易历史,可以看到这笔待处理的跨链交易。
- - 鼠标停留在“状态”栏就可以随时查看跨链历史的状态
-
-
-
-- 跨链确认后可能不会立即显示在交易历史中,但并不表示交易已失败,请稍等链上同步状态更新,或去以太坊区块链浏览器中再次确认跨链信息。
-- ETH跨链完成后,WETH会显示在您指定的Celo钱包地址。
-
-## Celo主网的WETH跨链到以太坊主网
-
-- 首先您需要已经正确安装了小狐狸钱包 [https://metamask.io](https://metamask.io).
-- 准备跨链之前您需要确保Celo账户里有WETH[WETH](https://explorer.celo.org/address/0xE919F65739c26a42616b7b8eedC6b5524d1e3aC4/transactions)。
-- 进入Optics 跨链桥的界面,如下:
- - 连接小狐狸钱包
- - 点击小狐狸钱包把网络切换至Celo主网。
- - 在顶部“发送”位置,选择相应的链和链上的代币“Celo,WETH”。也就是你希望把Celo上的WETH跨链到以太坊上。
- - 接着依次输入跨链的金额、目标链“以太坊”、以太坊钱包地址(默认已自动输入)。
-
-
-
-- 点击“确认”或“交易”,等待小狐狸钱包弹出请求允许Optics 跨链桥为您转出WETH。
-
-
-
-- 确认后,小狐狸钱包弹出请求为您转出WETH。
-
-
-
-- 跨链确认后可能不会立即显示在交易历史中,但并不表示交易已失败,请稍等链上同步状态更新,或去Celo区块链浏览器中再次确认跨链信息。
-- 等待Optics跨链完成后,ETH会显示在您指定的以太坊钱包地址。
-
-## Celo主网资产跨链到Polygon(Matic)
-
-Celo主网资产跨链到Polygon(Matic)上的过程与Celo和以太坊主网间跨链一致,步骤如下:
-
-- 首先您需要已经正确安装了小狐狸钱包 [https://metamask.io](https://metamask.io)。
-- 接着将Celo主网和Polygon(Matic)主网添加到小狐狸钱包,Celo主网信息、Polygon(Matic)主网信息如下图所示:
-- [Add the Celo network to Metamask](../../../getting-started/wallets/using-metamask-with-celo/manual-setup.md)
-
-
-
-- [Add Polygon to Metamask](https://docs.polygon.technology/docs/develop/metamask/config-polygon-on-metamask/#configure-polygon-on-metamask)
-
-
-
-- 准备跨链之前您需要确保Celo账户里有资产。
-- 进入Optics 跨链桥的界面,如下:
- - 连接小狐狸钱包
- - 点击小狐狸钱包把网络切换至Celo主网。
-- 接着依次输入跨链的金额、目标链“Polygon(Matic)”、钱包地址(默认已自动输入)。
-
-
-
-- 允许Optics跨链桥进行交易。
-
-
-
-- 点击确认通过Optic跨链交易Celo
-
-
-
-- 您可以交易历史中查看记录
- - 鼠标停留在“状态”栏就可以随时查看跨链历史的状态
-
-
-
-- 跨链确认后可能不会立即显示在交易历史中,但并不表示交易已失败,请稍等链上同步状态更新,或去Celo区块链浏览器中再次确认跨链信息。
-- 等待Optics跨链完成后,ETH会显示在您指定的Polygon(Matic)钱包地址。
diff --git a/docs/celo-codebase/protocol/bridging/optics-gui.md b/docs/celo-codebase/protocol/bridging/optics-gui.md
deleted file mode 100644
index da2f9149f8..0000000000
--- a/docs/celo-codebase/protocol/bridging/optics-gui.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-title: Optics Bridge GUI
-description: How to send ETH From Ethereum to Celo using the Optics Bridge GUI.
----
-
-# Optics Bridge GUI
-
-How to send ETH From Ethereum to Celo using the Optics Bridge GUI.
-
-___
-
-:::tip
-
-Other translations: [zh_cn](./optics-gui-zh_cn.md), [kr](./optics-gui-kr.md)
-
-:::
-## Sending ETH From Ethereum to Celo
-
-- Install Metamask from [https://metamask.io](https://metamask.io).
-- Make sure you have ETH in your account.
-- Go to the [Optics Bridge app](https://optics.app/).
- - Connect Metamask
- - Make sure Metamask is connected to Ethereum Mainnet.
- - In the top **From** section, Select “ETH on Ethereum”. This indicates that you want to send the ETH asset that is currently on Ethereum.
- - Enter the amount, destination chain (Celo in this case), and destination address. The sending address is filled in by default.
-
-
-
-- Click “Bridge”. Metamask will pop up asking for confirmation.
-
-
-
-- Click “Confirm”.
-
-- Once your transaction is confirmed, you will be taken to the Transaction History tab where you can see your pending transactions through the bridge.
- - You can view the status of the transfer by mousing over the “Status” of the transaction.
-
-
-
-- Once your transaction is approved your transaction details may not appear in the transaction history immediately. This does not mean that your transaction wasn’t successful. If you don’t see your transaction details, check a block explorer of the source network to verify that your transaction to the bridge was successful.
-- Wait for your ETH to be bridged. WETH will show up at the specified account address when bridging is complete.
-
-## Sending WETH from Celo to Ethereum
-
-- Install Metamask from [https://metamask.io](https://metamask.io).
-- Make sure you have [WETH](https://explorer.celo.org/address/0xE919F65739c26a42616b7b8eedC6b5524d1e3aC4/transactions) in your Celo account.
-- Go to the Optics Bridge app.
- - Connect Metamask.
- - Make sure Metamask is connected to the Celo network.
- - In the top **From** section, Select “WETH on Celo”. This indicates that you want to send the WETH asset that is currently on Celo.
- - Enter the amount, destination chain (Ethereum in this case), and destination address. The sending address is filled in by default.
-
-
-
-- Click “Bridge”. Metamask will pop up asking for you to approve the Optics Bridge to send WETH on your behalf.
-
-
-
-- Once the approval transaction is confirmed, Metamask will pop up asking for you to confirm the WETH transfer to the bridge.
-
-
-
-- Once your transaction is approved your transaction details may not appear in the transaction history immediately. This does not mean that your transaction wasn’t successful. If you don’t see your transaction details, check a block explorer of the source network to verify that your transaction to the bridge was successful.
-- Wait for Optics to send your assets to the destination network.
-
-## Sending Assets from Celo to Polygon
-
-We demo how to send assets from Celo to Polygon, but the process is the same for sending between other networks as well.
-
-- Install Metamask from [https://metamask.io](https://metamask.io).
-- [Add the Celo network to Metamask](../../../getting-started/wallets/using-metamask-with-celo/manual-setup.md)
-
-
-
-- [Add Polygon to Metamask](https://docs.polygon.technology/docs/develop/metamask/config-polygon-on-metamask/#configure-polygon-on-metamask)
-
-
-
-- Make sure you have Celo assets to send.
-- Go to the Optics Bridge app.
- - Connect metamask
- - Make sure metamask is connected to the Celo network
-- Enter the amount, destination chain (Polygon in this case) and destination address. The sending address is filled by default.
-
-
-
-- Allow the bridge application to send CELO on your behalf.
-
-
-
-- Approve the transaction to send CELO to the Optics bridge.
-
-
-
-- You can view your transaction history in the corresponding tab.
- - You can view the status of the transfer by mousing over the “Status” of the transaction.
-
-
-
-- Once your transaction is approved your transaction details may not appear in the transaction history immediately. This does not mean that your transaction wasn’t successful. If you don’t see your transaction details, check a block explorer of the source network to verify that your transaction to the bridge was successful.
-- Wait for Optics to send your assets to the destination network.
diff --git a/docs/celo-codebase/protocol/consensus/index.md b/docs/celo-codebase/protocol/consensus/index.md
deleted file mode 100644
index 01cafb9fed..0000000000
--- a/docs/celo-codebase/protocol/consensus/index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Consensus Introduction
-description: Overview of Celo's consensus protocol and network validators.
-slug: /celo-codebase/protocol/consensus
----
-# Consensus
-
-Overview of Celo's consensus protocol and network validators.
-
-___
-
-## Protocol
-
-Celo’s consensus protocol is based on an implementation called Istanbul, or IBFT. IBFT was developed by AMIS and [proposed](https://github.com/ethereum/EIPs/issues/650) as an extension to [go-ethereum](https://github.com/ethereum/go-ethereum) but never merged. Variants of IBFT exist in both the [Quorum](https://github.com/jpmorganchase/quorum) and [Pantheon](https://github.com/PegaSysEng/pantheon) clients. We’ve modified Istanbul to bring it up to date with the latest [go-ethereum](https://github.com/ethereum/go-ethereum) releases and we’re fixing [correctness and liveness issues](https://arxiv.org/abs/1901.07160) and improving its scalability and security.
-
-## Validators
-
-Celo’s consensus protocol is performed by nodes that are selected as validators. There is a maximum cap on the number of active validators that can be changed by governance proposal, which is currently set at 110 validators. The active validator set is determined via the proof-of-stake process and is updated at the end of each epoch, a fixed period of approximately one day.
diff --git a/docs/celo-codebase/protocol/consensus/ultralight-sync.md b/docs/celo-codebase/protocol/consensus/ultralight-sync.md
deleted file mode 100644
index 6e114af79b..0000000000
--- a/docs/celo-codebase/protocol/consensus/ultralight-sync.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Celo Ultralight Sync
-description: Introduction to Celo's ultralight sync mode and how it improves the speed of the Celo network.
----
-
-# Ultralight Sync
-
-Introduction to Celo's ultralight sync mode and how it improves the speed of the Celo network.
-
-___
-## Introduction to Ultralight Sync
-
-In addition to the **full**, **fast**, and **light** sync modes supported by Ethereum, Celo supports an **ultralight** sync mode. Ultralight nodes compute the validator set for the current epoch by downloading the last header of each previous epoch and applying the validator set diff. They then download the latest block header, which can be verified by checking that at least two-thirds of the validator set for the current epoch signed the block header.
-
-## Ultralight Sync Speed
-
-Ultralight nodes download approximately 17,000 times fewer headers than light nodes in order to sync the latest block on Celo mainnet with 5-second block periods and 1-day epochs.
-
-:::tip note
-
-In the future, Celo will support zk-SNARK-based proofs of the ultralight sync mode called [Plumo](/celo-codebase/protocol/plumo.md), which will lower the sync time even more.
-
-:::
\ No newline at end of file
diff --git a/docs/celo-codebase/protocol/identity/randomness.md b/docs/celo-codebase/protocol/identity/randomness.md
deleted file mode 100644
index e12e628987..0000000000
--- a/docs/celo-codebase/protocol/identity/randomness.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Celo Randomness
-description: How unpredictable pseudo-randomness is achieved on the Celo blockchain.
----
-# Randomness
-
-How unpredictable pseudo-randomness is achieved on the Celo blockchain.
-
-___
-## Requesting New Attestations
-
-As mentioned previously, when requesting new attestations, random validators are selected to perform phone number verification. This selection needs to be unpredictable to prevent Eve from creating an attestation for a phone number she doesn’t control. Suppose, for example, that instead validators were selected in a round robin fashion. Eve could request an attestation when it was the turn of a validator she controls to perform verification. Instead of sending an SMS to the phone number \(since she doesn’t own it\) she could just produce the correct verification code since she has access to the validator’s private key.
-## Producing Pseudo-randomness
-
-Producing unpredictable pseudo-randomness without a trusted third party is not trivial. Several solutions for this problem exist or are being currently researched. They include Verifiable Random Functions \(for example, based on BLS threshold signatures\), Verifiable Delay Functions, and commit-reveal schemes. Currently, Celo implements a simple commit-reveal scheme which is secure enough for the purposes of validator selection. A more sophisticated solution might be implemented as the network evolves, especially if randomness becomes necessary for other purposes that require stronger assumptions about the randomness’s security \(for example if it was decided that a randomized leader election algorithm should replace the current round robin\).
-
-In a proposed block, the proposer attaches two values related to the randomness scheme - randomness corresponding to their previous commitment, and a new commitment to freshly generated random bytes that will be revealed in the future. The revealed randomness is added to an entropy pool accessible on-chain from the Random smart contract.
-## Randomness Equation
-
-More formally, the $$n*{th}$$ block proposed by a given validator contains values $$(r_n, s_n)$$ such that $$\text{keccack256}(r_n) = s*{n-1}$$. The one exception to this is the validator’s first block, the case where $$n = 1$$, since they have not previously committed to randomness yet. Here, the protocol instead requires that $$r_1 = 1$$.
diff --git a/docs/celo-codebase/protocol/odis/domains/sequential-delay-domain.md b/docs/celo-codebase/protocol/odis/domains/sequential-delay-domain.md
deleted file mode 100644
index 6e10e1bc3b..0000000000
--- a/docs/celo-codebase/protocol/odis/domains/sequential-delay-domain.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Sequential Delay Domain
----
-import PageRef from '@components/PageRef'
-
-The Sequential Delay Domains is an [ODIS Domain](/celo-codebase/protocol/odis/domains) supporting signature-authenticated rate limits defined as a series of time-delayed stages.
-The motivating use case is allowing wallets to define how often users can attempt to recover their account via the scheme outlined in [Pin/Password Encrypted Account Recovery](/celo-codebase/protocol/identity/encrypted-cloud-backup), but can be used in any other application that need an authenticated rate limit represented as a series of time delayed stages.
-
-## Specification
-
-A full specification of the Sequential Delay Domain is available in an extension to CIP-40.
-
-
diff --git a/docs/celo-codebase/protocol/optics.md b/docs/celo-codebase/protocol/optics.md
deleted file mode 100644
index b2808b809d..0000000000
--- a/docs/celo-codebase/protocol/optics.md
+++ /dev/null
@@ -1,185 +0,0 @@
----
-title: Optics
-description: Introduction to Optics, it's core concepts, architecture, process, and implementation.
----
-# Optics
-
-Introduction to Optics, it's core concepts, architecture, process, and implementation.
-
-___
-
-:::info
-Migrating to v2? Go [here](https://docs.celo.org/celo-codebase/protocol/bridging/migrating-to-optics-v2) to learn how to migrate from v1.
-:::
-
-## What is Optics?
-
-Optics is a new design for radically cheaper cross-chain communication without header verification. We expect operating Optics to cut 90% of gas costs compared to a traditional header relay. To accomplish this, we took inspiration from optimistic systems (a la Optimistic Roll-ups). Optics features many of the features we prize in an optimistic mechanism, like public verification, low gas fees, broad participation, but has a slightly different security model.
-
-Optics will form the base layer of a cross-chain communication network that provides fast, cheap communication for all smart contract chains and rollups. It relies only on widely-available cryptographic primitives (unlike header relays), has a latency of a few hours (rather than an ORU’s one week latency), and imposes only about 120,000 gas overhead on message senders.
-
-Optics has been designed for ease of implementation in any blockchain that supports user-defined computations. We will provide initial Solidity implementations of the on-chain contracts, and Rust implementations of the off-chain system agents. We aim to follow up with Rust implementations of the on-chain contracts targeting Near and Solana later this year.
-
-## Building Intuition for Optics
-
-Optics works something like a notary service.
-
-
-
-The sending (or “home”) chain produces a series of documents ("messages") that needs notarization. A notary (called the “updater”) is contracted to sign it. The notary can produce a fraudulent copy, but they will be punished by having their bond and license publicly revoked. When this happens, everyone relying on the notary learns that the notary is malicious. All the notary's customers can immediately block the notary and prevent any malicious access to their accounts.
-
-## How does Optics work?
-
-Optics is patterned after optimistic systems. It sees an attestation of some data, and accepts it as valid after a timer elapses. While the timer is running, honest participants have a chance to respond to the attestation and/or submit fraud proofs.
-
-Unlike most optimistic systems, Optics spans multiple chains. The sending chain is the source of truth, and contains the “Home” contract where messages are enqueued. Messages are committed to in a merkle tree (the “message tree”). The root of this tree is notarized by the updater and relayed to the receiving chain in an “update”. Updates are signed by the updater. They commit to the previous root and a new root.
-
-Any chain can maintain a “Replica” contract, which holds knowledge of the updater and the current root. Signed updates are held by the Replica, and accepted after a timeout. The Replica effectively replays a series of updates to reach the same root as the Home chain. Because the root commits to the message tree, once the root has been transmitted this way, the message can be proven and processed.
-
-This leaves open the possibility that the Updater signs a fraudulent update. Unlike an optimistic rollup, Optics permits fraud. This is the single most important change to the security model. Importantly, fraud can always be proven to the Home contract on the sending chain. Because of this, the updater must submit a bonded stake on the sending chain. Fraud can always be proven on the sending chain, and the bond can be slashed as punishment.
-
-Unfortunately, certain types of fraud can't be objectively proven on the receiving chain; Replicas can't know which messages the home chain intended to send and therefore can't check message tree validity in all cases. However, if a message is falsified by an Updater and submitted to the Replica, that update is public. This means that any honest actor can prove this fraud on the original Home contract and cause slashing. There is no way to hide fraud.
-
-In addition, because the Replica waits to process messages, Optics guarantees that honest dapps can always prevent processing of dishonest messages. Fraud is always public knowledge before the fraudulent message is processed. In this sense, Optics (like atomic swaps and other locally verified systems) includes a requirement for honest users to stay online. We have built a robust system for delegating this responsibility.
-
-All off-chain observers can be immediately convinced of fraud (as they can check the home chain). This means that the validity of a message sent by Optics is not 100% guaranteed.
-
-Instead, Optics guarantees the following:
-
-- Fraud is costly
-- All users can learn about fraud
-- All users can block a fraudulent message before they are accepted
-
- In other words, rather than using a globally verifiable fraud-proof, Optics relies on local verification by participants. This tradeoff allows Optics to save 90% on gas fees compared to pessimistic relays, while still maintaining a high degree of security.
-
-## Optics Architecture
-
-Optics contains several on-chain and off-chain components. For convenience, we’ll be referring to the Home and Replica as contracts, when in fact they are several contracts working together.
-
-
-
-
-
-## On-chain (Contracts)
-
-### Home
-
-The home contract is responsible for managing production of the message tree and holding custody of the updater bond.
-
-__It performs the following functions:__
-
-- Expose a "send message" API to other contracts on the home chain
-- Enforce the message format
-- Commit messages to the message tree
-- Maintain a queue of tree roots
-- Slash the updater's bond
- - Double-update proofs
- - Improper update proofs
-
-### Replica
-
-The replica contract is responsible for managing optimistic replication and dispatching messages to end recipients.
-
-__It performs the following functions:__
-
-- Maintain a queue of pending updates
-- Finalize updates as their timeouts elapse
-- Accept double-update proofs
-- Validate message inclusion proofs
-- Enforce the message format
-- Ensure messages are processed in order
-- Dispatch messages to their destination
-- Off-chain (Agents)
-
-### Updater
-
-The updater is responsible for signing attestations of new roots.
-
-__It is an off-chain actor that does the following:__
-
-- Observe the home chain contract
-- Sign attestations to new roots
-- Publish the signed attestation to the home chain
-
-### Watcher
-
-The watcher observes the Updater's interactions with the Home contract (by watching the Home contract) and reacts to malicious or faulty attestations. It also observes any number of replicas to ensure the Updater does not bypass the Home and go straight to a replica.
-
-__It is an off-chain actor that does the following:__
-
-- Observe the home
-- Observe 1 or more replicas
-- Maintain a DB of seen updates
-- Submit double-update proofs
-- Submit invalid update proofs
-- If configured, issue an emergency halt transaction
-
-### Relayer
-
-The relayer forwards updates from the home to one or more replicas.
-
-__It is an off-chain actor that does the following:__
-
-- Observe the home
-- Observe 1 or more replicas
-- Polls home for new signed updates (since replica's current root) and submits them to replica
-- Polls replica for confirmable updates (that have passed their optimistic time window) and confirms if available (updating replica's current root)
-
-### Processor
-
-The processor proves the validity of pending messages and sends them to end recipients.
-
-__It is an off-chain actor that does the following:__
-
-- Observe the home
-- Maintain local merkle tree with all leaves
-- Observe 1 or more replicas
-- Maintain list of messages corresponding to each leaf
-- Generate and submit merkle proofs for pending (unproven) messages
-- Dispatch proven messages to end recipients
-
-## How Optics passes messages between chains
-
-
-
-
-
-Optics creates an authenticated data structure on a home chain, and relays updates to that data structure on any number of replicas. As a result, the home chain and all replicas will agree on the state of the data structure. By embedding data ("messages") in this data structure we can propagate it between chains with a high degree of confidence.
-
-The home chain enforces rules on the creation of this data structure. In the current design, this data structure is a sparse merkle tree based on the design used in the eth2 deposit contract. This tree commits to the vector of all previous messages. The home chain enforces an addressing and message scheme for messages and calculates the tree root. This root will be propagated to the replicas. The home chain maintains a queue of roots (one for each message).
-
-The home chain elects an "updater" that must attest to the state of the message tree. The updater places a bond on the home chain and is required to periodically sign attestations (updates or U). Each attestation contains the root from the previous attestation (U_prev), and a new root (U_new).
-
-The home chain slashes when it sees two conflicting updates (U_i and U_i' where U_i_prev == U_i'_prev && U_i_new != U_i'_new) or a single update where U_new is not an element of the queue. The new root MUST be a member of the queue. E.g a list of updates U_1...U_i should follow the form [(A, B), (B, C), (C, D)...].
-
-Semantically, updates represent a batch commitment to the messages between the two roots. Updates contain one or more messages that ought to be propagated to the replica chain. Updates may occur at any frequency, as often as once per message. Because updates are chain-independent, any home chain update may be presented to any replica, and any replica update may be presented to the home chain. In other words, data availability of signed updates is guaranteed by each chain.
-
-Before accepting an update, a replica places it into a queue of pending updates. Each update must wait for some time parameter before being accepted. While a replica can't know that an update is certainly valid, the waiting system guarantees that fraud is publicly visible on the home chain before being accepted by the replica. In other words, the security guarantee of the system is that all frauds may be published by any participant, all published frauds may be slashed, and all participants have a window to react to any fraud. Therefore updates that are not blacklisted by participants are sufficiently trustworthy for the replica to accept.
-
-## Optical Channels for Cross-Chain Communication
-
-Optics sends messages from one chain to another in the form of raw bytes. A cross-chain application that wishes to use Optics will need to define the rules for sending and receiving messages for its use case.
-
-Each cross-chain application must implement its own messaging protocol. By convention, we call the contracts that implement this protocol the application's Router contracts. Their function is broadly similar to routers in local networks. They ensure that incoming and outgoing messages are in the protocol-defined format, and facilitate handling and dispatch.
-
-__These Router contracts must:__
-
-- maintain a permissioned set of the contract(s) on remote chains from which it will accept messages via Optics — this could be a single owner of the application on one chain; it could be a registry of other applications implementing the same rules on various chains
-- encode messages in a standardized format, so they can be decoded by the Router contract on the destination chain
-- handle messages from remote Router contracts
-- dispatch messages to remote Router contracts
-
- By implementing these pieces of functionality within a Router contract and deploying it across multiple chains, we create a working cross-chain application using a common language and set of rules. Applications of this kind may use Optics as the cross-chain courier for sending and receiving messages to each other.
-
-## Benefits and Trade-offs of the Optics Architecture
-
-__Benefits__ | __Challenges__
--- | --
-Broadcast channel | 1-of-N fraud-proof trust model
-Cheap | Liveness failure if updater goes down
-One-solution fits all | Updater could voluntarily forfeit bond to try to pass forged messages
-Simple |
-
-The benefit of Optics is that the broadcast channel allows for a single-producer, multi-consumer model. This ensures that 1 accumulator can communicate with any number of receiving chains. It’s also much cheaper than other options, allowing updates and proofs to cost <100k gas and be checked by only 1 signature. With Optics, one-solution fits all meaning that constraints on receiving chains are minimal (1 hash function + 1 signature check). There is no implementation or security difference between Proof of Stake and Proof of Work chains. There is also many fewer LoC than a Relay, much lower design maintenance overhead, and much less expertise required to maintain and operate.
-
-We’ve been careful to address all concerns with the Optics system and have designed solutions that allow for optimal speed, cost, and security of the network. For example, we rely on fraud publication rather than fraud proofs to improve the speed and cost of sending messages. In this security model, any potential fraud is disincentivized and costly, and all participants will always learn of any potential fraud with plenty of time to mitigate harm.
diff --git a/docs/celo-codebase/protocol/oracles/oracles-on-celo.md b/docs/celo-codebase/protocol/oracles/oracles-on-celo.md
deleted file mode 100644
index 892752efb9..0000000000
--- a/docs/celo-codebase/protocol/oracles/oracles-on-celo.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Oracles on Celo
-description: A list of oracles available on the Celo network.
----
-
-# Oracles on Celo
-
-This page lists Oracles running on the Celo network.
-
-Here lists all on-chain Oracles:
-
-* [Celo Reserve Oracles](/celo-codebase/protocol/stability/oracles)
-* [RedStone Oracles](redstone-protocol-how-to.md)
-* [Band Protocol](band-protocol-how-to.md)
\ No newline at end of file
diff --git a/docs/celo-codebase/protocol/plumo.md b/docs/celo-codebase/protocol/plumo.md
deleted file mode 100644
index 9ecc45b062..0000000000
--- a/docs/celo-codebase/protocol/plumo.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-title: Plumo Ultralight Sync
-description: Introduction to Plumo (Ultralight Sync), it's core concepts, architecture, process, and implementation.
----
-
-# Plumo Ultralight Sync
-
-Introduction to Plumo Ultralight Sync, it's core concepts, architecture, process, and implementation.
-
-___
-
-## What is Plumo Ultralight Sync?
-
-Plumo is a zk-SNARK based system that allows mobile and resource constrained nodes on the Celo network to sync to the Celo blockchain faster and with less data. It accomplishes this by using zero-knowledge proofs, which allow the quick verification of the chain syncing computation without having to run it locally.
-
-## Background
-
-Celo is a mobile-first blockchain platform with a mission to enable the conditions for prosperity across the world. This means that may of Celo and the Valora wallet's first users will be in emerging markets. In these countries, while mobile phone penetration has significantly increased, data plans and device hardware still lags. This means that for average users, data is a scarce commodity and devices are underpowered in compute relative to the latest and greatest iPhone or Android devices.
-
-If these users are to trustlessly sync and interact with a blockchain network, they'll need to run a [light client](https://www.parity.io/what-is-a-light-client/) on devices. However, traditional light clients in proof of work (PoW) blockchains need to download every block header, which grows linearly with new blocks. Over time, this becomes untenable, and even light clients [take minutes to sync](https://ethereum.stackexchange.com/questions/82568/whats-the-status-of-ethereum-light-client).
-
-### Proof of Stake Light Clients
-
-Celo uses a proof of stake (PoS) consensus sytem, enabling it to offer a better light client sync experience, right off the bat:
-
-1. First, Celo light clients only need to download epoch block headers, which contain information about the current validator set. [The validator set](/celo-codebase/protocol/consensus/validator-set-differences.md) in Celo changes once every epoch, roughly about once per day. This means instead of downloading a block header for every block on the Celo network, they can just download one a day.
-
-2. Second, Celo uses BLS signatures to aggregate validator signatures. Similar to Tendermint consensus, Celo's IBFT consensus mechanism requires a quorum of 2/3 or more validators to sign each block to commit it to the blockchain. Instead of having each of these signatures be separately stored on-chain, Celo uses BLS signatures which can combine them into one signature per block.
-
-These two innovations reduce the time and data required to sync significantly, but over time, sync time continues to increase. One option is to [checkpoint](https://decentralizedthoughts.github.io/2019-09-13-dont-trust-checkpoint/) the chain ever so frequently so that clients do not need to sync from the genesis block. This certainly alleviates the challenge, but checkpointing requires getting consensus and agreement from the community, which can take time. What if there were a way to "checkpoint" cryptographically?
-
-### Enter Plumo
-
-This is where Plumo comes in. Plumo zk-SNARKs allow light clients to quickly verify transitions from epoch X to epoch X + Y, where Y is hundreds of epochs. This means that instead of verifying each epoch, light clients can "hop" from SNARK to SNARK until they reach the latest proof. From there, they can download the remaining epoch block headers to sync to the head of the chain.
-
-The Plumo proofs are generated by a prover that can be run by multiple nodes across the Celo network. Proofs are then requested by light clients on the modified light client protocol. Light clients are able to verify proofs using the verification key that is included with the binary.
-
-Using Plumo, light clients can drastically reduce the amount of data and time required to trustlessly sync with the Celo blockchain. But one more step is required for Plumo to be live on the Celo network -- the Plumo MPC setup.
-
-## Plumo MPC Setup
-
-In order to generate the prover and verifier keys for the Plumo SNARK circuit, it is necessary to run a multi-party computation (MPC).
-
-An MPC is a cryptographic mechanism for different parties to jointly perform a computation. SNARK circuits require a “trusted setup” where a shared secret is used to generate public parameters that can be used to prove and verify SNARKs. If one person ran this setup, then they could potentially prove incorrect things by exploiting a backdoor in the circuit. However, with an MPC, this setup process is split amongst tens or hundreds of contributors, and if even one of the participants is honest (keeps their inputs private), then the system will be secure.
-
-In the case of the Plumo Ceremony, this collective computation will be a series of joint actions done by a group of participants from within the Celo community and beyond.
-
-## How to Contribute
-
-The Plumo MPC setup is broken up into two phases:
-
-* Phase 1 - Powers of Tau
- - The output of this phase can be used for either Groth16 circuits up to the size of the phase, or universal proving systems such as PLONK and Marlin.
-* Phase 2 - Plumo circuit
- - In this phase, the participants contribute to the Plumo circuit keys, which would be used by provers to create proofs and verifiers to verify them.
-
-Phase 1 will take place starting early December 2020, and continue until January 2021. It will consist of multiple rounds of 6–10 contributors each running the Plumo setup for approximately 36 hours. While much of the activity is passive and involves simply running the computation continuously, contributors should not expect to use their machines for other intensive activies through the duration of the setup.
-
-Phase 2 will commence roughly a month after Phase 1.
-
-Contributors will also receieve a gift for the time and efforts, and be recognized for their contributions to the Celo network.
-
-### Pre-requisites
-
-You can run the contributor software locally or on cloud VMs, but desktop machines are preferable. The minimum machine requirements are detailed below:
-
-#### Machine requirements:
-
-- CPU model newer than 2016
-- Minimum processor requirements:
- - 2.6GHz, 6 cores, 12 threads, OR
- - 2.3GHz, 8 cores, 16 threads, OR
- - 3.6GHz, 4 cores, 4 threads
-- Operating system: Linux, macOS, Windows
-- Recommended internet connection speed: 10Mbit upload
-
-With these kind of machines, participiation in the setup should take around 30 hours, potentially a bit more or much less, depending on your specific hardware and internet connection.
-
-## Running the Setup
-
-### Phase 1
-
-The instructions below are for the first phase of the Plumo setup, Powers of Tau.
-
-#### Generate your address
-
-The first step to participating is generating your Celo address in a secure location.
-
-* Obtain the `generate` binary:
- * Option one - compile the `generate` binary:
- * Install Rust 1.49 using `rustup install 1.49.0`. If you don't have `rustup` installed, follow the instructions in https://rustup.rs/. If you're using an Apple M1 machine, install the beta version of Rust using `rustup install beta`.
- * `git clone https://github.com/celo-org/snark-setup-operator`
- * `cd snark-setup-operator`
- * `git checkout ac3d5603256fc250500e00bae21ba646dd316d6f`
- * `cargo build --release --bin generate`
- * Now you can use `./target/release/generate`
- * Option two - if you prefer using a precompiled binary, download the `generate` binary corresponding to your OS from [here](https://github.com/celo-org/snark-setup-operator/releases/tag/v1.1.3).
-* Use `b2sum` to check the hash of the binary against the hash in the download page by running `b2sum FILE`, where `FILE` is the `contribute` binary name for your OS. If you don't have `b2sum` installed, you can download it from `https://github.com/dchest/b2sum`, for example.
-* Run it in a command line - navigate in the command line to the relevant folder - and follow the instructions.
- * When asked to `Enter some entropy for your Plumo seed:`, you can use any source of entropy.
- * Make sure to save your passphrase - you will need it later.
- * If you are using a USB thumbdrive, you can use the flag `--keys-file KEYS_FILE`, passing in the respective file path to save the key on the drive itself.
-* Send the address generated to plumo@celo.org.
-* Keep the resulting `plumo.keys` file. Ideally, it will be stored in a location that's easy to destroy afterwards, such as a USB thumbdrive.
-
-#### Run the Contributor software
-
-Next you'll obtain the `contribute` binary and begin contributing to the Plumo setup.
-
-cLabs is running the coordinator server, which has a list of approved participant addresses. Additionally, cLabs is running a few verifiers that verify contributions on-demand, allowing the setup to make progress.
-
-* After receiving confirmation from cLabs, obtain the `contribute` binary:
- * Option one - compile the `contribute` binary:
- * Install Rust 1.49 using `rustup install 1.49.0`. If you don't have `rustup` installed, follow the instructions in https://rustup.rs/. If you're using an Apple M1 machine, install the beta version of Rust using `rustup install beta`.
- * `git clone https://github.com/celo-org/snark-setup-operator`
- * `cd snark-setup-operator`
- * `git checkout ac3d5603256fc250500e00bae21ba646dd316d6f`
- * `cargo build --release --bin contribute`
- * Now you can use `./target/release/contribute`
- * Option two - if you prefer using a precompiled binary, download the `contribute` binary corresponding to your OS from [here](https://github.com/celo-org/snark-setup-operator/releases/tag/v1.1.3).
-* Use `b2sum` to check the hash of the binary against the hash in the download page by running `b2sum FILE`, where `FILE` is the `contribute` binary name for your OS. If you don't have `b2sum` installed, you can download it from `https://github.com/dchest/b2sum`, for example.
-* Run it as follows, assuming your keys reside in KEYS_FILE:
- * Windows users: `./contribute-windows.exe --keys-file KEYS_FILE`
- * macOS users: `./contribute-macos --keys-file KEYS_FILE`
- * Linux users: `./contribute-linux --keys-file KEYS_FILE`
-
- For example, assuming you're using Linux and your keys reside in `/mnt/plumo/plumo.keys`, you'd run: `./contribute-linux --keys-file /mnt/plumo/plumo.keys`.
-* You will be asked for your passphrase - enter the same one from earlier.
- * Follow the same process from earlier when prompted for additional entropy.
-* Wait until you see 0/256 on the progress bar. This means that your contribution has started, and you are succesfully running the contributor binary.
-
-Once this is running, you can leave the machine running -- no direct action is needed. This will run for about ~36 hours, after which the software will terminate running and you will have finished contributing to the Plumo setup!
-
-### Phase 2
-
-The instructions below are for the second phase of the Plumo setup, the Plumo circuit.
-
-#### Generate your address
-
-The first step to participating is generating your Celo address in a secure location.
-
-* Obtain the `generate` binary:
- * Option one - compile the `generate` binary:
- * Install Rust 1.52 using `rustup install 1.52.1`. If you don't have `rustup` installed, follow the instructions in https://rustup.rs/. If you're using an Apple M1 machine, install the beta version of Rust using `rustup install beta`.
- * `git clone https://github.com/celo-org/snark-setup-operator`
- * `cd snark-setup-operator`
- * `git checkout 33717c3b0869c605e6c3627446e916f268712e00`
- * `cargo build --release --bin generate`
- * Now you can use `./target/release/generate`
- * Option two - if you prefer using a precompiled binary, download the `generate` binary corresponding to your OS from [here](https://github.com/celo-org/snark-setup-operator/releases/tag/v1.2.2).
-* Use `b2sum` to check the hash of the binary against the hash in the download page by running `b2sum FILE`, where `FILE` is the `contribute` binary name for your OS. If you don't have `b2sum` installed, you can download it from `https://github.com/dchest/b2sum`, for example.
-* Run it in a command line - navigate in the command line to the relevant folder - and follow the instructions.
- * When asked to `Enter some entropy for your Plumo seed:`, you can use any source of entropy.
- * Make sure to save your passphrase - you will need it later.
- * If you are using a USB thumbdrive, you can use the flag `--keys-file KEYS_FILE`, passing in the respective file path to save the key on the drive itself.
-* Send the address generated to plumo@celo.org.
-* Keep the resulting `plumo.keys` file. Ideally, it will be stored in a location that's easy to destroy afterwards, such as a USB thumbdrive.
-
-#### Run the Contributor software
-
-Next you'll obtain the `contribute` binary and begin contributing to the Plumo setup.
-
-cLabs is running the coordinator server, which has a list of approved participant addresses. Additionally, cLabs is running a few verifiers that verify contributions on-demand, allowing the setup to make progress.
-
-* After receiving confirmation from cLabs, obtain the `contribute` binary:
- * Option one - compile the `contribute` binary:
- * Install Rust 1.52 using `rustup install 1.52.1`. If you don't have `rustup` installed, follow the instructions in https://rustup.rs/. If you're using an Apple M1 machine, install the beta version of Rust using `rustup install beta`.
- * `git clone https://github.com/celo-org/snark-setup-operator`
- * `cd snark-setup-operator`
- * `git checkout 33717c3b0869c605e6c3627446e916f268712e00`
- * `cargo build --release --bin contribute`
- * Now you can use `./target/release/contribute`
- * Option two - if you prefer using a precompiled binary, download the `contribute` binary corresponding to your OS from [here](https://github.com/celo-org/snark-setup-operator/releases/tag/v1.2.2).
-* Use `b2sum` to check the hash of the binary against the hash in the download page by running `b2sum FILE`, where `FILE` is the `contribute` binary name for your OS. If you don't have `b2sum` installed, you can download it from `https://github.com/dchest/b2sum`, for example.
-* Run it as follows, assuming your keys reside in KEYS_FILE:
- * Windows users: `./contribute-windows.exe --keys-file KEYS_FILE`
- * macOS users: `./contribute-macos --keys-file KEYS_FILE`
- * Linux users: `./contribute-linux --keys-file KEYS_FILE`
-
- For example, assuming you're using Linux and your keys reside in `/mnt/plumo/plumo.keys`, you'd run: `./contribute-linux --keys-file /mnt/plumo/plumo.keys`.
-* You will be asked for your passphrase - enter the same one from earlier.
- * Follow the same process from earlier when prompted for additional entropy.
-* Wait until you see 0/256 on the progress bar. This means that your contribution has started, and you are succesfully running the contributor binary.
-
-Once this is running, you can leave the machine running -- no direct action is needed. This will run for about ~36 hours, after which the software will terminate running and you will have finished contributing to the Plumo setup!
-
-### Publish your attestation
-
-The `contribute` binary produces a `plumo.attestation` file that contains a signature with your address. After your participation finishes (and not before!), please post it (here)[https://github.com/celo-org/plumo-ceremony-attestations] by creating a new issue! If you use precompiled binaries, be sure to mention you've verified the binary hashes posted on the releases page match the downloaded files.
-
-If you don't have access to the `plumo.attestation` anymore, that's still OK, you can fill in the other details in the issue.
-
-### Troubleshooting
-
-This section contains some common issues contributors may run into while running the setup software. If you have any questions, please reach out on the #plumo channel in the [Celo Discord server](https://discord.gg/6yWMkgM). It is recommended that you have another device to be able to reach out in case of persistent issues.
-
-**Permissions:**
-- You may need to change the permissions on both the `generate` and `contribute` files to be able to run them. For example, on macOS, you can run `chmod u+x generate-macos contribute-macos`.
-- On Windows, you might be presented with a warning that this program is from an unsigned developer. Click "run anyway" to continue.
-- On macOS, you might be shown a "permission denied" error. This is because it's a downloaded file and is by default in quarantine. You can remove it from quarantine by running `xattr -d com.apple.quarantine contribute-macos`. See here for more details: https://superuser.com/questions/526920/how-to-remove-quarantine-from-file-permissions-in-os-x.
-
-**Hardware:**
-- Disable sleep - if your machine is automatically set to sleep or turn hard disks off, it's best to switch these options off.
-- Battery - it's best to connect the machine to an outlet, as the setup is computationally intensive and would drain a battery fast.
-- Frozen machine - if your computer freezes, don't worry -- the Plumo setup software is using all the threads on the CPU, and it should resolve itself.
-
-If either of these happen, don't worry - stop and restart the contribution program and re-enter the passphrase to continue.
-
-**Network:**
-- If you have issues uploading your contributions, it could be that you have some other processes that are consuming your bandwidth. Make sure to quit any processes such as:
- - A Nest or home camera uploading feeds
- - Torrenting / seeding any files
- - Backup services
-
-## Additional Resources
-- [Plumo Paper](https://docs.zkproof.org/pages/standards/accepted-workshop3/proposal-plumo_celolightclient.pdf)
-- [Plumo Celo Improvement Proposal](https://github.com/celo-org/celo-proposals/pull/41)
-- [Zero Knowledge Summit Presentation on Plumo](https://www.youtube.com/watch?v=2e0XpWgFKLg)
-- [Transcript of Plumo presentation at Stanford Blockchain Conference](https://diyhpl.us/wiki/transcripts/stanford-blockchain-conference/2020/celo-ultralight-client/)
-- [Zero Knowledge Summit Presentation on the Plumo setup system, Espero](https://www.youtube.com/watch?v=LKbDNc-LrA4)
diff --git a/docs/celo-codebase/protocol/proof-of-stake/carbon-offsetting-fund.md b/docs/celo-codebase/protocol/proof-of-stake/carbon-offsetting-fund.md
deleted file mode 100644
index a7e1d68492..0000000000
--- a/docs/celo-codebase/protocol/proof-of-stake/carbon-offsetting-fund.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Carbon Offsetting Fund
-slug: /celo-codebase/protocol/proof-of-stake/epoch-rewards/carbon-offsetting-fund
-description: Introduction to the Carbon Offsetting fund, its purpose, and governance process.
----
-# Carbon Offsetting Fund
-
-Introduction to the Carbon Offsetting fund, its purpose, and governance process.
-
-___
-
-## What is the Carbon Offsetting Fund?
-
-The Carbon Offsetting Fund provides for making the infrastructure of the Celo platform carbon-negative, by making a transfer every epoch to an organization that commits to using those assets off-chain for carbon offsetting projects.
-
-## Governance
-
-Through the [on-chain governance process](/celo-codebase/protocol/governance.md), CELO holders can set the fraction of the total desired epoch rewards, initially planned to be 0.1%, that is received by the carbon offsetting fund, and the address of a carbon offsetting partner to which to direct these transfers. The on-target amount is adjusted by the epoch [rewards multiplier](/celo-codebase/protocol/proof-of-stake/epoch-rewards.md), as with all epoch rewards.
diff --git a/docs/celo-codebase/protocol/proof-of-stake/community-fund.md b/docs/celo-codebase/protocol/proof-of-stake/community-fund.md
deleted file mode 100644
index 3467363326..0000000000
--- a/docs/celo-codebase/protocol/proof-of-stake/community-fund.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Celo Community Fund
-slug: /celo-codebase/protocol/proof-of-stake/epoch-rewards/community-fund
-description: Introduction to the community fund, its assets, and its relationship to the on-chain reserve.
----
-# Community Fund
-
-Introduction to the community fund, its assets, and its relationship to the on-chain reserve.
-
-___
-
-## What is the Community Fund?
-
-The Community Fund provides for general upkeep of the Celo platform. CELO holders decide how to allocate these funds through governance proposals. Funds might be used to pay bounties for bugs or vulnerabilities, security audits, or grants for protocol development.
-
-## Community Fund Assets
-
-The Community Fund receives assets from three sources:
-
-- The Community Fund obtains a desired epoch reward defined as a fraction of the total desired epoch rewards \(governable, initially planned to be $$25\%$$\). This amount is subject to adjustment up or down in the event of under- or over-spending against the epoch rewards target schedule. The Community Fund epoch rewards may be redirected to [bolster the Reserve](#bolstering-the-reserve).
-
-- The Community Fund is the default destination for slashed assets.
-
-- The Community Fund also receives the 'base' portion of [transaction fees](celo-codebase/protocol/transactions/gas-pricing.md).
-
-## Bolstering the Reserve
-
-The rewards to the Community Fund are automatically redirected to the on-chain reserve during times in which the reserve ratio (the ratio of aggregate reserve value of on-chain CELO and the off-chain reserve of crypto-assets over stablecoin market capitalization) is below a cutoff value. This cutoff reduces from two to one over the first of 25 years in a linear fashion and remains at one afterwards.
diff --git a/docs/celo-codebase/protocol/stability/index.md b/docs/celo-codebase/protocol/stability/index.md
deleted file mode 100644
index e265b27e79..0000000000
--- a/docs/celo-codebase/protocol/stability/index.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Celo Stability Mechanism Overview
-slug: /celo-codebase/protocol/stability
-description: Overview of the Celo protocol's Stability Mechanisms.
----
-import YouTube from '@components/YouTube';
-import PageRef from '@components/PageRef';
-
-# Stability Mechanism
-
-Overview of the Celo protocol's Stability Mechanisms.
-
-___
-
-## Stability of Celo's Stablecoin Protocol
-
-
-
-The Celo protocol's stability mechanism comprises the following:
-
-
-
-
-
-
-
diff --git a/docs/celo-codebase/protocol/stability/tobin-tax.md b/docs/celo-codebase/protocol/stability/tobin-tax.md
deleted file mode 100644
index 6979c36df6..0000000000
--- a/docs/celo-codebase/protocol/stability/tobin-tax.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Celo Tobin Tax
-description: Overview of the Tobin Tax and its effect on the Celo reserve.
----
-# Tobin Tax
-
-Overview of the Tobin Tax and its effect on the Celo reserve.
-
-___
-
-:::info
-
-The tobin tax is currently **disabled** on Mainnet.
-
-:::
-
-## Implementing the Tobin Tax
-
-If the Celo reserve ratio falls below `tobinTaxReserveRatio`, a small fee is levied on CELO transfers to discourage further depletion of CELO collateral. This fee is transferred to the `Reserve` smart contract. There is no gas charged for this transfer. The `tobinTaxReserveRatio` and the `tobinTax` parameters are governable.
-
-## Reserve Ratio Calculation
-
-The total Celo reserve value, expressed in CELO units, is approximated on-chain by dividing the reserve CELO balance by the CELO target asset allocation weight. The Celo reserve ratio is then computed by dividing the total reserve value by the value of Celo Dollar supply expressed in CELO units.
diff --git a/docs/celo-codebase/protocol/transactions/erc20-transaction-fees.md b/docs/celo-codebase/protocol/transactions/erc20-transaction-fees.md
deleted file mode 100644
index 49ea946f9b..0000000000
--- a/docs/celo-codebase/protocol/transactions/erc20-transaction-fees.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Paying for Gas in Tokens
-description: How to pay Celo gas fees using whitelisted ERC20 tokens.
----
-# Paying for Gas in Tokens
-
-How to pay Celo gas fees using whitelisted ERC20 tokens.
-
-___
-
-## Transaction Fees
-
-As in Ethereum, transaction fees play a critical role in the Celo protocol as a safeguard against denial-of-service attacks. In order to simplify the process of sending funds, these fees can be paid in ERC20 tokens, and not just the native token of the protocol, CELO. This means that a user sending Celo Dollars to friends or family will be able to pay their transaction fee out of their Celo Dollar balance, and do not need to hold a separate balance of CELO in order to make transactions.
-
-## Fee Currency Field
-
-The protocol maintains a governable whitelist of smart contract addresses which can be used to pay for transaction fees. These smart contracts implement an extension of the ERC20 interface, with additional functions that allow the protocol to debit and credit transaction fees. When creating a transaction, users can specify the address of the currency they would like to use to pay for gas via the `feeCurrency` field. Leaving this field empty will result in the native currency, CELO, being used. Note that transactions that specify non-CELO gas currencies will cost approximately 50k additional gas.
diff --git a/docs/celo-codebase/protocol/transactions/full-node-incentives.md b/docs/celo-codebase/protocol/transactions/full-node-incentives.md
deleted file mode 100644
index 6b817ff02b..0000000000
--- a/docs/celo-codebase/protocol/transactions/full-node-incentives.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: Celo Full Node Incentives
-description: Overview of full node incentives available to node operators using gateway fees and transaction payments.
----
-
-# Full Node Incentives
-
-Overview of full node incentives available to node operators using gateway fees and transaction payments.
-
-___
-
-
-:::info
-
-Full node incentives are still very much in the early-research stage are **not yet** live on mainnet.
-
-:::
-
-## Gateway fees
-
-The Celo protocol will support **gateway fees**. These fees create an incentive for node operators to run a full node that is not a validator and act as a 'gateway', i.e. answer requests and forward transactions, on behalf of light clients. This is important since it is likely that the vast majority of nodes in the Celo network will be light or ultralight clients, and so the vast majority of full nodes will need to be deployed to service them rather than act as validators. In contrast, in Ethereum, there are few incentives to run a full node that is not mining and so few nodes serve light clients, resulting in a poor experience for mobile wallets.
-
-
-
-## Optional Fields
-
-A pair of optional fields in the transaction structure, the `GatewayFee` and `GatewayFeeRecipient`, may be specified by light clients to identify the full node which is acting as their gateway to the Celo network. Light clients will set the `GatewayFeeRecipient` to the Etherbase of the serving full node and the `GatewayFee` field to a small amount of CELO, or [alternative fee currency](/celo-codebase/protocol/transactions/erc20-transaction-fees.md), which will be sent to the recipient at the point that the transaction is processed and included in a block. Note that the gateway fee is paid even if the transaction is reverted.
-
-## Transaction Payments
-
-By attaching a payment to the transaction, the light client incentives the full node to serve its requests. Although many of the APIs that a light client will need to call, such as requesting block headers or chain state, do not provide any payment to the full node, refusing to serve non-transaction RPC calls will cause the light client to seek other full nodes to serve their transactions. Light clients may choose full node peers based on location, cost, reliability and other factors to optimize cost and quality of service.
-
-## Minimum Gateway Fees
-
-When a minimum gateway fee is specified, full nodes refuse to process a transaction if the `GatewayFeeRecipient` field is not set to the full node's Etherbase or the `GatewayFee` value is not high enough. Full nodes set their Etherbase with the `--etherbase` flag to indicate the address to which gateway fees should be sent and the `--light.gatewayfee` flag to indicate the minimum fee value they will accept.
diff --git a/docs/celo-codebase/protocol/transactions/index.md b/docs/celo-codebase/protocol/transactions/index.md
deleted file mode 100644
index 99315c4979..0000000000
--- a/docs/celo-codebase/protocol/transactions/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Celo Transactions Overview
-description: Introduction to Celo transactions, gas prices, and gateway fees.
-slug: /celo-codebase/protocol/transactions
----
-# Transactions
-
-Introduction to Celo transactions, gas prices, and gateway fees.
-
-___
-
-
-## Celo vs Ethereum Transactions
-
-Transactions in the Celo protocol include payments, contract calls, and other operation which modifies state. They are similar to Ethereum transaction with the following key differences.
-
-- Gas prices must meet or exceed the [gas price minimum](/celo-codebase/protocol/transactions/gas-pricing.md).
-- [Gateway fees](/celo-codebase/protocol/transactions/full-node-incentives.md) may be included to incentivize full nodes to serve the transaction.
-- Gas and gateway fees may be paid in currencies other than the native CELO.
diff --git a/docs/celo-codebase/style-guide/typescript.md b/docs/celo-codebase/style-guide/typescript.md
deleted file mode 100644
index c556e80913..0000000000
--- a/docs/celo-codebase/style-guide/typescript.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# TypeScript Style Guide
-
-### Function parameters
-
-_Vanilla parameters_ are preferred over Object Destructuring.
-
-Example of Vanilla parameters:
-
-```
-export const tokenFetchFactory = (
- actionName,
- contractGetter,
- actionCreator,
- tag,
-)
-```
-
-Example of Object Destructuring:
-
-```
-export const tokenFetchFactory = ({
- actionName,
- contractGetter,
- actionCreator,
- tag,
-}: TokenFetchFactory)
-```
-
-This is for simplicity, with fewer lines and some evidence shows it's [faster](https://codeburst.io/es6s-function-destructuring-assignment-is-not-free-lunch-19caacc18137).
-
-### Function definitions: Arrow functions vs Vanilla functions
-
-In the root scope, _Vanilla functions_ are preferred over Arrow functions.
-
-This is because it's consistent with generator functions, simpler to understand, easier to debug, supports recursion and functions are hoisted, meaning no concern about definition order.
-
-### Class methods: anonymous functions vs native methods
-
-Anonymous functions are the preferred way. As shown in the example:
-
-```
-class myClass {
- myMethod = () => {}
-}
-```
-
-### Exporting variables only for testing
-
-When a variable is exported only for the propose of getting accessed by tests, a low dash should be added before the name.
-
-For example instead of doing this:
-
-```
-export myFunction{...}
-```
-
-This is the preferred way:
-
-```
-const myFunction{...}
-export _myFunction = myFunction
-```
-
-In case it's necessary, a decorator could wrap the exported function to allow it only to be accessed during testing.
diff --git a/docs/celo-codebase/wallet/how-the-wallet-works/README.md b/docs/celo-codebase/wallet/how-the-wallet-works/README.md
deleted file mode 100644
index 424d255fee..0000000000
--- a/docs/celo-codebase/wallet/how-the-wallet-works/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Celo Wallet Functionality
-desciption: This section describes the technology powering key functionality of the Celo Wallet.
----
-
-import PageRef from '@components/PageRef'
-
-# Wallet Functionality
-
-This section describes the technology powering key functionality of the Celo Wallet.
-
-
-
-
-
diff --git a/docs/celo-codebase/wallet/how-the-wallet-works/invitations.md b/docs/celo-codebase/wallet/how-the-wallet-works/invitations.md
deleted file mode 100644
index f619d9722c..0000000000
--- a/docs/celo-codebase/wallet/how-the-wallet-works/invitations.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Wallet Invitations
-description: How invitations allow users to create accounts in the Celo wallet.
----
-
-# Wallet Invitations
-
-How invitations allow users to create accounts in the Celo wallet.
-
-___
-## Overview
-
-To be able to use the wallet and create an account, a user must be invited through their phone number by a verified user. The inviter will send an _invitation code_ to the invitee, which they can later redeem upon downloading the app.
-
-## Sending Invitations
-
-If Alice is verified, she can invite \(unverified\) Bob to the app by choosing him through her contacts list in the wallet or by inputting his phone number. This will generate a temporary public/private key pair and associated temporary wallet address. Alice will have to pay a small invitation fee to this temporary wallet. Finally, Alice's wallet app will auto populate a message including this temporary private key, now known as invitation code, and will prompt Alice to send this message to Bob through either SMS or WhatsApp.
-
-:::info
-
-The invitation fee allows for invitees to be able to pay for verification fees and complete the [verification](verification.md) process upon redemption of the invitation code.
-
-:::
-
-Along with an invite, inviters also have the option of sending a payment. In the example above, Alice will send this payment to an [escrow](/celo-codebase/protocol/transactions/escrow.md) smart contract which maps the temporary wallet address associated with the invitation code/temporary private key with the specific payment.
-
-## Escrow and Redeeming Invites
-
-After downloading the wallet app, Bob can redeem the invitation code that Alice sent him by inputting it into the app's homepage. During the invitation code redemption process:
-
-- A new public/private key pair and corresponding wallet address is generated \(which only Bob has access to\). This is his permanent wallet address.
-- Bob proves ownership of the temporary wallet address since he can provide its corresponding private key \(which is the invitation code\).
-- Bob then transfers the invitation fee held in the temporary wallet to his newly created permanent wallet.
-- Bob is then prompted to the [verification](/celo-codebase/wallet/how-the-wallet-works/verification.md) screen.
-
-If the invite code is attached to an [escrowed payment](/celo-codebase/protocol/transactions/escrow.md) then, upon finishing verification, the payment will be automatically withdrawn and those funds will be transferred into the user’s account.
-
-:::info
-
-If a user has been invited by multiple people and they all sent payments along with the invite, the user will only be able to redeem the payment corresponding to the invite code they chose to use initially. The original senders of the rest of the unclaimed payments will be able to reclaim those funds and resend the payment to the new wallet associated to the now-verified user.
-
-:::
diff --git a/docs/celo-codebase/wallet/how-the-wallet-works/sending-and-requesting-payments.md b/docs/celo-codebase/wallet/how-the-wallet-works/sending-and-requesting-payments.md
deleted file mode 100644
index f23b2439a1..0000000000
--- a/docs/celo-codebase/wallet/how-the-wallet-works/sending-and-requesting-payments.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Payments and Exchanging
-description: How the Celo wallet facilitates payments and exchanges using Celo assets.
----
-# Payments and Exchanging
-
-How the Celo wallet facilitates payments and exchanges using Celo assets.
-
-___
-
-## Payments
-
-### Sending
-
-The Celo Wallet can be used to send and request payments with anyone who has verified their phone number to an address\(or using QR codes for unverified addresses\). Send transactions make a call to the `transferWithComment` function within the `StableToken` contract.
-
-### Comment Encryption
-
-Comments are encrypted using the `messageEncryptionKey` of the sender and the recipient to ensure that comment contents are kept private. These encrypted comments are then stored on chain. For more details, please refer to the [Encrypted Payment Comments](/celo-codebase/protocol/transactions/tx-comment-encryption.md) section of protocol documentation.
-
-### Requesting
-
-Payment requests occur off chain - using a service \(firebase in the open source Celo Wallet\) we deliver payment requests. Upon confirmation of a request, a send transaction is created and sent.
-
-### Notifications
-
-For non-essential functionality that is not detrimental to interoperability, a private firebase service. Notifications in the Celo Wallet are one example of this. Users receive push notifications in the following circumstances:
-
-- Receiving a payment request
-- Payment of an outstanding payment request
-
-:::info
-
-In order for notifications to work in a fork of the Celo Wallet, creation of another firebase service for the forked wallet is necessary.
-
-:::
-## Exchanging
-
-The Mobile Exchange experience implements the uniswap-style exchange detailed in [Stability Mechanism Documentation](../../protocol/stability/doto.md). For this reason, rates provided are an overestimate of the current rate and subject to change \(such changes are presented to the user if they result in a less favorable rate\)
\ No newline at end of file
diff --git a/docs/celo-codebase/wallet/how-the-wallet-works/ultralight-node-sync.md b/docs/celo-codebase/wallet/how-the-wallet-works/ultralight-node-sync.md
deleted file mode 100644
index 0d21048084..0000000000
--- a/docs/celo-codebase/wallet/how-the-wallet-works/ultralight-node-sync.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Ultralight Node Sync
-description: How Ultralight Node sync works with the Celo wallet.
----
-# Ultralight Node Sync
-
-How Ultralight Node sync works with the Celo wallet.
-
-___
-
-
-## Fetch Headers
-
-The Celo Wallet first fetches the latest header to learn about the likely latest block height. Next, it fetches all the _epoch headers_ between Genesis and the latest block height. The fetch is done in batches of 192 blocks \(Ethereum's default batch size\) to minimize latency. In Celo's case, each of these headers are not contiguous and are instead one epoch apart \(planned for around 1 day for mainnet\).
-
-## Validate Headers
-
-The wallet then validates each of the epoch headers by updating the set of validators at every epoch, and using that set to verify signatures. Once the wallet has reached the latest epoch, it can verify the signatures of all header is that epoch, including the latest one.
-
-## Fetch Blocks
-
-Once the latest header is verified, all the block from that point onwards are fetched. When the app restarts, only the epoch blocks between the last fetched block and the latest header are fetched.
-
-:::tip note
-
-In the future, Celo will support zk-SNARK-based proofs that can succinctly prove this sequence of steps, which will lower the sync times and data usage even more.
-
-:::
diff --git a/docs/celo-codebase/wallet/how-the-wallet-works/verification.md b/docs/celo-codebase/wallet/how-the-wallet-works/verification.md
deleted file mode 100644
index 82ac820d72..0000000000
--- a/docs/celo-codebase/wallet/how-the-wallet-works/verification.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Celo Wallet Verification
-description: How the Celo wallet uses phone number verification to map phone number hashses to addresses.
----
-
-# Wallet Verification
-
-How the Celo wallet uses phone number verification to map phone number hashses to addresses.
-
-___
-
-
-## How does Wallet Verification work?
-
-The Celo Wallet leverages the [Lightweight Identity](../../protocol/identity/) protocol to construct mappings of phone number hashes to addresses.
-
-### Phone Number Verification in the Wallet
-
-During the final step of new user onboarding in the Celo Wallet, a user completes phone number verification. Given that the Celo Protocol supports a variable, the Celo Wallet implements this as a binary notion of `verified` \(>= 3 attestations\) or `unverified` \(< 3 attestations\). During the verification process, three attestations are attempted, and the user receives three text messages, upon receipt of which the user is considered verified. Future implementations of the wallet may explore using requested/received verification ratios or variable numbers of attestations to provide a notion of non-binary verification so as to account for variable probabilities of ownership of a phone number.
-
-### Verifications
-
-When verification is in progress, the celo wallet sends a request for three SMS attestations. The process of selecting the senders of each of these three messages is detailed in the [Lightweight Identity](../../protocol/identity/) documentation.
-
-The following diagrams depict the user flows for the celo wallet:
-
-- [General Verification Flow](https://storage.googleapis.com/celo-website/Verification%20Flow.jpg)
-- [Detailed Phone Number Hash Flow](https://storage.googleapis.com/celo-website/Get%20Phone%20Number%20Hash%20Details%20Flow.jpg)
-- [Detailed Flow for Receiving SMS Input and Compeleting Verification](https://storage.googleapis.com/celo-website/Wait%20SMS%20and%20Complete%20Attestation%20Flow%20(1).jpg)
diff --git a/docs/celo-codebase/wallet/index.md b/docs/celo-codebase/wallet/index.md
deleted file mode 100644
index 0ed1a00643..0000000000
--- a/docs/celo-codebase/wallet/index.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Celo Wallet
-description: How to use the Celo wallet to manage Celo assets.
-slug: /celo-codebase/wallet
----
-
-# Celo Wallet
-
-How to use the Celo wallet to manage Celo assets.
-
-___
-
-## What is the Celo Wallet?
-
-The [Celo Wallet](https://github.com/valora-inc/wallet) is an easy way to send, receive, and save Celo Assets. The Celo Wallet is the base repository for [Valora](https://valoraapp.com/) and is free for you to use to build your own version of a Celo wallet.
-
-This section describes what is going on under the hood during various aspects of the wallet experience.
-
-
diff --git a/docs/celo-codebase/wallet/intro.md b/docs/celo-codebase/wallet/intro.md
deleted file mode 100644
index 6710dc0956..0000000000
--- a/docs/celo-codebase/wallet/intro.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-title: Running the Wallet Locally
-description: How to setup the Celo Wallet locally, complete basic wallet functions, and troubleshoot common issues.
----
-# Running the Wallet Locally
-
-How to setup the Celo Wallet locally, complete basic wallet functions, and troubleshoot common issues.
-
-___
-
-
-## Wallet Setup
-
-The app uses [React Native](https://facebook.github.io/react-native/) and a [light node](https://github.com/ethereum/wiki/wiki/Light-client-protocol) running the [celo client](https://github.com/celo-org/celo-blockchain). You will need to install Java 8, the Android SDK, Yarn, and Node.js v12.x to run the app.
-
-To do this, follow the [setup instructions](https://github.com/celo-org/celo-monorepo/blob/master/SETUP.md).
-
-#### \(_Optional_\) Gradle improvement
-
-This makes Gradle faster:
-
-```bash
-export GRADLE_OPTS='-Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx4096m -XX:+HeapDumpOnOutOfMemoryError"'
-```
-
-## Running
-
-1. If you haven't already, run `yarn` from the monorepo root to install dependencies.
-2. Attach your device or start an emulated one.
-
- You can verify if your device is properly connecting to ADB with `adb devices`. More information about running the app on Android devices can be found on the [React Native docs](https://facebook.github.io/react-native/docs/running-on-device).
-
-3. Compile the project and start the bundler with
-
- ```bash
- yarn run dev
- ```
-
- This will build the app in a device \(physical or emulated\) and open a terminal with a js server.
-
- **Note:** We've seen some issues running the metro bundler from iTerm
-
-## Debugging
-
-In order to debug, you should run:
-
-```bash
-yarn run dev:show-menu
-```
-
-A menu will pop-up in the app and you should hit `Start Remote JS Debugging`. This will open a new tab in your browser with React Native logger in the console. In order to get a full picture, the console's filter should be set to `All levels`.
-
-You will probably want to open the dev menu again and enable `Live Reloading` and `Hot Reloading` to make development faster.
-
-#### \(_Optional_\) React Native debugger app
-
-The [React Native debugger app](https://github.com/jhen0409/react-native-debugger) bundles together the Redux and Chrome dev tools nicely.
-
-## App Profiling
-
-Start the emulator and load up the app. Then run the following to start react devtools.
-
-```bash
-yarn run react-devtools
-```
-
-It should automatically connect to the running app, and includes a profiler \(second tab\). Start recorder with the profiler, using the app, and the stop recording. The flame graph provides a view of each component and sub-component. The width is proportional to how long it took to load. If it is grey, it was not re-rendered at that 'commit' or DOM change. Details on the react native profiler are [here](https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html). The biggest thing to look for are large number of renders when no state has changed. Reducing renders can be done via pure components in react or overloading the should component update method [example here](https://reactjs.org/docs/optimizing-performance.html#examples).
-
-## Connecting to networks
-
-By default, we have the `alfajores` network set up. If you have other testnets that you want to use with the app, you can download the contract artifacts as per [instructions in the protocol package](https://github.com/celo-org/celo-monorepo/tree/master/packages/protocol). Once you have done that, you can run
-
-```bash
-yarn run update-contracts --testnets=my_testnet,my_other_testnet
-```
-
-`--testnets` should be a comma-separated list of testnets whose artifacts you have under `../protocol/build`. `update-contracts` will copy them to the mobile app for use. Avoid unnecessary check-ins of contract artifacts.
-
-## Testing
-
-### Snapshot Testing
-
-We use Jest snapshot testing to assert that no intentional changes to the component tree have been made without explicit developer intention. See an example at [`src/components/CodeRow.test.tsx`](https://github.com/celo-org/wallet/blob/master/packages/mobile/src/components/CodeRow.test.tsx). If your snapshot is expected to deviate, you can update the snapshot with the `--updateSnapshot` flag when running the test.
-
-### Shallow rendering testing
-
-We use Enzyme as an additional testing tool. It allows for shallow rendering, which reduces running time and the amount of stubbing you have to do by only rendering the immediate children \(and not the grandchildren etc.\) Further, you can interact with the rendered tree to assert proper reactions to user interaction and input. See an example at [`src/components/CodeRow.test.tsx`](https://github.com/celo-org/wallet/blob/master/packages/mobile/src/components/CodeRow.test.tsx) or read more about the [docs](https://airbnb.io/enzyme/docs/guides/react-native.html).
-
-### E2E testing
-
-We use [Detox](https://github.com/wix/Detox) for E2E testing. In order to run the tests locally, you must have the proper emulator set up. Emulator installation instructions can be [found here](https://docs.expo.dev/workflow/android-studio-emulator/). Please make sure to set up the emulator you would like to run the tests with is set up properly with the name `Pixel_API_29_AOSP_x86_64`.
-
-Please set `123456` as the pin code in the emulator, since the e2e tests rely on that.
-
-Next, the VM snapshot settings should be modified:
-
-1. Close all apps and lock the emulator \(go to lock screen\).
-2. Power off the emulator
-3. Power it back on and go to emulator settings \(... button\) -> Snapshots -> Settings
-4. Set Auto-Save to No
-
-## Troubleshooting
-
-1. Make sure to have watchman installed: `brew install watchman`
-2. It's a known [detox issue](https://github.com/wix/Detox/issues/1255) that test will fail if a emulator is renamed.
-3. Make sure the emulator is not running before runing the tests.
-
-For information on how to run and extend the e2e tests, refer to the [e2e readme](https://github.com/celo-org/wallet/blob/master/packages/mobile/e2e/README.md).
-
-### Generating GraphQL Types
-
-We're using [GraphQL Code Generator](https://github.com/dotansimha/graphql-code-generator) to properly type GraphQL queries. If you make a change to a query, run `yarn run gen-types` to update the typings in the `typings` directory.
-
-## **Celo Wallet API Keys**
-
-#### Running The Celo App Without API Keys
-
-The mobile app can run without putting the Firebase keys in place by changing the env variable `FIREBASE_ENABLED` to false in the mobile package.
-
-For Testnet configuration, an env variable called `MNEMONIC` should be set with a seed to generate validators private keys. Remember to make this seed long enough to be secured \(20 words or more\).
-
-**Please keep your keys secret- avoid committing them to github and/or publishing keys for your infrastructure in any way.**
diff --git a/docs/celo-holder-guide/cusd.md b/docs/celo-holder-guide/cusd.md
deleted file mode 100644
index 89e870ca61..0000000000
--- a/docs/celo-holder-guide/cusd.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: Celo Asset Management Guide
-description: Access and account management for holding, exchanging, or sending Celo Dollars (cUSD) and stablecoins.
-slug: /celo-owner-guide/cusd
----
-# Asset Management
-
-Access and account management for holding, exchanging, or sending Celo Dollars (cUSD) and stablecoins.
-
-___
-
-## Prerequisites
-
-This guide assumes:
-
-- You have read [Key Management](/validator-guide/key-management/summary.md) on Celo
-- You have installed the [Celo Command Line Interface](/command-line-interface/introduction.md) (Celo CLI)
-
-## Choose a Node
-
-In order to execute the tasks listed below, you will need to point the Celo CLI to a node that is synchronized with the [Mainnet](../getting-started/mainnet). There are two options explained [here](celo-holder-guide/quick-start.md#deployment).
-
-## Create an Account
-
-There are two ways to create an account:
-
-- (Recommended) use [accounts generated by Ledger](celo-holder-guide/ledger.md), if you possess a [Ledger hardware wallet](https://shop.ledger.com/products/ledger-nano-s)
-- Use CLI to [generate an account](getting-started/mainnet/running-a-full-node-in-mainnet.md#create-an-account-and-get-its-address) -- this approach is less secure and hence not recommended
-
-After creating an account, record its address in environment variables:
-
-```
-export CELO_ACCOUNT_ADDRESS=
-```
-
-## Exchange CELO for Stablecoins
-
-Once you have deposited CELO to your account, you can check your balance:
-
-```
-celocli account:balance $CELO_ACCOUNT_ADDRESS
-```
-
-As an example of a common stablecoin swap, you can exchange CELO for cUSD using the following command. This exchanges CELO for stable tokens (cUSD by default) via the stability mechanism. Note that the unit of value is CELO Wei (1 CELO = 10^18 CELO Wei).
-
-```
-celocli exchange:celo --value --from $CELO_ACCOUNT_ADDRESS
-```
-
-## Transfer Stablecoins
-
-When you have sufficient balance, you can send stablecoins such as cUSD to other accounts. Note that the unit of value is cUSD Wei (1 cUSD = 10^18 cUSD Wei).
-
-```
-celocli transfer:dollars --from $CELO_ACCOUNT_ADDRESS --to --value
-```
diff --git a/docs/celo-holder-guide/governance-cheat-sheet.md b/docs/celo-holder-guide/governance-cheat-sheet.md
deleted file mode 100644
index 7d27d8a369..0000000000
--- a/docs/celo-holder-guide/governance-cheat-sheet.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Celo Governance Cheat Sheet
-description: List of governable parameters and governance restrictions on Celo.
-slug: /celo-owner-guide/governance-cheat-sheet
----
-
-# Governance Cheat Sheet
-
-List of governable parameters and governance restrictions on Celo.
-
-___
-
-## Governable Parameters
-
-* The stability protocol, including the exchange
-* What the protocol does with data feeds from Oracles
-* Adding or removing stablecoins
-* Whitelisting stablecoins (or other ERC20s) for use in paying gas fees
-* The identity protocol, including how phone number attestations works
-* Linking of signers and off-chain metadata (e.g claims) to accounts
-* Most of Proof of Stake protocol, including elections, locked gold, slashing parameters
-* On-chain governance itself
-* MinimumClientVersion
-* BlockGasLimit
-* IntrinsicGasForAlternativeFeeCurrency
-
-## Things That Can't Be Modified By Governance
-
-* The protocol by which nodes communicate
-* The format of block headers, block bodies, the fields in transactions, etc
-* How nodes sync
-* How nodes store their data locally
-* Most parameters that affect the blockchain
diff --git a/docs/celo-holder-guide/overview.md b/docs/celo-holder-guide/overview.md
deleted file mode 100644
index 03334c06ea..0000000000
--- a/docs/celo-holder-guide/overview.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: Use Celo
-description: Download a wallet, manage Celo assets, and start using the Celo network.
----
-
-import PageRef from '@components/PageRef'
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-# Use Celo
-
-Download a wallet, manage Celo assets, and start using the Celo network.
-
----
-
-[Celo](https://celo.org/) users have access to a wide variety of tools, assets, and capabilities provided by the Celo Network. Install a Celo wallet, get Celo assets, and use the Celo protocol to send, spend, bridge, or connect assets with any Celo application.
-
-:::tip
-
-Not ready to use Celo? [Learn more about Celo](../../docs/welcome.md).
-
-:::
-
-## Get CELO
-
-
-
-
-## Use the Platform
-
-
-
-
-
-## Advanced Features
-
-
-
-
-:::tip
-
-For questions, comments, and discussions please use the [Celo Forum](https://forum.celo.org/) or [Discord](https://chat.celo.org/).
-
-:::
diff --git a/docs/celo-holder-guide/owners.md b/docs/celo-holder-guide/owners.md
deleted file mode 100644
index 034b278348..0000000000
--- a/docs/celo-holder-guide/owners.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-title: Get CELO
-description: Start sending, spending, and earning crypto from your mobile phone
----
-
-import PageRef from '@components/PageRef'
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-# Get CELO
-
-Start sending, spending, and earning crypto from your mobile phone.
-
----
-
-[Celo Owners](https://celo.org/buy) can start transacting with 6 billion other smartphone users around the world from your phone and on the go. Transact in seconds — at a fraction of the cost of other crypto platforms. Anyone who holds any amount of CELO is empowered to vote on governance proposals that direct how the core technology operates today and in the future.
-
-## Discover CELO
-
-CELO is listed on 20+ exchanges worldwide.
-
-
-
-
-
-## Manage Celo Assets
-
-
-
-
-
-
-## Voting as a Celo Owner
-
-
-
-
-
-## Asset Recovery
-
-
-
-
-:::tip
-
-For questions, comments, and discussions please use the [Celo Forum](https://forum.celo.org/) or [Discord](https://chat.celo.org/).
-
-:::
diff --git a/docs/celo-holder-guide/voting-governance.md b/docs/celo-holder-guide/voting-governance.md
deleted file mode 100644
index 33e8dc10ae..0000000000
--- a/docs/celo-holder-guide/voting-governance.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-title: Celo Voting on Governance Proposals
-description: How to use the Celo CLI to participate in Goverance and create a Governance proposal.
-slug: /celo-owner-guide/voting-governance
----
-# Voting on Governance Proposals
-
-How to use the [Celo CLI](/command-line-interface/introduction.md) to participate in Goverance and create a Governance proposal.
-
-___
-
-## Governance
-
-Celo uses a formal on-chain governance mechanism to manage and upgrade the protocol. More information about the Governance system can be found in the [Governance section of the protocol documentation](/celo-codebase/protocol/governance.md).
-
-:::info
-
-If you would like to keep up-to-date with all the news happening in the Celo community, including validation, node operation and governance, please sign up to our [Celo Signal mailing list here](https://celo.activehosted.com/f/15).
-
-You can add the [Celo Signal public calendar](https://calendar.google.com/calendar/u/0/embed?src=c_9su6ich1uhmetr4ob3sij6kaqs@group.calendar.google.com) as well which has relevant dates.
-
-:::
-
-:::info
-
-In the following commands `` is used as a placeholder for something you should specify on the command line.
-
-:::
-
-## Viewing Proposals
-
-A list of active proposals can be viewed with the following command:
-
-```bash
-celocli governance:list
-```
-
-Included will be three lists of proposals by status:
-* **Queued** proposals have been submitted, but are not yet being considered. Voters can upvote proposals in this list, and proposals with the most upvotes from this list will be moved from the queue to be considered.
-* **Dequeued** proposals are actively being considered and will pass through the Approval, Referendum, and Execution stages, as discussed in the [protocol documentation](/celo-codebase/protocol/governance.md).
-* **Expired** proposals are no longer being considered.
-
-## Understanding Proposal Details
-
-You can view information about a specific proposal with:
-
-```bash
-celocli governance:show --proposalID=
-```
-
-For example, the proposal 14 on Mainnet was as follows:
-
-```
-Running Checks:
- ✔ 14 is an existing proposal
-proposal:
- 0:
- contract: Governance
- function: setBaselineQuorumFactor
- args:
- 0: 500000000000000000000000
- params:
- baselineQuorumFactor: 500000000000000000000000 (~5.000e+23)
- value: 0
-metadata:
- proposer: 0xF3EB910DA09B8AF348E0E5B6636da442cFa79239
- deposit: 100000000000000000000 (~1.000e+20)
- timestamp: 1609961608 (~1.610e+9)
- transactionCount: 1
- descriptionURL: https://github.com/celo-org/celo-proposals/blob/master/CGPs/0016.md
-stage: Referendum
-upvotes: 0
-votes:
- Yes: 95934607718520408413613056 (~9.593e+25)
- No: 0
- Abstain: 0
-passing: true
-requirements:
- participation: 0.2009694258486
- agreement: 90%
-isApproved: true
-isProposalPassing: true
-timeUntilStages:
- referendum: past
- execution: 57 minutes, 59 seconds
- expiration: 3 days, 57 minutes, 59 seconds
-```
-
-## Voting on Proposals
-
-When a proposal is Queued, you can upvote the proposal to indicate you'd like it to be considered.
-
-:::info
-
-If you are using a Ledger wallet, make sure to include `--useLedger` and `--ledgerAddresses` in the
-following commands.
-
-:::
-
-```bash
-celocli governance:upvote --proposalID= --from=
-```
-
-At a defined frequency, which can be checked with the `celocli network:parameters` command, proposals can be dequeued, with the highest upvoted proposals being dequeued first.
-
-After a proposal is dequeued, it will first enter the Approval phase.
-In this phase, the [Governance Approver](/celo-codebase/protocol/governance.md#approval) may choose to approve the proposal, which will allow it to proceed to the Referendum phase after the configured length of time.
-
-Once a proposal has reached the Referendum phase, it is open to community for voting.
-
-```bash
-celocli governance:vote --proposalID= --value= --from=
-```
-
-## Executing a Proposal
-
-If a Governance Proposal receives enough votes and passes in the Referendum phase, it can be executed by anyone.
-
-```bash
-celocli governance:execute --proposalID= --from=
-```
-
-
diff --git a/docs/celo-holder-guide/voting-validators.md b/docs/celo-holder-guide/voting-validators.md
deleted file mode 100644
index 78faac6e6f..0000000000
--- a/docs/celo-holder-guide/voting-validators.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-title: Voting for Validator Groups
-description: Overview of Validator elections for validator groups including technical details, policies, and explorers.
-slug: /celo-owner-guide/voting-validators
----
-
-# Voting for Validator Groups
-
-Resources for Validator Groups elections including technical details, policies, and Validator explorers.
-
-___
-
-## What are Validators?
-
-Validators play a critical role in the Celo protocol, determining which transactions get applied and producing new blocks. Selecting organizations that operate well-run infrastructure to perform this role effectively is essential for Celo's long-term success.
-
-The Celo community makes these decisions by locking CELO and voting for [Validator Groups](/celo-codebase/protocol/proof-of-stake/validator-groups.md), intermediaries that sit between voters and Validators. Every Validator Group has an ordered list of up to 5 candidate Validators. Some organizations may operate a group with their own Validators in it; some may operate a group to which they have added Validators run by others.
-
-:::info
-
-If you would like to keep up-to-date with all the news happening in the Celo community, including validation, node operation and governance, please sign up to our [Celo Signal mailing list here](https://celo.activehosted.com/f/15).
-
-You can add the [Celo Signal public calendar](https://calendar.google.com/calendar/u/0/embed?src=c_9su6ich1uhmetr4ob3sij6kaqs@group.calendar.google.com) as well which has relevant dates.
-
-:::
-
-## Validator Elections
-
-[Validator elections](/celo-codebase/protocol/proof-of-stake/validator-elections.md) are held every epoch (approximately once per day). The protocol elects a maximum of 100 Validators. At each epoch, every elected Validator must be re-elected to continue. Validators are selected [in proportion](/celo-codebase/protocol/proof-of-stake/validator-elections.md#Running-the-Election) to votes received for each Validator Group.
-
-If you hold CELO, or are a beneficiary of a [`ReleaseGold` contract](/celo-holder-guide/release-gold.md) that allows voting, you can vote for Validator Groups. A single account can split their LockedGold balance to have outstanding votes for up to 10 groups.
-
-CELO that you lock and use to vote for a group that elects one or more Validators receives [epoch rewards](/celo-codebase/protocol/proof-of-stake/epoch-rewards.md) every epoch (approximately every day) once the community passes a governance proposal enabling rewards. The initial level of rewards is anticipated to be around 6% per annum equivalent (but is subject to change).
-
-Unlike a number of Proof of Stake protocols, **CELO used for voting is never at risk**. The actions of the Validator Groups or Validators you vote for can cause you to receive lower or higher rewards, but the CELO you locked will always be available to be unlocked in the future. [Slashing](/getting-started/glossary.md#slashing) in the Celo protocol applies only to Validators and Validator Groups.
-
-## Choosing a Validator Group
-
-As a CELO holder, you have the opportunity to impact the Celo network by voting for Validator Groups. As Validators play an integral role in securing Celo, it is crucial that voters choose groups that contribute to both the technical health of the network, as well as the community. Some factors to consider when deciding which Validator Group to vote for include:
-
-### Technical
-
-- **Proven identity:** Validators and groups can supply [verifiable DNS claims](/validator-guide/validator-explorer.md). You can use these to securely identify that the same entity has access both to the account of a Validator or group and the supplied DNS records.
-
-- **Can receive votes**: Validator Groups can receive votes up to a certain [voting cap](/celo-codebase/protocol/proof-of-stake/validator-elections.md#group-voting-caps). You cannot vote for groups with a balance that would put it beyond its cap.
-
-- **Will get elected**: CELO holders only receive voter rewards during an epoch if their CELO is used to vote for a Validator Group that elects at least one Validator during that epoch. Put another way, your vote does not contribute to securing the network or earning you rewards if your group does not receive enough other votes to elect at least one Validator.
-
-- **Secure**: The operational security of Validators is essential for everyone's use of the Celo network. All Validators that participated in the Stake Off were eligible for a [security audit](https://medium.com/celoorg/the-celo-Validator-community-security-audits-and-lessons-learned-e67b78cd4123). You can see scores under the "Master Validator Challenge" column in the [Stake Off leaderboard](https://docs.google.com/spreadsheets/d/e/2PACX-1vQwk10o6YV0uriR8LuYfLqB1irjmOX_-L6Jljn3BtKlmz_R_TsUU8aI-pMqGVlu4HQKIQlQaFkUhsyl/pubhtml?gid=1970613133&single=true). Scores of 80% or greater were awarded the "Master Validator" badge, indiciating a serious proven commitment to operational security.
-
-- **Reliable**: Celo's consensus protocol relies on two-thirds of elected Validators being available in order to produce blocks and process transactions. Voter rewards are directly tied to the [uptime score](/celo-codebase/protocol/proof-of-stake/validator-rewards.md#calculating-uptime-score) of all elected Validators in the group for which the vote was made. Any period of consecutive downtime greater than a minute reduces a Validator's uptime score.
-
-- **No recent slashing:** When Validators and groups register, their Locked Gold becomes "staked", in that it is subject to penalties for conduct that could seriously adversely affect the health of the network. Voters' Locked Gold is never slashed, but voter rewards are affected by a group's [slashing penalty](/celo-codebase/protocol/proof-of-stake/validator-rewards.md#calculating-slashing-penalty), which is halved when a group or one of its Validators is slashed. Look for groups with a last slashing time long in the past, ideally `0` (never), and a slashing penalty value of `1.0`.
-
-- **Runs an Attestation Service**: The [Attestation Service](/celo-codebase/protocol/identity) is an important service that Validators can run that allows users to verify that they have access to a phone number and map it to an address. Supporting Validators that run this service makes it easier for new users to begin using Celo.
-
-- **Runs a Validator on Baklava**: A group that runs a Validator on the [Baklava](/getting-started/baklava-testnet) helps maintain the testnet and verify that upgrades to the Celo Blockchain software can be deployed smoothly.
-
-### Community
-
-- **Promotes the Celo mission**: Celo's mission is to [build a monetary system that creates the conditions of prosperity for all](https://medium.com/celoorg/an-introductory-guide-to-celo-b185c62d3067). Consider Validator Groups that further this mission through their own activities or initiatives around financial inclusion, education and sustainability.
-
-- **Broadens Diversity**: The Celo community aims to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. Support that diversity by considering what new perspectives and strengths the teams you support offer. As well as the backgrounds and experiences of the team, consider that the network security and availability is improved by Validators operating at different network locations, on different platforms, and with different toolchains.
-
-- **Contributes to Celo:** Support Validator Groups that strengthen the Celo developer community, for example through building or operating services for the Celo ecosystem, participating actively in on-chain governance, and answering questions and supporting others, on [Discord](https://chat.celo.org) or the [Forum](https://forum.celo.org).
-
-## The Celo Foundation Voting Policy
-
-As described above, there are many criteria to consider when deciding which group to vote for. While it is highly recommended that all CELO holders do their independent research when deciding which group to vote for, another option is to vote for Validator Groups that have received votes from the Celo Foundation.
-
-The Celo Foundation has a [Validator Group voting policy](/validator-guide/celo-foundation-voting-policy.md) that it follows when voting with the CELO that it holds. This policy has been developed by the Foundation board and technical advisors with the express goal of promoting the long-term security and decentralization of the network. Validator Groups have an opportunity to apply for Foundation votes every 3 months, and a new cohort is selected based on past performance and contributions.
-
-You can find the [full set of Validator Groups currently receiving votes, and their addresses linked here](https://docs.google.com/spreadsheets/d/1ltVNkQfXW3lIZxXU52R3IXeD6w21oacWFVb3a-FYRBY/edit?usp=sharing).
-
-## Validator Explorers
-
-The Celo ecosystem includes a number of great services for browsing registered Validator Groups and Validators.
-
-:::caution
-
-**Warning**: Exercise caution in relying on Validator-supplied names to determine their real-world identity. Malicious participants may attempt to impersonate other Validators in order to attract votes.
-
-Validators and groups can also supply [verifiable DNS claims](/validator-guide/validator-explorer.md), and the Celo Validator Explorer displays these. You can use these to securely identify that the same entity has access both to the account of a Validator or group and the supplied DNS records.
-
-:::
-
-### [Celo Validator Explorer](https://validators.celo.org) (cLabs)
-
-The Celo Validator Explorer has tabs to show either Mainnet or the Baklava Testnet.
-
-The list shows Validator Groups and, when you expand each group, the Validators that are affiliated to that group.
-
-A white check mark next to the name of a Validator Group shows that there is one or more DNS metadata claims verified for that group (see below).
-
-The Votes Available column shows:
-
-- On the left: Votes made for the group, as a percentage of the total Locked Gold
-
-- On the right: The voting cap of that group, as a percentage of the total Locked Gold
-
-- In the middle: votes made for the group as a proportion of the voting cap
-
-### [TheCelo](https://thecelo.com) (Bi23 Labs)
-
-TheCelo contains a range of valuable information on the Celo project and active Celo networks. The "Groups" tab shows a detailed view of Validator Groups. Click on a group to drilldown to see group metadata and affiliated Validators.
-
-### [Celo Whale](https://celowhale.com) (DSRV)
-
-Celo Whale shows detailed metadata and statistics around Validators but does not presently offer a view centered on Validator Groups.
-
-### [Celovote Scores](https://celovote.com/scores) (WOTrust | celovote.com)
-
-Celovote shows ranking of validator groups based on their estimated annual rate of return (ARR). Estimate is calculated based on past performance.
-
-### [Cauldron](https://cauldron.pretoriaresearchlab.io/block-map) ( [Pretoria Research Lab GmbH](https://pretoriaresearchlab.io))
-
-Cauldron is a tooling site containing a signed blocks explorer for Mainnet and Baklava testnet, visualizing missed blocks and patterns for the validator group set, and developer faucets for the Alfajores and Baklava test networks.
-
-_Please raise a Pull Request against [this page](https://github.com/celo-org/celo-monorepo/blob/master/packages/docs/celo-holder-guide/voting-validators.md) to add/amend details of any community services!_
diff --git a/docs/cli/account.md b/docs/cli/account.md
new file mode 100644
index 0000000000..09484420b0
--- /dev/null
+++ b/docs/cli/account.md
@@ -0,0 +1,2038 @@
+`celocli account`
+=================
+
+Manage your account, keys, and metadata
+
+* [`celocli account:authorize`](#celocli-accountauthorize)
+* [`celocli account:balance ARG1`](#celocli-accountbalance-arg1)
+* [`celocli account:claim-account ARG1`](#celocli-accountclaim-account-arg1)
+* [`celocli account:claim-domain ARG1`](#celocli-accountclaim-domain-arg1)
+* [`celocli account:claim-keybase ARG1`](#celocli-accountclaim-keybase-arg1)
+* [`celocli account:claim-name ARG1`](#celocli-accountclaim-name-arg1)
+* [`celocli account:claim-rpc-url ARG1`](#celocli-accountclaim-rpc-url-arg1)
+* [`celocli account:claim-storage ARG1`](#celocli-accountclaim-storage-arg1)
+* [`celocli account:create-metadata ARG1`](#celocli-accountcreate-metadata-arg1)
+* [`celocli account:deauthorize`](#celocli-accountdeauthorize)
+* [`celocli account:delete-payment-delegation`](#celocli-accountdelete-payment-delegation)
+* [`celocli account:get-metadata ARG1`](#celocli-accountget-metadata-arg1)
+* [`celocli account:get-payment-delegation`](#celocli-accountget-payment-delegation)
+* [`celocli account:list`](#celocli-accountlist)
+* [`celocli account:lock ARG1`](#celocli-accountlock-arg1)
+* [`celocli account:new`](#celocli-accountnew)
+* [`celocli account:offchain-read ARG1`](#celocli-accountoffchain-read-arg1)
+* [`celocli account:offchain-write`](#celocli-accountoffchain-write)
+* [`celocli account:proof-of-possession`](#celocli-accountproof-of-possession)
+* [`celocli account:register`](#celocli-accountregister)
+* [`celocli account:register-data-encryption-key`](#celocli-accountregister-data-encryption-key)
+* [`celocli account:register-metadata`](#celocli-accountregister-metadata)
+* [`celocli account:set-name`](#celocli-accountset-name)
+* [`celocli account:set-payment-delegation`](#celocli-accountset-payment-delegation)
+* [`celocli account:set-wallet`](#celocli-accountset-wallet)
+* [`celocli account:show ARG1`](#celocli-accountshow-arg1)
+* [`celocli account:show-claimed-accounts ARG1`](#celocli-accountshow-claimed-accounts-arg1)
+* [`celocli account:show-metadata ARG1`](#celocli-accountshow-metadata-arg1)
+* [`celocli account:unlock ARG1`](#celocli-accountunlock-arg1)
+* [`celocli account:verify-proof-of-possession`](#celocli-accountverify-proof-of-possession)
+
+## `celocli account:authorize`
+
+Keep your locked Gold more secure by authorizing alternative keys to be used for signing attestations, voting, or validating. By doing so, you can continue to participate in the protocol while keeping the key with access to your locked Gold in cold storage. You must include a "proof-of-possession" of the key being authorized, which can be generated with the "account:proof-of-possession" command.
+
+```
+USAGE
+ $ celocli account:authorize --from 0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d -r
+ vote|validator|attestation --signature 0x --signer
+ 0xc1912fEE45d61C87Cc5EA59DaE31190FFFFf232d [-k | --useLedger | ] [-n
+ ] [--gasCurrency 0x1234567890123456789012345678901234567890]
+ [--ledgerAddresses ] [--ledgerLiveMode ] [--globalHelp] [--blsKey 0x
+ --blsPop 0x]
+
+FLAGS
+ -k, --privateKey=
+ Use a private key to sign local transactions with
+
+ -n, --node=
+ URL of the node to run commands against or an alias
+
+ -r, --role=