Documentation
¶
Index ¶
- Constants
- func GetMutiProofHandlerFn(cliCtx context.CLIContext, route string) http.HandlerFunc
- func GetProofHandlerFn(cliCtx context.CLIContext, route string) http.HandlerFunc
- type BlockHeaderMerkleParts
- type BlockHeaderMerklePartsEthereum
- type BlockRelayProof
- type IAVLMerklePath
- type IAVLMerklePathEthereum
- type JsonMultiProof
- type JsonProof
- type MultiProof
- type MultiStoreProof
- type MultiStoreProofEthereum
- type OracleDataProof
- type Proof
- type RequestPacketEthereum
- type ResponsePacketEthereum
- type TMSignature
- type TMSignatureEthereum
Constants ¶
const (
RequestIDTag = "requestID"
)
Variables ¶
This section is empty.
Functions ¶
func GetMutiProofHandlerFn ¶
func GetMutiProofHandlerFn(cliCtx context.CLIContext, route string) http.HandlerFunc
func GetProofHandlerFn ¶
func GetProofHandlerFn(cliCtx context.CLIContext, route string) http.HandlerFunc
Types ¶
type BlockHeaderMerkleParts ¶
type BlockHeaderMerkleParts struct {
VersionAndChainIdHash tmbytes.HexBytes `json:"versionAndChainIdHash"`
TimeHash tmbytes.HexBytes `json:"timeHash"`
LastBlockIDAndOther tmbytes.HexBytes `json:"lastBlockIDAndOther"`
NextValidatorHashAndConsensusHash tmbytes.HexBytes `json:"nextValidatorHashAndConsensusHash"`
LastResultsHash tmbytes.HexBytes `json:"lastResultsHash"`
EvidenceAndProposerHash tmbytes.HexBytes `json:"evidenceAndProposerHash"`
}
BlockHeaderMerkleParts stores a group of hashes using for computing Tendermint's block header hash from app hash, and height.
In Tendermint, a block header hash is the Merkle hash of a binary tree with 14 leaf nodes. Each node encodes a data piece of the blockchain. The notable data leaves are: [A] app_hash, [2] height. All data pieces are combined into one 32-byte hash to be signed by block validators. The structure of the Merkle tree is shown below.
[BlockHeader]
/ \
[3A] [3B]
/ \ / \
[2A] [2B] [2C] [2D]
/ \ / \ / \ / \
[1A] [1B] [1C] [1D] [1E] [1F] [C] [D]
/ \ / \ / \ / \ / \ / \
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [A] [B]
[0] - version [1] - chain_id [2] - height [3] - time
[4] - last_block_id [5] - last_commit_hash [6] - data_hash [7] - validators_hash
[8] - next_validators_hash [9] - consensus_hash [A] - app_hash [B] - last_results_hash
[C] - evidence_hash [D] - proposer_address
Notice that NOT all leaves of the Merkle tree are needed in order to compute the Merkle root hash, since we only want to validate the correctness of [A] and [2]. In fact, only [1A], [3], [2B], [1E], [B], and [2D] are needed in order to compute [BlockHeader].
func GetBlockHeaderMerkleParts ¶
func GetBlockHeaderMerkleParts(codec *codec.Codec, block *types.Header) BlockHeaderMerkleParts
GetBlockHeaderMerkleParts converts Tendermint block header struct into BlockHeaderMerkleParts for gas-optimized proof verification.
type BlockHeaderMerklePartsEthereum ¶
type BlockHeaderMerklePartsEthereum struct {
VersionAndChainIdHash common.Hash
TimeHash common.Hash
LastBlockIDAndOther common.Hash
NextValidatorHashAndConsensusHash common.Hash
LastResultsHash common.Hash
EvidenceAndProposerHash common.Hash
}
BlockHeaderMerklePartsEthereum is an Ethereum version of BlockHeaderMerkleParts for solidity ABI-encoding.
type BlockRelayProof ¶
type BlockRelayProof struct {
MultiStoreProof MultiStoreProof `json:"multiStoreProof"`
BlockHeaderMerkleParts BlockHeaderMerkleParts `json:"blockHeaderMerkleParts"`
Signatures []TMSignature `json:"signatures"`
}
type IAVLMerklePath ¶
type IAVLMerklePath struct {
IsDataOnRight bool `json:"isDataOnRight"`
SubtreeHeight uint8 `json:"subtreeHeight"`
SubtreeSize uint64 `json:"subtreeSize"`
SubtreeVersion uint64 `json:"subtreeVersion"`
SiblingHash tmbytes.HexBytes `json:"siblingHash"`
}
IAVLMerklePath represents a Merkle step to a leaf data node in an iAVL tree.
func GetIAVLMerklePaths ¶
func GetIAVLMerklePaths(proof *iavl.ValueOp) []IAVLMerklePath
GetIAVLMerklePaths returns the list of IAVLMerklePath elements from the given iAVL proof.
type IAVLMerklePathEthereum ¶
type IAVLMerklePathEthereum struct {
IsDataOnRight bool
SubtreeHeight uint8
SubtreeSize *big.Int
SubtreeVersion *big.Int
SiblingHash common.Hash
}
IAVLMerklePathEthereum is an Ethereum version of IAVLMerklePath for solidity ABI-encoding.
type JsonMultiProof ¶
type JsonMultiProof struct {
BlockHeight uint64 `json:"blockHeight"`
OracleDataMultiProof []OracleDataProof `json:"oracleDataMultiProof"`
BlockRelayProof BlockRelayProof `json:"blockRelayProof"`
}
type JsonProof ¶
type JsonProof struct {
BlockHeight uint64 `json:"blockHeight"`
OracleDataProof OracleDataProof `json:"oracleDataProof"`
BlockRelayProof BlockRelayProof `json:"blockRelayProof"`
}
type MultiProof ¶
type MultiProof struct {
JsonProof JsonMultiProof `json:"jsonProof"`
EVMProofBytes tmbytes.HexBytes `json:"evmProofBytes"`
}
type MultiStoreProof ¶
type MultiStoreProof struct {
AccToGovStoresMerkleHash tmbytes.HexBytes `json:"accToGovStoresMerkleHash"`
MainAndMintStoresMerkleHash tmbytes.HexBytes `json:"mainAndMintStoresMerkleHash"`
OracleIAVLStateHash tmbytes.HexBytes `json:"oracleIAVLStateHash"`
ParamsStoresMerkleHash tmbytes.HexBytes `json:"paramsStoresMerkleHash"`
SlashingToUpgradeStoresMerkleHash tmbytes.HexBytes `json:"slashingToUpgradeStoresMerkleHash"`
}
MultiStoreProof stores a compact of other Cosmos-SDK modules' storage hash in multistore to compute (in combination with oracle store hash) Tendermint's application state hash at a given block.
________________[AppHash]_______________
/ \
_______[I9]______ ________[I10]________
/ \ / \
__[I5]__ __[I6]__ __[I7]__ __[I8]__
/ \ / \ / \ / \
[I1] [I2] [I3] [I4] [8] [9] [A] [B]
/ \ / \ / \ / \
[0] [1] [2] [3] [4] [5] [6] [7] [0] - acc [1] - distr [2] - evidence [3] - gov [4] - main [5] - mint [6] - oracle [7] - params [8] - slashing [9] - staking [A] - supply [D] - upgrade Notice that NOT all leaves of the Merkle tree are needed in order to compute the Merkle root hash, since we only want to validate the correctness of [6] In fact, only [7], [I3], [I5], and [I10] are needed in order to compute [AppHash].
func GetMultiStoreProof ¶
func GetMultiStoreProof(proof rootmulti.MultiStoreProofOp) MultiStoreProof
GetMultiStoreProof compacts Multi store proof from Tendermint to MultiStoreProof version.
type MultiStoreProofEthereum ¶
type MultiStoreProofEthereum struct {
AccToGovStoresMerkleHash common.Hash
MainAndMintStoresMerkleHash common.Hash
OracleIAVLStateHash common.Hash
ParamsStoresMerkleHash common.Hash
SlashingToUpgradeStoresMerkleHash common.Hash
}
MultiStoreProofEthereum is an Ethereum version of MultiStoreProof for solidity ABI-encoding.
type OracleDataProof ¶
type OracleDataProof struct {
RequestPacket types.OracleRequestPacketData `json:"requestPacket"`
ResponsePacket types.OracleResponsePacketData `json:"responsePacket"`
Version uint64 `json:"version"`
MerklePaths []IAVLMerklePath `json:"merklePaths"`
}
type RequestPacketEthereum ¶
type RequestPacketEthereum struct {
ClientId string
OracleScriptId uint64
Params []byte
AskCount uint64
MinCount uint64
}
RequestPacketEthereum is an Ethereum version of OracleRequestPacketData for solidity ABI-encoding.
type ResponsePacketEthereum ¶
type ResponsePacketEthereum struct {
ClientId string
RequestId uint64
AnsCount uint64
RequestTime uint64
ResolveTime uint64
ResolveStatus uint8
Result []byte
}
ResponsePacketEthereum is an Ethereum version of OracleResponsePacketData for solidity ABI-encoding.
type TMSignature ¶
type TMSignature struct {
R tmbytes.HexBytes `json:"r"`
S tmbytes.HexBytes `json:"s"`
V uint8 `json:"v"`
SignedDataPrefix tmbytes.HexBytes `json:"signedPrefixSuffix"`
SignedDataSuffix tmbytes.HexBytes `json:"signedDataSuffix"`
}
TMSignature contains all details of validator signature for performing signer recovery for ECDSA secp256k1 signature. Note that this struct is written specifically for signature signed on Tendermint's precommit data, which includes the block hash and some additional information prepended and appended to the block hash. The prepended part (prefix) and the appended part (suffix) are different for each signer (including signature size, machine clock, validator index, etc).
func GetSignaturesAndPrefix ¶
func GetSignaturesAndPrefix(info *types.SignedHeader) ([]TMSignature, error)
GetSignaturesAndPrefix returns a list of TMSignature from Tendermint signed header.