# BNB Chain

## Code

* `BscMinter.sol`
* `BscMinter.impl.sol`

## Events

### Swap

```bash
event Swap(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapNFT

```bash
event SwapNFT(string fromChain, bytes fromAddr, bytes toAddr, address tokenAddress, bytes32[] bytes32s, uint[] uints, bytes data);
```

This event occurs when a bridge operator performs NFT bridging with Klaytn Minter through the Orbit Bridge System.

* `string fromChain` : Chain Symbol requesting bridging
* `bytes fromAddr` : Address of the chain requesting bridging
* `bytes toAddr` : Address of chain to execute bridging
* `address tokenAddress` : Token Address minted by bridging execution
* `bytes32[] bytes32s` : Bytes32 data array used in the bridging consensus process
* `uint[] uints` : Uint data array used in the bridging consensus process
* `bytes data` : Execution data for Bridge Receiver

### SwapRequest

```bash
event SwapRequest(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests bridging to Klaytn Minter

* `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
* `address tokenAddress` : Token Address  requesting bridging
* `uint8 decimal` : Token Decimal requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

### SwapRequestNFT

```bash
event SwapRequestNFT(string toChain, address fromAddr, bytes toAddr, bytes token, address tokenAddress, uint8 decimal, uint amount, uint depositId, bytes data);
```

Event occurs when a user who uses the Orbit Bridge System requests NFT bridging to Klaytn Minter

* `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
* `address tokenAddress` : Token Address  requesting bridging
* `uint tokenId` : Token ID requesting bridging
* `uint amount` : Token Amount requesting bridging
* `uint depositId` : Unique Identifier of bridging request
* `bytes data` : Execution data requested for bridging

## Interface

```bash
pragma solidity 0.5.0;

interface BscMinter {
    function getVersion() public pure returns(string memory);
    function getTokenAddress(bytes memory token) public view returns(address);
    function getChainId(string memory _chain) public view returns(bytes32);
   
    function swap(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    function swapNFT(address hubContract, string memory fromChain, bytes memory fromAddr, bytes memory toAddr, bytes memory token, bytes32[] memory bytes32s, uint[] memory uints, bytes memory data, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public;
    
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount) public payable;
    function requestSwap(address tokenAddress, string memory toChain, bytes memory toAddr, uint amount, bytes memory data) public payable;
    
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr) public payable;
    function requestSwapNFT(address nftAddress, uint tokenId, string memory toChain, bytes memory toAddr, bytes memory data) public payable;
}
```
