State
Last updated
Last updated
This doc lists all the data Peggy module reads/writes to its state as KV pairs
Params is a module-wide configuration structure that stores parameters and defines overall functioning of the peggy module. Detailed specification for each parameter can be found in the Parameters section.
key | Value | Type | Encoding |
---|---|---|---|
Stores Delegate Ethereum address
indexed by the Validator
's account address
key | Value | Type | Encoding |
---|---|---|---|
Stores Validator
account address indexed by the Delegate Ethereum address
key | Value | Type | Encoding |
---|---|---|---|
When a validator would like to delegate their voting power to another key. The value is stored using the orchestrator address as the key
Key | Value | Type | Encoding |
---|---|---|---|
This is the validator set of the bridge. Created automatically by Peggy module
during EndBlocker.
Stored in two possible ways, first with a height and second without (unsafe). Unsafe is used for testing and export and import of state.
The latest validator set slash nonce. This is used to track which validator set needs to be slashed and which already has been.
Nonce of the latest validator set. Updated on each new validator set.
Singer
confirmation for a particular validator set. See oracle messages
Singer
confirmation for a particular token batch. See oracle messages
User withdrawals are pooled together in Peggy Tx Pool
ready to be batched later by a Batch Creator
.
Each withdrawal is indexed by a unique nonce set by the Peggy module
when the withdrawal was received.
Monotonically increasing value for each withdrawal received by Injective
OutgoingTxBatch
represents a collection of withdrawals of the same token type. Created on every successful MsgRequestBatch
.
Stored in two possible ways, first with a height and second without (unsafe). Unsafe is used for testing and export and import of state. Currently Peggy.sol is hardcoded to only accept batches with a single token type and only pay rewards in that same token type.
Monotonically increasing value for each batch created on Injective by some Batch Creator
Represents the latest slashed block height. There is always only a singe value stored.
Represents the latest bloch height at which a Validator
started unbonding from the Validator Set
. Used to determine slashing conditions.
A denom that is originally from a counter chain will be from a contract. The token contract and denom are stored in two ways. First, the denom is used as the key and the value is the token contract. Second, the contract is used as the key, the value is the denom the token contract represents.
This entry represents the last observed Valset that was successfully relayed to Ethereum. Updates after an attestation of ValsetUpdatedEvent
has been processed on Injective.
The nonce of the last observed event on Ethereum. This is set when TryAttestation()
is called. There is always only a single value held in this store.
This block height of the last observed event on Ethereum. There will always only be a single value stored in this store.
This is the last observed event on Ethereum from a particular Validator
. Updated every time the asssociated Orchestrator
sends an event claim.
Attestation is an aggregate of claims that eventually becomes observed by all orchestrators as more votes (claims) are coming in. Once observed the claim's particular logic gets executed.
Each attestation is bound to a unique event nonce (generated by Peggy contract
) and they must be processed in order. This is a correctness issue, if relaying out of order transaction replay attacks become possible.
A computed hash indicating that a validator set/token batch in fact existed on Injective. This checkpoint also exists in Peggy contract
. Updated on each new valset update and token batch creation.
A list of known malicious Ethereum addresses that are prevented from using the bridge.
key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
Key | Value | Type | Encoding |
---|---|---|---|
[]byte{0x4}
Module params
types.Params
Protobuf encoded
[]byte{0x1} + []byte(validatorAddr)
Ethereum address
common.Address
Protobuf encoded
[]byte{0xfb} + []byte(ethAddress)
Validator address
sdk.ValAddress
Protobuf encoded
[]byte{0xe8} + []byte(AccAddress)
Orchestrator address assigned by a validator
[]byte
Protobuf encoded
[]byte{0x2} + nonce (big endian encoded)
Validator set
types.Valset
Protobuf encoded
[]byte{0xf5}
Nonce
uint64
encoded via big endian
[]byte{0xf6}
Nonce
uint64
encoded via big endian
[]byte{0x3} + (nonce + []byte(AccAddress)
Validator Confirmation
types.MsgValsetConfirm
Protobuf encoded
[]byte{0xe1} + []byte(tokenContract) + nonce + []byte(AccAddress)
Validator Batch Confirmation
types.MsgConfirmBatch
Protobuf encoded
[]byte{0x7} + []byte("lastTxPoolId")
nonce of outgoing withdrawal
uint64
Big endian encoded
[]byte{0x6} + []byte("lastTxPoolId")
Last used withdrawal ID
uint64
Big endian encoded
[]byte{0xa} + []byte(tokenContract) + nonce (big endian encoded)
A batch of outgoing transactions
types.OutgoingTxBatch
Protobuf encoded
[]byte{0xb} + block (big endian encoded)
A batch of outgoing transactions
types.OutgoingTxBatch
Protobuf encoded
[]byte{0x7} + []byte("lastBatchId")
Last used batch ID
uint64
Big endian encoded
[]byte{0xf7}
Latest height a batch slashing occurred
uint64
Big endian encoded
[]byte{0xf8}
Latest height at which a Validator started unbonding
uint64
Big endian encoded
[]byte{0xf3} + []byte(denom)
Token contract address
[]byte
stored in byte format
[]byte{0xf4} + []byte(tokenContract)
Token denom
[]byte
stored in byte format
[]byte{0xfa}
Last observed Valset on Ethereum
types.Valset
Protobuf encoded
[]byte{0xf2}
Last observed event nonce
uint64
Big endian encoded
[]byte{0xf9}
Last observed Ethereum Height
uint64
Protobuf encoded
[]byte{0xf1} + []byte(validator address)
Last observed event by some Validator
types.LastClaimEvent
Protobuf encoded
[]byte{0x5} + event nonce (big endian encoded) + []byte(claimHash)
Attestation of occurred events/claims
types.Attestation
Protobuf encoded
[]byte{0x1b}
Last created checkpoint hash on Injective
gethcommon.Hash
store in byte format
[]byte{0x1c} + []byte(ethereum address)
Empty []byte slice
gethcommon.Hash
stored in byte format]