Гайды

руководства по использованию приложений платформы

11 Topics 31 Posts
  • Частые вопросы SmartHoldem Wallet

    9
    0 Votes
    9 Posts
    3k Views

    @alturin said in Частые вопросы SmartHoldem Wallet:

    Приватные ключи запоминать нельзя в кошельке самом - даже при условии пренебрежения безопасностью?
    В файлике хранить только или есть способы удобные для операций ?

    Не, нельзя, только запомнить или записать.

  • 1 Votes
    6 Posts
    4k Views

    @stil99 По автозагрузке ноды см п.4

    стандартно используется forever, вы можете использовать pm2

    необходимы базовые знания взаимодействия с модулями nodejs

  • Скрипт Autoinstall Node А

    5
    1 Votes
    5 Posts
    3k Views

    0_1529088645303_yjlf.jpg такая же проблема

  • 1 Votes
    3 Posts
    3k Views

    @eu-hallu да укажите в качестве пользователя в конфиге

    config.smartholdem.json

    "database": "sth_smartholdem",
    "user": "postgres",
    "password": "password",

    на маке через pgadmin ставим пароль и прописываем вместо "password"
    если через консоль не создает базу, создаем в pgadmin

    для консольных команд помогает установка

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    brew install postgresql

    либо экспорт переменных окружения

    export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin

    когда ставили на мак, были отличия.
    все проблемы пишите в эту ветку с установкой на OSX

  • Частые вопросы и ответы

    2
    1 Votes
    2 Posts
    2k Views

    Если начнут сливать монеты и цена будет 0.01 или ниже, то многие начнут закупаться (я в том числе) + биржевые спекулянты будут трейдить. Цена монеты на дно точно не упадёт! Моё мнение будет где то варьироваться от 0.01 - 0.03 по началу, за год вырастет по более!

  • 1 Votes
    1 Posts
    2k Views

    RPC-модуль https://github.com/smartholdem/smartholdem-rpc

    предназначен для взаимодействия с blockchain по принципу bitcoind на основе json

    Установка RPC

    git clone https://github.com/smartholdem/smartholdem-rpc
    cd smartholdem-rpc
    npm install

    Запуск RPC

    forever start server.js

    по умолчанию порт 8081, вы можете изменить порт запустив с параметром

    forever start server.js --port 9000

    В целях безопасности RPC доступен локально на сервере по IP 127.0.0.1, т.е. выполнение RPC-запросов проводится локально.

    Если вы хотите открыть доступ к RPC с других IP, тогда запустите RPC с параметром --allow-remote

    forever start server.js --port 9000 --allow-remote

    Простой пример взаимодействия с PHP, отправка транзакции:

    Подготовьте исх. транзакцию для вещания в сети
    1.1. Обработайте полученный результат, получите из результата id транзакции Отправьте транзакцию в сеть используя в качестве параметра id транзакции
  • 1 Votes
    1 Posts
    2k Views

    Последняя версия документации SmartHoldem API на основе slate доступна по адресу
    https://github.com/smartholdem/api-doc

    Установка:

    Установка Ruby gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB sudo apt-get install curl \curl -sSL https://get.rvm.io -o rvm.sh less rvm.sh cat rvm.sh | bash -s stable source ~/.rvm/scripts/rvm rvm install ruby --default ruby -v Устанавливаем bundler gem install bundler Установка документации git clone https://github.com/smartholdem/api-doc.git cd api-docs

    По умолчанию конфиг настроен на порт localhost:4567, если вы хотите изменить порт, отредактируйте конфиг файл

    nano config.rb

    строка: set :port, 4567

    Компилируем

    bundle install

    Запускаем

    bundle exec middleman server

    Для тестирования в windows используйте виртуальную машину с vagrant up.

    Для редактирования, основной файл source/index.html.md
    Дополнительные файлы в source/includes

    Для билдов в html, js использовать команду

    bundle exec middleman build

    после выполнения появится папка build с всеми откомпилированными файлами

  • Установка Node-A Vagrant Windows

    Moved
    1
    3 Votes
    1 Posts
    2k Views

    Гайд по установке Ноды на виртуальную машину для разработки и отладки, вместо docker используется vagrant.

    Установка virtualbox Устанвока vagrant Запуск smartholdem-node-a vagrant Качаем и ставим virtualbox Качаем и ставим vagrant с официального сайта После установки, нужно проверить или vagrant попал в переменную пути (Path), чтобы нам не пришлось полностью прописывать путь. Для этого, правой кнопкой мишки на Мой компьютер > Свойства и выбираем Дополнительные параметры системы. Там есть пункт Дополнительно, где нужно выбрать Переменные среды. И находим переменную Path, где должна быть строка с путем к Vagrant bin.

    !Если глючит и не запускается витуальная машина и выдает синий экран, выполняем команду в cmd

    dism.exe /Online /Disable-Feature:Microsoft-Hyper-V-All Установка ноды качаем и ставим гит для windows качаем офиц ветку testnet реп SmartHoldem. Выполяем cmd git clone -b testnet https://github.com/smartholdem/smartholdem-node-a.git

    !удобно выполнять в total commander для пользователей win

    Затем в папке smartholdem-node-a в консоле windows выполняем команду

    vagrant up

    после выполнения произойдет автоматическая настройка всей среды разработки и переменных окружения в виртуальной машине (занимает некоторое время)

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

    vagrant destroy

    или удалить образ из графичекой оболочки virtualbox - smartholdem_vm

    Или остановить выполнение

    vagrant halt

    После успешного выполнения начнется загрузка блокчейн и активируется лог в командной строке

    Вы также можете подключиться к виртуальной машине через putty по адресу 127.0.0.1:2222
    имя пользователя vagrant

    предварительно конвертировав приватный ключ из папки

    ~/smartholdem-node-a/.vagrant/machines/default/virtualbox/private_key

    с помощью программы входящей в набор утилит putty - > PuTTY Gen

    load - показать все файлы - выбрать ..private_key
    type of generate: RSA, указать 2048 в поле nubmer of bits in a generated key
    Жмем Save private key (пароль нет необходимости указывать для ключа в дев)

    далее с утилитой pageant загружаем наш конвертированный ключ. открыть, загрузить

    Теперь открываем putty и в строке подключения указываем

    ip:127.0.0.1, port: 2222

    user: vagrant
    подключиться.. Вот и все.

    *Vagrant также хорош для отладки/разработки аппаратных ключей типа ledger nano, документации smartholdem-api на ruby, blockexplorer и многих других приложений без необходимости вручную устанавливать всю среду *nix или другую os.

    В процессе разработки на nodejs обычно сочетается webstorm+vagrant.*
    В C++: Clion + vagrant если не используете nix

    upd: доступен vagrant для mainnet.

    git clone -b master https://github.com/smartholdem/smartholdem-node-a.git
  • 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 в ближайшие дни/неделю, с сотнями других дополнений и исправлений.

  • 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

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

  • Установка Node-A в Windows 10

    1
    3 Votes
    1 Posts
    1k Views

    Инструкция установки Node-A в Windows 10

    Открыть командную строку в меню пуск > PowerShell как Администратор Запустить команду Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux После установки опций подтвердите перезагрузку Установите приложение Ubuntu из Windows Store https://www.microsoft.com/en-us/p/ubuntu-1804/9n9tngvndl3q Запустите приложение из меню пуск или из windows store укажите имя пользователя, например: smartholdem и пароль обновите приложение ubuntu sudo apt-get update sudo apt-get upgrade Используйте общую инструкцию установки узла https://github.com/smartholdem/smartholdem-node-a cd /home/smartholdem sudo apt-get install postgresql postgresql-contrib libpq-dev build-essential g++ python git curl ntp -y sudo apt-get install jq libtool autoconf locales automake locate zip unzip htop nmon iftop nano -y sudo locale-gen en_US.UTF-8 sudo -u postgres psql -c "CREATE USER $USER WITH PASSWORD 'password' CREATEDB;" >&- 2>&- createdb sth_smartholdem git clone -b master https://github.com/smartholdem/smartholdem-node-a.git node cd node curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh 2>/dev/null | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" nvm install 10.16.3 >>install.log nvm use 10.16.3 >>install.log nvm alias default 10.16.3 npm install -g npm forever grunt-cli npm install sh firststart.sh

    для повторных запусков используйте

    sh update.sh

    Проверьте доступность API в браузере http://127.0.0.1:6100/api/blocks/getSupply

    !Узел на локальном компьютере с Windows не рекомендуется использовать в качестве делегата, но вы можете его использовать в своих приложениях, взаимодействия с кошельком (указав локальный узел http://127.0.0.1:6100) или разработки новых функций

    Возможные проблемы:

    psql

    psql: could not connect to server: No such file or directory

    решение:

    sudo chown -R postgres:postgres /var/lib/postgresql/10/ sudo chmod -R u=rwX,go= /var/lib/postgresql/10/ sudo service postgresql start sudo su - postgres -c "psql template1 -p 5432 -c 'CREATE EXTENSION IF NOT EXISTS hstore;'" sudo su - postgres -c "psql template1 -p 5432 -c 'CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";'"