---
# System prepended metadata

title: Aurora

---

# Aurora

## Пайплайны

### Индексер

1. При появлении новой коллекции добавляем в базу `nftcollectionaurora`. Если это `ERC721Emumerable` то добавляем все токены по `token_index` в базу `nfttokenaurora`.

2. При появлении трансфера `ERC721` добавляем в `transferaurora` и обновляем владельца даного токена. 
Если данный трансфер был минтом, то добавляем токен в `nfttokenaurora` и выкачиваем метадату из `tokenURI(token_id)`. 
Изображение из метадаты добавляем в очередь на добавление в `Google Storage`, a атрибуты из метадаты добавляем в `tokenattributesaurora`. 
**TODO:** Заменить выкачивание метадаты в `LoadToken` на добавление таски очереди для атрибутов, чтобы не замедлять индексер дополнительными внешними запросами.
**TODO:** Переименовать таблицы с `nfttokenaurora` на `tokens_aurora`.

3. **TODO:**  Добавить обработку `event Match` `event Cancel` контракта(https://github.com/rarible/protocol-contracts/blob/b98afca9372689300a5c607d243cd8ed4dfacbb0/exchange-v2/contracts/ExchangeV2Core.sol#L26) в индексер. 
 
**TODO:** Использовать для хранения последнего блока `redis` вместо файла. 
**TODO:** Реализовать `sub_collection`-логику (???) 
**TODO:** Прогрузить недостающие блоки
**TODO:** Заменить `0x0000000000000000000000000000000000000000` на `NULL` в `transferaurora`

### Матчер

В матчер передаётся `Order` который добавляется в `orders`. Если в таблице найдется подходящий `Order` для исполнения, то возвращается его `uuid`. 

#### Аргументы ордера на продажу NFT

**makerAddress:0x4879158de12F0a27c56390AAaf12f83A64d7f76f** Адрес продавца

**makerAssetClass:0x73ad2146** id ERC721

**makerDataCollection:0x9c48a9820275b07c66ec1d6e871360130cea1b2a** Адрес колекции

**makerDataTokenId:1** id токена

**makerValue:1** колличество токенов

**makerSignature:0x9d6775f49828dad3de898a45d26b41d72a13c8f8810d0f3c1312dc7877e570fc45e9621e03c90a33929ac1612f92ba0ba920a40cdb241d772735288f80b9b3c61b** подпись ордера продавцом(пример: https://github.com/ClockRide/Apollo42-BackEnd/blob/a29a2ffdfdbf95cbfad49bff5273d2c8bc93e962/OrderMatcher/index.html#L187)

**takerAddress:0x0000000000000000000000000000000000000000** Адрес покупателя в данном случае любой покупатель

**takerAssetClass:0xaaaebeba** id ETH

**takerDataCollection:** Адрес колекции на обмен в данном случае пустой

**takerDataTokenId:** id токена на обмен в данном случае пустой

**takerValue:200** цена

**salt:1** нужно чтобы различать одинаковые ордера

**startTs:** начало продажи или пустое если нет ограничений

**finishTs:** конец продажи или пустое если нет ограничений

**dataType:0xffffffff** тип следующего аргумента

**orderData:0x**  информация о роялти в данном случае без

#### Аргументы ордера на покупку NFT

**makerAddress:0xf8264b1f7503b5e2d3870b3808f5bd55baee79da** Адрес покупателя

**makerAssetClass:0xaaaebeba** id ETH

**makerDataCollection:** 

**makerDataTokenId:**

**makerValue:200** цена

**makerSignature:0x66dd2d1d25a19c19a52415512bc460574dc28fb0c111271a632500778403bf6063ef446f127a2419964d428e155f4f1df0515de9d7efdb1a605b9c1ad183b4dd1b**

**takerAddress:0x0000000000000000000000000000000000000000**

**takerAssetClass:0x73ad2146** if ERC721

**takerDataCollection:0x9c48a9820275b07c66ec1d6e871360130cea1b2a** коллекция на покупку

**takerDataTokenId:1** покупаемый токен, пустое если нужно купить любой токен

**takerValue:1**

**salt:1**

**startTs:**

**finishTs:**

**dataType:0xffffffff**

**orderData:0x**

**TODO: (DONE)** Добавить `OrderMatcher` в бэкенд.

1. Пользователь содаёт ордер и подписывает его(пример https://github.com/ClockRide/Apollo42-BackEnd/blob/a29a2ffdfdbf95cbfad49bff5273d2c8bc93e962/OrderMatcher/index.html#L187).
2. Отправляется запрос в `OrderMatcher` с этим ордером
3. Если `OrderMatcher` вернул `uuid` ордера, то вызывается функция `matchOrders`(https://github.com/rarible/protocol-contracts/blob/b98afca9372689300a5c607d243cd8ed4dfacbb0/exchange-v2/contracts/ExchangeV2Core.sol#L150) c этими ордерами. Транзакцию отправляет пользователь.
4. После того как транзакция исполнится, индексер по ивентам деактивирует ордера.

**TODO:** Релизовать создание пользовательских `NFT`.