На данный момент доступен код изменений хардфорка для проверки\тестирования разработчиками и делегатами в лайвтест-сети.
В ближайшее время планируется закончить доработки интерфейса под описываемые изменения, базовый функционал платных подписок для блогов и раздел NFT в кошельке. О чем напишу отдельно.
NFT-токены и коллекции
Идеи о том, что Голосу не хватает данного функционала часто звучали и от делегатов и от разработчиков, с учетом описанных мыслей @t3ran13 на GitHub и @bitwheeze, что обращал внимание "не хайпа ради, а как инструмент" в своем посте.
Посмотрим какое применение в сервисах они найдут :) Понятно что NFT можно использовать в качестве предметов коллекционирования, игр, инвестиционных продуктов, служить функциональным целям как доступ к чему-то, бонус при наличии NFT из конкретной коллекции...
NFT (non-fungible token, в переводе с англ. — невзаимозаменяемый токен) - отдельный вид токенов, каждый экземпляр которых уникален, и в конкретный момент времени им обладает только один аккаунт.
При принятии ХФ в блокчейн будут добавлены операции
nft_collection
nft_collection_delete
nft_issue
nft_transfer
nft_sell
nft_buy
nft_cancel_order
а также виртуальная операция (эвент) nft_token
, напр. для уведомлений о NFT-подарке, получения присваемого token_id.
Пример операции создания NFT-токена:
"nft_issue", {
"creator": "\"lex\"",
"name": "\"AERO\"",
"to": "\"lex\"",
"json_metadata": "\"{\\\"title\\\":\\\"Monkeys together\\\",\\\"description\\\":\\\"A group of skilled monkeys working together to build a civilized jungle.\\\",\\\"image\\\":\\\"https://www.topaz.so/cdn-cgi/image/width=512,quality=90,fit=scale-down,anim=true,onerror=redirect/https://ipfs.topaz.so//ipfs/bafybeig6bepf5ci5fyysxlfefpjzwkfp7sarj6ed2f5a34kowgc6qenjfa/6226.png\\\"}\"",
"extensions": "[]"
}
Делегатский параметр nft_issue_cost
определяет цену создания 1 NFT в токенах GBG, что поступает в фонд сообщества. В случае если сервису понадобилось сжечь NFT (освободить место на нодах), 50% платы за создание возвращаются на аккаунт.
Подробнее об использовании функционала NFT в документации к JS-библиотеке
https://github.com/golos-blockchain/libs/blob/0.9.56/golos-lib-js/docs/files/nft.md
С примерами:
- Создания NFT-коллекции
- Выпуска NFT-токенов в коллекции
- Выставления NFT-токенов на продажу
- Подарить (передать) NFT-токен
- Получения NFT-коллекций через API
- Получения NFT-токенов через API
- Получения NFT-ордеров через API
Для тестов использовать ноду-лайвсети c уже принятым 29 ХФ и 0.9.56 версию golos-lib-js.
Функционал платных подписок
При принятии хардфорка появится и функционал платных подписок. Разработчики смогут при создании игр, ботов, сервисов, взымать регулярные платежи в GOLOS или UIA, проверять через API подписан ли тот или иной пользователь и т.д.
3 варианта подписок:
Пожизненная подписка. Пользователь 1 раз вносит требуемую сумму, и блокчейн пожизненно считает его подписчиком, пока пользователь сам не отпишется.
Подписка с регулярными автоплатежами. Пользователь вносит сумму за первый период, например, 30 дней; затем каждые 30 дней блокчейн автоматически списывает такую же сумму с его баланса. Если однажды средств на балансе не хватит, то подписка станет неактивной. Пользователь сможет продлить ее, повторно внеся средства.
Подписка с регулярными автоплатежами и предоплатой. В этом варианте пользователь может внести сумму сразу за несколько периодов, сумма будет храниться на балансе подписки и с него переводиться автору. Однако этот вариант накладывает некоторые ограничения на автора.
В рамках функционала в блокчейне появятся операции:
paid_subscription_create
paid_subscription_update
paid_subscription_delete
paid_subscription_transfer
paid_subscription_cancel
а также виртуальные операции (эвенты) subscription_payment
и subscription_inactive
для уведомлений о новых спонсорах, напоминаний из-за недостаточности баланса для продления подписки...
Пример операции создания подписки в блогах:
"paid_subscription_create", {
"author": "\"lex\"",
"oid": "{\"app\":\"golos-blog\",\"name\":\"blog\",\"version\":1}",
"cost": "\"1000.000 GOLOS\"",
"tip_cost": "true",
"allow_prepaid": "false",
"interval": "2592000",
"executions": "4294967295",
"extensions": "[]"
}
Подробное описание функционала с примерами операций доступно в документации к JS-библиотеке
https://github.com/golos-blockchain/libs/blob/0.9.55/golos-lib-js/docs/files/paid_subscriptions.md
С примерами:
- Создания сущности для подписки
- Подписки пользователем на сущность
- Изменения условий подписки автором
- Получения подписчиков, проверки состояния подписки
- Получения платных подписок, созданных автором
- Получения подписок с точки зрения подписчика
- Отмены подписки
Для тестов использовать ноду-лайвсети c уже принятым 29 ХФ и 0.9.56 версию golos-lib-js.
Доработка хранения истории операций
Иногда для определенных целей требуется сохранять всю историю операций аккаунта за 7 лет, при этом плагин account_history
является наиболее "тяжелым" (занимающем большую часть места в шаредмемори нод).
Было доработано сохранение истории только для определенных аккаунтов, что позволяет включить плагин даже на делегатских нодах с 4 ГБ оперативной памяти.
Например, выключаем пропуск виртуальных операций, чтобы писались все skip-virtual-ops = false
Включаем сохранение мемо к трансферам store-memo-in-savings-withdraws = true
Добавляем плагин plugin = account_history
и отслеживаемые аккаунты track-account = rudex
На данном примере достаточно весьма легкой ноды, чтобы сохранять всю историю операций только по аккаунту биржи.
Доработка начислений GBG на сейф
Исправлен параметр is_forced_min_price
заметный по get_dynamic_global_properties, который с давних времен не мог переключаться в состояние нормы, чтобы при снижении процента долга включалось начисление % на хранимые GBG в сейфе.
После хардфорка, с учетом текущего процента выбранного делегатами, на GBG хранимые в сейфе будет начисляться 5% годовых. Скрин с тестовой сети:
Прочие правки
Добавлены тесты по новому функционалу
Доработано АПИ, используемое форумами в части дат последних сообщений в разделах
Проверить код изменений блокчейна
https://github.com/golos-blockchain/chain-node/compare/golos-v0.28.2...golos-blockchain:chain-node:livetest
Встретили ошибки, пишите в комментарии или ЛС
Сообщения от пользователей позволяют выявлять или задавать иной приоритет уже известным багам/ошибкам + планированию последующих задач.
Спонсорство
Заявка в фонд сообщества на 2350 $ (~1.7 млн. токенов GOLOS) не требуется.
Реализация описанных изменений проспонсирована @prizm
При желании спонсировать развитие конкретных функций, сервисов, инфраструктуры или иных задач - пишите (пост в блогах, в чат, Телеграм).
@lex, отлично. инструменты даны, теперь осталось запилить какие-нибудь сервисы на базе всего этого.
@ecurrex-ru, какие-нибудь будут 😂
@lex, я в почти безмолвном изумлении... :о !
Вот имхо по настоящему полезные фичи!
Надо будет потестировать, погонять. То, что нужно или нет. 🤔
Сразу вопрос
Что значит "сервису понадобилось"? То есть предполагается, что сервис будет сжигать экземпляры NFT? Не текущий "владелец"? Или владелец тоже может сжигать? Кому в этом случае вернутся 50%?
Продублирую вопрос из телеграм чата
Это да, мало того, что 5% за конвертацию GOLOS в GBG надо отдавать, так еще если цены космические установить, то сто раз подумаешь, создавать или нет. Зависит конечно, от того, сколько места будет на диске у делегатов жрать. По хорошему надо сделать цену зависимой от размера json в NFT. Кто то будет может создавать только с каким нибудь хэшем внутри на 64 байта, а кто то свои тексты будет туда пихать, на весь блок. Сколько он сейчас, 64к?
@bitwheeze, "nft_issue_cost": "15.000 GBG",
Так думаю это нижний предел, по которому придется продавать NFT токены. Создавать их чисто в утилитарных целях, имхо, будет дороговато. Лучше как выше написал, сделать цену в зависимости от размера. К примеру 2 GBG за каждые 64 байта.
@lex, вообщем прикинул размер json, какой может мне понадобиться, выходит около 200 байт наверное. Так что наверное "512 хватит всем (с)" :)
Осталось теперь заюзать nft. Я начинал делать кое что в этом направлении, но честно говоря забросил, там код еще в стадии набросков. Я думал NFT тему на голосе решили не делать, ничего не было слышно, потому просто перестал заниматься.
Месяц назад начал потихонечку делать блэкджек. 😎 Готово наполовину наверное. Сейчас пишу UI. А там посмотрим. Доделаю его, а потом наверное вернусь к той теме.
@bitwheeze, осталось еще позвать девченок и все. можно запускать свой собственный Голос 😂
@bitwheeze, а так, это ж универсал, хоть бонусы в блэкджеке НФТшками делать... или собери 3 из 36 нфт в коллекции X и получи доступ к блэкджек с ... 😎
@lex, наверное можно. Но тут надо посмотреть сначала, будет ли кто вообще играть. Просто так же nft печатать, себе в убыток. То-есть сначала надо заработать с пользователя нужный объем (15 GBG), что бы наградить его случайной коллекционной энэфтэшкой его за старания меня обогатить.
А так да, идея хорошая, владельцам наборов давать к примеру возможность делать сплит, дабл, уменьшать число колод итп, что бы повысить шансы. Они могут сжечь лишние и получить 7.5 GBG или попробовать продать.
@bitwheeze, посмотрим, может удастся доработать чтобы параметр шел ценой за 1 кб напр, кто хочет впихнуть условные 32 кб (половину блока), ну заплатит 32 x параметр, и хоть картинку туда в data64 внутрь, если $ есть )
Остальные бюджетно пихать 1 кб и норм 😊
@lex, Можно оставить и 512 байт. Даже 256. Какой нибудь UUID записать (36 Байт кажется) или author+permlink. Тоже достаточно. Или json типа
167 байт
Можно к примеру custom_json совершенно бесплатно занять 64кб на диске у делегатов, а в NFT записать номер блока, транзакции и номер операции в транзакции. 😎
@bitwheeze, диск это мелочи, там же речь не о блоклогс, а о шаредмемори, что в дорогой оперативке, т.е. НФТ своим размером занимает рам даже на делегатских, как и токены...
Но с учетом цены типа 5 гбг за 1 кб, это и станет ключевым волнорезом ) Что тебе нфт обойдутся по 5 гбг, а тому кто хочет воткнуть туда картинку в бейз64, все 50-100 гбг, захотят - велкам.
@bitwheeze, я неск месяцев не был уверен, поэтому заранее был статус хз 😂
это лучше чем у тебя было бы все готово, а НФТ так и не подвезли...
Так что удачи в трансформации набросков 👍️
@bitwheeze,
это как пример, "сервису", а возврат тому кто сжигает на null, да
@lex, а почему создание коллекции с постинг ключем?
@bitwheeze, и get_nft_token не работает почему то. Ничего не возвращает. Задал только owner: "lex", да и на странице тоже пусто в разделе токенов.
Я тут сегодня решил добавить NFT в библиотеку, тестировал немного. Тут споткнулся, так как не могу получить token_id. Может что то делаю не так или горшочек не варит.
@bitwheeze, ну и правки динамик цены за 1 кб уже в процессе, так что "дорогими" НФТшки на входе не будут.
@bitwheeze, а это пробовал?
С помощью специального евента вы можете получить token_id
выпуск-токена-в-коллекции
@lex, ха, сейчас проснулся, запустил снова get_nft_token, ничего не менял, а оно сработало, и на странице https://devwallet.golos.today/@lex/nft тоже теперь показывает токены. Вчера там было пусто. Наверное что то подкрутили?
Я просто как выше написал, добавлял в свою java библиотеку поддержку NFT, добавил операции, начал добавлять API, начал с get_nft_token, а оно застопорилось. Но теперь вроде ок.
@bitwheeze, кстати, если через UI, на вышеупомянутой страничке сжигать токены, список не обновляется.
@bitwheeze, интерфейс еще не готов, странно что оно вообще работает 😂
@bitwheeze, да, были правки АПИ, видимо ты поймал...
@bitwheeze, хз, предположу что раз нет распоряжения активами-токенами, то и актив излишен
но проще везде актив, попросим воркера глянуть этот момент...
@lex, НФТ-токены - хорошая идея. Буду следить за развитием ситуации. Спасибо.
@lex, красиво :)
@lex, @prizm Снимаю шляпу, спасибо 👍️
А по сути пару лет назад бы стоило добавить всё это, а теперь ляжет на полку, как мессенджер, форумы, приложение и прочее.
Ну или у вас уже есть какой то Road map на будущее 😊
@mrarturs, стоило бы нам собрать 600 битков 😂