Как создать децентрализованную DSP для интерактивных рекламных кампаний

Как создать децентрализованную DSP для интерактивных рекламных кампаний

24 марта 2023 г.

Индустрия цифровой рекламы претерпевает значительные изменения, обусловленные появлением новых технологий, таких как блокчейн, и растущим спросом на интерактивные рекламные кампании. В этой статье мы рассмотрим архитектуру децентрализованной платформы со стороны спроса (DSP), которая использует технологию блокчейн для предоставлять интерактивную рекламу с вознаграждением в виде токенов ERC-20 и NFT. Мы углубимся в технические детали и предоставим примеры кода Python и Solidity, чтобы помочь вам понять внутреннюю работу этого DSP нового поколения.

Photo by Art Rachen on Unsplash

Взаимодействие смарт-контракта

Основой нашего децентрализованного DSP является набор смарт-контрактов, которые управляют рекламными кампаниями, вознаграждениями пользователей и чеканка NFT.

Вот простой пример смарт-контракта Solidity для управления рекламными кампаниями:

pragma solidity ^0.8.0;

contract AdCampaign {
    struct Campaign {
        uint256 id;
        address advertiser;
        string ipfsHash;
        uint256 budget;
        uint256 reward;
        bool isActive;
    }

    uint256 private campaignCounter;
    mapping(uint256 => Campaign) public campaigns;

    function createCampaign(string memory ipfsHash, uint256 budget, uint256 reward) public {
        campaignCounter++;
        campaigns[campaignCounter] = Campaign(campaignCounter, msg.sender, ipfsHash, budget, reward, true);
    }

    function toggleCampaignStatus(uint256 campaignId) public {
        require(campaigns[campaignId].advertiser == msg.sender, "Not the owner of the campaign");
        campaigns[campaignId].isActive = !campaigns[campaignId].isActive;
    }
}

Чтобы взаимодействовать с этими смарт-контрактами с помощью Python, мы воспользуемся популярной библиотекой Web3.py.

Вот пример того, как создать новую рекламную кампанию с помощью приведенного выше смарт-контракта:

from web3 import Web3

# Connect to the Ethereum node
w3 = Web3(Web3.HTTPProvider('<YOUR_ETHEREUM_NODE_URL>'))

# Load the contract ABI and address
contract_abi = [...]  # Contract ABI goes here
contract_address = '0x123...'

# Initialize the contract object
contract = w3.eth.contract(address=contract_address, abi=contract_abi)

# Define the advertiser's account
advertiser_account = w3.eth.account.privateKeyToAccount('<YOUR_PRIVATE_KEY>')

# Create a new ad campaign
ipfs_hash = 'QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u'
budget = 1000
reward = 10

# Estimate gas
gas_estimate = contract.functions.createCampaign(ipfs_hash, budget, reward).estimateGas({'from': advertiser_account.address})

# Send the transaction
transaction = contract.functions.createCampaign(ipfs_hash, budget, reward).buildTransaction({
    'from': advertiser_account.address,
    'gas': gas_estimate,
    'gasPrice': w3.eth.gasPrice,
    'nonce': w3.eth.getTransactionCount(advertiser_account.address)
})

signed_transaction = advertiser_account.signTransaction(transaction)
transaction_hash = w3.eth.sendRawTransaction(signed_transaction.rawTransaction)

Децентрализованное хранилище

Photo by fabio on Unsplash

Для хранения рекламного контента и метаданных мы будем использовать IPFS (InterPlanetary File System), децентрализованную систему хранения.

В Python мы можем использовать библиотеку ipfshttpclient для добавления и извлечения контента из IPFS:

import ipfshttpclient

client = ipfshttpclient.connect('/ip4/127.0.0.1/tcp/5001/http')

# Add a file to IPFS
with open('ad_content.json', 'rb') as f:
result = client.add(f)
ipfs_hash = result['Hash']

# Retrieve content from IPFS
content = client.cat(ipfs_hash)

Таргетинг на пользователей и интеграция данных

Для таргетинга пользователей нам потребуется доступ как к данным в сети, так и к данным вне сети. Для взаимодействия с данными в сети мы можем использовать Web3.py, как показано ранее.

Для данных вне сети мы можем использовать децентрализованное решение оракула, такое как Chainlink. Вот пример контракта Solidity, который взаимодействует с Chainlink для получения данных вне сети:

pragma solidity ^0.8.0;

import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol";

contract AdDataOracle is ChainlinkClient {
    uint256 public adPerformance;

    address private oracle;
    bytes32 private jobId;
    uint256 private fee;

    event AdPerformanceUpdated(uint256 performance);

    constructor(address _oracle, bytes32 _jobId, uint256 _fee) {
        setPublicChainlinkToken();
        oracle = _oracle;
        jobId = _jobId;
        fee = _fee;
    }

    function requestAdPerformanceData() public {
        Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
        req.add("get", "https://example.com/api/ad_performance");
        req.add("path", "performance");
        sendChainlinkRequestTo(oracle, req, fee);
    }

    function fulfill(bytes32 _requestId, uint256 _performance) public recordChainlinkFulfillment(_requestId) {
        adPerformance = _performance;
        emit AdPerformanceUpdated(_performance);
    }
}

Показ объявлений и интеграция с издателем

Photo by Anthony Rosset on Unsplash

Для показа рекламы нам понадобится JavaScript SDK или API, которые издатели могут интегрировать в свои веб-сайты или приложения. Этот SDK будет взаимодействовать со смарт-контрактами и IPFS для извлечения и отображения рекламного контента.

Вот упрощенный пример того, как это может выглядеть в JavaScript:

// Load Web3
const Web3 = require('web3');

// Connect to Ethereum node
const web3 = new Web3('<YOUR_ETHEREUM_NODE_URL>');

// Load the contract ABI and address
const contractABI = [...] // Contract ABI goes here
const contractAddress = '0x123...';

// Initialize the contract object
const contract = new web3.eth.Contract(contractABI, contractAddress);

// Fetch ad campaign details
const campaignId = 1; // Example campaign ID
const campaign = await contract.methods.campaigns(campaignId).call();

// Load ad content from IPFS
const ipfs = require('ipfs-http-client');
const ipfsClient = ipfs.create();

const adContent = JSON.parse(await ipfsClient.cat(campaign.ipfsHash));

// Render ad content on the publisher's website or app
// (actual rendering logic will depend on the specific platform and ad format)

Заключение

В этой статье мы рассмотрели техническую архитектуру децентрализованной DSP, которая обрабатывает интерактивные рекламные кампании и вознаграждает пользователей токенами ERC-20 и NFT. Используя технологию блокчейна, децентрализованное хранилище и оракулы, мы можем создать рекламную платформу нового поколения, обеспечивающую большую прозрачность, безопасность и вовлеченность пользователей. Хотя приведенные примеры упрощены, они должны дать вам прочную основу для создания собственного децентрализованного DSP.


Главное изображение Adem AY на Unsplash

Также опубликовано здесь < /p>


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE