O Ethereum agora é uma das plataformas mais populares para a criação de aplicativos descentralizados, que estão sendo desenvolvidos ativamente. Uma das inovações do Zeppelin que tentaremos hoje com nossas próprias mãos. E para quem está no "tanque", a Zeppelin é uma empresa que desenvolve e verifica a segurança de contratos inteligentes. A biblioteca de contratos inteligentes do OpenZeppelin é o produto mais conhecido.
Verificou-se que as ferramentas de desenvolvimento do Solidity ainda estão em desenvolvimento, às vezes não permitindo que os desenvolvedores usem todo o poder da tecnologia de contrato inteligente. Por exemplo, as "bibliotecas padrão" são uma limitação, pois cada vez que um código existente é recarregado na rede, o que leva a um aumento no custo de "implantação" do código e o número de erros em potencial. Tudo isso leva a limitações significativas na criação de aplicativos descentralizados grandes e multifuncionais.
O que é o zeppelin OS?

O Zeppelin OS é uma plataforma de código aberto que consiste em ferramentas e serviços sobre EVM, projetada para desenvolver e gerenciar aplicativos descentralizados.
A equipe do Zeppelin identificou os quatro componentes mais importantes, alguns dos quais já estão implementados e disponíveis para uso.
- O Zeppelin OS Kernel é uma plataforma “central” atualizada e orientada pela comunidade. Consiste em um conjunto de bibliotecas no blockchain que os desenvolvedores podem conectar aos seus projetos. A Pioneer foi o OpenZeppelin, que já está disponível para uso.
- O Zeppelin OS Scheduler permitirá que os contratos solicitem execução assíncrona de uma função e também permite que qualquer participante pague os custos do gás, recebendo uma recompensa por isso.
- O Zeppelin OS Marketplace é um componente importante da interação entre contratos e aplicativos, um tipo de App Store / Google Play para o blockchain. Permite usar outros serviços para criar aplicativos mais complexos.
- Ferramentas off-chain do Zeppelin OS - um conjunto de ferramentas para trabalhar e analisar aplicativos descentralizados.
Hora de tentar você mesmo!
Eu realmente queria começar a trabalhar com o Zeppelin OS, escrever o primeiro contrato e atualizá-lo. Verifique se tudo está realmente certo e se os desenvolvedores enganaram.
Portanto, deixando o dispositivo do armazenamento e proxy atualizados para artigos futuros, passaremos para a funcionalidade já implementada.
Toda a documentação do Zeppelin OS pode ser visualizada aqui . Primeiro você precisa instalar o zos:
$ npm install --global zos
Agora crie o diretório do projeto e tudo o que você precisa para ele:
$ mkdir zostest && cd zostest $ npm init $ zos init zostest
Depois disso, todos os arquivos de configuração necessários serão criados, para que você possa continuar a escrever contratos. Como um contrato de teste, vamos escrever um pequeno "repositório de variáveis":
pragma solidity 0.4.24; import "zos-lib/contracts/migrations/Migratable.sol"; contract SimpleStorage is Migratable { uint storedData; function initialize(uint256 _x) isInitializer("SimpleStorage", "0") public { storedData = _x; } function get() public constant returns (uint) { return storedData; } }
Compilamos e adicionamos nosso contrato:
$ zos add SimpleStorage

Execute a rede de teste (em um terminal separado):
$ npx ganache-cli --port 9545
Entramos em nossa rede local enquanto criamos um novo arquivo de configuração zos.local.json
:
$ zos push --network local

A coisa é pequena, resta criar o nosso contrato atualizado, execute simultaneamente initialize()
com o argumento 88 para o nosso "repositório":
$ zos create SimpleStorage --init initialize --args 88 --network local

Agora vamos tentar adicionar uma função para aumentar a variável no "armazenamento", por exemplo, isto:
pragma solidity 0.4.24; import "zos-lib/contracts/migrations/Migratable.sol"; contract SimpleStorage is Migratable { uint storedData; function initialize(uint256 _x) isInitializer("SimpleStorage", "0") public { storedData = _x; } function incrementStorage(uint256 _x) public { storedData += _x; } function get() public constant returns (uint) { return storedData; } }
Então você precisa atualizar o contrato na rede:
$ zos push --network local

$ zos update SimpleStorage --network local

Agora você pode ver o que aconteceu. Para fazer isso, use o truffle console
:
$ npx truffle console --network=local truffle(local)> sS = SimpleStorage.at(<proxy-address>)
E <proxy-address>
pode ser visualizado em zos.local.json
na coluna correspondente, e verificaremos o que temos no "repositório" e se podemos aumentar a variável:

Tudo funciona muito bem, existem muitas oportunidades para testar contratos. Eu diria que o Zeppelin OS pode ser usado como uma ferramenta de desenvolvimento, com certeza.
O que fizemos?
Verificamos que, com o Zeppelin OS, você pode implantar, atualizar, compilar e testar contratos. Parece ser uma ótima ferramenta para quem gosta de trabalhar com a linha de comando, e o Remix treme no navegador. Além disso, você pode recomendar o início de uma introdução ao Solidity e aos contratos inteligentes com este projeto em particular.