Отправка транзакций в блокчейн STEEM/GOLOS на PHP [php-graphene-node-client v3.0.0]

11 месяцев назад
66 в открытый-код

Все верно - транзакции на PHP!

В релизн

  • broadcast (пример для голосования)
  • тулзы для broadcast
  • фикс багов для команд broadcast

Установка

рид онли, без транзакций
composer require t3ran13/php-graphene-node-client
с транзакциями

(детали и dockerfile тут)

установка компонентов

  • automake
  • libtool
  • libgmp-dev

установка расширений

broadcast_api темплейты операций

  • vote
<?php

use GrapheneNodeClient\Tools\ChainOperations\OpVote;
use GrapheneNodeClient\Tools\Transaction;

$answer = OpVote::doSynchronous(
    Transaction::CHAIN_STEEM, //Transaction::CHAIN_GOLOS
    'guest123',
    '5JRaypasxMx1L97ZUX7YuC5Psb5EAbF821kkAGtBj7xCJFQcbLg',
    'firepower',
    'steemit-veni-vidi-vici-steemfest-2016-together-we-made-it-happen-thank-you-steemians',
    10000
);

//пример ответа
//Array
//(
//    [id] => 5
//    [result] => Array
//        (
//            [id] => a2c52988ea870e446480782ff046994de2666e0d
//            [block_num] => 17852337
//            [trx_num] => 1
//            [expired] =>
//        )
//
//)

Tools: Transaction для блокчейна (broadcast)

<?php

use GrapheneNodeClient\Tools\Transaction;

/** @var CommandQueryData $tx */
$tx = Transaction::init($chainName);
$tx->setParamByKey(
    '0:operations:0',
    [
        'vote',
        [
            'voter'    => $voter,
            'author'   => $author,
            'permlink' => $permlink,
            'weight'   => $weight
        ]
    ]
);

if (Transaction::CHAIN_GOLOS === $chainName) {
    $connector = new GolosWSConnector();
} elseif (Transaction::CHAIN_STEEM === $chainName) {
    $connector = new SteemitWSConnector();
}
$command = new BroadcastTransactionSynchronousCommand($connector);
Transaction::sign($chainName, $tx, ['posting' => $publicWif]);

$answer = $command->execute(
    $tx
);

WARNING

Транзакции подписываются spec256k1-php функцией secp256k1_ecdsa_sign_recoverable($context, $signatureRec, $msg32, $privateKey) и если подпись не каноничная с первого раза, вы должны создать транзакцию для другого блока. Для поиска канонической подписи функция должна поддерживать еще два параметра, но они не реализованы в либе spec256k1-php.


Код доступен на Github или packagist под MIT лицензией. Автор @t3ran13

С каждым коммитом мир становится лучше!

Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное
65
  ·  11 месяцев назад

Уважуха. В полку библиотек прибыло. Так держать.

·

Былоб круто если бвсе стали ее юзать и развивать)

·
·
65
  ·  10 месяцев назад

Все впереди. Думаю это не за горами если не бросать.

Наконец-то!

Давай пилить полноценный плагин к WP уже.

·

Наверняка сейчас этим многие и займутся) я с ним не знаком)

Ох ты ж...
Теперь, условно, можно обойтись без NodeJS.
Для единичных запросов это конечно круто, но js всё-же более производительней будет работать с большими объёмами, имхо.

·

Не уверен, к томуже если правильно докрутить то можно будет все операции в одной транзакции отправлять)
Опять же, nodejs - это лишний контейнер или прилажуха. Если вместо одного юзать два приложения, тут производительность уже сама по себе будет страдать)

·
·

Вот мне тоже интересно, особенно для бота. Надо будет на событие сделать 500 лайков - сейчас ведь 500 раз api для этого дёрнуть надо?

·
·
·
65
  ·  10 месяцев назад

Как бы не хотелось меньше но все равно придется 500 раз дергать API.

·
·
·
·

нет, далеко не факт. можно затолкать до 256 операций в одну транзакцию)

