micapass
  • welcome
    • 👋Welcome to micapass
    • 📄Regulatory Context
    • ✏️Solution
  • SC Integration
    • 📍Overview
    • 👓Proof Types (Claim Topics)
    • ⛏️Basic Integration
      • Steps for Basic Integration
      • Examples of Basic Integration
    • 🛠️Advanced Integration
      • Why Advanced Integration?
      • Steps for Advanced Integration
      • Example of Advanced Integration
    • 📬Smart contracts addresses
  • LINKS
    • Web
    • X
    • Get micapass
Powered by GitBook
On this page
  1. SC Integration
  2. Basic Integration

Examples of Basic Integration

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import {IMicapassBaseVerifier} from "../interfaces/IMicapassBaseVerifier.sol";
import {MicapassBasicClientInitializable} from "./MicapassBasicClientInitializable.sol";
import {Managerable} from "../extensions/Managerable.sol";

contract Client is MicapassBasicClientInitializable, Managerable {
    mapping(address => uint256) internal _userBalance;

    // Required for input formatting
    uint256[] public requiredDepositClaimTopics;
    uint256[] public requiredWithdrawalClaimTopics;

    function initialize(address micapassAddress) external initializer {
        __MicapassBasicClient_init(micapassAddress);
        __Managerable_init();
    }

    function deposit()
        external
        payable
        micapassProtected(msg.sender, CLAIM_TOPIC_KYC)
        micapassProtected(msg.sender, CLAIM_TOPIC_WALLET_SCREENING)
    {
        _userBalance[msg.sender] += msg.value;
    }

    function withdraw()
        external
        micapassProtected(msg.sender, CLAIM_TOPIC_WALLET_SCREENING)
    {
        require(_userBalance[msg.sender] > 0, "No funds deposited");
        uint256 userBalance = _userBalance[msg.sender];
        _userBalance[msg.sender] = 0;
        payable(msg.sender).transfer(userBalance);
    }

    function withdrawTo(
        address receiver
    )
        external
        mAddressNotZero(receiver)
        micapassProtected(msg.sender, CLAIM_TOPIC_WALLET_SCREENING)
    {
        require(_userBalance[msg.sender] > 0, "No funds deposited");
        uint256 userBalance = _userBalance[msg.sender];
        _userBalance[msg.sender] = 0;
        payable(receiver).transfer(userBalance);
    }
}

Last updated 1 year ago

⛏️