🎟️AdvertisingToken.sol

an ERC-721 Token, holding marketing value through strategic partnerships

AdvertisingToken.sol

  • The contract should track which reviews have been addressed to avoid issuing tokens multiple times for the same action

  • Advertisement Booking: A system to manage the booking of advertisement slots, which should ensure that once a slot is booked using tokens, it is not available to others until the slot expires

  • Transferring Tokens: Companies should be able to transfer tokens to influencers or strategic partners if that's part of the marketing strategy

  • Companies earn tokens by responding to negative reviews. The smart contract will need a function to mint new tokens when a company addresses a review

  • Companies redeem tokens for advertising space/time. The contract would need a redemption function that burns the tokens and logs the redemption for advertising.

  • Only authorized accounts , the application owner or moderators) can issue tokens to companies after verifying that a review has been addressed ( we will need to create a consensus mechanism like a DAO when we reach critical number of users and companies


Will give a breakdown of the codebase here after the Chainlink Block Magic Hackathon submission date June 2nd at 11:00pm

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract AdvertisingToken is ERC20, Ownable {
    struct AdvertisementSlot {
        address company;
        uint256 startTime;
        uint256 endTime;
        bool booked;
    }

    mapping(uint256 => AdvertisementSlot) public adSlots;
    uint256 public nextSlotId;

    struct ReviewStatus {
        bool addressed;
        bool rewarded;
    }

    mapping(bytes32 => ReviewStatus) public reviewStatuses;

    event SlotBooked(address indexed company, uint256 indexed slotId, uint256 startTime, uint256 endTime);
    event TokensTransferred(address indexed from, address indexed to, uint256 amount);
    event TokensRedeemed(address indexed company, uint256 amount);
    event ReviewAddressed(bytes32 indexed reviewId, address indexed company);

    constructor(uint256 initialSupply) ERC20("AdvertisingToken", "ADT") {
        _mint(msg.sender, initialSupply);
    }

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function addressReview(bytes32 reviewId) public {
        require(!reviewStatuses[reviewId].addressed, "Review already addressed");
        reviewStatuses[reviewId].addressed = true;
        emit ReviewAddressed(reviewId, msg.sender);
    }

    function rewardTokensForReview(bytes32 reviewId, address company) public onlyOwner {
        require(reviewStatuses[reviewId].addressed, "Review not addressed");
        require(!reviewStatuses[reviewId].rewarded, "Tokens already rewarded");
        reviewStatuses[reviewId].rewarded = true;
        _mint(company, 100 * 10**18); // Mint 100 tokens
    }

    function bookAdSlot(uint256 startTime, uint256 endTime) public {
        require(balanceOf(msg.sender) >= 100 * 10**18, "Insufficient tokens");
        require(startTime < endTime, "Invalid time range");

        adSlots[nextSlotId] = AdvertisementSlot({
            company: msg.sender,
            startTime: startTime,
            endTime: endTime,
            booked: true
        });

        _burn(msg.sender, 100 * 10**18); // Burn 100 tokens for booking
        emit SlotBooked(msg.sender, nextSlotId, startTime, endTime);
        nextSlotId++;
    }

    function transferTokens(address to, uint256 amount) public {
        _transfer(msg.sender, to, amount);
        emit TokensTransferred(msg.sender, to, amount);
    }

    function redeemTokensForAd(address company, uint256 amount) public onlyOwner {
        require(balanceOf(company) >= amount, "Insufficient tokens");
        _burn(company, amount);
        emit TokensRedeemed(company, amount);
    }
}


// i on you reviews - rosalone labs
Purpose of Advertising Token

Part of the dApp purpose is to get companies to work together with the users of their services or products in a more personal way. That being said, strategic partnerships with influencers is an avenue worth exploring - where our tokens can be traded to influencers in exchange for a post about the company's services in secondary market.

Last updated