From 638088d5163cc221f9a8abb8735b2f941ef13cbc Mon Sep 17 00:00:00 2001 From: Alfetopito Date: Fri, 1 Nov 2024 18:05:03 +0000 Subject: [PATCH] feat: add base --- .../concepts/order-types/twap-orders.md | 8 +- .../reference/contracts/core/README.mdx | 6 +- .../reference/contracts/periphery/README.mdx | 6 +- .../reference/core/auctions/rewards.md | 9 +- .../reference/core/signing_schemes.mdx | 1 + .../tutorials/cow-swap/custom-links.md | 23 +-- .../tutorials/cow-swap/native.mdx | 2 +- docs/cow-protocol/tutorials/cow-swap/twap.mdx | 2 +- .../tutorials/hook-dapp/hook-dapp.md | 169 +++++++++--------- .../tutorials/solvers/local_test.md | 28 +-- docs/cow-protocol/tutorials/widget/widget.md | 10 +- docs/governance/token.md | 19 +- 12 files changed, 147 insertions(+), 136 deletions(-) diff --git a/docs/cow-protocol/concepts/order-types/twap-orders.md b/docs/cow-protocol/concepts/order-types/twap-orders.md index 43cf99b6..d3d4ca22 100644 --- a/docs/cow-protocol/concepts/order-types/twap-orders.md +++ b/docs/cow-protocol/concepts/order-types/twap-orders.md @@ -11,7 +11,7 @@ TWAP orders are ideal for executing big trades with minimal price impact. TWAP orders split up a large order into a series of normal limit orders that trade at fixed intervals. When setting up a TWAP order, users specify how many parts they'd like to split their trade into, as well as the total duration of the order (can be hours, days, weeks, or even months). -TWAP orders on CoW Protocol require several inputs: +TWAP orders on CoW Protocol require several inputs: - **Assets**: Just like you would with a regular swap, begin by specifying the assets you want to swap - **Price Protection**: One of the unique parts of TWAP orders on CoW Protocol is the "price protection" option which allows you to specify the minimum market price you'd be willing to take for your order. If the price of the asset you're buying falls below what you specify for any, that part of the TWAP order will not execute until the price recovers above your threshold @@ -19,7 +19,9 @@ TWAP orders on CoW Protocol require several inputs: - **Total Duration**: Specify the total length of time that you want all parts of your order to execute over ## Benefits -TWAP orders provide a number of benefits, especially when it comes to large orders: + +TWAP orders provide a number of benefits, especially when it comes to large orders: + - **Lower slippage**: Breaking up a large order into smaller pieces allows users to set a smaller slippage tolerance for each piece than if they had executed the large order as one - **Lower price impact**: As with slippage, breaking up a large order into small pieces allows users to spread their liquidity needs over time, reducing price impact - **100% of order surplus**: On CoW Swap, all order surplus is forwarded to the user. If an order executes for a price better than the quoted price - thanks to [Coincidences of Wants](../how-it-works/coincidence-of-wants) or any other price improvement that solvers are able to find - the extra price improvement will be forwarded to the user @@ -30,7 +32,7 @@ TWAP orders provide a number of benefits, especially when it comes to large orde There are also several requirements for placing TWAP orders through CoW Protocol -- Trades on Ethereum Mainnet must be a minimum of \$1,000 (the minimum is only $5 for trades on Gnosis chain and Arbitrum One) +- Trades on Ethereum Mainnet must be a minimum of \$1,000 (the minimum is only $5 for trades on Gnosis chain, Arbitrum One and Base) - Users must have a [Safe wallet](https://safe.global/wallet) with an [upgraded fallback handler](https://blog.cow.fi/all-you-need-to-know-about-cow-swaps-new-safe-fallback-handler-8ef0439925d1) ## Getting started diff --git a/docs/cow-protocol/reference/contracts/core/README.mdx b/docs/cow-protocol/reference/contracts/core/README.mdx index 5aaf50b3..bf8be655 100644 --- a/docs/cow-protocol/reference/contracts/core/README.mdx +++ b/docs/cow-protocol/reference/contracts/core/README.mdx @@ -42,9 +42,9 @@ Take care when [signing](../core/signing-schemes), ensuring that the `EIP-712` d | **Contracts** | **Address / Chains** | |---|---| -| [`GPv2Settlement`](core/settlement)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2Settlement.sol) | `0x9008D19f58AAbD9eD0D60971565AA8510560ab41`
- [Ethereum mainnet](https://etherscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code)
- [Gnosis chain](https://gnosisscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code)
- [Arbitrum one](https://arbiscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code)
- [Sepolia](https://sepolia.etherscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code) | -| [`GPv2AllowListAuthentication`](core/allowlist)
Upgradeable: Yes ⚠️
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2AllowListAuthentication.sol) | `0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE`
- [Ethereum mainnet](https://etherscan.io/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code)
- [Gnosis chain](https://gnosisscan.io/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code)
- [Arbitrum one](https://arbiscan.io/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code)
- [Sepolia](https://sepolia.etherscan.io/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code) | -| [`GPv2VaultRelayer`](core/vault-relayer)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2VaultRelayer.sol) | `0xC92E8bdf79f0507f65a392b0ab4667716BFE0110`
- [Ethereum mainnet](https://etherscan.io/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code)
- [Gnosis chain](https://gnosisscan.io/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code)
- [Arbitrum one](https://arbiscan.io/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code)
- [Sepolia](https://sepolia.etherscan.io/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code) | +| [`GPv2Settlement`](core/settlement)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2Settlement.sol) | `0x9008D19f58AAbD9eD0D60971565AA8510560ab41`
- [Ethereum mainnet](https://etherscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code)
- [Gnosis chain](https://gnosisscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code)
- [Arbitrum one](https://arbiscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code)
- [Base](https://basescan.org/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code)
- [Sepolia](https://sepolia.etherscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41/#code) | +| [`GPv2AllowListAuthentication`](core/allowlist)
Upgradeable: Yes ⚠️
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2AllowListAuthentication.sol) | `0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE`
- [Ethereum mainnet](https://etherscan.io/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code)
- [Gnosis chain](https://gnosisscan.io/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code)
- [Arbitrum one](https://arbiscan.io/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code)
- [Base](https://basescan.org/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code)
- [Sepolia](https://sepolia.etherscan.io/address/0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE/#code) | +| [`GPv2VaultRelayer`](core/vault-relayer)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2VaultRelayer.sol) | `0xC92E8bdf79f0507f65a392b0ab4667716BFE0110`
- [Ethereum mainnet](https://etherscan.io/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code)
- [Gnosis chain](https://gnosisscan.io/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code)
- [Arbitrum one](https://arbiscan.io/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code)
- [Base](https://basescan.org/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code)
- [Sepolia](https://sepolia.etherscan.io/address/0xC92E8bdf79f0507f65a392b0ab4667716BFE0110/#code) |
Upgradeable allow-list diff --git a/docs/cow-protocol/reference/contracts/periphery/README.mdx b/docs/cow-protocol/reference/contracts/periphery/README.mdx index 8a1c855c..616c1e09 100644 --- a/docs/cow-protocol/reference/contracts/periphery/README.mdx +++ b/docs/cow-protocol/reference/contracts/periphery/README.mdx @@ -12,6 +12,6 @@ CoW Protocol contracts are generally deployed to the same addresses on their res | **Contracts** | **Address / Chains** | |---|---| -| [`EthFlow`](periphery/eth-flow)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/ethflowcontract/blob/main/src/CoWSwapEthFlow.sol) | Production: `0x40A50cf069e992AA4536211B23F286eF88752187`, Staging: `0xD02De8Da0B71E1B59489794F423FaBBa2AdC4d93` on the following networks:
- Ethereum mainnet: [Production](https://etherscan.io/address/0x40A50cf069e992AA4536211B23F286eF88752187), [Staging](https://etherscan.io/address/0xD02De8Da0B71E1B59489794F423FaBBa2AdC4d93)
- Gnosis chain: [Production](https://gnosisscan.io/address/0x40A50cf069e992AA4536211B23F286eF88752187), [Staging](https://gnosisscan.io/address/0xD02De8Da0B71E1B59489794F423FaBBa2AdC4d93)

Production: `0x552fcecc218158fff20e505c8f3ad24f8e1dd33c`, Staging: `0x6dfe75b5ddce1ade279d4fa6bd6aef3cbb6f49db` on the following networks:
- Arbitrum one: [Production](https://arbiscan.io/address/0x552fcecc218158fff20e505c8f3ad24f8e1dd33c), [Staging](https://arbiscan.io/address/0x6dfe75b5ddce1ade279d4fa6bd6aef3cbb6f49db)

Production: `0x0b7795E18767259CC253a2dF471db34c72B49516`, Staging: `0x2671994c7D224ac4799ac2cf6Ef9EF187d42C69f` on the following networks:
- Sepolia: [Production](https://sepolia.etherscan.io/address/0x0b7795E18767259CC253a2dF471db34c72B49516), [Staging](https://sepolia.etherscan.io/address/0x2671994c7D224ac4799ac2cf6Ef9EF187d42C69f)
| -| [`HooksTrampoline`](periphery/hooks-trampoline)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/hooks-trampoline/blob/main/src/HooksTrampoline.sol) | `0x01DcB88678aedD0C4cC9552B20F4718550250574`
- [Ethereum mainnet](https://etherscan.io/address/0x01DcB88678aedD0C4cC9552B20F4718550250574)
- [Gnosis chain](https://gnosisscan.io/address/0x01DcB88678aedD0C4cC9552B20F4718550250574)
- [Arbitrum one](https://arbiscan.io/address/0x01DcB88678aedD0C4cC9552B20F4718550250574)
- [Sepolia](https://sepolia.etherscan.io/address/0x01DcB88678aedD0C4cC9552B20F4718550250574) | -| [`ComposableCoW`](periphery/composable-cow)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/composable-cow/blob/main/src/ComposableCoW.sol) | `0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74`
- [Ethereum mainnet](https://etherscan.io/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
- [Gnosis chain](https://gnosisscan.io/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
- [Arbitrum one](https://arbiscan.io/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
- [Sepolia](https://sepolia.etherscan.io/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74) | +| [`EthFlow`](periphery/eth-flow)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/ethflowcontract/blob/main/src/CoWSwapEthFlow.sol) | Production: `0x40A50cf069e992AA4536211B23F286eF88752187`, Staging: `0xD02De8Da0B71E1B59489794F423FaBBa2AdC4d93` on the following networks:
- Ethereum mainnet: [Production](https://etherscan.io/address/0x40A50cf069e992AA4536211B23F286eF88752187), [Staging](https://etherscan.io/address/0xD02De8Da0B71E1B59489794F423FaBBa2AdC4d93)
- Gnosis chain: [Production](https://gnosisscan.io/address/0x40A50cf069e992AA4536211B23F286eF88752187), [Staging](https://gnosisscan.io/address/0xD02De8Da0B71E1B59489794F423FaBBa2AdC4d93)

Production: `0x552fcecc218158fff20e505c8f3ad24f8e1dd33c`, Staging: `0x6dfe75b5ddce1ade279d4fa6bd6aef3cbb6f49db` on the following networks:
- Arbitrum one: [Production](https://arbiscan.io/address/0x552fcecc218158fff20e505c8f3ad24f8e1dd33c), [Staging](https://arbiscan.io/address/0x6dfe75b5ddce1ade279d4fa6bd6aef3cbb6f49db)

Production: `0x3d1b389f1707DB3d4c5344d5669DBda6b5D6Ab51`, Staging: `0x3C3eA1829891BC9bEC3d06A81d5d169e52a415e3` on the following networks:
- Base: [Production](https://basescan.org/address/0x3d1b389f1707DB3d4c5344d5669DBda6b5D6Ab51), [Staging](https://basescan.org/address/0x3C3eA1829891BC9bEC3d06A81d5d169e52a415e3)

Production: `0x0b7795E18767259CC253a2dF471db34c72B49516`, Staging: `0x2671994c7D224ac4799ac2cf6Ef9EF187d42C69f` on the following networks:
- Sepolia: [Production](https://sepolia.etherscan.io/address/0x0b7795E18767259CC253a2dF471db34c72B49516), [Staging](https://sepolia.etherscan.io/address/0x2671994c7D224ac4799ac2cf6Ef9EF187d42C69f)
| +| [`HooksTrampoline`](periphery/hooks-trampoline)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/hooks-trampoline/blob/main/src/HooksTrampoline.sol) | `0x01DcB88678aedD0C4cC9552B20F4718550250574`
- [Ethereum mainnet](https://etherscan.io/address/0x01DcB88678aedD0C4cC9552B20F4718550250574)
- [Gnosis chain](https://gnosisscan.io/address/0x01DcB88678aedD0C4cC9552B20F4718550250574)
- [Arbitrum one](https://arbiscan.io/address/0x01DcB88678aedD0C4cC9552B20F4718550250574)
- [Base](https://basescan.org/address/0x01DcB88678aedD0C4cC9552B20F4718550250574)
- [Sepolia](https://sepolia.etherscan.io/address/0x01DcB88678aedD0C4cC9552B20F4718550250574) | +| [`ComposableCoW`](periphery/composable-cow)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/composable-cow/blob/main/src/ComposableCoW.sol) | `0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74`
- [Ethereum mainnet](https://etherscan.io/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
- [Gnosis chain](https://gnosisscan.io/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
- [Arbitrum one](https://arbiscan.io/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
- [Base](https://basescan.org/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74)
- [Sepolia](https://sepolia.etherscan.io/address/0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74) | diff --git a/docs/cow-protocol/reference/core/auctions/rewards.md b/docs/cow-protocol/reference/core/auctions/rewards.md index 7468d760..a756c3e7 100644 --- a/docs/cow-protocol/reference/core/auctions/rewards.md +++ b/docs/cow-protocol/reference/core/auctions/rewards.md @@ -6,7 +6,6 @@ sidebar_position: 3 The protocol is currently subsidizing the solver competition on all chains it operates on, by rewarding solvers on a weekly basis (currently, every Tuesday) with rewards paid in COW. Solvers are rewarded based on their performance as solvers (i.e., when participating in the standard solver competition) as specified by [CIP-20](https://snapshot.org/#/cow.eth/proposal/0x2d3f9bd1ea72dca84b03e97dda3efc1f4a42a772c54bd2037e8b62e7d09a491f), [CIP-36](https://snapshot.org/#/cow.eth/proposal/0x4e58f9c1208121c0e06282b5541b458bc8c8b76090263e25448848f3194df986), [CIP-38](https://snapshot.org/#/cow.eth/proposal/0xfb81daea9be89f4f1c251d53fd9d1481129b97c6f38caaddc42af7f3ce5a52ec), [CIP-48](https://snapshot.org/#/cow.eth/proposal/0x563ab9a66265ad72c47a8e55f620f927685dd07d4d49f6d1812905c683f05805) and [CIP-57](https://snapshot.box/#/s:cow.eth/proposal/0x46d4fea1492207cf400fcb7a01141a7d4c730791d658cc77236941fc9eb7dccb). Solver rewards for participating in the price estimation competition and providing quotes that are needed for the gas estimates and limit price computations of market orders are specified in [CIP-27](https://snapshot.org/#/cow.eth/proposal/0x64e061568e86e8d2eec344d4a892e4126172b992cabe59a0b24c51c4c7e6cc33) and [CIP-36](https://snapshot.org/#/cow.eth/proposal/0x4e58f9c1208121c0e06282b5541b458bc8c8b76090263e25448848f3194df986). - :::note For the interested reader, the main source of truth for the weekly payments to solvers is this [Dune dashboard](https://dune.com/cowprotocol/cow-solver-rewards). The dashboard is populated with data aggregated by scripts within the [solver-rewards](https://github.com/cowprotocol/solver-rewards) repository. @@ -38,10 +37,11 @@ The payment calculation can result in a negative figure, in which case the solve ::: The payment is capped from above and below using the function $$\textrm{cap}(x) = \max(-c_l, \min(c_u, x))$$ that is chain-specific, and is determined by the following values: + - Ethereum mainnet and Arbitrum: $$c_l = 0.010 \;\textrm{ETH}$$ and $$c_u = 0.012 \;\textrm{ETH}$$, - Gnosis Chain: $$c_l = c_u = 10 \;\textrm{xDAI}$$. -Submitted scores that are non-positive will be ignored. If only one solution is submitted, $$\textrm{referenceQuality}$$ is set to zero. Formally, this corresponds to always considering the empty solution which does not settle any trades and has quality zero as part of the submitted solutions. +Submitted scores that are non-positive will be ignored. If only one solution is submitted, $$\textrm{referenceQuality}$$ is set to zero. Formally, this corresponds to always considering the empty solution which does not settle any trades and has quality zero as part of the submitted solutions. :::note @@ -49,8 +49,6 @@ There is no guarantee that the per-auction rewards are greater than the gas cost ::: - - ### Additional solver costs (slippage) In addition to paying for gas, the winning solver might incur additional costs, such as, for example, negative slippage once a solution is settled on chain. These costs are not an explicit element of the mechanism, but they are relevant in determining the solver's optimal strategy. More precisely, per [CIP-17](https://snapshot.org/#/cow.eth/proposal/0xf9c98a2710dc72c906bbeab9b8fe169c1ed2e9af6a67776cc29b8b4eb44d0fb2), solvers are responsible for managing potential slippage incurred by the settlements they settle. This is a component that affects payouts, but can be treated completely separately, and we do so in [slippage accounting](slippage). @@ -75,13 +73,14 @@ a solver wins if and only if $$\textrm{referenceQuality}$$ is such that the solv The presence of the cap on rewards $$c_u$$, however, makes the problem more complex as it introduces a "first-price auction" logic: if the difference between the best and second-best solution is very large, then the winning solver wins more when it underreports its quality. However, determining the optimal amount of underreporting is very complex, and requires each solver to make strong assumptions regarding the performance of competing solvers. -To summarize, there is a simple strategy that guarantees positive expected profits to solvers. This strategy may not be optimal in uncompetitive auctions when the difference between the best and second best solution may be large. However, in these cases, deriving the optimal strategy is a very complex problem. We conclude by noting that most CoW Protocol batches are very competitive: the cap of on rewards is binding only in about 9% of auctions. +To summarize, there is a simple strategy that guarantees positive expected profits to solvers. This strategy may not be optimal in uncompetitive auctions when the difference between the best and second best solution may be large. However, in these cases, deriving the optimal strategy is a very complex problem. We conclude by noting that most CoW Protocol batches are very competitive: the cap of on rewards is binding only in about 9% of auctions. ## Price estimation competition rewards (CIPs 27, 57) The price estimation competition is a separate competition where solvers compete to provide the best response to a quote request. Quote requests look almost identical to single-order batch auctions, where there is only one order with a trivial limit price, and solvers propose executions of this order with the goal to maximize "out amount minus gas costs", in the case of a sell request, or minimize "in amount + gas costs" in the case of a buy request. As specified in [CIP-27](https://snapshot.org/#/cow.eth/proposal/0x64e061568e86e8d2eec344d4a892e4126172b992cabe59a0b24c51c4c7e6cc33), [CIP-36](https://snapshot.org/#/cow.eth/proposal/0x4e58f9c1208121c0e06282b5541b458bc8c8b76090263e25448848f3194df986) and [CIP-57](https://snapshot.box/#/s:cow.eth/proposal/0x46d4fea1492207cf400fcb7a01141a7d4c730791d658cc77236941fc9eb7dccb), solvers that participate in the price estimation competition are rewarded for each order that is within the market price, is associated with a quote that was computed as part of the price estimation competition, and was used in order to compute the limit price of the order. The protocol keeps track of the quote associated with each created order and the corresponding solver that provided the quote. If and when the order gets executed, the solver that provided the quote (which can be different than the solver that ended up executing the order) gets rewarded as follows: + - Ethereum mainnet: $$\min\{0.0006 ~\textrm{ETH}, 6 ~\textrm{COW}\}$$, - Arbitrum: $$\min\{0.0002 ~\textrm{ETH}, 6 ~\textrm{COW}\}$$, - Gnosis Chain: $$\min\{0.15 ~\textrm{xDAI}, 6 ~\textrm{COW}\}$$, diff --git a/docs/cow-protocol/reference/core/signing_schemes.mdx b/docs/cow-protocol/reference/core/signing_schemes.mdx index 5c116ff3..c061288d 100644 --- a/docs/cow-protocol/reference/core/signing_schemes.mdx +++ b/docs/cow-protocol/reference/core/signing_schemes.mdx @@ -38,6 +38,7 @@ For convenience, the domain separator is exposed as a public view function in th * [Ethereum mainnet](https://etherscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41#readContract#F2) * [Gnosis chain](https://gnosisscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41#readContract#F2) * [Arbitrum one](https://arbiscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41#readContract#F2) +* [Base](https://basescan.org/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41#readContract#F2) * [Sepolia](https://sepolia.etherscan.io/address/0x9008D19f58AAbD9eD0D60971565AA8510560ab41#readContract#F2) ::: diff --git a/docs/cow-protocol/tutorials/cow-swap/custom-links.md b/docs/cow-protocol/tutorials/cow-swap/custom-links.md index c92f5d4e..3ba3cc5f 100644 --- a/docs/cow-protocol/tutorials/cow-swap/custom-links.md +++ b/docs/cow-protocol/tutorials/cow-swap/custom-links.md @@ -35,9 +35,9 @@ Fortunately, the `swap` and `limit` pages have the same URL query parameters! ### Global parameters -| **Parameter** | **Type** | **Default** | **Description** | -| --- | --- | --- | --- | -| `theme` | String | (determined by browser) | Sets theme to `dark` or `light` mode. | +| **Parameter** | **Type** | **Default** | **Description** | +| ------------- | -------- | ----------------------- | ------------------------------------- | +| `theme` | String | (determined by browser) | Sets theme to `dark` or `light` mode. | ### Swap / limit parameters @@ -47,14 +47,14 @@ All parameters are optional. If a parameter is not set, the default value will b ::: -| **Parameter** | **Type** | **Default** | **Description** | -| --- | --- | --- | --- | -| `chainId` | Integer | `1` - Ethereum Mainnet | [Supported blockchains](/cow-protocol/reference/contracts/core#deployments) | -| `sellTokenSymbolOrAddress` | Token `symbol` or `address` | Wrapped native token symbol for the current network (for Mainnet: `WETH`) | Sell token `symbol` or `address` | -| `buyTokenSymbolOrAddress` | Token `symbol` or `address` | | Buy token `symbol` or `address` | -| `recipient` | `address` | `undefined` | Valid Ethereum account address | -| `sellAmount` | Integer or Float | `undefined` | Amount of sell token to sell | -| `buyAmount` | Integer or Float | `undefined` | Amount of buy token to buy | +| **Parameter** | **Type** | **Default** | **Description** | +| -------------------------- | --------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `chainId` | Integer | `1` - Ethereum Mainnet | [Supported blockchains](/cow-protocol/reference/contracts/core#deployments) | +| `sellTokenSymbolOrAddress` | Token `symbol` or `address` | Wrapped native token symbol for the current network (for Mainnet: `WETH`) | Sell token `symbol` or `address` | +| `buyTokenSymbolOrAddress` | Token `symbol` or `address` | | Buy token `symbol` or `address` | +| `recipient` | `address` | `undefined` | Valid Ethereum account address | +| `sellAmount` | Integer or Float | `undefined` | Amount of sell token to sell | +| `buyAmount` | Integer or Float | `undefined` | Amount of buy token to buy | :::caution @@ -71,6 +71,7 @@ Native and wrapped tokens per chain: - Ethereum Mainnet: [`WETH`](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2) - wrapped `ETH` - Gnosis chain: [`WXDAI`](https://gnosisscan.io/address/0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d) - wrapped `XDAI` - Arbitrum one: [`WETH`](https://arbiscan.io/address/0x82af49447d8a07e3bd95bd0d56f35241523fbab1) - wrapped `ETH` +- Base: [`WETH`](https://basescan.org/address/0x4200000000000000000000000000000000000006) - wrapped `ETH` - Sepolia: [`WETH`](https://sepolia.etherscan.io/address/0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14) - wrapped `ETH` ::: diff --git a/docs/cow-protocol/tutorials/cow-swap/native.mdx b/docs/cow-protocol/tutorials/cow-swap/native.mdx index 50311e1f..1b27f521 100644 --- a/docs/cow-protocol/tutorials/cow-swap/native.mdx +++ b/docs/cow-protocol/tutorials/cow-swap/native.mdx @@ -8,7 +8,7 @@ import CancellationNotGuaranteed from '../../../partials/_cancellation_not_guara # Native tokens -In blockchain networks the "native token" - for example, Ether (ETH) on Ethereum and Arbitrum One & xDAI (xDAI) on Gnosis Chain - is the primary digital currency. +In blockchain networks the "native token" - for example, Ether (ETH) on Ethereum, Arbitrum One and Base, and xDAI (xDAI) on Gnosis Chain - is the primary digital currency. It's essential for network operations, like paying transaction fees. "Wrapped" tokens - for example, Wrapped Ether (WETH) & Wrapped xDAI (wxDAI) - are [`ERC-20`-compatible](https://ethereum.org/en/developers/docs/standards/tokens/`ERC-20`/) versions of these native tokens. diff --git a/docs/cow-protocol/tutorials/cow-swap/twap.mdx b/docs/cow-protocol/tutorials/cow-swap/twap.mdx index 2ab86d63..b2d16433 100644 --- a/docs/cow-protocol/tutorials/cow-swap/twap.mdx +++ b/docs/cow-protocol/tutorials/cow-swap/twap.mdx @@ -18,7 +18,7 @@ This helps in minimizing market impact and in doing so likely achieves a better - **Reduce price impact on large orders**: For example, buying `$1M` of ETH over 3 hours in 6 parts; the TWAP will place an order of `$166k` every `30min`, significantly reducing the price impact and allowing the market to recover. - **Average buy price over time**: This strategy reduces the risk of buying at a high price by averaging the prices over a selected period. -- **Ideal for recurring or big trades**: The minimum required order size is `$1k` on Mainnet or `$5` on Gnosis Chain and Arbitrum One. +- **Ideal for recurring or big trades**: The minimum required order size is `$1k` on Mainnet or `$5` on Gnosis Chain, Arbitrum One and Base. ## Placing a TWAP Order diff --git a/docs/cow-protocol/tutorials/hook-dapp/hook-dapp.md b/docs/cow-protocol/tutorials/hook-dapp/hook-dapp.md index 75321cff..621c68dc 100644 --- a/docs/cow-protocol/tutorials/hook-dapp/hook-dapp.md +++ b/docs/cow-protocol/tutorials/hook-dapp/hook-dapp.md @@ -4,34 +4,35 @@ sidebar_position: 5 # CoW Hook dApp - ### [What are CoW Hooks?](/cow-protocol/concepts/order-types/cow-hooks) + ### [Technical specification](/cow-protocol/reference/core/intents/hooks) | Demo | Demo | -|-----|----| +| ------------------------------------------------------------------ | ----------------------------------------------------------------------- | -**Hook dApp** - is an application that allows you to conveniently program an order to perform any action before or after a swap. +**Hook dApp** - is an application that allows you to conveniently program an order to perform any action before or after a swap. -In the CoW Swap interface you can find several hooks for different tasks. For example, you can claim GNO from Gnosis validators before your swap. You can also specify an arbitrary call to a smart contract before or after your swap using the "Build your own hooks" dApp. +In the CoW Swap interface you can find several hooks for different tasks. For example, you can claim GNO from Gnosis validators before your swap. You can also specify an arbitrary call to a smart contract before or after your swap using the "Build your own hooks" dApp. But that's not all. You can also develop your own application that will install a hook in CoW Swap! For this purpose, there is a custom application based on [iframe](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe). In order to add a custom hook, you need to: - - Click "add Pre/Post-Hook Action" - - Go to "My Custom Hooks" tab - - Paste a URL of the hook dApp + +- Click "add Pre/Post-Hook Action" +- Go to "My Custom Hooks" tab +- Paste a URL of the hook dApp > CoW Hooks are still under development! The feature is not enabled in tbe production environment just yet. -> You can test CoW Hooks at https://barn.cow.fi. +> You can test CoW Hooks at . Demo ## How to develop CoW Hook dApps CoW Hook dApp is a web application that communicates with CoW Swap using [post-messages](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage). -For your convenience there is a npm library [`@cowprotocol/hook-dapp-lib`](https://www.npmjs.com/package/@cowprotocol/hook-dapp-lib) which provides everything necessary to get started with your hook dApp development. +For your convenience there is a npm library [`@cowprotocol/hook-dapp-lib`](https://www.npmjs.com/package/@cowprotocol/hook-dapp-lib) which provides everything necessary to get started with your hook dApp development. ### Install @@ -44,10 +45,12 @@ npm install @cowprotocol/hook-dapp-lib ``` It provides: + - [`EIP-1193`](https://eips.ethereum.org/EIPS/eip-1193) provider to interact with a user wallet - `HookDappContext` which contains environment parameters (chainId, account, etc.) and current order parameters (sell token, validTo, etc.) And it expects calling following callbacks: + - `addHook` when a hook data is ready and can be added to an order - `editHook` when hook parameters were changed (edit mode) - `setSellToken / setBuyToken` if you want to change the trade assets @@ -59,49 +62,49 @@ Let's create a simple hook dApp that checks the COW token balance of the order c ```html - - - + + + ``` @@ -121,24 +124,24 @@ const { actions, provider } = initCoWHookDapp({ onContext(context: HookDappConte #### `HookDappContext` -| Parameter | Type | Optional | Description | -| --- |-------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `chainId` | `number` | false | Current chainId in CoW Swap. | -| `account` | `string` | true | The user's account address. If not set, the wallet is not connected yet. | -| `orderParams` | `HookDappOrderParams \| null` | false | The parameters for the order. If value is `null`, the order is not ready yet. See [HookDappOrderParams](https://github.com/cowprotocol/cowswap/blob/develop/libs/hook-dapp-lib/src/types.ts#L29) for more details. | -| `hookToEdit` | `CowHookDetails` | true | CoW Swap supports editing hooks that have been created already. If the parameter is set, then it's in edit mode. See [CowHookDetails](https://github.com/cowprotocol/cowswap/blob/develop/libs/hook-dapp-lib/src/types.ts#L18) for more details. | -| `isSmartContract` | `boolean \| undefined` | true | Whether the account is a smart contract. `undefined` if unknown. | -| `isPreHook` | `boolean` | false | Indicates the position of the hook. | +| Parameter | Type | Optional | Description | +| ----------------- | ----------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `chainId` | `number` | false | Current chainId in CoW Swap. | +| `account` | `string` | true | The user's account address. If not set, the wallet is not connected yet. | +| `orderParams` | `HookDappOrderParams \| null` | false | The parameters for the order. If value is `null`, the order is not ready yet. See [HookDappOrderParams](https://github.com/cowprotocol/cowswap/blob/develop/libs/hook-dapp-lib/src/types.ts#L29) for more details. | +| `hookToEdit` | `CowHookDetails` | true | CoW Swap supports editing hooks that have been created already. If the parameter is set, then it's in edit mode. See [CowHookDetails](https://github.com/cowprotocol/cowswap/blob/develop/libs/hook-dapp-lib/src/types.ts#L18) for more details. | +| `isSmartContract` | `boolean \| undefined` | true | Whether the account is a smart contract. `undefined` if unknown. | +| `isPreHook` | `boolean` | false | Indicates the position of the hook. | --- #### `CoWHookDappActions` -| Parameter | Type | Description | -|--------------------|----------------------------------------|--------------------------------------------------------------------| -| `addHook` | `(payload: CowHookCreation) => void` | The callback should be executed once the hook is ready to be added. | -| `editHook` | `(payload: CowHookDetails) => void` | The callback should be executed when the hook data is changed. | -| `setSellToken / setBuyToken` | `(token: { address: string }) => void` | Optionally you can change the asset for sell/buy. | +| Parameter | Type | Description | +| ---------------------------- | -------------------------------------- | ------------------------------------------------------------------- | +| `addHook` | `(payload: CowHookCreation) => void` | The callback should be executed once the hook is ready to be added. | +| `editHook` | `(payload: CowHookDetails) => void` | The callback should be executed when the hook data is changed. | +| `setSellToken / setBuyToken` | `(token: { address: string }) => void` | Optionally you can change the asset for sell/buy. | ### Manifest @@ -151,10 +154,10 @@ To do this, the application must contain `manifest.json` file with following str "id": "06a2747d08f0026f47aebb91ac13172a318eb3f6116f742751e2d83cc61b8753", "name": "Your Hook Dapp", "descriptionShort": "Your Hook Dapp short description", - "description": "Your Hook Dapp full description", - "version": "0.0.1", + "description": "Your Hook Dapp full description", + "version": "0.0.1", "website": "https://your-cow-hook.dapp", - "image": "http://your-cow-hook.dapp/logo.png", + "image": "http://your-cow-hook.dapp/logo.png", "conditions": { "position": "pre", "smartContractWalletSupported": false, @@ -162,24 +165,24 @@ To do this, the application must contain `manifest.json` file with following str } } } - ``` -| Parameter | Type | Description | -|----------------------------------|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | `string` | 64-bit hex application identifier `(keccak256(YOUR_APP_NAME))`. This value is used to match hooks in an order with the dApp that generated the hook. | -| `name` | `string` | The name of the Hook Dapp. | -| `descriptionShort` | `string` | A short description. | -| `description` | `string` | A full, detailed description of the Hook Dapp. | -| `version` | `string` | The version number of the Hook Dapp, typically following semantic versioning. | -| `website` | `string` (URL) | The URL link to the Hook Dapp's official website. | -| `image` | `string` (URL) | The URL link to the Hook Dapp's logo or representative image. | -| `conditions.position` | `pre \| post` | Specifies the execution position of the hook, `pre` or `post`. If not set, then the Hook Dapp supports both positions. | -| `conditions.walletCompatibility` | `HookDappWalletCompatibility[]` | Indicates whether the Hook Dapp supports smart contract wallets or EOAs. | -| `conditions.supportedNetworks` | `array` of `integers` | List of supported network IDs (e.g., `1` for Ethereum mainnet, `100` for Gnosis chain, `42161` for Arbitrum). If not set, then the Hook Dapp will be available for any network supported by CoW Swap. | +| Parameter | Type | Description | +| -------------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | `string` | 64-bit hex application identifier `(keccak256(YOUR_APP_NAME))`. This value is used to match hooks in an order with the dApp that generated the hook. | +| `name` | `string` | The name of the Hook Dapp. | +| `descriptionShort` | `string` | A short description. | +| `description` | `string` | A full, detailed description of the Hook Dapp. | +| `version` | `string` | The version number of the Hook Dapp, typically following semantic versioning. | +| `website` | `string` (URL) | The URL link to the Hook Dapp's official website. | +| `image` | `string` (URL) | The URL link to the Hook Dapp's logo or representative image. | +| `conditions.position` | `pre \| post` | Specifies the execution position of the hook, `pre` or `post`. If not set, then the Hook Dapp supports both positions. | +| `conditions.walletCompatibility` | `HookDappWalletCompatibility[]` | Indicates whether the Hook Dapp supports smart contract wallets or EOAs. | +| `conditions.supportedNetworks` | `array` of `integers` | List of supported network IDs (e.g., `1` for Ethereum mainnet, `100` for Gnosis chain, `42161` for Arbitrum, `8453` for Base). If not set, then the Hook Dapp will be available for any network supported by CoW Swap. | ## Advanced Hook Dapps For more complex scenarios, such as transferring the buy amount to another smart-contract or other smart-contract related actions, you will probably need CoW Shed: - - [CoW Shed](https://github.com/cowdao-grants/cow-shed) - - [Permit, Swap & Bridge CoW Hook example](https://v1.docs.cow.fi/overview/cow-hooks/cow-hooks-example/permit-swap-and-bridge-cow-hook) + +- [CoW Shed](https://github.com/cowdao-grants/cow-shed) +- [Permit, Swap & Bridge CoW Hook example](https://v1.docs.cow.fi/overview/cow-hooks/cow-hooks-example/permit-swap-and-bridge-cow-hook) diff --git a/docs/cow-protocol/tutorials/solvers/local_test.md b/docs/cow-protocol/tutorials/solvers/local_test.md index 78190729..e70329db 100644 --- a/docs/cow-protocol/tutorials/solvers/local_test.md +++ b/docs/cow-protocol/tutorials/solvers/local_test.md @@ -7,6 +7,7 @@ sidebar_position: 1 CoW Protocol infrastructure is a lot of services running together in herd harmony, which is a bit intimidating at the beginning. Before proceeding, it would be advisable to read the architectural overview to get a better understanding of how CoW Protocol works and its entities. In order to test a solver against CoW Protocol's orderflow, one needs to locally run the following components + - autopilot, which will be configured to point, for example, to the production orderbook and to send the auctions to a local driver. - driver, which will receive auctions from the autopilot and forward them to the solver engine - the solver engine that is meant to be tested, run as a local http server able to receive `/solve` requests from the driver and respond to them. @@ -38,21 +39,20 @@ For the driver, we run ``` cargo run -p driver -- --config driver.config.toml --ethrpc $NODE_URL ``` + where one needs to configure driver.config.toml to point to their solver engine. A sample such file can be found [here](https://github.com/cowprotocol/services/blob/main/crates/driver/example.toml). Once the above are set up and running, one can then start testing their solver engine against one of the following orderbooks: -| Orderbook URL | Network | Environment | -|------------------------------------------|--------------|-------------| -| https://barn.api.cow.fi/mainnet/api | Mainnet | Staging | -| https://api.cow.fi/mainnet/api | Mainnet | Production | -| https://barn.api.cow.fi/xdai/api | Gnosis Chain | Staging | -| https://api.cow.fi/xdai/api | Gnosis Chain | Production | -| https://barn.api.cow.fi/arbitrum_one/api | Arbitrum One | Staging | -| https://api.cow.fi/arbitrum_one/api | Arbitrum One | Production | -| https://barn.api.cow.fi/sepolia/api | Sepolia | Staging | -| https://api.cow.fi/sepolia/api | Sepolia | Production | - - - - +| Orderbook URL | Network | Environment | +| ------------------------------------------ | ------------ | ----------- | +| | Mainnet | Staging | +| | Mainnet | Production | +| | Gnosis Chain | Staging | +| | Gnosis Chain | Production | +| | Arbitrum One | Staging | +| | Arbitrum One | Production | +| | Base | Staging | +| | Base | Production | +| | Sepolia | Staging | +| | Sepolia | Production | diff --git a/docs/cow-protocol/tutorials/widget/widget.md b/docs/cow-protocol/tutorials/widget/widget.md index 08415d12..1b807a93 100644 --- a/docs/cow-protocol/tutorials/widget/widget.md +++ b/docs/cow-protocol/tutorials/widget/widget.md @@ -97,6 +97,11 @@ const b: PartnerFee = { [TradeType.LIMIT]: 50, [TradeType.ADVANCED]: 30, }, + [SupportedChainId.BASE]: { + [TradeType.SWAP]: 100, + [TradeType.LIMIT]: 50, + [TradeType.ADVANCED]: 30, + }, [SupportedChainId.GNOSIS_CHAIN]: { [TradeType.SWAP]: 100, [TradeType.LIMIT]: 50, @@ -118,18 +123,21 @@ const c: PartnerFee = { [TradeType.SWAP]: { [SupportedChainId.MAINNET]: '0x...a', [SupportedChainId.ARBITRUM_ONE]: '0x...b', + [SupportedChainId.BASE]: '0x...bb', [SupportedChainId.GNOSIS_CHAIN]: '0x...c', [SupportedChainId.SEPOLIA]: '0x...d', }, [TradeType.LIMIT]: { [SupportedChainId.MAINNET]: '0x...e', [SupportedChainId.ARBITRUM_ONE]: '0x...f', + [SupportedChainId.BASE]: '0x...ff', [SupportedChainId.GNOSIS_CHAIN]: '0x...g', [SupportedChainId.SEPOLIA]: '0x...h', }, [TradeType.ADVANCED]: { [SupportedChainId.MAINNET]: '0x...j', [SupportedChainId.ARBITRUM_ONE]: '0x...i', + [SupportedChainId.BASE]: '0x...ii', [SupportedChainId.GNOSIS_CHAIN]: '0x...k', [SupportedChainId.SEPOLIA]: '0x...l', }, @@ -275,7 +283,7 @@ createCowSwapWidget(document.getElementById('cowswap-widget'), { | `maxHeight` | `number` | --- | The widget automatically adjusts its height depending on the content. By default, the maximum height is `body.offsetHeight`, but it might be customized using the `maxHeight` parameter. | | `appCode` | `string` | --- | The unique identifier of the widget consumer. Please fill the for to let us know a little about you: . | | `provider` | `EthereumProvider` | --- | The Ethereum provider to be used for interacting with a wallet. To connect, for example, to Rabby Wallet or Metamask, just set `window.ethereum`. You also might like to use . | -| `chainId` | `number` | 1 | The blockchain ID on which the trade will take place. Currently supported: 1 (Mainnet), 100 (Gnosis chain), 42161 (Arbitrum one), 11155111 (Sepolia). | +| `chainId` | `number` | 1 | The blockchain ID on which the trade will take place. Currently supported: 1 (Mainnet), 100 (Gnosis chain), 42161 (Arbitrum one), 8453 (Base), 11155111 (Sepolia). | | `tradeType` | `TradeType` | 'swap' | The type of trade. Can be `swap` or `limit` or `advanced`. | | `env` | `CowSwapWidgetEnv` | 'prod' | The environment of the widget (`local` , `prod` , `dev` , `pr`). See [`COWSWAP_URLS`](https://github.com/cowprotocol/cowswap/blob/develop/libs/widget-lib/src/consts.ts) const value for urls. | | `sell` | `TradeAsset` | Same as in swap.cow.fi | An object containing information about the sell asset. Example: `{ asset: 'WBTC', amount: 12 }` or `{ asset: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' }`. | diff --git a/docs/governance/token.md b/docs/governance/token.md index 5b62695c..91f5ecb6 100644 --- a/docs/governance/token.md +++ b/docs/governance/token.md @@ -11,21 +11,24 @@ At the core of CoW Protocol lies the COW token, which serves as a governance tok #### `COW` - Main token | **Chain** | **COW Token Address** | -|--------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| ------------ | --------------------------------------------------------------------------------------------------------------------------------------- | | Ethereum | [`0xDEf1CA1fb7FBcDC777520aa7f396b4E015F497aB`](https://etherscan.io/token/0xDEf1CA1fb7FBcDC777520aa7f396b4E015F497aB) | | Gnosis Chain | [`0x177127622c4a00f3d409b75571e12cb3c8973d3c`](https://gnosisscan.io/token/0x177127622c4a00f3d409b75571e12cb3c8973d3c) [^bridgedTokens] | | Arbitrum One | [`0xcb8b5cd20bdcaea9a010ac1f8d835824f5c87a04`](https://arbiscan.io/token/0xcb8b5cd20bdcaea9a010ac1f8d835824f5c87a04) [^bridgedTokens] | +| Base | [`0xc694a91e6b071bf030a18bd3053a7fe09b6dae69`](https://basescan.org/token/0xc694a91e6b071bf030a18bd3053a7fe09b6dae69) [^bridgedTokens] | -[^bridgedTokens]: These contracts were not developed nor deployed by CoW DAO, however, they are the bridged versions of the canonical token from Ethereum, using the official bridges. - [Omni bridge](https://gnosisscan.io/address/0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d#code) for Gnosis Chain and [Arbitrum One bridge](https://arbiscan.io/address/0x09e9222e96e7b4ae2a407b98d48e330053351eee#code) for Arbitrum one. +[^bridgedTokens]: + These contracts were not developed nor deployed by CoW DAO, however, they are the bridged versions of the canonical token from Ethereum, using the official bridges. + [Omni bridge](https://gnosisscan.io/address/0xf6A78083ca3e2a662D6dd1703c939c8aCE2e268d#code) for Gnosis Chain, [Arbitrum One bridge](https://arbiscan.io/address/0x09e9222e96e7b4ae2a407b98d48e330053351eee#code) for Arbitrum one and [Superbridge](https://basescan.org/tx/0xf76a915b7db279a4e559dbc382462e23cb63615f3d3a87ddf36bd96cedf4ca56) for Base. #### `vCOW` - Vesting token | **Chain** | **vCOW Token Address** | -|--------------|------------------------------------------------------------------------------------------------------------------------| +| ------------ | ---------------------------------------------------------------------------------------------------------------------- | | Ethereum | [`0xD057B63f5E69CF1B929b356b579Cba08D7688048`](https://etherscan.io/token/0xD057B63f5E69CF1B929b356b579Cba08D7688048) | | Gnosis Chain | [`0xc20C9C13E853fc64d054b73fF21d3636B2d97eaB`](https://gnosisscan.io/token/0xc20C9C13E853fc64d054b73fF21d3636B2d97eaB) | | Arbitrum One | N/A | +| Base | N/A | ## Supply & Inflation Schedule @@ -48,17 +51,11 @@ To date, no inflationary measures have been enacted, and the current supply of C The initial distribution of COW tokens was executed with precision, aimed at establishing a balanced and sustainable ecosystem. The allocation of the initial 1 Billion COW token supply is as follows: - **CoW DAO Treasury**: 44.4%. This significant share underscores the community's central role in the protocol's ongoing development and maintenance. - - **Team**: 15%, rewarding the individuals who have built and continue to enhance the CoW Protocol. - - **GnosisDAO**: 10%, recognizing their partnership and collaboration in the CoW Protocol venture. - - **CoWmunity Airdrop**: 10%, ensuring that early users and contributors are acknowledged and retained. - - **CoWmunity Investment**: 10%, as an option to increase early users' stakes on the protocol in exchange for a financial contribution to the protocol, fostering engagement and long-term commitment from the broader CoW Protocol community. - - **CoW Advisory**: 0.6%, rewarding strategic guidance and expertise provided to the protocol. - - **Investment Round**: 10%, providing necessary funding and financial support for the protocol's growth. -The distributed COW tokens in the form of vCOW for certain stakeholders (advisory, team, investment round, GnosisDAO, and community investment options) are subject to a vesting schedule, unlocking linearly over a period of 4 years that starts at the time of deployment. This vesting mechanism is designed to encourage long-term alignment between the stakeholders and the protocol's success, as the vCOW tokens are non-transferrable until they fully vest, ensuring that the interests of the token holders are closely tied to the health and prosperity of the CoW Protocol. \ No newline at end of file +The distributed COW tokens in the form of vCOW for certain stakeholders (advisory, team, investment round, GnosisDAO, and community investment options) are subject to a vesting schedule, unlocking linearly over a period of 4 years that starts at the time of deployment. This vesting mechanism is designed to encourage long-term alignment between the stakeholders and the protocol's success, as the vCOW tokens are non-transferrable until they fully vest, ensuring that the interests of the token holders are closely tied to the health and prosperity of the CoW Protocol.