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

7 дней назад
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
  ·  7 дней назад

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

·
77
  ·  6 дней назад

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

·
·
65
  ·  6 дней назад

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

Наконец-то!

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

·
77
  ·  6 дней назад

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

67
  ·  7 дней назад

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

·
77
  ·  6 дней назад

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

·
·
67
  ·  6 дней назад

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

·
·
·
65
  ·  6 дней назад

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

·
·
·
·
77
  ·  6 дней назад

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

·
·
·
·
65
  ·  6 дней назад

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

·
·
·
77
  ·  6 дней назад

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

·
·
·
·
70
  ·  6 дней назад

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

·
·
·
·
77
  ·  6 дней назад

@vp-webdev

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

·
·
65
  ·  6 дней назад

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

·
·
·
77
  ·  6 дней назад

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

·
·
·
·
65
  ·  6 дней назад

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

·
·
·
·
77
  ·  6 дней назад

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

56
  ·  7 дней назад

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

·
77
  ·  6 дней назад

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

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

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

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

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

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

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

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

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

52
  ·  6 дней назад

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

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

59
  ·  6 дней назад

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

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

·
20
  ·  6 дней назад

wetwet

69
  ·  6 дней назад

Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
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 теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:

79
  ·  5 дней назад

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

  • Выплаты - 1 позицию - 3834,1600 GBG
47
  ·  3 дня назад

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

·
77
  ·  3 дня назад

Спасибо!