interface BridgedERC1155I is IERC1155MetadataURI, ERC1155MintableI {

    event SignedBatchTransfer(address operator, address indexed from, address indexed to, uint256[] ids, uint256[] amounts, uint256 signedTransferNonce);

    /**
     * @dev True if this is the prototype, false if this is an active (clone/proxy) token contract.
     */
    function isPrototype() external view returns (bool);

    /**
     * @dev The address of the bridge data contract storing all addresses and chain info for this bridge
     */
    function bridgeData() external view returns (BridgeDataI);

    /**
     * @dev Do initial registration of a clone. Should be called in the same
     * transaction as the actual cloning. Can only be called once.
     */
    function initialRegister(address _bridgeDataAddress, string memory _orginalChainName, address _originalChainAddress) external;

    /**
     * @dev The name of the original chain this token is bridged from.
     */
    function originalChainName() external view returns (string memory);

    /**
     * @dev The address of this token on the original chain this is bridged from.
     */
    function originalChainAddress() external view returns (address);

    /**
     * @dev The signed transfer nonce for an account.
     */
    function signedTransferNonce(address account) external view returns (uint256);

    /**
     * @dev True if transfers are possible at this time.
     */
    function transferEnabled() external view returns (bool);

    /**
     * @dev Outward-facing function for signed transfer: assembles the expected data and then calls the internal function to do the rest.
     * Can called by anyone knowing about the right signature, but can only transfer to the given specific target.
     */
    function signedBatchTransfer(address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory signature) external;

    /**
     * @dev Outward-facing function for operator-driven signed transfer: assembles the expected data and then calls the internal function to do the rest.
     * Can transfer to any target, but only be called by the trusted operator contained in the signature.
     */
    function signedBatchTransferWithOperator(address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory signature) external;

}
/*
 * Interface for a Bridged ERC721 token.
 */
function isPrototype() external view returns (bool);

/**
 * @dev True if this is the prototype, false if this is an active (clone/proxy) token contract.
 */