Skip to content

Commit 61aef20

Browse files
committed
Merge branch 'dev' into homepage
2 parents 8a1be75 + 69cdf4e commit 61aef20

File tree

18 files changed

+461
-94
lines changed

18 files changed

+461
-94
lines changed

.all-contributorsrc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12434,6 +12434,15 @@
1243412434
"contributions": [
1243512435
"ideas"
1243612436
]
12437+
},
12438+
{
12439+
"login": "vvvvvv1vvvvvv",
12440+
"name": "vvvvvv1vvvvvv",
12441+
"avatar_url": "https://avatars.githubusercontent.com/u/86296331?v=4",
12442+
"profile": "https://github.com/vvvvvv1vvvvvv",
12443+
"contributions": [
12444+
"doc"
12445+
]
1243712446
}
1243812447
],
1243912448
"contributorsPerLine": 7,

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1901,6 +1901,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
19011901
<td align="center" valign="top" width="14.28%"><a href="https://github.com/panditdhamdhere"><img src="https://avatars.githubusercontent.com/u/85685981?v=4?s=100" width="100px;" alt="Pandit Dhamdhere"/><br /><sub><b>Pandit Dhamdhere</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=panditdhamdhere" title="Code">💻</a></td>
19021902
<td align="center" valign="top" width="14.28%"><a href="http://linkedin.com/in/fmarcelo"><img src="https://avatars.githubusercontent.com/u/11818521?v=4?s=100" width="100px;" alt="M@rC3L0"/><br /><sub><b>M@rC3L0</b></sub></a><br /><a href="#ideas-ferreiramarcelo" title="Ideas, Planning, & Feedback">🤔</a></td>
19031903
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Refdeveloper"><img src="https://avatars.githubusercontent.com/u/87125773?v=4?s=100" width="100px;" alt="DevOFtoken"/><br /><sub><b>DevOFtoken</b></sub></a><br /><a href="#ideas-Refdeveloper" title="Ideas, Planning, & Feedback">🤔</a></td>
1904+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/vvvvvv1vvvvvv"><img src="https://avatars.githubusercontent.com/u/86296331?v=4?s=100" width="100px;" alt="vvvvvv1vvvvvv"/><br /><sub><b>vvvvvv1vvvvvv</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=vvvvvv1vvvvvv" title="Documentation">📖</a></td>
19041905
</tr>
19051906
</tbody>
19061907
</table>

