0.886
This commit is contained in:
parent
4087d50a65
commit
5affe69fe0
Binary file not shown.
Binary file not shown.
@ -23,7 +23,7 @@ http://194.1.237.94/api/v2/GenerateKeys
|
|||||||
|
|
||||||
As a result, JSON is returned, which contains the required result field with the value:
|
As a result, JSON is returned, which contains the required result field with the value:
|
||||||
* 0 - the request contains errors or the result is not possible to get (for example, there is no such account),
|
* 0 - the request contains errors or the result is not possible to get (for example, there is no such account),
|
||||||
* 1 - successful execution of the query
|
* 1 or >1 - successful execution of the query
|
||||||
|
|
||||||
text - the optional field contains a detailed description of the result
|
text - the optional field contains a detailed description of the result
|
||||||
|
|
||||||
@ -52,20 +52,28 @@ return:
|
|||||||
2)**/api/v2/CreateAccount** - create a new account (account). In Tere free account creation is possible only in the intervals of 10 seconds. The paid version is given in the example of 2 methods **Send**
|
2)**/api/v2/CreateAccount** - create a new account (account). In Tere free account creation is possible only in the intervals of 10 seconds. The paid version is given in the example of 2 methods **Send**
|
||||||
#### Parameters:
|
#### Parameters:
|
||||||
* Name - account name up to 40 bytes
|
* Name - account name up to 40 bytes
|
||||||
* PubKey - public key in hex-format
|
* PrivKey - private key in hex-format
|
||||||
|
* 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 18 seconds)
|
||||||
|
|
||||||
example:
|
example:
|
||||||
```js
|
```js
|
||||||
http://127.0.0.1/api/v2/CreateAccount
|
http://127.0.0.1/api/v2/CreateAccount
|
||||||
{
|
{
|
||||||
"Name": "Hellow, world",
|
"Name": "PrivTest02",
|
||||||
"PubKey": "0240EDF5ECB25D886FD58DB92A53914FAC975078C1C2EDD1AC292B70C7BC13461F"
|
"PrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||||||
|
"Wait":1
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
return:
|
return:
|
||||||
```js
|
```js
|
||||||
{"result":1,"text":"Added to timer","TxID":"DC316BD766AC654E0AF7260F2E010000","BlockNum":19795750}
|
{
|
||||||
|
"result": 190552,
|
||||||
|
"text": "Add to blockchain",
|
||||||
|
"TxID": "04711036904F1F2DDF49CC7B2F010000",
|
||||||
|
"BlockNum": 19889100
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
result - returns the id (number) of the created account
|
||||||
|
|
||||||
|
|
||||||
## Send
|
## Send
|
||||||
@ -77,6 +85,7 @@ return:
|
|||||||
* ToID - the account number of the recipient, the number or public key in hex format (in this case, it will create a new account with the name specified in the first line of the description of the payment and the payment the account will be charged 10 Tera)
|
* ToID - the account number of the recipient, the number or public key in hex format (in this case, it will create a new account with the name specified in the first line of the description of the payment and the payment the account will be charged 10 Tera)
|
||||||
* Amount - sum, floating-point number, or object format {SumCOIN,SumCENT}
|
* Amount - sum, floating-point number, or object format {SumCOIN,SumCENT}
|
||||||
* Description - description of payment order (optional)
|
* Description - description of payment order (optional)
|
||||||
|
* 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)
|
||||||
|
|
||||||
|
|
||||||
example1:
|
example1:
|
||||||
@ -87,28 +96,50 @@ http://127.0.0.1/api/v2/Send
|
|||||||
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||||||
"ToID":190165,
|
"ToID":190165,
|
||||||
"Amount":10.5,
|
"Amount":10.5,
|
||||||
"Description":"Test"
|
"Description":"Тест",
|
||||||
|
"Wait":1
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
example2 (create a new account):
|
return:
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
"result": 1,
|
||||||
|
"text": "Add to blockchain",
|
||||||
|
"TxID": "C08A0C18C1ABF4062B149B7C2F010000",
|
||||||
|
"BlockNum": 19889307
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
example2 (создание нового счета):
|
||||||
```js
|
```js
|
||||||
http://127.0.0.1/api/v2/Send
|
http://127.0.0.1/api/v2/Send
|
||||||
|
|
||||||
{
|
{
|
||||||
"FromID": 190085,
|
"FromID": 190059,
|
||||||
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||||||
|
"ToID22":190516,
|
||||||
"ToID":"0240EDF5ECB25D886FD58DB92A53914FAC975078C1C2EDD1AC292B70C7BC13461F",
|
"ToID":"0240EDF5ECB25D886FD58DB92A53914FAC975078C1C2EDD1AC292B70C7BC13461F",
|
||||||
"Amount":10,
|
"Amount":10,
|
||||||
"Description":"New account"
|
"Description":"New account",
|
||||||
|
"Wait":1
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
return:
|
return:
|
||||||
```js
|
```js
|
||||||
{"result":1,"text":"OK","TxID":"BE10810FDE7A1317D9DF51D62D010000","BlockNum":19781201}
|
{
|
||||||
|
"result": 190551,
|
||||||
|
"text": "Add to blockchain",
|
||||||
|
"TxID": "9DD4869C4515B2A3340E887A2F010000",
|
||||||
|
"BlockNum": 19888776
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
result - returns the id (number) of the created account
|
||||||
|
|
||||||
|
|
||||||
## GetBalance
|
## GetBalance
|
||||||
|
|
||||||
4)**/api/v2/GetBalance** - get account balance
|
4)**/api/v2/GetBalance** - get account balance
|
||||||
@ -119,15 +150,16 @@ example:
|
|||||||
```js
|
```js
|
||||||
http://127.0.0.1/api/v2/GetBalance
|
http://127.0.0.1/api/v2/GetBalance
|
||||||
{
|
{
|
||||||
"AccountID": 0
|
"AccountID": 9
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
return:
|
return:
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
"result": 1,
|
"result": 1,
|
||||||
"SumCOIN": 580222966,
|
"SumCOIN": 5589146,
|
||||||
"SumCENT": 527313901
|
"SumCENT": 555765670,
|
||||||
|
"PubKey": "02769165A6F9950D023A415EE668B80BB96B5C9AE2035D97BDFB44F356175A44FF"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -137,7 +169,7 @@ return:
|
|||||||
#### Parameters:
|
#### Parameters:
|
||||||
* TxID - Transaction ID in hex format
|
* TxID - Transaction ID in hex format
|
||||||
|
|
||||||
example:
|
example1:
|
||||||
```js
|
```js
|
||||||
http://127.0.0.1/api/v2/GetTransaction
|
http://127.0.0.1/api/v2/GetTransaction
|
||||||
{
|
{
|
||||||
@ -166,6 +198,26 @@ return:
|
|||||||
"result": 1
|
"result": 1
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## GetHistoryTransactions
|
## GetHistoryTransactions
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# API v2 (для бирж и обменников)
|
# API v2 (для бирж и обменников)
|
||||||
|
|
||||||
API предназначено для облегчения написания сторонних приложений. На стороне сервера выполняется криптография и операции POW. Поэтому оно не рекомендуется для публичного доступа, т.к. не защищено от DDOS атак. Используйте его, если приложения такие как сервер биржи находятся в одной приватной сети.
|
API предназначено для облегчения написания сторонних приложений. На стороне сервера выполняется криптография и операции POW. Поэтому оно не рекомендуется для публичного доступа, т.к. нет защиты от DDOS атак. Используйте его, если приложения такие как сервер биржи находятся в одной приватной сети.
|
||||||
|
|
||||||
Данный API доступен если на ноде запущен http-хостинг и включена константа USE_HARD_API_V2.
|
Данный API доступен если на ноде запущен http-хостинг и включена константа USE_HARD_API_V2.
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ http://194.1.237.94/api/v2/GenerateKeys
|
|||||||
|
|
||||||
В качестве результат возвращается JSON, который содержит обязательное поле result со значением:
|
В качестве результат возвращается JSON, который содержит обязательное поле result со значением:
|
||||||
* 0 - запрос содержит ошибки или результат не возможно получить (например нет такого счета),
|
* 0 - запрос содержит ошибки или результат не возможно получить (например нет такого счета),
|
||||||
* 1 - успешное выполнение запроса
|
* 1 или >1 - успешное выполнение запроса (в случае запросов создания новых счетов и режимом Wait:1 здесь возвращается номер созданного счета)
|
||||||
|
|
||||||
text - опциональное поле содержит подробное описание результата
|
text - опциональное поле содержит подробное описание результата
|
||||||
|
|
||||||
@ -51,20 +51,28 @@ return:
|
|||||||
2)**/api/v2/CreateAccount** - создание нового счета (аккаунта). В Тере бесплатное создание счета возможно только в промежутках из 10 секунд. Платный вариант приведен в примере 2 метода **Send**
|
2)**/api/v2/CreateAccount** - создание нового счета (аккаунта). В Тере бесплатное создание счета возможно только в промежутках из 10 секунд. Платный вариант приведен в примере 2 метода **Send**
|
||||||
#### Параметры:
|
#### Параметры:
|
||||||
* Name - имя счета до 40 байт
|
* Name - имя счета до 40 байт
|
||||||
* PubKey - публичный ключ в hex-формате
|
* PrivKey - приватный ключ в hex-формате
|
||||||
|
* Wait - если установлена цифра 1, то ответ на запрос не возвращается до тех пор пока транзакция не будет записана в блокчейн (время ответа на запрос увеличивается до 18 сек)
|
||||||
|
|
||||||
example:
|
example:
|
||||||
```js
|
```js
|
||||||
http://127.0.0.1/api/v2/CreateAccount
|
http://127.0.0.1/api/v2/CreateAccount
|
||||||
{
|
{
|
||||||
"Name": "Hellow, world",
|
"Name": "PrivTest02",
|
||||||
"PubKey": "0240EDF5ECB25D886FD58DB92A53914FAC975078C1C2EDD1AC292B70C7BC13461F"
|
"PrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||||||
|
"Wait":1
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
return:
|
return:
|
||||||
```js
|
```js
|
||||||
{"result":1,"text":"Added to timer","TxID":"DC316BD766AC654E0AF7260F2E010000","BlockNum":19795750}
|
{
|
||||||
|
"result": 190552,
|
||||||
|
"text": "Add to blockchain",
|
||||||
|
"TxID": "04711036904F1F2DDF49CC7B2F010000",
|
||||||
|
"BlockNum": 19889100
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
result - возвращает номер созданного аккаунта
|
||||||
|
|
||||||
|
|
||||||
## Send
|
## Send
|
||||||
@ -76,6 +84,7 @@ return:
|
|||||||
* ToID - номер счета получателя, число или публичный ключ в hex-формате (в этом случае будет создан новый счет с именем заданным в первой строке описания платежа и в качестве оплаты создания счета спишется 10 Тера)
|
* ToID - номер счета получателя, число или публичный ключ в hex-формате (в этом случае будет создан новый счет с именем заданным в первой строке описания платежа и в качестве оплаты создания счета спишется 10 Тера)
|
||||||
* Amount - сумма, число с плавающей точкой или объект в формате {SumCOIN,SumCENT}
|
* Amount - сумма, число с плавающей точкой или объект в формате {SumCOIN,SumCENT}
|
||||||
* Description - описание платежка (необязательный параметр)
|
* Description - описание платежка (необязательный параметр)
|
||||||
|
* Wait - если установлена цифра 1, то ответ на запрос не возвращается до тех пор пока транзакция не будет записана в блокчейн (время ответа на запрос увеличивается до 8 сек)
|
||||||
|
|
||||||
|
|
||||||
example1:
|
example1:
|
||||||
@ -86,27 +95,49 @@ http://127.0.0.1/api/v2/Send
|
|||||||
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||||||
"ToID":190165,
|
"ToID":190165,
|
||||||
"Amount":10.5,
|
"Amount":10.5,
|
||||||
"Description":"Тест"
|
"Description":"Тест",
|
||||||
|
"Wait":1
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
return:
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
"result": 1,
|
||||||
|
"text": "Add to blockchain",
|
||||||
|
"TxID": "C08A0C18C1ABF4062B149B7C2F010000",
|
||||||
|
"BlockNum": 19889307
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
example2 (создание нового счета):
|
example2 (создание нового счета):
|
||||||
```js
|
```js
|
||||||
http://127.0.0.1/api/v2/Send
|
http://127.0.0.1/api/v2/Send
|
||||||
|
|
||||||
{
|
{
|
||||||
"FromID": 190085,
|
"FromID": 190059,
|
||||||
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
"FromPrivKey": "A2D45610FE8AC931F32480BFE3E78D26E45B0A4F88045D6518263DA12FA9C033",
|
||||||
|
"ToID22":190516,
|
||||||
"ToID":"0240EDF5ECB25D886FD58DB92A53914FAC975078C1C2EDD1AC292B70C7BC13461F",
|
"ToID":"0240EDF5ECB25D886FD58DB92A53914FAC975078C1C2EDD1AC292B70C7BC13461F",
|
||||||
"Amount":10,
|
"Amount":10,
|
||||||
"Description":"New account"
|
"Description":"New account",
|
||||||
|
"Wait":1
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
return:
|
return:
|
||||||
```js
|
```js
|
||||||
{"result":1,"text":"OK","TxID":"BE10810FDE7A1317D9DF51D62D010000","BlockNum":19781201}
|
{
|
||||||
|
"result": 190551,
|
||||||
|
"text": "Add to blockchain",
|
||||||
|
"TxID": "9DD4869C4515B2A3340E887A2F010000",
|
||||||
|
"BlockNum": 19888776
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
result - возвращает номер созданного аккаунта
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## GetBalance
|
## GetBalance
|
||||||
|
|
||||||
@ -136,7 +167,7 @@ return:
|
|||||||
#### Параметры:
|
#### Параметры:
|
||||||
* TxID - ИД транзакции в hex-формате
|
* TxID - ИД транзакции в hex-формате
|
||||||
|
|
||||||
example:
|
example1:
|
||||||
```js
|
```js
|
||||||
http://127.0.0.1/api/v2/GetTransaction
|
http://127.0.0.1/api/v2/GetTransaction
|
||||||
{
|
{
|
||||||
@ -166,6 +197,27 @@ return:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## GetHistoryTransactions
|
## GetHistoryTransactions
|
||||||
|
|
||||||
6)**/api/v2/GetHistoryTransactions** - получить историю транзакций счета
|
6)**/api/v2/GetHistoryTransactions** - получить историю транзакций счета
|
||||||
|
@ -313,7 +313,7 @@ class STreeBuffer
|
|||||||
SaveValue(Hash, Value)
|
SaveValue(Hash, Value)
|
||||||
{
|
{
|
||||||
if(typeof Hash !== this.KeyType)
|
if(typeof Hash !== this.KeyType)
|
||||||
throw "MUST ONLY HASH ARRAY: " + Hash;
|
throw "MUST ONLY TYPE=" + this.KeyType + " in " + Hash;
|
||||||
if(Value !== undefined)
|
if(Value !== undefined)
|
||||||
{
|
{
|
||||||
var element = this.MetaTree1.find({hash:Hash});
|
var element = this.MetaTree1.find({hash:Hash});
|
||||||
|
@ -753,7 +753,7 @@ module.exports = class CBlock extends require("./db/block-db")
|
|||||||
if(CompareArr(BlockDB.TreeHash, Block.TreeHash) == 0)
|
if(CompareArr(BlockDB.TreeHash, Block.TreeHash) == 0)
|
||||||
{
|
{
|
||||||
Block.TreeEq = true
|
Block.TreeEq = true
|
||||||
Block.BodyFileNum = BlockDB.BodyFileNum
|
Block.Reserv500 = BlockDB.Reserv500
|
||||||
Block.TrDataPos = BlockDB.TrDataPos
|
Block.TrDataPos = BlockDB.TrDataPos
|
||||||
Block.TrDataLen = BlockDB.TrDataLen
|
Block.TrDataLen = BlockDB.TrDataLen
|
||||||
continue;
|
continue;
|
||||||
@ -856,7 +856,6 @@ module.exports = class CBlock extends require("./db/block-db")
|
|||||||
{
|
{
|
||||||
if(IsZeroArr(Block.TreeHash))
|
if(IsZeroArr(Block.TreeHash))
|
||||||
{
|
{
|
||||||
Block.BodyFileNum = 0
|
|
||||||
Res = this.WriteBlockDB(Block)
|
Res = this.WriteBlockDB(Block)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1124,7 +1123,6 @@ module.exports = class CBlock extends require("./db/block-db")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Block.BodyFileNum = this.GetChainFileNum(Block.chain)
|
|
||||||
Block.arrContent = arrContent
|
Block.arrContent = arrContent
|
||||||
var Ret = this.WriteBodyDB(Block);
|
var Ret = this.WriteBodyDB(Block);
|
||||||
Block.TrCount = 0
|
Block.TrCount = 0
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
|
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
global.UPDATE_CODE_VERSION_NUM = 891;
|
global.UPDATE_CODE_VERSION_NUM = 893;
|
||||||
global.MIN_CODE_VERSION_NUM = 884;
|
global.MIN_CODE_VERSION_NUM = 884;
|
||||||
global.MINING_VERSION_NUM = 3;
|
global.MINING_VERSION_NUM = 3;
|
||||||
global.InitParamsArg = InitParamsArg;
|
global.InitParamsArg = InitParamsArg;
|
||||||
|
@ -164,10 +164,6 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
return num > 0 ? num - 1 : 0;
|
return num > 0 ? num - 1 : 0;
|
||||||
}
|
}
|
||||||
GetChainFileNum(chain)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
WriteBlockDB(Block)
|
WriteBlockDB(Block)
|
||||||
{
|
{
|
||||||
var startTime = process.hrtime();
|
var startTime = process.hrtime();
|
||||||
@ -212,6 +208,34 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
|
WriteBodyResultDB(Block)
|
||||||
|
{
|
||||||
|
var arrTr = Block.arrContentResult;
|
||||||
|
if(Block.TrDataPos && Block.TrDataLen && Block.VersionBody && arrTr && arrTr.length)
|
||||||
|
{
|
||||||
|
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
||||||
|
var FD = FileItem.fd;
|
||||||
|
var Size = arrTr.length * 6;
|
||||||
|
var Position = Block.TrDataPos + Block.TrDataLen - Size;
|
||||||
|
if(FileItem.size < Position + Size)
|
||||||
|
{
|
||||||
|
TO_ERROR_LOG("DB", 241, "Error Position in WriteBodyResultDB on block: " + Block.BlockNum)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var BufWrite = BufLib.GetNewBuffer(Size);
|
||||||
|
for(var i = 0; i < arrTr.length; i++)
|
||||||
|
{
|
||||||
|
BufWrite.Write(arrTr[i], "uint")
|
||||||
|
}
|
||||||
|
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
||||||
|
if(written !== BufWrite.length)
|
||||||
|
{
|
||||||
|
TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
WriteBodyDB(Block)
|
WriteBodyDB(Block)
|
||||||
{
|
{
|
||||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
||||||
@ -233,9 +257,11 @@ module.exports = class CDB extends require("../code")
|
|||||||
arrSize[i] = 2 + body.length
|
arrSize[i] = 2 + body.length
|
||||||
TrDataLen += arrSize[i]
|
TrDataLen += arrSize[i]
|
||||||
}
|
}
|
||||||
|
Block.VersionBody = 1
|
||||||
|
TrDataLen += arrTr.length * 6
|
||||||
var BufWrite = BufLib.GetNewBuffer(TrDataLen);
|
var BufWrite = BufLib.GetNewBuffer(TrDataLen);
|
||||||
BufWrite.Write(arrTr.length, "uint16")
|
BufWrite.Write(arrTr.length, "uint16")
|
||||||
BufWrite.Write(0, "uint16")
|
BufWrite.Write(Block.VersionBody, "uint16")
|
||||||
for(var i = 0; i < arrTr.length; i++)
|
for(var i = 0; i < arrTr.length; i++)
|
||||||
{
|
{
|
||||||
var body = arrTr[i];
|
var body = arrTr[i];
|
||||||
@ -337,8 +363,9 @@ module.exports = class CDB extends require("../code")
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Block.arrContent = []
|
Block.arrContent = []
|
||||||
|
Block.arrContentResult = []
|
||||||
var TrCount = BufRead.Read("uint16");
|
var TrCount = BufRead.Read("uint16");
|
||||||
var TrCountDapp = BufRead.Read("uint16");
|
Block.VersionBody = BufRead.Read("uint16")
|
||||||
if(TrCount <= MAX_TRANSACTION_COUNT)
|
if(TrCount <= MAX_TRANSACTION_COUNT)
|
||||||
{
|
{
|
||||||
for(var i = 0; i < TrCount; i++)
|
for(var i = 0; i < TrCount; i++)
|
||||||
@ -348,6 +375,15 @@ module.exports = class CDB extends require("../code")
|
|||||||
break;
|
break;
|
||||||
Block.arrContent[i] = body
|
Block.arrContent[i] = body
|
||||||
}
|
}
|
||||||
|
if(Block.VersionBody === 1)
|
||||||
|
{
|
||||||
|
var Size = TrCount * 6;
|
||||||
|
BufRead.len = Block.TrDataLen - Size
|
||||||
|
for(var i = 0; i < TrCount; i++)
|
||||||
|
{
|
||||||
|
Block.arrContentResult[i] = BufRead.Read("uint")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Block.TrCount = Block.arrContent.length
|
Block.TrCount = Block.arrContent.length
|
||||||
return true;
|
return true;
|
||||||
@ -475,14 +511,14 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
BlockHeaderToBuf(BufWrite, Block)
|
BlockHeaderToBuf(BufWrite, Block)
|
||||||
{
|
{
|
||||||
Block.BodyFileNum = 0
|
Block.Reserv500 = 0
|
||||||
var len = BufWrite.len;
|
var len = BufWrite.len;
|
||||||
BufWrite.Write(Block.TreeHash, "hash")
|
BufWrite.Write(Block.TreeHash, "hash")
|
||||||
BufWrite.Write(Block.AddrHash, "hash")
|
BufWrite.Write(Block.AddrHash, "hash")
|
||||||
BufWrite.Write(Block.PrevHash, "hash")
|
BufWrite.Write(Block.PrevHash, "hash")
|
||||||
BufWrite.Write(Block.SumHash, "hash")
|
BufWrite.Write(Block.SumHash, "hash")
|
||||||
BufWrite.Write(Block.SumPow, "uint")
|
BufWrite.Write(Block.SumPow, "uint")
|
||||||
BufWrite.Write(Block.BodyFileNum, "uint")
|
BufWrite.Write(Block.Reserv500, "uint")
|
||||||
BufWrite.Write(Block.TrDataPos, "uint")
|
BufWrite.Write(Block.TrDataPos, "uint")
|
||||||
BufWrite.Write(Block.TrDataLen, "uint32")
|
BufWrite.Write(Block.TrDataLen, "uint32")
|
||||||
BufWrite.len = len + BLOCK_HEADER_SIZE
|
BufWrite.len = len + BLOCK_HEADER_SIZE
|
||||||
@ -498,7 +534,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
Block.PrevHash = BufRead.Read("hash")
|
Block.PrevHash = BufRead.Read("hash")
|
||||||
Block.SumHash = BufRead.Read("hash")
|
Block.SumHash = BufRead.Read("hash")
|
||||||
Block.SumPow = BufRead.Read("uint")
|
Block.SumPow = BufRead.Read("uint")
|
||||||
Block.BodyFileNum = BufRead.Read("uint")
|
Block.Reserv500 = BufRead.Read("uint")
|
||||||
Block.TrDataPos = BufRead.Read("uint")
|
Block.TrDataPos = BufRead.Read("uint")
|
||||||
Block.TrDataLen = BufRead.Read("uint32")
|
Block.TrDataLen = BufRead.Read("uint32")
|
||||||
Block.TrCount = 0
|
Block.TrCount = 0
|
||||||
@ -593,9 +629,15 @@ module.exports = class CDB extends require("../code")
|
|||||||
if(App)
|
if(App)
|
||||||
{
|
{
|
||||||
Tr.Script = App.GetScriptTransaction(Tr.body)
|
Tr.Script = App.GetScriptTransaction(Tr.body)
|
||||||
Tr.Verify = App.GetVerifyTransaction(BlockNum, Tr.Num, Tr.body)
|
Tr.Verify = App.GetVerifyTransaction(Block, BlockNum, Tr.Num, Tr.body)
|
||||||
if(Tr.Verify == 1)
|
if(Tr.Verify >= 1)
|
||||||
|
{
|
||||||
Tr.VerifyHTML = "<B style='color:green'>✔</B>"
|
Tr.VerifyHTML = "<B style='color:green'>✔</B>"
|
||||||
|
if(Tr.Verify > 1)
|
||||||
|
{
|
||||||
|
Tr.VerifyHTML += "(" + Tr.Verify + ")"
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
if(Tr.Verify == - 1)
|
if(Tr.Verify == - 1)
|
||||||
Tr.VerifyHTML = "<B style='color:red'>✘</B>"
|
Tr.VerifyHTML = "<B style='color:red'>✘</B>"
|
||||||
|
@ -367,7 +367,7 @@ HTTPCaller.ToLogServer = function (Str)
|
|||||||
};
|
};
|
||||||
HTTPCaller.FindMyAccounts = function (Params)
|
HTTPCaller.FindMyAccounts = function (Params)
|
||||||
{
|
{
|
||||||
WALLET.FindMyAccounts();
|
WALLET.FindMyAccounts(1);
|
||||||
return {result:1};
|
return {result:1};
|
||||||
};
|
};
|
||||||
HTTPCaller.GetAccount = function (id)
|
HTTPCaller.GetAccount = function (id)
|
||||||
|
@ -92,6 +92,7 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
{
|
{
|
||||||
DApps[key].OnWriteBlockStart(Block)
|
DApps[key].OnWriteBlockStart(Block)
|
||||||
}
|
}
|
||||||
|
var arrContentResult = [];
|
||||||
var BlockNum = Block.BlockNum;
|
var BlockNum = Block.BlockNum;
|
||||||
var arr = Block.arrContent;
|
var arr = Block.arrContent;
|
||||||
if(arr)
|
if(arr)
|
||||||
@ -106,26 +107,46 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
var App = DAppByType[type];
|
var App = DAppByType[type];
|
||||||
if(App)
|
if(App)
|
||||||
{
|
{
|
||||||
|
App.ResultTx = 0
|
||||||
DApps.Accounts.BeginTransaction()
|
DApps.Accounts.BeginTransaction()
|
||||||
var StrHex = GetHexFromArr(sha3(arr[i]));
|
var StrHex = GetHexFromArr(sha3(arr[i]));
|
||||||
var item = global.TreeFindTX.LoadValue(StrHex);
|
var item = global.TreeFindTX.LoadValue(StrHex);
|
||||||
global.CurTrItem = item
|
if(item)
|
||||||
|
global.CurTrItem = item.TX
|
||||||
|
else
|
||||||
|
global.CurTrItem = undefined
|
||||||
var Result = App.OnWriteTransaction(Block, arr[i], BlockNum, i);
|
var Result = App.OnWriteTransaction(Block, arr[i], BlockNum, i);
|
||||||
|
var SetResult = Result;
|
||||||
|
if(Result === true)
|
||||||
|
{
|
||||||
|
if(App.ResultTx)
|
||||||
|
SetResult = App.ResultTx
|
||||||
|
if(!DApps.Accounts.CommitTransaction(BlockNum, i))
|
||||||
|
SetResult = 0
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DApps.Accounts.RollBackTransaction()
|
||||||
|
SetResult = 0
|
||||||
|
}
|
||||||
|
if(SetResult === true)
|
||||||
|
SetResult = 1
|
||||||
|
arrContentResult[i] = SetResult
|
||||||
if(item)
|
if(item)
|
||||||
{
|
{
|
||||||
var ResultStr = Result;
|
var ResultStr = Result;
|
||||||
if(Result === true)
|
if(Result === true || typeof Result === "number")
|
||||||
{
|
{
|
||||||
ResultStr = "Add to blockchain"
|
ResultStr = "Add to blockchain"
|
||||||
if(type === global.TYPE_TRANSACTION_FILE)
|
if(type === global.TYPE_TRANSACTION_FILE)
|
||||||
ResultStr += ": file/" + BlockNum + "/" + i
|
ResultStr += ": file/" + BlockNum + "/" + i
|
||||||
}
|
}
|
||||||
ToLogClient(ResultStr, item, true)
|
item.cmd = "RetFindTX"
|
||||||
|
item.ResultStr = "" + ResultStr
|
||||||
|
item.bFinal = 1
|
||||||
|
item.Result = SetResult
|
||||||
|
process.send(item)
|
||||||
}
|
}
|
||||||
if(Result === true)
|
|
||||||
DApps.Accounts.CommitTransaction(BlockNum, i)
|
|
||||||
else
|
|
||||||
DApps.Accounts.RollBackTransaction()
|
|
||||||
global.CurTrItem = undefined
|
global.CurTrItem = undefined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -136,6 +157,8 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
this.DeleteBlockFromHashTree(Block2)
|
this.DeleteBlockFromHashTree(Block2)
|
||||||
this.AddBlockToHashTree(Block)
|
this.AddBlockToHashTree(Block)
|
||||||
}
|
}
|
||||||
|
if(arrContentResult.length)
|
||||||
|
process.send({cmd:"WriteBodyResult", BlockNum:Block.BlockNum, arrContentResult:arrContentResult})
|
||||||
for(var key in DApps)
|
for(var key in DApps)
|
||||||
{
|
{
|
||||||
DApps[key].OnWriteBlockFinish(Block)
|
DApps[key].OnWriteBlockFinish(Block)
|
||||||
|
@ -108,7 +108,7 @@ class CApp
|
|||||||
{
|
{
|
||||||
this.AccountMap = {}
|
this.AccountMap = {}
|
||||||
}
|
}
|
||||||
this.FindMyAccounts()
|
this.FindMyAccounts(0)
|
||||||
if(bGo)
|
if(bGo)
|
||||||
this.SaveWallet()
|
this.SaveWallet()
|
||||||
}
|
}
|
||||||
@ -230,11 +230,12 @@ class CApp
|
|||||||
{
|
{
|
||||||
this.AccountMap[Data.Num] = 0
|
this.AccountMap[Data.Num] = 0
|
||||||
}
|
}
|
||||||
FindMyAccounts()
|
FindMyAccounts(bClean)
|
||||||
{
|
{
|
||||||
if(IsZeroArr(this.PubKeyArr))
|
if(IsZeroArr(this.PubKeyArr))
|
||||||
return ;
|
return ;
|
||||||
this.AccountMap = {}
|
if(bClean)
|
||||||
|
this.AccountMap = {}
|
||||||
DApps.Accounts.FindAccounts([this.PubKeyArr], this.AccountMap, 0)
|
DApps.Accounts.FindAccounts([this.PubKeyArr], this.AccountMap, 0)
|
||||||
}
|
}
|
||||||
GetAccountKey(Num)
|
GetAccountKey(Num)
|
||||||
|
@ -363,8 +363,16 @@ class AccountApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GetVerifyTransaction(BlockNum, TrNum, Body)
|
GetVerifyTransaction(Block, BlockNum, TrNum, Body)
|
||||||
{
|
{
|
||||||
|
if(Block.VersionBody === 1)
|
||||||
|
{
|
||||||
|
var Result = Block.arrContentResult[TrNum];
|
||||||
|
if(!Result)
|
||||||
|
return - 1;
|
||||||
|
else
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
var Type = Body[0];
|
var Type = Body[0];
|
||||||
var Find = 0;
|
var Find = 0;
|
||||||
switch(Type)
|
switch(Type)
|
||||||
@ -571,6 +579,7 @@ class AccountApp extends require("./dapp")
|
|||||||
{
|
{
|
||||||
WALLET.OnCreateAccount(Account)
|
WALLET.OnCreateAccount(Account)
|
||||||
}
|
}
|
||||||
|
this.ResultTx = Account.Num
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
TRTransferMoney(Block, Body, BlockNum, TrNum, format_money_transfer, workstructtransfer)
|
TRTransferMoney(Block, Body, BlockNum, TrNum, format_money_transfer, workstructtransfer)
|
||||||
@ -679,6 +688,7 @@ class AccountApp extends require("./dapp")
|
|||||||
Account.PubKey = Item.PubKey
|
Account.PubKey = Item.PubKey
|
||||||
Account.Name = name
|
Account.Name = name
|
||||||
this.WriteStateTR(Account, TrNum)
|
this.WriteStateTR(Account, TrNum)
|
||||||
|
this.ResultTx = Account.Num
|
||||||
Item.ID = Account.Num
|
Item.ID = Account.Num
|
||||||
this.SendMoneyTR(Block, Data.Num, Account.Num, {SumCOIN:Item.SumCOIN, SumCENT:Item.SumCENT}, BlockNum, TrNum, TR.Description,
|
this.SendMoneyTR(Block, Data.Num, Account.Num, {SumCOIN:Item.SumCOIN, SumCENT:Item.SumCENT}, BlockNum, TrNum, TR.Description,
|
||||||
TR.Description, 1)
|
TR.Description, 1)
|
||||||
@ -1164,7 +1174,7 @@ class AccountApp extends require("./dapp")
|
|||||||
{
|
{
|
||||||
var DBChanges = this.DBChanges;
|
var DBChanges = this.DBChanges;
|
||||||
if(DBChanges.RollBackTransaction)
|
if(DBChanges.RollBackTransaction)
|
||||||
return ;
|
return false;
|
||||||
DBChanges.BlockMaxAccount = DBChanges.TRMaxAccount
|
DBChanges.BlockMaxAccount = DBChanges.TRMaxAccount
|
||||||
for(var key in DBChanges.TRMap)
|
for(var key in DBChanges.TRMap)
|
||||||
{
|
{
|
||||||
@ -1184,6 +1194,7 @@ class AccountApp extends require("./dapp")
|
|||||||
DBChanges.BlockEvent.push(DBChanges.TREvent[i])
|
DBChanges.BlockEvent.push(DBChanges.TREvent[i])
|
||||||
}
|
}
|
||||||
global.TickCounter = 0
|
global.TickCounter = 0
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
OnWriteNewAccountTR(Data, BlockNum, TrNum)
|
OnWriteNewAccountTR(Data, BlockNum, TrNum)
|
||||||
{
|
{
|
||||||
|
@ -31,7 +31,7 @@ class DApp
|
|||||||
{
|
{
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
GetVerifyTransaction(BlockNum, TrNum, Body)
|
GetVerifyTransaction(Block, BlockNum, TrNum, Body)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ class FileApp extends require("./dapp")
|
|||||||
ConvertBufferToStr(TR)
|
ConvertBufferToStr(TR)
|
||||||
return JSON.stringify(TR, "", 2);
|
return JSON.stringify(TR, "", 2);
|
||||||
}
|
}
|
||||||
GetVerifyTransaction(BlockNum, TrNum, Body)
|
GetVerifyTransaction(Block, BlockNum, TrNum, Body)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ class SmartApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
catch(e)
|
catch(e)
|
||||||
{
|
{
|
||||||
Result = e
|
Result = "" + e
|
||||||
}
|
}
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ class SmartApp extends require("./dapp")
|
|||||||
ConvertBufferToStr(TR)
|
ConvertBufferToStr(TR)
|
||||||
return JSON.stringify(TR, "", 2);
|
return JSON.stringify(TR, "", 2);
|
||||||
}
|
}
|
||||||
GetVerifyTransaction(BlockNum, TrNum, Body)
|
GetVerifyTransaction(Block, BlockNum, TrNum, Body)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -19,15 +19,17 @@ WebApi2.GenerateKeys = function (Params)
|
|||||||
};
|
};
|
||||||
WebApi2.CreateAccount = function (Params,response)
|
WebApi2.CreateAccount = function (Params,response)
|
||||||
{
|
{
|
||||||
if(typeof Params === "object" && Params.Name && Params.PubKey)
|
if(typeof Params === "object" && Params.Name && Params.PrivKey)
|
||||||
{
|
{
|
||||||
var TR = {Type:TYPE_TRANSACTION_CREATE, Currency:Params.Currency, PubKey:GetArrFromHex(Params.PubKey), Name:Params.Name, Smart:Params.Smart,
|
var KeyPair = crypto.createECDH('secp256k1');
|
||||||
};
|
KeyPair.setPrivateKey(Buffer.from(GetArrFromHex(Params.PrivKey)));
|
||||||
|
var PubKey = KeyPair.getPublicKey('', 'compressed');
|
||||||
|
var TR = {Type:TYPE_TRANSACTION_CREATE, Currency:Params.Currency, PubKey:PubKey, Name:Params.Name, Smart:Params.Smart, };
|
||||||
var Body = BufLib.GetBufferFromObject(TR, FORMAT_CREATE, 1000, {}, 1);
|
var Body = BufLib.GetBufferFromObject(TR, FORMAT_CREATE, 1000, {}, 1);
|
||||||
Body = Body.slice(0, Body.len + 12);
|
Body = Body.slice(0, Body.len + 12);
|
||||||
SendTransaction(Body, TR, undefined, function (result,TR,Body)
|
SendTransaction(Body, TR, Params.Wait, function (result,text)
|
||||||
{
|
{
|
||||||
var Result = {result:result < 1 ? 0 : 1, text:TR._text, TxID:GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum:TR._BlockNum,
|
var Result = {result:result, text:text, TxID:GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum:TR._BlockNum,
|
||||||
Meta:Params.Meta, };
|
Meta:Params.Meta, };
|
||||||
var Str = JSON.stringify(Result);
|
var Str = JSON.stringify(Result);
|
||||||
response.end(Str);
|
response.end(Str);
|
||||||
@ -86,9 +88,9 @@ WebApi2.Send = function (Params,response)
|
|||||||
TR.Sign = DApps.Accounts.GetSignTransferTx(TR, GetArrFromHex(Params.FromPrivKey));
|
TR.Sign = DApps.Accounts.GetSignTransferTx(TR, GetArrFromHex(Params.FromPrivKey));
|
||||||
var Body = BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER3, MAX_TRANSACTION_SIZE, {}, 1);
|
var Body = BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER3, MAX_TRANSACTION_SIZE, {}, 1);
|
||||||
Body = Body.slice(0, Body.len + 12);
|
Body = Body.slice(0, Body.len + 12);
|
||||||
SendTransaction(Body, TR, undefined, function (result,TR,Body)
|
SendTransaction(Body, TR, Params.Wait, function (result,text)
|
||||||
{
|
{
|
||||||
var Result = {result:result < 1 ? 0 : 1, text:TR._text, TxID:GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum:TR._BlockNum,
|
var Result = {result:result, text:text, TxID:GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum:TR._BlockNum,
|
||||||
Meta:Params.Meta, };
|
Meta:Params.Meta, };
|
||||||
var Str = JSON.stringify(Result);
|
var Str = JSON.stringify(Result);
|
||||||
response.end(Str);
|
response.end(Str);
|
||||||
@ -103,7 +105,8 @@ WebApi2.GetBalance = function (Params,response)
|
|||||||
if(arr.length)
|
if(arr.length)
|
||||||
{
|
{
|
||||||
var Value = arr[0].Value;
|
var Value = arr[0].Value;
|
||||||
var Result = {result:1, SumCOIN:Value.SumCOIN, SumCENT:Value.SumCENT, Meta:Params.Meta, };
|
var Result = {result:1, SumCOIN:Value.SumCOIN, SumCENT:Value.SumCENT, PubKey:GetHexFromArr(arr[0].PubKey), Meta:Params.Meta,
|
||||||
|
};
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,6 +136,10 @@ WebApi2.GetTransaction = function (Params)
|
|||||||
ConvertBufferToStr(TR);
|
ConvertBufferToStr(TR);
|
||||||
TR.result = 1;
|
TR.result = 1;
|
||||||
TR.Meta = Params.Meta;
|
TR.Meta = Params.Meta;
|
||||||
|
if(Block.VersionBody === 1 && Block.arrContentResult)
|
||||||
|
{
|
||||||
|
TR.result = Block.arrContentResult[i];
|
||||||
|
}
|
||||||
return TR;
|
return TR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,7 +205,7 @@ function CreateHashBodyPOWInnerMinPower(TR,arr,MinPow,startnonce)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function SendTransaction(Body,TR,SumPow,F)
|
function SendTransaction(Body,TR,Wait,F)
|
||||||
{
|
{
|
||||||
if(Body.length > 16000)
|
if(Body.length > 16000)
|
||||||
{
|
{
|
||||||
@ -207,6 +214,8 @@ function SendTransaction(Body,TR,SumPow,F)
|
|||||||
F(1, TR, Body);
|
F(1, TR, Body);
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
global.GlobalRunID++;
|
||||||
|
let WebID = global.GlobalRunID;
|
||||||
CreateNonceAndSend(0, 0);
|
CreateNonceAndSend(0, 0);
|
||||||
|
|
||||||
function CreateNonceAndSend(startnonce,NumNext)
|
function CreateNonceAndSend(startnonce,NumNext)
|
||||||
@ -218,8 +227,8 @@ function CreateNonceAndSend(startnonce,NumNext)
|
|||||||
F(0, TR, Body);
|
F(0, TR, Body);
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
var nonce = CreateHashBodyPOWInnerMinPower(TR, Body, SumPow, startnonce);
|
var nonce = CreateHashBodyPOWInnerMinPower(TR, Body, undefined, startnonce);
|
||||||
process.RunRPC("AddTransactionFromWeb", GetHexFromArr(Body), function (Err,text)
|
process.RunRPC("AddTransactionFromWeb", {WebID:WebID, HexValue:GetHexFromArr(Body)}, function (Err,text)
|
||||||
{
|
{
|
||||||
TR._result = Err ? 0 : 1;
|
TR._result = Err ? 0 : 1;
|
||||||
TR._text = text;
|
TR._text = text;
|
||||||
@ -239,7 +248,14 @@ function CreateNonceAndSend(startnonce,NumNext)
|
|||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
F(TR._result, TR, Body);
|
if(Wait && TR._result)
|
||||||
|
{
|
||||||
|
global.GlobalRunMap[WebID] = F;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
F(TR._result < 1 ? 0 : 1, text);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -126,13 +126,13 @@ function OnMessageWeb(msg)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function AddTransactionFromWeb(HexValue)
|
function AddTransactionFromWeb(Params)
|
||||||
{
|
{
|
||||||
var body = GetArrFromHex(HexValue);
|
var body = GetArrFromHex(Params.HexValue);
|
||||||
if(global.TX_PROCESS && global.TX_PROCESS.Worker)
|
if(global.TX_PROCESS && global.TX_PROCESS.Worker)
|
||||||
{
|
{
|
||||||
var StrHex = GetHexFromArr(sha3(body));
|
var StrHex = GetHexFromArr(sha3(body));
|
||||||
global.TX_PROCESS.Worker.send({cmd:"FindTX", TX:StrHex});
|
global.TX_PROCESS.Worker.send({cmd:"FindTX", TX:StrHex, Web:1, WebID:Params.WebID});
|
||||||
}
|
}
|
||||||
var Res = SERVER.AddTransaction({body:body}, 1);
|
var Res = SERVER.AddTransaction({body:body}, 1);
|
||||||
var text = AddTrMap[Res];
|
var text = AddTrMap[Res];
|
||||||
@ -270,10 +270,27 @@ function StartChildProcess(Item)
|
|||||||
}
|
}
|
||||||
ToLogClient(msg.Str, msg.StrKey, msg.bFinal);
|
ToLogClient(msg.Str, msg.StrKey, msg.bFinal);
|
||||||
break;
|
break;
|
||||||
|
case "RetFindTX":
|
||||||
|
if(WebProcess && WebProcess.Worker)
|
||||||
|
{
|
||||||
|
WebProcess.Worker.send(msg);
|
||||||
|
if(msg.Web)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ToLogClient(msg.ResultStr, msg.TX, msg.bFinal);
|
||||||
|
break;
|
||||||
case "online":
|
case "online":
|
||||||
if(ITEM.Worker)
|
if(ITEM.Worker)
|
||||||
ToLog("RUNING " + ITEM.Name + " : " + msg.message + " pid: " + ITEM.Worker.pid);
|
ToLog("RUNING " + ITEM.Name + " : " + msg.message + " pid: " + ITEM.Worker.pid);
|
||||||
break;
|
break;
|
||||||
|
case "WriteBodyResult":
|
||||||
|
var Block = SERVER.ReadBlockDB(msg.BlockNum);
|
||||||
|
if(Block)
|
||||||
|
{
|
||||||
|
Block.arrContentResult = msg.arrContentResult;
|
||||||
|
SERVER.WriteBodyResultDB(Block);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if(ITEM.OnMessage)
|
if(ITEM.OnMessage)
|
||||||
{
|
{
|
||||||
|
@ -57,7 +57,7 @@ process.on('message', function (msg)
|
|||||||
process.send({cmd:"retcall", id:msg.id, Err:Err, Params:Ret});
|
process.send({cmd:"retcall", id:msg.id, Err:Err, Params:Ret});
|
||||||
break;
|
break;
|
||||||
case "FindTX":
|
case "FindTX":
|
||||||
global.TreeFindTX.SaveValue(msg.TX, msg.TX);
|
global.TreeFindTX.SaveValue(msg.TX, msg);
|
||||||
break;
|
break;
|
||||||
case "SetSmartEvent":
|
case "SetSmartEvent":
|
||||||
global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1);
|
global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1);
|
||||||
|
@ -86,6 +86,21 @@ process.on('message', function (msg)
|
|||||||
ToLogClient0(msg.Str, msg.StrKey, msg.bFinal);
|
ToLogClient0(msg.Str, msg.StrKey, msg.bFinal);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "RetFindTX":
|
||||||
|
{
|
||||||
|
if(msg.WebID)
|
||||||
|
{
|
||||||
|
var F = global.GlobalRunMap[msg.WebID];
|
||||||
|
if(F)
|
||||||
|
{
|
||||||
|
delete global.GlobalRunMap[msg.WebID];
|
||||||
|
F(msg.Result, msg.ResultStr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ArrLogClient.push({text:msg.ResultStr, key:msg.TX, final:msg.bFinal, });
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -600,7 +615,7 @@ HostingCaller.SendTransactionHex = function (Params,response)
|
|||||||
{
|
{
|
||||||
if(typeof Params !== "object" || !Params.Hex)
|
if(typeof Params !== "object" || !Params.Hex)
|
||||||
return {result:0, text:"object requre"};
|
return {result:0, text:"object requre"};
|
||||||
process.RunRPC("AddTransactionFromWeb", Params.Hex, function (Err,text)
|
process.RunRPC("AddTransactionFromWeb", {HexValue:Params.Hex}, function (Err,text)
|
||||||
{
|
{
|
||||||
var Result = {result:!Err, text:text};
|
var Result = {result:!Err, text:text};
|
||||||
var Str = JSON.stringify(Result);
|
var Str = JSON.stringify(Result);
|
||||||
@ -714,8 +729,8 @@ HostingCaller.DappStaticCall = function (Params)
|
|||||||
return {result:0};
|
return {result:0};
|
||||||
return HTTPCaller.DappStaticCall(Params);
|
return HTTPCaller.DappStaticCall(Params);
|
||||||
};
|
};
|
||||||
var GlobalRunID = 0;
|
global.GlobalRunID = 0;
|
||||||
var GlobalRunMap = {};
|
global.GlobalRunMap = {};
|
||||||
process.RunRPC = function (Name,Params,F)
|
process.RunRPC = function (Name,Params,F)
|
||||||
{
|
{
|
||||||
if(F)
|
if(F)
|
||||||
|
Loading…
Reference in New Issue
Block a user