·
·
·
·
65
  ·  10 месяцев назад

@t3ran13
Если операции апа будут от одного человека то не получиться. Ограничение БЧ 3 секунды между апами.

·
·
·

ну максимально можно 256 операций за раз, если я правильно понню. но зато это все в 1 транзакции)

·
·
·
·

Вот это было бы реально круто.
@vik, а у тебя боты на каждое действие запрос посылают?

·
·
·
·

@vp-webdev

у вика каждый бот и читает отдельно,но за счет кеша все шутсро работает)

·
·
65
  ·  10 месяцев назад

Если для подписании операций необходимо разные ключи то в одну транзакцию их по идее засунуть нельзя.

·
·
·

можно, скорее всего
фишка в том что каждая подпись - это подпись 1 операции. например вота

·
·
·
·
65
  ·  10 месяцев назад

У меня не получилось.
Возможно проблемы в моей библиотеке.
И вроде как про это я на STEEM видел писали.

·
·
·
·

@asuleymanov
вполне возможно ты прав, но технически мы можем такое сделать, есть фундамент)
другой вопрос непонятно как это все готовить)

Создавать каноничные подписи не так трудно как может показаться, там строк 10 кода дописать надо. Или трясти sipa чтобы он добавил код..

·

Я не уверен что с использованием
spec256k1-php
Это реализуемо. Если юзать другие либы - то вполне)

Опять же, тут вопрос не в создании самой каноничной подписи, а в том как добится каноничности, если с первого раза не вышло. Поскольку secp256k1_ecdsa_sign_recoverable для одного и тогоже приватника и меседжа всегда одинакова, изза нехватки 2 параметров

Потому нужно в либу апдейтить, она имлементит либу spec256k1 от блокчейна, в которой все параметры есть)

Мы все отзывчивые люди
придём и апнем от души
ты главное не сомневайся
пиши.

Твоё заветное желанье
о профите осуществим
ну что ж ты медлишь в самом деле
зови.

Знак доллара пробел и ссылку
и плюс немного золотых
и всем составом апит двинет
на ты.

Не спишь ночами липнешь в бустер
тебя спасёт upit проект
нас позови получишь вау
эффект.

А если силой не обижен
и ап готов отдать постам
то не раздумывая долго
go к нам.

Used MGESTS: 2830.
Изменение pending_payout_value: 261.611.

Вы получили 20.83 % апвоут от @uplift. Проект @whalepunk

You have received a 20.83 % vote from @uplift. Powered by @whalepunk

Вы получили 39.14 % голосов от @Booster. Работает на @Coinbank

You have received 39.14 % vote from @Booster. Powered by @Coinbank

·
4
  ·  10 месяцев назад

wetwet

Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
t3ran13, ianboil, strecoza, mishka, sergiy, damm, chiliec, gildar, fetta, andrvik, max-max, eduard, radomir, oleg257, midnight, lumia, dreamer, harhor, vasyl73, vik, tristamoff, vadbars, maksina, dr-boo, zlata777, nefer, oceanotechnic, semasping, lira, arystarch, zivchakh, ovtretya, maxiandr, arturio777, retoldname, boltyn, on1x, vika-teplo, amelina.elena, del137, bammbuss, graff0x, brika, bombo, dimk0, kertar, lengalenga, lokkie, dim447, now, ifingramota, liseykina, abloud, ksantoprotein, process, chugoi, leminger, gbot, firestarter, gogirotsky, onur1s, cryptovisitor, zelivsky, makcl, alexko, olka, funt33, kalter, maryatekun, lordarhont, anykeycheg, sweta-sowa
Поэтому я тоже проголосовал за него!

Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!


Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"


dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:

@php-node-client, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующей категории:

  • Выплаты - 1 позицию - 3834,1600 GBG

@php-node-client @t3ran13 Ваше приложение добавлено в ChainStore.io - магазин и каталог для медиаблокчейна Голос:
http://chainstore.io/product/php-graphene-node-client/

·

Спасибо!