Индустрия цифровой рекламы претерпевает значительные изменения, обусловленные появлением новых технологий, таких как блокчейн, и растущим спросом на интерактивные рекламные кампании. В этой статье мы рассмотрим архитектуру децентрализованной платформы со стороны спроса (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>