//SPDX-License-Identifier: UNLICENSED
pragma solidity >0.5.0 <0.9.0;
//EPNS Core Contract Interface
interface IEPNSCoreInterface {
function createChannelWithFees(
ChannelType _channelType,
bytes calldata _identity,
//EPNS Comm Contract Interface
interface IEPNSCommInterface {
function sendNotification(address _channel,
//ERC20 Interface to approve sending dai
interface IERC20Interface {
function approve(address spender, uint256 amount) external returns (bool);
address public EPNS_CORE_ADDRESS =0x97D7c5f14B8fe94Ef2b4bA589379f5Ec992197dA;
address public EPNS_COMM_ADDRESS=0x87da9Af1899ad477C67FeA31ce89c1d2435c77DC;
address public DAI_ADDRESS = 0xFf795577d9AC8bD7D90Ee22b6C1703490b6512FD;
address payable public owner;
owner = payable(msg.sender);
require(msg.sender == owner, "Only owner can perform the task");
function createChannelWithEPNS(string memory _ipfsHash) public onlyOwner {
IERC20Interface(DAI_ADDRESS).approve(EPNS_CORE_ADDRESS, 50 ether);
IEPNSCoreInterface(EPNS_CORE_ADDRESS).createChannelWithFees(
IEPNSCoreInterface.ChannelType.InterestBearingOpen,
// To send notification when the contract receives fund
receive() external payable {
IEPNSCommInterface(EPNS_COMM_ADDRESS).sendNotification(address(this), address(this), bytes(string(
"QmSyKMiRvpQpiaUyXR3BmCXjSme6xFNxypD5Jn8GTBAELM"
function transferFundToOwner() public payable onlyOwner{
owner.transfer(address(this).balance);
function checkAmount() public view returns(uint){
return address(this).balance;