Bool Network
  • Introduction
    • What is Bool Network
    • Key features and benefits
    • Roadmap and Milestones
  • INTEROPERABILITY PROTOCOL
    • Overview
    • Architecture
    • Dynamic Hidden Committee (DHC)
      • Security trust flow
      • Lifecycle
      • Messaging Layer
    • Self Custody
      • Channels
      • Workflow
      • Escape Hatch
  • USER GUIDE
    • Beta Testnet
      • Getting Started
      • Network Information
      • Wallet Setup
      • Token Faucet
      • DHC Update
      • Node Server
        • Recommend List
        • Purchase Guide
      • Node Setup
        • DHC Node Setup
          • Local LAN Configuration for SGX
          • Run a chain via snapshot
        • Case Study
      • Node Management
        • For DHC Voter
        • For DHC Owner
  • EVM Ecosystem
    • Getting Started
      • Arbitrary Message Transmission
    • AMT Bridges
      • Network configuration
      • Create committees
      • Build a bridge
      • Bind Consumer to Anchor
      • Other operations
    • Smart Contracts
      • Primary Contracts
        • AnchorFactory
        • Messenger
        • Interfaces
          • IAnchorFactory
          • IMessenger
      • On-chain endpoint: Anchor
        • Anchor.sol
        • IAnchor.sol
      • BoolConsumerBase
        • BoolConsumerBase.sol
        • IBoolConsumerBase.sol
    • User Configurations
    • Application Examples
      • HelloWeb3.sol
    • Technical Reference
      • Chain IDs
      • Deployment Addresses
        • Devnet
        • Testnet
        • Alpha Mainnet
      • Faucet
  • Applications
    • B² Bool Bridge
      • B² Bool Bridge (Particle)
      • B² Bool Bridge (MetaMask)
    • Bool Swap
      • Pool Configuration
      • Deployment Addresses
        • Alpha Mainnet
  • Develop guide
    • Network Configuration
    • System Configuration
    • Testnet
      • Bool Chain
        • Node operators
        • Validators
      • DHC Nodes
        • Prerequisites
        • Quick Start
  • Advanced Tutorials
    • Token Bridge
  • Community and Support
    • Media Kit
    • FAQ
  • Official Links
    • GitHub
    • Twitter
    • Telegram
    • Discord
    • Youtube
    • Medium
Powered by GitBook
On this page
  1. EVM Ecosystem
  2. Smart Contracts
  3. BoolConsumerBase

BoolConsumerBase.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

import {ERC165, IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol";
import {IBoolConsumerBase} from "../interfaces/IBoolConsumerBase.sol";
import {IAnchor} from "../interfaces/IAnchor.sol";

abstract contract BoolConsumerBase is ERC165, IBoolConsumerBase {
    error NOT_ANCHOR(address wrongAnchor);

    bytes32 public constant PURE_MESSAGE = keccak256("PURE_MESSAGE");
    bytes32 public constant VALUE_MESSAGE = keccak256("VALUE_MESSAGE");

    address internal immutable _anchor;

    constructor(address anchor_) {
        _anchor = anchor_;
    }

    modifier onlyAnchor() {
        _checkAnchor(msg.sender);
        _;
    }

    function receiveFromAnchor(
        bytes32 txUniqueIdentification,
        bytes memory payload
    ) external virtual override onlyAnchor {}

    function _checkAnchor(address targetAnchor) internal view {
        if (targetAnchor != _anchor) revert NOT_ANCHOR(targetAnchor);
    }

    function _sendAnchor(
        uint256 callValue,
        address payable refundAddress,
        bytes32 crossType,
        bytes memory extraFeed,
        uint32 dstChainId,
        bytes memory payload
    ) internal virtual returns (bytes32 txUniqueIdentification) {
        txUniqueIdentification = IAnchor(_anchor).sendToMessenger{value: callValue}(
            refundAddress,
            crossType,
            extraFeed,
            dstChainId,
            payload
        );
    }

    function supportsInterface(
        bytes4 interfaceId
    ) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IBoolConsumerBase).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function anchor() external view override returns (address) {
        return _anchor;
    }
}
PreviousBoolConsumerBaseNextIBoolConsumerBase.sol

Last updated 1 year ago