Declaración: A continuación se presenta el documento "Guía Global de Desarrollo de la Competencia de Aplicaciones Blockchain Xunlei" escrito por Xunlei Company, ¿por qué usar el documento escrito por Xunlei Company como guía de desarrollo blockchain?
Thunder es en realidad una cadena privada construida con contratos inteligentes de Ethereum, la tecnología está muy madura y cuenta con una investigación profunda sobre la tecnología blockchain, que tiene una importancia guía para nuestro desarrollo blockchain.
Como dice el refrán, "saca inferencias de un ejemplo", podemos desarrollar otras aplicaciones blockchain leyendo el documento de desarrollo blockchain escrito por Xunlei, gracias a Xunlei.
El documento dice:
1/16 Guía global de desarrollo de competencias de aplicaciones blockchain Thunder Desarrollo del contrato en la recomendación de la línea 1. Antes de redactar contratos inteligentes, necesitas tener un cierto conocimiento de los fundamentos de blockchain (adjunto: Resumen de Ethereum). 2. Aprender el lenguaje Solidity (API Solidity). 3. Aprende a usar el marco de la trufa en combinación con el aprendizaje de solidez. Utiliza la trufa para desarrollar localmente Ejecuta contratos en un entorno blockchain. 4. Aprender y usar zeppelin-solidty (un marco contractual estandarizado dedicado a la seguridad) y diseñar integración Modo contrato, separar los contratos de datos y lógicos, controlar la seguridad de permisos y considerar la lógica de actualización. 5. Aprende a interactuar con contratos usando web3.js. Utiliza el plugin Metamask y el servicio web con blockchain Interacción. 6. Foro de preguntas y respuestas: ¿http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Cualquier problema que encuentres puede revertirse en este foro.) Te responderemos en un plazo de 3 días laborables) Conceptos básicos Blockchain Blockchain es un sistema de computación distribuida descentralizada, cuya característica principal es la inmutabilidad permanente de los datos, No puede ser falsificada y tiene un alto grado de apertura, transparencia y confianza. Las tecnologías principales incluyen el Algoritmo de Consenso Tolerante a Fallas Bizantinas (PBFT), tecnología de cifrado, tecnología P2P, etc. Transacción La blockchain puede entenderse como un sistema de base de datos de transacciones compartida globalmente. Cualquier software con permiso puede leerlo Tomemos datos de la red blockchain. Cuando es necesario modificar los datos en la red de bloques, debe iniciarse una manta Existen solicitudes aceptadas por nodos de bloque, que colectivamente se denominan transacciones en el sistema. Las transacciones son transaccionales y se envían a la blockchain, ya sea que no se ejecuten todas o todas. Un ejecutivo comercial Una vez completada la fila, se guarda permanentemente en la blockchain y no puede ser modificada ni ejecutada de nuevo. Las transacciones se inician y firman por la cuenta en el sistema, y mediante criptografía, las transacciones solo pueden mantenerse con la clave privada 2/16 Alguien lo inicia, otros no pueden modificar ni falsificar. Esto garantiza la autenticidad y seguridad de la transacción. Cuenta Existen dos tipos de cuentas en el sistema blockchain: una es externa y la otra es la cuenta de contrato. Cuenta externa propiedad Tus propias claves públicas y privadas únicas, y tu cuenta está controlada por este par de claves. Las cuentas de futuros tienen su propio código, y la cuenta se crea por Control propio del código. La cuenta se identifica por una dirección, y la longitud de la dirección es la misma, y no hay diferencia entre los dos tipos de cuentas. La dirección de la cuenta externa es proporcionada por Se genera la clave pública, y la dirección del contrato utiliza la dirección desde la que se creó la cuenta del contrato y el número de transacciones que crearon la cuenta del contrato (nonce). Los contratos se establecen mediante la dirección oficial, y las cuentas ordinarias no pueden publicar directamente los contratos. La combinación del usuario Debe ser revisado oficialmente y publicado por Xunlei. Dentro del sistema, no hay diferencia entre los dos tipos de cuentas. Cada cuenta tiene 256bits dentro del sistema La estructura de almacenamiento clave-valor hasta 256 bits se denomina almacenamiento. Cada cuenta tiene un saldo llamado El saldo, en Wei, puede modificarse enviando una transacción con un valor numérico a la cuenta. Contrato Un contrato es una cuenta blockchain que almacena el código, y la llamada al contrato se realiza enviando transacciones a esta cuenta. Cuando El lenguaje de programación por contrato anterior y más popular era Solidity. Actualmente, el concurso solo admite la presentación de contratos en lenguaje Solidity. El contrato se divide en dos partes: almacenamiento y función de datos; los datos almacenan el estado del contrato, y la función es el contrato La interfaz externa realiza consultas de datos y modificaciones de estado llamando a funciones. Escribe un contrato a través de un lenguaje de programación y obtén el bytecode de la EVM después de compilarlo. Al enviar una transacción a la cuenta contractual, real Llamada actual para el contrato. Gas El gas es la unidad de pago de la blockchain, y cuando se crea una transacción, se especifica una cierta cantidad de gas. Señor Si es para limitar la cantidad de cálculo sobre la transacción y pagar una comisión por la ejecución de la misma. Durante la ejecución de la transacción, Gas Será consumido por una regla establecida por la EVM. El precio del gas es un valor especificado por el creador de la transacción y el número de comisiones requeridas para ejecutar la transacción La cantidad es Gas_Price*Gas. Fin de la transacción Si queda gas, la parte restante se devuelve a la sugerencia del creador usuarios. Si el gas es insuficiente, la ejecución de la transacción fallará y la transacción no evitará ataques por inundación para la seguridad del sistema La tarifa de manipulación no se devuelve. La unidad más pequeña de precio de la gasolina es wei, 10^18 wei = 1 gramo de cadena. Solidez 3/16 Solidity es un lenguaje de programación de alto nivel diseñado para contratos inteligentes, que funciona en EVM (Ethereum). Virtual Machine)。 La implementación del diseño del lenguaje está influida por C++/Python/JavaScript. Solidity es un lenguaje fuertemente tipado que soporta herencia, polimorfismo, interfaces, abstracción, bibliotecas, tipos de datos personalizados y más Sexo. Solidity soporta programación de instrucciones ensambladoras, y el código se compila en bytecode y se ejecuta en la EVM. La solidez es El lenguaje de desarrollo de contratos inteligentes más popular es también el recomendado y soportado por la Thunder Contract Platform. Notas: 1. Ethereum Virtual Machine es un entorno virtual en Ethereum que proporciona un entorno de ejecución para contratos inteligentes Máquina simulada. La plataforma de competición es compatible con EVM, pero debe cumplir con las restricciones de uso de la plataforma oficial. 2. Los tipos de cuentas se dividen en cuentas externas (direcciones ordinarias de cuentas de trading) y cuentas de futuros. Crea un contrato Es el proceso de enviar una transacción a la dirección de la cuenta de destino 0. 3. El concurso especifica el uso de trufa (trufa v4.1.5 solidez v0.4.21) para desarrollar combinaciones inteligentes La plataforma verificará el bytecode según el código fuente del documento enviado por el participante. , Desarrollar contratos con trufa Marco de desarrollo de solidez de contratos inteligentes Truffle. Ofrece un conjunto completo de desarrollo, depuración y edición Traducción, despliegue y pruebas de entornos on-premise. Puedes usar el comando de desacuadrón de plantilla rápidamente basándote en algunas plantillas Genera la estructura contractual correspondiente. Instalar Truffle NPM I -g trufa [root@opennode sandai]# Versión trufa Trufa v4.1.5 (núcleo: 4.1.5) Solidity v0.4.21 (solc-js) Comienzo 1. Inicializar el proyecto contratado con trufa 4/16 Almacenamiento simple de MKDIR Almacenamiento simple de CD Trufa init 2. Crear un nuevo archivo de contrato: Puedes usar Truffle para crear el contrato También puedes crear un archivo nuevo directamente desde la línea de comandos de SimpleStorage contract/SimpleStorage.sol SimpleStorage.sol Solidez de Pragma ^0.4.21; contract SimpleStorage { uint myVariable; function set(uint x) public { miVariable = x;
} función get() rendimientos públicos constantes (uint) { return myVariable;
}
} 3. Añadir scripts de migración: Puedes usar Truffle Create Migration 2_deploy_contract método de línea de comandos se añade y también puedes crear directamente un archivo nuevo migraciones/2_deploy_contract.js 2_deploy_contract.js la ejecución de la migración de trufas El orden de la línea está relacionado con el nombre del archivo, por lo que es necesario nombrar varios scripts de despliegue en orden var SimpleStorage = artefacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy (SimpleStorage); 5/16 }; 4. Ejecuta el contrato de compilación de truffle, y el contrato compilado está en la carpeta de compilación. por contrato Existe un archivo json correspondiente que contiene bytecode, abiCode, etc., necesario para el despliegue 5. Editar el truffle.js para configurar el contrato de despliegue de trufa y la conexión RPC para interactuar con la blockchain. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Activa el entorno blockchain predeterminado de Truffle en la consola. Revelación de la trufa Truffle Develop comenzó en
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 Llaves privadas: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) AE6AE8e5CCBFB04590405997EE2D52D2B330726137B87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c6736790f1b8 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 dulce dulce de crumble rico en miel ⚠ Importante ⚠: Este mnemónico fue creado para tú por Truffle. No es seguro. Asegúrate de no usarlo en producción 7/16 blockchains, o arriesgas perder fondos. Trufa (desarrollar)> Esto proporciona un entorno blockchain nativo para que Truffle ejecute contratos, generando 10 cuentas por defecto, cada una de las cuales se genera El saldo inicial de la cuenta es de 100 ether. También puedes usar la interfaz gráfica proporcionada por Ganache , necesitas modificar el puerto al que está conectada la configuración. 7. Ejecutar el contrato de despliegue del puerto de migración de truffle en una nueva consola (o en truffle desarrolla la consola para realizar migración). 8. Prueba el código del contrato con revelado de trufa. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).entonces(función(valor) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Información de la transacción de salida SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).entonces(función(valor) {return value.toNumber()}); // 100 9. Prueba el contrato con la prueba de trufa Usa trufa para crear la prueba SimpleStorage para crear una nueva o Crea un nuevo archivo/SimpleStorage.test.js directamente. const SimpleStorage = artefacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("debería afirmar verdadero", función(done)
{ var simpleStorage = SimpleStorage.deployed(); instancia var; simpleStorage.then(res => { instancia = res; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'no es igual a 0') }).then(() => { instance.set(100) }).then(() => { return instance.get() }).then(value => { Assert.equal('100', value.toNumber(), 'no es igual a 100') }) hecho(); }); }); En la nueva consola, introduce la prueba de trufa ./test/SimpleStorage.test.js. 10. Contratos de prueba con remix Contratos de put desarrollados usando trufa en remix para modificar rápidamente Despliegue e invocación del contrato propuesto. Remix proporciona un entorno de compilación en tiempo de ejecución para contratos y puede ser controlado por el contrato La tabla puede ver la información detallada de cada transacción del contrato, como parámetros de entrada y salida, datos de métodos con signos, Hash de transacciones y otra información. Soporte para depuración. 1. Utiliza el detalle de compilación para ver los detalles de la compilación del contrato. Incluyendo bytecode, abi y usando web3.js despliegue rápido del método Goteo Ah. 9/16 2. Usar ejecutar para crear un contrato, y la consola podrá ver la transacción que creó el contrato. Utiliza Truffle Unbox para crear aplicaciones de contratos interactivas Los pasos anteriores crean un entorno contractual que puede compilarse, desplegarse y depurarse usando basic truffle init. Abajo Crea un nuevo proyecto con Truffle Unbox, que nos proporciona una plantilla de proyecto de trufa en el interior Algunas dependencias del entorno de interacción con aplicaciones de contrato. Puedes consultar las ofertas oficiales en Trufa Cuadros de plantilla. A continuación se muestra la plantilla de React. 1. Nuevo proyecto truf-react MKDIR Truf-React 10/16 CD Truf-React Trufa Unbox React El proceso de unbox descarga la plantilla de extracción y realiza operaciones como la instalación de npm. 2. Configurar el truffle.js del proyecto module.exports = { Véase <http://truffleframework.com/docs/advanced/confi Guración> para personalizar tu Trufa ¡Configuración!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Match Cualquier ID de red
}
} }; 3. Inicia un desarrollo de trufa 4. Enmienda al SRC/App.js importar React, { Componente } de 'react' importar SimpleStorageContract desde '.. /construye/contrata/SimpleStorage.json' importar getWeb3 desde './utils/getWeb3' importar './css/oswald.css' importar './css/open-sans.css' importar './css/pure-min.css' 11/16 importar './App.css' contrato const = requerir('contrato truffle') const simpleStorage = contract(SimpleStorageContract) class App extends Component { constructor(props) { super(utilería) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Obtén proveedor de red y web3 instancia. Consulta utils/getWeb3 para más información información. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instanciar contrato Una vez que Web3 se proporcionó. 12/16 this.instantiateContract() }) .catch(() => { console.log('Error Encontrando Web3.') })
} instanceiateContract() {
/* * EJEMPLO DE CONTRATO INTELIGENTE
* * Normalmente estas funciones se llama en el contexto de un * biblioteca de gestión estatal, pero Por comodidad, los he colocado aquí. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Número(evento.objetivo.valor) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Declaro esto para más adelante, así que 13/16 podemos encadenar funciones en SimpleStorage. var simpleStorageInstance Consigue cuentas. this.state.web3.eth.getAccounts((error, cuentas) => { simpleStorage.deployed().then(instance) => { simpleStorageInstance = instancia this.setState({
address: instance.address }) Almacenes a dado valor, 5 por defecto. devolución simpleStorageInstance.set(x, {from: cuentas[0]}) }).then((resulta) => { Obtén el valor del contrato para demostrar que funcionó. devolución simpleStorageInstance.get.call(accounts[0]) }).then((resulta) => { Estado de actualización con el resultado. devolución this.setState({ storageValue: result.c[0] }) }) })
} render() { regreso ( <div className="App"> < navegación className="navbar menú puro-menú purohorizontal"> 14/16 <a href="#" className="pure-menu-head-link">Trufa Caja</a> </nav> <principal claseNombre="contenedor"> < NombreClase="puro-g"> <div className="pure-u-1-1"> <h1>¡Listo para empezar!</h1> <p>Tu Trufa Box está instalada y lista.</p> <h2>Ejemplo de contrato inteligente</h2> <p>Si tus contratos se compilaron y migraron Con éxito, a continuación se mostrará un valor almacenado de 5 (por defecto).</p> <p>Prueba a cambiar el valor almacenado en <strong>línea 59</strong> de App.js.</p> <p>El valor almacenado es: {this.state.storageValue}</p> <p>Dirección del contrato desplegado: {este.dirección.estado}</p> </div> <div> <tipo de entrada="número" onChange= {this.changeValueHandle}/> <botón onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} exportar aplicación por defecto Se añadió la llamada del método de conjunto de contratos. Y muestra la dirección del contrato. 5. Abrir una nueva consola y ejecutar npm run start 6. Abre la http://lcoalhost:3000 en tu navegador para ver los resultados del contrato. 7. Establecer el valor del contrato almacenado Datos mediante las cajas de conjunto y entrada. 8. Entrar en el desarrollo de trufles
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Se obtiene el valor de retorno del tipo BigNUmber, y el valor en el array c se establece Datos almacenados. Utiliza el plugin de navegador Metamask para interactuar con la blockchain Referencia http://truffleframework.com/tutorials/pet-shop Los participantes presentan documentos El concurso especifica el uso de Truffle para desarrollar contratos inteligentes, siendo la versión v4.1.5 de Truffle correspondiente a la versión solcjs v0.4.21. Los desarrolladores deben enviar el paquete zip del proyecto Truffle y los documentos de presentación relacionados, que incluyen, al menos, Lo siguiente: 16/16 1. Estructura básica de archivos del proyecto Truffle: Prueba de migración de contratos de construcción package.json truffle.js truffle-config.js README.md // Descripción de la documentación de ingeniería No se requiere node_modules 2. Necesidad de proporcionar una explicación en PPT o PDF de todo el producto del proyecto, incluyendo la introducción del producto y su importancia, Dirección de descarga de la app (opcional), introducción del proceso de uso del producto. Los desarrolladores terceros posteriores podrán implementar aplicaciones contractuales y bolsas de cadena según el próximo documento de orientación de ThunderChain Interacción. Documentación y herramientas API de solididad Documentación de trufa Ganache proporciona una interfaz gráfica para el entorno blockchain nativo Zeppelin-Solidty está comprometida con un marco contractual seguro y estandarizado MetaMask ofrece plugins para navegadores con un entorno blockchain mediante conexiones RPC web3.js JS encapsulado en Ethereum para interactuar con la blockchain Por último, el documento pdf para descargar:
Dev_Guide_zh.pdf
(373.55 KB, Número de descargas: 6)
|