1
0
Fork 0
merge-requests/3/head
progr76@gmail.com 2019-05-04 14:43:27 +03:00
parent 38333efb5f
commit 93b3f900c4
36 changed files with 1281 additions and 380 deletions

Binary file not shown.

Binary file not shown.

View File

@ -363,10 +363,13 @@ function SaveToStorageByArr(Arr)
{
var name = Arr[i];
var Item = $(name);
if(Item.type === "checkbox")
SetStorage(name, 0 + Item.checked);
else
SetStorage(name, Item.value);
if(Item)
{
if(Item.type === "checkbox")
SetStorage(name, 0 + Item.checked);
else
SetStorage(name, Item.value);
}
}
};
@ -394,10 +397,13 @@ function LoadFromStorageById(Name,F)
GetStorage(Name, function (Key,Value)
{
var Item = document.getElementById(Name);
if(Item.type === "checkbox")
Item.checked = parseInt(Value);
else
Item.value = Value;
if(Item)
{
if(Item.type === "checkbox")
Item.checked = parseInt(Value);
else
Item.value = Value;
}
if(F)
F(Key, Value);
});

View File

@ -325,6 +325,18 @@ function CompareArr(a,b)
return 0;
};
function CompareArrL(a,b)
{
if(a.length !== b.length)
return a.length - b.length;
for(var i = 0; i < a.length; i++)
{
if(a[i] !== b[i])
return a[i] - b[i];
}
return 0;
};
function GetSeqHash(BlockNum,PrevHash,TreeHash)
{
var arr = [GetArrFromValue(BlockNum), PrevHash, TreeHash];
@ -454,6 +466,7 @@ if(typeof global === "object")
global.CopyArr = CopyArr;
global.ParseNum = ParseNum;
global.CompareArr = CompareArr;
global.CompareArrL = CompareArrL;
global.shaarr2 = shaarr2;
global.sha3arr2 = sha3arr2;
global.arr2 = arr2;

View File

@ -89,7 +89,7 @@
<th id="Item.Type" class="num">Type</th>
<th id="GetHexFromArr(Item.Body)" class="code">Body</th>
<th id="(escapeHtml(Item.Script))" class="code2">JSON</th>
<th id="GetHexFromArr(Item.HASH)" class="code">HASH</th>
<th id="Item.TxID" class="code">TxID</th>
<th id="Item.Length" class="num">Bytes</th>
<th id="Item.power" class="num">Power</th>
<th id="(Item.VerifyHTML)" class="verify">Verify</th>

View File

@ -580,6 +580,7 @@
//glDebugPath="./dapp-smart/BTC-coin.html";
//glDebugPath="./dapp-smart/static/miner-list.html";
//glDebugPath="./dapp-smart/reward/AirDrop.html";
//glDebugPath="./dapp-smart/acc-control/RescueMoney2.html";
//{"HTMLBlock":24201380,"HTMLTr":0}
</script>

View File

@ -1849,7 +1849,7 @@
<A href="https://twitter.com/terafoundation">Twitter</A>
<A href="https://web.telegram.org/#/im?p=@terafoundation">Telegram</A>
<A href="https://discord.gg/CvwrbeG">Discord</A>
<A href="https://jq.qq.com/?_wv=1027&k=5h7cMi4">QQ</A>
<A href="https://jq.qq.com/?_wv=1027&k=5KpN5fw">QQ</A>
<!--progr76@gmail.com-->
</DIV>

View File

@ -1237,7 +1237,7 @@
<A href="https://twitter.com/terafoundation">Twitter</A>
<A href="https://web.telegram.org/#/im?p=@terafoundation">Telegram</A>
<A href="https://discord.gg/CvwrbeG">Discord</A>
<A href="https://jq.qq.com/?_wv=1027&k=5h7cMi4">QQ</A>
<A href="https://jq.qq.com/?_wv=1027&k=5KpN5fw">QQ</A>
<!--progr76@gmail.com-->
</DIV>

View File

@ -1,5 +1,22 @@
## NEWS
**25.04.2019**
New article:
https://medium.com/@evkara777/decentralized-applications-on-tera-platform-2aa56b597ae9
**21.04.2019**
Today is another continuation update TeraNova:
1. In order to reduce the size of the database for new nodes, a new format of the database for storing block headers has been added (the functionality is disabled by default, activation will be performed in the next updates).
2.Changed the calculation of the hash of the transaction signature. To facilitate the integration of the Tera in other programming languages, starting with 25.5 million block hash signature will be taken by the sha3 algorithm.
The update is mandatory for all nodes.
**13.04.2019**

View File

@ -1,7 +1,7 @@
* [1. TERA Source Code](https://sourceforge.net/p/tera/code/ci/master/tree/)
* [1. TERA Source Code](https://gitlab.com/terafoundation/tera)
* [2. TERA DApp PAPER (ENG)](https://docs.google.com/document/d/1PXVBbMKdpsAKPkO9UNB5B-LMwIDjylWoHvAAzzrXjvU/edit?usp=sharing)
* [3. TERA DApp PAPER (RUS)](https://docs.google.com/document/d/1SkD4yc_POaGRMJRC6yGkDfdJUuKbcyq3JpG0cBXeYGM/edit?usp=sharing/)
* [4. FAQ](https://docs.google.com/document/d/10yXAKxaU7YgrQnbdXu_L7WWovUoRtdJwo3tXXaGZGSQ/edit?usp=sharing/)
* [5. TERA API](https://sourceforge.net/p/tera/code/ci/master/tree/Doc/Eng/API.md)
* [5. TERA API](https://gitlab.com/terafoundation/tera/blob/master/Doc/Eng/API.md)
* [6. TERA API-2 (for Exchanges)](https://gitlab.com/terafoundation/tera/blob/master/Doc/Eng/API2.md)

View File

@ -1,7 +1,10 @@
* [1. TERA on QBTC Exchange](https://www.qbtc.ink/trade?symbol=TERA_BTC)
* [2. TERA on Bitalong Exchange](https://www.bitalong.com/trade/index/market/tera_usdt/)
* [3. TERA on Bitmesh Exchange](https://bitmesh.com/exchange?market=btc_tera#/)
* [4. TERA on CHAOEX Exchange](https://chaoex-en-us.udesk.cn/hc/articles/83487)
* [5. TERA on CITEX Exchange](https://www.citex.co.kr/#/trade/2/37)
* [6. TERA Roadmap](/#roadmap)
* [Available Supply ](https://terafoundation.org/dapp/67)
* [1. TERA on QBTC Exchange](https://www.qbtc.ink/trade?symbol=TERA_BTC)
* [2. TERA on Bitalong Exchange](https://www.bitalong.com/trade/index/market/tera_usdt/)
* [3. TERA on BitMesh Exchange](https://bitmesh.com/exchange?market=btc_tera#/)
* [4. TERA on CHAOEX Exchange](https://chaoex-en-us.udesk.cn/hc/articles/83487)
* [5. TERA on CITEX Exchange](https://www.citex.co.kr/#/trade/2/37)
* [6. TERA on Bitcola Exchange](https://www.bitcola.io/exchange?coinPair=TERA_USDT)
* [7. TERA on Vbitex Exchange](https://www.vbitex.com/Home/Trade/index?id=14)
* [8. TERA on MXC Exchange](https://www.mxc.com/trade.html?symbol=TERA_BTC)

View File

@ -1,6 +1,6 @@
* [1. START Mining](https://sourceforge.net/p/tera/code/ci/master/tree/README.md)
* [1. START Mining](https://gitlab.com/terafoundation/tera)
* [2. TERA HASH documentation](https://docs.google.com/document/d/18DtASGhrbRwXCAkQR1hQG0lVdrStp4CgA-pd6hicwfo/edit?usp=sharing/)
* [3. Docker](https://github.com/nferro/tera-docker)

View File

@ -4,7 +4,7 @@
* [3. TERA on Reddit](https://www.reddit.com/user/Terafoundation)
* [4. TERA on Discord](https://discord.gg/CvwrbeG)
* [5. TERA Telegram Chanel](https://web.telegram.org/#/im?p=@terafoundation)
* [6. TERA on QQ](https://jq.qq.com/?_wv=1027&k=5h7cMi4)
* [6. TERA on QQ](https://jq.qq.com/?_wv=1027&k=5KpN5fw)
* [7. (German) Telegram ](https://t.me/terafoundation_germany)
* [8. (China) Telegram](https://t.me/TeraChina)

View File

@ -1,4 +1,4 @@

* [FMessenger](http://freetimes.cc/fmessenger/)
* [1. CoinGecko](https://www.coingecko.com/en/coins/tera-platform)
* [2. FMessenger](http://freetimes.cc/fmessenger/)

View File

@ -0,0 +1,3 @@
The design of the coin symbolizes, on the one hand, the possibilities of technology to create a global economy without borders, on the other hand it demonstrates the principles of building a multi-level structured network in our blockchain.
You are free to use these images for your creative works and for spread information about our project around the world.

View File

@ -0,0 +1 @@
## TERA COIN DESIGN

View File

@ -1 +1 @@
## Exchanges 
## Exchanges

View File

@ -30,15 +30,7 @@
<!-- /footer links -->
<!-- footer follow -->
<ul class="footer-follow" style="margin-bottom: 0px;">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord"></i></a></li>
<li><a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank"><i class="far fa-file-code"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq"></i></a></li>
</ul>
{{File=./SITE/footer-follow.html}}
<!-- /footer follow -->
<p align="center">
项目创始人电子邮件 <a href="mailto: progr76@gmail.com" style="font-size: 14px;">progr76@gmail.com</a>.

View File

@ -111,15 +111,7 @@
<div class="col-md-12">
<!-- Social follow -->
<ul class="footer-follow" style="margin-bottom: 0px;">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord"></i></a></li>
<li><a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank"><i class="far fa-file-code"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq"></i></a></li>
</ul>
{{File=./SITE/footer-follow.html}}
<!-- /Social follow -->
</div>
@ -273,7 +265,283 @@
</div>
<!-- /Key Features -->
<!-- Team -->
<div id="team" class="section md-padding" >
<h2 class="section-header text-center">
TERA 产品团队
</h2>
<div class="container">
<div class="row">
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/vtools.jpg" alt="Yuriy Ivanov photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/vtools/?locale=en_US" target="_blank">
<h4 class="person-card__title">Yuriy Ivanov <span>| Vtools</span></h4>
</a>
<p class="person-card__position"><!-- Head of Architect Department --></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Yuriy Ivanov</h4>
<em>Vtools</em>
<p class="add-info__position"><!-- Head of Architect Department --></p>
<p class="add-info__desc">
<!-- Moscow State University of Instrument Engineering and Computer Science, department of Computer Science and computer facilities. -->
</p>
<a href="https://www.linkedin.com/in/vtools/?locale=en_US" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Gennady.jpg" alt="Gennady Ivanov photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/gennady-ivanov-195a8590/" target="_blank">
<h4 class="person-card__title">Gennady Ivanov <span>| Gennady</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Gennady Ivanov</h4>
<em>Gennady</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/gennady-ivanov-195a8590/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/PsyArcus.jpg" alt="Evgeny Ustinovich photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ustinovichevgeny/?locale=en_US" target="_blank">
<h4 class="person-card__title">Evgeny Ustinovich <span>| PsyArcus</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Evgeny Ustinovich</h4>
<em>PsyArcus</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ustinovichevgeny/?locale=en_US" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/corey.jpg" alt="Yuan Chen photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/yuan-chen-331bbb145/" target="_blank">
<h4 class="person-card__title">Yuan Chen <span>| corey</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Yuan Chen</h4>
<em>corey</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/yuan-chen-331bbb145/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Ryuu.jpg" alt="Long Vu Hoang photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/long-vu-hoang-2a480a89/" target="_blank">
<h4 class="person-card__title">Long Vu Hoang <span>| Ryuu</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Long Vu Hoang</h4>
<em>Ryuu</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/long-vu-hoang-2a480a89/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/mindsignals.jpg" alt="Ross Goldberg photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ross-goldberg-5979bb/" target="_blank">
<h4 class="person-card__title">Ross Goldberg <span>| mindsignals</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Ross Goldberg</h4>
<em>mindsignals</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ross-goldberg-5979bb/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/itutu.jpg" alt="Wei Li photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/wei-li-5b8800182/" target="_blank">
<h4 class="person-card__title">Wei Li <span>| itutu</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Wei Li</h4>
<em>itutu</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/wei-li-5b8800182/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/weiwutera.jpg" alt="Hongsang U photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/hongsang-u-18348616b/" target="_blank">
<h4 class="person-card__title">Hongsang U <span>| weiwutera</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Hongsang U</h4>
<em>weiwutera</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/hongsang-u-18348616b/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/groboro.jpg" alt="Timo Stutz photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/timo-stutz/" target="_blank">
<h4 class="person-card__title">Timo Stutz <span>| groboro</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Timo Stutz</h4>
<em>groboro</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/timo-stutz/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Ken.jpg" alt="Ken Chan photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ken-chan-170399183/" target="_blank">
<h4 class="person-card__title">Ken Chan <span>| Ken</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Ken Chan</h4>
<em>Ken</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ken-chan-170399183/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/tina629.jpg" alt="Ken Chan photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/xiu-zhao/" target="_blank">
<h4 class="person-card__title">Xiu Zhao <span>| tina629</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Xiu Zhao</h4>
<em>tina629</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/xiu-zhao/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card person-card--empty">
<div class="person-card__wrapper">
<div class="line-v"></div>
<div class="square-dot"></div>
</div>
</div>
</div>
</div>
</div>
<!-- /Team -->
<!-- Specification -->
<div id="technology" class="section md-padding bg-grey">
@ -604,7 +872,6 @@
3. <a href="https://www.reddit.com/user/Terafoundation" target="_blank" style="font-size: 14px;">TERA on Reddit</a>.<br />
4. <a href="https://discord.gg/CvwrbeG" target="_blank" style="font-size: 14px;">TERA on Discord</a>.<br />
5. <a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank" style="font-size: 14px;">TERA Telegram Chanel</a>.<br />
6. <a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank" style="font-size: 14px;">TERA on QQ</a>.
</div>
</div>

View File

@ -187,7 +187,6 @@
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord"></i></a></li>
<li><a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank"><i class="far fa-file-code"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq"></i></a></li>
</ul>
<!-- /Social follow -->
@ -417,6 +416,283 @@
</div>
<!-- /Specification -->
<!-- Team -->
<div id="team" class="section md-padding" >
<h2 class="section-header text-center">
TERA Produkt-Team
</h2>
<div class="container">
<div class="row">
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/vtools.jpg" alt="Yuriy Ivanov photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/vtools/?locale=en_US" target="_blank">
<h4 class="person-card__title">Yuriy Ivanov <span>| Vtools</span></h4>
</a>
<p class="person-card__position"><!-- Head of Architect Department --></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Yuriy Ivanov</h4>
<em>Vtools</em>
<p class="add-info__position"><!-- Head of Architect Department --></p>
<p class="add-info__desc">
<!-- Moscow State University of Instrument Engineering and Computer Science, department of Computer Science and computer facilities. -->
</p>
<a href="https://www.linkedin.com/in/vtools/?locale=en_US" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Gennady.jpg" alt="Gennady Ivanov photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/gennady-ivanov-195a8590/" target="_blank">
<h4 class="person-card__title">Gennady Ivanov <span>| Gennady</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Gennady Ivanov</h4>
<em>Gennady</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/gennady-ivanov-195a8590/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/PsyArcus.jpg" alt="Evgeny Ustinovich photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ustinovichevgeny/?locale=en_US" target="_blank">
<h4 class="person-card__title">Evgeny Ustinovich <span>| PsyArcus</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Evgeny Ustinovich</h4>
<em>PsyArcus</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ustinovichevgeny/?locale=en_US" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/corey.jpg" alt="Yuan Chen photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/yuan-chen-331bbb145/" target="_blank">
<h4 class="person-card__title">Yuan Chen <span>| corey</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Yuan Chen</h4>
<em>corey</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/yuan-chen-331bbb145/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Ryuu.jpg" alt="Long Vu Hoang photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/long-vu-hoang-2a480a89/" target="_blank">
<h4 class="person-card__title">Long Vu Hoang <span>| Ryuu</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Long Vu Hoang</h4>
<em>Ryuu</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/long-vu-hoang-2a480a89/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/mindsignals.jpg" alt="Ross Goldberg photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ross-goldberg-5979bb/" target="_blank">
<h4 class="person-card__title">Ross Goldberg <span>| mindsignals</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Ross Goldberg</h4>
<em>mindsignals</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ross-goldberg-5979bb/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/itutu.jpg" alt="Wei Li photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/wei-li-5b8800182/" target="_blank">
<h4 class="person-card__title">Wei Li <span>| itutu</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Wei Li</h4>
<em>itutu</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/wei-li-5b8800182/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/weiwutera.jpg" alt="Hongsang U photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/hongsang-u-18348616b/" target="_blank">
<h4 class="person-card__title">Hongsang U <span>| weiwutera</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Hongsang U</h4>
<em>weiwutera</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/hongsang-u-18348616b/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/groboro.jpg" alt="Timo Stutz photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/timo-stutz/" target="_blank">
<h4 class="person-card__title">Timo Stutz <span>| groboro</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Timo Stutz</h4>
<em>groboro</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/timo-stutz/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Ken.jpg" alt="Ken Chan photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ken-chan-170399183/" target="_blank">
<h4 class="person-card__title">Ken Chan <span>| Ken</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Ken Chan</h4>
<em>Ken</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ken-chan-170399183/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/tina629.jpg" alt="Ken Chan photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/xiu-zhao/" target="_blank">
<h4 class="person-card__title">Xiu Zhao <span>| tina629</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Xiu Zhao</h4>
<em>tina629</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/xiu-zhao/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card person-card--empty">
<div class="person-card__wrapper">
<div class="line-v"></div>
<div class="square-dot"></div>
</div>
</div>
</div>
</div>
</div>
<!-- /Team -->
<!-- Updates -->
<div id="updates" class="section md-padding">
@ -705,7 +981,6 @@
3. <a href="https://www.reddit.com/user/Terafoundation" target="_blank" style="font-size: 14px;">TERA on Reddit</a>.<br />
4. <a href="https://discord.gg/CvwrbeG" target="_blank" style="font-size: 14px;">TERA on Discord</a>.<br />
5. <a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank" style="font-size: 14px;">TERA Telegram Chanel</a>.<br />
6. <a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank" style="font-size: 14px;">TERA on QQ</a>.
</div>
</div>
@ -755,15 +1030,7 @@
<!-- /footer links -->
<!-- footer follow -->
<ul class="footer-follow" style="margin-bottom: 0px;">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord"></i></a></li>
<li><a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank"><i class="far fa-file-code"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq"></i></a></li>
</ul>
{{File=./SITE/footer-follow.html}}
<!-- /footer follow -->
<p align="center">
E-Mail des Projektgründers: <a href="mailto: progr76@gmail.com" style="font-size: 14px;">progr76@gmail.com</a>.

View File

@ -0,0 +1,9 @@
<ul class="footer-follow" style="margin-bottom: 0px;">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc footicons"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter footicons"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit footicons"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord footicons"></i></a></li>
<li><a href="https://gitlab.com/terafoundation/tera" target="_blank"><i class="far fa-file-code footicons"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane footicons"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5KpN5fw" target="_blank"><i class="fab fa-qq footicons"></i></a></li>
</ul>

View File

@ -28,15 +28,7 @@
<!-- /footer links -->
<!-- footer follow -->
<ul class="footer-follow" style="margin-bottom: 0px;">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc footicons"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter footicons"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit footicons"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord footicons"></i></a></li>
<li><a href="https://gitlab.com/terafoundation/tera" target="_blank"><i class="far fa-file-code footicons"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane footicons"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq footicons"></i></a></li>
</ul>
{{File=./SITE/footer-follow.html}}
<!-- /footer follow -->
<p align="center">
Project Founder Email: <a href="mailto: progr76@gmail.com" style="font-size: 14px;">progr76@gmail.com</a>.

View File

@ -140,16 +140,7 @@
<div class="col-md-12">
<!-- Social follow --><br /><br />
<ul class="footer-follow">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc headicons"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter headicons"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit headicons"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord headicons"></i></a></li>
<li><a href="https://gitlab.com/terafoundation/tera" target="_blank"><i class="far fa-file-code headicons"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane headicons"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq headicons"></i></a></li>
</ul>
{{File=./SITE/footer-follow.html}}
<!-- /Social follow -->
</div>

View File

@ -165,7 +165,7 @@
<dd class="spec-list__value">
<a href="https://gitlab.com/terafoundation/tera" target="_blank">gitlab.com</a>
or
<a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank">sf (slow)</a>,
<a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank">sf</a>
</dd>
</div>
<div class="spec-list__item">

View File

@ -299,15 +299,7 @@
<!-- /footer links -->
<!-- footer follow -->
<ul class="footer-follow" style="margin-bottom: 0px;">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord"></i></a></li>
<li><a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank"><i class="far fa-file-code"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq"></i></a></li>
</ul>
{{File=./SITE/footer-follow.html}}
<!-- /footer follow -->
<p align="center">
Project Founder Email: <a href="mailto: progr76@gmail.com" style="font-size: 14px;">progr76@gmail.com</a>.

View File

@ -27,15 +27,7 @@
<!-- /footer links -->
<!-- footer follow -->
<ul class="footer-follow" style="margin-bottom: 0px;">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc footicons"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter footicons"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit footicons"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord footicons"></i></a></li>
<li><a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank"><i class="far fa-file-code footicons"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane footicons"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq footicons"></i></a></li>
</ul>
{{File=./SITE/footer-follow.html}}
<!-- /footer follow -->
<p align="center">
Email основателя проекта: <a href="mailto: progr76@gmail.com">progr76@gmail.com</a>.

View File

@ -74,8 +74,8 @@
<!-- Logo -->
<div class="navbar-brand">
<a href="/ru/">
<img class="logo" src="../PIC/Tera_Text_gray.svg" alt="TERA Foundation: The fastest block generation Blockchain" title="TERA Foundation: The fastest block generation Blockchain" />
<img class="logo-alt" src="../PIC/Tera_Text.svg" alt="TERA Foundation: The fastest block generation Blockchain" title="TERA Foundation: The fastest block generation Blockchain" />
<img class="logo" src="../../PIC/Tera_Text_gray.svg" alt="TERA Foundation: The fastest block generation Blockchain" title="TERA Foundation: The fastest block generation Blockchain" />
<img class="logo-alt" src="../../PIC/Tera_Text.svg" alt="TERA Foundation: The fastest block generation Blockchain" title="TERA Foundation: The fastest block generation Blockchain" />
</a>
</div>
<!-- /Logo -->
@ -111,15 +111,7 @@
<div class="col-md-12">
<!-- Social follow -->
<ul class="footer-follow" style="margin-bottom: 0px;">
<li><a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank"><i class="fab fa-btc headicons"></i></a></li>
<li><a href="https://twitter.com/terafoundation" target="_blank"><i class="fab fa-twitter headicons"></i></a></li>
<li><a href="https://www.reddit.com/user/Terafoundation" target="_blank"><i class="fab fa-reddit headicons"></i></a></li>
<li><a href="https://discord.gg/CvwrbeG" target="_blank"><i class="fab fa-discord headicons"></i></a></li>
<li><a href="https://sourceforge.net/p/tera/code/ci/master/tree/" target="_blank"><i class="far fa-file-code headicons"></i></a></li>
<li><a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank"><i class="fab fa-telegram-plane headicons"></i></a></li>
<li><a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank"><i class="fab fa-qq headicons"></i></a></li>
</ul>
{{File=./SITE/footer-follow.html}}
<!-- /Social follow -->
</div>
@ -149,7 +141,7 @@
<h1>О TERA</h1>
</div>
<p class="tera-logo-panel">
<img src="../PIC/TERA_logo-03.png" width="240" />
<img src="../../PIC/TERA_logo-03.png" width="240" />
</p>
<p>
Рады предложить вам присоединиться к проекту TERA. Блокчейн TERA предлагает решения самых популярных проблем в области криптовалют: централизация, пропусканая способность, скорость осуществления транзакций, время подтверждения, комиссия за транзакции и общее удобство использования функционала рынка.
@ -165,7 +157,7 @@
<div class="col-md-6">
<div class="about bg-grey scheme-panel">
<h4>Traditional Blockchain</h4>
<h4><img src="../PIC/traditional_blockchain.png" title="Traditional Blockchain" class="img img--100"/></h4>
<h4><img src="../../PIC/traditional_blockchain.png" title="Traditional Blockchain" class="img img--100"/></h4>
</div>
</div>
<!-- /Key Feature -->
@ -174,7 +166,7 @@
<div class="col-md-6">
<div class="about bg-grey scheme-panel">
<h4>TERA Blockchain</h>
<p><img src="../PIC/tera_blockchain.png" title="TERA Blockchain" class="img img--100"/></p>
<p><img src="../../PIC/tera_blockchain.png" title="TERA Blockchain" class="img img--100"/></p>
</div>
</div>
<!-- /Key Feature -->
@ -348,6 +340,282 @@
</div>
<!-- /Specification -->
<!-- Team -->
<div id="team" class="section md-padding" >
<h2 class="section-header text-center">
Команда проекта TERA
</h2>
<div class="container">
<div class="row">
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/vtools.jpg" alt="Yuriy Ivanov photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/vtools/?locale=en_US" target="_blank">
<h4 class="person-card__title">Yuriy Ivanov <span>| Vtools</span></h4>
</a>
<p class="person-card__position"><!-- Head of Architect Department --></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Yuriy Ivanov</h4>
<em>Vtools</em>
<p class="add-info__position"><!-- Head of Architect Department --></p>
<p class="add-info__desc">
<!-- Moscow State University of Instrument Engineering and Computer Science, department of Computer Science and computer facilities. -->
</p>
<a href="https://www.linkedin.com/in/vtools/?locale=en_US" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Gennady.jpg" alt="Gennady Ivanov photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/gennady-ivanov-195a8590/" target="_blank">
<h4 class="person-card__title">Gennady Ivanov <span>| Gennady</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Gennady Ivanov</h4>
<em>Gennady</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/gennady-ivanov-195a8590/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/PsyArcus.jpg" alt="Evgeny Ustinovich photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ustinovichevgeny/?locale=en_US" target="_blank">
<h4 class="person-card__title">Evgeny Ustinovich <span>| PsyArcus</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Evgeny Ustinovich</h4>
<em>PsyArcus</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ustinovichevgeny/?locale=en_US" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/corey.jpg" alt="Yuan Chen photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/yuan-chen-331bbb145/" target="_blank">
<h4 class="person-card__title">Yuan Chen <span>| corey</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Yuan Chen</h4>
<em>corey</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/yuan-chen-331bbb145/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Ryuu.jpg" alt="Long Vu Hoang photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/long-vu-hoang-2a480a89/" target="_blank">
<h4 class="person-card__title">Long Vu Hoang <span>| Ryuu</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Long Vu Hoang</h4>
<em>Ryuu</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/long-vu-hoang-2a480a89/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/mindsignals.jpg" alt="Ross Goldberg photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ross-goldberg-5979bb/" target="_blank">
<h4 class="person-card__title">Ross Goldberg <span>| mindsignals</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Ross Goldberg</h4>
<em>mindsignals</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ross-goldberg-5979bb/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/itutu.jpg" alt="Wei Li photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/wei-li-5b8800182/" target="_blank">
<h4 class="person-card__title">Wei Li <span>| itutu</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Wei Li</h4>
<em>itutu</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/wei-li-5b8800182/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/weiwutera.jpg" alt="Hongsang U photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/hongsang-u-18348616b/" target="_blank">
<h4 class="person-card__title">Hongsang U <span>| weiwutera</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Hongsang U</h4>
<em>weiwutera</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/hongsang-u-18348616b/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/groboro.jpg" alt="Timo Stutz photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/timo-stutz/" target="_blank">
<h4 class="person-card__title">Timo Stutz <span>| groboro</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Timo Stutz</h4>
<em>groboro</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/timo-stutz/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/Ken.jpg" alt="Ken Chan photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/ken-chan-170399183/" target="_blank">
<h4 class="person-card__title">Ken Chan <span>| Ken</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Ken Chan</h4>
<em>Ken</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/ken-chan-170399183/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card">
<div class="person-card__wrapper">
<div class="person-card__img-wrap">
<img src="../PIC/tina629.jpg" alt="Ken Chan photo" class="person-card__img" width="260" height="260">
</div>
<a href="https://www.linkedin.com/in/xiu-zhao/" target="_blank">
<h4 class="person-card__title">Xiu Zhao <span>| tina629</span></h4>
</a>
<p class="person-card__position"></p>
<div class="person-card__add-info add-info">
<h4 class="add-info__name">Xiu Zhao</h4>
<em>tina629</em>
<p class="add-info__position"></p>
<p class="add-info__desc"></p>
<a href="https://www.linkedin.com/in/xiu-zhao/" class="add-info__linkedin" target="_blank">
<img src="../PIC/linkedin-logo.svg" alt="Linkedin logo" width="30" height="30">
<span>View profile</span>
</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-3 person-card person-card--empty">
<div class="person-card__wrapper">
<div class="line-v"></div>
<div class="square-dot"></div>
</div>
</div>
</div>
</div>
</div>
<!-- /Team -->
<!-- Updates -->
<div id="updates" class="section md-padding">
@ -600,12 +868,11 @@
<h3><i class="fas fa-globe linksico"></i> СООБЩЕСТВО TERA</h3>
1. <a href="https://bitcointalk.org/index.php?topic=4573801.0" target="_blank">TERA на BitcoinTalk</a>.<br />
1. <a href="https://bitcointalk.org/index.php?to../PIC=4573801.0" target="_blank">TERA на BitcoinTalk</a>.<br />
2. <a href="https://twitter.com/terafoundation" target="_blank">TERA в Twitter</a>.<br />
3. <a href="https://www.reddit.com/user/Terafoundation" target="_blank">TERA в Reddit</a>.<br />
4. <a href="https://discord.gg/CvwrbeG" target="_blank">TERA в Discord</a>.<br />
5. <a href="https://web.telegram.org/#/im?p=@terafoundation" target="_blank">TERA Telegram-канал</a>.<br />
6. <a href="https://jq.qq.com/?_wv=1027&k=5h7cMi4" target="_blank">TERA в QQ</a>.
</div>
</div>

View File

@ -11,6 +11,6 @@
global.PERIOD_GET_BLOCK = 300, global.COUNT_HISTORY_BLOCKS_FOR_LOAD = 600, global.COUNT_BLOCKS_FOR_CHECK_POW = 50, global.MAX_DELTA_COUNT_SUM_FOR_LOAD = 10,
global.MAX_COUNT_CHAIN_LOAD = 120, global.PACKET_ALIVE_PERIOD = 4 * CONSENSUS_PERIOD_TIME, global.PACKET_ALIVE_PERIOD_NEXT_NODE = PACKET_ALIVE_PERIOD / 2,
global.MAX_BLOCK_SEND = 8, global.COUNT_TASK_FOR_NODE = 10, global.FORMAT_BLOCK_TRANSFER = "{ BlockNum:uint, TreeHash:hash, arrContent:[tr], }",
global.WRK_BLOCK_TRANSFER = {}, global.MAX_ACCOUNTS_TRANSFER = 1e3, global.MAX_SMARTS_TRANSFER = 10, global.TEST_NETWORK && (global.MAX_ACCOUNTS_TRANSFER = 100,
global.MAX_SMARTS_TRANSFER = 10), global.FORMAT_REST_TRANSFER = "{ Result:uint, BlockNum:uint, Arr:[arr200], }",
global.WRK_BLOCK_TRANSFER = {}, global.MAX_ACCOUNTS_TRANSFER = 1024, global.MAX_SMARTS_TRANSFER = 10, global.TEST_NETWORK && (global.MAX_ACCOUNTS_TRANSFER = 128,
global.MAX_SMARTS_TRANSFER = 10), global.FORMAT_REST_TRANSFER = "{ Result:uint, Version:uint, Arr:[arr200], ProofHash:hash, ProofArrL:<hash>, ProofArrR:<hash>, }",
global.FORMAT_SMART_TRANSFER = "{ Result:uint, Arr:[tr], }";

View File

@ -22,17 +22,17 @@ function Write(e,r,t,n,l)
else
if("str" === a.substr(0, 3) && 3 < a.length)
{
var f = parseInt(a.substr(3));
return r && e.write(r, e.len, f), void (e.len += f);
var i = parseInt(a.substr(3));
return r && e.write(r, e.len, i), void (e.len += i);
}
switch(a)
{
case "str":
var i = toUTF8Array(r);
65535 < (f = i.length) && (f = 0), e[e.len] = 255 & f, e[e.len + 1] = f >>> 8 & 255, e.len += 2;
for(var s = 0; s < f; s++)
e[e.len + s] = i[s];
e.len += f;
var f = toUTF8Array(r);
65535 < (i = f.length) && (i = 0), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255, e.len += 2;
for(var s = 0; s < i; s++)
e[e.len + s] = f[s];
e.len += i;
break;
case "byte":
r < 0 && (r = 0), e[e.len] = r, e.len += 1;
@ -55,37 +55,37 @@ function Write(e,r,t,n,l)
break;
case "addres":
case "hash":
f = r ? Math.min(32, r.length) : 0;
for(s = 0; s < f; s++)
i = r ? Math.min(32, r.length) : 0;
for(s = 0; s < i; s++)
e[e.len + s] = r[s];
e.len += 32;
break;
case "buffer":
f = void 0 === n ? r.length : Math.min(n, r.length);
for(s = 0; s < f; s++)
i = void 0 === n ? r.length : Math.min(n, r.length);
for(s = 0; s < i; s++)
e[e.len + s] = r[s];
e.len += n;
break;
case "arr":
f = r ? Math.min(n, r.length) : 0;
for(s = 0; s < f; s++)
i = r ? Math.min(n, r.length) : 0;
for(s = 0; s < i; s++)
e[e.len + s] = r[s];
e.len += n;
break;
case "tr":
f = r.length;
MAX_TRANSACTION_SIZE > MAX_TRANSACTION_SIZE && (f = MAX_TRANSACTION_SIZE), e[e.len] = 255 & f, e[e.len + 1] = f >>> 8 & 255,
i = r.length;
MAX_TRANSACTION_SIZE > MAX_TRANSACTION_SIZE && (i = MAX_TRANSACTION_SIZE), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255,
e.len += 2;
for(s = 0; s < f; s++)
for(s = 0; s < i; s++)
e[e.len + s] = r[s];
e.len += f;
e.len += i;
break;
case "data":
f = r.length;
e.writeUInt32LE(f, e.len, 4), e.len += 4;
for(s = 0; s < f; s++)
i = r.length;
e.writeUInt32LE(i, e.len, 4), e.len += 4;
for(s = 0; s < i; s++)
e[e.len + s] = r[s];
e.len += f;
e.len += i;
break;
case "hashSTR":
var o = GetHexFromAddres(r);
@ -97,27 +97,38 @@ function Write(e,r,t,n,l)
break;
default:
l = l || {};
var b = t.substr(0, 1);
if("[" === b)
var d = t.substr(0, 1);
if("[" === d)
{
r && (f = r.length);
var d = GetMiddleString(a);
Write(e, f, "uint32");
for(s = 0; s < f; s++)
Write(e, r[s], d, void 0, l);
r && (i = r.length);
var b = GetMiddleString(a);
Write(e, i, "uint32");
for(s = 0; s < i; s++)
Write(e, r[s], b, void 0, l);
}
else
{
if("{" !== b)
throw "Bad write type params: " + a;
var c = l[a];
c || (c = GetAttributes(GetMiddleString(a)), l[a] = c);
for(s = 0; s < c.length; s++)
if("<" === d)
{
var h = c[s];
Write(e, r[h.Key], h.Value, void 0, l);
r && (i = r.length);
b = GetMiddleString(a);
var c = 0, h = e.len;
e.len += 4;
for(s = 0; s < i; s++)
r[s] && (c++, Write(e, s, "uint32"), Write(e, r[s], b, void 0, l));
e.writeUInt32LE(c, h, 4);
}
else
{
if("{" !== d)
throw "Bad write type params: " + a;
var g = l[a];
g || (g = GetAttributes(GetMiddleString(a)), l[a] = g);
for(s = 0; s < g.length; s++)
{
var v = g[s];
Write(e, r[v.Key], v.Value, void 0, l);
}
}
}
}
};
@ -126,19 +137,19 @@ function Read(e,r,t,n,l)
var a;
if("number" == typeof r)
throw ToLogTrace("ERR StringFormat"), "ERRR!";
var f = r;
if("buffer" === f.substr(0, 6))
6 < f.length ? (t = parseInt(f.substr(6)), f = "buffer") : t = 0;
var i = r;
if("buffer" === i.substr(0, 6))
6 < i.length ? (t = parseInt(i.substr(6)), i = "buffer") : t = 0;
else
if("arr" === f.substr(0, 3))
3 < f.length ? (t = parseInt(f.substr(3)), f = "arr") : t = 0;
if("arr" === i.substr(0, 3))
3 < i.length ? (t = parseInt(i.substr(3)), i = "arr") : t = 0;
else
if("str" === f.substr(0, 3))
if("str" === i.substr(0, 3))
{
if(3 < f.length)
if(3 < i.length)
{
var i = parseInt(f.substr(3));
a = e.toString("utf8", e.len, e.len + i), e.len += i;
var f = parseInt(i.substr(3));
a = e.toString("utf8", e.len, e.len + f), e.len += f;
for(var s = - 1, u = a.length - 1; 0 <= u; u--)
if(0 !== a.charCodeAt(u))
{
@ -149,12 +160,12 @@ function Read(e,r,t,n,l)
}
t = 0;
}
switch(f)
switch(i)
{
case "str":
i = e.len + 2 <= e.length ? e[e.len] + 256 * e[e.len + 1] : 0, e.len += 2;
var o = e.slice(e.len, e.len + i);
a = Utf8ArrayToStr(o), e.len += i;
f = e.len + 2 <= e.length ? e[e.len] + 256 * e[e.len + 1] : 0, e.len += 2;
var o = e.slice(e.len, e.len + f);
a = Utf8ArrayToStr(o), e.len += f;
break;
case "byte":
a = e.len + 1 <= e.length ? e[e.len] : 0, e.len += 1;
@ -193,41 +204,44 @@ function Read(e,r,t,n,l)
a = void 0;
break;
}
i = e[e.len] + 256 * e[e.len + 1];
e.len += 2, a = e.slice(e.len, e.len + i), e.len += i;
f = e[e.len] + 256 * e[e.len + 1];
e.len += 2, a = e.slice(e.len, e.len + f), e.len += f;
break;
case "data":
(i = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0) > e.length - e.len - 4 && (i = 0), e.len += 4, a = e.slice(e.len,
e.len + i), e.len += i;
(f = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0) > e.length - e.len - 4 && (f = 0), e.len += 4, a = e.slice(e.len,
e.len + f), e.len += f;
break;
case "hashSTR":
var b = e.toString("utf8", e.len, e.len + 64);
a = GetAddresFromHex(b), e.len += 64;
var d = e.toString("utf8", e.len, e.len + 64);
a = GetAddresFromHex(d), e.len += 64;
break;
case "uintSTR":
b = e.toString("utf8", e.len, e.len + 10);
a = parseInt(b), e.len += 10;
d = e.toString("utf8", e.len, e.len + 10);
a = parseInt(d), e.len += 10;
break;
default:
n = n || {};
var d = f.substr(0, 1);
if("[" === d)
var b = i.substr(0, 1);
if("[" === b || "<" === b)
{
var c = "<" === b;
a = [];
var c = GetMiddleString(f);
for(i = Read(e, "uint32"), u = 0; u < i && e.len <= e.length; u++)
a[u] = Read(e, c, void 0, n, l);
var h = GetMiddleString(i);
for(f = Read(e, "uint32"), u = 0; u < f && e.len <= e.length; u++)
{
c ? a[Read(e, "uint32")] = Read(e, h, void 0, n, l) : a[u] = Read(e, h, void 0, n, l);
}
}
else
{
if("{" !== d)
throw "Bad read type params: " + f;
var h = n[f];
h || (h = GetAttributes(GetMiddleString(f)), n[f] = h), a = {};
for(u = 0; u < h.length; u++)
if("{" !== b)
throw "Bad read type params: " + i;
var g = n[i];
g || (g = GetAttributes(GetMiddleString(i)), n[i] = g), a = {};
for(u = 0; u < g.length; u++)
{
var g = h[u];
a[g.Key] = Read(e, g.Value, void 0, n, l);
var v = g[u];
a[v.Key] = Read(e, v.Value, void 0, n, l);
}
}
}
@ -282,12 +296,12 @@ function GetMiddleString2(e,r,t)
{
for(var n = 0, l = "", a = 0; a < e.length; a++)
{
var f = e.substr(a, 1);
if(" " !== f && "\n" !== f && (f !== r || 1 != ++n))
var i = e.substr(a, 1);
if(" " !== i && "\n" !== i && (i !== r || 1 != ++n))
{
if(f === t && 0 === --n)
if(i === t && 0 === --n)
break;
n && (l += f);
n && (l += i);
}
}
return l;

View File

@ -8,7 +8,7 @@
* Telegram: https://t.me/terafoundation
*/
global.UPDATE_CODE_VERSION_NUM = 1031;
global.UPDATE_CODE_VERSION_NUM = 1038;
global.MIN_CODE_VERSION_NUM = 1020;
global.MINING_VERSION_NUM = 3;
global.InitParamsArg = InitParamsArg;

View File

@ -530,10 +530,10 @@ function CalcTreeHashFromArrBody(BlockNum,arrContent)
function TestMerklTree()
{
var h1 = [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];
var h2 = shaarr("2");
var h3 = shaarr("3");
var h4 = shaarr("4");
var h5 = shaarr("5");
var h2 = sha3("2");
var h3 = sha3("3");
var h4 = sha3("4");
var h5 = sha3("5");
var Tree = {RecalcCount:0};
var CalcMap = {};
Tree.LevelsHash = [[h1, h2]];
@ -554,11 +554,92 @@ function TestMerklTree()
UpdateMerklTree(Tree, CalcMap, 0);
ToLog("Root=" + GetHexFromArr(Tree.Root));
ToLog("RecalcCount=" + Tree.RecalcCount);
var TreeTest = {LevelsArr:Tree.LevelsHash, LevelsCalc:[[]], RecalcCount:0};
UpdateMerklTree0(TreeTest, 0);
ToLog("HashTest=" + GetHexFromArr(TreeTest.Root));
if(CompareArr(TreeTest.Root, Tree.Root) !== 0)
ToLog("=========ERROR HASHTEST==============");
return Tree;
};
if(0)
setTimeout(function ()
{
TestMerkleProof(100);
ToLog("=========END=========");
process.exit(0);
});
function TestMerkleProof(CountTest)
{
for(var R = 0; R < CountTest; R++)
{
var CountItems = Math.floor(Math.random() * CountTest);
var Tree = {RecalcCount:0};
var CalcMap = {};
Tree.LevelsHash = [];
Tree.LevelsHash[0] = [];
for(var i = 0; i < CountItems; i++)
{
CalcMap[i] = 1;
Tree.LevelsHash[0][i] = sha3("" + i + "-" + R);
}
UpdateMerklTree(Tree, CalcMap, 0);
ToLog("Hash1=" + GetHexFromArr(Tree.Root) + " CountItems:" + CountItems);
var FirstNum = Math.floor(Math.random() * CountItems / 2);
var LastNum = Math.floor(CountItems / 2 + Math.random() * CountItems / 2);
var Ret = GetMerkleProof(Tree.LevelsHash, FirstNum, LastNum);
var ArrM = Tree.LevelsHash[0].slice(FirstNum, LastNum + 1);
var Hash2 = CheckMerkleProof(Ret.ArrL, ArrM, Ret.ArrR);
ToLog("Hash2=" + GetHexFromArr(Hash2) + " FirstNum=" + FirstNum + "/" + LastNum);
if(CompareArr(Tree.Root, Hash2) !== 0)
throw ("=========ERROR HASHTEST==============");
else
ToLog("=========OK==============");
}
};
function GetMerkleProof(LevelsHash,FirstNum,LastNum)
{
var ArrL = [];
var ArrR = [];
var CurL = FirstNum;
var CurR = LastNum;
for(var L = 0; L < LevelsHash.length; L++)
{
var LevelArr = LevelsHash[L];
if(CurL % 2 === 1)
ArrL[L] = LevelArr[CurL - 1];
if(CurR % 2 === 0 && CurR + 1 < LevelArr.length)
ArrR[L] = LevelArr[CurR + 1];
CurL = Math.floor(CurL / 2);
CurR = Math.floor(CurR / 2);
}
return {ArrL:ArrL, ArrR:ArrR};
};
function CheckMerkleProof(ArrL,ArrM,ArrR)
{
var L = 0;
var Arr2 = ArrM;
while(true)
{
var Arr = [].concat(Arr2);
if(ArrL[L])
Arr.unshift(ArrL[L]);
if(ArrR[L])
Arr.push(ArrR[L]);
if(Arr.length <= 1 && L >= ArrL.length && L >= ArrR.length)
{
if(!Arr.length)
return [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];
return Arr[0];
}
var length2 = Math.floor(Arr.length / 2);
Arr2 = [];
for(i = 0; i < length2; i++)
{
var Hash = sha3(arr2(Arr[i * 2], Arr[i * 2 + 1]));
Arr2.push(Hash);
}
if(Arr.length / 2 > length2)
Arr2.push(Arr[Arr.length - 1]);
L++;
}
};
function UpdateMerklTree(Tree,CalcMap,NumLevel)
@ -621,135 +702,6 @@ function UpdateMerklTree(Tree,CalcMap,NumLevel)
}
}
};
function UpdateMerklTreeErrr(Tree,CalcMap,NumLevel)
{
var HashArr = Tree.LevelsHash[NumLevel];
if(!HashArr || !HashArr.length)
{
Tree.LevelsHash.length = NumLevel + 1;
Tree.MaxLevel = NumLevel;
Tree.Root = [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];
}
else
if(HashArr.length === 1)
{
Tree.LevelsHash.length = NumLevel + 1;
Tree.MaxLevel = NumLevel;
Tree.Root = HashArr[0];
}
else
{
var CalcMap2 = {};
var HashArr2 = Tree.LevelsHash[NumLevel + 1];
if(!HashArr2)
{
HashArr2 = [];
Tree.LevelsHash[NumLevel + 1] = HashArr2;
}
var len2 = Math.floor(HashArr.length / 2);
var Count = 0;
var LastIndex = HashArr.length - 1;
for(var key in CalcMap)
{
var i = Math.floor(key / 2);
if(i < len2)
{
Count++;
CalcMap2[i] = 1;
HashArr2[i] = sha3(arr2(HashArr[i * 2], HashArr[i * 2 + 1]));
}
}
if(len2 * 2 !== HashArr.length && CalcMap[LastIndex] !== undefined)
{
i = len2;
len2++;
Count++;
CalcMap2[i] = 1;
HashArr2[i] = HashArr[LastIndex];
if(HashArr2.length !== len2)
{
Count++;
HashArr2.length = len2;
delete CalcMap2[len2 - 1];
}
}
if(Count)
{
Tree.RecalcCount += Count;
UpdateMerklTree(Tree, CalcMap2, NumLevel + 1);
}
}
};
function UpdateMerklTree0(Tree,NumLevel)
{
var HashArr = Tree.LevelsArr[NumLevel];
if(!HashArr || !HashArr.length)
{
Tree.LevelsArr.length = NumLevel + 1;
Tree.MaxLevel = NumLevel;
Tree.Root = [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];
}
else
if(HashArr.length === 1)
{
Tree.LevelsArr.length = NumLevel + 1;
Tree.MaxLevel = NumLevel;
Tree.Root = HashArr[0];
}
else
{
var CalcArr = Tree.LevelsCalc[NumLevel];
var HashArr2 = Tree.LevelsArr[NumLevel + 1];
if(!HashArr2)
{
HashArr2 = [];
Tree.LevelsArr[NumLevel + 1] = HashArr2;
}
var CalcArr2 = Tree.LevelsCalc[NumLevel + 1];
if(!CalcArr2)
{
CalcArr2 = [];
Tree.LevelsCalc[NumLevel + 1] = CalcArr2;
}
var len2 = Math.floor(HashArr.length / 2);
var Count = 0;
for(var i = 0; i < len2; i++)
{
if(!CalcArr[i * 2] || !CalcArr[i * 2 + 1])
{
CalcArr[i * 2] = 1;
CalcArr[i * 2 + 1] = 1;
Count++;
CalcArr2[i] = 0;
HashArr2[i] = sha3(arr2(HashArr[i * 2], HashArr[i * 2 + 1]));
}
}
var LastIndex = HashArr.length - 1;
if(len2 * 2 !== HashArr.length || !CalcArr[LastIndex])
{
i = len2;
len2++;
Count++;
CalcArr[LastIndex] = 1;
CalcArr2[i] = 0;
HashArr2[i] = HashArr[LastIndex];
}
if(HashArr2.length !== len2)
{
Count++;
HashArr2.length = len2;
CalcArr2.length = len2;
CalcArr2[len2 - 1] = 0;
}
if(Count)
{
Tree.RecalcCount += Count;
UpdateMerklTree0(Tree, NumLevel + 1);
}
}
};
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777,
2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648,
32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649,
@ -1106,6 +1058,8 @@ global.CalcHashFromArray = CalcHashFromArray;
global.CalcMerklFromArray = CalcMerklFromArray;
global.CalcTreeHashFromArrBody = CalcTreeHashFromArrBody;
global.UpdateMerklTree = UpdateMerklTree;
global.GetMerkleProof = GetMerkleProof;
global.CheckMerkleProof = CheckMerkleProof;
global.IsZeroArr = IsZeroArr;
global.GetHashWithNonce = GetHashWithNonce;
global.GetPowPower = GetPowPower;

View File

@ -751,7 +751,7 @@ module.exports = class CDB extends require("../code")
if(num >= Block.arrContent.length)
break;
var Tr = {body:Block.arrContent[num]};
this.CheckCreateTransactionObject(Tr)
this.CheckCreateTransactionObject(Tr, 1)
Tr.Num = num
Tr.Type = Tr.body[0]
Tr.Length = Tr.body.length
@ -975,7 +975,7 @@ module.exports = class CDB extends require("../code")
var SeqHash = CalcHashFromArray(arr, true);
return SeqHash;
}
CheckCreateTicketObject(Tr, BlockNum)
CheckCreateTicketObject(Tr, BlockNum, SetTxID)
{
if(!Tr.HashPow && Tr.HashTicket)
{
@ -987,9 +987,11 @@ module.exports = class CDB extends require("../code")
Tr.HashPow = sha3(FullHashTicket)
Tr.power = GetPowPower(Tr.HashPow)
Tr.TimePow = Tr.power
if(SetTxID)
Tr.TxID = GetHexFromArr(FullHashTicket.slice(0, TR_TICKET_HASH_LENGTH + 6))
}
}
CheckCreateTransactionObject(Tr)
CheckCreateTransactionObject(Tr, SetTxID)
{
if(!Tr.HashPow)
{
@ -1000,7 +1002,7 @@ module.exports = class CDB extends require("../code")
else
Tr.HASH = shaarr(Tr.body)
Tr.HashTicket = Tr.HASH.slice(0, global.TR_TICKET_HASH_LENGTH)
this.CheckCreateTicketObject(Tr, Tr.num)
this.CheckCreateTicketObject(Tr, Tr.num, SetTxID)
}
}
BlockChainToBuf(WriteNum, StartNum, EndBlockNum)

View File

@ -245,14 +245,38 @@ module.exports = class CRest extends require("./db/block-db")
{
ToLog("Send GETREST Num:" + Task.StartNum + "-" + Task.Count + " to " + NodeName(Ret.Node), 2)
var SELF = this;
this.SendF(Ret.Node, {"Method":"GETREST", "Data":{BlockNum:Context.BlockNumRest, AccNum:Task.StartNum, Count:Task.Count}, "Context":{F:function (Info)
this.SendF(Ret.Node, {"Method":"GETREST", "Data":{BlockNum:Context.BlockNumRest, AccNum:Task.StartNum, Count:Task.Count, AccHash:Context.TxProof.AccHash},
"Context":{F:function (Info)
{
if(Task.OK)
return ;
var Data = SELF.DataFromF(Info);
if(!Data.Result)
return ;
ToLog("Result GETREST Num:" + Task.StartNum + " arr=" + Data.Arr.length + " from " + NodeName(Info.Node), 2)
if(Data.Version !== 1)
{
ToLog("ERROR Version Result GETREST Num:" + Task.StartNum + " from " + NodeName(Info.Node), 2)
return ;
}
if(CompareArrL(Data.ProofHash, Context.TxProof.AccHash) !== 0)
{
ToLog("ERROR PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + GetHexFromArr(Data.ProofHash) + "/" + GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node),
2)
return ;
}
var ArrM = [];
for(var i = 0; i < Data.Arr.length; i++)
{
ArrM[i] = shaarr(Data.Arr[i])
}
var GetHash = CheckMerkleProof(Data.ProofArrL, ArrM, Data.ProofArrR);
if(CompareArrL(GetHash, Context.TxProof.AccHash) !== 0)
{
ToLog("ERROR CALC PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + GetHexFromArr(GetHash) + "/" + GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node),
2)
return ;
}
ToLog("OK Result GETREST Num:" + Task.StartNum + " arr=" + Data.Arr.length + " from " + NodeName(Info.Node), 2)
if(!global.TX_PROCESS || !global.TX_PROCESS.RunRPC)
{
ToLog("ERROR global.TX_PROCESS")
@ -417,6 +441,7 @@ module.exports = class CRest extends require("./db/block-db")
BlockNum:uint,\
AccNum:uint,\
Count:uint,\
AccHash:hash,\
}";
}
static

View File

@ -90,7 +90,7 @@ class MerkleDBRow extends DBRow
}
InitMerkleTree()
{
this.MerkleTree
this.MerkleTree = undefined
this.MerkleArr = []
this.MerkleCalc = {}
}

View File

@ -146,7 +146,7 @@ function AddTransactionFromWeb(Params)
};
global.AddTransactionFromWeb = AddTransactionFromWeb;
global.STATIC_PROCESS = {Name:"STATIC PROCESS", idInterval:0, idInterval1:0, idInterval2:0, LastAlive:Date.now(), Worker:undefined,
Path:"./process/static-process.js", OnMessage:OnMessageStatic, PeriodAlive:15000};
Path:"./process/static-process.js", OnMessage:OnMessageStatic, PeriodAlive:50000};
ArrChildProcess.push(STATIC_PROCESS);
function OnMessageStatic(msg)

View File

@ -206,18 +206,26 @@ function GETREST(msg)
var Data = msg.Data;
if(!Data.BlockNum)
return ;
var BlockNumRest = Data.BlockNum;
var arr = GetCurrentRestArr();
var BufLength;
var nResult = 0;
for(var i = 0; i < arr.length; i++)
if(IsZeroArr(Data.AccHash))
{
if(arr[i] === BlockNumRest)
ToLog("Get Zero: AccHash");
return ;
}
var BlockNumRest = Data.BlockNum;
var RestIndexArr = GetCurrentRestArr();
var nResult = 0;
for(var i = 0; i < RestIndexArr.length; i++)
{
if(RestIndexArr[i] === BlockNumRest)
{
nResult = 1;
break;
}
}
var BufLength = 1000;
var ProofHash = [];
var ProofArrL = [];
var ProofArrR = [];
var ArrRest = [];
if(nResult)
{
@ -228,53 +236,32 @@ function GETREST(msg)
var LengthAccount = Data.Count;
if(LengthAccount > MAX_ACCOUNTS_TRANSFER)
LengthAccount = MAX_ACCOUNTS_TRANSFER;
var EndAccount = Data.AccNum + LengthAccount - 1;
var StartAccount = Data.AccNum;
var EndAccount = StartAccount + LengthAccount - 1;
if(EndAccount > Max)
EndAccount = Max;
var FindItem;
for(var Num = Data.AccNum; Num <= EndAccount; Num++)
var Tree = GetRestMerkleTree(BlockNumRest, RestIndexArr);
if(CompareArr(Data.AccHash, Tree.Root) !== 0)
{
FindItem = undefined;
var RestData = DApps.Accounts.ReadRest(Num);
var Data = DApps.Accounts.DBState.Read(Num);
if(!Data)
break;
var CountZero = 0;
for(var i = RestData.Arr.length - 1; i >= 0; i--)
{
var Item = RestData.Arr[i];
if(!Item.BlockNum)
{
CountZero++;
continue;
}
if(Item.BlockNum <= BlockNumRest)
{
if(!FindItem || Item.BlockNum > FindItem.BlockNum)
{
FindItem = Item;
}
}
}
if(FindItem)
{
Data.Value = FindItem.Value;
}
else
{
if(CountZero !== RestData.Arr.length)
continue;
}
var Buf = BufLib.GetBufferFromObject(Data, WorkFormat, WorkFormatLength, WorkStruct);
ArrRest.push(Buf);
ToLog("Get bad rest acc hash: " + BlockNumRest + " = " + GetHexFromArr(Data.AccHash) + "/" + GetHexFromArr(Tree.Root));
ArrRest = [];
}
else
{
ArrRest = GetArrRest(BlockNumRest, StartAccount, EndAccount);
ProofHash = Tree.Root;
var RetProof = GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount);
ProofArrL = RetProof.ArrL;
ProofArrR = RetProof.ArrR;
var ArrM = Tree.LevelsHash[0].slice(StartAccount, EndAccount + 1);
var Hash2 = CheckMerkleProof(ProofArrL, ArrM, ProofArrR);
if(CompareArr(Tree.Root, Hash2) !== 0)
throw ("=========ERROR GETREST HASH PROOF==============");
BufLength = 1000 + ArrRest.length * WorkFormatLength;
BufLength += ProofArrL.length * 32 + ProofArrR.length * 32 + 32;
}
BufLength = 1000 + ArrRest.length * WorkFormatLength;
}
else
{
BufLength = 1000;
}
var Data2 = {Result:nResult, BlockNum:BlockNumRest, Arr:ArrRest};
var Data2 = {Result:nResult, Arr:ArrRest, Version:1, ProofHash:ProofHash, ProofArrL:ProofArrL, ProofArrR:ProofArrR};
var BufWrite = BufLib.GetBufferFromObject(Data2, FORMAT_REST_TRANSFER, BufLength, {});
process.send({cmd:"Send", addrStr:msg.addrStr, Method:"RETREST", Context:msg.Context, Data:BufWrite});
};
@ -302,3 +289,109 @@ function GETSMART(msg)
var BufWrite = BufLib.GetBufferFromObject(Data2, FORMAT_SMART_TRANSFER, BufLength, {});
process.send({cmd:"Send", addrStr:msg.addrStr, Method:"RETSMART", Context:msg.Context, Data:BufWrite});
};
var glMapForHash = {};
function GetArrRest(BlockNumRest,StartAccount,EndAccount,bHashOnly)
{
var ArrRest = [];
var WorkStruct = {};
var WorkFormat = DApps.Accounts.FORMAT_ACCOUNT_ROW;
var WorkFormatLength = DApps.Accounts.SIZE_ACCOUNT_ROW;
for(var Num = StartAccount; Num <= EndAccount; Num++)
{
var FindItem = undefined;
var RestData = DApps.Accounts.ReadRest(Num);
var CountZero = 0;
for(var i = RestData.Arr.length - 1; i >= 0; i--)
{
var Item = RestData.Arr[i];
if(!Item.BlockNum)
{
CountZero++;
continue;
}
if(Item.BlockNum <= BlockNumRest)
{
if(!FindItem || Item.BlockNum > FindItem.BlockNum)
{
FindItem = Item;
}
}
}
var BlocNumMap = 0;
var StateDataValue = undefined;
if(FindItem)
{
StateDataValue = FindItem.Value;
BlocNumMap = Item.BlockNum;
}
else
{
if(CountZero !== RestData.Arr.length)
continue;
}
var StateData = DApps.Accounts.DBState.Read(Num);
if(!StateData)
break;
if(StateDataValue)
StateData.Value = StateDataValue;
if(bHashOnly)
{
var key = "" + Num + "-" + BlocNumMap;
var Hash = glMapForHash[key];
if(!Hash)
{
var Buf = BufLib.GetBufferFromObject(StateData, WorkFormat, WorkFormatLength, WorkStruct);
Hash = shaarr(Buf);
glMapForHash[key] = Hash;
}
ArrRest.push(Hash);
}
else
{
var Buf = BufLib.GetBufferFromObject(StateData, WorkFormat, WorkFormatLength, WorkStruct);
ArrRest.push(Buf);
}
}
return ArrRest;
};
var glMapRest = {};
function GetRestMerkleTree(BlockNumRest,RestIndexArr)
{
var MerkleTree = glMapRest[BlockNumRest];
if(!MerkleTree)
{
ToLog("Create new glMapRest key: " + BlockNumRest, 2);
var startTime = process.hrtime();
var EndAccount = DApps.Accounts.DBState.GetMaxNum();
var ArrHash = GetArrRest(BlockNumRest, 0, EndAccount, 1);
var Time1 = process.hrtime(startTime);
var MerkleCalc = {};
MerkleTree = {LevelsHash:[ArrHash], RecalcCount:0};
for(var Num = 0; Num < ArrHash.length; Num++)
{
MerkleCalc[Num] = 1;
}
UpdateMerklTree(MerkleTree, MerkleCalc, 0);
glMapRest[BlockNumRest] = MerkleTree;
var Time2 = process.hrtime(startTime);
var deltaTime1 = (Time1[0] * 1000 + Time1[1] / 1e6) / 1000;
var deltaTime2 = (Time2[0] * 1000 + Time2[1] / 1e6) / 1000;
ToLog("Create delta time: " + deltaTime1 + "/" + deltaTime2 + " s", 2);
var MapIndex = {};
for(var i = 0; i < RestIndexArr.length; i++)
{
MapIndex[RestIndexArr[i]] = 1;
}
for(var key in glMapRest)
{
if(!MapIndex[key])
{
ToLog("Delete old glMapRest key: " + key, 2);
delete glMapRest[key];
}
}
}
return MerkleTree;
};