Перейти к содержанию

Distribute Subscriptions

Запускает механизм распределения дохода от подписок в премиум пуле.

Эта операция является системным смарт-контрактом.

Операция может быть запущена любым аккаунтом, но сеть примет только одну операцию раз в 24 часа.

Псевдокод

# Find all unprocessed subscriptions
subscriptions = [ account.getUnprocessedSubscriptions() in system.accounts if
  account.hasUnprocessedSubscriptions()
]

for subscription in subscriptions:
  # Get watch duration as a list of tuples (broadcaster, duration) where:
  # - broadcaster: broadcaster's account
  # - duration: total duration of watching broadcaster's content by
  #   subscription.owner during the specified period
  #
  # This data is retrieved from the layer 2
  watchDuration = getWatchDuration(
    subscription.pool,
    subscription.owner,
    subscription.createdAt,
    subscription.duration)

  # Get total duration
  totalDuration = 0
  for (broadcaster, duration) in watchDuration:
    totalDuration += duration

  # The amount of tokens to distribute among broadcasters is stored in
  # the "broadcastersShare" field of the subscription
  tokensToDistribute = subscription.broadcastersShare

  # Distribute tokens to broadcasters proportionally to the watch duration
  for (broadcaster, duration) in watchDuration:
    addTokens(broadcaster, tokensToDistribute * duration / totalDuration)

  # Remove processed subscription from the ledger
  removeSubscription(subscription.owner, subscription.id)

Описание

  • найти все необработанные подписки (это подписки, срок действия которых закончился, но доход от них еще не был распределен между бродкастерами)
  • с каждой найденной подпиской провести такие операции:
    • получить из второго уровня информацию о времени просмотра за период действия подписки (каких бродкастеров из данного пула смотрел владелец подписки и сколько времени)
    • токены в поле broadcastersShare подписки распределить между бродкастерами пропорционально времени просмотра
    • удалить обработанную подписку