April 10, 2023

Контрактні позиції

Що таке ContractPosition? Об’єкт ContractPosition представляє позицію, яка не представлена ​​стандартом маркера. Часто саме ці позиції важче відстежувати простими програмами-гаманцями, і це особливо те, де Zapper блищить у декодуванні цих позицій із даних блокчейну. Ці позиції можна використовувати для представлення:

•Фармові позиції в контрактах на ставки SushiSwap Master Chef

•Облігації в Olympus або інші програми, які прагнуть володіти своєю ліквідністю

•Позиції з кредитним плечем, такі як котли Abracadabra або алхіміки Alchemix

•Позики позик у Compound (Примітка: позиції постачання представлені жетонами!)

Як правило, ви можете визначити ContractPosition як той, який ви не можете додати до свого гаманця Metamask, оскільки вони не токенізовані! Наприклад, якщо ви внесете токен на ферму SushiSwap Master Chef, ваш гаманець, швидше за все, не зможе відобразити цю позицію.

Що таке ContractPositionFetcher?
В Zapper API клас ContractPositionFetcher динамічно перераховує одну групу контрактних позицій. Групи контрактних позицій мають спільні властивості, наприклад APY для ферм SushiSwap або ліміти застави для алхіміків Alchemix. Таким чином, ми оголошуємо унікальні класи стратегії для кожної групи контрактних позицій, які ми хочемо індексувати в Zapper.

Які властивості підрядної позиції? У наведеній нижче таблиці описано властивості об’єкта ContractPosition. Ви побачите, що AppToken досить багато збігається, за винятком того, що ContractPosition не має властивостей ERC20 і не може визначити ціну, оскільки він не взаємозамінний.

Власність Приклад Опис

Що таке атрибути даних?

Поле dataProps в об’єкті ContractPosition використовується для доповнення об’єкта контрактної позиції додатковими властивостями даних. Ці властивості можна використовувати в інших місцях програми.
Приклад: у Maker користувач може відкрити сховище, внісши заставу, наприклад ETH або WBTC. Потім користувач може карбувати DAI до певного коефіцієнта забезпечення. Цей коефіцієнт забезпечення можна додати до ContractPosition dataProps.

Що таке рекламний реквізит?

Поле displayProps в об’єкті ContractPosition використовується Zapper Web і Zapper Mobile для надання значущої інформації користувачам Zapper про цю контрактну позицію.

ПРИМІТКА. Зрештою ми маємо намір підтримувати властивості secondaryLabel, tertiaryLabel і statsItems, але наразі ми показуємо поле мітки лише в Zapper Web і Zapper Mobile.

Власність Приклад Опис

FAQ

Яку адресу я маю використовувати для ContractPosition?

Поле адреси має бути адресою контракту, який користувач може використати для введення позиції. Zapper API може перехресно посилатися на транзакції користувача на ці адреси, щоб визначити, чи користувач колись взаємодіяв із цією програмою.

Приклад 1: у SushiSwap токени пулу вносяться в контракт ферми під назвою MasterChefV2, але бонусні винагороди можна вимагати з окремих контрактів Rewarder. Оскільки користувач вносить кошти, взаємодіючи з контрактом MasterChefV2, ви будете використовувати цю адресу в полі адреси. Може бути корисним додати адресу Rewarder до поля dataProps контрактної позиції.

Приклад 2: у Yield Protocol сховище відкривається шляхом взаємодії з контрактом Ladle, але кошти зберігаються в контракті Cauldron. У цьому випадку може виникнути спокуса використовувати адресу Cauldron, але використовуйте адресу Ladle, оскільки це точка входу коштів користувача в протокол.

Що таке ключ? Чому це корисно? Подібно до властивості ключа AppToken, ключ є унікальним ідентифікатором об’єкта позиції, який використовується для агрегування балансів позицій контракту за кількома адресами.

Зазвичай ви можете ігнорувати налаштування ключа, і Zapper API встановить значення за замовчуванням як md5(<address>:<network>:<app_id>:<tokens_keys>), де tokens_keys — це <app_id>:<network>:<address> :<metatype> для кожного токена в масиві токенів позиції контракту.

У деяких випадках це не унікальний ідентифікатор, і в цьому випадку ви можете додати додаткову інформацію через параметр даних positionKey, який потім буде використано для створення ключа через md5(<address>:<network>:<app_id>: <tokens_keys>:<position_key>).

Приклад 1: у FloorDAO користувач може продати дробові токени NFT у скарбницю протоколу в обмін на облігацію токена FLOOR, яка надається протягом певного періоду часу. Усі облігації знаходяться на тій самій адресі та мають однакові базові токени: право власності та вимога FLOOR. У результаті всі ці позиції мають збігаються ключові значення.

Ми можемо помітити, що кожна облігація має marketIndex, і тому ми можемо повернути positionKey: marketIndex у наших атрибутах даних, щоб створити ключ як md5(<app_id>:<network>:<address>:<market_index>), генеруючи різні клавіші для кожної з цих позицій і уникнення зіткнень.

Original - https://docs.zapper.fi/docs/concepts/contract-positions