Address comments from #13 in ssz README
This commit is contained in:
parent
25e89063b7
commit
2add249f8f
@ -57,12 +57,6 @@ Do not rely upon it for reference.
|
|||||||
* [Deserializing/Decoding](#deserializingdecoding)
|
* [Deserializing/Decoding](#deserializingdecoding)
|
||||||
- [Rust](#rust-1)
|
- [Rust](#rust-1)
|
||||||
|
|
||||||
### TODO
|
|
||||||
|
|
||||||
* [ ] Wait for spec to finalize.
|
|
||||||
* [ ] Implement encoding for all useful types.
|
|
||||||
* [ ] Implement decoding.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## SimpleSerialize Overview
|
## SimpleSerialize Overview
|
||||||
@ -90,13 +84,15 @@ Syntax:
|
|||||||
|
|
||||||
Convert directly to bytes the size of the int. (e.g. ``int16 = 2 bytes``)
|
Convert directly to bytes the size of the int. (e.g. ``int16 = 2 bytes``)
|
||||||
|
|
||||||
|
All integers are serialized as **big endian**.
|
||||||
|
|
||||||
| Check to perform | Code |
|
| Check to perform | Code |
|
||||||
|:-----------------------|:------------------------|
|
|:-----------------------|:------------------------|
|
||||||
| Int size is not 0 | ``int_size > 0`` |
|
| Int size is not 0 | ``int_size > 0`` |
|
||||||
| Size is a byte integer | ``int_size % 8 == 0`` |
|
| Size is a byte integer | ``int_size % 8 == 0`` |
|
||||||
| Value is less than max | ``2**int_size > value`` |
|
| Value is less than max | ``2**int_size > value`` |
|
||||||
|
|
||||||
```
|
```python
|
||||||
buffer_size = int_size / 8
|
buffer_size = int_size / 8
|
||||||
return value.to_bytes(buffer_size, 'big')
|
return value.to_bytes(buffer_size, 'big')
|
||||||
```
|
```
|
||||||
@ -110,7 +106,7 @@ The address should already come as a hash/byte format. Ensure that length is
|
|||||||
|:-----------------------|:---------------------|
|
|:-----------------------|:---------------------|
|
||||||
| Length is correct (20) | ``len(value) == 20`` |
|
| Length is correct (20) | ``len(value) == 20`` |
|
||||||
|
|
||||||
```
|
```python
|
||||||
assert( len(value) == 20 )
|
assert( len(value) == 20 )
|
||||||
return value
|
return value
|
||||||
```
|
```
|
||||||
@ -124,7 +120,7 @@ check ensures the 32 byte length is satisfied.
|
|||||||
|:-----------------------|:---------------------|
|
|:-----------------------|:---------------------|
|
||||||
| Length is correct (32) | ``len(value) == 32`` |
|
| Length is correct (32) | ``len(value) == 32`` |
|
||||||
|
|
||||||
```
|
```python
|
||||||
assert( len(value) == 32 )
|
assert( len(value) == 32 )
|
||||||
return value
|
return value
|
||||||
```
|
```
|
||||||
@ -132,11 +128,11 @@ return value
|
|||||||
#### Bytes
|
#### Bytes
|
||||||
|
|
||||||
For general `byte` type:
|
For general `byte` type:
|
||||||
1. Get the length/number of bytes; Encode into a 4byte integer.
|
1. Get the length/number of bytes; Encode into a 4 byte integer.
|
||||||
2. Append the value to the length and return: ``[ length_bytes ] + [
|
2. Append the value to the length and return: ``[ length_bytes ] + [
|
||||||
value_bytes ]``
|
value_bytes ]``
|
||||||
|
|
||||||
```
|
```python
|
||||||
byte_length = (len(value)).to_bytes(4, 'big')
|
byte_length = (len(value)).to_bytes(4, 'big')
|
||||||
return byte_length + value
|
return byte_length + value
|
||||||
```
|
```
|
||||||
@ -150,7 +146,7 @@ of each item in the list:
|
|||||||
2. append to string.
|
2. append to string.
|
||||||
2. Get size of serialized string. Encode into a 4 byte integer.
|
2. Get size of serialized string. Encode into a 4 byte integer.
|
||||||
|
|
||||||
```
|
```python
|
||||||
serialized_list_string = ''
|
serialized_list_string = ''
|
||||||
|
|
||||||
for item in value:
|
for item in value:
|
||||||
@ -181,7 +177,9 @@ At each step, the following checks should be made:
|
|||||||
Convert directly from bytes into integer utilising the number of bytes the same
|
Convert directly from bytes into integer utilising the number of bytes the same
|
||||||
size as the integer length. (e.g. ``int16 == 2 bytes``)
|
size as the integer length. (e.g. ``int16 == 2 bytes``)
|
||||||
|
|
||||||
```
|
All integers are interpreted as **big endian**.
|
||||||
|
|
||||||
|
```python
|
||||||
byte_length = int_size / 8
|
byte_length = int_size / 8
|
||||||
new_index = current_index + int_size
|
new_index = current_index + int_size
|
||||||
return int.from_bytes(rawbytes[current_index:current_index+int_size], 'big'), new_index
|
return int.from_bytes(rawbytes[current_index:current_index+int_size], 'big'), new_index
|
||||||
@ -191,7 +189,7 @@ return int.from_bytes(rawbytes[current_index:current_index+int_size], 'big'), ne
|
|||||||
|
|
||||||
Return the 20 bytes.
|
Return the 20 bytes.
|
||||||
|
|
||||||
```
|
```python
|
||||||
new_index = current_index + 20
|
new_index = current_index + 20
|
||||||
return rawbytes[current_index:current_index+20], new_index
|
return rawbytes[current_index:current_index+20], new_index
|
||||||
```
|
```
|
||||||
@ -200,7 +198,7 @@ return rawbytes[current_index:current_index+20], new_index
|
|||||||
|
|
||||||
Return the 32 bytes.
|
Return the 32 bytes.
|
||||||
|
|
||||||
```
|
```python
|
||||||
new_index = current_index + 32
|
new_index = current_index + 32
|
||||||
return rawbytes[current_index:current_index+32], new_index
|
return rawbytes[current_index:current_index+32], new_index
|
||||||
```
|
```
|
||||||
@ -209,7 +207,7 @@ return rawbytes[current_index:current_index+32], new_index
|
|||||||
|
|
||||||
Get the length of the bytes, return the bytes.
|
Get the length of the bytes, return the bytes.
|
||||||
|
|
||||||
```
|
```python
|
||||||
bytes_length = int.from_bytes(rawbytes[current_index:current_index+4], 'big')
|
bytes_length = int.from_bytes(rawbytes[current_index:current_index+4], 'big')
|
||||||
new_index = current_index + 4 + bytes_lenth
|
new_index = current_index + 4 + bytes_lenth
|
||||||
return rawbytes[current_index+4:current_index+4+bytes_length], new_index
|
return rawbytes[current_index+4:current_index+4+bytes_length], new_index
|
||||||
@ -217,13 +215,11 @@ return rawbytes[current_index+4:current_index+4+bytes_length], new_index
|
|||||||
|
|
||||||
#### List
|
#### List
|
||||||
|
|
||||||
1. Get the length of the serialized list bytes.
|
Deserailize each object in the list.
|
||||||
2. Loop through the bytes;
|
1. Get the length of the serialized list.
|
||||||
1. Deserialize the object with that length.
|
2. Loop through deseralizing each item in the list until you reach the
|
||||||
2. Keep track of current position
|
entire length of the list.
|
||||||
|
|
||||||
Note Before: there are a number of checks to be performed, ensuring there is
|
|
||||||
enough room left.
|
|
||||||
|
|
||||||
| Check type | code |
|
| Check type | code |
|
||||||
|:------------------------------------|:--------------------------------------|
|
|:------------------------------------|:--------------------------------------|
|
||||||
@ -267,7 +263,7 @@ rust.
|
|||||||
|
|
||||||
Installing on Linux or OSX:
|
Installing on Linux or OSX:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
curl https://sh.rustup.rs -sSf | sh
|
curl https://sh.rustup.rs -sSf | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -282,7 +278,7 @@ All dependencies are listed in the ``Cargo.toml`` file.
|
|||||||
|
|
||||||
To build and install all related dependencies:
|
To build and install all related dependencies:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
cargo build
|
cargo build
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user