Chainlink expande os recursos dos contratos inteligentes, permitindo acesso a dados do mundo real e computação fora da cadeia, ao mesmo tempo que mantém as garantias de segurança e confiabilidade inerentes à tecnologia blockchain.
Este repositório contém o nó principal e os contratos do Chainlink. O nó principal é o pacote binário disponível para ser executado por operadores de nós que participam de uma rede oracle descentralizada. Todas as versões principais têm imagens docker pré-construídas disponíveis para download no Chainlink dockerhub. Se você estiver interessado em contribuir, consulte nossas diretrizes de contribuição. Se você está aqui para relatar um bug ou solicitar um recurso, verifique os problemas abertos no momento. Para obter mais informações sobre como começar a usar o Chainlink, consulte nossa documentação oficial. Recursos para desenvolvedores do Solidity podem ser encontrados na caixa Chainlink Hardhat.
Chainlink tem uma comunidade ativa e em constante crescimento. Discord é o principal canal de comunicação usado para comunicação diária, respondendo a perguntas de desenvolvimento e agregando conteúdo relacionado ao Chainlink. Dê uma olhada nos documentos da comunidade para obter mais informações sobre contas sociais, notícias e redes da Chainlink.
Instale o Go 1.22 e adicione o diretório bin do GOPATH ao seu PATH
Exemplo de caminho para export PATH=$GOPATH/bin:$PATH
& export GOPATH=/Users/$USER/go
Instale NodeJS v20 e pnpm v9 via npm.
Pode ser mais fácil a longo prazo usar o nvm para alternar entre versões de nós para diferentes projetos. Por exemplo, assumindo que $NODE_VERSION foi definido como uma versão válida do NodeJS, você poderia executar: nvm install $NODE_VERSION && nvm use $NODE_VERSION
Instale o Postgres (>= 12.x). Recomenda-se executar a versão principal mais recente do postgres.
Observe que se você estiver executando a imagem oficial do Docker Chainlink, a versão mais alta do Postgres suportada é 16.x devido ao cliente incluído.
Você deve configurar o Postgres para usar a conexão SSL (ou, para teste, você pode definir ?sslmode=disable
na string de consulta do Postgres).
Certifique-se de ter o Python 3 instalado (isso é exigido pelo solc-select, que é necessário para compilar contratos de solidez)
Baixe Chainlink: git clone https://github.com/smartcontractkit/chainlink && cd chainlink
Construa e instale o Chainlink: make install
Execute o nó: chainlink help
Para obter as informações mais recentes sobre como configurar um ambiente de desenvolvimento, consulte o Guia de configuração de desenvolvimento.
As compilações nativas no Apple Silicon devem funcionar imediatamente, mas a imagem do Docker requer mais consideração.
$ docker build. -t chainlink-develop: mais recente -f ./core/chainlink.Dockerfile
Para executar o nó Chainlink, você deve ter acesso a um nó Ethereum em execução com uma conexão websocket aberta. Qualquer rede baseada em Ethereum funcionará assim que você configurar o ID da cadeia. Versões do nó Ethereum atualmente testadas e suportadas:
[Oficialmente suportado]
Parity/Openethereum (NOTA: A paridade está obsoleta e o suporte para este cliente pode ser removido no futuro)
Geth
Besu
[Suportado, mas quebrado] Esses clientes são suportados pelo Chainlink, mas possuem bugs que impedem o Chainlink de funcionar de maneira confiável nesses clientes de execução.
Problemas de bloqueio do Nethermind:
NethermindEth/nethermind#4384
Problemas de bloqueio de Erigon:
erigontech/erigon#4946
erigontech/erigon#4030 (comentário)
Não podemos recomendar números de versão específicos para nós Ethereum, pois o software está sendo atualizado continuamente, mas normalmente você deve tentar executar a versão mais recente disponível.
NOTA : Por padrão, o chainlink será executado no modo TLS. Para desenvolvimento local, você pode desabilitar isso usando um dev build
usando make chainlink-dev
e definindo os campos TOML:
[WebServer]SecureCookies = falseTLS.HTTPSPort = 0[Inseguro]DevWebServer = true
Alternativamente, você pode gerar certificados autoassinados usando tools/bin/self-signed-certs
ou manualmente.
Para iniciar seu nó Chainlink, basta executar:
início do nó de elo de corrente
Por padrão, isso começará na porta 6688. Você poderá acessar a UI em http://localhost:6688/.
Chainlink fornece um cliente CLI remoto, bem como uma UI. Depois que seu nó for iniciado, você poderá abrir uma nova janela de terminal para usar a CLI. Você precisará fazer login para autorizar o cliente primeiro:
login de administrador do chainlink
(Você também pode definir ADMIN_CREDENTIALS_FILE=/path/to/credentials/file
no futuro, se desejar, para evitar ter que fazer login novamente).
Agora você pode ver seus trabalhos atuais com:
lista de empregos de elo de corrente
Para saber mais sobre o Chainlink CLI, você sempre pode executar chainlink help
.
Confira as páginas de documentação sobre Jobs para saber mais sobre como criar Jobs.
A configuração do nó é gerenciada por uma combinação de variáveis de ambiente e configuração direta via API/UI/CLI.
Verifique a documentação oficial para obter mais informações sobre como configurar seu nó.
Adaptadores externos são o que tornam o Chainlink facilmente extensível, fornecendo integração simples de cálculos personalizados e APIs especializadas. Um nó Chainlink se comunica com adaptadores externos por meio de uma API REST simples.
Para obter mais informações sobre como criar e usar adaptadores externos, consulte nossa página de adaptadores externos.
Usamos cosign
com assinatura sem chave OIDC durante o fluxo de trabalho Construir, Assinar e Publicar Chainlink.
É recomendável que qualquer operador de nó que construa a partir da imagem oficial do Docker do Chainlink verifique se a versão de lançamento marcada foi realmente construída a partir deste fluxo de trabalho.
Você precisará cosign
para fazer esta verificação. Siga as instruções aqui para instalar o cosign.
# tag é a versão de lançamento marcada - ou seja. v2.16.0cosign verificar public.ecr.aws/chainlink/chainlink:${tag} --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity "https://github.com/smartcontractkit/chainlink/.github/workflows/build-publish.yml@refs/tags/${tag}"
Instale o pnpm 9 via npm
Instale gencodec e jq para poder executar go generate ./...
e make abigen
Instale zombaria
make mockery
Usar o comando make
instalará a versão correta.
Construir contratos:
contratos pushd pnpm eu compilação pnpm: nativepopd
Gere e compile ativos estáticos:
fazer gerar
Prepare seu ambiente de desenvolvimento:
Os testes requerem um banco de dados postgres. Por sua vez, a variável de ambiente CL_DATABASE_URL
deve ser definida com um valor que possa se conectar ao banco de dados _test
, e o usuário deve ser capaz de criar e eliminar o banco de dados _test
fornecido.
Nota: Outras variáveis de ambiente não devem ser definidas para que todos os testes sejam aprovados
Há um script auxiliar para configuração inicial para criar um usuário de teste apropriado. Requer que o postgres esteja em execução no localhost na porta 5432. Será solicitada a senha do usuário postgres
faça setup-testdb
Este script salvará o CL_DATABASE_URL
em .dbenv
As alterações no banco de dados exigem a execução de migrações. Da mesma forma, pull
o repositório pode exigir a execução de migrações. Após a configuração única acima:
source .dbenv make testdb
Se você encontrar o database accessed by other users (SQLSTATE 55006) exit status 1
e quiser forçar a criação do banco de dados, use
source .dbenv make testdb-force
Execute testes:
vá testar./...
O sinalizador parallel
pode ser usado para limitar o uso da CPU, para executar testes em segundo plano ( -parallel=4
) - o padrão é GOMAXPROCS
O sinalizador p
pode ser usado para limitar o número de pacotes testados simultaneamente, se eles estiverem interferindo uns nos outros ( -p=1
)
O sinalizador -short
ignora testes que dependem do banco de dados, para verificar rapidamente testes mais simples em cerca de um minuto
A partir do Go 1.1, o tempo de execução inclui um detector de corrida de dados, habilitado com o sinalizador -race
. Isso é usado no CI por meio do script tools/bin/go_core_race_tests
. Se a ação detectar uma corrida, o artefato na página de resumo incluirá arquivos race.*
com rastreamentos de pilha detalhados.
Não emitirá falsos positivos, por isso leve a sério os seus avisos.
Para detecção de corrida local e direcionada, você pode executar:
GORACE="log_path=$PWD/race" vá test -race ./core/path/to/pkg -count 10 GORACE="log_path=$PWD/race" vá test -race ./core/path/to/pkg -count 100 -run TestFooBar/sub_test
https://go.dev/doc/articles/race_detector
A partir do Go 1.18, os testes fuzz func FuzzXXX(*testing.F)
são incluídos como parte do conjunto de testes normal, portanto, os casos existentes são executados com go test
.
Além disso, você pode executar fuzzing ativo para procurar novos casos:
vá testar ./pkg/path -run=XXX -fuzz=FuzzTestName
https://go.dev/doc/fuzz/
Este repositório contém três módulos Go:
fluxograma RL
github.com/smartcontractkit/chainlink/v2
github.com/smartcontractkit/chainlink/integration-tests --> github.com/smartcontractkit/chainlink/v2
github.com/smartcontractkit/chainlink/core/scripts --> github.com/smartcontractkit/chainlink/v2
Carregando Os módulos de integration-tests
e core/scripts
importam o módulo raiz usando uma substituição relativa em seus arquivos go.mod
, portanto, alterações de dependência na raiz go.mod
geralmente exigem alterações nesses módulos também. Depois de fazer uma alteração, go mod tidy
pode ser executado em todos os três módulos usando:
make gomodtidy
Dentro do diretório contracts/
:
Instale dependências:
pnpm eu
Execute testes:
teste pnpm
NOTA: Chainlink está atualmente em processo de migração para Foundry e contém testes de Foundry e Hardhat em algumas versões. Mais informações podem ser encontradas aqui: Documentação da Chainlink Foundry. Quaisquer arquivos 't.sol' associados aos testes do Foundry, contidos nos diretórios src, serão ignorados pelo Hardhat.
Go generate é usado para gerar simulações neste projeto. As simulações são geradas com zombaria e ficam em core/interno/simulações.
Um shell.nix é fornecido para uso com o gerenciador de pacotes Nix. Por padrão, utilizamos o shell por meio do Nix Flakes.
Nix define um ambiente de desenvolvimento declarativo e reproduzível. A versão Flakes usa dependências determinísticas e congeladas ( flake.lock
) para obter mais consistência/reprodutibilidade nos artefatos construídos.
Para usá-lo:
Instale o gerenciador de pacotes nix em seu sistema.
Ativar suporte a flocos
Execute nix develop
. Você será colocado em um shell contendo todas as dependências.
Opcionalmente, nix develop --command $SHELL
usará seu shell atual em vez do padrão (bash).
Você pode usar direnv
para habilitá-lo automaticamente ao cd
na pasta; para isso, habilite nix-direnv e use flake
nele.
Crie um banco de dados postgres local:
mkdir -p $PGDATA && cd $PGDATA/ banco de dados de inicialização pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" iniciar criadob chainlink_test -h localhost createuser --superuser --password chainlink -h localhost# em seguida, digite uma senha de teste, por exemplo: chainlink, e defina-a em shell.nix CL_DATABASE_URL
Ao entrar novamente no projeto, você pode reiniciar o postgres: cd $PGDATA; pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start
Agora você pode executar testes ou compilar código normalmente.
Quando terminar, pare: cd $PGDATA; pg_ctl -o "--unix_socket_directories='$PWD'" stop
Usamos conjuntos de alterações para gerenciar o versionamento de bibliotecas e serviços.
Todo PR que modifica qualquer configuração ou código provavelmente deve ser acompanhado por um arquivo de conjunto de alterações.
Para instalar changesets
:
Instale pnpm
se ainda não estiver instalado - docs.
Execute pnpm install
.
Depois ou antes de criar um commit, execute o comando pnpm changeset
para criar uma entrada de conjunto de alterações que irá refletir no CHANGELOG para o próximo lançamento.
O formato é baseado em Keep a Changelog,
e este projeto adere ao Versionamento Semântico.
Para obter mais dicas sobre como construir e testar o Chainlink, consulte nossa página de dicas de desenvolvimento.
Contribuições são bem-vindas ao código-fonte do Chainlink.
Por favor, verifique nossas diretrizes de contribuição para mais detalhes.
Obrigado!