Бастион Бартер (Barteron)
Транзакция Pocketnet версии 2
В новой системе консенсуса транзакции предназначены для гибкого использования. Это означает, что поля полезной нагрузки могут быть заполнены клиентом в произвольном формате, за исключением определенных полей, которые используются для консенсуса.
Поля верхнего уровня используются для реализации правил консенсуса и будут проверяться на уровне узла. Поля второго уровня (объект p
, Payload
) могут быть заполнены свободно для реализации функциональности приложения.
Для реализации нестандартной логики данные Payload
могут использоваться узлом для индексации дополнительных таблиц. Соглашения о структуре данных должны быть описаны и согласованы с кодом приложения.
Транзакции Barteron имеют переходную форму перед Transaction v2 и начинают использовать механизмы нового консенсуса и индексации дополнительных данных.
Общая структура полей транзакции
{
"s1": <ADDRESS>, # Зарезервировано
"s2": <VARIANT>, # Зарезервировано
"s3": <VARIANT>, # Зарезервировано
"s4": <VARIANT>, # Зарезервировано
"s5": <VARIANT>, # Зарезервировано
"i1": <VARIANT>, # Зарезервировано
"p": {
"s1": <CUSTOM>,
"s2": <CUSTOM>,
"s3": <CUSTOM>,
"s4": <CUSTOM>,
"s5": <CUSTOM>,
"s6": <CUSTOM>,
"s7": <CUSTOM>
}
}
Аккаунт Barteron
Код OP_RETURN
6272746163636f756e74
Обязательные элементы payload:
{
"p": {
"s4": {
// Разрешенные фиксированные теги аккаунта для бартера
"a": [
<TAG>,
<TAG>,
...
],
"g": <GEOHASH>,
"r": <RADIUS>
}
}
}
Предложение Barteron
Код OP_RETURN
6272746f66666572
Обязательные элементы payload:
{
"p": {
"s1": "язык",
"s2": "заголовок",
"s3": "описание",
"s4": {
// Общий тег предложения
"t": <TAG>,
// Разрешенные теги предложения для бартера
"a": [
<TAG>,
<TAG>,
...
],
"c": <CONDITION>
},
"s5": [
"url_изображения_1",
"url_изображения_2"
],
"s6": "геохеш локации",
"s7": <не_используется>,
"i1": <цена>
}
}
API Barteron
Получение транзакций аккаунтов
> /rpc/getbarteronaccounts [ <адрес1>, <адрес2>, ... ]
{
"result": "success",
"data": [
{
"hash": "d574b6389d91c42b37cd8bc5ec257ceb803986ad38ebb83cf7fdabee34fe9af7",
"type": 104,
"height": 1063,
"blockHash": "031e4da9305a5d9e8269155a9ad2586c4945bf560c89c2ee584663687a0fad4f",
"time": 1690098322,
"s1": "muA1gPR5JjsxZbeCj7HB2wrx4h3Ky8iHY3",
"p": {
"s4": "{\"t\": <TAG>, \"a\": [1, 2, 3, 4, 5], \"c\": <CONDITION>}"
},
"additional": {
"regdate": 1690012312,
"rating": 35
}
}
]
}
Примечание: rating
- это целое число, представляющее float * 10, поэтому 35 означает, что рейтинг пользователя 3.5
Получение информации о предложениях по адресу
> /rpc/getbarteronoffersbyaddress <адрес>
{
"result": "success",
"data": [
{
"hash": "2e3d9b2c5ee988c2462d4a9a35be6986e8124092b62adf651d0b7d7cbcd11697",
"type": 211,
"height": 1068,
"blockHash": "d6893b30850b3fad44e0da7296d14e099fe6c8f3a54e26437d9a93b47bf403b4",
"time": 1690198349,
"s1": "n1GN91byHmHGvvKTsDp15dcQzF5cekVCPy",
"s2": "2e3d9b2c5ee988c2462d4a9a35be6986e8124092b62adf651d0b7d7cbcd11697",
"p": {
"s4": "{\"t\": <TAG>, \"a\": [1, 2, 3, 4, 5], \"c\": <CONDITION>}"
}
}
]
}
Получение информации о предложениях
> /rpc/getbarteronoffersbyroottxhashes [ <хеш_транзакции1>, <хеш_транзакции2>, ... ]
{
"result": "success",
"data": [
{
"hash": "2e3d9b2c5ee988c2462d4a9a35be6986e8124092b62adf651d0b7d7cbcd11697",
"type": 211,
"height": 1068,
"blockHash": "d6893b30850b3fad44e0da7296d14e099fe6c8f3a54e26437d9a93b47bf403b4",
"time": 1690198349,
"s1": "n1GN91byHmHGvvKTsDp15dcQzF5cekVCPy",
"s2": "2e3d9b2c5ee988c2462d4a9a35be6986e8124092b62adf651d0b7d7cbcd11697",
"p": {
"s4": "{\"t\": <TAG>, \"a\": [1, 2, 3, 4, 5], \"c\": <CONDITION>}"
}
}
]
}
Получение ленты предложений
> /rpc/getbarteronfeed <JSON_ЗАПРОС>
{
"result": "success",
"data": [
{ экземпляр_предложения },
{ экземпляр_предложения },
...
]
}
<JSON_ЗАПРОС>
{
"lang": "en", // en, ru и т.д.
"tags": [1,2,3], // Теги для фильтрации предложений
"location": "ABC", // локация как 'ABC%'
"priceMax": 1000, // 0 для неиспользования
"priceMin": 0, // 0 для неиспользования
"search": "Строка для полнотекстового поиска в Заголовке и Описании",
// Пагинация
"topHeight": 100, // Верхняя высота для начала пагинации
"pageStart": 0, // Номер первой страницы
"pageSize": 10, // Количество предложений на странице
"orderBy": "height", // height | location | price
"orderDesc": true, // true | false
}
Получение потенциальных сделок по предложению
> /rpc/getbarterondeals <JSON_ЗАПРОС>
{
"result": "success",
"data": [
{ экземпляр_предложения },
{ экземпляр_предложения },
...
]
}
<JSON_ЗАПРОС>
{
"addresses": ["АДРЕС1", "АДРЕС2"], // Фильтр потенциальных предложений с этими адресами аккаунтов
"excludeAddresses": ["АДРЕС3", "АДРЕС4"], // Фильтр потенциальных предложений, исключая предложения с этими адресами
"location": "v3g9s%", // Выражение на языке SQLite3 для использования с оператором `LIKE` при сравнении локаций
"priceMax": 1000, // Максимальная цена предложения
"priceMin": 10, // Минимальная цена предложения
"search": "%some text%", // Полнотекстовый поиск в заголовке и описании предложения
"mytags": [1,3,4], // Фильтр потенциальных предложений по тегам, на которые они обмениваются
"theirTags": [5,6,7], // Фильтр потенциальных предложений по их тегам
// Пагинация
"topHeight": 100, // Верхняя высота для начала пагинации
"pageStart": 0, // Номер первой страницы
"pageSize": 10, // Количество предложений на странице
"orderBy": "height", // height | location | price
"orderDesc": true, // true | false
}
Примечание: location
и search
являются регулярными выражениями в следующем формате: Символ процента ("%") соответствует любой последовательности из нуля или более символов в строке. Подчеркивание ("_") соответствует любому одиночному символу в строке. Любой другой символ соответствует самому себе или его эквиваленту в нижнем/верхнем регистре (сравнение без учета регистра)
Получение потенциальных комплексных сделок (3-сторонний поиск)
> /rpc/getbarteroncomplexdeals <JSON_ЗАПРОС>
{
"result": "success",
"data": [
{
"target": { экземпляр_предложения },
"intermediates": [
{ экземпляр_предложения },
{ экземпляр_предложения },
...
]
},
{
"target": ...
},
...
]
}
<JSON_ЗАПРОС>
{
"myTag": 10,
"theirTags": [1,2,3],
"location": "ABC%",
"excludeAddresses": ["АДРЕС1", "АДРЕС2"]
}
Примечание: location
и excludeAddresses
используются для фильтрации как целевых, так и промежуточных предложений
Получение деталей предложения
> /rpc/getbarteronoffersdetails <JSON_ЗАПРОС>
{
"result": "success",
"data": {
"offerScores": [
{ транзакция_оценки },
{ транзакция_оценки },
...
],
"comments": [
{ транзакция_комментария },
{ транзакция_комментария },
...
],
"commentScores": [
{ транзакция_оценки_комментария },
{ транзакция_оценки_комментария },
...
],
"accounts": [
{ транзакция_аккаунта_с_доп_информацией },
{ транзакция_аккаунта_с_доп_информацией },
...
]
}
}
<JSON_ЗАПРОС>
{
"offerIds": ["идентификатор_предложения1", "идентификатор_предложения2"], // Идентификаторы предложений для получения деталей
"includeAccounts": true,
"includeScores": true,
"includeComments": true,
"includeCommentScores": true
}
Примечание: транзакция_аккаунта_с_доп_информацией
имеет тот же формат, что и в запросе getbarteronaccounts
Примечание: Если includeSmth
не указан в запросе, то smth
вообще не будет в ответе json.
Примечание: транзакция_оценки
, транзакция_комментария
, транзакция_оценки_комментария
и транзакция_аккаунта_с_доп_информацией
- это просто сырые транзакции, и связи между ними и предложениями должны быть построены на стороне клиента.