• 1 Votes
    1 Posts
    2k Views

    The btsdex library is designed to automate operations in a decentralized network of bitshares, can be used to create personal trading bots.

    installation:

    npm install btsdex

    Basic examples and functions in WIKI BTSDEX

    Source code is available https://github.com/scientistnik/btsdex

    Additional functions: ** memoDecode ** (decoding memo) // decoding example const BitShares = require("btsdex"); BitShares.init("wss://bitshares.openledger.info/ws"); BitShares.subscribe('connected', start); KEY = '5K...PrivateKey'; SENDER = 'sender_name'; async function start() { let bot = new BitShares(SENDER, KEY); bot.setMemoKey(KEY); let memo_text = await bot.memoDecode({ "from": "BTS5...sender_address", "nonce": 192135435365768, "message": "b897254f..." }); console.log(memo_text.split(":"); }

    assetIssue (release of an asset)

    assetReserve (asset burning)

    The development of the library continues...

  • 6 Votes
    2 Posts
    2k Views

    @patinity да эта библиотека создана для упрощения взаимодействия с API SmartHoldem и дочерними blockchain. Библиотека постоянно дорабатывается и доабвляются новые функции.

  • 6 Votes
    13 Posts
    4k Views

    @patinity в настоящее время ведется работа/иссследования по созданию виртуальной машины (vm) выполнения контрактов.

    в качестве кандидатов языки: lua, node vm, c++ (ciyam) + пару эксзотических.

    нам необходим на входе простой для понимания разработчиков язык контрактов, к примеру в lua возможно в формате js записать контракт (в отличии от солидити более понятен людям) и на выходе получить выполняемый в vm байткод.

    Haskell достаточно тепизирован, что исключает лишние ошибки при создании контрактов и может выступать как один из кандидатов на реализацию виртуальной контрактной машины в SmartHoldem (это по вопросу использования в крипте).

    К примеру EOS используют WASM на clang, напоминает vm nodejs, который слегка не безопасен в стандартной реализации (мое субъективное мнение).

  • 3 Votes
    1 Posts
    2k Views

    Простой пример отправки транзакции через PHP Curl с примечанием к платежу:

    !Важно отправлять данные на доверенную ноду, т.е. на вашу.

    <?php $url = 'http://node_ip:6100/api/transactions'; $data = json_encode((object) array( "secret" => "секретная фраза адреса отправителя", "amount" => 10000000, //0.1 STH в Satoshi "recipientId" => "Sa9JKodiNeM7tbYjxwEhvvG1kBczhQxTN3", //адрес получателя "vendorField" => "any message" // опциональное поле 64 байт )); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json')); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $response = curl_exec($ch); curl_close($ch); $result = json_decode($response, true); //convert to array print_r($result); //show result

    Результат выполнения при успехе примерно следующий:

    Array ( [success] => 1 [transactionId] => 97fc4c43279a27e7c28a4058ce06219434a0b4f97e6bf5a12f9ebb41a739652a )

    *При использовании двух парольных фраз добавьте поле secondSecret

    Пример добавлен в документацию

  • 7 Votes
    1 Posts
    2k Views

    На заре Биткоин 1.0, во время разработки платежных шлюзов для некоторых централизованных систем столкнулся с следующей проблемой - отсутствие примечания к платежу, в любой из биткоин подобных монет. И это была проблема, которая как известно решается методом выдачи каждому пользователю уникального адреса.

    В данном руководстве рассматривается метод приема платежей с примечанием к платежу (сообщением) в экосистеме SmartHoldem. Сервис использует 1 адрес, но для каждого пользователя генерируется уникальная строка.

    Для простоты понимания в качестве бэкенда используется язык PHP.

    В процессе участвуют: сервис (обменник) и пользователь (клиент).

    Клиент

    Со стороны клиента некий сервис - обменник, генерирует для клиента исходные данные.

    0_1522740861038_service1.jpg

    сумма к получению в меняемой монете (задаваемая клиентом) расчетный результат к получению по текущему курсу STH > COIN адрес для отправки STH (для всех один) уникальная строка сообщения (идентифицирует отправителя)

    Здесь на стороне сервиса в backend генерируется уникальная строка для каждого пользователя и сохраняется в базу данных, к примеру таблица вида:
    userid(int), msg(string)

    <?php $msg = substr(md5(uniqid(microtime(), 1)) . getmypid(), 1, 8); // результат уникальная строка: 561559b2

    Клиент, зная исходные данные, отправляет соответствующую сумму с примечанием на указанный адрес с помощью своего кошелька.

    0_1522742749392_wallet_v1.jpg

    Сервис

    Теперь в работу вступает backend сервиса, обработчик транзакций. Для простоты понимания будем использовать выполнения скрипта по crontab.

    Создаем на стороне сервера php-файл, далее пропишем его на выполнение cron каждую минуту.

    <?php $addr = 'Sg13BhANeairfS3o3w8N9sKaFrsht2bt4V'; //адрес проверки транзакций $limit = 25; //лимит выдачи транзакций $offset = 0; // смещение //сортируем выдачу транзакций по timestamp с помощью orderBy $url = 'http://your_node_ip:6100/api/transactions?recipientId='.$addr.'&orderBy=timestamp&offset=0'; //получаем данные и преобразуем в массив $tx = json_decode(file_get_contents($url),true); /* если транзакций более лимита, смещаем offset указатель выдачи транзакций и получаем последние $limit транзакций, т.к. транзакций может быть сотни тысяч */ if ($tx['count'] > $limit) { $offset = $tx['count'] - $limit; // расчет смещения $url = 'http://your_node_ip:6100/api/transactions?recipientId=Sg13BhANeairfS3o3w8N9sKaFrsht2bt4V&orderBy=timestamp&offset='.$offset; $tx = json_decode(file_get_contents($url),true); } // обрабатываем данные for ($i = 0; $i < count($tx['transactions']); $i++) { print "<br>amount:".$tx['transactions'][$i]['amount']. " timestamp:".$tx['transactions'][$i]['timestamp']. " msg:".$tx['transactions'][$i]['vendorField']. " senderId:".$tx['transactions'][$i]['senderId']. " Txid:".$tx['transactions'][$i]['id']; /* здесь выполняем необходимые проверки и операции записи в базу данных, к примеру добавляем баланс сохраняем в таблицу транзакций уникальные транзакции, которые и проверям при получении, к примеру txid, userid, timestamp, sum_sth, sum_coin */ /* помним, баланс выдается в сатоши, не забываем его преобразовать точными функциями */ $sumCOIN = bcdiv($tx['transactions'][$i]['amount'],100000000,8); $set['btc_sth'] = 1; //курс по отношению к STH $sumBTC = bcdiv($sumCOIN, $set['btc_sth'], 8); //расчитываем курс монеты }

    Вот и все, транзакция обработана, операция выполнена.

    Новые операции
    +BTC за STH
    1.28 BTC / 0.32000000 STH
    03.04.18 09:59

    пример не претендует на качество кода, он предназначен для базового понимания приема платежей.

    Возможно в свою ноду интегрировать событийный скрипт с колбаками, к примеру считывать получение нового блока, затем находить транзакции предназначенные для вашего адреса, но это более сложный подход к простому приему транзакций, хотя и более элегантный.

    P.S. Событийный подход мы рассмотрим в следующих публикациях.

    P.P.S. Функция отправки сообщений будет доступна в версии кошелька 1.0 в ближайшие дни/неделю, с сотнями других дополнений и исправлений.

  • 2 Votes
    1 Posts
    2k Views

    0_1520987997905_sh_API.jpg
    Разработана новая система документации SmartHoldem API на основе slate ruby
    https://api.smartholdem.io

    Документация имеет более понятный интерфейс по сравнению с предыдущей версией и дополнительные примеры с ответами json.

    Исходный код документации находится по адресу https://github.com/smartholdem/api-doc

  • API

    Pinned API
    1
    0 Votes
    1 Posts
    2k Views

    https://api.smartholdem.io/

    0_1518602367534_api.PNG

  • 2 Votes
    1 Posts
    1k Views

    создан сайт с описанием стартового API

    https://api.smartholdem.io/

    используются запросы POST и GET, выдача в JSON

    для делегатов будет интересна функция к примеру, кто проголосовал за вас

    пример выдачи проголосовавших:

    http://NODE_IP:6100/api/delegates/voters?publicKey=02be233e7d9e46407cdcdc5793a792b52f399cab61ccd8eb256a32a6cd06b5b7d3

    поиск делегата по имени, пример

    http://NODE_IP:6100/api/delegates/search/?q=delegate

    итд
    возможно использовать curl
    пример

    curl -X GET "https://NODE_IP:6100/api/delegates" -H "accept: application/json" -H "nethash: fc46bfaf9379121dd6b09f5014595c7b7bd52a0a6d57c5aff790b42a73c76da7"