0.884
This commit is contained in:
BIN
Doc/Chinese/Mining.pdf
Normal file
BIN
Doc/Chinese/Mining.pdf
Normal file
Binary file not shown.
BIN
Doc/Chinese/WP_chinese.pdf
Normal file
BIN
Doc/Chinese/WP_chinese.pdf
Normal file
Binary file not shown.
220
Doc/Eng/API.md
Normal file
220
Doc/Eng/API.md
Normal file
@@ -0,0 +1,220 @@
|
||||
## API
|
||||
|
||||
This API is available if the node is running public http-access. Set the constant HTTP_HOSTING_PORT.
|
||||
|
||||
#### Getting the current status of the blockchain
|
||||
http://194.1.237.94/GetCurrentInfo?Diagram=0
|
||||
|
||||
Result:
|
||||
* MaxNumBlockDB - the maximum block number stored in the database (the current height of the blockchain)
|
||||
* CurBlockNum - new block to create
|
||||
* MaxAccID - current maximum account number
|
||||
* MaxDappsID - current maximum Dapp number
|
||||
* VersionNum - version of the program on which the node works
|
||||
|
||||
|
||||
An example of the result:
|
||||
```
|
||||
{"result":1,"VersionNum":706,"MaxNumBlockDB":12371158,"CurBlockNum":12371166,"MaxAccID":187783,"MaxDappsID":20,"FIRST_TIME_BLOCK":1530446400000}
|
||||
```
|
||||
|
||||
#### Get a list of nodes that have a public API
|
||||
http://194.1.237.94/GetNodeList
|
||||
|
||||
An example of the result:
|
||||
```
|
||||
{"arr":[{"ip":"149.154.70.158","port":80},{"ip":"195.211.195.236","port":88}],"result":1}
|
||||
```
|
||||
|
||||
|
||||
#### Getting a list of accounts
|
||||
http://194.1.237.94/GetAccountList?StartNum=0&CountNum=1
|
||||
|
||||
An example of the result:
|
||||
```
|
||||
{"arr":[{"Currency":0,"PubKey":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"Name":"System account","Value":{"SumCOIN":735207181,"SumCENT":160466160,"OperationID":29702004,"Smart":0,"Data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"BlockNumCreate":0,"Adviser":0,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0]},"Num":0,"WN":"","PubKeyStr":"000000000000000000000000000000000000000000000000000000000000000000"}],"result":1}
|
||||
```
|
||||
|
||||
#### Getting a list of blocks
|
||||
http://194.1.237.94/GetBlockList?StartNum=12373020&CountNum=1
|
||||
|
||||
An example of the result:
|
||||
```
|
||||
{"arr":[{"Info":"","TreeHash":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"AddrHash":[59,221,2,0,0,0,245,10,0,0,0,0,51,114,239,24,0,0,83,43,13,45,0,0,109,0,111,11,175,220,151,110],"PrevHash":[43,137,15,86,33,224,34,209,250,223,179,165,117,195,85,221,20,170,165,242,21,224,66,113,34,236,242,73,175,220,151,110],"SumHash":[161,234,144,48,195,161,175,59,95,210,65,224,12,209,47,194,107,237,238,253,203,103,50,204,176,175,14,165,123,176,151,31],"SumPow":343061509,"BodyFileNum":0,"TrDataPos":171851211,"TrDataLen":45,"TrCount":0,"BlockNum":12373020,"SeqHash":[203,159,178,200,40,56,216,192,98,72,79,17,138,85,110,107,9,236,236,192,221,31,8,3,64,220,78,104,23,69,185,237],"Hash":[201,154,249,76,189,63,83,170,17,113,155,168,49,61,237,225,23,82,25,64,252,187,83,235,66,123,53,140,224,15,213,30],"PowHash":[0,0,0,0,0,43,172,90,172,102,174,20,63,206,173,42,64,212,122,194,192,206,0,19,247,148,244,38,50,110,104,65],"Power":42,"bSave":true,"Prepared":true,"Num":12373020,"Miner":187707,"Hash1":[0,0,0,0,0,43,172,90,172,102,174,20,63,206,173,42,64,212,122,194,192,206,0,19,247,148,244,38,50,110,104,65],"Hash2":[0,0,0,0,0,0,26,182,13,93,155,155,161,188,243,123,15,140,197,136,187,52,200,57,96,167,222,160,83,243,232,92]}],"result":1}
|
||||
```
|
||||
|
||||
#### Getting a list of block transactions
|
||||
http://194.1.237.94/GetTransactionList?BlockNum=12373020?StartNum=0&CountNum=10
|
||||
|
||||
An example of the result:
|
||||
```
|
||||
{"arr":[{"body":{"type":"Buffer","data":[119,52,200,188,0,0,0,191,18,76,46,177,111,26,110,203,159,23,235,146,77,199,1,149,89,136,142,14,63,114,189,13,6,60,28,76,11,146,102]},"num":6656082722574,"hashPow":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"HASH":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"power":3,"TimePow":6656082722578.715,"Num":0,"Type":119,"Length":39,"Body":[119,52,200,188,0,0,0,191,18,76,46,177,111,26,110,203,159,23,235,146,77,199,1,149,89,136,142,14,63,114,189,13,6,60,28,76,11,146,102],"Script":"{\n \"Type\": 119,\n \"BlockNum\": 12372020,\n \"Hash\": \"BF124C2EB16F1A6ECB9F17EB924DC7019559888E0E3F72BD0D063C1C4C0B9266\"\n}","Verify":1,"VerifyHTML":"<B style='color:green'>”</B>"}],"result":1}
|
||||
```
|
||||
|
||||
|
||||
#### Getting a list of DAPs
|
||||
|
||||
http://194.1.237.94/GetDappList?StartNum=8&CountNum=1
|
||||
|
||||
An example of the result:
|
||||
```
|
||||
{"arr":[{"Version":0,"TokenGenerate":0,"ISIN":"","Zip":0,"BlockNum":10034043,"TrNum":0,"IconBlockNum":10033892,"IconTrNum":0,"ShortName":"","Name":"List-Lib","Account":187007,"AccountLength":1,"Category1":40,"Category2":0,"Category3":0,"Owner":186573,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"StateFormat":"","Description":"List-lib v1.0","Num":"8","CodeLength":3705,"HTMLLength":0}],"result":1}
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### Getting a list of accounts by public key
|
||||
http://194.1.237.94/GetAccountListByKey?Key=027AE0DCE92D8BE1F893525B226695DDF0FE6AD756349A76777FF51F3B59067D70
|
||||
|
||||
Result:
|
||||
```
|
||||
{"result":1,"arr":[{"Currency":0,"PubKey":{"type":"Buffer","data":[2,122,224,220,233,45,139,225,248,147,82,91,34,102,149,221,240,254,106,215,86,52,154,118,119,127,245,31,59,89,6,125,112]},"Name":"Founder account","Value":{"SumCOIN":40000005,"SumCENT":0,"OperationID":7,"Smart":0,"Data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"BlockNumCreate":0,"Adviser":0,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0]},"Num":8,"WN":""}]}
|
||||
```
|
||||
Note: public key in hex format can be taken from the wallet on EXPLORER -> Accounts (PubKey column)
|
||||
|
||||
|
||||
#### Sending a transaction
|
||||
http://194.1.237.94/SendTransactionHex?Hex=6F030000000000002D00000000000100000000008400000000000100000000000000000004007465737425000000000000007AA29739FD458DF8AB1139881DAA4584CCDA3D4995B6849FB1F55F3B2EA40704116647823E97A60C70213EFA8D83CBFBEE6D753FCA6771B4792985B57186F3BCFBCEC0000000930600000000
|
||||
|
||||
Result:
|
||||
```
|
||||
{"result":1,"text":"OK"}
|
||||
```
|
||||
|
||||
|
||||
Note: The transaction in hex format can be obtained if you use a functions from the js-library
|
||||
* The library is located at: https://github.com/terafoundation/wallet/raw/master/Bin/Light/Tera-light.zip
|
||||
* Example: http://dappsgate.com/test-api.html
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Test2-API </title>
|
||||
|
||||
|
||||
<script type="text/javascript" src="./JS/client.js"></script>
|
||||
<script type="text/javascript" src="./JS/sha3.js"></script>
|
||||
<script type="text/javascript" src="./JS/crypto-client.js"></script>
|
||||
<script type="text/javascript" src="./JS/terahashlib.js"></script>
|
||||
<script type="text/javascript" src="./JS/wallet-lib.js"></script>
|
||||
<script type="text/javascript" src="./JS/sign-lib-min.js"></script>
|
||||
|
||||
<script>
|
||||
|
||||
//Init
|
||||
window.onload=function ()
|
||||
{
|
||||
window.DELTA_FOR_TIME_TX=4;
|
||||
window.MainServer={ip:"dappsgate.com",port:80};
|
||||
|
||||
//run every 1 sec for getting current block number and network time
|
||||
setInterval(function ()
|
||||
{
|
||||
GetData("GetCurrentInfo",{}, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
SetBlockChainConstant(Data);
|
||||
});
|
||||
},1000);
|
||||
}
|
||||
|
||||
|
||||
//Use API
|
||||
function SignTr()
|
||||
{
|
||||
var PrivKey=$("idPrivKey").value;
|
||||
var TR=JSON.parse($("idTr").value);
|
||||
|
||||
|
||||
|
||||
|
||||
GetSignTransaction(TR,PrivKey,function ()
|
||||
{
|
||||
TR.Sign=GetHexFromArr(TR.Sign);
|
||||
$("idTr").value=JSON.stringify(TR,"",4);
|
||||
});
|
||||
}
|
||||
|
||||
function GetHexFromTr()
|
||||
{
|
||||
var TR=JSON.parse($("idTr").value);
|
||||
var Body=GetArrFromTR(TR);
|
||||
if(!TR.Sign)
|
||||
{
|
||||
$("idOut").value="Error: sign tx";
|
||||
return "";
|
||||
}
|
||||
|
||||
var Arr=GetArrFromHex(TR.Sign);
|
||||
WriteArr(Body,Arr,64);
|
||||
Body.length+=12;
|
||||
CreateHashBodyPOWInnerMinPower(Body);
|
||||
var StrHex=GetHexFromArr(Body);
|
||||
|
||||
$("idOut").value=StrHex;
|
||||
return StrHex;
|
||||
}
|
||||
|
||||
function SendTr()
|
||||
{
|
||||
var StrHex=GetHexFromTr();
|
||||
if(!StrHex)
|
||||
return;
|
||||
|
||||
GetData("SendTransactionHex",{Hex:StrHex}, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
{
|
||||
$("idOut").value=Data.text;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Data)
|
||||
$("idOut").value="Error: "+Data.text;
|
||||
else
|
||||
$("idOut").value="Error";
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<B>Priv key:</B>
|
||||
<INPUT type="search" id="idPrivKey" value="7AF1726733E39D95DD7E9DAD1F6F2B76D0477B3B604439B1353B97BC24A72844" style="width: 600px"><BR>
|
||||
<B>Tx</B> (after each transaction is sent, the OperationID number is increased by 1):<BR>
|
||||
<textarea id="idTr" rows="20" cols="98">
|
||||
{
|
||||
"Type": 111,
|
||||
"Version": 3,
|
||||
"Reserve": 0,
|
||||
"FromID": 189115,
|
||||
"OperationID": 2,
|
||||
"To": [
|
||||
{
|
||||
"PubKey": "",
|
||||
"ID": 9,
|
||||
"SumCOIN": 0,
|
||||
"SumCENT": 1
|
||||
}
|
||||
],
|
||||
"Description": "Test",
|
||||
"Body": "",
|
||||
"Sign": ""
|
||||
}
|
||||
</textarea><BR>
|
||||
<B>Actions:</B><BR>
|
||||
<button onclick="SignTr()">Sign Tx</button>
|
||||
<button onclick="GetHexFromTr()">Get Hex</button>
|
||||
<button onclick="SendTr()">Send tx</button>
|
||||
|
||||
<BR><B>Result:</B><BR>
|
||||
<textarea id="idOut" rows="20" cols="98"></textarea>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
61
Doc/Eng/CONSTANTS.MD
Normal file
61
Doc/Eng/CONSTANTS.MD
Normal file
@@ -0,0 +1,61 @@
|
||||
Description of constants:
|
||||
````javascript
|
||||
{
|
||||
//IDENTIFICATION OF GLOBAL NETWORK TIME OF TERA
|
||||
"AUTO_COORECT_TIME": 1, //a sign the auto correction time according to network time Tera - must be activated
|
||||
"DELTA_CURRENT_TIME": 12345, //time deviation relative to Tera network (set automatically if auto-correction is enabled)
|
||||
|
||||
|
||||
//IDENTIFICATION OF NODES
|
||||
"COMMON_KEY": "TRUST-CLUSTER", //the total key for the trusted nodes (the nodes not to ban each other)
|
||||
"NODES_NAME": "Node001", //the name of the trusted node that appears on the NETWORK page
|
||||
"SERVER_PRIVATE_KEY_HEX": "222222222222222222222222222222222222222222222",//private key of the node, which is used to set the node address
|
||||
"USE_NET_FOR_SERVER_ADDRES": 1, //indicates whether to add information from the mac address to the node address. Useful when copying nodes - no need to manually change private nodes
|
||||
|
||||
//DIRECT CONNECTION
|
||||
"NET_WORK_MODE": {
|
||||
"ip": "", //the IP address of the node, if not specified, is determined automatically
|
||||
"port": 30000, //port
|
||||
"UseDirectIP": true //indication of direct connection, if not specified, then the gray ip mode is enabled without the possibility of mining
|
||||
},
|
||||
|
||||
|
||||
//STATISTICS
|
||||
"STAT_MODE": 1, //enable statistics-see Counters, Monitor pages
|
||||
"MAX_STAT_PERIOD": 3600, //statistics period
|
||||
|
||||
|
||||
//HTTP access to the wallet and control Noda
|
||||
"HTTP_PORT_NUMBER": 8000, //http access port
|
||||
"HTTP_PORT_PASSWORD": "SecretWord", //password
|
||||
"HTTP_IP_CONNECT": "123.111.222.233, 123.11.22.223", //enable IP address filter for remote management (wallet) over http
|
||||
"WALLET_NAME": "=Node1=", //the name of the wallet displayed on the tab in the browser
|
||||
|
||||
//Information display
|
||||
"COUNT_VIEW_ROWS": 20, //number of rows per page - displayed in all tables with pagination
|
||||
"ALL_VIEW_ROWS": 1, //view all rows of blockchain tables, even if they are blacklisted (for example, accounts created by hackers or DAPs misleading)
|
||||
"ALL_LOG_TO_CLIENT": 1, //displaying the node log in the wallet
|
||||
|
||||
//MINING:
|
||||
"USE_MINING": true, //enable mining
|
||||
"MINING_START_TIME": "6:30", //mining start time during the day in the format hh:mm: ss time in UTC (mining must be enabled by the constant USE_MINING), if the value is not set then mining is performed all the time
|
||||
"MINING_PERIOD_TIME": "16:30", //the period of mining since the beginning of the format hh: mm:ss
|
||||
"POW_MAX_PERCENT": "70", //max CPU usage as a percentage of each mining process
|
||||
"COUNT_MINING_CPU": 0, //number of processes to run during mining
|
||||
"SIZE_MINING_MEMORY": 20000000, //the total number of memory allocated for mining on all processes (in bytes)
|
||||
"POW_RUN_COUNT": 5000, //the number of hashes (hash1, hash2) calculated at each mining iteration in each process (each iteration is started once in 1 MS - but within this second the POW_MAX_PERCENT parameter is taken)
|
||||
"POW_RUN_COUNT_FIND": 1000, //the number of hashes (hash2) that are searched by brute force to improve the search probability. Recommended value is equal to the number of network nodes (with the same power)
|
||||
|
||||
|
||||
//ETC
|
||||
"USE_AUTO_UPDATE": 1, //using online auto-updates
|
||||
"RESTART_PERIOD_SEC": 0, //auto restart nodes after a specified period in seconds
|
||||
"MAX_GRAY_CONNECTIONS_TO_SERVER": 10,//the number of servers to which the node connects in gray ip mode
|
||||
"TRANSACTION_PROOF_COUNT": 2000000, //number of transactions stored in the database to be able to roll back the chain
|
||||
|
||||
//WATCHDOG
|
||||
"WATCHDOG_BADACCOUNT": 1, //watching for errors of the type "BAD ACCOUNT"
|
||||
"COREY_WATCH_DOG": 1 //watching for the chain of sync with the public network when mining
|
||||
|
||||
}
|
||||
````
|
||||
BIN
Doc/Eng/TERA_wallet_handbook_DRAFT.pdf
Normal file
BIN
Doc/Eng/TERA_wallet_handbook_DRAFT.pdf
Normal file
Binary file not shown.
217
Doc/Rus/API.md
Normal file
217
Doc/Rus/API.md
Normal file
@@ -0,0 +1,217 @@
|
||||
## API
|
||||
|
||||
Данный API доступен если на ноде запущен публичный http-доступ. Т.е. задана константа HTTP_HOSTING_PORT
|
||||
|
||||
|
||||
#### Получение текущего статуса блокчейна
|
||||
http://194.1.237.94/GetCurrentInfo?Diagram=0
|
||||
|
||||
Result:
|
||||
* MaxNumBlockDB - максимальный номер блока записанный в БД (текущая высота блокчейна)
|
||||
* CurBlockNum - новый формируемый блок
|
||||
* MaxAccID - текущий максимальный номер счета
|
||||
* MaxDappsID - текущий максимальный номер Dapp
|
||||
* VersionNum - версия программы на которой работает нода
|
||||
|
||||
|
||||
Пример результата:
|
||||
```
|
||||
{"result":1,"VersionNum":706,"MaxNumBlockDB":12371158,"CurBlockNum":12371166,"MaxAccID":187783,"MaxDappsID":20,"FIRST_TIME_BLOCK":1530446400000}
|
||||
```
|
||||
|
||||
#### Получение списка нод, имеющий публичный интерфейс API
|
||||
http://194.1.237.94/GetNodeList
|
||||
|
||||
Пример результата:
|
||||
```
|
||||
{"arr":[{"ip":"149.154.70.158","port":80},{"ip":"195.211.195.236","port":88}],"result":1}
|
||||
```
|
||||
|
||||
|
||||
#### Получение списка счетов
|
||||
http://194.1.237.94/GetAccountList?StartNum=0&CountNum=1
|
||||
|
||||
Пример результата:
|
||||
```
|
||||
{"arr":[{"Currency":0,"PubKey":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"Name":"System account","Value":{"SumCOIN":735207181,"SumCENT":160466160,"OperationID":29702004,"Smart":0,"Data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"BlockNumCreate":0,"Adviser":0,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0]},"Num":0,"WN":"","PubKeyStr":"000000000000000000000000000000000000000000000000000000000000000000"}],"result":1}
|
||||
```
|
||||
|
||||
#### Получение списка блоков
|
||||
http://194.1.237.94/GetBlockList?StartNum=12373020&CountNum=1
|
||||
|
||||
Пример результата:
|
||||
```
|
||||
{"arr":[{"Info":"","TreeHash":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"AddrHash":[59,221,2,0,0,0,245,10,0,0,0,0,51,114,239,24,0,0,83,43,13,45,0,0,109,0,111,11,175,220,151,110],"PrevHash":[43,137,15,86,33,224,34,209,250,223,179,165,117,195,85,221,20,170,165,242,21,224,66,113,34,236,242,73,175,220,151,110],"SumHash":[161,234,144,48,195,161,175,59,95,210,65,224,12,209,47,194,107,237,238,253,203,103,50,204,176,175,14,165,123,176,151,31],"SumPow":343061509,"BodyFileNum":0,"TrDataPos":171851211,"TrDataLen":45,"TrCount":0,"BlockNum":12373020,"SeqHash":[203,159,178,200,40,56,216,192,98,72,79,17,138,85,110,107,9,236,236,192,221,31,8,3,64,220,78,104,23,69,185,237],"Hash":[201,154,249,76,189,63,83,170,17,113,155,168,49,61,237,225,23,82,25,64,252,187,83,235,66,123,53,140,224,15,213,30],"PowHash":[0,0,0,0,0,43,172,90,172,102,174,20,63,206,173,42,64,212,122,194,192,206,0,19,247,148,244,38,50,110,104,65],"Power":42,"bSave":true,"Prepared":true,"Num":12373020,"Miner":187707,"Hash1":[0,0,0,0,0,43,172,90,172,102,174,20,63,206,173,42,64,212,122,194,192,206,0,19,247,148,244,38,50,110,104,65],"Hash2":[0,0,0,0,0,0,26,182,13,93,155,155,161,188,243,123,15,140,197,136,187,52,200,57,96,167,222,160,83,243,232,92]}],"result":1}
|
||||
```
|
||||
|
||||
#### Получение списка транзакций блока
|
||||
http://194.1.237.94/GetTransactionList?BlockNum=12373020?StartNum=0&CountNum=10
|
||||
|
||||
Пример результата:
|
||||
```
|
||||
{"arr":[{"body":{"type":"Buffer","data":[119,52,200,188,0,0,0,191,18,76,46,177,111,26,110,203,159,23,235,146,77,199,1,149,89,136,142,14,63,114,189,13,6,60,28,76,11,146,102]},"num":6656082722574,"hashPow":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"HASH":[21,49,137,245,12,76,228,206,53,77,30,148,98,24,170,149,57,42,182,70,241,34,109,212,139,164,6,188,58,123,144,148],"power":3,"TimePow":6656082722578.715,"Num":0,"Type":119,"Length":39,"Body":[119,52,200,188,0,0,0,191,18,76,46,177,111,26,110,203,159,23,235,146,77,199,1,149,89,136,142,14,63,114,189,13,6,60,28,76,11,146,102],"Script":"{\n \"Type\": 119,\n \"BlockNum\": 12372020,\n \"Hash\": \"BF124C2EB16F1A6ECB9F17EB924DC7019559888E0E3F72BD0D063C1C4C0B9266\"\n}","Verify":1,"VerifyHTML":"<B style='color:green'>”</B>"}],"result":1}
|
||||
```
|
||||
|
||||
|
||||
#### Получение списка ДАпов
|
||||
http://194.1.237.94/GetDappList?StartNum=8&CountNum=1
|
||||
|
||||
Пример результата:
|
||||
```
|
||||
{"arr":[{"Version":0,"TokenGenerate":0,"ISIN":"","Zip":0,"BlockNum":10034043,"TrNum":0,"IconBlockNum":10033892,"IconTrNum":0,"ShortName":"","Name":"List-Lib","Account":187007,"AccountLength":1,"Category1":40,"Category2":0,"Category3":0,"Owner":186573,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},"StateFormat":"","Description":"List-lib v1.0","Num":"8","CodeLength":3705,"HTMLLength":0}],"result":1}
|
||||
```
|
||||
|
||||
|
||||
#### Получение списка счетов по публичному ключу
|
||||
http://194.1.237.94/GetAccountListByKey?Key=027AE0DCE92D8BE1F893525B226695DDF0FE6AD756349A76777FF51F3B59067D70
|
||||
|
||||
|
||||
Результат:
|
||||
```
|
||||
{"result":1,"arr":[{"Currency":0,"PubKey":{"type":"Buffer","data":[2,122,224,220,233,45,139,225,248,147,82,91,34,102,149,221,240,254,106,215,86,52,154,118,119,127,245,31,59,89,6,125,112]},"Name":"Founder account","Value":{"SumCOIN":40000005,"SumCENT":0,"OperationID":7,"Smart":0,"Data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"BlockNumCreate":0,"Adviser":0,"Reserve":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0]},"Num":8,"WN":""}]}
|
||||
```
|
||||
Комментарий: публичный ключ в формате hex можно взять из кошельке на EXPLORER->Accounts (колонка PubKey)
|
||||
|
||||
|
||||
#### Отправка транзакции
|
||||
http://194.1.237.94/SendTransactionHex?Hex=6F030000000000002D00000000000100000000008400000000000100000000000000000004007465737425000000000000007AA29739FD458DF8AB1139881DAA4584CCDA3D4995B6849FB1F55F3B2EA40704116647823E97A60C70213EFA8D83CBFBEE6D753FCA6771B4792985B57186F3BCFBCEC0000000930600000000
|
||||
|
||||
Результат:
|
||||
```
|
||||
{"result":1,"text":"OK"}
|
||||
```
|
||||
Комментарий: транзакцию в формате hex можно получить если использовать функции из библиотек на языке javascript
|
||||
* Библиотеки находятся по адресу: https://github.com/terafoundation/wallet/raw/master/Bin/Light/Tera-light.zip
|
||||
* Пример: http://dappsgate.com/test-api.html
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Test2-API </title>
|
||||
|
||||
|
||||
<script type="text/javascript" src="./JS/client.js"></script>
|
||||
<script type="text/javascript" src="./JS/sha3.js"></script>
|
||||
<script type="text/javascript" src="./JS/crypto-client.js"></script>
|
||||
<script type="text/javascript" src="./JS/terahashlib.js"></script>
|
||||
<script type="text/javascript" src="./JS/wallet-lib.js"></script>
|
||||
<script type="text/javascript" src="./JS/sign-lib-min.js"></script>
|
||||
|
||||
<script>
|
||||
|
||||
//Init
|
||||
window.onload=function ()
|
||||
{
|
||||
window.DELTA_FOR_TIME_TX=4;
|
||||
window.MainServer={ip:"dappsgate.com",port:80};
|
||||
|
||||
//run every 1 sec for getting current block number and network time
|
||||
setInterval(function ()
|
||||
{
|
||||
GetData("GetCurrentInfo",{}, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
SetBlockChainConstant(Data);
|
||||
});
|
||||
},1000);
|
||||
}
|
||||
|
||||
|
||||
//Use API
|
||||
function SignTr()
|
||||
{
|
||||
var PrivKey=$("idPrivKey").value;
|
||||
var TR=JSON.parse($("idTr").value);
|
||||
|
||||
|
||||
|
||||
|
||||
GetSignTransaction(TR,PrivKey,function ()
|
||||
{
|
||||
TR.Sign=GetHexFromArr(TR.Sign);
|
||||
$("idTr").value=JSON.stringify(TR,"",4);
|
||||
});
|
||||
}
|
||||
|
||||
function GetHexFromTr()
|
||||
{
|
||||
var TR=JSON.parse($("idTr").value);
|
||||
var Body=GetArrFromTR(TR);
|
||||
if(!TR.Sign)
|
||||
{
|
||||
$("idOut").value="Error: sign tx";
|
||||
return "";
|
||||
}
|
||||
|
||||
var Arr=GetArrFromHex(TR.Sign);
|
||||
WriteArr(Body,Arr,64);
|
||||
Body.length+=12;
|
||||
CreateHashBodyPOWInnerMinPower(Body);
|
||||
var StrHex=GetHexFromArr(Body);
|
||||
|
||||
$("idOut").value=StrHex;
|
||||
return StrHex;
|
||||
}
|
||||
|
||||
function SendTr()
|
||||
{
|
||||
var StrHex=GetHexFromTr();
|
||||
if(!StrHex)
|
||||
return;
|
||||
|
||||
GetData("SendTransactionHex",{Hex:StrHex}, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
{
|
||||
$("idOut").value=Data.text;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(Data)
|
||||
$("idOut").value="Error: "+Data.text;
|
||||
else
|
||||
$("idOut").value="Error";
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<B>Priv key:</B>
|
||||
<INPUT type="search" id="idPrivKey" value="7AF1726733E39D95DD7E9DAD1F6F2B76D0477B3B604439B1353B97BC24A72844" style="width: 600px"><BR>
|
||||
<B>Tx</B> (after each transaction is sent, the OperationID number is increased by 1):<BR>
|
||||
<textarea id="idTr" rows="20" cols="98">
|
||||
{
|
||||
"Type": 111,
|
||||
"Version": 3,
|
||||
"Reserve": 0,
|
||||
"FromID": 189115,
|
||||
"OperationID": 2,
|
||||
"To": [
|
||||
{
|
||||
"PubKey": "",
|
||||
"ID": 9,
|
||||
"SumCOIN": 0,
|
||||
"SumCENT": 1
|
||||
}
|
||||
],
|
||||
"Description": "Test",
|
||||
"Body": "",
|
||||
"Sign": ""
|
||||
}
|
||||
</textarea><BR>
|
||||
<B>Actions:</B><BR>
|
||||
<button onclick="SignTr()">Sign Tx</button>
|
||||
<button onclick="GetHexFromTr()">Get Hex</button>
|
||||
<button onclick="SendTr()">Send tx</button>
|
||||
|
||||
<BR><B>Result:</B><BR>
|
||||
<textarea id="idOut" rows="20" cols="98"></textarea>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
63
Doc/Rus/CONSTANTS.MD
Normal file
63
Doc/Rus/CONSTANTS.MD
Normal file
@@ -0,0 +1,63 @@
|
||||
Назначение констант:
|
||||
````javascript
|
||||
{
|
||||
//ИДЕНТИФИКАЦИЯ ГЛОБАЛЬНОГО ВРЕМЕНИ СЕТИ ТЕРА
|
||||
"AUTO_COORECT_TIME": 1, //признак автокорректировки времени по времени сети Тера - должно быть включено всегда
|
||||
"DELTA_CURRENT_TIME": 12345, //отклонение времени относительно сети Тера (устанавливается автоматически если включена автокорректировка)
|
||||
|
||||
|
||||
//ИДЕНТИФИКАЦИЯ НОДЫ
|
||||
"COMMON_KEY": "TRUST-CLUSTER", //общий ключ доверенных нод (ноды не банят друг друга)
|
||||
"NODES_NAME": "Node001", //имя доверенной ноды, которое отображается на странице NETWORK
|
||||
"SERVER_PRIVATE_KEY_HEX": "222222222222222222222222222222222222222222222",//приватный ключ ноды, по которому задается адрес ноды
|
||||
"USE_NET_FOR_SERVER_ADDRES": 1, //признак добавления в адрес ноды информации из mac адреса. Полезно при копировании нод-не нужно вручную менять приватники нод
|
||||
|
||||
|
||||
//ПРЯМОЕ ПОДКЛЮЧЕНИЕ
|
||||
"NET_WORK_MODE": {
|
||||
"ip": "", //ip-адрес ноды, если не задан определяется автоматически
|
||||
"port": 30000, //порт
|
||||
"UseDirectIP": true //признак прямого подключения, если не задан, то включается режим серых ip без возможности майнинга
|
||||
},
|
||||
|
||||
|
||||
//СТАТИСТИКА
|
||||
"STAT_MODE": 1, //включение статистики - см. страницы Counters, Monitor
|
||||
"MAX_STAT_PERIOD": 3600, //период статистики
|
||||
|
||||
|
||||
//HTTP доступ к кошельку и управлению нодой
|
||||
"HTTP_PORT_NUMBER": 8000, //порт http - доступа
|
||||
"HTTP_PORT_PASSWORD": "SecretWord", //пароль
|
||||
"HTTP_IP_CONNECT": "123.111.222.233, 123.11.22.223", //включение фильтра ip адресов по которому доступно удаленное управление(wallet) по http
|
||||
"WALLET_NAME": "=Node1=", //имя кошелька отображаемого на закладке в браузере
|
||||
|
||||
|
||||
//Отображение информации
|
||||
"COUNT_VIEW_ROWS": 20, //число строк в одной странице - отображается во всех таблицах с пагинацией
|
||||
"ALL_VIEW_ROWS": 1, //просмотр всех строк таблиц блокчейна, даже если они попали в черных список (например аккаунты созданные хакерами или Дапы вводящие в заблуждение)
|
||||
"ALL_LOG_TO_CLIENT": 1, //отображение лога ноды в кошельке
|
||||
|
||||
|
||||
//МАЙНИНГ:
|
||||
"USE_MINING": true, //включение майнинга
|
||||
"MINING_START_TIME": "6:30", //время начала работы майнинга в течении суток в формате hh:mm:ss время в UTC (при этом майнинг должен быть включен константой USE_MINING), если значение не задано то майнинг выполняется все время
|
||||
"MINING_PERIOD_TIME": "16:30", //период работы майнинга с момента начала формате hh:mm:ss
|
||||
"POW_MAX_PERCENT": "70", //макс использование CPU в процентах на каждый процесс при майнинге
|
||||
"COUNT_MINING_CPU": 0, //число процессов запускаемых при майнинге
|
||||
"SIZE_MINING_MEMORY": 20000000, //общее число памяти выделяемое для майнинга на все процессы (величина в байтах)
|
||||
"POW_RUN_COUNT": 5000, //число хешей (hash1, hash2) рассчитанных при каждой итерации майнинга в каждом процессе (каждая итерация запускается раз в 1 мс - но в пределах секунды учитывается параметр POW_MAX_PERCENT)
|
||||
"POW_RUN_COUNT_FIND": 1000, //число хешей (hash2), которые ищутся путем перебора для улучшения вероятности поиска. Рекомендуется значение равное количеству нод сети (с такой же мощностью).
|
||||
|
||||
|
||||
//ПРОЧЕЕ
|
||||
"USE_AUTO_UPDATE": 1, //использование автообновлений из сети
|
||||
"RESTART_PERIOD_SEC": 0, //авто рестарт ноды через заданный период в сек
|
||||
"MAX_GRAY_CONNECTIONS_TO_SERVER": 10,//число серверов, к которым подключается нода в режиме серых ip
|
||||
"TRANSACTION_PROOF_COUNT": 2000000, //число транзакций сохраняемых в базе данных для возможности отката цепочки назад
|
||||
|
||||
//WATCHDOG
|
||||
"WATCHDOG_BADACCOUNT": 1, //слежение за наличием ошибок тип "BAD ACCOUNT"
|
||||
"COREY_WATCH_DOG": 1 //слежение за расcинхронизацией цепочки с общей сетью при майнинге
|
||||
}
|
||||
````
|
||||
283
Doc/Rus/README.md
Normal file
283
Doc/Rus/README.md
Normal file
@@ -0,0 +1,283 @@
|
||||
# TERA PLATFORM
|
||||
|
||||
## Легкий кошелек (веб-версия):
|
||||
https://terafoundation.org/web-wallet.html
|
||||
* Примечание: легкий кошелек имеет децентрализованное ядро - т.е. работает со всеми доступными нодами в сети
|
||||
|
||||
## Установка легкого кошелька на Windows:
|
||||
* https://sourceforge.net/p/tera/code/ci/master/tree/Bin/Light/tera_light_setup.exe?format=raw
|
||||
* [Light client (zip)](https://sourceforge.net/p/tera/code/ci/master/tree/Bin/Light/Tera-light.zip?format=raw)
|
||||
|
||||
## Установка полной ноды из исходников по шагам:
|
||||
|
||||
|
||||
Внимание:
|
||||
* Для быстрой начальной загрузки кошелька выложена [ссылка](https://sourceforge.net/p/tera/code/ci/master/tree/Torrent/Tera-folder-DB.torrent?format=raw) на загрузку базы данных по P2P протоколу. Скачайте через торрент файл и распакуйте его. Далее положите папку DB в каталог DATA кошелька (с полной заменой).
|
||||
* После установки, указанной ниже, введите в браузере публичный адрес вашего сервера, например: 12.34.56.78:8080
|
||||
* Для майнинга Вам нужно иметь статический (или публичный) IP-адрес и открытый порт.
|
||||
* Не храните приватные ключи на удаленных серверах.
|
||||
* Рекомендуем поставить дополнительный пароль на приватный ключ (кнопка "Set password") - в этом случае приватный ключ будет храниться в файле кошелька в зашифрованном виде.
|
||||
* Если вы не указали http пароль, то возможен доступ только с локального адреса: 127.0.0.1:8080
|
||||
* Установите удаленный доступ к ноде только из заданного узла через константу HTTP_IP_CONNECT (например: "HTTP_IP_CONNECT":"122.22.33.11, 122.22.33.12")
|
||||
* При установке обратите внимание на криптографическую библиотеку **secp256k1**. При ее компиляции (командной npm install) не должно быть ошибок.
|
||||
|
||||
|
||||
|
||||
## Установка на Windows:
|
||||
|
||||
1. Скачайте и установите Nodejs https://nodejs.org (рекомендуется версия v8.11)
|
||||
2. Скачайте и установите git https://git-scm.com/download/win
|
||||
3. Далее выполните команды (для этого запустите программу cmd или PowerShell):
|
||||
```
|
||||
cd ..\..\..\
|
||||
git clone https://git.code.sf.net/p/tera/code wallet
|
||||
npm install --global --production windows-build-tools
|
||||
npm install -g node-gyp
|
||||
cd wallet/Source
|
||||
npm install
|
||||
node set httpport:8080 password:<секретное слово без пробела>
|
||||
run-node.bat
|
||||
|
||||
```
|
||||
Если вы хотите запускать кошелек в качестве фонового процесса, то вместо последней команды (run-node.bat) выполните следующие:
|
||||
```
|
||||
npm install pm2 -g
|
||||
pm2 start run-node.js
|
||||
```
|
||||
|
||||
### Открытие портов (для майнинга):
|
||||
```
|
||||
netsh advfirewall firewall add rule name="Open 30000 port" protocol=TCP localport=30000 action=allow dir=IN
|
||||
```
|
||||
|
||||
### Обновления
|
||||
|
||||
```
|
||||
cd wallet
|
||||
git reset --hard
|
||||
git clean -f
|
||||
git pull
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Установка на Linux
|
||||
|
||||
Просто введите подряд в ssh-терминал команды указанные ниже (в зависимости от версии дистрибутива)
|
||||
|
||||
|
||||
|
||||
### Дистрибутив CentOS 7:
|
||||
|
||||
```
|
||||
sudo yum install -y git
|
||||
curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
|
||||
sudo yum install -y nodejs
|
||||
sudo yum install gcc gcc-c++
|
||||
sudo npm install pm2 -g
|
||||
sudo git clone https://git.code.sf.net/p/tera/code wallet
|
||||
cd wallet/Source
|
||||
sudo npm install
|
||||
sudo node set httpport:8080 password:<секретное слово без пробела>
|
||||
sudo pm2 start run-node.js
|
||||
```
|
||||
|
||||
### открытие всех портов:
|
||||
```
|
||||
systemctl stop firewalld
|
||||
systemctl disable firewalld
|
||||
```
|
||||
|
||||
|
||||
### Дистрибутив UBUNTU 18.4:
|
||||
|
||||
```
|
||||
sudo apt-get install -y git
|
||||
sudo apt-get install -y nodejs
|
||||
sudo apt-get install -y npm
|
||||
sudo npm install pm2 -g
|
||||
sudo git clone https://git.code.sf.net/p/tera/code wallet
|
||||
sudo apt install build-essential
|
||||
sudo apt group install "Development Tools"
|
||||
cd wallet/Source
|
||||
sudo npm install
|
||||
sudo node set httpport:8080 password:<секретное слово без пробела>
|
||||
sudo pm2 start run-node.js
|
||||
```
|
||||
|
||||
### открытие портов:
|
||||
```
|
||||
sudo ufw allow 30000/tcp
|
||||
sudo ufw allow 8080/tcp
|
||||
```
|
||||
|
||||
### Дистрибутив UBUNTU 16 перед загрузкой ноды выполнить:
|
||||
```
|
||||
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Обновления
|
||||
|
||||
```
|
||||
cd wallet
|
||||
sudo git reset --hard
|
||||
sudo git pull
|
||||
```
|
||||
|
||||
## MAIN NETWORK
|
||||
Значения по умолчанию:
|
||||
```
|
||||
port:30000
|
||||
httpport:8080
|
||||
```
|
||||
|
||||
|
||||
## TEST NETWORK
|
||||
Значения по умолчанию:
|
||||
```
|
||||
port:40000
|
||||
httpport:8080
|
||||
```
|
||||
Запуск:
|
||||
```
|
||||
cp -a Source SourceTest
|
||||
cd SourceTest
|
||||
sudo node set-test httpport:8080 password:SecretWord
|
||||
sudo pm2 start run-test.js
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Спецификация
|
||||
* Название: TERA
|
||||
* Консенсус: PoW
|
||||
* Алгоритм: Terahash (sha3 + оптимизация на использование памяти)
|
||||
* Максимальная эмиссия: 1 млрд (TER)
|
||||
* Награда за блок: 1-20 монет, зависит от мощности сети (одна миллиардная часть от остатка нераспределенной суммы монет и умноженная на сотую часть квадрата логарифма мощности сети)
|
||||
* Премайн: 5%
|
||||
* Фонд разработки: 1% от майнинга
|
||||
* Время генерации блока: 1 секунда
|
||||
* Время подтверждения блока: 8 секунд
|
||||
* Размер блока: 130 Кбайт
|
||||
* Скорость: от 1000 транзакций в секунду
|
||||
* Комиссия в транзакциях: бесплатно
|
||||
* Криптография: sha3, secp256k1
|
||||
* Защита от ДДОС: PoW (расчет хеша)
|
||||
* Платформа: Node.JS
|
||||
* Язык смарт-контрактов: Javascript
|
||||
|
||||
|
||||
|
||||
|
||||
## КОШЕЛЕК
|
||||
### Запуск кошелька
|
||||
Дождитесь окончания синхронизации - должна появиться зеленая надпись Synchronization complete
|
||||
Для майнинга нужно создать счет, после записи в блокчейн укажите этот номер (ID) в настройках SET MINING.
|
||||
* Примечание: нужно иметь статический IP-адрес и открытый порт 30000 (его можно поменять в программе). Если вы имеете несколько нод на одном ip-адресе, то поставьте для них разные порты (30001,30002 и т.д.)
|
||||
|
||||
Кошелек имеет два режима ввода ключа. Приватный и публичный. Публичный нужен для работы кошелька в режиме просмотра и отправки уже подписанных транзакций (например через флешку с другого компьютера, который не подключен к сети)
|
||||
|
||||
|
||||
|
||||
|
||||
## Эмиссия
|
||||
Максимальная эмиссия: 1 млрд (TER)
|
||||
Награда за блок: 1-20 монет, зависит от мощности сети (одна миллиардная часть от остатка нераспределенной суммы монет и умноженная на сотую часть квадрата логарифма мощности сети)
|
||||
|
||||
В первый год работы сети (когда номер блока находится в диапазоне от 2 млн до 30 млн) работает реферальная программа майнинга. Если майнер указал адвайзера в своем кошельке, то он получает примерно двукратный размер награды, а его адвайзер получает однократную награду. Таким образом при начале действии реферальной программы эмиссия примерно утраивается.
|
||||
Технически адвайзер это номер счета, любой счет может стать адвайзером, при условии что он был создан более 1 млн блоков назад (т.е. примерно 12 дней).
|
||||
В целях сглаживания кривой эмиссии, сумма награды за реферальный майнинг умножается на коэффициент, принимающий значение от 1 до 0. Коэффициент принимает значение равное 1 в начале запуска программы и плавно меняется до 0 к концу действия программы (до 30 млн-го блока).
|
||||
|
||||
### Пример расчета эмиссии монет:
|
||||
Допустим сейчас мощность сети равняется 30 битам в хеше блока, а всего нераспределенных монет 1 млрд и мы находимся в самом начале действия программы майнинга, тогда одна награда равняется 900/100=9 монет.
|
||||
Монеты распределяются следующим образом: 2 награды майнеру, 1 награда адвайзеру, а всего будет списано с системного счета 27 монет (3x9 = 27).
|
||||
В случае, когда мы находимся в середине реферальной программы майнинга, когда коэффициент равен 0.5, эмиссия принимает следующие значения в приведенном выше примере: 1.5 награды майнеру, 0.5 награда адвайзеру, а всего будет списано с системного счета 18 монет (2x9 = 18).
|
||||
|
||||
|
||||
|
||||
## Описание принципа хранения монет
|
||||
Монеты хранятся на счетах, по аналогии с банковскими счетами. Счета нумеруются с 0 по порядку. Нулевой номер счета имеет системный аккаунт, на который первоначально эмитировано 1 млрд монет. Для создания нового счета нужно в сеть отправить спец. транзакцию с кодом 100, в которой указывается публичный ключ владельца счета и необязательный параметр название счета (строка до 40 байт длины). Название желательно для проверки правильности ввода номера счета при отправке платежа.
|
||||
Минимальный размер транзакции перевода монет со счета на счет равен 114 байтам. Такой размер получается в том случае, если указан один получатель и нет описания назначения платежа.
|
||||
Транзакция в текстовом в формате JSON выглядит так:
|
||||
```js
|
||||
{
|
||||
"Type": 110,
|
||||
"Version": 2,
|
||||
"Currency": 0,
|
||||
"FromID": 1,
|
||||
"OperationID": 40167,
|
||||
"To":
|
||||
[
|
||||
{
|
||||
"ID": 2,
|
||||
"SumTER": 100,
|
||||
"SumCENT": 0
|
||||
}
|
||||
],
|
||||
"Description": "test",
|
||||
"Sign": "B39C39D91136E92C5B9530ABC683D9A1AF51E27382AFC69EA3B1F14AD7C4CDBE46D36BD743F2B4AE7760F8DDE706D81FB8201ABBF27DABF6F1EC658FE432C141"
|
||||
}
|
||||
```
|
||||
* Примечание: транзакция в примере выше имеет длину 118 байт
|
||||
|
||||
Version = 0 - цифровая подпись содержимого транзакции
|
||||
Version = 2 - цифровая подпись содержимого транзакции + список 33 байтных публичных ключей получателей. Применяется для защиты от мутабельности аккаунтов при маленьком времени подтверждении. Например создается аккаунт и в следующий блок отправляется транзакция на перевод монет на этот счет. Потом транзакция из первого блока исчезает вследствии мутабельности блокчейн сети, в вместо нее создается другая транзакция создания счета - от неизвестной третьей стороны. В этом случае монеты не переведутся на неизвестный счет и они не будут потеряны, т.к. произойдет проверка соответствия публичного кошелька получателя требуемому значению.
|
||||
Version = 3 - поддержка переводов на счета со смарт-контрактами
|
||||
|
||||
Текстовое представление запаковывается в бинарный формат + добавляется 12 байт POW (для защиты от ДДОС).
|
||||
Назначение платежа допускается до 200 байт. Вообще размер ограничен 65535 байтами, но 200 байт это размер который видят кошельки пользователей, большую длину они обрезают.
|
||||
Чем больше длина транзакции, тем больше нужно выполнить расчет POW, чтобы транзакция была конкурентоспособна и попала в блок.
|
||||
|
||||
|
||||
При каждом изменении таблицы счетов в блокчейн записывается хеш. Это реализуется с помощью специального типа транзакций с кодом 117. Они запускаются системным DApp Accounts, который обслуживает таблицу счетов.
|
||||
Транзакция имеет формат:
|
||||
```js
|
||||
{
|
||||
"Type": 119,
|
||||
"BlockNum": 1500000,
|
||||
"Hash": "AB1429BC0FE5B28DB218F30D46AE9F953DC34059EA1A65A15775D73389A4EB51"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Майнинг возможен только при наличии публичного IP
|
||||
* Проверьте наличие прямого ip-адреса (закажите у провайдера)
|
||||
* Проверьте проброшен ли порт от роутера до вашего компьютера
|
||||
* Проверьте firewall (открыт ли порт на компьютере)
|
||||
|
||||
|
||||
|
||||
|
||||
# Ссылки:
|
||||
* Веб-сайт: http://terafoundation.org
|
||||
* Btt: https://bitcointalk.org/index.php?topic=4573801.0
|
||||
* Twitter: https://twitter.com/terafoundation
|
||||
* Telegram: https://web.telegram.org/#/im?p=@terafoundation
|
||||
* Discord [RUS]: https://discord.gg/dzSGKyR
|
||||
* [Ютуб-канал](https://www.youtube.com/channel/UCGQeUCUKZgH0DfbakD7gjqQ)
|
||||
* [Документация по смарт-контрактам на русском](https://docs.google.com/document/d/1SkD4yc_POaGRMJRC6yGkDfdJUuKbcyq3JpG0cBXeYGM/edit?usp=sharing)
|
||||
* [Руководство по созданию ордеров на Tera DEX](https://docs.google.com/document/d/1rWGOrx9gabsu866zqJ2so6Mp0WUGh9t0BIWjz4kAIBw/edit?usp=sharing)
|
||||
* [Токен BTC для торговли на Tera DEX](https://docs.google.com/document/d/1ERPdSizarqYzwb5AA4R8mfUVFnSc-Amm7xCg3q4zUhA/edit?usp=sharing)
|
||||
* [Ответы на вопросы про проект Тера](https://docs.google.com/document/d/1SpVuuWMYjwzk8K0oqhw5rSPFJhsV2jHManIbtRReQy8/edit?usp=sharing)
|
||||
* [Техническое WP - черновик](https://docs.google.com/document/d/1B6_qlAp2xs4aHkqOwyvRMCDJTjgeNiOJiGpIeT0VAzY/edit?usp=sharing)
|
||||
* [Торрент блокчейна (каталог DATA/DB)](https://sourceforge.net/p/tera/code/ci/master/tree/Torrent/Tera-folder-DB.torrent?format=raw)
|
||||
* [API](https://sourceforge.net/p/tera/code/ci/master/tree/Doc/Rus/API.md)
|
||||
* [CONSTANTS](https://sourceforge.net/p/tera/code/ci/master/tree/Doc/Rus/CONSTANTS.MD)
|
||||
* [Презентация - Проблематика блокчейна и пути решения](https://docs.google.com/presentation/d/1NvaGQTUpeP3y7CmHpaqFmaqWlCEMMoPdvCyylFVJ3lk/edit?usp=sharing)
|
||||
|
||||
|
||||
Топики на btt:
|
||||
* [Давайте создадим идеальную криптовалюту](https://bitcointalk.org/index.php?topic=2574634.msg26224253#msg26224253)
|
||||
* [Алгоритм дистрибуции монет блокчейна](https://bitcointalk.org/index.php?topic=3645579.msg36671591#msg36671591)
|
||||
* [Мгновенные платежи](https://bitcointalk.org/index.php?topic=3873263.msg37478379#msg37478379)
|
||||
* [Блокчейн-торговля (опираясь на теорию игр)](https://bitcointalk.org/index.php?topic=4711054.msg42534962#msg42534962)
|
||||
* [Алгоритм с защитой от GPU-майнинга - TeraHash](https://bitcointalk.org/index.php?topic=5023773.msg45334091#msg45334091)
|
||||
* [Смарт-контракты на javascript](https://bitcointalk.org/index.php?topic=5067286.msg47792347#msg47792347)
|
||||
|
||||
Reference in New Issue
Block a user