Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 13808|Atsakyti: 2

Blokų grandinės programų kūrimo vadovas

[Kopijuoti nuorodą]
Paskelbta 2018-05-03 15:55:28 | | |
Pareiškimas: Toliau pateikiamas "Xunlei Company" parašytas dokumentas "Xunlei Global Blockchain Application Competition Development Guide", kodėl verta naudoti "Xunlei Company" parašytą dokumentą kaip blokų grandinės kūrimo vadovą?

"Thunder" iš tikrųjų yra privati grandinė, sukurta naudojant Ethereum išmaniąsias sutartis, technologija buvo labai brandi ir joje atlikti nuodugnūs blokų grandinės technologijos tyrimai, kurie turi pagrindinę reikšmę mūsų blokų grandinės plėtrai.

Kaip sakoma, "darykite išvadas iš vieno pavyzdžio", galime sukurti kitas blokų grandinės programas perskaitę "Xunlei" parašytą blokų grandinės kūrimo vadovo dokumentą.

Dokumente rašoma:

1/16
"Thunder Global Blockchain" programų konkurso kūrimo vadovas
Rekomendacija dėl sutarties išplėtimo į liniją
1. Prieš rašydami išmaniąsias sutartis, turite turėti tam tikrą supratimą apie blokų grandinės pagrindus (pridedama: Ethereum apžvalga).
2. Išmokite solidumo kalbą (solidity API).
3. Išmokite naudoti triufelių sistemą kartu su solidumo mokymusi. Naudokite triufelį vystytis vietoje
Vykdykite sutartis blokų grandinės aplinkoje.
4. Išmokite ir naudokite zeppelin-solidty (standartizuotą sutarčių sistemą, skirtą saugumui) ir dizaino integraciją
Sutarties režimas, atskirkite duomenis ir logines sutartis, valdykite leidimų saugą ir apsvarstykite atnaujinimo logiką.
5. Išmokite bendrauti su sutartimis naudodami web3.js. Naudokite "Metamask" papildinį ir žiniatinklio paslaugą su blokų grandine
Sąveika.
6. Forumo klausimai ir atsakymai: http://wanke.xunlei.com/forum.php?
mod=forumdisplay&fid=53 (Visos problemos, su kuriomis susiduriate, gali būti atšauktos šiame forume.)
Mes jums atsakysime per 3 darbo dienas)
Pagrindinės sąvokos
Blokų grandinė
"Blockchain" yra decentralizuota paskirstyta skaičiavimo sistema, kurios pagrindinis bruožas yra nuolatinis duomenų nekintamumas,
Ji negali būti suklastota, ji pasižymi dideliu atvirumu, skaidrumu ir pasitikėjimu. Pagrindinės technologijos apima Bizantijos gedimams atsparų konsensuso algoritmą (PBFT),
šifravimo technologija, P2P technologija ir kt.
Operacija
Blokų grandinė gali būti suprantama kaip pasauliniu mastu bendra sandorių duomenų bazės sistema. Jį gali perskaityti bet kuri leidimą turinti programinė įranga
Paimkite duomenis iš blokų grandinės tinklo. Kai reikia pakeisti duomenis blokiniame tinkle, reikia inicijuoti antklodę
Yra užklausų, kurias priima blokiniai mazgai, kurie sistemoje bendrai vadinami sandoriais.
Sandoriai yra transakciniai ir pateikiami į blokų grandinę, ne visi arba visi įvykdyti. Prekybos vadovas
Užbaigus eilutę, ji visam laikui išsaugoma blokų grandinėje ir negali būti modifikuojama ar vykdoma dar kartą.
Operacijas inicijuoja ir pasirašo sąskaita sistemoje, o kriptografijos būdu operacijos gali būti laikomos tik privačiu raktu
2/16
Kažkas tai inicijuoja, kiti negali modifikuoti ir suklastoti. Tai užtikrina operacijos autentiškumą ir saugumą.
Sąskaita
Blokų grandinės sistemoje yra dviejų tipų sąskaitos: viena yra išorinė, o kita yra sutarties sąskaita. Išorinė paskyra priklauso
Jūsų unikalūs viešieji ir privatūs raktai, o jūsų paskyra valdoma šia raktų pora. Ateities sandorių sąskaitos turi savo kodą, o sąskaitą sudaro
Nuosavas kodo valdymas.
Sąskaita identifikuojama pagal adresą, o adreso ilgis yra vienodas, todėl tarp dviejų tipų sąskaitų nėra skirtumo. Išorinės sąskaitos adresą pateikia
Sugeneruojamas viešasis raktas, o sutarties adresas naudoja adresą, iš kurio buvo sukurta sutarties sąskaita, ir operacijų, kurios sukūrė sutarties sąskaitą, skaičių
(nonce). Sutartys diegiamos oficialiu adresu, o įprastos paskyros negali tiesiogiai skelbti sutarčių. Vartotojo derinys
Jis turi būti oficialiai peržiūrėtas ir išleistas Xunlei.
Sistemoje nėra skirtumo tarp dviejų tipų sąskaitų. Kiekviena paskyra turi 256 bitus sistemoje
Rakto vertės saugojimo struktūra iki 256 bitų vadinama saugykla. Kiekviena sąskaita turi likutį, vadinamą
Likutis WEI gali būti pakeistas siunčiant į sąskaitą skaitinės vertės operaciją.
Sutartis
Sutartis yra blokų grandinės sąskaita, kurioje saugomas kodas, o sutarties skambutis atliekamas siunčiant operacijas į šią sąskaitą. Kada
Ankstesnė populiaresnė kontraktinio programavimo kalba buvo "Solidity". Šiuo metu konkursas palaiko tik sutarčių pateikimą "Solidity" kalba.
Sutartis yra padalinta į dvi dalis: duomenų saugojimas ir funkcija, duomenys saugo sutarties būseną, o funkcija yra sutartis
Išorinė sąsaja realizuoja duomenų užklausą ir būsenos modifikavimą iškviesdama funkcijas.
Parašykite sutartį naudodami programavimo kalbą ir gaukite EVM baitų kodą po kompiliavimo. Siųsdami operaciją į sutarties sąskaitą, realios
Dabartinės sutarties iškvietimas.
Dujos
Dujos yra blokų grandinės mokėjimo vienetas, o sukūrus sandorį bus nurodytas tam tikras dujų kiekis. Viešpats
Jei jis turi apriboti sandorio skaičiavimo sumą ir sumokėti mokestį už sandorio vykdymą. Vykdant sandorį, dujos
Jis bus sunaudotas pagal EVM nustatytą taisyklę.
Dujų kaina yra sandorio sudarytojo nurodyta vertė ir sandoriui įvykdyti reikalingų mokesčių skaičius
Kiekis yra Gas_Price*Dujos. Operacija baigiasi Jei lieka degalų, likusi dalis grąžinama kūrėjo pasiūlymui
vartotojams. Jei dujų nepakanka, operacijos vykdymas nepavyks, o operacija nepadės išvengti potvynių atakų sistemos saugumui
Tvarkymo mokestis negrąžinamas. Mažiausias dujų kainos vienetas yra wei, 10^18 wei = 1 grandinės gramas.
Tvirtumas
3/16
"Solidity" yra aukšto lygio programavimo kalba, skirta išmaniosioms sutartims, veikianti EVM (Ethereum).
Virtuali mašina)。 Kalbos dizaino įgyvendinimui įtakos turi C++/Python/JavaScript.
"Solidity" yra stipriai įvesta kalba, palaikanti paveldėjimą, polimorfizmą, sąsajas, abstrakciją, bibliotekas, pasirinktinius duomenų tipus ir kt
Seksas. "Solidity" palaiko surinkimo instrukcijų programavimą, o kodas kompiliuojamas į baitų kodą ir veikia EVM. Solidumas yra
Populiariausia išmaniųjų sutarčių kūrimo kalba taip pat yra kalba, kurią rekomenduoja ir palaiko "Thunder Contract Platform".
Pastabos:
1. Ethereum virtuali mašina yra virtuali Ethereum aplinka, suteikianti išmaniųjų sutarčių vykdymo aplinką
Imituojama mašina. Varžybų platforma yra suderinama su EVM, tačiau ji turi atitikti oficialios platformos naudojimo apribojimus.
2. Sąskaitų tipai skirstomi į išorines sąskaitas (įprastus prekybos sąskaitų adresus) ir ateities sandorių sąskaitas. Sutarties kūrimas
Tai operacijos siuntimo paskirties sąskaitos adresu 0 procesas.
3. Konkurse nurodomas triufelių naudojimas (triufelis v4.1.5, tvirtumas v0.4.21) intelektualiems deriniams kurti
Platforma patikrins baitų kodą pagal dalyvio pateikto dokumento šaltinio kodą. ,
Sudarykite sutartis su triufeliais
Išmaniųjų sutarčių solidumo kūrimo sistemos triufelis. Jame pateikiamas visas kūrimo, derinimo ir redagavimo rinkinys
Vietinių aplinkų vertimas, diegimas ir testavimas. Galite greitai naudoti šablono komandą išpakuoti pagal kai kuriuos šablonus
Sukurkite atitinkamą sutarties struktūrą.
Įdiekite triufelį
npm i -g triufelis
[root@opennode sandai]# triufelių versija
Triufelis v4.1.5 (branduolys: 4.1.5)
Solidumas v0.4.21 (solc-js)
Pradėti
1. Inicijuokite sutarties projektą su triufeliais
4/16
MKDIR paprastas saugojimas
CD paprasta saugykla
triufelis init
2. Sukurkite naują sutarties failą: Norėdami sukurti sutartį, galite naudoti triufelį
Taip pat galite sukurti naują failą tiesiai iš "SimpleStorage" komandų eilutės
sutartis/SimpleStorage.sol
SimpleStorage.sol
pragma solidumas ^0.4.21;
sutartis SimpleStorage {
uint myVariable;
Function Set(uint X) public {
myVariable = x;
}
funkcija get() pastovus viešas grąžinimas
(uint) {
grąžinti myVariable;
}
}
3. Pridėkite perkėlimo scenarijus: galite naudoti triufelių kūrimo migraciją
2_deploy_contract Pridėtas komandinės eilutės metodas, taip pat galite tiesiogiai sukurti naują failą
migracija / 2_deploy_contract.js
2_deploy_contract.js; triufelių migracijos vykdymas
Eilučių tvarka yra susijusi su failo vardu, todėl reikia pavadinti kelis diegimo scenarijus
var SimpleStorage =
artifacts.require("Paprasta saugykla");
module.exports = funkcija (diegėjas) {
deployer.deploy(SimpleStorage);
5/16
};
4. Paleiskite triufelių kompiliavimo sutartį, o sukompiliuota sutartis yra kūrimo aplanke. vienai sutarčiai
Yra atitinkamas json failas, kuriame yra baitų kodas, abiCode ir kt., reikalingas diegimui
5. Redaguokite truffle.js, kad nustatytumėte triufelių diegimo sutartį ir RPC ryšį, kad sąveikautumėte su blokų grandine.
[root@localhost opennode]# vi truffle.js
modulis.eksportas = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
}
}
};
6. Konsolėje įjunkite numatytąją "Truffle" blokų grandinės aplinką.
triufelių vystymasis
"Truffle Develop" prasidėjo nuo
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
Privatūs raktai:
(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
Medaus turtingas švelnus trupinys saldus skanėstas
⚠ Svarbu ⚠ : Ši mnemonika buvo sukurta
Tu pagal triufelį. Tai nėra saugu.
Įsitikinkite, kad jo nenaudojate gamyboje
7/16
blokų grandinės, kitaip rizikuojate prarasti lėšas.
triufelis (vystytis)>
Tai suteikia vietinę blokų grandinės aplinką, kurioje "Truffle" gali vykdyti sutartis, pagal numatytuosius nustatymus sugeneruojant 10 paskyrų, kurių kiekviena yra sugeneruota
Pradinis sąskaitos likutis yra 100 eterių. Taip pat galite naudoti "Ganache" teikiamą grafinę sąsają
, turite modifikuoti prievadą, prie kurio prijungta konfigūracija.
7. Vykdykite triufelių migracijos prievado diegimo sutartį naujoje konsolėje (arba triufelyje)
sukurti konsolę atlikti migruoti).
8. Išbandykite sutarties kodą su triufelių kūrimu.
SimpleStorage.deployed().then(function(instance
){grįžti
instance.get.call(); }).then(funkcija(reikšmė)
{return value.toNumber()})
// 0
SimpleStorage.deployed().then(function(instance
){grąžinti instance.set(100); });
Išvesties operacijos informacija
SimpleStorage.deployed().then(function(instance
){grįžti
instance.get.call(); }).then(funkcija(reikšmė)
{return value.toNumber()});
// 100
9. Išbandykite sutartį su triufelių testu Naudokite triufelių kūrimo testą SimpleStorage, kad sukurtumėte naują arba
Sukurkite naują failo testavimą / SimpleStorage.test.js tiesiogiai.
const SimpleStorage =
artifacts.require('Paprasta saugykla');
contract('SimpleStorage', function(accounts) {
8/16
it("turėtų tvirtinti teisingumą", funkcija(atlikta)
{
var simpleStorage =
SimpleStorage.deployed();
var instance;
simpleStorage.then(res => {
egzempliorius = res;
grąžinti instance.get()
}).then(reikšmė => {
assert.equal('0',
value.toNumber(), 'nelygu 0')
}).then(() => {
egzempliorius.rinkinys(100)
}).then(() => {
grąžinti instance.get()
}).then(reikšmė => {
assert.equal('100',
value.toNumber(), 'nelygu 100')
})
atlikta();
});
});
Naujoje konsolėje įveskite triufelių testą ./test/SimpleStorage.test.js.
10. Bandomosios sutartys su remiksu Įdėkite sutartis, sukurtas naudojant triufelį remikse, kad greitai pakeistumėte
Siūlomos sutarties diegimas ir taikymas. "Remix" suteikia kompiliavimo vykdymo aplinką sutartims ir gali būti valdoma pagal sutartį
Lentelėje galima matyti išsamią informaciją apie kiekvieną sutarties sandorį, pvz., įvesties ir išvesties parametrus, pasirašyto metodo duomenis,
operacijų maiša ir kita informacija. Palaikykite derinimą.
1. Naudokite kompiliavimo informaciją, kad pamatytumėte išsamią sutarties sudarymo informaciją. Įskaitant baitų kodą, abi
ir naudojant web3.js greitą lašelinio Ah metodo diegimą.
9/16
2. Naudokite vykdyti, kad sukurtumėte sutartį, ir konsolė galės peržiūrėti operaciją, kuria buvo sukurta sutartis.
Naudokite "Truffle Unbox" interaktyvioms sutarčių programoms kurti
Aukščiau nurodyti veiksmai sukuria sutarties aplinką, kurią galima kompiliuoti, įdiegti ir derinti naudojant pagrindinį triufelių init. Žemiau
Sukurkite naują projektą naudodami "Truffle Unbox", kuriame pateikiamas triufelių projekto šablonas
Kai kurios sutarties programos sąveikos aplinkos priklausomybės. Oficialius pasiūlymus galite peržiūrėti "Truffle Boxes"
Šablonų dėžutės. Toliau pateikiamas react šablonas.
1. Naujas projektas truf-react
MKDIR TRUF-React
10/16
CD truf-react
triufelių išpakavimas reaguoti
Išpakavimo procesas atsisiunčia ištraukimo šabloną ir atlieka tokias operacijas kaip npm diegimas.
2. Sukonfigūruokite projekto truffle.js
modulis.eksportas = {
Žr.
<http://truffleframework.com/docs/advanced/confi
guracija>
tinkinti savo triufelį
Konfigūracija!
networks: {
development: {
host: '127.0.0.1',
port: '9545',
network_id: '*' // Rungtynės
Bet koks tinklo ID
}
}
};
3. Pradėkite triufelių vystymąsi
4. SRK/App.js pakeitimas
import React, { Component } iš 'react'
importuoti SimpleStorageContract iš
'.. /build/contracts/SimpleStorage.json"
importuoti getWeb3 iš "./utils/getWeb3"
importuoti "./css/oswald.css"
importuoti "./css/open-sans.css"
importuoti "./css/pure-min.css"
11/16
importuoti "./App.css"
const sutartis = require('triufelio sutartis')
const simpleStorage =
sutartis (SimpleStorageContract)
klasė Programa išplečia komponentą {
konstruktorius (rekvizitai) {
super (rekvizitai)
this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
}
this.changeValueHandle =
this.changeValueHandle.bind(šis)
this.setHandle =
this.setHandle.bind(šis)
}
componentWillMount() {
Gaukite tinklo teikėją ir web3
pavyzdys.
Daugiau informacijos rasite utils/getWeb3
informacija.
getWeb3
.then(rezultatai => {
this.setState({
web3:
rezultatai.web3
})
Momentinė sutartis
Kai Web3 pateikė.
12/16
this.instantiateContract()
})
.catch(() => {
console.log('Klaida
rasti web3.")
})
}
instantiateContract() {
/*
* IŠMANIOSIOS SUTARTIES PAVYZDYS
*
* Paprastai šios funkcijos
turi būti kviečiami atsižvelgiant į
* Valstybės valdymo biblioteka, bet
patogumui juos įdėjau čia.
*/
šis.paprastas saugojimo rinkinys(5)
}
changeValueHandle(įvykis) {
this.setState({
inputValue:
Number(event.target.value)
})
}
setHandle() {
this.simpleStorageSet(this.state.inputValue)
}
simpleStorageSet(x) {
simpleStorage.setProvider(this.state.web3.curren
tTeikėjas)
Paskelbti tai vėlesniam laikui
13/16
galime sujungti funkcijas "SimpleStorage".
var simpleStorageInstance
Gaukite paskyras.
this.state.web3.eth.getAccounts((klaida,
sąskaitos) => {
simpleStorage.deployed().then((instance) => {
simpleStorageInstance = egzempliorius
this.setState({
address: instance.address })
Parduotuvės
nurodytą reikšmę, 5 pagal numatytuosius nustatymus.
grįžti
simpleStorageInstance.set(x, {nuo:
sąskaitos[0]})
}).then((rezultatas) => {
Gaukite vertę
iš sutarties, kad įrodytų, kad jis veikė.
grįžti
simpleStorageInstance.get.call(paskyros[0])
}).then((rezultatas) => {
Atnaujinti būseną
su rezultatu.
grįžti
this.setState({ storageValue: result.c[0] })
})
})
}
render() {
grąžinti (
<div className="Programa">
<nav
className="navbar pure-menu pure-menuhorizontal">
14/16
<a href="#" className="pure-menu-heading puremenu-link">Triufelis
Dėžutė</a>
</nav>
< pagrindinis
className="container">
<div
className="pure-g">
<div className="pure-u-1-1">
<h1>Gera eiti!</h1>
<p>Jūsų triufelių dėžutė yra sumontuota ir paruošta.</p>
<h2>Išmaniosios sutarties pavyzdys</h2>
<p>Jei jūsų sutartys buvo sudarytos ir perkeltos
sėkmingai, žemiau bus rodoma išsaugota reikšmė
5 (pagal numatytuosius nustatymus).</p>
<p>Pabandykite pakeisti eilutėje saugomą reikšmę <strong>
59</strong> iš App.js.</p>
<p>Išsaugota reikšmė yra:
{this.state.storageValue}</p>
<p>Įdiegtos sutarties adresas:
{this.state.address}</p>
</div>
<div>
<input type="number" onChange=
{this.changeValueHandle}/>
< mygtukąClick={this.setHandle}>set</button>
15/16
</div>
</div>
</main>
</div>
);
}
}
eksportuoti numatytąją programą
Pridėtas sutarčių rinkinio metodo iškvietimas. Ir parodykite sutarties adresą.
5. Atidarykite naują konsolę ir paleiskite npm run start
6. Atidarykite http://lcoalhost:3000 savo naršyklėje, kad pamatytumėte sutarties rezultatus.
7. Nustatykite saugomos sutarties vertę naudodami rinkinio ir įvesties laukelius.
8. Įveskite trufle plėtoti
//将xxx替换为address
SimpleStorage.at('xxxx').then(res => {return
res.get()})
Gaunama BigNUmber tipo grąžinama reikšmė ir nustatoma c masyvo reikšmė
saugomi duomenys.
Norėdami sąveikauti su blokų grandine, naudokite naršyklės papildinį Metamask
Nuoroda http://truffleframework.com/tutorials/pet-shop
Dalyviai pateikia dokumentus
Konkurse nurodoma, kad "Truffle" bus naudojamas kuriant išmaniąsias sutartis, o "Truffle" versija v4.1.5 atitinka solcjs versiją
v0.4.21. Kūrėjai turi pateikti "Truffle" projekto zip paketą ir susijusius projekto įvedimo dokumentus, kuriuose yra bent
Šie dalykai:
16/16
1. Pagrindinė triufelių projekto failo struktūra: sutarčių perkėlimo testas
package.json truffle.js truffle-config.js README.md // Inžinerinės dokumentacijos aprašymas
Nereikia node_modules
2. Poreikis pateikti PPT arba PDF paaiškinimą apie visą projekto produktą, įskaitant produkto fono pristatymą, produkto reikšmę,
Programėlės atsisiuntimo adresas (pasirinktinai), produkto naudojimo proceso pristatymas.
Vėlesni trečiųjų šalių kūrėjai gali įdiegti sutartines programas ir grandinės kišenes pagal būsimą "ThunderChain" gairių dokumentą
Sąveika.
Dokumentacija ir įrankiai
solidumo API
triufelių dokumentacija
"Ganache" pateikia grafinę sąsają vietinei blokų grandinės aplinkai
"Zeppelin-Solidty" yra įsipareigojusi užtikrinti saugią ir standartizuotą sutarčių sistemą
"MetaMask" teikia naršyklės papildinius naršyklėms su blokų grandinės aplinka per RPC ryšius
web3.js Ethereum kapsuliuotą JS, skirtą sąveikai su blokų grandine
Galiausiai, pdf dokumento atsisiuntimas:

Dev_Guide_zh.pdf (373.55 KB, Atsisiuntimų skaičius: 6)
 Savininkas| Paskelbta 2018-05-03 16:01:58 |
Paskelbta 2018-05-08 14:25:10 |
Išmoko, ačiū
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com