Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 13646|Atbildi: 2

Blokķēdes lietojumprogrammu izstrādes rokasgrāmata

[Kopēt saiti]
Publicēts 03.05.2018 15:55:28 | | |
Paziņojums: Šis ir Xunlei Company rakstītais dokuments "Xunlei Global Blockchain Application Competition Development Guide", kāpēc izmantot Xunlei Company rakstīto dokumentu kā blokķēdes izstrādes rokasgrāmatu?

Pērkons faktiski ir privāta ķēde, kas izveidota ar Ethereum viedajiem līgumiem, tehnoloģija ir ļoti nobriedusi, un tai ir padziļināti pētījumi par blokķēdes tehnoloģiju, kas ir nozīmīga mūsu blokķēdes attīstībā.

Kā saka, "izdarīt secinājumus no viena piemēra", mēs varam izstrādāt citas blokķēdes lietojumprogrammas, izlasot blokķēdes izstrādes rokasgrāmatas dokumentu, ko rakstījis Xunlei, pateicoties Xunlei.

Dokumentā teikts:

1/16
Thunder globālā blokķēdes lietojumprogrammu konkursa izstrādes rokasgrāmata
Līguma izstrāde līnijas ieteikumā
1. Pirms viedo līgumu rakstīšanas jums ir jābūt zināmai izpratnei par blokķēdes pamatiem (pielikumā: Ethereum pārskats).
2. Apgūstiet soliditātes valodu (solidity API).
3. Iemācieties izmantot trifeļu ietvaru kombinācijā ar stabilitātes mācīšanos. Izmantojiet trifeles attīstīt lokāli
Izpildiet līgumus blokķēdes vidē.
4. Apgūstiet un izmantojiet zeppelin-solidty (standartizētu līgumu sistēmu, kas veltīta drošībai) un dizaina integrāciju
Līguma režīms, atdaliet datus un loģiskos līgumus, kontrolējiet atļauju drošību un apsveriet jaunināšanas loģiku.
5. Iemācieties mijiedarboties ar līgumiem, izmantojot web3.js. Izmantojiet Metamask spraudni un tīmekļa pakalpojumu ar blokķēdi
Mijiedarbība.
6. Foruma jautājumi un atbildes: http://wanke.xunlei.com/forum.php?
mod=forumdisplay&fid=53 (Visas problēmas, ar kurām jūs saskaraties, var tikt atgrieztas šajā forumā.)
Mēs Jums atbildēsim 3 darba dienu laikā)
Pamatjēdzieni
Blokķēde
Blockchain ir decentralizēta sadalīta skaitļošanas sistēma, kuras galvenā iezīme ir pastāvīga datu nemainīgums,
To nevar viltot, un tam ir augsta atklātības, pārredzamības un uzticības pakāpe. Galvenās tehnoloģijas ietver Bizantijas kļūdu tolerantu vienprātības algoritmu (PBFT),
šifrēšanas tehnoloģija, P2P tehnoloģija utt.
Darījums
Blokķēdi var saprast kā globāli kopīgu darījumu datu bāzes sistēmu. Jebkura programmatūra ar atļauju to var lasīt
Ņemiet datus no blokķēdes tīkla. Ja ir nepieciešams mainīt datus bloku tīklā, ir jāuzsāk sega
Blokmezgli pieņem pieprasījumus, kurus sistēmā kopā sauc par darījumiem.
Darījumi ir darījumu un tiek iesniegti blokķēdē, vai nu ne visi, vai visi izpildīti. Tirdzniecības vadītājs
Pēc rindas pabeigšanas tā tiek neatgriezeniski saglabāta blokķēdē un to nevar mainīt vai izpildīt vēlreiz.
Darījumus iniciē un paraksta konts sistēmā, un, izmantojot kriptogrāfiju, darījumus var turēt tikai ar privāto atslēgu
2/16
Kāds to ierosina, citi nevar modificēt un viltot. Tas nodrošina darījuma autentiskumu un drošību.
Konts
Blokķēdes sistēmā ir divu veidu konti, viens ir ārējs, bet otrs ir līguma konts. Ārējais konts pieder
Jūsu unikālas publiskās un privātās atslēgas, un jūsu kontu kontrolē šis atslēgu pāris. Nākotnes līgumu kontiem ir savs kods, un kontu veido
Pašu koda kontrole.
Konts tiek identificēts pēc adreses, un adreses garums ir vienāds, un starp abiem kontu veidiem nav atšķirības. Ārējā konta adresi nodrošina
Tiek ģenerēta publiskā atslēga, un līguma adrese izmanto adresi, no kuras tika izveidots līguma konts, un transakciju skaitu, kas izveidoja līguma kontu
(nonce) tiek ražots. Līgumi tiek izvietoti pēc oficiālās adreses, un parastie konti nevar tieši publicēt līgumus. Lietotāja kombinācija
Tas ir oficiāli jāpārskata un jāizlaiž Xunlei.
Sistēmā nav atšķirības starp abiem kontu veidiem. Katram kontam sistēmā ir 256 biti
Atslēgas-vērtības krātuves struktūru līdz 256 bitiem sauc par krātuvi. Katram kontam ir bilance, ko sauc par
Atlikumu WEI var mainīt, nosūtot darījumu ar skaitlisku vērtību uz kontu.
Līgums
Līgums ir blokķēdes konts, kurā tiek glabāts kods, un līguma izsaukums tiek veikts, nosūtot darījumus uz šo kontu. Kad
Iepriekšējā populārākā līgumu programmēšanas valoda bija Solidity. Pašlaik konkurss atbalsta tikai līgumu iesniegšanu Solidity valodā.
Līgums ir sadalīts divās daļās, datu glabāšana un funkcija, dati glabā līguma stāvokli, un funkcija ir līgums
Ārējais interfeiss realizē datu vaicājumu un stāvokļa modifikāciju, izsaucot funkcijas.
Uzrakstiet līgumu, izmantojot programmēšanas valodu, un pēc kompilēšanas iegūstiet EVM baitu kodu. Nosūtot darījumu uz līguma kontu, reāls
Pašreizējais līguma izsaukums.
Gāze
Gāze ir blokķēdes maksājumu vienība, un, izveidojot darījumu, tiks norādīts noteikts gāzes daudzums. Kungs
Ja tas ir ierobežot aprēķina summu par darījumu un maksāt maksu par darījuma izpildi. Darījuma izpildes laikā gāze
To patērēs EVM noteiktais noteikums.
Gāzes cena ir darījuma veidotāja norādītā vērtība un darījuma izpildei nepieciešamo maksu skaits
Summa ir Gas_Price*Gāze. Darījums beidzas Ja ir atlikusi gāze, atlikusī daļa tiek atgriezta satura veidotāja ieteikumam
lietotājiem. Ja gāze ir nepietiekama, darījuma izpilde neizdosies, un darījums nenovērsīs plūdu uzbrukumus sistēmas drošībai
Apstrādes maksa netiek atgriezta. Mazākā gāzes cenas vienība ir wei, 10^18 wei = 1 ķēdes grams.
Stabilitāte
3/16
Solidity ir augsta līmeņa programmēšanas valoda, kas paredzēta viedajiem līgumiem, kas darbojas EVM (Ethereum).
Virtual Machine)。 Valodas dizaina ieviešanu ietekmē C++/Python/JavaScript.
Solidity ir spēcīgi ierakstīta valoda, kas atbalsta pārmantošanu, polimorfismu, saskarnes, abstrakciju, bibliotēkas, pielāgotus datu tipus un daudz ko citu
Sekss. Solidity atbalsta montāžas instrukciju programmēšanu, un kods tiek kompilēts baitu kodā un darbojas EVM. Stabilitāte ir
Vispopulārākā viedo līgumu izstrādes valoda ir arī valoda, ko iesaka un atbalsta Thunder Contract Platform.
Piezīmes:
1. Ethereum virtuālā mašīna ir virtuālā vide Ethereum, kas nodrošina izpildlaika vidi viedajiem līgumiem
Simulēta mašīna. Sacensību platforma ir saderīga ar EVM, taču tai jāatbilst oficiālās platformas lietošanas ierobežojumiem.
2. Kontu veidi ir sadalīti ārējos kontos (parasto tirdzniecības kontu adresēs) un nākotnes kontos. Līguma izveide
Tas ir darījuma nosūtīšanas process uz galamērķa konta adresi 0.
3. Konkurss nosaka trifeļu (trifeļu v4.1.5 soliditāte v0.4.21) izmantošanu, lai izstrādātu inteliģentas kombinācijas
Platforma pārbaudīs baitu kodu atbilstoši dalībnieka iesniegtā dokumenta pirmkodam. ,
Izstrādājiet līgumus ar trifelēm
Viedo līgumu stabilitātes izstrādes ietvara trifele. Tas nodrošina pilnīgu izstrādes, atkļūdošanas un rediģēšanas komplektu
Lokālo vides tulkošana, izvietošana un testēšana. Veidnes komandu var ātri izmantot izpakošana, pamatojoties uz dažām veidnēm
Ģenerējiet atbilstošo līguma struktūru.
Instalējiet trifeles
npm i -g trifeles
[root@opennode sandai]# trifeļu versija
Trifeles v4.1.5 (kodols: 4.1.5)
Soliditāte v0.4.21 (solc-js)
Sākt
1. Inicializējiet līguma projektu ar trifeli
4/16
mkdir vienkārša uzglabāšana
CD vienkāršā glabāšana
trifeles init
2. Izveidojiet jaunu līguma failu: Līguma izveidei varat izmantot trifeles
Varat arī izveidot jaunu failu tieši no SimpleStorage komandrindas
līgums/SimpleStorage.sol
SimpleStorage.sol
pragma soliditāte ^0.4.21;
līgums SimpleStorage {
uint myVariable;
funkciju kopa(uint x) public {
myVariable = x;
}
funkcija get() pastāvīga publiskā atgriešanās
(uint) {
atgriezt myVariable;
}
}
3. Pievienojiet migrācijas skriptus: varat izmantot trifeļu izveides migrāciju
2_deploy_contract Tiek pievienota komandrindas metode, un jūs varat arī tieši izveidot jaunu failu
migrācijas/2_deploy_contract.js
2_deploy_contract.js; trifeļu migrācijas izpilde
Rindu secība ir saistīta ar faila nosaukumu, tāpēc vairāki izvietošanas skripti ir jānosauc secībā
var SimpleStorage =
artefacts.require("Vienkārša glabāšana");
module.exports = funkcija (izvietotājs) {
deployer.deploy(SimpleStorage);
5/16
};
4. Palaidiet trifeļu kompilācijas līgumu, un kompilētais līgums atrodas būvēšanas mapē. par līgumu
Izvietošanai ir nepieciešams atbilstošs json fails, kas satur baitu kodu, abiCode utt
5. Rediģējiet truffle.js, lai iestatītu trifeļu izvietošanas līgumu un RPC savienojumu, lai mijiedarbotos ar blokķēdi.
[root@localhost opennode]# vi truffle.js
modulis.eksports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
}
}
};
6. Ieslēdziet Truffle noklusējuma blokķēdes vidi konsolē.
trifeļu attīstība
Trifeļu izstrāde sākās plkst.
http://127.0.0.1:9545/
Accounts:
(0) 0x627306090abab3a6e1400e9345bc60c78a8bef57
(1) 0xf17f52151ebef6c7334fad080c5704d77216b732
(2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef
(3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544
(4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2
(5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e
(6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5
(7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5
(8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc
(9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de
6/16
Privātās atslēgas:
(0)
c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e
4a9ec0a0f44dc0d3
(1)
ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505
3c36d94e974d162f
(2)
0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8
AD91193C05875EF1
(3)
c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8
5da83b71f772aa6c
(4)
388c684f0ba1ef5017716adb5d21a053ea8e90277d086833
7519f97bede61418
(5)
659cbb0e2411a44db63778987b1e22153c086a95eb6b18bd
f89de078917abc63
(6)
82d052c865f5763aad42add438569276c00d3d88a2d062d3
6b2bae914d58b8c8
(7)
aa3680d5d48a8283413f7a108367c7299ca73f553735860a
87b08f39395618b7
(8)
0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07
700d8669ff12b7c4
(9)
8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362
DCAE9012B548B1E5
Mnemonic: candy maple cake sugar pudding cream
medus bagāts gluds drupināts salds kārums
⚠ Svarīgi ⚠: Šī mnemonika tika izveidota
jūs ar trifeli. Tas nav droši.
Pārliecinieties, ka to neizmantojat ražošanā
7/16
blokķēdes, pretējā gadījumā jūs riskējat zaudēt līdzekļus.
trifele(attīstīt)>
Tas nodrošina vietējo blokķēdes vidi, lai Truffle varētu izpildīt līgumus, pēc noklusējuma ģenerējot 10 kontus, no kuriem katrs tiek ģenerēts
Sākotnējais konta atlikums ir 100 ēteri. Varat arī izmantot Ganache nodrošināto grafisko interfeisu
, jums ir jāmodificē ports, kuram ir pievienota konfigurācija.
7. Izpildiet trifeļu migrācijas portu izvietošanas līgumu jaunā konsolē (vai trifelēs
izstrādāt konsoli, lai veiktu migrāciju).
8. Pārbaudiet līguma kodu ar trifeļu izstrādi.
SimpleStorage.deployed().then(function(instance
){atgriezties
instance.get.call(); }).then(funkcija(vērtība)
{atgriezt vērtību.toNumber()})
// 0
SimpleStorage.deployed().then(function(instance
){atgriezt instance.set(100); });
Izvades transakciju informācija
SimpleStorage.deployed().then(function(instance
){atgriezties
instance.get.call(); }).then(funkcija(vērtība)
{atgriezt vērtību.toNumber()});
// 100
9. Pārbaudiet līgumu ar trifeļu testu Izmantojiet trifeles izveidot testu SimpleStorage, lai izveidotu jaunu vai
Izveidojiet jaunu failu testu / SimpleStorage.test.js tieši.
const SimpleStorage =
artefacts.require('Vienkārša glabāšana');
contract('SimpleStorage', function(accounts) {
8/16
it("vajadzētu apgalvot patiesu", funkcija(gatavs)
{
var simpleStorage =
SimpleStorage.deployed();
var instance;
simpleStorage.then(res => {
instance = res;
atgriezt instance.get()
}).then(vērtība => {
assert.equal('0',
value.toNumber(), 'nav vienāds ar 0')
}).then(() => {
instance.set(100)
}).then(() => {
atgriezt instance.get()
}).then(vērtība => {
assert.equal('100',
value.toNumber(), 'nav vienāds ar 100')
})
gatavs();
});
});
Jaunajā konsolē ievadiet trifeļu testu ./test/SimpleStorage.test.js.
10. Testa līgumi ar remiksu Ievietojiet līgumus, kas izstrādāti, izmantojot trifeles remiksā, lai ātri modificētu
Piedāvātā līguma izvietošana un atsaukšana. Remix nodrošina kompilācijas izpildlaika vidi līgumiem, un to var kontrolēt ar līgumu
Tabulā var redzēt detalizētu informāciju par katru līguma darījumu, piemēram, ievades un izejas parametrus, parakstītās metodes datus,
darījumu jaucējkods un cita informācija. Atbalstiet atkļūdošanu.
1. Izmantojiet kompilācijas informāciju, lai skatītu līguma apkopošanas informāciju. Ieskaitot baitu kodu, abi
un izmantojot web3.js ātru Drip Ah metodes ieviešanu.
9/16
2. Izmantojiet izpildi, lai izveidotu līgumu, un konsole var apskatīt darījumu, kas izveidoja līgumu.
Izmantojiet Truffle Unbox, lai izveidotu interaktīvas līgumu lietotnes
Iepriekš minētās darbības izveido līguma vidi, kuru var kompilēt, izvietot un atkļūdot, izmantojot pamata trifeļu init. Zemāk
Izveidojiet jaunu projektu, izmantojot Truffle Unbox, kas nodrošina mums trifeļu projekta veidni
Dažas līguma lietojumprogrammas mijiedarbības vides atkarības. Jūs varat apskatīt oficiālos piedāvājumus trifeļu kastēs
Veidņu lodziņi. Tālāk ir reakcijas veidne.
1. Jauns projekts truf-react
mkdir truf-react
10/16
CD truf-react
trifeļu izpakošana react
Izpakošanas process lejupielādē ekstrakcijas veidni un veic tādas darbības kā npm instalēšana.
2. Konfigurējiet projekta truffle.js
modulis.eksports = {
Skatīt
<http://truffleframework.com/docs/advanced/confi
gurācija>
, lai pielāgotu savu trifeli
Konfigurācija!
networks: {
development: {
host: '127.0.0.1',
port: '9545',
network_id: '*' // Match
Jebkurš tīkla ID
}
}
};
3. Sāciet trifeļu attīstību
4. Grozījumi SRC/App.js
import React, { Component } no 'react'
importēt SimpleStorageContract no
'.. /būve/līgumi/SimpleStorage.json"
importēt getWeb3 no './utils/getWeb3'
import './css/oswald.css'
import './css/open-sans.css'
import './css/pure-min.css'
11/16
import './App.css'
const līgums = require('trifeļu līgums')
const simpleStorage =
līgums (SimpleStorageContract)
klase Lietotne paplašina komponentu {
konstruktors (rekvizīti) {
super (rekvizīti)
šis.stāvoklis = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
}
this.changeValueHandle =
this.changeValueHandle.bind(šis)
this.setHandle =
this.setHandle.bind(šis)
}
componentWillMount() {
Iegūstiet tīkla pakalpojumu sniedzēju un web3
piemērs.
Vairāk skatiet utils/getWeb3
informācija.
getWeb3
.then(rezultāti => {
this.setState({
web3:
rezultāti.web3
})
Informatīvais līgums
Kad Web3 tika nodrošināts.
12/16
this.instantiateContract()
})
.catch(() => {
console.log('Kļūda
Web3 atrašana.')
})
}
instantiateContract() {
/*
* VIEDĀ LĪGUMA PIEMĒRS
*
* Parasti šīs funkcijas
jāizsauc saistībā ar
* Valsts pārvaldes bibliotēka, bet
ērtības labad es tos esmu ievietojis šeit.
*/
this.simpleStorageSet(5)
}
changeValueHandle(notikums) {
this.setState({
inputValue:
Number(notikums.mērķis.vērtība)
})
}
setHandle() {
this.simpleStorageSet(this.state.inputValue)
}
simpleStorageSet(x) {
simpleStorage.setProvider(this.state.web3.curren
tNodrošinātājs)
Paziņojot to par vēlāku laiku
13/16
mēs varam ķēdēt funkcijas vietnē SimpleStorage.
var simpleStorageInstance
Iegūstiet kontus.
this.state.web3.eth.getAccounts((kļūda,
konti) => {
simpleStorage.deployed().then((instance) => {
simpleStorageInstance = instance
this.setState({
address: instance.address })
Veikali a
dotā vērtība, 5 pēc noklusējuma.
Atgriešanās
simpleStorageInstance.set(x, {no:
konti[0]})
}).then((rezultāts) => {
Iegūstiet vērtību
no līguma, lai pierādītu, ka tas darbojās.
Atgriešanās
simpleStorageInstance.get.call(konti[0])
}).then((rezultāts) => {
Atjaunināšanas stāvoklis
ar rezultātu.
Atgriešanās
this.setState({ storageValue: result.c[0] })
})
})
}
render() {
atgriešanās (
<div className="App">
<nav
className="navbar pure-menu pure-menuhorizontal">
14/16
<a href="#" className="pure-menu-heading puremenu-link">Trifeles
Kaste</a>
</nav>
<galvenās
className="container">
<div
className="pure-g">
<div className="pure-u-1-1">
<h1>Labi iet!</h1>
<p>Jūsu trifeļu kaste ir uzstādīta un gatava.</p>
<h2>Viedā līguma piemērs</h2>
<p>Ja jūsu līgumi ir apkopoti un migrēti
veiksmīgi, zemāk tiks parādīta saglabātā vērtība
5 (pēc noklusējuma).</p>
<p>Mēģiniet mainīt tiešsaistē saglabāto vērtību <strong>
59</strong> no App.js.</p>
<p>Saglabātā vērtība ir:
{this.state.storageValue}</p>
<p>izvietotā līguma adrese:
{šī.valsts.adrese}</p>
</div>
<div>
<input type="number" onChange=
{this.changeValueHandle}/>
<poga onClick={this.setHandle}>set</button>
15/16
</div>
</div>
</main>
</div>
);
}
}
eksportēt noklusējuma lietotni
Pievienots līgumu kopas metodes izsaukums. Un parādiet līguma adresi.
5. Atveriet jaunu konsoli un palaidiet npm palaišanas sākumu
6. Atveriet http://lcoalhost:3000 savā pārlūkprogrammā, lai redzētu līguma rezultātus.
7. Iestatiet glabātā līguma vērtību, izmantojot komplekta un ievades lodziņus.
8. Ievadiet trufle izstrādi
//将xxx替换为address
SimpleStorage.at('xxxx').then(res => {return
res.get()})
Tiek iegūta tipa BigNUmber atgrieztā vērtība un iestatīta c masīva vērtība
storedData.
Izmantojiet pārlūkprogrammas spraudni Metamask, lai mijiedarbotos ar blokķēdi
Atsauces http://truffleframework.com/tutorials/pet-shop
Dalībnieki iesniedz dokumentus
Konkursā ir norādīta Truffle izmantošana viedo līgumu izstrādē, un Truffle versija v4.1.5 atbilst solcjs versijai
v0.4.21. Izstrādātājiem ir jāiesniedz Truffle projekta zip pakete un saistītie projekta ievada dokumenti, kas ietver vismaz
Sekojošie:
16/16
1. Trifeļu projekta pamata faila struktūra: būvniecības līgumu migrācijas pārbaude
package.json truffle.js truffle-config.js README.md // Inženiertehniskās dokumentācijas apraksts
Nav nepieciešama node_modules
2. Nepieciešamība sniegt PPT vai PDF paskaidrojumu par visu projekta produktu, ieskaitot produkta fona ievadu, produkta nozīmi,
Lietotnes lejupielādes adrese (pēc izvēles), produkta lietošanas procesa ievads.
Turpmākie trešo pušu izstrādātāji var ieviest līgumu lietojumprogrammas un ķēdes kabatas saskaņā ar gaidāmo ThunderChain vadlīniju dokumentu
Mijiedarbība.
Dokumentācija un rīki
soliditātes API
trifeļu dokumentācija
Ganache nodrošina grafisko interfeisu vietējai blokķēdes videi
Zeppelin-Solidty ir apņēmies nodrošināt drošu un standartizētu līgumu sistēmu
MetaMask nodrošina pārlūkprogrammas spraudņus pārlūkprogrammām ar blokķēdes vidi, izmantojot RPC savienojumus
web3.js Ethereum iekapsulēts JS mijiedarbībai ar blokķēdi
Visbeidzot, pdf dokumenta lejupielāde:

Dev_Guide_zh.pdf (373.55 KB, Lejupielādes skaits: 6)
 Saimnieks| Publicēts 03.05.2018 16:01:58 |
Publicēts 08.05.2018 14:25:10 |
Iemācījās, paldies
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com