diff --git a/.fleek.json b/.fleek.json
index 0dae6993b..5dadc440c 100644
--- a/.fleek.json
+++ b/.fleek.json
@@ -1,6 +1,6 @@
{
"build": {
- "image": "hugomrdias/puppeteer",
+ "image": "node:20.2",
"command": "npm install && npm run build",
"publicDir": "public"
}
diff --git a/.gitignore b/.gitignore
index 57dea231d..b82708cff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,8 @@ yarn.lock
package-lock.json
node_modules
resources
-static/_gen
data/toc.json
api/dist
api/worker
+.hugo_build.lock
+assets/jsconfig.json
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 000000000..6ed5da955
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+v20.2.0
diff --git a/api/index.js b/api/index.js
index 4fb6e7538..a7868699e 100644
--- a/api/index.js
+++ b/api/index.js
@@ -31,21 +31,41 @@ async function handleRequest(event) {
async function cov(event) {
const url = new URL(event.request.url)
// https://github.com/filecoin-project/lotus
- const repo = url.searchParams.get('repo').split('/').slice(3).join('/')
- const data = await get(event, {
- url: `https://codecov.io/api/gh/${repo}`,
+ const [owner, repo] = url.searchParams.get('repo').split('/').slice(3)
+ const headers = {
+ 'User-Agent': 'ianconsolata',
+ Accept: 'application/json',
+ Authorization: `Bearer ${CODECOV_TOKEN}`,
+ }
+ const repo_resp = await get(event, {
+ url: `https://api.codecov.io/api/v2/github/${owner}/repos/${repo}/`,
transform: (data) => {
const out = {
- cov: dlv(data, 'commit.totals.c', 0),
- ci: dlv(data, 'commit.ci_passed', false),
- repo: dlv(data, 'repo.name', 'N/A'),
- org: dlv(data, 'owner.username', 'N/A'),
- lang: dlv(data, 'repo.language', 'N/A'),
+ branch: dlv(data, 'branch', 'master'),
+ lang: dlv(data, 'language', 'N/A'),
}
return out
},
+ headers,
})
- return data
+ const repo_data = await repo_resp.json()
+
+ const cov_data = await get(event, {
+ url: `https://api.codecov.io/api/v2/github/${owner}/repos/${repo}/branches/${repo_data.branch}/`,
+ transform: (data) => {
+ const out = {
+ cov: dlv(data, 'head_commit.totals.coverage', 0),
+ ci: dlv(data, 'head_commit.ci_passed', false),
+ repo: repo,
+ org: owner,
+ lang: repo_data.lang,
+ branch: repo_data.branch,
+ }
+ return out
+ },
+ headers,
+ })
+ return cov_data
}
async function github(event) {
@@ -56,7 +76,7 @@ async function github(event) {
const path = file.slice(7).join('/')
const ref = file[6]
const headers = {
- 'User-Agent': 'hugomrdias',
+ 'User-Agent': 'ianconsolata',
Authorization: `token ${GITHUB_TOKEN}`,
}
@@ -82,7 +102,7 @@ async function github(event) {
async function releases(event) {
const headers = {
- 'User-Agent': 'hugomrdias',
+ 'User-Agent': 'ianconsolata',
Authorization: `token ${GITHUB_TOKEN}`,
}
const rsp = await get(event, {
diff --git a/api/package.json b/api/package.json
index 9d1ae7c58..89fa46913 100644
--- a/api/package.json
+++ b/api/package.json
@@ -12,6 +12,7 @@
"dlv": "^1.1.3",
"merge-options": "^3.0.3",
"nanoid": "^3.1.16",
- "p-map": "^4.0.0"
+ "p-map": "^4.0.0",
+ "wrangler": "^2.17.0"
}
}
diff --git a/api/wrangler.toml b/api/wrangler.toml
index 96b98f576..ffbd9ff42 100644
--- a/api/wrangler.toml
+++ b/api/wrangler.toml
@@ -1,7 +1,5 @@
name = "specs-api"
-type = "webpack"
-account_id = "fffa4b4363a7e5250af8357087263b3a"
+account_id = "e85b6fdda17f8c464c343dc84d1373e8"
workers_dev = true
-route = ""
-zone_id = ""
-webpack_config = "webpack.config.js"
+main = "index.js"
+compatibility_date = "2023-04-27"
diff --git a/config.toml b/config.toml
index 18de27b79..297d7771c 100644
--- a/config.toml
+++ b/config.toml
@@ -5,6 +5,10 @@ canonifyurls = false
theme = "book"
# relativeURLs = true
+# allow building even if getting remote JSON fails
+# needed because rust-fil-proofs has no coverage
+ignoreErrors = ["error-remote-getjson"]
+
# Book configuration
disablePathToLower = true
enableGitInfo = true
@@ -41,7 +45,7 @@ enableGitInfo = true
# weight = 10
[params]
- API = 'https://specs-api.protocol-labs.workers.dev'
+ API = 'https://specs-api.filecoin-foundation.workers.dev'
# (Optional, default true) Controls table of contents visibility on right side of pages.
# Start and end levels can be controlled with markup.tableOfContents setting.
# You can also specify this parameter per page in front matter.
diff --git a/content/algorithms/crypto/poseidon.md b/content/algorithms/crypto/poseidon.md
index 8d0b6564e..e3a130639 100644
--- a/content/algorithms/crypto/poseidon.md
+++ b/content/algorithms/crypto/poseidon.md
@@ -356,7 +356,15 @@ while providing security against known attacks (statistical, interpolation, and
-{{}}$\constb R_F, R_P = \texttt{calc\_round\_numbers}(p, M, t, \alpha)${{}}\
+{{}}$\constb R_F, R_P = \texttt{calc\_round\_numbers}(p, M, t, c_{\alpha}})${{}}\
+where the S-box case, {{}}$c_{\alpha}${{}}, is given by
+{{}}
+$c_{\alpha} = \begin{cases}
+ 0 & \if \alpha = 3 \cr
+ 1 & \if \alpha = 5 \cr
+ 2 & \if \alpha = \neg 1
+\end{cases}
+{{}}\
The number of full and partial rounds, both are positive integers $R_F, R_P \typecolon \mathbb{Z}_{>0}$ and $R_F$ is even.
$R_F$ and $R_P$ are calculated using either the Python script [`calc_round_numbers.py`](https://extgit.iaik.tugraz.at/krypto/hadeshash/-/blob/9d80ec0473ad7cde5a12f3aac46439ad0da68c0a/code/scripts/calc_round_numbers.py) or the [`neptune`](https://github.com/filecoin-project/neptune) Rust library, denoted {{}}$\texttt{calc\_round\_numbers}${{}}. Both methods calculate the round numbers via brute-force; by iterating over all reasonable values for $R_F$ and $R_P$ and choosing the pair that satisfies the security inequalities (provided below) while minimizing the number of S-boxes.
diff --git a/content/algorithms/expected_consensus/_index.md b/content/algorithms/expected_consensus/_index.md
index 7b5d5be85..78997d59f 100644
--- a/content/algorithms/expected_consensus/_index.md
+++ b/content/algorithms/expected_consensus/_index.md
@@ -11,7 +11,7 @@ dashboardTests: 0
## Algorithm
-Expected Consensus (EC) is a probabilistic Byzantine fault-tolerant consensus protocol. At a high level, it operates by running a leader election every epoch in which, on expectation, a set number of participants may be eligible to submit a block. EC guarantees that these winners will be anonymous until they reveal themselves by submitting a proof that they have been elected, the `ElectionProof`. Each winning miner can submit one such proof per round and will be rewarded proportionally to its power. From this point on, each wining miner also creates a proof of storage (aka Winning PoSt). Each proof can be derived from a [properly formatted beacon entry](randomness), as described below.
+Expected Consensus (EC) is a probabilistic Byzantine fault-tolerant consensus protocol. At a high level, it operates by running a leader election every epoch in which, on expectation, a set number of participants may be eligible to submit a block. EC guarantees that these winners will be anonymous until they reveal themselves by submitting a proof that they have been elected, the `ElectionProof`. Each winning miner can submit one such proof per round and will be rewarded proportionally to its power. From this point on, each winning miner also creates a proof of storage (aka Winning PoSt). Each proof can be derived from a [properly formatted beacon entry](randomness), as described below.
All valid blocks submitted in a given round form a `Tipset`. Every block in a Tipset adds weight to its chain. The 'best' chain is the one with the highest weight, which is to say that the fork choice rule is to choose the heaviest known chain. For more details on how to select the heaviest chain, see [Chain Selection](expected_consensus#chain-selection). While on expectation at least one block will be generated at every round, in cases where no one finds a block in a given round, a miner can simply run leader election again for the next epoch with the appropriate random seed, thereby ensuring liveness in the protocol.
@@ -173,9 +173,9 @@ WinCount guarantees that a lucky single block will earn the same reward as the r
**Alternative Options for the Distribution/Sortition**
-Bernouli, Binomial and Poisson distributions have been considered for the _WinCount_ of a miner with power `p` out of a total network power of `N`. There are the following options:
+Bernoulli, Binomial and Poisson distributions have been considered for the _WinCount_ of a miner with power `p` out of a total network power of `N`. There are the following options:
-- Option 1: WinCount(p,N) ~ Bernouli(pE/N)
+- Option 1: WinCount(p,N) ~ Bernoulli(pE/N)
- Option 2: WinCount(p,N) ~ Binomial(E, p/N)
- Option 3: WinCount(p,N) ~ Binomial(p, E/N)
- Option 4: WinCount(p,N) ~ Binomial(p/M, ME/N)
@@ -189,7 +189,7 @@ In Option 5 (the one used in Filecoin Leader Election), the ticket targets for e
**Rationale for the Poisson Sortition choice**
-- Option 1 - Bernouli(pE/N): this option is easy to implement, but comes with a drawback: if the miner's power exceeds 1/E, the miner's WinCount is always 1, but never higher than 1.
+- Option 1 - Bernoulli(pE/N): this option is easy to implement, but comes with a drawback: if the miner's power exceeds 1/E, the miner's WinCount is always 1, but never higher than 1.
- Option 2 - Binomial(E, p/N): the expectation of WinCount stays the same irrespectively of whether the miner splits their power into more than one Sybil nodes, but the variance increases if they choose to Sybil. Risk-seeking miners will prefer to Sybil, while risk-averse miners will prefer to pool, none of which is a behaviour the protocol should encourage. This option is not computationally-expensive as it would involve calculation of factorials and fixed-point multiplications (or small integer exponents) only.
- Option 3 - Binomial(p, E/N): this option is computationally inefficient. It involves very large integer exponents.
- Option 4 - Binomial(p/M, ME/N): the complexity of this option depends on the value of M. A small M results in high computational cost, similarly to Option 3. A large M, on the other hand, leads to a situation similar to that of Option 2, where a risk-seeking miner is incentivized to Sybil. Clearly none of these are desirable properties.
@@ -342,7 +342,7 @@ The exact value for these parameters remain to be determined, but for testing pu
- `log2b(X) = floor(log2(x)) = (binary length of X) - 1` and `log2b(0) = 0`. Note that that special case should never be used (given it would mean an empty power table).
{{< hint warning >}}
-**Note that if your implementation does not allow for rounding to the fourth decimal**, miners should apply the [tie-breaker below](selecting-between-tipsets-with-equal-weight). Weight changes will be on the order of single digit numbers on expectation, so this should not have an outsized impact on chain consensus across implementations.
+**Note that if your implementation does not allow for rounding to the fourth decimal**, miners should apply the [tie-breaker below](#section-algorithms.expected_consensus.selecting-between-tipsets-with-equal-weight). Weight changes will be on the order of single digit numbers on expectation, so this should not have an outsized impact on chain consensus across implementations.
{{< /hint >}}
`ParentWeight` is the aggregate chain weight of a given block's parent set. It is calculated as
@@ -397,7 +397,7 @@ This is detectable when a given miner submits two blocks that satisfy any of the
A single consensus fault results into:
-- miner termination and removal of power from the power table,
+- miner suspension
- loss of all pledge collateral (which includes the initial pledge and blocks rewards yet to be vested)
### Detection and Reporting
diff --git a/content/algorithms/pos/post.md b/content/algorithms/pos/post.md
index fee395007..6102f4c94 100644
--- a/content/algorithms/pos/post.md
+++ b/content/algorithms/pos/post.md
@@ -30,7 +30,7 @@ Before continuing into more details of the _WinnningPoSt_ and _WindowPoSt_ algor
## WinningPoSt
-At the beginning of each epoch, a small number of storage miners (up to five, currently) are elected to mine new blocks, by Filecoin's [Expected Consensus](algorithms#expected_consensus) algorithm. Recall that the Filecoin blockchain operates on the basis of _tipsets_, which are groups of up to five blocks. This means that multiple blocks (up to five) can be mined at the same height.
+At the beginning of each epoch, a small number of storage miners are elected to mine new blocks, by Filecoin's [Expected Consensus](algorithms#expected_consensus) algorithm. Recall that the Filecoin blockchain operates on the basis of _tipsets_, therefore multiple blocks can be mined at the same height.
Each of the miners that are elected to mine a block have to submit a proof that they keep a sealed copy of the data which they have included in their proposed block, before the end of the current epoch. Successful submission of this proof is the _WinningPoSt_, which in turn grants the miner the Filecoin Block Reward, as well as the opportunity to charge other nodes fees in order to include their messages in the block. If a miner misses the epoch-end deadline, then the miner misses the opportunity to mine a block and get a Block Reward. No penalty is incurred in this case.
diff --git a/content/algorithms/sdr/_index.md b/content/algorithms/sdr/_index.md
index ec257f229..d654dc631 100644
--- a/content/algorithms/sdr/_index.md
+++ b/content/algorithms/sdr/_index.md
@@ -1156,8 +1156,8 @@ $\line{11}{}{\return \Sha{254}(\preimage) \as \Fq}$
**Implementation:**
-- [`storage_proofs::porep::stacked::circuit::proof::StackedCircuit::synthesize()`](https://github.com/filecoin-project/rust-fil-proofs/blob/master/storage-proofs/porep/src/stacked/circuit/proof.rs#L77)
-- [`storage_proofs::porep::stacked::circuit::params::Proof::synthesize()`](https://github.com/filecoin-project/rust-fil-proofs/blob/master/storage-proofs/porep/src/stacked/circuit/params.rs#L77)
+- [`storage_proofs::porep::stacked::circuit::proof::StackedCircuit::synthesize()`](https://github.com/filecoin-project/rust-fil-proofs/blob/108517271f8166cabc23e1966d8e8f397ec75ae0/storage-proofs-porep/src/stacked/circuit/proof.rs#L64)
+- [`storage_proofs::porep::stacked::circuit::params::Proof::synthesize()`](https://github.com/filecoin-project/rust-fil-proofs/blob/108517271f8166cabc23e1966d8e8f397ec75ae0/storage-proofs-porep/src/stacked/circuit/proof.rs#L92)
**Additional Notation:**
diff --git a/content/appendix/audit_reports.md b/content/appendix/audit_reports.md
index 32da7c394..c03051c9e 100644
--- a/content/appendix/audit_reports.md
+++ b/content/appendix/audit_reports.md
@@ -10,6 +10,17 @@ dashboardAudit: n/a
Security is a critical component in ensuring Filecoin can fulfill its mission to be the storage network for humanity. In addition to robust secure development processes, trainings, theory audits, and investing in external security research, the Filecoin project has engaged reputable third party auditing specialists to ensure that the theory behind the protocol and its implementation delivers the intended value, enabling Filecoin to be a safe and secure network. This section covers a selection of audit reports that have been published on Filecoin's theory and implementation.
+## Filecoin Virtual Machine
+
+### `2023-03-09` Filecoin EVM (FEVM)
+
+- Report: [Filecoin EVM Audit]()
+- Audit conducted by **Oak Security**
+
+The audit covers the implementation of:
+
+- FEVM's [builtin actors](https://github.com/filecoin-project/builtin-actors/tree/1b11df4b399550753a4105f45f58bc07015af2a3/actors/evm) out of which only [actors/evm](https://github.com/filecoin-project/builtin-actors/tree/1b11df4b399550753a4105f45f58bc07015af2a3/actors/evm) and [actors/eam](https://github.com/filecoin-project/builtin-actors/tree/1b11df4b399550753a4105f45f58bc07015af2a3/actors/eam) were included in scope along with code base of [ref-fvm](https://github.com/filecoin-project/ref-fvm). The report included auditing EVM runtime action and implementation, correctness of EVM opcodes, including Ethereum Address Manager(EAM). The report also included issues and enhancements methods for gas model and F4 addresses. The audit team also reviewed the message execution flow and kernel setup, WASM integration and FVM logs. All the valid issues raised by the audit were resolved and acknowledged including a few informational issues. More details on these issues are available in the report.
+
## Lotus
### `2020-10-20` Lotus Mainnet Ready Security Audit
@@ -22,6 +33,17 @@ The scope of this audit covered:
- The Lotus Daemon: Core component responsible for handling the Blockchain node logic by handling peer- to-peer networking, chain syncing, block validation, data retrieval and transfer, etc.
- The Lotus Storage Miner: Mining component used to manage a single storage miner by contributing to the network through Sector commitments and Proofs-of-Spacetime data proving it is storing the sectors it has committed to. This component communicates with the Lotus daemon via JSON-RPC API calls.
+## Venus
+
+### `2021-06-29` Venus Security Audit
+
+- Report: [Venus Security Assessment](https://leastauthority.com/static/publications/LeastAuthority_Filecoin_Foundation_Venus_Final_Audit_Report.pdf)
+- Audit conducted by: **Least Authority**
+
+The scope of this audit covered:
+
+- The Venus Daemon: Core component responsible for handling the Filecoin node logic by handling peer-to-peer networking, chain syncing, block validation, etc.
+
## Actors
### `2020-10-19` Actors Mainnet Ready Security Audit
diff --git a/content/glossary/_index.md b/content/glossary/_index.md
index 5b622c9a7..ab7e7ef2f 100644
--- a/content/glossary/_index.md
+++ b/content/glossary/_index.md
@@ -377,7 +377,7 @@ Every mined block has a computed `weight`, also called its `WinCount`. Together,
[_Window Proof-of-Spacetime_ (WindowPoSt)](post#windowpost) is the mechanism by which the commitments made by [storage miners](glossary#storage-miner-actor) are audited. It sees each 24-hour period broken down into a series of windows. Correspondingly, each storage miner's set of pledged [sectors](glossary#sector) is partitioned into subsets, one subset for each window. Within a given window, each storage miner must submit a [Proof-of-Spacetime](glossary#proof-of-spacetime-post) for each sector in their respective subset. This requires ready access to each of the challenged sectors, and will result in a [zk-SNARK-compressed](glossary#zksnark) proof published to the Filecoin [blockchain](glossary#blockchain) as a [message](glossary#message) in a [block](glossary#block). In this way, every sector of [pledged storage](glossary#pledged-storage) is audited at least once in any 24-hour period, and a permanent, verifiable, and public record attesting to each storage miner's continued commitment is kept.
-The Filecoin network expects constant availability of stored data. Failing to submit WindowPoSt for a sector will result in a [fault](glossary#fault), and the storage miner supplying the sector will be [slashed](glossary#slash).
+The Filecoin network expects constant availability of stored data. Failing to submit WindowPoSt for a sector will result in a [fault](glossary#fault), and the storage miner supplying the sector will be [slashed](glossary#slashing).
## Winning Proof-of-Spacetime (WinningPoSt)
diff --git a/content/implementations/_index.md b/content/implementations/_index.md
index 1d71e04d5..a6b3b620a 100644
--- a/content/implementations/_index.md
+++ b/content/implementations/_index.md
@@ -14,7 +14,7 @@ Filecoin is targeting [multiple implementations](https://filecoin.io/blog/announ
- [Lotus](https://lotu.sh): the Go-based implementation, supported by [Protocol Labs](https://protocol.ai),
- [Forest](https://github.com/ChainSafe/forest): the Rust-based implementation, supported by [ChainSafe](https://chainsafe.io),
-- [Fuhon](https://github.com/filecoin-project/cpp-filecoin): the C++-based implementation, supported by [Soramitsu](https://soramitsu.co.jp),
+- [Fuhon (deprecated)](https://github.com/filecoin-project/cpp-filecoin): the C++-based implementation, supported by [Soramitsu](https://soramitsu.co.jp),
- [Venus](https://github.com/filecoin-project/go-filecoin): a second Go-based implementation of Filecoin, previously called `go-filecoin`, which is maintained by the [IPFS-Force Community](https://github.com/ipfs-force-community).
{{}}
diff --git a/content/implementations/fuhon.md b/content/implementations/fuhon.md
index 1192f1b38..05ccccec5 100644
--- a/content/implementations/fuhon.md
+++ b/content/implementations/fuhon.md
@@ -1,5 +1,5 @@
---
-title: Fuhon
+title: Fuhon (deprecated)
weight: 4
dashboardWeight: 1
dashboardState: reliable
@@ -15,3 +15,5 @@ Fuhon is the C++ implementation of Filecoin. The implementation uses Rust librar
You can find the Fuhon codebase [here](https://github.com/filecoin-project/cpp-filecoin).
The Fuhon implementation of Filecoin is supported by [Soramitsu](https://soramitsu.co.jp/).
+
+Since May 2022, this implementation has been deprecated and out of support. The existing code repositories will remain public.
diff --git a/content/intro/systems/impl_systems.md b/content/intro/systems/impl_systems.md
index feec70378..e8a7d6707 100644
--- a/content/intro/systems/impl_systems.md
+++ b/content/intro/systems/impl_systems.md
@@ -41,7 +41,7 @@ For this purpose, we use the `FilecoinNode` data structure, which is passed into
Further, Systems MUST abide by the following limitations:
- **Random crashes.** A Filecoin Node may crash at any moment. Systems must be secure and consistent through crashes.
- This is primarily achived by limiting the use of persistent state, persisting such state through Ipld data structures,
+ This is primarily achieved by limiting the use of persistent state, persisting such state through Ipld data structures,
and through the use of initialization routines that check state, and perhaps correct errors.
- **Isolation.** Systems must communicate over well-defined, isolated interfaces. They must not build their critical
functionality over a shared memory space. (Note: for performance, shared memory abstractions can be used to power
diff --git a/content/intro/systems/why_systems.md b/content/intro/systems/why_systems.md
index d6f3cab6f..a74bead61 100644
--- a/content/intro/systems/why_systems.md
+++ b/content/intro/systems/why_systems.md
@@ -29,12 +29,12 @@ This decoupling is useful for:
- **Security Isolation:** some systems require higher operational security than others. System decoupling allows
implementations to meet their security and functionality needs. A good example of this is separating Blockchain
processing from Data Transfer.
-- **Scalability:** systems, and various use cases, may drive different performance requirements for different opertators.
+- **Scalability:** systems, and various use cases, may drive different performance requirements for different operators.
System decoupling makes it easier for operators to scale their deployments along system boundaries.
## Filecoin Nodes don't need all the systems
-Filecoin Nodes vary significantly, and do not need all the systems.
+Filecoin Nodes vary significantly and do not need all the systems.
Most systems are only needed for a subset of use cases.
For example, the Blockchain System is required for synchronizing the chain, participating in secure consensus,
@@ -68,7 +68,7 @@ Sometimes this is harder, and it requires detangling, adding, or removing abstra
example, the `StoragePowerActor` and the `StorageMarketActor` were a single `Actor` previously. This caused
a large coupling of functionality across `StorageDeal` making, the `StorageMarket`, markets in general, with
Storage Mining, Sector Sealing, PoSt Generation, and more. Detangling these two sets of related functionality
-requried breaking apart the one actor into two.
+required breaking apart the one actor into two.
## Decomposing within a System
diff --git a/content/libraries/drand/_index.md b/content/libraries/drand/_index.md
index 37b3ca8ac..2f3b6f33d 100644
--- a/content/libraries/drand/_index.md
+++ b/content/libraries/drand/_index.md
@@ -18,7 +18,7 @@ Any node that has gathered t of the signatures can reconstruct the full BLS sign
drand assumes that at least t of the n nodes are honest (and online -- for liveness). If this threshold is broken, the adversary can permanently halt randomness production but cannot otherwise bias the randomness.
-You can learn more about how drand works, by visiting its [repository](https://github.com/drand/drand), or reading its [spec](https://github.com/drand/drand/blob/master/docs/SPECS.md).
+You can learn more about how drand works, by visiting its [repository](https://github.com/drand/drand), or reading its [specification](https://drand.love/docs/specification/).
In the following sections we look in turn at how the Filecoin protocol makes use of drand randomness, and at some of the characteristics of the specific drand network Filecoin uses.
@@ -29,6 +29,7 @@ By polling the appropriate endpoint (see below for specifics on the drand networ
```json
{
"round": 367,
+ "randomness": "3439d92d58e47d342131d446a3abe264396dd264717897af30525c98408c834f",
"signature": "b62dd642e939191af1f9e15bef0f0b0e9562a5f570a12a231864afe468377e2a6424a92ccfc34ef1471cbd58c37c6b020cf75ce9446d2aa1252a090250b2b1441f8a2a0d22208dcc09332eaa0143c4a508be13de63978dbed273e3b9813130d5",
"previous_signature": "afc545efb57f591dbdf833c339b3369f569566a93e49578db46b6586299422483b7a2d595814046e2847494b401650a0050981e716e531b6f4b620909c2bf1476fd82cf788a110becbc77e55746a7cccd47fb171e8ae2eea2a22fcc6a512486d"
}
@@ -36,11 +37,12 @@ By polling the appropriate endpoint (see below for specifics on the drand networ
Specifically, we have:
+- `Randomness` -- SHA256 hash of the signature
- `Signature` -- the threshold BLS signature on the previous signature value `Previous` and the current round number `round`.
- `PreviousSignature` -- the threshold BLS signature from the previous drand round.
- `Round` -- the index of Randomness in the sequence of all random values produced by this drand network.
-Specifically, the message signed is the concatenation of the round number treated as a uint64 and the previous signature. At the moment, drand uses BLS signatures on the BLS12-381 curve with the latest v7 RFC of hash-to-curve and the signature is made over G1 (for more see the [drand spec](https://github.com/drand/drand/blob/master/docs/SPECS.md#cryptographic-specification)).
+Specifically, the message signed is the concatenation of the round number treated as a uint64 and the previous signature. At the moment, drand uses BLS signatures on the BLS12-381 curve with the latest v7 RFC of hash-to-curve and the signature is made over G1 (for more see the [drand specification](https://drand.love/docs/specification/#cryptographic-specification).
## Polling the drand network
@@ -69,7 +71,7 @@ endpoint.
Thereafter, the Filecoin client can call drand's endpoints:
- `/public/latest` to get the latest randomness value produced by the beacon
-- `/public/` to get the randoomness value produced by the beacon at a given round
+- `/public/` to get the randomness value produced by the beacon at a given round
## Using drand in Filecoin
@@ -90,7 +92,7 @@ Upon receiving a new drand randomness value from a beacon, a Filecoin node shoul
- that the `Signature` field is verified by the beacon's `PublicKey` as the beacon's signature of `SHA256(PreviousSignature || Round)`.
- that the `Randomness` field is `SHA256(Signature)`.
-See [drand](https://github.com/drand/drand/blob/master/beacon/beacon.go#L63) for an example.
+See [drand](https://github.com/drand/drand/blob/0df91a710b4366d41e88ad487814a16cf88494f9/crypto/schemes.go#L68) for an example.
### Fetching the appropriate drand value while mining
diff --git a/content/systems/filecoin_blockchain/storage_power_consensus/storage_power_actor.md b/content/systems/filecoin_blockchain/storage_power_consensus/storage_power_actor.md
index a050d25a3..0ec9ea51e 100644
--- a/content/systems/filecoin_blockchain/storage_power_consensus/storage_power_actor.md
+++ b/content/systems/filecoin_blockchain/storage_power_consensus/storage_power_actor.md
@@ -16,7 +16,7 @@ dashboardTests: 0
{{