Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 13646|Antwort: 2

Leitfaden zur Entwicklung von Blockchain-Anwendungen

[Link kopieren]
Veröffentlicht am 03.05.2018 15:55:28 | | |
Aussage: Das Folgende ist das Dokument "Xunlei Global Blockchain Application Competition Development Guide", verfasst von der Xunlei Company. Warum verwenden Sie das von Xunlei Company verfasste Dokument als Blockchain-Entwicklungsleitfaden?

Thunder ist tatsächlich eine private Kette, die mit Ethereum-Smart-Contracts aufgebaut wurde, die Technologie ist sehr ausgereift, und es verfügt über tiefgehende Forschung zur Blockchain-Technologie, die eine entscheidende Bedeutung für unsere Blockchain-Entwicklung hat.

Wie das Sprichwort sagt: "Ziehe Schlussfolgerungen aus einem Beispiel", wir können weitere Blockchain-Anwendungen entwickeln, indem wir das von Xunlei verfasste Blockchain-Entwicklungsleitfaden lesen, dank Xunlei.

Das Dokument lautet:

1/16
Entwicklungsleitfaden für Thunder Global Blockchain-Anwendungswettbewerbe
Vertragsentwicklung zur Linienempfehlung
1. Bevor Sie Smart Contracts schreiben, müssen Sie ein gewisses Verständnis der Blockchain-Grundlagen haben (angehängt: Ethereum Overview).
2. Lerne die Solidity-Sprache (Solidity API).
3. Lernen Sie, das Trüffel-Framework in Kombination mit Solidity Learning zu verwenden. Verwenden Sie Trüffel lokal
Verträge in einer Blockchain-Umgebung ausführen.
4. Lernen und nutzen Sie zeppelin-solidty (ein standardisiertes Vertragsframework, das sich der Sicherheit widmet) und Designintegration
Vertragsmodus, Trennung von Daten und logischen Verträgen, Kontrolle der Berechtigungssicherheit und Berücksichtigung der Upgrade-Logik.
5. Lernen Sie, mit Verträgen web3.js zu interagieren. Verwenden Sie das Metamask-Plugin und den Webservice mit der Blockchain
Interaktion.
6. Forum Q&A: http://wanke.xunlei.com/forum.php?
mod=forumdisplay&fid=53 (Alle Probleme, die du bemerkst, können in diesem Forum rückgängig gemacht werden.)
Wir antworten Ihnen innerhalb von 3 Werktagen.)
Grundlegende Konzepte
Blockchain
Die Blockchain ist ein dezentrales, verteiltes Rechensystem, dessen Hauptmerkmal die dauerhafte Unveränderlichkeit von Daten ist,
Es kann nicht geschmiedet werden und weist ein hohes Maß an Offenheit, Transparenz und Vertrauen auf. Zu den Kerntechnologien gehören der Byzantine Fault Tolerant Consensus Algorithm (PBFT),
Verschlüsselungstechnologie, P2P-Technologie usw.
Transaktion
Blockchain kann als global geteiltes Datenbanksystem für Transaktionen verstanden werden. Jede Software mit Erlaubnis kann sie lesen
Nehmen Sie Daten aus dem Blockchain-Netzwerk. Wenn es notwendig ist, die Daten im Blocknetzwerk zu ändern, muss ein Blanket eingeleitet werden
Es gibt Anfragen, die von Blockknoten angenommen werden, die im System zusammenfassend als Transaktionen bezeichnet werden.
Transaktionen sind transaktional und werden an die Blockchain übermittelt, entweder nicht alle oder alle durchgeführt. Ein Handelsmanager
Nachdem die Zeile abgeschlossen ist, wird sie dauerhaft in der Blockchain gespeichert und kann nicht mehr geändert oder ausgeführt werden.
Transaktionen werden vom Konto im System initiiert und signiert, und durch Kryptografie können Transaktionen nur über den privaten Schlüssel gehalten werden
2/16
Jemand initiiert es, andere können es nicht modifizieren und schmieden. Dies gewährleistet die Authentizität und Sicherheit der Transaktion.
Konto
Im Blockchain-System gibt es zwei Arten von Konten, eines extern und das andere das Vertragskonto. Externes Konto im Besitz
Deine eigenen einzigartigen öffentlichen und privaten Schlüssel, und dein Konto wird von diesem Schlüsselpaar kontrolliert. Futures-Konten haben ihren eigenen Code, und das Konto wird erstellt von
Eigene Code-Kontrolle.
Das Konto wird durch eine Adresse identifiziert, die Adresslänge ist gleich, und es gibt keinen Unterschied zwischen den beiden Kontentypen. Die Adresse des externen Kontos wird bereitgestellt durch
Der öffentliche Schlüssel wird generiert, und die Vertragsadresse verwendet die Adresse, von der aus das Vertragskonto erstellt wurde, sowie die Anzahl der Transaktionen, die das Vertragskonto erstellt haben
(Nonce) wird produziert. Verträge werden über die offizielle Adresse bereitgestellt, und gewöhnliche Konten können Verträge nicht direkt veröffentlichen. Die Kombination des Anwenders
Es muss offiziell von Xunlei überprüft und veröffentlicht werden.
Innerhalb des Systems gibt es keinen Unterschied zwischen den beiden Kontentypen. Jedes Konto hat 256 Bit im System
Die Schlüsselwert-Speicherstruktur bis zu 256 Bit wird als Speicher bezeichnet. Jedes Konto hat ein Guthaben namens
Der Saldo in Wei kann geändert werden, indem eine Transaktion mit numerischem Wert an das Konto gesendet wird.
Vertrag
Ein Vertrag ist ein Blockchain-Konto, das den Code speichert, und der Vertragsaufruf erfolgt durch das Senden von Transaktionen an dieses Konto. Wenn
Die vorherige, beliebtere Vertragsprogrammiersprache war Solidity. Derzeit unterstützt der Wettbewerb nur Vertragseinreichungen in der Solidity-Sprache.
Der Vertrag ist in zwei Teile unterteilt: Datenspeicherung und Funktion, die Daten speichern den Zustand des Vertrags, und die Funktion ist der Vertrag
Die externe Schnittstelle realisiert Datenabfrage und Zustandsänderung durch Aufruf von Funktionen.
Schreibe einen Vertrag über eine Programmiersprache und erhalte den EVM-Bytecode nach der Kompilierung. Indem eine Transaktion an das Vertragskonto gesendet wird, real
Aktueller Vertragsaufruf.
Gas
Gas ist die Zahlungseinheit der Blockchain, und wenn eine Transaktion erstellt wird, wird eine bestimmte Gasmenge angegeben. Herr
Wenn es darum geht, die Berechnungsmenge der Transaktion zu begrenzen und eine Gebühr für die Ausführung der Transaktion zu zahlen. Während der Durchführung der Transaktion wurde Gas
Es wird von einer vom EVM festgelegten Regel verbraucht.
Der Gaspreis ist ein vom Transaktionsersteller und der Anzahl der Gebühren für die Ausführung der Transaktion festgelegten Wert
Die Menge ist Gas_Price*Gas. Transaktion beendet Wenn ein Gas übrig bleibt, wird der verbleibende Teil an den Vorschlag des Erstellers zurückgegeben
Nutzer. Wenn das Gas nicht ausreicht, schlägt die Ausführung der Transaktion fehl, und die Transaktion scheitert, um Überschwemmungsangriffe zur Systemsicherheit zu verhindern
Die Bearbeitungsgebühr wird nicht zurückerstattet. Die kleinste Einheit des Gaspreises ist Wei, 10^18 wei = 1 Kettengramm.
Solidität
3/16
Solidity ist eine hochrangige Programmiersprache, die für Smart Contracts entwickelt wurde und auf EVM (Ethereum) läuft.
Virtual Machine)。 Die Implementierung des Sprachdesigns ist von C++/Python/JavaScript beeinflusst.
Solidity ist eine stark typisierte Sprache, die Vererbung, Polymorphismus, Schnittstellen, Abstraktion, Bibliotheken, benutzerdefinierte Datentypen und mehr unterstützt
Sex. Solidity unterstützt die Programmierung von Assemblerbefehlen, und der Code wird zu Bytecode kompiliert und läuft auf dem EVM. Solidität ist
Die beliebteste Smart-Contract-Entwicklungssprache ist auch die Sprache, die von der Thunder Contract Platform empfohlen und unterstützt wird.
Notizen:
1. Die Ethereum Virtual Machine ist eine virtuelle Umgebung auf Ethereum, die eine Laufzeitumgebung für Smart Contracts bereitstellt
Simulierte Maschine. Die Wettbewerbsplattform ist mit EVM kompatibel, muss jedoch die Nutzungsbeschränkungen der offiziellen Plattform einhalten.
2. Kontotypen sind in externe Konten (gewöhnliche Handelskontoadressen) und Terminkonten unterteilt. Erstellen Sie einen Vertrag
Es ist der Prozess, eine Transaktion an die Zielkontoadresse 0 zu senden.
3. Der Wettbewerb legt die Verwendung von Trüffel (Trüffel v4.1.5 Solidity v0.4.21) fest, um intelligente Kombinationen zu entwickeln
Die Plattform überprüft den Bytecode gemäß dem Quellcode des vom Teilnehmer eingereichten Dokuments. ,
Verträge mit Trüffel entwickeln
Smart-Contract-Solidity-Entwicklungsframework-Trüffel. Es bietet ein vollständiges Set an Entwicklung, Debugging und Bearbeitung
Übersetzung, Bereitstellung und Testen von On-Premises-Umgebungen. Du kannst den Template-Befehl Unbox schnell verwenden, basierend auf einigen Vorlagen.
Erstellen Sie die entsprechende Vertragsstruktur.
Trüffel installieren
NPM i -g Trüffel
[root@opennode Sandai]# Trüffel-Version
Truffle v4.1.5 (Kern: 4.1.5)
Solidity v0.4.21 (solc-js)
Beginnen
1. Initialisieren Sie das Vertragsprojekt mit Trüffel
4/16
mkdir simple-storage
CD-Einfachspeicher
Trüffel init
2. Erstelle eine neue Vertragsdatei: Du kannst Trüffel verwenden, um einen Vertrag zu erstellen
Man kann auch eine neue Datei direkt über die SimpleStorage-Kommandozeile erstellen
contract/SimpleStorage.sol
SimpleStorage.sol
pragma-Solidität ^0.4.21;
contract SimpleStorage {
uint myVariable;
Function Set(uint x) public {
myVariable = x;
}
Funktion get() konstante öffentliche Rückgaben
(uint) {
return myVariable;
}
}
3. Migrierungsskripte hinzufügen: Du kannst Trüffel zur Erstellung von Migration verwenden
2_deploy_contract Kommandozeilen-Methode hinzugefügt wird, kann man auch direkt eine neue Datei erstellen
Migrationen/2_deploy_contract.js
2_deploy_contract.js; die Ausführung der Trüffelmigration
Die Zeilenreihenfolge steht im Zusammenhang mit dem Dateinamen, daher müssen mehrere Deployment-Skripte in der richtigen Reihenfolge benannt werden
var SimpleStorage =
artifacts.require("SimpleStorage");
module.exports = function(deployer) {
deployer.deploy(SimpleStorage);
5/16
};
4. Führe den Trüffel-Kompile-Vertrag aus, und der kompilierte Vertrag befindet sich im Build-Ordner. pro Vertrag
Es gibt eine entsprechende JSON-Datei mit Bytecode, abiCode usw., die für die Bereitstellung erforderlich ist
5. Bearbeiten Sie die truffle.js, um den Trüffel-Deployment-Vertrag und die RPC-Verbindung einzurichten, um mit der Blockchain zu interagieren.
[root@localhost Opennode]# vi truffle.js
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
}
}
};
6. Aktivieren Sie die Standard-Blockchain-Umgebung von Truffle auf der Konsole.
Trüffelentwicklung
Trüffelentwicklung begann bei
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
Private Schlüssel:
(0)
c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e
4a9ec0a0f44dc0d3
(1)
ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505
3c36d94e974d162f
(2)
0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8
AD91193c05875EF1
(3)
c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8
5da83b71f772aa6c
(4)
388c684f0ba1ef5017716adb5d21a053ea8e90277d086833
7519f97bede61418
(5)
659cbb0e2411a44db63778987b1e22153c086a95eb6b18b18bd
f89de078917abc63
(6)
82d052c865f5763aad42add438569276c00d3d88a2d062d3
6b2bae914d58b8c8
(7)
aa3680d5d48a8283413f7a108367c7299ca73f553735860a
87b08f39395618b7
(8)
0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07
700d8669ff12b7c4
(9)
8d5366123cb560BB606379f90a0BFD4769eec0557F1B362
dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream
Honigreiche, glatte, smulrige süße Leckerei
⚠ Wichtig ⚠: Diese Eselsbrücke wurde erstellt für
du von Truffle. Es ist nicht sicher.
Stellen Sie sicher, dass Sie es nicht in der Produktion verwenden
7/16
Blockchains, sonst riskieren Sie, Geld zu verlieren.
Trüffel(entwickeln)>
Dies bietet eine native Blockchain-Umgebung, in der Truffle Verträge ausführen kann, wodurch standardmäßig 10 Konten generiert werden, von denen jedes erstellt wird
Der anfängliche Kontostand beträgt 100 Ether. Du kannst auch die von Ganache bereitgestellte grafische Oberfläche nutzen
, du musst den Port ändern, an den die Konfiguration angeschlossen ist.
7. Führe den Truffle Migrate Port Deployment-Vertrag in einer neuen Konsole aus (oder in Truffle)
Konsole entwickeln, um Migration durchzuführen).
8. Testen Sie den Vertragscode mit Trüffelentwicklung.
SimpleStorage.deployed().then(function(instance
){return
instance.get.call(); }).dann(Funktion(Wert)
{return value.toNumber()})
// 0
SimpleStorage.deployed().then(function(instance
){return instance.set(100); });
Ausgabetransaktionsinformationen
SimpleStorage.deployed().then(function(instance
){return
instance.get.call(); }).dann(Funktion(Wert)
{return value.toNumber()});
// 100
9. Test den Vertrag mit Trüffeltest Verwenden Sie Trüffel erstellen Test SimpleStorage, um ein neues oder
Erstelle direkt eine neue Datei, Test/SimpleStorage.test.js.
const SimpleStorage =
artifacts.require('SimpleStorage');
contract('SimpleStorage', function(accounts) {
8/16
es("sollte wahr behaupten", Funktion (erledigt)
{
var simpleStorage =
SimpleStorage.deployed();
War Instance;
simpleStorage.then(res => {
Instanz = Res;
return instance.get()
}).dann(Wert => {
assert.equal('0',
value.toNumber(), 'nicht gleich 0')
}).dann(() => {
instance.set(100)
}).dann(() => {
return instance.get()
}).dann(Wert => {
assert.equal('100',
value.toNumber(), 'nicht gleich 100')
})
done();
});
});
In der neuen Konsole kommt Trüffeltest ./test/SimpleStorage.test.js ins Spiel.
10. Testverträge mit Remix Put-Verträge, die mit Trüffel im Remix entwickelt wurden, um schnell zu modifizieren
Bereitstellung und Inanspruchnahme des vorgeschlagenen Vertrags. Remix bietet eine Compilation-Laufzeitumgebung für Verträge und kann vom Vertrag gesteuert werden
Die Tabelle kann detaillierte Informationen zu jeder Transaktion des Vertrags sehen, wie Eingabe- und Ausgabeparameter, signierte Methodendaten,
Transaktionshash und andere Informationen. Support für Debugging.
1. Verwenden Sie Compile Detail, um die Vertragszusammenstellungsdetails einzusehen. Einschließlich Bytecode, abi
und web3.js schnelle Anwendung der Drip-Ah-Methode.
9/16
2. Verwenden Sie Run, um einen Vertrag zu erstellen, und die Konsole kann die Transaktion anzeigen, die den Vertrag erstellt hat.
Verwenden Sie Truffle Unbox, um interaktive Vertrags-Apps zu erstellen
Die obigen Schritte erstellen eine Vertragsumgebung, die mit grundlegendem Trüffel-Init kompiliert, bereitgestellt und debuggt werden kann. Unten
Erstelle ein neues Projekt mit Truffle Unbox, das uns eine Trüffelprojekt-Vorlage bietet, im Inneren
Einige Abhängigkeiten der Vertragsanwendungs-Interaktionsumgebung. Du kannst dir die offiziellen Angebote in Truffle Boxes ansehen
Template-Boxen. Das Folgende ist die React-Vorlage.
1. Neues Projekt truf-react
mkdir truf-react
10/16
cd truf-react
Trüffel-Unbox reagieren
Der Unbox-Prozess lädt die Extraktionsvorlage herunter und führt Operationen wie die npm-Installation durch.
2. Konfigurieren Sie die truffle.js des Projekts
module.exports = {
Siehe
<http://truffleframework.com/docs/advanced/confi
Guration>
um Ihren Trüffel individuell zu gestalten
Konfiguration!
networks: {
development: {
host: '127.0.0.1',
port: '9545',
network_id: '*' // Match
Jede Netzwerk-ID
}
}
};
3. Starte eine Trüffelentwicklung
4. Änderung des SRC/App.js
import React, { Component } aus 'react'
importiere SimpleStorageContract aus
'.. /bauen/kontraktieren/SimpleStorage.json'
importiere getWeb3 aus './utils/getWeb3'
Importiere './CSS/oswald.css'
Import './CSS/open-sans.css'
Import './CSS/pure-min.css'
11/16
import './App.css'
const contract = erfordern('Trüffel-Vertrag')
const simpleStorage =
Vertrag(SimpleStorageContract)
class App erweitert Component {
Konstrukteur(Props) {
super(Requisiten)
this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
}
this.changeValueHandle =
this.changeValueHandle.bind(this)
this.setHandle =
this.setHandle.bind(this)
}
componentWillMount() {
Netzwerkanbieter und Web3 erhalten
Instanz.
Siehe utils/getWeb3 für mehr Informationen
Info.
getWeb3
.then(results => {
this.setState({
web3:
results.web3
})
Instanzierter Vertrag
Sobald Web3 bereitgestellt hat.
12/16
this.instanziateContract()
})
.catch(() => {
console.log('Fehler
Web3 finden.')
})
}
instantiateContract() {
/*
* BEISPIEL FÜR SMARTE VERTRÄGE
*
* Normalerweise würden diese Funktionen
im Kontext von einem
* Staatliche Verwaltungsbibliothek, aber
Der Bequemlichkeit halber habe ich sie hier platziert.
*/
this.simpleStorageSet(5)
}
changeValueHandle(event) {
this.setState({
inputValue:
Nummer(event.target.value)
})
}
setHandle() {
this.simpleStorageSet(this.state.inputValue)
}
simpleStorageSet(x) {
simpleStorage.setProvider(this.state.web3.curren
tProvider)
Ich deklariere das für später, also
13/16
wir können Funktionen auf SimpleStorage verketten.
var simpleStorageInstance
Erstellen Sie Konten.
this.state.web3.eth.getAccounts((fehler,
Konten) => {
simpleStorage.deployed().then(instance) => {
simpleStorageInstance = Instanz
this.setState({
address: instance.address })
Lager ein
Der Wert wird standardmäßig 5 gegeben.
Rückgabe
simpleStorageInstance.set(x, {from:
Konten[0]})
}).dann((Ergebnis) => {
Erfassen Sie den Wert
aus dem Vertrag, um zu beweisen, dass es funktioniert hat.
Rückgabe
simpleStorageInstance.get.call(accounts[0])
}).dann((Ergebnis) => {
Aktualisieren des Zustands
mit dem Ergebnis.
Rückgabe
this.setState({ storageValue: result.c[0] })
})
})
}
render() {
Rückkehr (
<div className="App">
<nav
className="navbar pure-menu pure-menuhorizontal">
14/16
<a href="#" className="pure-menu-heading puremenu-link">Truffle
Box</a>
</nav>
<main
className="container">
<Div
className="pure-g">
<div className="pure-u-1-1">
<h1>Bereit!</h1>
<p>Ihre Trüffelbox ist installiert und bereit.</p>
<h2>Beispiel Smart Contract</h2>
<p>Wenn deine Verträge zusammengestellt und migriert wurden
erfolgreich zeigt unten einen gespeicherten Wert von
5 (standardmäßig).</p>
<p>Versuche, den im Internet gespeicherten Wert zu ändern.<strong>
59</strong> von App.js.</p>
<p>Der gespeicherte Wert ist:
{this.state.storageValue}</p>
<p>Eingesetzte Vertragsadresse:
{this.state.address}</p>
</div>
<div>
<Eingabetyp="nummer" aufÄnderung=
{this.changeValueHandle}/>
<button onClick={this.setHandle}>set</button>
15/16
</div>
</div>
</main>
</div>
);
}
}
Export-Standard-App
Ich habe den Aufruf der Contract Set Methode hinzugefügt. Und zeigen Sie die Adresse des Vertrags.
5. Eine neue Konsole öffnen und npm run start
6. Öffnen Sie die http://lcoalhost:3000 in Ihrem Browser, um die Ergebnisse des Vertrags zu sehen.
7. Setzen Sie den Wert des gespeicherten Vertrags über die Set- und Eingabeboxen fest.
8. Tritt in trufle develop ein
//将xxx替换为address
SimpleStorage.at('xxxx').then(res => {return
res.get()})
Der Rückgabewert des BigNUmber-Typs wird erhalten, und der Wert im c-Array wird gesetzt
gespeicherte Daten.
Verwenden Sie das Browser-Plugin Metamask, um mit der Blockchain zu interagieren
Referenz http://truffleframework.com/tutorials/pet-shop
Teilnehmer reichen Dokumente ein
Der Wettbewerb spezifiziert die Verwendung von Truffle zur Entwicklung von Smart Contracts, wobei die Truffle-Version v4.1.5 der solcjs-Version entspricht
v0.4.21. Entwickler müssen das Truffle-Projekt-Zip-Paket und zugehörige Projekteinführungsdokumente einreichen, die mindestens
Folgendes:
16/16
1. Truffle Project Grunddateistruktur: Build Contracts Migrations Test
package.json truffle.js truffle-config.js README.md // Beschreibung der technischen Dokumentation
Keine node_modules erforderlich
2. Es muss eine PPT- oder PDF-Erklärung des gesamten Projektprodukts bereitgestellt werden, einschließlich Produkthintergrund, Produktbedeutung,
App-Download-Adresse (optional), Einführung des Produktnutzungsprozesses.
Nachfolgende Drittentwickler können gemäß dem kommenden ThunderChain-Leitdokument Vertragsanwendungen und Chain-Pockets implementieren
Interaktion.
Dokumentation & Werkzeuge
Soliditäts-API
Trüffeldokumentation
Ganache bietet eine grafische Oberfläche für die native Blockchain-Umgebung
Zeppelin-Solidty verpflichtet sich zu einem sicheren und standardisierten Vertragsrahmen
MetaMask stellt Browser-Plugins für Browser mit einer Blockchain-Umgebung über RPC-Verbindungen bereit
web3.js von Ethereum gekapseltes JS zur Interaktion mit der Blockchain
Abschließend der PDF-Dokument-Download:

Dev_Guide_zh.pdf (373.55 KB, Anzahl der Downloads: 6)
 Vermieter| Veröffentlicht am 03.05.2018 16:01:58 |
Veröffentlicht am 08.05.2018 14:25:10 |
Gelernt, danke
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com