diff --git a/contracts/connectors/chi.sol b/contracts/connectors/chi.sol new file mode 100644 index 0000000..5d1fe25 --- /dev/null +++ b/contracts/connectors/chi.sol @@ -0,0 +1,75 @@ +pragma solidity ^0.6.0; + +// import files from common directory +import { TokenInterface , MemoryInterface, EventInterface} from "../common/interfaces.sol"; +import { Stores } from "../common/stores.sol"; +import { DSMath } from "../common/math.sol"; + +interface CHIInterface { + function mint(uint256 value) external; + function free(uint256 value) external returns (uint256); + function balanceOf(address) external view returns (uint); +} + + +contract ChiHelpers is DSMath, Stores { + /** + * @dev CHI token Address + */ + function getCHIAddress() internal pure returns (address) { + return 0x0000000000004946c0e9F43F4Dee607b0eF1fA1c; + } +} + + +contract ChiResolver is ChiHelpers { + event LogMint(uint256 tokenAmt, uint256 getId, uint256 setId); + event LogBurn(uint256 tokenAmt, uint256 getId, uint256 setId); + + /** + * @dev Mint CHI token. + * @param amt token amount to mint. + * @param getId Get token amount at this ID from `InstaMemory` Contract. + * @param setId Set token amount at this ID in `InstaMemory` Contract. + */ + function mint(uint amt, uint getId, uint setId) public payable { + uint _amt = getUint(getId, amt); + _amt = _amt == uint(-1) ? 140 : _amt; + require(_amt <= 140, "Max minting is 140 chi"); + + CHIInterface(getCHIAddress()).mint(_amt); + + setUint(setId, _amt); + + emit LogMint(_amt, getId, setId); + bytes32 _eventCode = keccak256("LogMint(uint256,uint256,uint256)"); + bytes memory _eventParam = abi.encode(_amt, getId, setId); + emitEvent(_eventCode, _eventParam); + } + + /** + * @dev burn CHI token. + * @param amt token amount to burn. + * @param getId Get token amount at this ID from `InstaMemory` Contract. + * @param setId Set token amount at this ID in `InstaMemory` Contract. + */ + function burn(uint amt, uint getId, uint setId) public payable { + uint _amt = getUint(getId, amt); + CHIInterface chiToken = CHIInterface(getCHIAddress()); + _amt = _amt == uint(-1) ? chiToken.balanceOf(address(this)) : _amt; + + chiToken.free(_amt); + + setUint(setId, _amt); + + emit LogBurn(_amt, getId, setId); + bytes32 _eventCode = keccak256("LogBurn(uint256,uint256,uint256)"); + bytes memory _eventParam = abi.encode(_amt, getId, setId); + emitEvent(_eventCode, _eventParam); + } +} + + +contract ConnectCHI is ChiResolver { + string public name = "CHI-v1"; +} \ No newline at end of file