Bridge Validator
The transactions and information that each each Validator verifies depends on the governance group to which it belongs. They perform verification based on the block data of each chain according to the
- Verifies that the transaction object data (transaction hash, block number, method, parameter, memo ... ) sent to a Vault matches the data passed to OrbitHub or BridgeContract.
- Data to be verified
- Block Confirmation. ( ex, ETH & KLAYTN : 24 block confirmation )
- Verification that relayed data by operator and
Deposit
event data in transaction are the same.
- Verifies that the transaction object data (transaction hash, block number, method, parameter, memo ...) sent to a Minter matches the data passed to OrbitHub or BridgeContract.
- Data to be verified
- Block Confirmation. ( ex, ETH & KLAYTN : 24 block confirmation )
- Verification that relayed data by operator and
RequestSwap
event data in transaction are the same.
- For Tendermint affiliates, consensus is required prior to signing transactions of fee and sequence information. Thus, Validators verify that the actual transaction signature transfer fee is appropriate and sequence can be executed.
Used to prevent double spending
bytes32 hash = sha256(abi.encodePacked(hubContract, fromChain, toChain, fromAddr, toAddr, token, bytes32s, uints));
Used as verification hash to execute Minting or Release.
address hubContract
: Orbit Hub Contract Addressstring fromChain
: Chain Symbol requesting bridging.string toChain
: Chain Symbol to execute bridging.bytes fromAddr
: Address of the chain requesting bridging.bytes toAddr
: Address of chain to execute bridging.bytes token
: Token Information to be executed bridging.bytes32[] bytes32s
: Bytes32 data array used in the bridging consensus process.- index 0 : Governance Identifier.
- index 1 : Transaction Hash of fromChain.
uint[] uints
: Uint data array used in the bridging consensus process- index 0 : Token Amount to be executed bridging.
- index 1 : Token Decimal to be executed bridging
- index 2 ( optional ) : Unique Identifier for Requesting Bridging ( ex, depositId in ETH, KLAYTN )
- Validator should subscribe OrbitChain's new block and detect SwapRelay event
event SwapRelay(string fromChain, string toChain, bytes fromAddr, bytes toAddr, bytes token, bytes32[] bytes32s, uint[] uints);
- Supported chains : Ethereum, Klaytn, Icon
- Events detail of Vault / Minter contracts
event Deposit(string fromChain, string toChain, address fromAddr, bytes toAddr, address token, uint8 decimal, uint amount, uint depositId, uint block);
event SwapRequest(string fromChain, string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, uint block);
- Pre-defined in launch-governance settings
address hubContract
: SwapRelay event must be from hubContract addressbytes32 bytes32s[0]
: verify Governance Identifier validator's own id.
- Get transaction from Vault / Minter chain using
bytes32 bytes32s[1]
- Parse event and compare params with SwapRelay event
string fromChain
string toChain
bytes fromAddr
bytes toAddr
bytes token
uint[] uints[0:2]
: Must be equal to amount, decimal and depositId in array order.
- Hash two variables from the beginning of an
bytes32[] bytes32s
- Hash three variables from the beginning of an
uint[] uints
- Pre-defined in launch-governance settings
address hubContract
: SwapRelay event must be from hubContract addressbytes32 bytes32s[0]
: verify Governance Identifier validator's own id.
- Get transaction from Terra node using
bytes32 bytes32s[1]
- Verify transaction exist and succeeded
- Filter messages that meet the message type bank/MsgSend and send to vault address
- Verify vault address same with SwapRelay event's
bytes fromAddr
- Verify filtered messages's token denom and amount of token same with SwapRelay event
bytes token
uint uints[0]
- Parse memo in JSON format and compare with SwapRelay event
string toChain
bytes toAddr
uint uints[1]
value must 6- Hash two variables from the beginning of an
bytes32[] bytes32s
- Hash three variables from the beginning of an
uint[] uints
- Typically, verify release of tokens takes place in the minting chain.
- But, don't support COSMWASM yet, additional step needed for build Terra transaction
- Events will be validated
event TransactionSuggested(bytes32 govId, uint suggestIndex);
event TransactionSelected(bytes32 govId, uint selectionIndex);
- Verification transaction suggest
- Get orbitchain suggestion data object using Governance Identifier, suggestIndex (use pre-defined gov id in launch-governance)
- Get orbitchain swap data object(include swapDataArray) using Governance Identifier, suggest data's
uint uints[0]
- Verify vault have sufficient funds. have more than swapDataArray's
uint uints[0]
- Verify suggestion's gas properly estimated
- Verify suggestion's fee properly estimated
- Verify suggestion's sequence same with vault address's sequence
- Build hash
bytes32 hash = sha256(abi.encodePacked(address(this), govId, suggestIndex, s.uints, s.signatureHash));
Last modified 1yr ago