# XRP

## Code

* `XrpBridge.sol`
* `XrpBridge.impl.sol`

## Address

* Xrp Bridge Symbol : `XRP`
* Xrp Bridge Contract Address : `0x4E6C37162021FdA832fB95aFF42Af92c2e8B6257`

## Events

### XrpTransactionSuggested

```bash
event XrpTransactionSuggested(bytes32 govId, uint swapIndex, uint suggestIndex);Event occurs when Bridge Operator proposes Raw Transaction Data of Terra Chain,
```

* `bytes32 govId` : Unique Identifier of Governance
* `uint swapIndex` : Swap Data Index
* `uint suggestIndex` : Suggestion Data Index

### XrpTransactionSelected

```bash
event XrpTransactionSelected(bytes32 govId, uint selectionIndex);
```

Event will occur upon completion of agreement on the raw transaction data of XRP Chain by a Bridge Validator

* `bytes32 govId` : Unique Identifier of Governance
* `uint selectionIndex` : Selection Data Index

### XrpTransactionValidated

```bash
event XrpTransactionValidated(bytes32 govId, uint selectionIndex, string fromChain, bytes32[] bytes32s, uint[] uints);
```

Event occurs when a Bridge Validator submits a Signature for agreed Raw Transaction Data

* `bytes32 govId` : Unique Identifier of Governance
* `uint selectionIndex` : Selection Data Index
* `string fromChain` : Chain Symbol requesting bridging
* `bytes32[] bytes32s` : Bytes32 Data Array corresponding to Selection Data
* `uint[] uints` : Bytes32 Data Array corresponding to Selection Data

## Interface

```bash
pragma solidity 0.5.0;

interface XrpBridge {
    function getVersion() public pure returns(string memory);
    function getStepStatus(bytes32 govId) public view returns(bool needSuggest, bool needRelaySuggestion, bool needRelaySelection, uint dataIndex, uint suggestIndex, uint selectionIndex);
    function getSwapDataArray(bytes32 govId, uint dataIndex) public view returns(bytes32[] memory bytes32s, uint[] memory uints);
    function getGovInfoArray(bytes32 govId) public view returns(uint[] memory uints, bytes32[] memory bytes32s);
    function getSuggestion(uint types, bytes32 govId, uint index) public view returns(uint swapIndex, address[] memory validators, bytes32[] memory signatureHashs, uint fee, uint seq);
    
    function addBridgeInfo(string memory chain, address mig, uint[] memory uints, bytes32[] memory bytes32s, bytes memory comment) public;
    function removeBridgeInfo(string memory chain) public;
    
    function relaySwap() public;
    function validateSwap(bytes32[] memory sigs) public;
    
    function suggestTransaction(bytes32 govId, uint swapIndex, address[] memory validators, bytes32[] memory sigHashs, uint fee, uint seq) public;
    function relayTransactionSuggested(bytes32 govId, uint suggestIndex) public;
    function validateTransactionSuggested(bytes32 govId, uint suggestIndex, address validator, uint8 vSig, bytes32 rSig, bytes32 sSig) public;
    
    function relayTransactionSelected(bytes32 govId, uint selectionIndex) public;
    function validateTransactionSelected(bytes32 govId, uint selectionIndex, address validator, uint8[] memory vSigs, bytes32[] memory rSigs, bytes32[] memory sSigs) public;
}
```
