Skip to content

Commit

Permalink
format experimental
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian M Hamlin committed Mar 18, 2021
1 parent 1cef327 commit 3287fad
Showing 1 changed file with 20 additions and 20 deletions.
40 changes: 20 additions & 20 deletions spec/cBITS_provisional_spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@

## Abstract ##


Notes on Compact BITS Format

**Objective**: show BITS (4 byte) compact representation of a uint256 input
Expand All @@ -25,9 +24,10 @@ Conversion Rules: Take three bytes from uint256, starting with the most-signific



**Example 1**

convert src to dst (28 bytes of data following four bytes of zero)

--
**Example 1** convert src to dst (28 bytes of data following four bytes of zero)
given: 0x000000008cc30f97a647313fe0cad97a647313fe0cad97a647313fe0cad97a64
--------------------------------------------------------------------------

Expand All @@ -37,11 +37,10 @@ Step) extract the most-significant three bytes of uint256, store as resInt

inCount = 28 (0x1C)

|--------|--------|-----------------|-----------------|-----------------|
| resInt | Octets | 140 (0x8C) | 195 (0xC3) | 15 (0x0F) |
|--------|--------|-----------------|-----------------|-----------------|
| Bits | 1 0 0 0 1 1 0 0 | 1 1 0 0 0 0 1 1 | 0 0 0 0 1 1 1 1 |
|-----------------|-----------------|-----------------|-----------------|


Step) test the high bit of the left-most, non-zero byte of input uint256 ;
if set,
Expand All @@ -50,35 +49,37 @@ Step) test the high bit of the left-most, non-zero byte of input uint256 ;

inCount = 29 (0x1D)

|--------|--------|-----------------|-----------------|-----------------|
| resInt | Octets | 0 (0x00) | 140 (0x8C) | 195 (0xC3) |
|--------|--------|-----------------|-----------------|-----------------|
| Bits | 0 0 0 0 0 0 0 0 | 1 0 0 0 1 1 0 0 | 1 1 0 0 0 0 1 1 |
|-----------------|-----------------|-----------------|-----------------|


Step) multiply inCount by 2**24, resulting in a 32bit integer (left shift)

inCount shifted left by three (3) bytes

|---------|--------|-----------------|-----------------|-----------------|-----------------|

| inCount | Octets | 29 (0x1D) | 0 (0x00) | 0 (0x00) | 0 (0x00) |
|---------|--------|-----------------|-----------------|-----------------|-----------------|
| Bits | 0 0 0 1 1 1 0 1 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 |
|------------------|-----------------|-----------------|-----------------|-----------------|


Step) combine inCount and resInt (logical OR) to make the final Compact BITS (CBITS)

|-------|--------|-----------------|-----------------|-----------------|-----------------|

| CBITS | Octets | 29 (0x1D) | 0 (0x00) | 140 (0x8C) | 195 (0xC3) |
|-------|--------|-----------------|-----------------|-----------------|-----------------|
| Bits | 0 0 0 1 1 1 0 1 | 0 0 0 0 0 0 0 0 | 1 0 0 0 1 1 0 0 | 1 1 0 0 0 0 1 1 |
|----------------|-----------------|-----------------|-----------------|-----------------|


Expanded Result from compact BITS
0x8cc30000000000000000000000000000000000000000000000000000

--
**Example 2** convert src to dst (29 bytes of data following three bytes of zero)

**Example 2**

convert src to dst (29 bytes of data following three bytes of zero)

given: 0x0000000128a0e4b1fb1fb1fb1fb1fb1fb1fb1fb1fb1fb1fb1fb1fb1fb1fb1fb1
--------------------------------------------------------------------------

Expand All @@ -88,31 +89,30 @@ Step) extract the most-significant three bytes of uint256, store as resInt

inCount = 29 (0x1D)

|--------|--------|-----------------|-----------------|-----------------|
| resInt | Octets | 1 (0x01) | 40 (0x28) | 160 (0xA0) |
|--------|--------|-----------------|-----------------|-----------------|
| Bits | 0 0 0 0 0 0 0 1 | 0 0 1 0 1 0 0 0 | 1 0 1 0 0 0 0 0 |
|-----------------|-----------------|-----------------|-----------------|


Step) test the high bit of the left-most, non-zero byte of input uint256 ; bit not set

Step) multiply inCount by 2**24, resulting in a 32bit integer (left shift)

inCount shifted left by three (3) bytes

|---------|--------|-----------------|-----------------|-----------------|-----------------|

| inCount | Octets | 29 (0x1D) | 0 (0x00) | 0 (0x00) | 0 (0x00) |
|---------|--------|-----------------|-----------------|-----------------|-----------------|
| Bits | 0 0 0 1 1 1 0 1 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 |
|------------------|-----------------|-----------------|-----------------|-----------------|


Step) combine inCount and resInt (logical OR) to make the final Compact BITS (CBITS)

+---------+--------+-----------------+-----------------+-----------------+-----------------+

| inCount | Octets | 29 (0x1D) | 1 (0x01) | 40 (0x28) | 160 (0xA0) |
+---------+--------+-----------------+-----------------+-----------------+-----------------+
|---------|--------|-----------------|-----------------|-----------------|-----------------|
| Bits | 0 0 0 1 1 1 0 1 | 0 0 0 0 0 0 0 1 | 0 0 1 0 1 0 0 0 | 1 0 1 0 0 0 0 0 |
+------------------+-----------------+-----------------+-----------------+-----------------+


Expanded Result from compact BITS
0x0128A00000000000000000000000000000000000000000000000000000
Expand Down

0 comments on commit 3287fad

Please sign in to comment.