Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions docs/protocol/data-requests/rng.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Random Number Generation

## Witnet RNG request
The Witnet RNG request shares the same structure as a standard request with the 3 stages (retrieval, aggregation and
tally) and it will be solved by the same witnesses that are currently working in the Witnet mainnet.

### Retrieval
As a source for RNG requests, we specify a new `RADType` called `Rng`. This new source will trigger the creation of a
random vector of 32 bytes, instead of reading data from an API source. The rest of fields are unnecessary: the `url`
field must be empty and the `script` field will be ignored, so we can specify the CBOR code for an empty array
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
field must be empty and the `script` field will be ignored, so we can specify the CBOR code for an empty array
field must be empty and the `script` field will be ignored so we can specify the CBOR code for an empty array

(`[128]`). A single source is used in the retrieval section of this kind of requests.

```rust
"retrieve":[
{
"kind":"RNG",
"url":"",
"script":[128]
}
]
```

### Aggregation
Aggregation is not necessary due to the fact that RNG requests have only one retrieval. To unwrap the `RadonArray`
into a single element, we will use the `Mode` as a `RadonReducer` without filters.

```rust
"aggregate":{
"filters": [],
"reducer": 2,
}
```

### Tally
For the tally stage, a new `RadonReducer` is required, `HashConcatenate`. This reducer takes the `RadonBytes` revealed
by the witnesses, concatenates them into a single vector of bytes and hash them with SHA256. In the same way, as in the
aggregation stage, no filters are required.

```rust
"tally":{
"filters": [],
"reducer": 11,
}
```

## Conclusions
The random numbers (actually, random bytes) generated by the Witnet protocol are the result of applying a hash
function on a crowdsourced seed coming from the random bytes provided by several different witnesses, as selected
randomly by the Witnet protocol. That is, the randomness property of these is powered by the decentralized nature
of the Witnet network.


1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ nav:
- Witnet Requests:
- Overview: protocol/data-requests/overview.md
- Encoding: protocol/data-requests/radon-encoding.md
- RNG: protocol/data-requests/rng.md
#- protocol/serialization.md
#- Operator Docs:
#- Run an Ethereum bridge: node-operators/ethereum-bridge.md
Expand Down