public/content/community/support/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,6 @@ Most of the teams building Ethereum clients also have dedicated, public-facing,
100100
- [Lighthouse](https://discord.gg/cyAszAh)
101101
- [Teku](https://discord.gg/7hPv2T6)
102102
- [Lodestar](https://discord.gg/aMxzVcr)
103+
- [Grandine](https://discord.gg/H9XCdUSyZd)
103104

104105
You can also [learn how to run a node here](/developers/docs/nodes-and-clients/run-a-node/).

public/content/contributing/adding-staking-products/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ For any custom software or smart contracts involved:
8787

8888
For software products related to node or client setup, management or migration:
8989

90-
**Which consensus layer clients (i.e. Lighthouse, Teku, Nimbus, Prysm) are supported?**
90+
**Which consensus layer clients (i.e. Lighthouse, Teku, Nimbus, Prysm, Grandine) are supported?**
9191

9292
- Which clients are supported? Can the user choose?
9393
- This is used to determine the products "multi-client" score.

public/content/developers/docs/nodes-and-clients/index.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,13 @@ Learn more about it by reading its [documentation](https://github.com/ethereumjs
194194
There are multiple consensus clients (previously known as 'Eth2' clients) to support the [consensus upgrades](/roadmap/beacon-chain/). They are responsible for all consensus-related logic including the fork-choice algorithm, processing attestations and managing [proof-of-stake](/developers/docs/consensus-mechanisms/pos) rewards and penalties.
195195

196196
| Client | Language | Operating systems | Networks |
197-
| ------------------------------------------------------------- | ---------- | --------------------- | ----------------------------------------------------------------- |
197+
| ------------------------------------------------------------- | ---------- | --------------------- | ----------------------------------------------------------------- | |
198198
| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Beacon Chain, Goerli, Pyrmont, Sepolia, Ropsten, and more |
199199
| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, Ropsten, and more |
200200
| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, Ropsten, and more |
201201
| [Prysm](https://docs.prylabs.network/docs/getting-started/) | Go | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten, and more |
202202
| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Beacon Chain, Gnosis, Goerli, Sepolia, Ropsten, and more |
203+
| [Grandine](https://docs.grandine.io/) (beta) | Rust | Linux, Windows, macOS | Beacon Chain, Goerli, Sepolia, and more
203204

204205
### Lighthouse {#lighthouse}
205206

@@ -233,6 +234,12 @@ Teku offers very flexible deployment options. The beacon node and validator clie
233234

234235
Teku is written in Java and is Apache 2.0 licensed. It is developed by the Protocols team at ConsenSys that is also responsible for Besu and Web3Signer. Learn more in [Teku docs](https://docs.teku.consensys.net/en/latest/).
235236

237+
### Grandine {#grandine}
238+
239+
Grandine is a consensus client implementation, written in Rust under the GPL-3.0 license. It is maintained by the Grandine Core Team and is fast, high-performance and lightweight. It fits a wide range of stakers from solo stakers running on low-resource devices such as Raspberry Pi to large institutional stakers running tens of thousands of validators.
240+
241+
Documentation can be found in the [Grandine Book](https://docs.grandine.io/)
242+
236243
## Synchronization modes {#sync-modes}
237244

238245
To follow and verify current data in the network, the Ethereum client needs to sync with the latest network state. This is done by downloading data from peers, cryptographically verifying their integrity, and building a local blockchain database.

public/content/developers/docs/storage/index.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Platforms with contract-based persistence:
4545
- [Filecoin](https://docs.filecoin.io/about-filecoin/what-is-filecoin/)
4646
- [Skynet](https://siasky.net/)
4747
- [Storj](https://storj.io/)
48-
- [0Chain](https://0chain.net/)
48+
- [Züs](https://zus.network/)
4949
- [Crust Network](https://crust.network)
5050
- [Swarm](https://www.ethswarm.org/)
5151
- [4EVERLAND](https://www.4everland.org/)
@@ -75,7 +75,7 @@ One of the most popular ways to make sure data is retained, is to use some type
7575

7676
Types of dStorage with a challenge mechanism:
7777

78-
- 0Chain
78+
- Züs
7979
- Skynet
8080
- Arweave
8181
- Filecoin
@@ -88,7 +88,6 @@ There aren't great tools to measure the level of decentralization of platforms,
8888

8989
Decentralized tools without KYC:
9090

91-
- 0Chain (implementing a non-KYC edition)
9291
- Skynet
9392
- Arweave
9493
- Filecoin
@@ -110,7 +109,7 @@ Proof-of-stake based:
110109

111110
- Ethereum
112111
- Filecoin
113-
- 0Chain
112+
- Züs
114113
- Crust Network
115114

116115
## Related tools {#related-tools}
@@ -145,10 +144,10 @@ Proof-of-stake based:
145144
- [Documentation](https://docs.arweave.org/info/)
146145
- [Arweave](https://github.com/ArweaveTeam/arweave/)
147146

148-
**0chain - _0Chain is a proof-of-stake dStorage platform with sharding and blobbers._**
147+
**Züs - _Züs is a proof-of-stake dStorage platform with sharding and blobbers._**
149148

150-
- [0Chain.net](https://0chain.net/)
151-
- [Documentation](https://docs.0chain.net/0chain/)
149+
- [zus.network](https://zus.network/)
150+
- [Documentation](https://0chaindocs.gitbook.io/zus-docs)
152151
- [GitHub](https://github.com/0chain/)
153152

154153
**Crust Network - _Crust is a dStorage platform on top of the IPFS._**

public/content/governance/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ There are various stakeholders in the [Ethereum community](/community/), each pl
4848
- **Node Operators**: these people run nodes that propagate blocks and transactions, rejecting any invalid transaction or block that they come across. [More on nodes](/developers/docs/nodes-and-clients/).
4949
- **EIP Authors**: these people propose changes to the Ethereum protocol, in the form of Ethereum Improvement Proposals (EIPs). [More on EIPs](/eips/).
5050
- **Validators**: these people run nodes that can add new blocks to the Ethereum blockchain.
51-
- **Protocol Developers** (a.k.a. "Core Developers" ): these people maintain the various Ethereum implementations (e.g. go-ethereum, Nethermind, Besu, Erigon, Reth at the execution layer or Prysm, Lighthouse, Nimbus, Teku, Lodestar at the consensus layer). [More on Ethereum clients](/developers/docs/nodes-and-clients/).
51+
- **Protocol Developers** (a.k.a. "Core Developers" ): these people maintain the various Ethereum implementations (e.g. go-ethereum, Nethermind, Besu, Erigon, Reth at the execution layer or Prysm, Lighthouse, Nimbus, Teku, Lodestar, Grandine at the consensus layer). [More on Ethereum clients](/developers/docs/nodes-and-clients/).
5252

5353
_Note: any individual can be part of multiple of these groups (e.g. a protocol developer could champion an EIP, and run a beacon chain validator, and use DeFi applications). For conceptual clarity, it is easiest to distinguish between them, though._
5454

src/components/FindWallet/MobileFiltersMenu.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ import WalletFilterSidebar, {
2626
type MobileFiltersMenuProps = WalletFilterSidebarProps & {
2727
showMobileSidebar: boolean
2828
setFilters: React.Dispatch<React.SetStateAction<WalletFilter>>
29-
selectedPersona: number
30-
setSelectedPersona: React.Dispatch<React.SetStateAction<number>>
29+
selectedPersona: number[]
30+
setSelectedPersona: React.Dispatch<React.SetStateAction<number[]>>
3131
onOpen: () => void
3232
onClose: () => void
3333
totalWallets: number
@@ -89,6 +89,7 @@ export const MobileFiltersMenu = ({
8989
selectedPersona={selectedPersona}
9090
setSelectedPersona={setSelectedPersona}
9191
showMobileSidebar={showMobileSidebar}
92+
resetWalletFilter={resetWalletFilter}
9293
/>
9394
</Box>
9495

src/components/FindWallet/WalletFilterPersona.tsx

Lines changed: 66 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MdCircle } from "react-icons/md"
1+
import { MdCheckBox } from "react-icons/md"
22
import {
33
Box,
44
Flex,
@@ -19,9 +19,32 @@ import { useWalletPersonas } from "../../hooks/useWalletPersonas"
1919
type WalletFilterPersonaProps = {
2020
resetFilters: () => void
2121
setFilters: React.Dispatch<React.SetStateAction<WalletFilter>>
22-
selectedPersona: number
23-
setSelectedPersona: React.Dispatch<React.SetStateAction<number>>
22+
selectedPersona: number[]
23+
setSelectedPersona: React.Dispatch<React.SetStateAction<number[]>>
2424
showMobileSidebar: boolean
25+
resetWalletFilter: React.MutableRefObject<() => void>
26+
}
27+
28+
const computeFilters = (
29+
selectedPersonas: number[],
30+
personas: WalletPersonas[]
31+
) => {
32+
if (selectedPersonas.length === 0) return {}
33+
34+
const firstPersona = personas[selectedPersonas[0]]
35+
const initialFilters = firstPersona.presetFilters
36+
return selectedPersonas
37+
.slice(1)
38+
.reduce((filters: { [key: string]: boolean }, personaId) => {
39+
const persona = personas[personaId]
40+
if (!persona) return filters
41+
42+
return Object.fromEntries(
43+
Object.entries(filters).map(([key, value]) => {
44+
return [key, value || persona.presetFilters[key]]
45+
})
46+
)
47+
}, initialFilters)
2548
}
2649

2750
const WalletFilterPersona = ({
@@ -30,26 +53,50 @@ const WalletFilterPersona = ({
3053
selectedPersona,
3154
setSelectedPersona,
3255
showMobileSidebar,
56+
resetWalletFilter,
3357
}: WalletFilterPersonaProps) => {
3458
const personas = useWalletPersonas()
3559
const handleSelectPersona = (idx: number, persona: WalletPersonas) => {
36-
if (idx === selectedPersona) {
37-
resetFilters()
38-
60+
let newSelectedPersonas
61+
if (selectedPersona.includes(idx)) {
62+
newSelectedPersonas = selectedPersona.filter((persona) => persona !== idx)
3963
trackCustomEvent({
4064
eventCategory: "UserPersona",
4165
eventAction: `${persona.title}`,
4266
eventName: `${persona.title} false`,
4367
})
68+
setSelectedPersona(newSelectedPersonas)
69+
if (newSelectedPersonas.length < 1) {
70+
resetFilters()
71+
resetWalletFilter.current()
72+
} else {
73+
const newFilters = computeFilters(newSelectedPersonas, personas)
74+
setFilters((prevFilters) => {
75+
const combinedFilters = Object.fromEntries(
76+
Object.entries(prevFilters).map(([key]) => {
77+
return [key, newFilters[key]]
78+
})
79+
)
80+
return combinedFilters as WalletFilter
81+
})
82+
}
4483
} else {
45-
setSelectedPersona(idx)
46-
setFilters(persona.presetFilters)
47-
84+
newSelectedPersonas = [...selectedPersona, idx]
4885
trackCustomEvent({
4986
eventCategory: "UserPersona",
5087
eventAction: `${persona.title}`,
5188
eventName: `${persona.title} true`,
5289
})
90+
setSelectedPersona(newSelectedPersonas)
91+
const newFilters = computeFilters(newSelectedPersonas, personas)
92+
setFilters((prevFilters) => {
93+
const combinedFilters = Object.fromEntries(
94+
Object.entries(prevFilters).map(([key, value]) => {
95+
return [key, value || newFilters[key]]
96+
})
97+
)
98+
return combinedFilters as WalletFilter
99+
})
53100
}
54101
}
55102

@@ -95,16 +142,19 @@ const WalletFilterPersona = ({
95142
<Flex gap={2} mb={showMobileSidebar ? 0 : 1} px={1.5}>
96143
<Box role="radio" aria-label={`${persona.title} filter`}>
97144
<Icon
98-
as={MdCircle}
99-
borderRadius="full"
145+
as={MdCheckBox}
100146
boxSize={2.5}
101147
my={0}
102148
mx={1}
103149
fill={
104-
selectedPersona === idx ? "primary.base" : "transparent"
150+
selectedPersona.includes(idx)
151+
? "primary.base"
152+
: "transparent"
105153
}
106154
background={
107-
selectedPersona === idx ? "primary.base" : "transparent"
155+
selectedPersona.includes(idx)
156+
? "primary.base"
157+
: "transparent"
108158
}
109159
outline="1.5px solid"
110160
outlineColor="primary.base"
@@ -135,7 +185,9 @@ const WalletFilterPersona = ({
135185
{!showMobileSidebar && (
136186
<Text
137187
p="0.4rem"
138-
color={selectedPersona === idx ? "body.base" : "body.medium"}
188+
color={
189+
selectedPersona.includes(idx) ? "body.base" : "body.medium"
190+
}
139191
fontSize="sm"
140192
fontWeight="normal"
141193
transition="0.5s all"

src/components/FindWallet/WalletFilterSidebar.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export type WalletFilterSidebarProps = Omit<BoxProps, "children"> & {
1818
filters: WalletFilter
1919
resetWalletFilter: React.MutableRefObject<() => void>
2020
resetFilters: () => void
21+
setFilters: React.Dispatch<React.SetStateAction<WalletFilter>>
22+
selectedPersona: number[]
23+
setSelectedPersona: React.Dispatch<React.SetStateAction<number[]>>
2124
updateFilterOption: (key: unknown) => void
2225
updateFilterOptions: (keys: unknown, value: unknown) => void
2326
showMobileSidebar?: boolean

0 commit comments

Comments
 (0)