Declaração: A seguir está o documento "Guia Global de Desenvolvimento de Competição de Aplicações Blockchain Xunlei" escrito pela Xunlei Company, por que usar o documento escrito pela Xunlei Company como guia de desenvolvimento blockchain?
A Thunder é, na verdade, uma cadeia privada construída com contratos inteligentes Ethereum, a tecnologia é muito avançada e possui pesquisas aprofundadas sobre tecnologia blockchain, que têm um significado orientador para o nosso desenvolvimento blockchain.
Como diz o ditado, "tire inferências a partir de um exemplo", podemos desenvolver outros aplicativos blockchain lendo o guia de desenvolvimento de blockchain escrito pela Xunlei, graças à Xunlei.
O documento diz:
1/16 Guia de Desenvolvimento de Competição de Aplicações Blockchain Global Thunder Desenvolvimento de contrato na recomendação de linha 1. Antes de escrever contratos inteligentes, é necessário ter um certo entendimento dos fundamentos do blockchain (anexado: Ethereum Overview). 2. Aprenda a linguagem Solidity (API Solidity). 3. Aprenda a usar a estrutura trufa em combinação com o aprendizado de solidez. Use trufas para desenvolver localmente Execute contratos em um ambiente blockchain. 4. Aprenda e use zeppelin-solidty (um framework contratual padronizado dedicado à segurança) e integração de projeto Modo contrato, separar dados e contratos lógicos, controlar a segurança das permissões e considerar lógica de atualização. 5. Aprenda a interagir com contratos usando web3.js. Use o plugin Metamask e o serviço web com blockchain Interação. 6. Fórum de perguntas e respostas: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Qualquer problema que você encontrar pode ser revertido neste fórum.) Responderemos em até 3 dias úteis) Conceitos básicos Blockchain Blockchain é um sistema de computação distribuída descentralizada, cuja principal característica é a imutabilidade permanente dos dados, Não pode ser forjado e possui um alto grau de abertura, transparência e confiança. As tecnologias principais incluem o Algoritmo de Consenso Tolerante a Falhas Bizantinas (PBFT), tecnologia de criptografia, tecnologia P2P, etc. Transação Blockchain pode ser entendida como um sistema de banco de dados de transações globalmente compartilhado. Qualquer software com permissão pode lê-lo Pegue dados da rede blockchain. Quando é necessário alterar os dados na rede de blocos, um blanket deve ser iniciado Existem solicitações aceitas por nós de bloco, que são coletivamente chamadas de transações no sistema. As transações são transacionais e submetidas à blockchain, nem todas ou todas executadas. Um executivo de negociação Após a conclusão da linha, ela é salva permanentemente na blockchain e não pode ser modificada ou executada novamente. Transações são iniciadas e assinadas pela conta no sistema e, por meio da criptografia, as transações só podem ser mantidas pela chave privada 2/16 Alguém inicia isso, outros não podem modificar e forjar. Isso garante a autenticidade e a segurança da transação. Conta Existem dois tipos de contas no sistema blockchain: uma externa e a outra é a conta contratual. Conta externa de propriedade Suas próprias chaves públicas e privadas únicas, e sua conta é controlada por esse par de chaves. Contas de futuros têm seu próprio código, e a conta é criada por Controle próprio do código. A conta é identificada por um endereço, e o comprimento do endereço é o mesmo, e não há diferença entre os dois tipos de contas. O endereço da conta externa é fornecido por A chave pública é gerada, e o endereço do contrato usa o endereço a partir do qual a conta contratual foi criada e o número de transações que criaram a conta contratual (nonce) é produzido. Os contratos são estabelecidos pelo endereço oficial, e contas comuns não podem publicar contratos diretamente. A combinação do usuário Deve ser oficialmente revisado e lançado pela Xunlei. Dentro do sistema, não há diferença entre os dois tipos de contas. Cada conta possui 256bits dentro do sistema A estrutura de armazenamento chave-valor até 256 bits é chamada de armazenamento. Cada conta tem um saldo chamado O saldo, no Wei, pode ser modificado enviando uma transação com valor numérico para a conta. Contrato Um contrato é uma conta blockchain que armazena o código, e a chamada de contrato é feita enviando transações para essa conta. Quando A linguagem de programação contratada anterior e mais popular era a Solidity. Atualmente, o concurso só suporta submissão de contratos na linguagem Solidity. O contrato é dividido em duas partes: armazenamento de dados e função; os dados armazenam o estado do contrato, e a função é o contrato A interface externa realiza consultas de dados e modificação de estado chamando funções. Escreva um contrato por meio de uma linguagem de programação e obtenha o bytecode do EVM após a compilação. Ao enviar uma transação para a conta contratual, real Atual ligação para o contrato. Gás Gás é a unidade de pagamento da blockchain, e quando uma transação é criada, uma certa quantidade de gás será especificada. Senhor Se for para restringir o valor computado na transação e pagar uma taxa pela execução da transação. Durante a execução da transação, Gas Ele será consumido por uma regra estabelecida pela EVM. Preço do gás é um valor especificado pelo criador da transação e pelo número de taxas necessárias para executar a transação O valor é Gas_Price*Gás. Transação Terminada Se sobrar gás, a parte restante é devolvida à sugestão do criador usuários. Se o gás for insuficiente, a execução da transação falhará, e a transação falhará em evitar ataques de inundação para a segurança do sistema A taxa de manuseio não é devolvida. A menor unidade de preço do gás é wei, 10^18 wei = 1 grama de corrente. Solidez 3/16 Solidity é uma linguagem de programação de alto nível projetada para contratos inteligentes, rodando em EVM (Ethereum). Virtual Machine)。 A implementação do design da linguagem é influenciada por C++/Python/JavaScript. Solidity é uma linguagem fortemente tipada que suporta herança, polimorfismo, interfaces, abstração, bibliotecas, tipos de dados personalizados e muito mais Sexo. O Solidity suporta programação de instruções de assembly, e o código é compilado em bytecode e roda na EVM. Solidez é A linguagem de desenvolvimento de contratos inteligentes mais popular também é a recomendada e suportada pela Thunder Contract Platform. Notas: 1. Ethereum Virtual Machine é um ambiente virtual no Ethereum que oferece um ambiente de execução para contratos inteligentes Máquina simulada. A plataforma de competição é compatível com o EVM, mas deve cumprir as restrições de uso da plataforma oficial. 2. Os tipos de contas são divididos em contas externas (endereços comuns de contas de negociação) e contas futuras. Crie um contrato É o processo de enviar uma transação para o endereço de destino 0 da conta. 3. A competição especifica o uso da trufa (trufa v4.1.5 solidez v0.4.21) para desenvolver combinações inteligentes A plataforma verificará o bytecode de acordo com o código-fonte do documento enviado pelo participante. , Desenvolver contratos com trufa Estrutura de desenvolvimento de solidez de contratos inteligentes truffle. Ele oferece um conjunto completo de desenvolvimento, depuração e edição Tradução, implantação e testes de ambientes on-premises. Você pode usar o comando template unbox rapidamente com base em alguns templates Gerar a estrutura contratual correspondente. Instalar Trufa NPM I -g trufa [root@opennode Sandai]# Versão trufa Trufa v4.1.5 (núcleo: 4.1.5) Solidity v0.4.21 (solc-js) Início 1. Inicializar o projeto contratual com trufa 4/16 Mkdir Simples-Storage CD Simples-Storage trufa init 2. Criar um novo arquivo de contrato: Você pode usar o trufo para criar contrato Você também pode criar um novo arquivo diretamente pela linha de comando do SimpleStorage contrato/SimpleStorage.sol SimpleStorage.sol Pragma Solidity ^0.4.21; contract SimpleStorage { uint myVariable; function set(uint x) public { myVariable = x;
} função get() retornos públicos constantes (uint) { return myVariable;
}
} 3. Adicionar scripts de migração: Você pode usar o Truffle Create Migration 2_deploy_contract método de linha de comando é adicionado, e você também pode criar diretamente um novo arquivo migrações/2_deploy_contract.js 2_deploy_contract.js a execução da migração da trufa A ordem das linhas está relacionada ao nome do arquivo, então vários scripts de implantação precisam ser nomeados em ordem var SimpleStorage = artefacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy(SimpleStorage); 5/16 }; 4. Execute o contrato de compilação do truffle, e o contrato compilado fica na pasta de build. por contrato Há um arquivo json correspondente contendo bytecode, abiCode, etc., necessário para a implantação 5. Editar a truffle.js para configurar o contrato de implantação do trufa e a conexão RPC para interagir com a blockchain. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Ative o ambiente blockchain padrão do Truffle no console. Desenvolvimento de trufas A Truffle Develop começou em
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 Chaves 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 doce doce rico e esfarelado rico com mel ⚠ Importante ⚠: Este mnemônico foi criado para você por Truffle. Não é seguro. Certifique-se de não usá-lo na produção 7/16 blockchains, senão você corre o risco de perder dinheiro. A trufa (desenvolver)> Isso fornece um ambiente nativo de blockchain para o Truffle executar contratos, gerando 10 contas por padrão, cada uma gerada O saldo inicial da conta é de 100 ether. Você também pode usar a interface gráfica fornecida pela Ganache , você precisa modificar a porta à qual a configuração está conectada. 7. Executar o contrato de implantação da porta migração de truffle em um novo console (ou no truffle desenvolver console para migrar em modo de execução). 8. Teste o código contratual com revelação de trufas. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).então(função(valor) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Informações de transação de saída SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).então(função(valor) {return value.toNumber()}); // 100 9. Teste o contrato com o teste de trufa Use trufa criar teste SimpleStorage para criar um novo ou Crie um novo arquivo, teste/SimpleStorage.test.js diretamente. const SimpleStorage = artefacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("deve afirmar verdadeiro", function(done)
{ var simpleStorage = SimpleStorage.deployed(); Instância var; simpleStorage.then(res => { instance = res; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'não é igual a 0') }).then(() => { instance.set(100) }).then(() => { return instance.get() }).then(value => { assert.equal('100', value.toNumber(), 'não é igual a 100') }) feito(); }); }); No novo console, insira o teste de trufa ./test/SimpleStorage.test.js. 10. Contratos de teste com remix Contratos de put desenvolvidos usando trufa no remix para modificar rapidamente Implementação e invocação do contrato proposto. O Remix oferece um ambiente de execução de compilação para contratos e pode ser controlado pelo contrato A tabela pode ver as informações detalhadas de cada transação do contrato, como parâmetros de entrada e saída, dados do método assinado, Hash de transação e outras informações. Suporte para depuração. 1. Use o compilar detalhes para ver os detalhes da compilação do contrato. Incluindo bytecode, abi e usando web3.js rápida implantação do método Drip Ah. 9/16 2. Use run para criar um contrato, e o console pode visualizar a transação que criou o contrato. Use o Truffle Unbox para criar aplicativos interativos de contratos Os passos acima criam um ambiente contratual que pode ser compilado, implantado e depurado usando o basic truffle init. Abaixo Crie um novo projeto com o Truffle Unbox, que nos fornece um modelo de projeto trufo por dentro, Algumas dependências do ambiente de interação com aplicações contratuais. Você pode conferir as ofertas oficiais em Trufas Caixas modelo. A seguir está o modelo de react. 1. Novo projeto truf-react MKDIR TRUF-REACT 10/16 CD Truf-React trufa abrir a caixa reagir O processo unbox baixa o modelo de extração e realiza operações como instalação de npm. 2. Configurar o truffle.js do projeto module.exports = { Veja <http://truffleframework.com/docs/advanced/confi Guração> para personalizar seu Trufa Configuração!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Match qualquer ID de rede
}
} }; 3. Comece a revelar trufas 4. Emenda ao SRC/App.js importar React, { Component } de 'react' importar SimpleStorageContract de '.. /construir/contratar/SimpleStorage.json' importar getWeb3 de './utils/getWeb3' importar './css/oswald.css' importar './css/open-sans.css' importar './css/pure-min.css' 11/16 importar './App.css' contrato const = exige('truffle-contract') const simpleStorage = contrato(SimpleStorageContract) class App estende Component { constructor(props) { super(adereços) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Obtenha um provedor de rede e web3 Instância. Veja utils/getWeb3 para mais informações Informação. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instância de contrato Uma vez que o Web3 foi fornecido. 12/16 this.instantiateContract() }) .catch(() => { console.log('Erro Encontrando Web3.') })
} instanceiateContract() {
/* * EXEMPLO DE CONTRATO INTELIGENTE
* * Normalmente essas funções fariam ser chamado no contexto de um * biblioteca de gestão estadual, mas Por conveniência, coloquei eles aqui. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Número(evento.alvo.valor) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Declarando isso para depois, então 13/16 podemos encadear funções no SimpleStorage. var simpleStorageInstance Obtenha contas. this.state.web3.eth.getAccounts((erro, contas) => { simpleStorage.deployed().then(instance) => { simpleStorageInstance = instância this.setState({
address: instance.address }) Lojas a dado valor, 5 por padrão. retorno simpleStorageInstance.set(x, {from: contas[0]}) }).then((resultat) => { Obtenha o valor do contrato para provar que funcionou. retorno simpleStorageInstance.get.call(accounts[0]) }).then((resultat) => { Estado da atualização com o resultado. retorno this.setState({ storageValue: result.c[0] }) }) })
} render() { retorno ( <div className="App"> <nav className="navbar puro-menu-puro-menuhorizontal"> 14/16 <a href="#" className="pure-menu-head-chart" puremenu-link">Trufa Caixa</a> </nav> <principal className="container"> <div className="puro-g"> <div className="pure-u-1-1"> <h1>Pronto para ir!</h1> <p>Sua Caixa de Trufas está instalada e pronta.</p> <h2>Exemplo de Contrato Inteligente</h2> <p>Se seus contratos foram compilados e migrados Com sucesso, abaixo mostrará um valor armazenado de 5 (por padrão).</p> <p>Tente mudar o valor armazenado <strong>na linha 59</strong> de App.js.</p> <p>O valor armazenado é: {this.state.storageValue}</p> <p>Endereço do contrato implantado: {este.endereço.estado}</p> </div> <div> <tipo de entrada="número" onChange= {this.changeValueHandle}/> <botão onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} exportar App padrão Adicionei a chamada do método de conjunto de contratos. E mostre o endereço do contrato. 5. Abra um novo console e execute o npm run start 6. Abra o http://lcoalhost:3000 no seu navegador para ver os resultados do contrato. 7. Defina o valor do contrato armazenado Dados via as caixas de conjunto e entrada. 8. Entrar no revelador de trufles
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) O valor de retorno do tipo BigNUmber é obtido, e o valor no array c é definido stored Data. Use o plugin de navegador Metamask para interagir com a blockchain Referência http://truffleframework.com/tutorials/pet-shop Participantes enviam documentos A competição especifica o uso do Truffle para desenvolver contratos inteligentes, sendo a versão do Truffle v4.1.5 correspondente à versão solcjs v0.4.21. Os desenvolvedores precisam enviar o pacote zip do projeto Truffle e documentos de apresentação relacionados, que incluem, pelo menos, O seguinte: 16/16 1. Estrutura Básica de Arquivos do Projeto Truffle: Teste de Migração de Contratos de Construção package.json truffle.js truffle-config.js README.md // Descrição da documentação de engenharia Não é necessário node_modules 2. Necessidade de fornecer explicação em PPT ou PDF de todo o produto do projeto, incluindo introdução do contexto do produto, importância do produto, Endereço de download do aplicativo (opcional), introdução do processo de uso do produto. Desenvolvedores terceiros subsequentes poderão implementar aplicações contratuais, e bolsos Chain de acordo com o próximo documento de orientação ThunderChain Interação. Documentação e Ferramentas API de solidity Documentação de trufas O Ganache oferece uma interface gráfica para o ambiente nativo de blockchain A Zeppelin-Solidty está comprometida com um quadro contratual seguro e padronizado A MetaMask oferece plugins de navegador para navegadores com ambiente blockchain via conexões RPC web3.js JS encapsulado em Ethereum para interagir com a blockchain Por fim, o download do documento em pdf:
Dev_Guide_zh.pdf
(373.55 KB, Número de downloads: 6)
|