diff --git a/apps/base-docs/base-learn/docs/learning-objectives.md b/apps/base-docs/base-learn/docs/learning-objectives.md index 65c2c2a8eb..3e60d19674 100644 --- a/apps/base-docs/base-learn/docs/learning-objectives.md +++ b/apps/base-docs/base-learn/docs/learning-objectives.md @@ -228,7 +228,7 @@ Use the script to regenerate this file. ### [The `useAccount` Hook](./reading-and-displaying-data/useAccount.md) -- Implement the `useAccount`` hook to show the user's address, connection state, network, and balance +- Implement the `useAccount` hook to show the user's address, connection state, network, and balance - Implement an `isMounted` hook to prevent hydration errors ### [The `useReadContract` Hook](./reading-and-displaying-data/useReadContract.md) diff --git a/apps/base-docs/base-learn/docs/reading-and-displaying-data/useAccount.md b/apps/base-docs/base-learn/docs/reading-and-displaying-data/useAccount.md index 4a82b76d8c..89b1567ba0 100644 --- a/apps/base-docs/base-learn/docs/reading-and-displaying-data/useAccount.md +++ b/apps/base-docs/base-learn/docs/reading-and-displaying-data/useAccount.md @@ -14,7 +14,7 @@ You can use this for connection-status-based rendering, to enable or disable con By the end of this guide you should be able to: -- Implement the `useAccount`` hook to show the user's address, connection state, network, and balance +- Implement the `useAccount` hook to show the user's address, connection state, network, and balance - Implement an `isMounted` hook to prevent hydration errors --- diff --git a/apps/base-docs/base-learn/docs/storage/simple-storage-sbs.md b/apps/base-docs/base-learn/docs/storage/simple-storage-sbs.md index b99a0c2542..82605b02cd 100644 --- a/apps/base-docs/base-learn/docs/storage/simple-storage-sbs.md +++ b/apps/base-docs/base-learn/docs/storage/simple-storage-sbs.md @@ -149,7 +149,7 @@ Review the **Warning** in the [layout] section of the docs for more details! ### Add a Function to Update `age` -It would also be good to be able update the `age` value. This problem has slightly different considerations. Sadly, `age` will never go down. It should also probably only go up by one year for each update. The `++` operator works in Solidity, so we can use that to create a function that simple increments age when called. +It would also be good to be able to update the `age` value. This problem has slightly different considerations. Sadly, `age` will never go down. It should also probably only go up by one year for each update. The `++` operator works in Solidity, so we can use that to create a function that simple increments age when called.
diff --git a/apps/base-docs/docs/building-with-base/base-contracts.md b/apps/base-docs/docs/building-with-base/base-contracts.md index 0267e59379..8e2803380a 100644 --- a/apps/base-docs/docs/building-with-base/base-contracts.md +++ b/apps/base-docs/docs/building-with-base/base-contracts.md @@ -108,15 +108,15 @@ Certain contracts are mandatory according to the [OP Stack SDK](https://stack.op | DelayedWETHProxy (FDG) | [0x489c2E5ebe0037bDb2DC039C5770757b8E54eA1F](https://sepolia.etherscan.io/address/0x489c2E5ebe0037bDb2DC039C5770757b8E54eA1F) | | DelayedWETHProxy (PDG) | [0x27A6128F707de3d99F89Bf09c35a4e0753E1B808](https://sepolia.etherscan.io/address/0x27A6128F707de3d99F89Bf09c35a4e0753E1B808) | | DisputeGameFactoryProxy | [0xd6E6dBf4F7EA0ac412fD8b65ED297e64BB7a06E1](https://sepolia.etherscan.io/address/0xd6E6dBf4F7EA0ac412fD8b65ED297e64BB7a06E1) | -| FaultDisputeGame | [0x5062792ED6A85cF72a1424a1b7f39eD0f7972a4B](https://sepolia.etherscan.io/address/0x5062792ED6A85cF72a1424a1b7f39eD0f7972a4B) | +| FaultDisputeGame | [0xB7fB44a61fdE2b9DB28a84366e168b14D1a1b103](https://sepolia.etherscan.io/address/0xB7fB44a61fdE2b9DB28a84366e168b14D1a1b103) | | L1CrossDomainMessenger | [0xC34855F4De64F1840e5686e64278da901e261f20](https://sepolia.etherscan.io/address/0xC34855F4De64F1840e5686e64278da901e261f20) | | L1ERC721Bridge | [0x21eFD066e581FA55Ef105170Cc04d74386a09190](https://sepolia.etherscan.io/address/0x21eFD066e581FA55Ef105170Cc04d74386a09190) | | L1StandardBridge | [0xfd0Bf71F60660E2f608ed56e1659C450eB113120](https://sepolia.etherscan.io/address/0xfd0Bf71F60660E2f608ed56e1659C450eB113120) | | L2OutputOracle | [0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254](https://sepolia.etherscan.io/address/0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254) | -| MIPS | [0x47B0E34C1054009e696BaBAAd56165e1e994144d](https://sepolia.etherscan.io/address/0x47B0E34C1054009e696BaBAAd56165e1e994144d) | +| MIPS | [0x69470D6970Cd2A006b84B1d4d70179c892cFCE01](https://sepolia.etherscan.io/address/0x69470D6970Cd2A006b84B1d4d70179c892cFCE01) | | OptimismMintableERC20Factory | [0xb1efB9650aD6d0CC1ed3Ac4a0B7f1D5732696D37](https://sepolia.etherscan.io/address/0xb1efB9650aD6d0CC1ed3Ac4a0B7f1D5732696D37) | | OptimismPortal | [0x49f53e41452C74589E85cA1677426Ba426459e85](https://sepolia.etherscan.io/address/0x49f53e41452C74589E85cA1677426Ba426459e85) | -| PermissionedDisputeGame | [0x593D20C4c69485B95D11507239BE2C725ea2A6fD](https://sepolia.etherscan.io/address/0x593D20C4c69485B95D11507239BE2C725ea2A6fD) | +| PermissionedDisputeGame | [0x68f600e592799c16D1b096616eDbf1681FB9c0De](https://sepolia.etherscan.io/address/0x68f600e592799c16D1b096616eDbf1681FB9c0De) | | PreimageOracle | [0x92240135b46fc1142dA181f550aE8f595B858854](https://sepolia.etherscan.io/address/0x92240135b46fc1142dA181f550aE8f595B858854) | | ProxyAdmin | [0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3](https://sepolia.etherscan.io/address/0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3) | | SystemConfig | [0xf272670eb55e895584501d564AfEB048bEd26194](https://sepolia.etherscan.io/address/0xf272670eb55e895584501d564AfEB048bEd26194) | diff --git a/apps/base-docs/docs/contracts.md b/apps/base-docs/docs/contracts.md index ba479583ee..69383189bb 100644 --- a/apps/base-docs/docs/contracts.md +++ b/apps/base-docs/docs/contracts.md @@ -87,7 +87,7 @@ This page lists contract addresses for onchain apps that we have deployed. :::info -Two community projects, [BaseX](https://basex-test.vercel.app/swap?currencyA=ETH¤cyB=0x036CbD53842c5426634e7929541eC2318f3dCF7e&focus=source) and [DapDap](https://testnet.base.dapdap.net/uniswap/swap), provide testnet interfaces for Uniswap contracts if you prefer to interact in the browser instead of with the contracts directly. +If you prefer interacting through a browser instead of directly with the contracts, you can try this community project: [DapDap](https://testnet.base.dapdap.net/uniswap/swap), which provides testnet interfaces for Uniswap contracts. ::: diff --git a/apps/base-docs/docs/notices/decomissioning-public-geth-archive-snapshots.md b/apps/base-docs/docs/notices/decomissioning-public-geth-archive-snapshots.md index c61c60059e..5af3c8cf7b 100644 --- a/apps/base-docs/docs/notices/decomissioning-public-geth-archive-snapshots.md +++ b/apps/base-docs/docs/notices/decomissioning-public-geth-archive-snapshots.md @@ -1,7 +1,7 @@ --- title: Decommissioning Public Geth Archive Snapshots -slug: /decomissioning-public-geth-archive-snapshots -description: Public Geth archive snapshots will be decommissioned on December 15th, 2024. +slug: /decommissioning-public-geth-archive-snapshots +description: Public Geth archive snapshots were decommissioned on December 15th, 2024. keywords: [ Geth, @@ -20,7 +20,7 @@ hide_table_of_contents: true # Decommissioning Public Geth Archive Snapshots -As part of our ongoing efforts to optimize our services, we will be deprecating the Public Geth Archive Snapshots on _December 15th, 2024_. We understand that this change may affect your operations if you rely on these snapshots for maintaining your Ethereum infrastructure. This notice aims to provide you with a potential path forward and offer solutions to ensure a smooth transition. +As part of our ongoing efforts to optimize our services, Public Geth Archive Snapshots were deprecated on _December 15th, 2024_. We understand that this change may affect your operations if you rely on these snapshots for maintaining your Ethereum infrastructure. This notice aims to provide you with a potential path forward and offer solutions to ensure a smooth transition. ## Recommended Path Forward @@ -28,10 +28,4 @@ We recommend switching to Reth going forward. We will continue to maintain the R If you need continued Geth support, we would advise that you maintain your own snapshot that is specific to your infrastructure e.g. EBS on AWS. -To sync a Geth Archive node to tip: - -- Download the latest Geth Archive snapshot ~30 days old -- Use a beacon endpoint with historical blob data - - Alternatively you can run your own [blob archiver](https://github.com/base-org/blob-archiver) if you don't want to rely on a third party - If you have any questions or would like assistance, please reach out to us on [Discord](https://base.org/discord) or [GitHub](https://github.com/base-org/base-node). diff --git a/apps/base-docs/docs/tools/basenames-onchainkit-tutorial.md b/apps/base-docs/docs/tools/basenames-onchainkit-tutorial.md index 87e4e70b5d..3bf6592781 100644 --- a/apps/base-docs/docs/tools/basenames-onchainkit-tutorial.md +++ b/apps/base-docs/docs/tools/basenames-onchainkit-tutorial.md @@ -1,7 +1,7 @@ --- title: Basenames + OnchainKit Tutorial slug: /basenames-tutorial-with-onchainkit -description: 'A tutorial that teaches how to intergrate Basenames to your wagmi/viem App using OnchainKit' +description: 'A tutorial that teaches how to integrate Basenames to your wagmi/viem App using OnchainKit' author: hughescoin keywords: ['build on base', 'viem', 'wagmi', 'frontend', 'onchain app development'] tags: ['account abstraction'] diff --git a/apps/base-docs/docs/tools/bridges-mainnet.md b/apps/base-docs/docs/tools/bridges-mainnet.md index 84eddae652..e86e91e268 100644 --- a/apps/base-docs/docs/tools/bridges-mainnet.md +++ b/apps/base-docs/docs/tools/bridges-mainnet.md @@ -61,7 +61,7 @@ See the [sample code repository](https://github.com/base-org/guides/tree/main/br :::caution -**Double check the token address for ERC-20s** You can use any ERC-20 that is +**Double-check the token address for ERC-20s** You can use any ERC-20 that is supported on the network. You can check what assets are on Base and the corresponding contract address via [this hub](https://github.com/ethereum-optimism/ethereum-optimism.github.io/tree/master/data). Ensure there is an address for `base`, [example](https://github.com/ethereum-optimism/ethereum-optimism.github.io/blob/master/data/WETH/data.json#L16-L18). diff --git a/apps/base-docs/docs/tools/data-indexers.md b/apps/base-docs/docs/tools/data-indexers.md index 6f72ec5f36..1ebbd3a908 100644 --- a/apps/base-docs/docs/tools/data-indexers.md +++ b/apps/base-docs/docs/tools/data-indexers.md @@ -201,15 +201,22 @@ To get started, visit the [developer documentation](https://academy.subquery.net ## The Graph -[The Graph](https://thegraph.com/) is an indexing protocol for organizing blockchain data and making it easily accessible with GraphQL. +[The Graph](https://thegraph.com/) is an indexing protocol that provides an easy way to query blockchain data through APIs known as subgraphs. -Base applications can use GraphQL to query open APIs called subgraphs, to retrieve data that is indexed on the network. With The Graph, you can build serverless applications that run entirely on public infrastructure. +With The Graph, you can benefit from: + - **Decentralized Indexing**: Enables indexing blockchain data through multiple indexers, thus eliminating any single point of failure + - **GraphQL Queries**: Provides a powerful GraphQL interface for querying indexed data, making data retrieval super simple. + - **Customization**: Define your own logic for transforming & storing blockchain data. Reuse subgraphs published by other developers on The Graph Network. -To get started, visit the [documentation](https://thegraph.com/docs/en/) or see [this quickstart](https://thegraph.com/docs/en/cookbook/quick-start/) on how to create, deploy, and query a subgraph. +Follow this [quick-start](https://thegraph.com/docs/en/quick-start/) guide to create, deploy, and query a subgraph within 5 minutes. #### Supported Networks -- [Base Mainnet](https://thegraph.com/docs/en/#supported-networks) +- Base Mainnet +- Base Sepolia (Testnet) + +See [all supported networks](https://thegraph.com/docs/en/#supported-networks) + --- diff --git a/apps/base-docs/docs/tools/ethers.md b/apps/base-docs/docs/tools/ethers.md index d59392c2b7..746d4fc3da 100644 --- a/apps/base-docs/docs/tools/ethers.md +++ b/apps/base-docs/docs/tools/ethers.md @@ -48,7 +48,7 @@ const ethers = require('ethers'); ## Connecting to Base -You can connect to Base by instantiating a new ethers.js `JsonRpcProvider` object with a RPC URL of the Base network: +You can connect to Base by instantiating a new ethers.js `JsonRpcProvider` object with an RPC URL of the Base network: ```javascript const ethers = require('ethers'); diff --git a/apps/base-docs/docs/tools/hardhat.md b/apps/base-docs/docs/tools/hardhat.md index 1065a66506..2b8b445b6a 100644 --- a/apps/base-docs/docs/tools/hardhat.md +++ b/apps/base-docs/docs/tools/hardhat.md @@ -41,7 +41,7 @@ networks: { accounts: [process.env.PRIVATE_KEY as string], gasPrice: 1000000000, }, - // for Sepolia testnet + // for Base Sepolia testnet "base-sepolia": { url: "https://sepolia.base.org", accounts: [process.env.PRIVATE_KEY as string], diff --git a/apps/base-docs/docs/tools/web3.md b/apps/base-docs/docs/tools/web3.md index ba131a3729..2f1512204e 100644 --- a/apps/base-docs/docs/tools/web3.md +++ b/apps/base-docs/docs/tools/web3.md @@ -52,7 +52,7 @@ const { Web3 } = require('web3'); ## Connecting to Base -You can connect to Base by instantiating a new web3.js `Web3` object with a RPC URL of the Base network: +You can connect to Base by instantiating a new web3.js `Web3` object with an RPC URL of the Base network: ```javascript const { Web3 } = require('web3'); diff --git a/apps/base-docs/src/components/Banner/styles.module.css b/apps/base-docs/src/components/Banner/styles.module.css index 297c76c70d..26f6c4a9ea 100644 --- a/apps/base-docs/src/components/Banner/styles.module.css +++ b/apps/base-docs/src/components/Banner/styles.module.css @@ -47,7 +47,7 @@ } .bannerSpacer { - display: hidden; + display: none; font-size: 0.75rem; } diff --git a/apps/base-docs/src/css/root.css b/apps/base-docs/src/css/root.css index bcfcff7a46..19cac91451 100644 --- a/apps/base-docs/src/css/root.css +++ b/apps/base-docs/src/css/root.css @@ -223,7 +223,7 @@ html { --ifm-color-primary-lightest: rgb(146, 224, 208); --ifm-code-font-size: 95%; --search-font-size: 16px; - --search-font-weight: 16px; + --search-font-weight: 400; /* Base Docs Palette */ --base-docs-color-fg: #000000; diff --git a/apps/base-docs/tutorials/docs/0_run-a-base-node.md b/apps/base-docs/tutorials/docs/0_run-a-base-node.md index fb1e46433c..ab2941ee74 100644 --- a/apps/base-docs/tutorials/docs/0_run-a-base-node.md +++ b/apps/base-docs/tutorials/docs/0_run-a-base-node.md @@ -107,20 +107,20 @@ In the home directory of your Base Node, create a folder named `geth-data` or `r :::info -We will be deprecating the Public Geth Archive Snapshots on _December 15th, 2024_ and recommend switching to Reth going forward. We will continue to maintain the Reth archive snapshot. +Public Geth Archive Snapshots were deprecated on _December 15th, 2024_ and recommend switching to Reth going forward. We will continue to maintain the Reth archive snapshot. ::: | Network | Client | Snapshot Type | Command | | ------- | ------ | ------------- | --------------------------------------------------------------------------------------------------------------------- | | Testnet | Geth | Full | `wget https://sepolia-full-snapshots.base.org/$(curl https://sepolia-full-snapshots.base.org/latest)` | -| Testnet | Geth | Archive | `wget https://sepolia-archive-snapshots.base.org/$(curl https://sepolia-archive-snapshots.base.org/latest)` | +| Testnet | Geth | Archive | No longer supported | | Testnet | Reth | Archive | `wget https://sepolia-reth-archive-snapshots.base.org/$(curl https://sepolia-reth-archive-snapshots.base.org/latest)` | | Mainnet | Geth | Full | `wget https://mainnet-full-snapshots.base.org/$(curl https://mainnet-full-snapshots.base.org/latest)` | -| Mainnet | Geth | Archive | `wget https://mainnet-archive-snapshots.base.org/$(curl https://mainnet-archive-snapshots.base.org/latest)` | +| Mainnet | Geth | Archive | No longer supported | | Mainnet | Reth | Archive | `wget https://mainnet-reth-archive-snapshots.base.org/$(curl https://mainnet-reth-archive-snapshots.base.org/latest)` | -You'll then need to untar the downloaded snapshot and place the `geth` subfolder inside of it in the `geth-data` folder you created (unless you changed the location of your data directory). +You'll then need to untar the downloaded snapshot and place the `geth` or `reth` subfolder inside of it in the `geth-data` or `reth-data` folder you created (unless you changed the location of your data directory). Return to the root of your Base node folder and start your node. diff --git a/apps/base-docs/tutorials/docs/1_verify-contract-with-basescan.md b/apps/base-docs/tutorials/docs/1_verify-contract-with-basescan.md index feb8a0d401..0a66b4deff 100644 --- a/apps/base-docs/tutorials/docs/1_verify-contract-with-basescan.md +++ b/apps/base-docs/tutorials/docs/1_verify-contract-with-basescan.md @@ -94,7 +94,7 @@ Obtain a rpc url from the [Node product] and store the url as an environment var ![cdp-node](../../assets/images/verify-with-basescan-api/cdp-node-full.png) -Then store it as a environment variable in your terminal: +Then store it as an environment variable in your terminal: ```bash export BASE_RPC_URL="your_base_rpc_url" diff --git a/apps/base-docs/tutorials/docs/2_ock-fund-tutorial.md b/apps/base-docs/tutorials/docs/2_ock-fund-tutorial.md index 95b7814116..d6d2e247b0 100644 --- a/apps/base-docs/tutorials/docs/2_ock-fund-tutorial.md +++ b/apps/base-docs/tutorials/docs/2_ock-fund-tutorial.md @@ -1,7 +1,7 @@ --- title: 'Build a Smart Wallet Funding app with OnchainKit' slug: /build-smart-wallet-funding-app -description: Learn how to create a app that detects if a smart wallet has ETH and prompts users to add funds if needed. +description: Learn how to create an app that detects if a smart wallet has ETH and prompts users to add funds if needed. author: hughescoin keywords: [ Account Abstraction, @@ -29,9 +29,9 @@ In this tutorial, you'll learn how to build an onchain app that checks a user's By the end of this tutorial you should be able to: - Set up a project using the [OnchainKit App Template] -- Configure the app for to onboard users easily using [Smart Wallets] +- Configure the app to onboard users easily using [Smart Wallets] - Implement balance checking and conditional rendering -- Use the Fund component to allow users to add buy tokens from their wallet without leaving your app +- Use the Fund component to allow users to buy tokens from their wallet without leaving your app ## Prerequisites @@ -85,7 +85,7 @@ coinbaseWallet.preference = 'smartWalletOnly'; ## Implementing Balance Checking -Now well implement a check on the user's wallet to see if they have enough funds. Before we implement this check, let's create a helper function that grabs the user's Ethereum balance using [viem]. To do so, create a `utils.ts` file in the `src` directory that creates a client connected to Base and fetches the user's ETH balance: +Now we'll implement a check on the user's wallet to see if they have enough funds. Before we implement this check, let's create a helper function that grabs the user's Ethereum balance using [viem]. To do so, create a `utils.ts` file in the `src` directory that creates a client connected to Base and fetches the user's ETH balance: ```typescript import { createPublicClient, http } from 'viem'; @@ -167,7 +167,7 @@ Sweet! Now our conditional rendering is in full force. If a user clicks on the ` ## Conclusion -Congratulations! You've built a app that checks a user's smart wallet balance and provides appropriate options based on their funds. +Congratulations! You've built an app that checks a user's smart wallet balance and provides appropriate options based on their funds. This app can serve as a foundation for more complex onchain applications that require users to have funded smart wallets. --- diff --git a/apps/base-docs/tutorials/docs/5_cross-chain-with-layerzero.md b/apps/base-docs/tutorials/docs/5_cross-chain-with-layerzero.md index 2db0967210..1833d78cf6 100644 --- a/apps/base-docs/tutorials/docs/5_cross-chain-with-layerzero.md +++ b/apps/base-docs/tutorials/docs/5_cross-chain-with-layerzero.md @@ -215,12 +215,12 @@ The code snippet above defines a new smart contract named `ExampleContract` that The contract's constructor expects two arguments: -- `_endpoint`: The [LayerZero Endpoint](https://docs.layerzero.network/explore/layerzero-endpoint) `address` for the chain the smart contract is deployed to. +- `_endpoint`: The [LayerZero Endpoint](https://docs.layerzero.network/v2/home/protocol/layerzero-endpoint) `address` for the chain the smart contract is deployed to. - `_owner`: The `address` of the owner of the smart contract. :::info -[LayerZero Endpoints](https://docs.layerzero.network/explore/layerzero-endpoint) are smart contracts that expose an interface for OApp contracts to manage security configurations and send and receive messages via the LayerZero protocol. +[LayerZero Endpoints](https://docs.layerzero.network/v2/home/protocol/layerzero-endpoint) are smart contracts that expose an interface for OApp contracts to manage security configurations and send and receive messages via the LayerZero protocol. ::: @@ -251,9 +251,9 @@ The `sendMessage` function above calls the inherited `_lzSend` function, while p | Name | Type | Description | | :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `_dstEid` | `uint32` | The [endpoint ID](https://docs.layerzero.network/contracts/endpoint-addresses) of the destination chain to send the message to. | +| `_dstEid` | `uint32` | The [endpoint ID](https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts) of the destination chain to send the message to. | | `_payload` | `bytes` | The message (encoded) to send. | -| `_options` | `bytes` | [Additional options](https://docs.layerzero.network/contracts/options) when sending the message, such as how much gas should be used when receiving the message. | +| `_options` | `bytes` | [Additional options](https://docs.layerzero.network/v2/developers/evm/protocol-gas-settings/options) when sending the message, such as how much gas should be used when receiving the message. | | `_fee` | [`MessagingFee`](https://github.com/LayerZero-Labs/LayerZero-v2/blob/c3213200dfe8fabbf7d92c685590d34e6e70da43/protocol/contracts/interfaces/ILayerZeroEndpointV2.sol#L24) | The calculated fee for sending the message. | | `_refundAddress` | `address` | The `address` that will receive any excess fee values sent to the endpoint in case the `_lzSend` execution reverts. | @@ -289,9 +289,9 @@ The `estimateFee` function above calls the inherited `_quote` function, while pa | Name | Type | Description | | :-------------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `_dstEid` | `uint32` | The [endpoint ID](https://docs.layerzero.network/contracts/endpoint-addresses) of the destination chain the message will be sent to. | +| `_dstEid` | `uint32` | The [endpoint ID](https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts) of the destination chain the message will be sent to. | | `_payload` | `bytes` | The message (encoded) that will be sent. | -| `_options` | `bytes` | [Additional options](https://docs.layerzero.network/contracts/options) when sending the message, such as how much gas should be used when receiving the message. | +| `_options` | `bytes` | [Additional options](https://docs.layerzero.network/v2/developers/evm/protocol-gas-settings/options) when sending the message, such as how much gas should be used when receiving the message. | | `_payInLzToken` | `bool` | Boolean flag for which token to use when returning the fee (native or ZRO token). | :::info @@ -468,7 +468,7 @@ cast wallet list ### Setting up environment variables -To setup your environment, create an `.env` file in the home directory of your project, and add the RPC URLs and [LayerZero Endpoint](https://docs.layerzero.network/contracts/endpoint-addresses) information for both Base Goerli and Optimism Goerli testnets: +To setup your environment, create an `.env` file in the home directory of your project, and add the RPC URLs and [LayerZero Endpoint](https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts) information for both Base Goerli and Optimism Goerli testnets: ```bash BASE_GOERLI_RPC="https://goerli.base.org" @@ -530,14 +530,14 @@ The `setPeer` function expects the following arguments: | Name | Type | Description | | :------ | :-------- | :------------------------------------------------------------------------------------------------------- | -| `_eid` | `uint32` | The [endpoint ID](https://docs.layerzero.network/contracts/endpoint-addresses) of the destination chain. | +| `_eid` | `uint32` | The [endpoint ID](https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts) of the destination chain. | | `_peer` | `bytes32` | The contract address of the OApp contract on the destination chain. | ### Setting the peers Foundry provides the `cast` command-line tool that can be used to interact with deployed smart contracts and call their functions. -To set the peer of your `ExampleContract` contracts, you can use `cast` to call the `setPeer` function while providing the [endpoint ID](https://docs.layerzero.network/contracts/endpoint-addresses) and address (in bytes) of the deployed contract on the respective destination chain. +To set the peer of your `ExampleContract` contracts, you can use `cast` to call the `setPeer` function while providing the [endpoint ID](https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts) and address (in bytes) of the deployed contract on the respective destination chain. To set the peer of the Base Goerli contract to the Optimism Goerli contract, run the following command: @@ -571,17 +571,17 @@ Once peers have been set on each contract, they are now able to send and receive Sending a message using the newly created `ExampleContract` contract can be done in three steps: -1. Build [message options](https://docs.layerzero.network/contracts/options) to specify logic associated with the message transaction +1. Build [message options](https://docs.layerzero.network/v2/developers/evm/protocol-gas-settings/options) to specify logic associated with the message transaction 2. Call the `estimateFee` function to estimate the gas fee for sending a message 3. Call the `sendMessage` function to send a message ### Building message options -The `estimateFee` and `sendMessage` custom functions of the `ExampleContract` contract both require a [message options](https://docs.layerzero.network/contracts/options) (`_options`) argument to be provided. +The `estimateFee` and `sendMessage` custom functions of the `ExampleContract` contract both require a [message options](https://docs.layerzero.network/v2/developers/evm/protocol-gas-settings/options) (`_options`) argument to be provided. Message options allow you to specify arbitrary logic as part of the message transaction, such as the gas amount the [Executor](https://docs.layerzero.network/v2/home/permissionless-execution/executors) pays for message delivery, the order of message execution, or dropping an amount of gas to a destination address. -LayerZero provides a [Solidity](https://github.com/LayerZero-Labs/LayerZero-v2/blob/ccfd0d38f83ca8103b14ab9ca77f32e0419510ff/oapp/contracts/oapp/libs/OptionsBuilder.sol#L12) library and [TypeScript SDK](https://docs.layerzero.network/contracts/options) for building these message options. +LayerZero provides a [Solidity](https://github.com/LayerZero-Labs/LayerZero-v2/blob/ccfd0d38f83ca8103b14ab9ca77f32e0419510ff/oapp/contracts/oapp/libs/OptionsBuilder.sol#L12) library and [TypeScript SDK](https://docs.layerzero.network/v2/developers/evm/protocol-gas-settings/options) for building these message options. As an example, below is a Foundry script that uses OptionsBuilder from the Solidity library to generate message options (as `bytes`) that set the gas amount that the Executor will pay upon message delivery to `200000` wei: @@ -613,7 +613,7 @@ For this tutorial, rather than building and generating your own message options, :::info -Covering all of the different message options in detail is out of scope for this tutorial. If you are interested in learning more about the different message options and how to build them, visit the [LayerZero developer documentation](https://docs.layerzero.network/contracts/options). +Covering all of the different message options in detail is out of scope for this tutorial. If you are interested in learning more about the different message options and how to build them, visit the [LayerZero developer documentation](https://docs.layerzero.network/v2/developers/evm/protocol-gas-settings/options). ::: diff --git a/apps/base-docs/tutorials/docs/5_oracles-supra-vrf.md b/apps/base-docs/tutorials/docs/5_oracles-supra-vrf.md index 7c09c0191b..acca97dea1 100644 --- a/apps/base-docs/tutorials/docs/5_oracles-supra-vrf.md +++ b/apps/base-docs/tutorials/docs/5_oracles-supra-vrf.md @@ -128,7 +128,7 @@ This will create a Foundry project, which has the following basic layout: Once your Foundry project has been created, you can now start writing a smart contract. -The Solidity code below defines a basic contract named `RNGContract`. The smart contract's constructor takes in a single `address` and assigns it to a member variable named `supraAddr`. This address corresponds to the [contract address](https://supraoracles.com/docs/vrf/networks/) of the Supra Router Contract that will be used to generate random numbers. The contract address of the Supra Router Contract on Base Sepolia testnet is `0x99a021029EBC90020B193e111Ae2726264a111A2`. +The Solidity code below defines a basic contract named `RNGContract`. The smart contract's constructor takes in a single `address` and assigns it to a member variable named `supraAddr`. This address corresponds to the [contract address](https://docs.supra.com/oracles/data-feeds/pull-oracle/networks) of the Supra Router Contract that will be used to generate random numbers. The contract address of the Supra Router Contract on Base Sepolia testnet is `0x99a021029EBC90020B193e111Ae2726264a111A2`. The contract also assigns the contract deployer (`msg.sender`) to a member variable named `supraClientAddress`. This should be the client wallet address that is registered and whitelisted to use Supra VRF (see: [Prerequisites](#prerequisites)). diff --git a/apps/web/app/(basenames)/name/[username]/opengraph-image.tsx b/apps/web/app/(basenames)/name/[username]/opengraph-image.tsx index 073788206c..eb9f0f744f 100644 --- a/apps/web/app/(basenames)/name/[username]/opengraph-image.tsx +++ b/apps/web/app/(basenames)/name/[username]/opengraph-image.tsx @@ -80,20 +80,20 @@ export default async function OpenGraphImage(props: ImageRouteProps) { universalResolverAddress: USERNAME_L2_RESOLVER_ADDRESSES[chain.id], }); - if (!avatar) return; - - // IPFS Resolution - if (IsValidIpfsUrl(avatar)) { - const ipfsUrl = getIpfsGatewayUrl(avatar as IpfsUrl); - if (ipfsUrl) { - imageSource = ipfsUrl; + if (avatar) { + // IPFS Resolution + if (IsValidIpfsUrl(avatar)) { + const ipfsUrl = getIpfsGatewayUrl(avatar as IpfsUrl); + if (ipfsUrl) { + imageSource = ipfsUrl; + } + } else { + imageSource = avatar; } - } else { - imageSource = avatar; - } - // Cloudinary resize / fetch - imageSource = getCloudinaryMediaUrl({ media: imageSource, format: 'png', width: 80 }); + // Cloudinary resize / fetch + imageSource = getCloudinaryMediaUrl({ media: imageSource, format: 'png', width: 80 }); + } } catch (error) { logger.error('Error fetching basename Avatar:', error); } diff --git a/apps/web/global.d.ts b/apps/web/global.d.ts index 563fb102ad..d658225f7d 100644 --- a/apps/web/global.d.ts +++ b/apps/web/global.d.ts @@ -38,3 +38,8 @@ declare module '*.gltf' { const src: string; export default src; } + +declare module '*.mp4' { + const src: string; + export default src; +} diff --git a/apps/web/next.config.js b/apps/web/next.config.js index c8f04d4b9b..85aca3922e 100644 --- a/apps/web/next.config.js +++ b/apps/web/next.config.js @@ -37,7 +37,7 @@ const baseConfig = { // Enable strict mode in development reactStrictMode: !isProdEnv, - // Minifiy for production builds + // Minify for production builds swcMinify: false, }; @@ -196,6 +196,19 @@ module.exports = extendBaseConfig( }, ], }); + config.module.rules.push({ + test: /\.mp4$/, + use: [ + { + loader: 'file-loader', + options: { + name: '[name][hash].[ext]', + outputPath: 'static/assets/mp4/', + publicPath: '/_next/static/assets/mp4/', + }, + }, + ], + }); config.module.rules.push({ test: /\.gltf/, use: [ diff --git a/apps/web/pages/api/basenames/[name]/assets/cardImage.svg.tsx b/apps/web/pages/api/basenames/[name]/assets/cardImage.svg.tsx index deabe8d199..ee34859719 100644 --- a/apps/web/pages/api/basenames/[name]/assets/cardImage.svg.tsx +++ b/apps/web/pages/api/basenames/[name]/assets/cardImage.svg.tsx @@ -55,20 +55,20 @@ export default async function handler(request: NextRequest) { universalResolverAddress: USERNAME_L2_RESOLVER_ADDRESSES[chain.id], }); - if (!avatar) return; - - // IPFS Resolution - if (IsValidIpfsUrl(avatar)) { - const ipfsUrl = getIpfsGatewayUrl(avatar as IpfsUrl); - if (ipfsUrl) { - imageSource = ipfsUrl; + if (avatar) { + // IPFS Resolution + if (avatar && IsValidIpfsUrl(avatar)) { + const ipfsUrl = getIpfsGatewayUrl(avatar as IpfsUrl); + if (ipfsUrl) { + imageSource = ipfsUrl; + } + } else if (avatar) { + imageSource = avatar; } - } else { - imageSource = avatar; - } - // Cloudinary resize / fetch - imageSource = getCloudinaryMediaUrl({ media: imageSource, format: 'png', width: 120 }); + // Cloudinary resize / fetch + imageSource = getCloudinaryMediaUrl({ media: imageSource, format: 'png', width: 120 }); + } } catch (error) { logger.error('Error fetching basename Avatar:', error); } diff --git a/apps/web/public/images/partners/minimatch.png b/apps/web/public/images/partners/minimatch.png new file mode 100644 index 0000000000..67007ae014 Binary files /dev/null and b/apps/web/public/images/partners/minimatch.png differ diff --git a/apps/web/public/images/partners/moxie.png b/apps/web/public/images/partners/moxie.png new file mode 100644 index 0000000000..73c5c5c43c Binary files /dev/null and b/apps/web/public/images/partners/moxie.png differ diff --git a/apps/web/src/components/Basenames/UsernameProfileSectionFrames/types.ts b/apps/web/src/components/Basenames/UsernameProfileSectionFrames/types.ts index 72c9bceb16..e0c6c30eed 100644 --- a/apps/web/src/components/Basenames/UsernameProfileSectionFrames/types.ts +++ b/apps/web/src/components/Basenames/UsernameProfileSectionFrames/types.ts @@ -95,7 +95,7 @@ export type UseFrameOptions< frameActionProxy: string; /** the route used to GET the initial frame via proxy */ frameGetProxy: string; - /** an signer state object used to determine what actions are possible */ + /** a signer state object used to determine what actions are possible */ signerState: SignerStateInstance; /** the url of the homeframe, if null / undefined won't load a frame */ homeframeUrl: string | null | undefined; diff --git a/apps/web/src/components/base-org/root/BuildAndRewardSection/assets/cubes.mp4 b/apps/web/src/components/base-org/root/BuildAndRewardSection/assets/cubes.mp4 new file mode 100644 index 0000000000..615a4dc46b Binary files /dev/null and b/apps/web/src/components/base-org/root/BuildAndRewardSection/assets/cubes.mp4 differ diff --git a/apps/web/src/components/base-org/root/BuildAndRewardSection/assets/cubes.webm b/apps/web/src/components/base-org/root/BuildAndRewardSection/assets/cubes.webm deleted file mode 100644 index 0939512f8d..0000000000 Binary files a/apps/web/src/components/base-org/root/BuildAndRewardSection/assets/cubes.webm and /dev/null differ diff --git a/apps/web/src/components/base-org/root/BuildAndRewardSection/index.tsx b/apps/web/src/components/base-org/root/BuildAndRewardSection/index.tsx index a5337fb65d..306fdc66f2 100644 --- a/apps/web/src/components/base-org/root/BuildAndRewardSection/index.tsx +++ b/apps/web/src/components/base-org/root/BuildAndRewardSection/index.tsx @@ -2,12 +2,11 @@ import { useErrors } from 'apps/web/contexts/Errors'; import Title from 'apps/web/src/components/base-org/typography/Title'; import { TitleLevel } from 'apps/web/src/components/base-org/typography/Title/types'; - import Text from 'apps/web/src/components/base-org/typography/Text'; import Button from 'apps/web/src/components/base-org/Button'; import { ButtonVariants } from 'apps/web/src/components/base-org/Button/types'; import { useCallback, useRef } from 'react'; -import cubes from './assets/cubes.webm'; +import cubes from './assets/cubes.mp4'; import Link from 'apps/web/src/components/Link'; export default function BuildAndRewardSection() { @@ -26,7 +25,7 @@ export default function BuildAndRewardSection() {