diff --git a/docs/cow-protocol/reference/contracts/core/README.mdx b/docs/cow-protocol/reference/contracts/core/README.mdx index a4a28369c..47527bd8f 100644 --- a/docs/cow-protocol/reference/contracts/core/README.mdx +++ b/docs/cow-protocol/reference/contracts/core/README.mdx @@ -44,9 +44,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`
{explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","Plasma","Lens","Linea","BNB","Sepolia"], "0x9008D19f58AAbD9eD0D60971565AA8510560ab41", {separator:
})} | -| [`GPv2AllowListAuthentication`](core/allowlist)
Upgradeable: Yes ⚠️
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2AllowListAuthentication.sol) | `0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE`
{explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","Plasma","Lens","Linea","BNB","Sepolia"], "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE", {separator:
})} | -| [`GPv2VaultRelayer`](core/vault-relayer)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2VaultRelayer.sol) | `0xC92E8bdf79f0507f65a392b0ab4667716BFE0110`
{explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","Plasma","Lens","Linea","BNB","Sepolia"], "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110", {separator:
})} | +| [`GPv2Settlement`](core/settlement)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2Settlement.sol) | `0x9008D19f58AAbD9eD0D60971565AA8510560ab41`
{explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","Plasma","Lens","Linea","BNB","Ink","Sepolia"], "0x9008D19f58AAbD9eD0D60971565AA8510560ab41", {separator:
})} | +| [`GPv2AllowListAuthentication`](core/allowlist)
Upgradeable: Yes ⚠️
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2AllowListAuthentication.sol) | `0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE`
{explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","Plasma","Lens","Linea","BNB","Ink","Sepolia"], "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE", {separator:
})} | +| [`GPv2VaultRelayer`](core/vault-relayer)
Upgradeable: No ❎
[GitHub](https://github.com/cowprotocol/contracts/blob/main/src/contracts/GPv2VaultRelayer.sol) | `0xC92E8bdf79f0507f65a392b0ab4667716BFE0110`
{explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","Plasma","Lens","Linea","BNB","Ink","Sepolia"], "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110", {separator:
})} |
Upgradeable allow-list diff --git a/docs/cow-protocol/reference/contracts/periphery/README.mdx b/docs/cow-protocol/reference/contracts/periphery/README.mdx index 0bccf89dd..7bc7319ef 100644 --- a/docs/cow-protocol/reference/contracts/periphery/README.mdx +++ b/docs/cow-protocol/reference/contracts/periphery/README.mdx @@ -14,8 +14,8 @@ Peripheral contracts are those that are not necessary for CoW Protocol to functi | Environment | Address | Networks | | ------------------------ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Production (most chains) | `0xbA3cB449bD2B4ADddBc894D8697F5170800EAdeC` | {explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","BNB","Linea","Plasma","Sepolia"], "0xbA3cB449bD2B4ADddBc894D8697F5170800EAdeC")}, but not Lens! | -| Staging (most chains) | `0x04501b9b1D52e67f6862d157E00D13419D2D6E95` | {explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","BNB","Linea","Plasma","Sepolia"], "0x04501b9b1D52e67f6862d157E00D13419D2D6E95")}, but not Lens! | +| Production (most chains) | `0xbA3cB449bD2B4ADddBc894D8697F5170800EAdeC` | {explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","BNB","Linea","Plasma","Ink","Sepolia"], "0xbA3cB449bD2B4ADddBc894D8697F5170800EAdeC")}, but not Lens! | +| Staging (most chains) | `0x04501b9b1D52e67f6862d157E00D13419D2D6E95` | {explorerLinks(["Ethereum","Gnosis","Arbitrum One","Base","Avalanche","Polygon","BNB","Linea","Plasma","Ink","Sepolia"], "0x04501b9b1D52e67f6862d157E00D13419D2D6E95")}, but not Lens! | | Production (Lens) | `0x5A5b8aE7a0b4C0EAf453d10DCcfbA413f07ebdC2` | {explorerLinks("Lens", "0x5A5b8aE7a0b4C0EAf453d10DCcfbA413f07ebdC2")} only! | | Staging (Lens) | `0xFb337f8a725A142f65fb9ff4902d41cc901de222` | {explorerLinks("Lens", "0xFb337f8a725A142f65fb9ff4902d41cc901de222")} only! | @@ -43,18 +43,19 @@ You should not assume that the HooksTrampoline contract address will remain fixe #### Networks {explorerLinks([ -"Ethereum", -"Sepolia", -"Gnosis", -"Base", "Arbitrum One", "Avalanche", -"Polygon", -"Lens", +"Base", "BNB", +"Ethereum", +"Gnosis", +"Ink" +"Lens", "Linea", -"Plasma", "Optimism" +"Plasma", +"Polygon", +"Sepolia", ], "0x60Bf78233f48eC42eE3F101b9a05eC7878728006")} @@ -69,16 +70,17 @@ You should not assume that the HooksTrampoline contract address will remain fixe **Networks**: {explorerLinks([ -"Ethereum", -"Gnosis", "Arbitrum One", -"Base", "Avalanche", -"Polygon", -"Lens", +"Base", "BNB", +"Ethereum", +"Gnosis", +"Ink", +"Lens", "Linea", "Plasma", +"Polygon", "Sepolia", ], "0xfdaFc9d1902f4e0b84f65F49f244b32b31013b74")} diff --git a/docs/cow-protocol/reference/core/auctions/rewards.md b/docs/cow-protocol/reference/core/auctions/rewards.md index 9cecd290c..2d51741ca 100644 --- a/docs/cow-protocol/reference/core/auctions/rewards.md +++ b/docs/cow-protocol/reference/core/auctions/rewards.md @@ -39,7 +39,7 @@ 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))$$, where $$c_u$$ is the protocol fee (excluding partner fees) that the protocol earned from the trades in all solutions supplied by the solver in that auction and $$c_l$$ is chain-specific, determined by the following values: -- Ethereum mainnet, Arbitrum, and Base chain: $$0.010 \;\textrm{ETH}$$ +- Ethereum mainnet, Arbitrum, Base and Ink chain: $$0.010 \;\textrm{ETH}$$ - Gnosis Chain: $$10 \;\textrm{xDAI}$$ - Avalanche: $$0.3 \;\textrm{AVAX}$$ - Polygon: $$30 \;\textrm{POL}$$ @@ -97,5 +97,6 @@ The current rewards for eligible quotes are as follows: - BNB Chain: $$\min\{0.001 ~\textrm{BNB}, 6 ~\textrm{COW}\}$$ - Linea: $$\min\{0.00003 ~\textrm{ETH}, 6 ~\textrm{COW}\}$$. - Plasma: $$\min\{0.6 ~\textrm{XPL}, 6 ~\textrm{COW}\}$$. +- Ink: $$\min\{X.X ~\textrm{XPL}, 6 ~\textrm{COW}\}$$. where, again, the conversion from native token to COW is done by using an up-to-date price (specifically, the average native token/COW Dune prices of the past 24h before the payout are used to determine these exchange rates). diff --git a/docs/cow-protocol/reference/core/signing_schemes.mdx b/docs/cow-protocol/reference/core/signing_schemes.mdx index cce5f728f..002b444fc 100644 --- a/docs/cow-protocol/reference/core/signing_schemes.mdx +++ b/docs/cow-protocol/reference/core/signing_schemes.mdx @@ -37,16 +37,17 @@ The actual domain separator is the result of hashing the previous `EIP712Domain` For convenience, the domain separator is exposed as a public view function in the settlement contract: {explorerLinks([ -"Ethereum", -"Gnosis", "Arbitrum One", -"Base", "Avalanche", -"Polygon", -"Lens", +"Base", "BNB", +"Ethereum", +"Gnosis", +"Ink", +"Lens", "Linea", "Plasma", +"Polygon", "Sepolia", ], "0x9008D19f58AAbD9eD0D60971565AA8510560ab41", {separator:
, urlTrailing: "#readContract#F2"})} @@ -136,6 +137,7 @@ For convenience, we also deployed a small helper contract that makes it easy to - BNB N/A - Linea N/A - Plasma N/A +- Ink N/A - {explorerLinks("Sepolia", "0x59Ffd6c1823F212D49887230f155A35451FdDbfa", {urlTrailing: "#readContract#F1"})} ## Supported schemes diff --git a/docs/cow-protocol/tutorials/cow-swap/custom-links.md b/docs/cow-protocol/tutorials/cow-swap/custom-links.md index 6846a4494..e5a6eb9bc 100644 --- a/docs/cow-protocol/tutorials/cow-swap/custom-links.md +++ b/docs/cow-protocol/tutorials/cow-swap/custom-links.md @@ -78,6 +78,7 @@ Native and wrapped tokens per chain: - BNB: [`WBNB`](https://bscscan.com/address/0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c) - wrapped `BNB` - Linea: [`WETH`](https://lineascan.build/token/0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f) - wrapped `ETH` - Plasma: [`WXPL`](https://plasmascan.to/token/0x6100E367285b01F48D07953803A2d8dCA5D19873) - wrapped `XPL` +- Ink: [`WETH`](https://explorer.inkonchain.com/token/0x4200000000000000000000000000000000000006) - wrapped `ETH` - Sepolia: [`WETH`](https://sepolia.etherscan.io/address/0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14) - wrapped `ETH` ::: diff --git a/docs/cow-protocol/tutorials/solvers/local_test.md b/docs/cow-protocol/tutorials/solvers/local_test.md index 05f254230..cd879603b 100644 --- a/docs/cow-protocol/tutorials/solvers/local_test.md +++ b/docs/cow-protocol/tutorials/solvers/local_test.md @@ -66,5 +66,7 @@ Once the above are set up and running, one can then start testing their solver e | | Linea | Production | | | Plasma | Staging | | | Plasma | Production | +| | Ink | Staging | +| | Ink | Production | | | Sepolia | Staging | | | Sepolia | Production | diff --git a/docs/governance/token.md b/docs/governance/token.md index b16f01a77..388bba8f5 100644 --- a/docs/governance/token.md +++ b/docs/governance/token.md @@ -22,6 +22,7 @@ At the core of CoW Protocol lies the COW token, which serves as a governance tok | BNB | N/A | | Linea | N/A | | Plasma | N/A | +| Ink | N/A | [^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. @@ -41,6 +42,7 @@ At the core of CoW Protocol lies the COW token, which serves as a governance tok | BNB | N/A | | Linea | N/A | | Plasma | N/A | +| Ink | N/A | ## Supply & Inflation Schedule diff --git a/src/components/contract-addresses/index.tsx b/src/components/contract-addresses/index.tsx index dd7d7e7ed..6874cc07d 100644 --- a/src/components/contract-addresses/index.tsx +++ b/src/components/contract-addresses/index.tsx @@ -14,8 +14,11 @@ export const explorerByChain = { "Linea": "https://lineascan.build", "Plasma": "https://plasmascan.to", "Optimism": "https://optimistic.etherscan.io", + "Ink": "https://explorer.inkonchain.com", } as const; +export type ChainName = keyof typeof explorerByChain; + interface ExplorerUrlOptions { /** * Which parameters to append after the Explorer URL. For example, #code @@ -23,7 +26,7 @@ interface ExplorerUrlOptions { */ urlTrailing?: string | undefined, } -export function explorerUrl(chain: string, address: string, params?: ExplorerUrlOptions) { +export function explorerUrl(chain: ChainName, address: string, params?: ExplorerUrlOptions) { const urlTrailing = params?.urlTrailing ?? ""; if (!(chain in explorerByChain)) { throw new Error(`Explorer URL for chain ${chain} is not known`); @@ -49,8 +52,8 @@ interface ExplorerLinksOptions { * chains separated by a comma. All chain names are links to that chain's * explorer for the given address. */ -export function explorerLinks(chains: string[] | string, address: string, options?: ExplorerLinksOptions): React.ReactNode { - chains = (typeof chains == "string") ? [chains] : chains; +export function explorerLinks(chainsParam: ChainName[] | ChainName, address: string, options?: ExplorerLinksOptions): React.ReactNode { + const chains = asArray(chainsParam); const separator = options?.separator ?? ", "; const urlTrailing = options?.urlTrailing ?? "#code"; return chains.reduce( @@ -63,3 +66,7 @@ export function explorerLinks(chains: string[] | string, address: string, option } , []); } + +function asArray(arr: T | T[]): T[] { + return Array.isArray(arr) ? arr : [arr]; +} \ No newline at end of file