Skip to content

Latest commit

 

History

History
35 lines (28 loc) · 3.8 KB

File metadata and controls

35 lines (28 loc) · 3.8 KB

Контракт продажи за фиксированную цену

Этот контракт используется когда продавец хочет продать нфт за фиксированную цену в тонах. Продавец деплоит контракт продажи и передает нфт на этот контракт. Покупатель отправляет на контракт продажи тоны + ~0.1 для оплаты газа. Контракт передает нфт покупателю, а тоны продавцу, после этого покупка считается совершенной. Продавец может отменить продажу в любой момент до покупки.

Перед покупкой необходимо убедиться что нфт достаточно 0.1 тон для смены владельца, если этого недостаточно то надо прислать больше тонов. Если нет возможности рассчитать сумму заранее, то для совершения покупки рекомендуется прислать full_price + 1 тон.

Все сообщения на этот контракт должны быть отправить с bounce флагом, контракт выбрасывает ошибки.

get_fix_price_data

  1. int is_complete - -1 означает что продажа уже совершена или отменена
  2. int created_at timestamp время создания контракта, используется чтобы одинаковые контракты имели разные адреса
  3. slice(MsgAddress) marketplace_address адрес контракта маркетплейса, этот адрес может отменить продажу и может управлять контрактом после продажи
  4. slice(MsgAddress) nft_address адрес нфт
  5. slice(MsgAddress|null) nft_owner_address адрес владельца нфт, этот адрес может отменить продажу и получит тоны в случае покупки
  6. int full_price цена нфт
  7. slice(MsgAddress) marketplace_fee_address адрес для комиссии маркетплейса
  8. int marketplace_fee размер комиссии маркетплейса
  9. slice(MsgAddress) royalty_address адрес для роялти коллекции
  10. int royalty_amount размер роялти коллекции
  11. int sold_at timestamp дата продажи нфт если продажа состоялась
  12. int query_id id запроса который привел к продаже нфт

Рекомендуемые проверки перед использованием контракта

  • хеш кода контракта должен совпадать с эталонным, нельзя полагаться только на гет методы
  • get_fix_price_data должен вызываться нормально, без ошибок
  • поля nft_owner_address, nft_address, marketplace_fee_address, royalty_address должны быть заполнены и содержать валидные адреса MsgAddress workchain 0
  • full_price должен быть больше чем сумма royalty_amount и marketplace_fee
  • is_complete равен 0, если это не так, то нет смысла отправлять тоны на этот контракт
  • необходимо проверить что нфт, на которую ссылается контракт продажи (nft_address), действительно принадлежит ему, то-есть у нфт owner_address это адрес контракта продажи