Операции на бирже

Создание ордера

На внутренней бирже GolosDEX можно покупать и продавать средства в GOLOS, GBG и токенах UIA. Чтобы продать или купить средства, нужно создать ордер.
JavaScript
Python
1
golos.config.set('websocket', 'wss://api.golos.today/ws')
2
3
const acc = 'snake' // имя аккаунта, который будет создавать ордер
4
const wif = '5JFZC7AtEe1wF2ce6vPAUxDeevzYkPgmtR14z9ZVgvCCtrFAaLw' // приватный active-ключ
5
6
const orderid = Math.floor(Date.now() / 1000) // у каждого ордера должен быть уникальный id, который необходимо сгенерировать. Здесь применяется один из способов
7
8
let expiration = new Date()
9
expiration.setHours(expiration.getHours() + 1)
10
expiration = expiration.toISOString().substr(0, 19) // получается формат вида 2022-01-18T11:33:00
11
12
try {
13
const res = await golos.broadcast.limitOrderCreateAsync(wif, acc, orderid, '1.000 GOLOS', '0.010 GBG', false, expiration)
14
console.log('order created')
15
} catch (err) {
16
console.error('cannot create order', err)
17
}
Copied!
1
#!/usr/bin/env python3
2
from datetime import datetime, timedelta
3
import logging
4
from golos.steem import Steem
5
from golos.transactionbuilder import TransactionBuilder
6
from golosbase import operations
7
8
acc = 'snake'
9
wif = '5JFZC7AtEe1wF2ce6vPAUxDeevzYkPgmtR14z9ZVgvCCtrFAaLw'
10
11
steem = Steem('wss://api.golos.today/ws')
12
print('Connected to GOLOS successfully!')
13
14
steem.commit.wallet.setKeys(wif)
15
16
orderid = int(datetime.now().timestamp())
17
18
expiration = datetime.utcnow() + timedelta(hours=1)
19
expiration = expiration.replace(microsecond=0).isoformat()
20
21
op = operations.LimitOrderCreate(
22
owner=acc,
23
orderid=orderid,
24
amount_to_sell='1.000 GOLOS',
25
min_to_receive='0.010 GBG',
26
fill_or_kill=False,
27
expiration=expiration
28
)
29
30
try:
31
steem.commit.finalizeOp([op], acc, 'active')
32
print('order created')
33
except Exception as err:
34
print('order not created')
35
logging.error(err, exc_info=True)
Copied!
В этом примере:
  • 1.000 GOLOS продаем. Они спишутся с баланса в момент создания ордера
  • 0.010 GBG покупаем за 1.000 GOLOS
  • false означает, что не следует использовать Immediate-Or-Cancel, то есть если нет подходящего ордера для сделки, то ордер будет висеть до момента expiration. Если заменить false на true, то при создании ордера сработает IOC и если нет подходящего ордера, то созданный ордер сразу самоуничтожится.
  • expiration - сколько времени висеть ордеру (в данном случае 1 час)

Отмена ордера

Аккаунт может отменить созданный им ордер, если по нему еще не прошли сделки.
JavaScript
Python
1
const orderid = 13548 // а так неправильно: orderid = '13548'
2
3
try {
4
const res = await golos.broadcast.limitOrderCancelAsync(wif, acc, orderid)
5
console.log('order canceled')
6
} catch (err) {
7
console.error('cannot cancel order', err)
8
}jaja
Copied!
1
orderid = 13548 # а так неправильно: orderid = '13548'
2
3
op = operations.LimitOrderCancel(
4
owner=acc,
5
orderid=orderid
6
)
7
8
try:
9
steem.commit.finalizeOp([op], acc, 'active')
10
print('order canceled')
11
except Exception as err:
12
print('order not canceled')
13
logging.error(err, exc_info=True)
Copied!

Балансы пользователя

JavaScript
Python
1
const res = await golos.api.getAccounts(['snake'])
2
if (!data[0]) {
3
console.log('no such account')
4
} else {
5
console.log(data[0].balance) // GOLOS
6
console.log(data[0].sbd_balance) // GBG
7
}
8
9
// для UIA следует использовать get_accounts_balances
10
11
const balances = await golos.api.getAccountsBalances(['lex'])
12
const dogecoin = balances[0]['DOGECOIN']
13
if (dogecoin) {
14
console.log(dogecoin.balance)
15
console.log(dogecoin.tip_balance)
16
console.log(dogecoin.market_balance)
17
} else {
18
console.log('no DOGECOIN balance')
19
}
Copied!
1
data = steem.get_accounts(['snake'])
2
if not len(data):
3
print('no such account')
4
else:
5
print(data[0]['balance']) # GOLOS
6
print(data[0]['sbd_balance']) # GBG
7
8
# для UIA следует использовать get_accounts_balances
9
10
balances = steem.get_accounts_balances(['lex'])
11
data = None
12
try:
13
data = balances[0'DOGECOIN']
14
except KeyError as err:
15
print('no DOGECOIN balance')
16
if not data == None:
17
print(data['balance'])
18
print(data['tip_balance'])
19
print(data['market_balance'])
Copied!

