mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-12 21:01:21 +00:00
update abci spec. add address spec
This commit is contained in:
@ -49,14 +49,14 @@ spec](https://github.com/tendermint/go-amino#computing-the-prefix-and-disambigua
|
|||||||
In what follows, we provide the type names and prefix bytes directly.
|
In what follows, we provide the type names and prefix bytes directly.
|
||||||
Notice that when encoding byte-arrays, the length of the byte-array is appended
|
Notice that when encoding byte-arrays, the length of the byte-array is appended
|
||||||
to the PrefixBytes. Thus the encoding of a byte array becomes `<PrefixBytes>
|
to the PrefixBytes. Thus the encoding of a byte array becomes `<PrefixBytes>
|
||||||
<Length> <ByteArray>`. In other words, to encode any type listed below you do not need to be
|
<Length> <ByteArray>`. In other words, to encode any type listed below you do not need to be
|
||||||
familiar with amino encoding.
|
familiar with amino encoding.
|
||||||
You can simply use below table and concatenate Prefix || Length (of raw bytes) || raw bytes
|
You can simply use below table and concatenate Prefix || Length (of raw bytes) || raw bytes
|
||||||
( while || stands for byte concatenation here).
|
( while || stands for byte concatenation here).
|
||||||
|
|
||||||
| Type | Name | Prefix | Length |
|
| Type | Name | Prefix | Length |
|
||||||
| ---- | ---- | ------ | ----- |
|
| ---- | ---- | ------ | ----- |
|
||||||
| PubKeyEd25519 | tendermint/PubKeyEd25519 | 0x1624DE62 | 0x20 |
|
| PubKeyEd25519 | tendermint/PubKeyEd25519 | 0x1624DE62 | 0x20 |
|
||||||
| PubKeyLedgerEd25519 | tendermint/PubKeyLedgerEd25519 | 0x5C3453B2 | 0x20 |
|
| PubKeyLedgerEd25519 | tendermint/PubKeyLedgerEd25519 | 0x5C3453B2 | 0x20 |
|
||||||
| PubKeySecp256k1 | tendermint/PubKeySecp256k1 | 0xEB5AE982 | 0x21 |
|
| PubKeySecp256k1 | tendermint/PubKeySecp256k1 | 0xEB5AE982 | 0x21 |
|
||||||
| PrivKeyEd25519 | tendermint/PrivKeyEd25519 | 0xA3288912 | 0x40 |
|
| PrivKeyEd25519 | tendermint/PrivKeyEd25519 | 0xA3288912 | 0x40 |
|
||||||
@ -69,7 +69,7 @@ You can simply use below table and concatenate Prefix || Length (of raw bytes) |
|
|||||||
### Examples
|
### Examples
|
||||||
|
|
||||||
1. For example, the 33-byte (or 0x21-byte in hex) Secp256k1 pubkey
|
1. For example, the 33-byte (or 0x21-byte in hex) Secp256k1 pubkey
|
||||||
`020BD40F225A57ED383B440CF073BC5539D0341F5767D2BF2D78406D00475A2EE9`
|
`020BD40F225A57ED383B440CF073BC5539D0341F5767D2BF2D78406D00475A2EE9`
|
||||||
would be encoded as
|
would be encoded as
|
||||||
`EB5AE98221020BD40F225A57ED383B440CF073BC5539D0341F5767D2BF2D78406D00475A2EE9`
|
`EB5AE98221020BD40F225A57ED383B440CF073BC5539D0341F5767D2BF2D78406D00475A2EE9`
|
||||||
|
|
||||||
@ -78,6 +78,31 @@ would be encoded as
|
|||||||
would be encoded as
|
would be encoded as
|
||||||
`16E1FEEA46304402201CD4B8C764D2FD8AF23ECFE6666CA8A53886D47754D951295D2D311E1FEA33BF02201E0F906BB1CF2C30EAACFFB032A7129358AFF96B9F79B06ACFFB18AC90C2ADD7`
|
`16E1FEEA46304402201CD4B8C764D2FD8AF23ECFE6666CA8A53886D47754D951295D2D311E1FEA33BF02201E0F906BB1CF2C30EAACFFB032A7129358AFF96B9F79B06ACFFB18AC90C2ADD7`
|
||||||
|
|
||||||
|
### Addresses
|
||||||
|
|
||||||
|
Addresses for each public key types are computed as follows:
|
||||||
|
|
||||||
|
#### Ed25519
|
||||||
|
|
||||||
|
RIPEMD160 hash of the Amino encoded public key:
|
||||||
|
|
||||||
|
```
|
||||||
|
address = RIPEMD160(AMINO(pubkey))
|
||||||
|
```
|
||||||
|
|
||||||
|
NOTE: this will soon change to the truncated 20-bytes of the SHA256 of the raw
|
||||||
|
public key
|
||||||
|
|
||||||
|
#### Secp256k1
|
||||||
|
|
||||||
|
RIPEMD160 hash of the SHA256 hash of the OpenSSL compressed public key:
|
||||||
|
|
||||||
|
```
|
||||||
|
address = RIPEMD160(SHA256(pubkey))
|
||||||
|
```
|
||||||
|
|
||||||
|
This is the same as Bitcoin.
|
||||||
|
|
||||||
## Other Common Types
|
## Other Common Types
|
||||||
|
|
||||||
### BitArray
|
### BitArray
|
||||||
|
@ -52,20 +52,33 @@ objects in the `ResponseBeginBlock`:
|
|||||||
|
|
||||||
```
|
```
|
||||||
message Validator {
|
message Validator {
|
||||||
bytes pub_key = 1;
|
bytes address = 1;
|
||||||
int64 power = 2;
|
PubKey pub_key = 2;
|
||||||
|
int64 power = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message PubKey {
|
||||||
|
string type = 1;
|
||||||
|
bytes data = 2;
|
||||||
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The `pub_key` is the Amino encoded public key for the validator. For details on
|
The `pub_key` currently supports two types:
|
||||||
Amino encoded public keys, see the [section of the encoding spec](https://github.com/tendermint/tendermint/blob/master/docs/spec/blockchain/encoding.md#public-key-cryptography).
|
- `type = "ed25519" and `data = <raw 32-byte public key>`
|
||||||
|
- `type = "secp256k1" and `data = <33-byte OpenSSL compressed public key>`
|
||||||
|
|
||||||
|
If the address is provided, it must match the address of the pubkey, as
|
||||||
|
specified [here](/docs/spec/blockchain/encoding.md#Addresses)
|
||||||
|
|
||||||
|
(Note: In the v0.19 series, the `pub_key` is the [Amino encoded public
|
||||||
|
key](/docs/spec/blockchain/encoding.md#public-key-cryptography).
|
||||||
For Ed25519 pubkeys, the Amino prefix is always "1624DE6220". For example, the 32-byte Ed25519 pubkey
|
For Ed25519 pubkeys, the Amino prefix is always "1624DE6220". For example, the 32-byte Ed25519 pubkey
|
||||||
`76852933A4686A721442E931A8415F62F5F1AEDF4910F1F252FB393F74C40C85` would be
|
`76852933A4686A721442E931A8415F62F5F1AEDF4910F1F252FB393F74C40C85` would be
|
||||||
Amino encoded as
|
Amino encoded as
|
||||||
`1624DE622076852933A4686A721442E931A8415F62F5F1AEDF4910F1F252FB393F74C40C85`
|
`1624DE622076852933A4686A721442E931A8415F62F5F1AEDF4910F1F252FB393F74C40C85`)
|
||||||
|
|
||||||
(Note: in old versions of Tendermint (pre-v0.19.0), the pubkey is just prefixed with a
|
(Note: In old versions of Tendermint (pre-v0.19.0), the pubkey is just prefixed with a
|
||||||
single type byte, so for ED25519 we'd have `pub_key = 0x1 | pub`)
|
single type byte, so for ED25519 we'd have `pub_key = 0x1 | pub`)
|
||||||
|
|
||||||
The `power` is the new voting power for the validator, with the
|
The `power` is the new voting power for the validator, with the
|
||||||
|
Reference in New Issue
Block a user