Skip to content

Commit 13da7d9

Browse files
authored
Merge branch 'dev' into all-contributors/add-juliettech13
2 parents f3e5616 + 85e9c15 commit 13da7d9

File tree

22 files changed

+443
-298
lines changed

22 files changed

+443
-298
lines changed

.all-contributorsrc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11875,6 +11875,24 @@
1187511875
"contributions": [
1187611876
"tutorial"
1187711877
]
11878+
},
11879+
"login": "0xayot",
11880+
"name": "0xayot",
11881+
"avatar_url": "https://avatars.githubusercontent.com/u/101125111?v=4",
11882+
"profile": "https://github.com/0xayot",
11883+
"contributions": [
11884+
"doc"
11885+
]
11886+
},
11887+
{
11888+
"login": "lgaroche",
11889+
"name": "Louis",
11890+
"avatar_url": "https://avatars.githubusercontent.com/u/13414533?v=4",
11891+
"profile": "https://github.com/lgaroche",
11892+
"contributions": [
11893+
"content",
11894+
"bug"
11895+
]
1187811896
}
1187911897
],
1188011898
"contributorsPerLine": 7,

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1820,6 +1820,8 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
18201820
<td align="center" valign="top" width="14.28%"><a href="https://github.com/beetrootkid"><img src="https://avatars.githubusercontent.com/u/34025634?v=4?s=100" width="100px;" alt="kuhant"/><br /><sub><b>kuhant</b></sub></a><br /><a href="#tool-beetrootkid" title="Tools">🔧</a></td>
18211821
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LucasAschenbach"><img src="https://avatars.githubusercontent.com/u/37406743?v=4?s=100" width="100px;" alt="Lucas Aschenbach"/><br /><sub><b>Lucas Aschenbach</b></sub></a><br /><a href="#content-LucasAschenbach" title="Content">🖋</a></td>
18221822
<td align="center" valign="top" width="14.28%"><a href="https://juliet.tech"><img src="https://avatars.githubusercontent.com/u/19226636?v=4?s=100" width="100px;" alt="juliettech"/><br /><sub><b>juliettech</b></sub></a><br /><a href="#tutorial-juliettech13" title="Tutorials">✅</a></td>
1823+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/0xayot"><img src="https://avatars.githubusercontent.com/u/101125111?v=4?s=100" width="100px;" alt="0xayot"/><br /><sub><b>0xayot</b></sub></a><br /><a href="https://github.com/ethereum/ethereum-org-website/commits?author=0xayot" title="Documentation">📖</a></td>
1824+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lgaroche"><img src="https://avatars.githubusercontent.com/u/13414533?v=4?s=100" width="100px;" alt="Louis"/><br /><sub><b>Louis</b></sub></a><br /><a href="#content-lgaroche" title="Content">🖋</a> <a href="https://github.com/ethereum/ethereum-org-website/issues?q=author%3Algaroche" title="Bug reports">🐛</a></td>
18231825
</tr>
18241826
</tbody>
18251827
</table>

public/content/developers/docs/consensus-mechanisms/pos/attestations/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Finally, the validator signs the attestation and broadcasts it to the network.
3232

3333
There is a substantial overhead associated with passing this data around the network for every validator. Therefore, the attestations from individual validators are aggregated within subnets before being broadcast more widely. This includes aggregating signatures together so that an attestation that gets broadcast includes the consensus `data` and a single signature formed by combining the signatures of all the validators that agree with that `data`. This can be checked using `aggregation_bits` because this provides the index of each validator in their committee (whose ID is provided in `data`) which can be used to query individual signatures.
3434

35-
In each epoch a validator in each subnet is selected to be the `aggregator`. The aggregator collects all the attestations it hears about over the gossip network that have equivalent `data` to its own. The sender of each matching attestation is recorded in the `aggregation_bits`. The aggregator then broadcasts the attestation aggregate to the wider network.
35+
In each epoch 16 validators in each subnet are selected to be the `aggregators`. The aggregators collect all the attestations they hear about over the gossip network that have equivalent `data` to their own. The sender of each matching attestation is recorded in the `aggregation_bits`. The aggregators then broadcast the attestation aggregate to the wider network.
3636

3737
When a validator is selected to be a block proposer they package aggregate attestations from the subnets up to the latest slot in the new block.
3838

