457 lines
16 KiB
Markdown
457 lines
16 KiB
Markdown
# API v2 (для бирж и обменников)
|
||
Работает с версии обновления 0.901
|
||
|
||
|
||
API предназначено для облегчения написания сторонних приложений. На стороне сервера выполняется криптография и операции POW. Поэтому оно не рекомендуется для публичного доступа, т.к. нет защиты от DDOS атак. Используйте его, если приложения такие как сервер биржи находятся в одной приватной сети.
|
||
|
||
Данный API доступен если на ноде запущен http-хостинг и включена константа USE_HARD_API_V2.
|
||
|
||
### Для этого задайте константы (файл const.lst):
|
||
* "HTTP_HOSTING_PORT":80,
|
||
* "USE_HARD_API_V2":1,
|
||
|
||
Несмотря на то что API разработано для использования в POST запросах, в ограниченном режиме его можно использовать для GET запросов.
|
||
|
||
Формат вызова
|
||
```js
|
||
{{Server}}/api/v2/{{MethodName}}
|
||
```
|
||
|
||
Пример:
|
||
```js
|
||
http://127.0.0.1/api/v2/GenerateKeys
|
||
```
|
||
|
||
В качестве результат возвращается JSON, который содержит обязательное поле result со значением:
|
||
* 0 - запрос содержит ошибки или результат не возможно получить (например нет такого счета),
|
||
* 1 или >1 - успешное выполнение запроса (в случае запросов создания новых счетов и режимом Wait:1 здесь возвращается номер созданного счета)
|
||
|
||
text - опциональное поле содержит подробное описание результата
|
||
|
||
Все методы поддерживают параметр Meta, если он задан, то это же значение добавляется в результат запроса. Это бывает полезно для организации собственной маршрутизации запросов, часто применяется в микро-сервисных архитектурах.
|
||
|
||
## GenerateKeys
|
||
|
||
1)**/api/v2/GenerateKeys** - создание пары приватный ключ - публичный ключ
|
||
#### Параметры не обязательны
|
||
|
||
example:
|
||
```js
|
||
http://127.0.0.1/api/v2/GenerateKeys
|
||
```
|
||
return:
|
||
```js
|
||
{
|
||
"result": 1,
|
||
"PrivKey": "65C65BE3F436DE58C64461BDC1BF0E2D8AB06C2C4E92470B1F4CDEADB9B2C3FF",
|
||
"PubKey": "030809551AD9E0E275082C75EC82E9651BF062821EC6DFE31039B0EDE6A2ED26CC"
|
||
}
|
||
```
|
||
|
||
## CreateAccount
|
||
|
||
2)**/api/v2/CreateAccount** - создание нового счета (аккаунта). В Тере бесплатное создание счета возможно только в промежутках из 10 секунд. Платный вариант приведен в примере 2 метода **Send**
|
||
#### Параметры:
|
||
* Name - имя счета до 40 байт
|
||
* PrivKey - приватный ключ в hex-формате
|
||
* Wait - если установлена цифра 1, то ответ на запрос не возвращается до тех пор пока транзакция не будет записана в блокчейн (время ответа на запрос увеличивается до 18 сек)
|
||
|
||
example:
|
||
```js
|
||
http://127.0.0.1/api/v2/CreateAccount
|
||
{
|
||
"Name": "PrivTest02",
|
||
"PrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||
"Wait":1
|
||
}
|
||
```
|
||
return:
|
||
```js
|
||
{
|
||
"result": 190552,
|
||
"text": "Add to blockchain",
|
||
"TxID": "04711036904F1F2DDF49CC7B2F010000",
|
||
"BlockNum": 19889100
|
||
}
|
||
```
|
||
result - возвращает номер созданного аккаунта
|
||
|
||
|
||
## Send
|
||
|
||
3)**/api/v2/Send** - отправка монет с одного счета на другой (требуется указать приватный ключ счета отправителя)
|
||
#### Параметры:
|
||
* FromID - номер счета отправителя
|
||
* FromPrivKey - приватный ключ отправителя в hex-формате
|
||
* ToID - номер счета получателя, число или публичный ключ в hex-формате (в этом случае будет создан новый счет с именем заданным в первой строке описания платежа и в качестве оплаты создания счета спишется 10 Тера)
|
||
* Amount - сумма, число с плавающей точкой или объект в формате {SumCOIN,SumCENT}
|
||
* Description - описание платежка (необязательный параметр)
|
||
* Wait - если установлена цифра 1, то ответ на запрос не возвращается до тех пор пока транзакция не будет записана в блокчейн (время ответа на запрос увеличивается до 8 сек)
|
||
|
||
|
||
example1:
|
||
```js
|
||
http://127.0.0.1/api/v2/Send
|
||
{
|
||
"FromID": 190085,
|
||
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||
"ToID":190165,
|
||
"Amount":10.5,
|
||
"Description":"Тест",
|
||
"Wait":1
|
||
|
||
}
|
||
```
|
||
return:
|
||
```js
|
||
{
|
||
"result": 1,
|
||
"text": "Add to blockchain",
|
||
"TxID": "C08A0C18C1ABF4062B149B7C2F010000",
|
||
"BlockNum": 19889307
|
||
}
|
||
```
|
||
|
||
example2 (создание нового счета):
|
||
```js
|
||
http://127.0.0.1/api/v2/Send
|
||
|
||
{
|
||
"FromID": 190059,
|
||
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||
"ToID22":190516,
|
||
"ToID":"0240EDF5ECB25D886FD58DB92A53914FAC975078C1C2EDD1AC292B70C7BC13461F",
|
||
"Amount":10,
|
||
"Description":"New account",
|
||
"Wait":1
|
||
|
||
}
|
||
```
|
||
|
||
return:
|
||
```js
|
||
{
|
||
"result": 190551,
|
||
"text": "Add to blockchain",
|
||
"TxID": "9DD4869C4515B2A3340E887A2F010000",
|
||
"BlockNum": 19888776
|
||
}
|
||
```
|
||
result - возвращает номер созданного аккаунта
|
||
|
||
|
||
|
||
## GetBalance
|
||
|
||
4)**/api/v2/GetBalance** - получить баланс счета
|
||
#### Параметры:
|
||
* AccountID - номер счета
|
||
|
||
example:
|
||
```js
|
||
http://127.0.0.1/api/v2/GetBalance
|
||
{
|
||
"AccountID": 0
|
||
}
|
||
```
|
||
return:
|
||
```js
|
||
{
|
||
"result": 1,
|
||
"SumCOIN": 5589146,
|
||
"SumCENT": 555765670,
|
||
"Currency": 0,
|
||
"PubKey": "02769165A6F9950D023A415EE668B80BB96B5C9AE2035D97BDFB44F356175A44FF"
|
||
}
|
||
```
|
||
|
||
## GetTransaction
|
||
|
||
5)**/api/v2/GetTransaction** - получить транзакцию (возвращает объект с содержимым транзакции)
|
||
#### Параметры:
|
||
* TxID - ИД транзакции в hex-формате
|
||
|
||
альтернативный вариант задания параметров:
|
||
* BlockNum - номер блока
|
||
* TrNum - номер транзакции в блоке
|
||
|
||
example1:
|
||
```js
|
||
http://127.0.0.1/api/v2/GetTransaction
|
||
{
|
||
"TxID": "BE10810FDE7A1317D9DF51D62D010000"
|
||
}
|
||
```
|
||
return:
|
||
```js
|
||
{
|
||
"Type": 111,
|
||
"Version": 3,
|
||
"Reserve": 0,
|
||
"FromID": 190085,
|
||
"To": [
|
||
{
|
||
"PubKey": "",
|
||
"ID": 190165,
|
||
"SumCOIN": 1,
|
||
"SumCENT": 0
|
||
}
|
||
],
|
||
"Description": "New6",
|
||
"OperationID": 41,
|
||
"Body": "",
|
||
"Sign": "8C761F539A6A24427CF810A49140CA1FFBF0F3A48DCF58AEE0DD9E4A4E631E1A1B6DA86ED6E2EF92DBF537270AA02B5EAE3A7C822B3F70628CAD78525ED9E0F7",
|
||
"result": 1,
|
||
"BlockNum": 19781201,
|
||
"TrNum": 0
|
||
}
|
||
```
|
||
|
||
example2:
|
||
```js
|
||
http://127.0.0.1/api/v2/GetTransaction
|
||
{
|
||
"TxID": "04711036904F1F2DDF49CC7B2F010000"
|
||
}
|
||
```
|
||
return:
|
||
```js
|
||
{
|
||
"Type": 100,
|
||
"Currency": 0,
|
||
"PubKey": "0240EDF5ECB25D886FD58DB92A53914FAC975078C1C2EDD1AC292B70C7BC13461F",
|
||
"Name": "PrivTest02",
|
||
"Adviser": 0,
|
||
"Smart": 0,
|
||
"Reserve": "000000",
|
||
"result": 190552,
|
||
"BlockNum": 19889100,
|
||
"TrNum": 1
|
||
}
|
||
|
||
```
|
||
|
||
|
||
## GetHistoryTransactions
|
||
|
||
6)**/api/v2/GetHistoryTransactions** - получить историю транзакций счета
|
||
|
||
#### Параметры:
|
||
* AccountID - номер счета (аккаунта)
|
||
* Count - максимальное число возвращаемых строк - глубина истории (по умолчанию 100)
|
||
|
||
вариант задания параметров для организации постраничной навигации:
|
||
* NextPos - номер ид строки истории (это значение берется из последней строки предыдущего результата)
|
||
|
||
Дополнительные параметры:
|
||
* GetTxID - если стоит 1 - то возвращается в поле TxID возвращается ID транзакции в 16 формате
|
||
* GetDescription - если стоит 1 - то возвращается описание транзакции в поле Description (если это описание доступно)
|
||
|
||
|
||
example1:
|
||
```js
|
||
http://127.0.0.1/api/v2/GetHistoryTransactions
|
||
{
|
||
"AccountID": 190480
|
||
}
|
||
```
|
||
return:
|
||
```js
|
||
|
||
{
|
||
"result": 1,
|
||
"History": [
|
||
{
|
||
"Type": 1, //<---- Тип элемента истории (пока поддерживается тип 1)
|
||
"BlockNum": 19994502, //<---- номер блока в котором записана транзакция
|
||
"TrNum": 0, //<---- номер строки блока в котором записана транзакция
|
||
"Pos": 498190, //<---- позиция в файле индекса истории (эта позиция может быть перезаписана при перезаписи транзакции, например загружена другая цепочка блоков или выполнена команда RewriteTransactions)
|
||
"NextPos": 439090, //<---- следующая позиция в файле индекса
|
||
"Direct": "+", //<---- "+" поступление денег, "-" списание
|
||
"CorrID": 190478, //<---- корреспондирующий счет (откуда пришли деньги или наоборот куда ушли)
|
||
"SumCOIN": 1, //<---- Сумма целой части монет
|
||
"SumCENT": 0 //<---- Сумма дробной части монет
|
||
},
|
||
{
|
||
"Type": 1,
|
||
"BlockNum": 19993514,
|
||
"TrNum": 0,
|
||
"Pos": 439090,
|
||
"NextPos": 0,
|
||
"Direct": "+",
|
||
"CorrID": 190478,
|
||
"SumCOIN": 1,
|
||
"SumCENT": 0
|
||
}
|
||
],
|
||
"Tail": {
|
||
"NextPos": 498190, //<---- ссылка на самое последнее обновление истории транзакции (т.е. самая новая история)
|
||
"Reserv": { //<---- не используется (зарезервировано для будущих версий)
|
||
"type": "Buffer",
|
||
"data": [
|
||
0,
|
||
0
|
||
]
|
||
},
|
||
"Num": 190480 //<---- номер счета
|
||
}
|
||
}
|
||
```
|
||
example2:
|
||
```js
|
||
http://127.0.0.1/api/v2/GetHistoryTransactions
|
||
{
|
||
"NextPos": 439090
|
||
}
|
||
```
|
||
|
||
|
||
=Добавочная часть к API2=
|
||
|
||
Вариант использования:
|
||
1. Computer A (has public keys) creates a raw unsigned transaction
|
||
2. Computer B (has secret keys) grabs and signs the raw transaction
|
||
3. computer A grabs the signed transaction and transmits it.
|
||
|
||
|
||
|
||
7)**/api/v2/CreateRawTransaction** - create json payment tx without a signature
|
||
|
||
#### Parameters:
|
||
* FromID - номер счета отправителя
|
||
* FromPrivKey - приватный ключ отправителя в hex-формате
|
||
* ToID - номер счета получателя, число или публичный ключ в hex-формате (в этом случае будет создан новый счет с именем заданным в первой строке описания платежа и в качестве оплаты создания счета спишется 10 Тера)
|
||
* Amount - сумма, число с плавающей точкой или объект в формате {SumCOIN,SumCENT}
|
||
* Description - описание платежка (необязательный параметр)
|
||
|
||
example:
|
||
```js
|
||
http://127.0.0.1/api/v2/CreateRawTransaction
|
||
{
|
||
"FromID": 187004,
|
||
"ToID":190650,
|
||
"Amount":10.5,
|
||
"Description":"Тест"
|
||
|
||
}
|
||
```
|
||
|
||
return:
|
||
```js
|
||
{
|
||
"result": 1,
|
||
"Tx": {
|
||
"Type": 111,
|
||
"Version": 3,
|
||
"FromID": 187004,
|
||
"OperationID": 118,
|
||
"To": [
|
||
{
|
||
"PubKey": "",
|
||
"ID": 190650,
|
||
"SumCOIN": 10,
|
||
"SumCENT": 500000000
|
||
}
|
||
],
|
||
"Description": "Тест",
|
||
"Sign": ""
|
||
}
|
||
}
|
||
```
|
||
|
||
|
||
|
||
8)**/api/v2/SignRawTransaction** - sign tx
|
||
|
||
#### Parameters:
|
||
* Tx - JSON object
|
||
* FromPrivKey - sender private key in hex format
|
||
|
||
example:
|
||
```js
|
||
http://127.0.0.1/api/v2/SignRawTransaction
|
||
{
|
||
"Tx": {
|
||
"Type": 111,
|
||
"Version": 3,
|
||
"FromID": 187004,
|
||
"OperationID": 118,
|
||
"To": [
|
||
{
|
||
"PubKey": "",
|
||
"ID": 190650,
|
||
"SumCOIN": 10,
|
||
"SumCENT": 500000000
|
||
}
|
||
],
|
||
"Description": "Тест",
|
||
"Sign": ""
|
||
},
|
||
"FromPrivKey": "98765432108AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033"
|
||
}
|
||
```
|
||
|
||
return:
|
||
```js
|
||
{
|
||
"result": 1,
|
||
"Tx": {
|
||
"Type": 111,
|
||
"Version": 3,
|
||
"FromID": 187004,
|
||
"OperationID": 118,
|
||
"To": [
|
||
{
|
||
"PubKey": "",
|
||
"ID": 190650,
|
||
"SumCOIN": 10,
|
||
"SumCENT": 500000000
|
||
}
|
||
],
|
||
"Description": "Тест",
|
||
"Sign": "123456789ABCD931F3A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C0332480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033"
|
||
}
|
||
}
|
||
```
|
||
|
||
9)**/api/v2/SendRawTransaction** - send tx to TERA network
|
||
|
||
#### Parameters:
|
||
* Tx -JSON object
|
||
* Wait - if the number 1 is set, the response to the request is not returned until the transaction is written to the blockchain (the response time to the request is increased to 8 seconds)
|
||
|
||
example:
|
||
```js
|
||
http://127.0.0.1/api/v2/SendRawTransaction
|
||
{
|
||
"Tx": {
|
||
"Type": 111,
|
||
"Version": 3,
|
||
"FromID": 187004,
|
||
"OperationID": 118,
|
||
"To": [
|
||
{
|
||
"PubKey": "",
|
||
"ID": 190650,
|
||
"SumCOIN": 10,
|
||
"SumCENT": 500000000
|
||
}
|
||
],
|
||
"Description": "Тест",
|
||
"Sign": "123456789ABCD931F3A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C0332480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033"
|
||
},
|
||
"Wait":1
|
||
}
|
||
```
|
||
|
||
|
||
return:
|
||
```js
|
||
{
|
||
"result": 1,
|
||
"text": "Add to blockchain",
|
||
"TxID": "1234567891ABF4062B149B7C2F010000",
|
||
"BlockNum": 22222900
|
||
}
|
||
```
|