💻 Integrando com a Alpaca Finance
Integrando com a Alpaca Finance
A Alpaca Finance permite que aplicativos DeFi e usuários finais se integrem com seu protocolo principal. O objetivo deste documento é auxiliar os desenvolvedores na integração com nosso protocolo para garantir a segurança geral do ecossistema.
Se você quiser primeiro ter uma melhor compreensão do nosso protocolo, você pode revisar a documentação do nosso contrato aqui.
Estatísticas Importantes
As APIs públicas a seguir contêm todas as informações necessárias usadas em nosso frontend, portanto, você pode usá-las como fontes que serão sincronizadas automaticamente conosco.
AF1.0:
AF2.0:
Exemplo de informações incluídas nas APIs:
Todas as pools de Lend e suas estatísticas, por exemplo, APR, TVL, Fornecimento e Empréstimo, preço do ibToken
Todos os workers (farm) e suas estatísticas, por exemplo, APR, TVL
Todos os cofres automatizados e suas estatísticas, por exemplo, APY, AV Share Price
Integração do contrato inteligente
Esta seção descreve como integrar com a Alpaca Finance diretamente de um contrato inteligente.
Lending
A Alpaca Finance permite que os usuários obtenham receita de juros sobre ativos criptográficos, depositando-os em nossos cofres de depósito. Esses ativos são então oferecidos aos farmers para alavancar suas posições. Qualquer contrato inteligente compatível com EVM e implantado na BNB Chain pode ser integrado ao protocolo de empréstimo da Alpaca Finance.
Para depositar o token base nos cofres da Alpaca Finance, a lista de cofres disponíveis e seus tokens básicos correspondentes deve ser adquirida primeiro.
Por favor, veja aqui a lista detalhada de todos os endereços de contrato dos cofres.
Antes que um depósito possa ser feito em um cofre, o contrato inteligente que atua como um depositante deve primeiro aprovar o subsídio de gastos do token base a ser depositado. Isso fornecerá ao Contrato Inteligente da Alpaca a capacidade de obter tokens do remetente.
O snippet de código JavaScript acima é um fluxo de trabalho simplificado sobre como aprovar o subsídio de gastos de token com o valor máximo possível. Observe que o uso de MaxUint256
pode apresentar risco de segurança, o uso da quantidade exata de token inserida pelo usuário é recomendado.
Para realizar um depósito, chame o método deposit
e especifique o valor do depósito no parâmetro amountToken
. O tipo de dado doo amountToken
é uint256
e este parâmetro deve ser formatado para os decimais do token de depósito (por exemplo, o BNB usa 18 decimais, 1 BNB =10000000000000000000
ou 1 * 1e18
). Para o caso em que o token de depósito é BNB, o cofre tratará o empacotamento do BNB em wBNB, mas a transação deve incluir BNB suficiente enviado como o token nativo.
Se o depósito for bem-sucedido, o cofre cunhará tokens que rendem juros (ibTokens) e devolverá esses tokens cunhados ao chamador. Observe que o valor do token com juros devolvido não será igual ao valor do token base fornecido devido ao design dos tokens que rendem juros. O chamador do método deposit deve acompanhar corretamente as ações dos usuários para depósitos em cofres, consulte a seção Cálculo de Token de Rolagem de Juros para uma explicação detalhada.
Os juros do empréstimo reverterão para o ibTokens. Para realizar os ganhos do empréstimo, o ibTokens deve ser retirado, resgatando o token base + juros cobrados. Você notará que o preço de troca do ibToken será mais alto na retirada, o que indica que os juros já foram acumulados. Portanto, você receberá tokens base adicionais ao sacar.
Para resgatar os tokens base do cofre, a quantidade de ibTokens a ser retirada deve ser fornecida ao método withdraw
no contrato Vault
.
Os tokens base serão então devolvidos ao chamador. Se o token retornado for BNB, o contrato do Vault irá desembrulhar o WBNB de volta a BNB.
Cálculo de Token de Rolagem de Juros (ibToken)
Um token de suporte de juros (ibToken) é o token que representa a ação do cofre do depositante. O ibTokens acumulará juros recebidos do empréstimo ao longo do tempo. Qualquer protocolo DeFi que deseje utilizar os cofres da Alpaca Finance deve compreender e implementar o cálculo do ibTokens corretamente para refletir as cotas reais dos usuários do cofre.
Portanto, a proporção entre um ibToken e o token de base real será apenas de 1: 1 quando o cofre for aberto pela primeira vez, após o qual o valor do ibToken continuará a aumentar à medida que os juros do empréstimo acumulam juros (o valor de um ibToken em relação ao token de base apenas se move para cima. O valor não pode diminuir). Por exemplo, vamos supor o preço: 1 ibBNB = 1.0292 BNB
que significa que um depósito de 1,0292 BNB receberá 1 ibBNB em troca. Por outro lado, resgatar 1 ibBNB obterá 1.0292 BNB em troca. O BNB adicional ao resgatar ibBNB são os juros acumulados.
Entender essa mecânica fundamental dos valores dos ibTokens é crucial, uma vez que um protocolo DeFi que se integra aos cofres de empréstimo da Alpaca Finance pode precisar calcular com precisão as cotas dos usuários do depósito do cofre. Não fazer isso pode representar risco de segurança e perda financeira. Este foi o caso dos ataques a bEarn.fi e ValueDeFi em que esses protocolos sempre trataram ibTokens como tendo uma proporção de 1:1 com o token desejado (leia a análise dos ataques em bEarn.fi e ValueDefi).
Além disso, embora o Alpaca não funcione com empréstimos instantâneos, em um cofre externo que não seja da Alpaca pode haver o risco de manipulação de preços do ibToken em um ataque, como um ataque de empréstimo instantâneo. Se não estiver preparado, o preço de um ibToken pode ser drasticamente alterado dentro do escopo da transação de um invasor. É por isso que confiar apenas no preço ibToken do cálculo do contrato inteligente não é suficiente. Recomendamos que o projeto tenha um oráculo de preços alimentando a proporção atual de ibTokens versus seu token de base para evitar o ataque mencionado acima.
Portanto, mostraremos a maneira mais segura e correta de calcular os preços dos ibTokens.
Direct calculation from smart contract
Calcular o preço do token ibToken do contrato inteligente é a maneira mais simples, mas para robustez, não deve ser o único método que você utiliza.
O fragmento de código acima demonstra um cálculo de preço ibToken a partir da recuperação do valor de totalToken
e totalSupply
do cofre correspondente.
Recuperando o preço ibToken da Alpaca API
Alpaca Finance fornece uma API para recuperar os preços ibToken atuais enviando uma solicitação REST GET para o endpoint /ibTokens
para recuperar qualquer preço ibToken. A integração com a Alpaca API requer autenticação, portanto, entre em contato conosco em requests@alpacafinance.org se você deseja usar este serviço.
O resultado de exemplo da API é o seguinte:
O preço recuperado da API da Alpaca deve ser fornecido ao contrato inteligente usando um oráculo de preço. Fornecer os preços por meio de uma entrada para uma chamada de contrato inteligente ficará vulnerável a um ataque de injeção do cliente. Aconselhamos fortemente não fazer isso. Um exemplo de um oráculo de preços simples pode ser visto aqui. Usando um oráculo de preços confiável, você pode garantir a integridade e confiabilidade dos dados de preços ibToken.
Recomendamos fortemente recuperar o preço ibToken do cálculo de contrato inteligente e da API Alpaca. Essas duas fontes de dados de preços devem ser comparadas para evitar qualquer possível anomalia de dados. Se a comparação entre as duas fontes diferir significativamente, os dados de preços devem ser rejeitados.
Em resumo, o processo mais seguro para calcular os preços do ibToken é o seguinte:
Calcule os preços do ibToken em seus próprios contratos.
Use um oráculo fora da rede para preços ibToken ou extraia esses preços da API da Alpaca.
Compare 1 e 2. Se a diferença for superior a n%, reverta a transação.
A API da Alpaca está atualmente apenas com uma lista de permissões para protocolos e instituições. Para solicitar acesso, envie um email para requests@alpacafinance.org
Staking
De acordo com o cronograma de emissões, as recompensas de emissão da ALPACA já foram concluídas. Assim, as informações relacionadas a stake fornecidas abaixo são apenas para fins de referência e podem não ser mais relevantes devido à suspensão das recompensas de stake da ALPACA.
Alpaca Finance oferece oportunidades de staking aos usuários. Tokens com juros e tokens LP selecionados estão disponíveis para staking em nossos pools de staking para receber rendimentos adicionais na forma de tokens ALPACA. Se você depositou fundos e recebeu ibTokens, recomendamos que aposte esses tokens nesses pools para ganhar o máximo de recompensas disponíveis.
Para apostar os tokens nos pools de stake da Alpaca Finance, a lista de pools e seus tokens de staking correspondentes deve ser adquirida primeiro. Por favor, veja aqui para obter uma lista detalhada de todos os endereços de contrato de pool. O contrato dos pools é geralmente chamado de Fairlaunch
em nossa base de código.
O staking é feito chamando o método deposit
. Os parâmetros são os seguintes:
_for
é o endereço do depositante._pid
é o id do pool de staking._amount
é a quantidade do token a ser depositado emuint256
expresso em seus decimais (por exemplo, ibBNB usa 18 decimais, 1 ibBNB =10000000000000000000
ou1 * 1e18
)
As informações do staking share serão armazenadas dentro do estado do contrato inteligente. Não haverá nenhum token emitido pelo staking. A quota de um usuário pode ser recuperada chamando o método userInfo
do contrato Fairlaunch
.
As recompensas do stake não são creditadas automaticamente e devem ser colhidas manualmente. No entanto, realizar um depósito ou saque nos pools de stake colherá automaticamente quaisquer recompensas pendentes para o chamador. Para colher recompensas de um pool de staking, o chamador deve chamar o método harvest
do contrato Fairlaunch
e fornecer a id do pool.
Para retirar os tokens de staking do pool, o valor da parte do usuário deve ser fornecido ao método withdraw
do contrato Fairlaunch
.
Os tokens de staking serão devolvidos ao chamador e todas as recompensas pendentes também serão coletadas automaticamente.
Testando com a Alpaca Finance
Atualmente, não oferecemos suporte para ambiente testnet. Recomendamos testar bifurcando da rede principal, o que pode ser facilmente realizado por meio do Fork do Tenderly. Para todas as informações e endereços relevantes, consulte: https://github.com/alpaca-finance/bsc-alpaca-contract/blob/main/.mainnet.json
Last updated