「Criar na Darwinia 2–3」Implementando UNISWAP V2 na Rede Crab/Pangolin — I

kanbeok
Darwinia Network Brasil
6 min readJan 25, 2022

Crab Smart Chain é uma plataforma de contratos inteligentes no ecossistema Polkadot que proporciona um ambiente semelhante ao do Ethereum. Esta compatibilidade foi projetada para facilitar a reimplantação de aplicações existentes do Ethereum para a Crab (e, portanto, Polkadot) sem alterar significativamente o código de base.

Como um exemplo de como é uma integração, criamos um guia de como implantar aplicações para Crab/Pangolin. Este tutorial tem como público alvo os participantes da hackathon que estão se preparando para construir algo a partir do zero rapidamente. Neste guia, demonstraremos como portar o UNISWAP, o maior DEX em Ethereum, para a Crab/Pangolin. O guia será dividido em dois artigos. Neste artigo, vamos guiá-lo através da implantação dos contratos inteligentes do Uniswap V2 Core para a Pangolin TestNet. Também explicaremos as mudanças necessárias para ter um Uniswap V2 DEX totalmente funcional com funcionalidade básica em Crab/Pangolin. No próximo artigo, explicaremos a integração da interface e do SDK. Quanto a como obter tokens de teste(PRING), consulte este tutorial (em inglês).

Este artigo cobre o processo de implantação de todos os contratos Uniswap V2 necessários para a Pangolin TestNet. As etapas são similares para a implantação na Crab Smart Chain.

Preparamos um github repo para a demonstração. A pasta uniswap/smart-contracts inclui a configuração Hardhat, que contém todos os arquivos de contrato necessários e um roteiro de implantação para os seguintes contratos (essenciais para executar a Uniswap):

  • WETH: ether wrapped em uma interface de tokens ERC20 (na interface será chamado de DEV ou WDEV wrapped)
  • UniswapV2Factory: é somente requerida como entrada um endereço que pode ativar uma taxa a nível de protocolo (entrada necessária mas não utilizada neste exemplo)
  • UniswapV2Router02: requer o endereço dos contratos WETH e UniswapV2Factory
  • Multicall: os agregados resultam de múltiplas chamadas de funções constantes de contrato, reduzindo o número de pedidos de RPCs JSON separados que precisam ser enviados. Isto é exigido pela interface Uniswap

Começar é tão fácil quanto clonar o repo, instalar as dependências e implantar os contratos com Hardhat. Portanto, primeiro, vamos começar a clonagem do repo e a instalação das dependências:

git clone <https://github.com/darwinia-network/dvm-workshop>
cd dvm-workshop/uniswap/smart-contracts
yarn

Na pasta uniswap/smart-contracts, você encontrará um arquivo “hardhat-config.js” que contém duas redes pré-configuradas: a Crab Smart Chain e a Pangolin TestNet. Aqui, você precisa substituir privateKey pela sua própria para implantar os contratos em Pangolin. É de extrema importância que você mantenha sua chave privada segura e nunca a compartilhe ela no repositório, portanto, uma melhor prática para definir sua chave privada é a definição de uma variável ambiental.

export PRIVATE_KEY=.....

Agora você pode compilar os contratos inteligentes usando o seguinte comando.

yarn build

Agora que não há erro, podemos continuar a implantar os contratos para a Pangolin TestNet. O comando é o seguinte

yarn deploy:pangolin

Você pode verificar o resultado no blockchain explorer Subscan.

Usando apenas um simples script Hardhat + Ethers.js, implantamos todos os contratos Uniswap V2 necessários para a Pangolin TestNet sem modificar o código.

Entretanto, uma nova abordagem é adotada para calcular o endereço de um pool (criado pelo opcode), fornecendo apenas os endereços dos dois tokens ERC20. O endereço pode ser calculado com a seguinte fórmula:

Onde o salt é o mesmo que o mostrado no código UniswapV2Factory (relacionado a ambos os endereços de token). O hash init_code é o último bit da equação (keccak256(UniswapV2Pair.bytecode)), ou seja, o hash keccak256 do bytecode do contrato UniswapV2Pair. Se o init_code errado for fornecido, os contratos inteligentes (e a interface) não serão capazes de calcular o endereço correto do pool. A vantagem desta abordagem é que o endereço de um pool pode ser calculado com antecedência sem nenhuma chamada externa.

O init_code podem ser obtido de diferentes maneiras. Aqui nós fornecemos uma. Após a compilação bem sucedida, você pode encontrar um arquivo artifacts/contracts/core/UniswapV2Pair.sol/UniswapV2Pair.jsonno qual você pode encontrar o código byte.

Clique duas vezes para copiar e colar isto em uma ferramenta online de hash, remova o prefixo 0x, defina o Input type para Hex, e após isto você obtem o hash.

Em seguida, cole o hash depois de hex no arquivo contracts/periphery/libraries/UniswapV2Library.sol.

// calculates the CREATE2 address for a pair without making any external calls
function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
pair = address(uint(keccak256(abi.encodePacked(
hex'ff',
factory,
keccak256(abi.encodePacked(token0, token1)),
hex'2fe714b2a8ae1bc2f8a4181f48e8d9cb072c8ec7193ad627a77f095d2d406c02' // init code hash
))));
}

Agora você poderá fazer o teste no qual será feita algumas operações de troca entre os dois tokens de teste.

Como conseguir os tokens

Para implantar na Pangolin TestNet ou Crab Smart Chain você precisa ter alguns tokens na conta que realiza a implantação. Você pode obter alguns tokens para Pangolin(PRING) de uma faucet, um serviço que distribui o token de teste gratuitamente. Estes tokens não têm valor real e só podem ser usados para desenvolvimento e teste. É somente o CRAB, o token nativo na Crab Smart Chain, que tem valor real. Para obter CRABs é preciso que os usuários comprem de uma exchange. Como estamos realizando uma hackathon para atrair desenvolvedores para a Crab Smart Chain, lançamos um programa de airdrop no qual os usuários podem solicitar algum CRAB mediante pagamento. Para saber como candidatar-se, consulte aqui.

Series de Artigos:

「Criar na Darwinia 2–1」Formatos de Endereço na Darwinia

「Criar na Darwinia 2–2」 Crab Smart Chain Compatível com EVM

Recursos:

Documentação dos desenvolvedores: https://docs.crab.network/builders/get-started/darwinia-dev (em inglês)

Grupo de Telegram dos Desenvolvedores: https://t.me/DarwiniaDev (em inglês)

Sobre a Rede Crab

Crab é a rede canária da Darwinia. Ela apresenta valor econômico real, e se posiciona de modo análogo à Rede Kusama em relação a Polkadot. Você pode checar o status da Crab através Polkadot{.js}, Subscan, ou Subview.

A Crab provê soluções de contratos inteligentes baseadas em DVM (Darwinia Virtual Machine), compatível com o paradigma EVM (Ethereum Virtual Machine) a um nível básico. Portanto, ela permite que projetos migrem do ecossistema Ethereum para a Rede Crab e para o ecossistema Polkadot.( DVM é construído em Frontier com configurações totalmente compatíveis com EVM e uma interface externa similar a RPC).

Tudo o que você precisa saber sobre Darwinia

[Website] [Twitter] [Telegram Oficial em Português] [GitHub] [Discord]

Traduzido do inglês para o português por Mariana Kanbe.

Link para acesso ao artigo original:

https://darwinianetwork.medium.com/build-on-darwinia-2-3-deploying-uniswap-v2-to-crab-pangolin-network-i-252cc32db8cd

--

--