Разработка на JavaScript

В этом случае требуется Node.js, и его версия должна быть не ниже 11, а рекомендуется - 16.

Установка Node.js

В случае с Ubuntu выполните в приложении Терминал следующие команды, чтобы удалить существующий Node.js (если он имеется) и установить 16:
1
sudo apt-get remove nodejs
2
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
3
sudo apt-get install -y nodejs
Copied!
  • Для других Linux см. здесь
  • Для Windows - здесь
  • Для 32-битных Windows - здесь (использовать только на компьютерах, где обычный вариант не работает)
  • Для macOS - здесь
После того, как Node.js установлен, проверьте, что он доступен из Терминала.
  1. 1.
    Проверьте работу npm:
1
npm --version
Copied!
Она должна выдать ответ наподобие "8.1.2", а не ошибку.
  1. 1.
    Проверьте работу самого Nodejs:
1
nodejs --version
Copied!
А если эта команда выдает ошибку, то должна работать эта:
1
node --version
Copied!
Если все команды выдают ошибку, то в случае Windows необходимо сделать следующее:
  1. 1.
    Найдите, по какому пути установлен nodejs. Обычно это C:\Program Files\nodejs, но возможно также C:\Program Files (x86)\nodejs
  2. 2.
    Открыть "Панель управления", выбрать "Система", нажать синюю надпись "Дополнительные параметры системы", нажать кнопку "Переменные среды", в списке "Переменные среды пользователя" выбрать переменную Path или PATH, нажать кнопку "Изменить", затем "Создать" и вставить туда путь из пункта 1. Затем нажмите "OK", снова "ОК", затем "Применить", и закройте панель управления.
  3. 3.
    Откройте новый PowerShell и снова проверьте команды.

Создание скрипта

После того, как Node.js будет корректно установлен, можно создать свой первый скрипт, который будет работать на вашем ПК и взаимодействовать с Golos.
  1. 1.
    Создайте папку hellogolos
  2. 2.
    Откройте эту папку в терминале. В случае с Windows, сначала просто откройте папку, затем, щелкните "Файл", и затем "Запустить PowerShell".
  3. 3.
    Выполните команду
1
npm install golos-lib-js
Copied!
  1. 1.
    Создайте в папке скрипт index**.mjs** со следующим кодом:
1
import golos from 'golos-lib-js'
2
3
async function main() {
4
const dgp = await golos.api.getDynamicGlobalProperties()
5
console.log(dgp.head_block_number)
6
7
process.exit(0)
8
}
9
10
main()
Copied!
А если используете Node.js старше 14, то переименуйте файл в index**.js** и вместо import используйте
1
const golos = require('golos-lib-js')
Copied!
  1. 1.
    Запустите с помощью:
1
node index.mjs
Copied!

Разработка на Python

Необходим Python версии не ниже 3.6.1, но не 4.0.0 и выше.

Установка Python и инструментов для сборки

Чтобы установить Python на Linux и не приходилось собирать его из исходного кода, добавьте этот репозиторий:
1
sudo add-apt-repository ppa:deadsnakes/ppa
Copied!
Затем используйте эти команды:
1
sudo apt-get update
2
sudo apt-get install python3.7 python3.7-dev python3.7-venv
Copied!
(Пакет -dev нужен для сборки golos-lib-python. А пакет -venv для установки pip.) Установите pip:
1
python3.7 -m ensurepip
Copied!
Готово.
Windows
Если у вас Windows, используйте эту страницу. Найдите там самую новую версию, которая имеет ссылку типа "Download Windows installer (64-bit)". В случае, если Windows 32-битный и этот установщик не работает, используйте "Download Windows installer (32-bit)". Важно: при установке обязательно отметьте флажок "Add Python to PATH", чтобы Python был доступен из PowerShell (терминала). Если вы установили Python без этого флажка, переустановите Python.
Затем необходимо установить Microsoft Visual Studio не ниже 2015, а рекомендуется 2019 (https://visualstudio.microsoft.com/visual-cpp-build-tools/ и выбрать пункт "Классические приложения C++", остальное по умолчанию). Это необходимо для работы библиотеки python-golos.
Кроме того, необходимо установить OpenSSL.
macOS
Используйте эту страницу, а затем выполните эти инструкции.

Создание скрипта

  1. 1.
    Создайте папку hellogolospy
  2. 2.
    Установите библиотеку golos-lib-python:
1
python3.7 -m pip install golos-lib-python
Copied!
или (Windows)
1
python -m pip install golos-lib-python
Copied!
Библиотеки устанавливаются для всей системы (в site-packages), а не в конкретную папку. 3. Создайте скрипт:
1
#!/usr/bin/env python3
2
from golos.steem import Steem
3
4
steem = Steem('wss://api.golos.today/ws')
5
print('Connected to GOLOS successfully!')
6
7
dgp = steem.get_dynamic_global_properties()
8
print(dgp['head_block_number'])
Copied!