Здравствуйте. Я, кажется, когда-то писал про то, что у нас мало используются custom_json транзакции. Расскажу, что это такое, что они позволяют делать и как улучшить ситуацию в плане использования и предложу несколько идей реализации.
Что такое custom_json транзакции
Это такой вид транзакций, где могут быть любые данные, представленные в JSON формате. Приведу операцию в get_account_history @hipster за то, что в его аккаунте был пример:
"custom_json",
{
"required_auths": [],
"required_posting_auths": [
"hipster"
],
"id": "follow",
"json": "["follow\",{"follower":"hipster\","following":"someguy123\","what":["blog"]}]"
}
Также пример от @xtar, который покажет вам, что не только подписку с их помощью можно делать:
"custom_json",
{
"required_auths": [],
"required_posting_auths": [
"xtar"
],
"id": "bookchain",
"json": "{"bookchain":{"operations":[{"name":"book\","op":"create\","fields":{"book_id":1,"book_author":"автор\","book_form":"sti\","book_main_genre":"poe\","book_more_genres":"lir\","book_tags":"tag\","book_title":"Title\","book_description":"Descr"}}],"signature":"HxxSI6I0ZOGexF1J1iOMKqS6O5BDpebTLGWEu72XjJ4eR8ynvAxUGoEJO9skfi7csicyKd\\/o1CZkxp4hRFOpWY0="}}"
}
Здесь написано, что JSON bookchain, действие - создание, поля:
"book_id" (Id книги):1,"book_author":"автор","book_form":"sti","book_main_genre":"poe" (Жанр книги),"book_more_genres":"lir", (Прочие жанры)"book_tags":"tag", (Теги книги)"book_title":"Title" (Заголовок книги, её название),"book_description":"Descr" (Описание)
То есть можно делать с их помощью всё, что угодно. Но о сложностях использования расскажу чуть позже.
Предлагаемые идеи:
- Можно сделать Custom_json операцию создания пользователя, а затем выводить список пользователей, авторизовывать их, проверяя публичные ключи, прописанные в JSON. В результате получим свою систему пользователей, которая не будет зависить от пользователей блокчейна, что позволит, например, сделать бесплатные регистрации, сохранив открытость и децентрализацию;
- Можно товары/услуги добавлять в виде постов, а можно - в виде custom_json, а затем выводить их;
- Можно при помощи custom_json добавлять какую-то статистику, например, курса GOLOS, а затем выборку делать из блокчейна, а не из базы данных, которая ненадёжна;
- Можно сделать каталог файлов, хранящихся в IPFS. Одним из полей будет ipfs_address, которое будет содержать адрес файла в сети IPFS;
- Можно сохранять свои заметки в зашифрованном виде, которые сможете прочитать только вы, авторизовавшись при помощи одного из ключей. Это позволит не засорять ленту закрытыми записями, но при этом хранить свои мысли децентрализовано, и поломки различные, глюки или удаления случайные вам будут не страшны.
Можно придумать многое другое. Давайте покажу пример создания custom_json транзакции с вашей заметкой. Правда шифрованием заниматься не будем, но если захотите, думаю найдёте, как это сделать (Сам пока этим не интересовался).
Создаём custom_json транзакцию с заметкой:
Для custom_json у нас есть broadcast golos.broadcast.customJson. Вот пример кода:
var wif = '5key' // Ваш ключ
var requiredAuths = ''; // Чаще всего пустой
var requiredPostingAuths = 'denis-skripnik'; // Укажу свой логин, так как транзакцию делаю я;
var id = 'notes';
const json = JSON.stringify(
["notes", {
operations: {
name: "note",
op:"create",
fields: {
note_id: 1,
note_tags: ["жизнь", "планы" ,"День"],
note_title:"Сделать завтра",
note_text: "Написать пост."
}
}
}]
)
golos.broadcast.customJson(wif, requiredAuths, requiredPostingAuths, id, json, function(err, result) {
console.log(err, result);
});
Здесь я сделал заметку с id 1, тегом "жизнь", заголовком ""Сделать завтра" и текстом "Написать пост".
Вот что я нашёл в истории своего аккаунта. Если вам тоже интересно, вот ссылка: http://ropox.tools/steemjs/api/account_history/get_account_history?blockchain=Golos.io&ws=wss%3A%2F%2Fws.golos.io&account=denis-skripnik&from%3D-1=-1&limit%3D100=10000&query%3D%7B%7D=%7B%22select_ops%22%3A%5B%22custom_json%22%5D%7D. А вот код:
[
83944,
{
"trx_id": "dc6a5bb068c565322481557e5e61c01285f98038",
"block": 20094787,
"trx_in_block": 2,
"op_in_trx": 0,
"virtual_op": 0,
"timestamp": "2018-09-18T18:52:03",
"op": [
"custom_json",
{
"required_auths": [],
"required_posting_auths": [
"denis-skripnik"
],
"id": "notes",
"json": "["notes\",{"operations":{"name":"note\","op":"create\","fields":{"note_id":1,"note_tags":["жизнь\","планы\","День"],"note_title":"Сделать завтра\","note_text":"Написать пост."}}}]"
}
]
}
]
]
Методы получения custom_json:
- Собирать в свою базу все операции, распределяя по таблицам. Так можно найти нужные нам custom_json операции и добавить в базу данных;
- Используя get_account_history с таким кодом в query:
{"select_ops":["custom_json"]}
Больше вариантов я не знаю. Если они есть, буду рад увидеть комментарии от знающих.
Предложение:
Очень не хватает метода API get_custom_json, который бы по id выводил список транзакций.
Примерный вариант:
golos.api.get_custom_json(id, limit, function(err, result) {
console.log(err, result);
});
Выводит custom_json по id. Можно ещё добавить автора (То, что идёт из requiredPostingAuths:
golos.api.get_custom_json(id, requiredPostingAuths, limit, function(err, result) {
console.log(err, result);
});
Надеюсь, понятно. Был бы рад увидеть сей функционал в @viz.world и Golos.
А пока:
- Создаём приложение с custom_json транзакциями;
- Получаем список пользователей;
- Обращаемся к их аккаунтам через get_account_history с фильтром операций;
- Выделяем то, что нам нужно: созданные нашим приложением custom_json операции;
- Закидываем их в базу данных и выводим на страницах.
Всё
Надеюсь, пост был интересен и полезен. Буду рад комментариям и репостам.
@denis-skripnik Денис, спасибо! Ответил на мой вопрос к VIZ про то, как своё магаз игровых айтемов завести на БЧ...
PS: фунелюблю имена полей с underscore в JSON. Кажись это не канонично для JSON.
Пожалуйста. Думал, что это просто понять. Но как по мне, делать базу данных из операций - это непросто, да ещё и трудоёмко для ресурсов сервера (Много перативки и диска должно быть).
Поэтому хочу метод для отображения.
Хотя склоняюсь к тому, чтобы тоже в своих сервисах складывать операции из БЧ в БД.
Не знал, что не канонично. Благодарю.
Вот первый попавшийся ишуй на гитхаб
Суть в том, что если есть underscore в ключах, то скорее всего будут проблемы при прямой десериализации.
Если же в качестве ключей юзать camelCase, то все вопросы по поводу "как сериализовать" сразу отпадают.
Это вообще не про Голос или Стим.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
alex2016, lilia, narin, andrvik, max-max, midnight, ruslandis, arsar, kotik, vict0r, semasping, ladyzarulem, zaria, lira, frodogrodno, kudesnikaltay, oksana0407, sterh, virt, voronchihin, vadimph, felicita, mr-nikola, victorskaz, dim447, duremarr, student61, mp42b, abloud, alexfisher, massatela, verdon, astramar, katarinka, benken, andrzhej, jahspear, anandasurya, apnigrich, olgaxx, osra111, pkrugloff, zolotova1703, esperos, get999, boliwar, daos, semitsvetik
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:
@denis-skripnik Давно жду, когда торренты в Голосе запилят на кастом-json
А почему не в виде постов? Когда-то создавали локальный Клиент, где 1 пост = 1 торрент, и был тег, по которому это всё фильтровалось.