Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 13808|Resposta: 2

Guia de Desenvolvimento de Aplicações Blockchain

[Copiar link]
Publicado em 03/05/2018 15:55:28 | | |
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)
 Senhorio| Publicado em 03/05/2018 16:01:58 |
Publicado em 08/05/2018 14:25:10 |
Erudito, obrigado
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com