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

Non System Service Payment

Модуль "Non System Service Payment" является системным смарт-контрактом, который отвечает за обработку платежей за сервисы, в которых DAO Ace Stream не получает комиссию (например, системные платежи в рамках биржевого рынка прогнозов).

Все платежи в этой категории проводятся исключительно в XAT.

Оплата XAC возможна, но в данном случае сеть выполняет автоматический обмен XAC -> XAT на встроенной децентрализованной бирже перед проведением транзакции. Такой обмен происходит за рамками данного смарт-контракта, поэтому в данном разделе описан только платеж в XAT.

Алгоритм оплаты

  • если на счету плательщика достаточно XAT для оплаты, то:
    • данное количество XAT списывается с плательщика и сжигается
    • если lockedPool не пустой, такое же количество XAT вводится в оборот (перемещается из lockedPool в unlockedPool)
  • если на счету плательщика недостаточно XAT для оплаты, транзакция не может быть проведена

Псевдокод

def makeNonSystemServicePayment(sourceAccount, amount):
    """
    sourceAccount - the payer account
    amount - amount of payment in XAT
    """
    if sourceAccount.balance.xat >= amount:
        # Burn `amount` XAT from the source account
        sourceAccount.balance.xat -= amount
        System.BLACKHOLE.balance.xat += amount

        # Unlock at most `amount` XAT
        toUnlock = min(amount, System.lockedPool.amount)
        if toUnlock > 0:
            System.lockedPool.amount -= toUnlock
            System.unlockedPool.amount += toUnlock
    else:
        raise Exception('not enough tokens')