public/content/developers/docs/data-and-analytics/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ Using [GraphQL](https://graphql.org/), developers can query any of the curated o
4242

4343
To start, visit the [Ethereum quick start guide](https://academy.subquery.network/quickstart/quickstart_chains/ethereum-gravatar.html) to start indexing Ethereum blockchain data in minutes in a local Docker environment for testing before going live on a [SubQuery's managed service](https://managedservice.subquery.network/) or on [SubQuery's decentralised network](https://app.subquery.network/dashboard).
4444

45+
## Ethernow - Mempool Data Program {#ethernow}
46+
[Blocknative](https://www.blocknative.com/) provides open access to its Ethereum historical [mempool data archive](https://www.ethernow.xyz/mempool-data-archive). This enables researchers and community good projects to explore the pre-chain layer of Ethereum Mainnet. The data set is actively maintained and represents the most comprehensive historical record of mempool transaction events within the Ethereum ecosystem. Learn more at [Ethernow](https://www.ethernow.xyz/).
47+
4548
## Further Reading {#further-reading}
4649

4750
- [Graph Network Overview](https://thegraph.com/docs/en/about/network/)

public/content/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,14 @@ Here is the extended code for getting a node in the Merkle Patricia trie:
162162

163163
### Example Trie {#example-trie}
164164

165-
Suppose we want a trie containing four path/value pairs `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`.
165+
Suppose we want a trie containing four path/value pairs `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`.
166166

167167
First, we convert both paths and values to `bytes`. Below, actual byte representations for _paths_ are denoted by `<>`, although _values_ are still shown as strings, denoted by `''`, for easier comprehension (they, too, would actually be `bytes`):
168168

169169
```
170170
<64 6f> : 'verb'
171171
<64 6f 67> : 'puppy'
172-
<64 6f 67 65> : 'coin'
172+
<64 6f 67 65> : 'coins'
173173
<68 6f 72 73 65> : 'stallion'
174174
```
175175

@@ -178,12 +178,12 @@ Now, we build such a trie with the following key/value pairs in the underlying D
178178
```
179179
rootHash: [ <16>, hashA ]
180180
hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ]
181-
hashB: [ <00 6f>, hashD ]
182-
hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ]
183-
hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ]
181+
hashB: [ <00 6f>, hashC ]
182+
hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ]
183+
hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ]
184184
```
185185

186-
When one node is referenced inside another node, what is included is `H(rlp.encode(x))`, where `H(x) = keccak256(x) if len(x) >= 32 else x` and `rlp.encode` is the [RLP](/developers/docs/data-structures-and-encoding/rlp) encoding function.
186+
When one node is referenced inside another node, what is included is `H(rlp.encode(node))`, where `H(x) = keccak256(x) if len(x) >= 32 else x` and `rlp.encode` is the [RLP](/developers/docs/data-structures-and-encoding/rlp) encoding function.
187187

188188
Note that when updating a trie, one needs to store the key/value pair `(keccak256(x), x)` in a persistent lookup table _if_ the newly-created node has length >= 32. However, if the node is shorter than that, one does not need to store anything, since the function f(x) = x is reversible.
189189

public/content/developers/docs/scaling/zk-rollups/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ Projects working on zkEVMs include:
250250
- [What are zero-knowledge rollups?](https://alchemy.com/blog/zero-knowledge-rollups)
251251
- [STARKs vs SNARKs](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/)
252252
- [What is a zkEVM?](https://www.alchemy.com/overviews/zkevm)
253+
- [ZK-EVM types: Ethereum-equivalent, EVM-equivalent, Type 1, Type 4, and other cryptic buzzwords](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4)
253254
- [Intro to zkEVM](https://hackmd.io/@yezhang/S1_KMMbGt)
254255
- [Awesome-zkEVM resources](https://github.com/LuozhuZhang/awesome-zkevm)
255256
- [ZK-SNARKS under the hood](https://vitalik.eth.limo/general/2017/02/01/zk_snarks.html)

public/content/developers/docs/smart-contracts/security/index.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ Decentralized governance can be beneficial, especially because it aligns the int
214214

215215
One way of preventing problems related to on-chain governance is to [use a timelock](https://blog.openzeppelin.com/protect-your-users-with-smart-contract-timelocks/). A timelock prevents a smart contract from executing certain actions until a specific amount of time passes. Other strategies include assigning a “voting weight” to each token based on how long it has been locked up for, or measuring the voting power of an address at a historical period (for example, 2-3 blocks in the past) instead of the current block. Both methods reduce the possibility of quickly amassing voting power to swing on-chain votes.
216216

217-
More on [designing secure governance systems](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/) and [different voting mechanisms in DAOs](https://hackernoon.com/governance-is-the-holy-grail-for-daos).
217+
More on [designing secure governance systems](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/), [different voting mechanisms in DAOs](https://hackernoon.com/governance-is-the-holy-grail-for-daos), and [the common DAO attack vectors leveraging DeFi](https://dacian.me/dao-governance-defi-attacks) in the shared links.
218218

219219
### 8. Reduce complexity in code to a minimum {#reduce-code-complexity}
220220

@@ -468,6 +468,8 @@ If you plan on querying an on-chain oracle for asset prices, consider using one
468468

469469
- **[ABI Encoder](https://abi.hashex.org/)** - _A free online service for encoding your Solidity contract functions and constructor arguments._
470470

471+
- **[Aderyn](https://github.com/Cyfrin/aderyn)** - _Solidity Static Analyzer, traversing the Abstract Syntax Trees (AST) to pinpoint suspected vulnerabilities and printing out issues in an easy-to-consume markdown format._
472+
471473
### Tools for monitoring smart contracts {#smart-contract-monitoring-tools}
472474

473475
- **[OpenZeppelin Defender Sentinels](https://docs.openzeppelin.com/defender/v1/sentinel)** - _A tool for automatically monitoring and responding to events, functions, and transaction parameters on your smart contracts._
@@ -508,7 +510,7 @@ If you plan on querying an on-chain oracle for asset prices, consider using one
508510

509511
- **[CodeHawks](https://codehawks.com/)** - _Competitive audits platform hosting smart contracts auditing competitions for security researchers._
510512

511-
- **[Cyfrin](https://www.cyfrin.io/)** - _Blockchain security and web3 education firm focused on EVM and Vyper based protocols._
513+
- **[Cyfrin](https://cyfrin.io)** - _Web3 security powerhouse, incubating crypto security through products and smart contract auditing services._
512514

513515
- **[ImmuneBytes](https://www.immunebytes.com//smart-contract-audit/)** - _Web3 security firm offering security audits for blockchain systems through a team of experienced auditors and best-in-class tools._
514516

@@ -548,6 +550,8 @@ If you plan on querying an on-chain oracle for asset prices, consider using one
548550

549551
- **[Smart Contract Security Verification Standard](https://github.com/securing/SCSVS)** - _Fourteen-part checklist created to standardize the security of smart contracts for developers, architects, security reviewers and vendors._
550552

553+
- **[Learn Smart Contract Security and Auditing](https://updraft.cyfrin.io/courses/security) - _Ultimate smart contract security and auditing course, created for smart contract developers looking to level up their security best practices and become security researchers._
554+
551555
### Tutorials on smart contract security {#tutorials-on-smart-contract-security}
552556

553557
- [How to write secure smart contracts](/developers/tutorials/secure-development-workflow/)

public/content/translations/es/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,14 @@ Aquí está el código extendido para obtener un nodo en el Merkle Patricia trie
164164

165165
### Ejemplo de Trie {#example-trie}
166166

167-
Supongamos que queremos un trie que contenga cuatro pares ruta/valor `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`.
167+
Supongamos que queremos un trie que contenga cuatro pares ruta/valor `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`.
168168

169169
En primer lugar, convertimos tanto las rutas como los valores en `bytes`. A continuación, las representaciones reales de bytes para _rutas_ se denotan con `<>`, aunque los _valores_ todavía se muestran como cadenas, denotadas por `''`, para facilitar la comprensión (estos también en realidad serían `bytes`):
170170

171171
```
172172
<64 6f> : 'verb'
173173
<64 6f 67> : 'puppy'
174-
<64 6f 67 65> : 'coin'
174+
<64 6f 67 65> : 'coins'
175175
<68 6f 72 73 65> : 'stallion'
176176
```
177177

@@ -180,12 +180,12 @@ Ahora, construimos un trie con los siguientes pares clave/valor en la base de da
180180
```
181181
rootHash: [ <16>, hashA ]
182182
hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ]
183-
hashB: [ <00 6f>, hashD ]
184-
hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ]
185-
hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ]
183+
hashB: [ <00 6f>, hashC ]
184+
hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ]
185+
hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ]
186186
```
187187

188-
Cuando se hace referencia a un nodo dentro de otro nodo, lo que se incluye es `H(rlp.encode(x))`, donde `H(x) = keccak256(x) if len(x) >= 32 else x` y `rlp.encode` es la función de codificación [RLP](/developers/docs/data-structures-and-encoding/rlp).
188+
Cuando se hace referencia a un nodo dentro de otro nodo, lo que se incluye es `H(rlp.encode(node))`, donde `H(x) = keccak256(x) if len(x) >= 32 else x` y `rlp.encode` es la función de codificación [RLP](/developers/docs/data-structures-and-encoding/rlp).
189189

190190
Tenga en cuenta que al actualizar un trie, es necesario almacenar el par clave/valor `(keccak256(x), x)` en una tabla de búsqueda persistente _si_ el nodo recién creado tiene una longitud >= 32. Sin embargo, si el nodo es más corto, no es necesario almacenar nada, ya que la función f(x) = x es reversible.
191191

public/content/translations/fr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,14 @@ Voici le code étendu pour obtenir un nœud dans l'arbre de Merkle Patricia :
160160

161161
### Exemple d'arbre {#example-trie}
162162

163-
Supposons que nous voulions un tableau contenant quatre couples chemin/valeur `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`.
163+
Supposons que nous voulions un tableau contenant quatre couples chemin/valeur `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`.
164164

165165
Tout d'abord, nous convertissons les chemins et les valeurs en `bytes` (octets). Ci-dessous, les représentations réelles d'octets pour les _chemins_ sont désignées par `<>`, bien que les _valeurs_ soient toujours représentées sous forme de chaînes, désignées par `''`, pour une compréhension plus facile (elles aussi seraient en fait des `octets`) :
166166

167167
```
168168
<64 6f> : 'verb'
169169
<64 6f 67> : 'puppy'
170-
<64 6f 67 65> : 'coin'
170+
<64 6f 67 65> : 'coins'
171171
<68 6f 72 73 65> : 'stallion'
172172
```
173173

@@ -176,12 +176,12 @@ Nous construisons un tel arbre avec les paires clé/valeur suivantes dans la bas
176176
```
177177
rootHash: [ <16>, hashA ]
178178
hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ]
179-
hashB: [ <00 6f>, hashD ]
180-
hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ]
181-
hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ]
179+
hashB: [ <00 6f>, hashC ]
180+
hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ]
181+
hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ]
182182
```
183183

184-
Lorsqu'un nœud est référencé à l'intérieur d'un autre nœud, ce qui est inclus est `H(rlp.encode(x))`, où `H(x) = keccak256(x) if len(x) >= 32 else x` et `rlp.encode` est la fonction d'encodage [RLP](/developers/docs/data-structures-and-encoding/rlp).
184+
Lorsqu'un nœud est référencé à l'intérieur d'un autre nœud, ce qui est inclus est `H(rlp.encode(node))`, où `H(x) = keccak256(x) if len(x) >= 32 else x` et `rlp.encode` est la fonction d'encodage [RLP](/developers/docs/data-structures-and-encoding/rlp).
185185

186186
Notez que lors de la mise à jour d'un arbre, on doit stocker la paire clé/valeur `(keccak256(x), x)`dans une table de consultation persistante _si_ le nœud nouvellement créé a une longueur >= 32. Toutefois, si le nœud est plus court que cela, il n'est pas nécessaire de stocker quoi que ce soit, puisque la fonction f(x) = x est réversible.
187187

public/content/translations/it/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,14 @@ Ecco il codice esteso per ottenere un nodo nel trie di Patricia Merkle:
160160

161161
### Esempio di Trie {#example-trie}
162162

163-
Supponiamo di volere un trie contenente quattro coppie percorso/valore `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coin')`, `('horse', 'stallion')`.
163+
Supponiamo di volere un trie contenente quattro coppie percorso/valore `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`.
164164

165165
Per prima cosa, convertiamo sia i percorsi che i valori in `bytes`. Di seguito, le rappresentazioni reali dei byte per i _percorsi_ sono denotate da `<>`, sebbene i _valori_ siano mostrati ancora come stringhe, denotate da `"`, per maggiore facilità di comprensione (anch'essi, sarebbero in realtà `bytes`):
166166

167167
```
168168
<64 6f> : 'verb'
169169
<64 6f 67> : 'puppy'
170-
<64 6f 67 65> : 'coin'
170+
<64 6f 67 65> : 'coins'
171171
<68 6f 72 73 65> : 'stallion'
172172
```
173173

@@ -176,12 +176,12 @@ Ora, costruiamo un trie di questo tipo con le seguenti coppie chiave/valore nel
176176
```
177177
rootHash: [ <16>, hashA ]
178178
hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'stallion' ], <>, <>, <>, <>, <>, <>, <>, <> ]
179-
hashB: [ <00 6f>, hashD ]
180-
hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ]
181-
hashE: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coin' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ]
179+
hashB: [ <00 6f>, hashC ]
180+
hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ]
181+
hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'coins' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] ]
182182
```
183183

184-
Quando in un nodo si fa riferimento a un altro nodo, viene inserito `H(rlp.encode(x))`, dove `H(x) = keccak256(x) if len(x) >= 32 else x` e `rlp.encode` è la funzione di codifica [RLP](/developers/docs/data-structures-and-encoding/rlp).
184+
Quando in un nodo si fa riferimento a un altro nodo, viene inserito `H(rlp.encode(node))`, dove `H(x) = keccak256(x) if len(x) >= 32 else x` e `rlp.encode` è la funzione di codifica [RLP](/developers/docs/data-structures-and-encoding/rlp).
185185

186186
Nota che, aggiornando un trie, si deve memorizzare la coppia chiave/valore `(keccak256(x), x)` in una tabella di ricerca persistente _se_ il nodo appena creato ha una lunghezza >= 32. Se invece il nodo è inferiore a questo valore, non è necessario memorizzare nulla, poiché la funzione f(x) = x è reversibile.
187187

0 commit comments

Comments
 (0)