Chainlink amplía las capacidades de los contratos inteligentes al permitir el acceso a datos del mundo real y computación fuera de la cadena, manteniendo al mismo tiempo las garantías de seguridad y confiabilidad inherentes a la tecnología blockchain.
Este repositorio contiene el nodo principal de Chainlink y los contratos. El nodo central es el binario incluido disponible para ser ejecutado por operadores de nodos que participan en una red Oracle descentralizada. Todas las versiones principales tienen imágenes de Docker prediseñadas disponibles para descargar desde Chainlink Dockerhub. Si está interesado en contribuir, consulte nuestras pautas de contribución. Si está aquí para informar un error o solicitar una función, consulte los problemas abiertos actualmente. Para obtener más información sobre cómo comenzar con Chainlink, consulte nuestra documentación oficial. Los recursos para desarrolladores de Solidity se pueden encontrar en Chainlink Hardhat Box.
Chainlink tiene una comunidad activa y en constante crecimiento. Discord es el canal de comunicación principal utilizado para la comunicación diaria, responder preguntas de desarrollo y agregar contenido relacionado con Chainlink. Eche un vistazo a los documentos de la comunidad para obtener más información sobre las cuentas sociales, noticias y redes de Chainlink.
Instale Go 1.22 y agregue el directorio bin de su GOPATH a su RUTA
Ruta de ejemplo para macOS export PATH=$GOPATH/bin:$PATH
& export GOPATH=/Users/$USER/go
Instale NodeJS v20 y pnpm v9 a través de npm.
Puede que a largo plazo sea más fácil utilizar nvm para cambiar entre versiones de nodo para diferentes proyectos. Por ejemplo, suponiendo que $NODE_VERSION estuviera configurado en una versión válida de NodeJS, podría ejecutar: nvm install $NODE_VERSION && nvm use $NODE_VERSION
Instale Postgres (>= 12.x). Se recomienda ejecutar la última versión principal de Postgres.
Tenga en cuenta que si está ejecutando la imagen oficial de la ventana acoplable Chainlink, la versión más alta de Postgres admitida es 16.x debido al cliente incluido.
Debe configurar Postgres para usar una conexión SSL (o para realizar pruebas, puede configurar ?sslmode=disable
en su cadena de consulta de Postgres).
Asegúrese de tener Python 3 instalado (esto lo requiere solc-select, que es necesario para compilar contratos de solidez)
Descargar Chainlink: git clone https://github.com/smartcontractkit/chainlink && cd chainlink
Construya e instale Chainlink: make install
Ejecute el nodo: chainlink help
Para obtener la información más reciente sobre cómo configurar un entorno de desarrollo, consulte la Guía de configuración de desarrollo.
Las versiones nativas de Apple Silicon deberían funcionar desde el primer momento, pero la imagen de Docker requiere más consideración.
$ compilación de ventana acoplable. -t chainlink-develop:último -f ./core/chainlink.Dockerfile
Para ejecutar el nodo Chainlink, debe tener acceso a un nodo Ethereum en ejecución con una conexión websocket abierta. Cualquier red basada en Ethereum funcionará una vez que haya configurado la ID de la cadena. Versiones de nodos de Ethereum actualmente probadas y admitidas:
[Apoyado oficialmente]
Parity/Openethereum (NOTA: La paridad está obsoleta y es posible que se elimine la compatibilidad con este cliente en el futuro)
Geth
Besú
[Soportado pero roto] Estos clientes son compatibles con Chainlink, pero tienen errores que impiden que Chainlink funcione de manera confiable en estos clientes de ejecución.
Problemas de bloqueo de Nethermind:
Mente AbisalEth/menteabisal#4384
Problemas de bloqueo de Erigon:
erigontech/erigon#4946
erigontech/erigon#4030 (comentario)
No podemos recomendar números de versión específicos para los nodos ethereum ya que el software se actualiza continuamente, pero normalmente deberías intentar ejecutar la última versión disponible.
NOTA : De forma predeterminada, Chainlink se ejecutará en modo TLS. Para el desarrollo local, puede desactivar esto utilizando una dev build
usando make chainlink-dev
y configurando los campos TOML:
[Servidor Web]SecureCookies = falseTLS.HTTPSPort = 0[Inseguro]DevWebServer = verdadero
Alternativamente, puede generar certificados autofirmados usando tools/bin/self-signed-certs
o manualmente.
Para iniciar su nodo Chainlink, simplemente ejecute:
inicio del nodo de enlace de cadena
De forma predeterminada, esto comenzará en el puerto 6688. Debería poder acceder a la interfaz de usuario en http://localhost:6688/.
Chainlink proporciona un cliente CLI remoto y una interfaz de usuario. Una vez que su nodo se haya iniciado, puede abrir una nueva ventana de terminal para usar la CLI. Primero deberá iniciar sesión para autorizar al cliente:
inicio de sesión de administrador de enlace de cadena
(También puede configurar ADMIN_CREDENTIALS_FILE=/path/to/credentials/file
en el futuro si lo desea, para evitar tener que iniciar sesión nuevamente).
Ahora puedes ver tus trabajos actuales con:
lista de trabajos de enlace de cadena
Para obtener más información sobre Chainlink CLI, siempre puede ejecutar chainlink help
.
Consulte las páginas de documentación sobre Trabajos para obtener más información sobre cómo crear trabajos.
La configuración del nodo se gestiona mediante una combinación de variables de entorno y configuración directa a través de API/UI/CLI.
Consulte la documentación oficial para obtener más información sobre cómo configurar su nodo.
Los adaptadores externos son los que hacen que Chainlink sea fácilmente extensible, proporcionando una integración sencilla de cálculos personalizados y API especializadas. Un nodo Chainlink se comunica con adaptadores externos a través de una API REST simple.
Para obtener más información sobre la creación y el uso de adaptadores externos, consulte nuestra página de adaptadores externos.
Utilizamos cosign
con la firma sin llave OIDC durante el flujo de trabajo de creación, firma y publicación de Chainlink.
Se recomienda que cualquier operador de nodo que cree a partir de la imagen oficial de la ventana acoplable Chainlink verifique que la versión de lanzamiento etiquetada se haya creado a partir de este flujo de trabajo.
Necesitará cosign
para realizar esta verificación. Siga las instrucciones aquí para instalar cosign.
# etiqueta es la versión de lanzamiento etiquetada, es decir. 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 pnpm 9 a través de npm
Instale gencodec y jq para poder ejecutar go generate ./...
y make abigen
instalar burla
make mockery
El uso del comando make
instalará la versión correcta.
Contratos de construcción:
contratos pushd pnpm yo compilación pnpm:nativepopd
Generar y compilar activos estáticos:
hacer generar
Prepare su entorno de desarrollo:
Las pruebas requieren una base de datos postgres. A su vez, la variable de entorno CL_DATABASE_URL
debe establecerse en un valor que pueda conectarse a la base de datos _test
, y el usuario debe poder crear y eliminar la base de datos _test
dada.
Nota: No se deben configurar otras variables de entorno para que pasen todas las pruebas.
Hay un script de ayuda para la configuración inicial para crear un usuario de prueba adecuado. Requiere que postgres se ejecute en localhost en el puerto 5432. Se le solicitará la contraseña de usuario postgres
hacer configuración-testdb
Este script guardará CL_DATABASE_URL
en .dbenv
Los cambios en la base de datos requieren que se ejecuten migraciones. De manera similar, pull
el repositorio puede requerir la ejecución de migraciones. Después de la configuración única anterior:
source .dbenv make testdb
Si encuentra el error database accessed by other users (SQLSTATE 55006) exit status 1
y desea forzar la creación de la base de datos, utilice
source .dbenv make testdb-force
Ejecutar pruebas:
ve a probar ./...
El indicador parallel
se puede utilizar para limitar el uso de la CPU, para ejecutar pruebas en segundo plano ( -parallel=4
) - el valor predeterminado es GOMAXPROCS
La bandera p
se puede usar para limitar la cantidad de paquetes probados simultáneamente, si interfieren entre sí ( -p=1
)
El indicador -short
omite las pruebas que dependen de la base de datos, para comprobar rápidamente pruebas más simples en aproximadamente un minuto.
A partir de Go 1.1, el tiempo de ejecución incluye un detector de carreras de datos, habilitado con el indicador -race
. Esto se usa en CI a través del script tools/bin/go_core_race_tests
. Si la acción detecta una carrera, el artefacto en la página de resumen incluirá archivos race.*
con seguimientos de pila detallados.
No emitirá falsos positivos, así que tómese en serio sus advertencias.
Para la detección de carreras local y específica, puede ejecutar:
GORACE="log_path=$PWD/race" ir a prueba -race ./core/path/to/pkg -count 10 GORACE="log_path=$PWD/race" ir a prueba -race ./core/path/to/pkg -count 100 -run TestFooBar/sub_test
https://go.dev/doc/articles/race_detector
A partir de Go 1.18, las pruebas fuzz func FuzzXXX(*testing.F)
se incluyen como parte del conjunto de pruebas normal, por lo que los casos existentes se ejecutan con go test
.
Además, puede ejecutar fuzzing activo para buscar nuevos casos:
vaya a probar ./pkg/path -run=XXX -fuzz=FuzzTestName
https://go.dev/doc/fuzz/
Este repositorio contiene tres módulos Go:
diagrama de flujo 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
Cargando Los módulos de integration-tests
y core/scripts
importan el módulo raíz usando un reemplazo relativo en sus archivos go.mod
, por lo que los cambios de dependencia en el go.mod
raíz a menudo requieren cambios en esos módulos también. Después de realizar un cambio, go mod tidy
se puede ejecutar en los tres módulos usando:
make gomodtidy
Dentro del directorio contracts/
:
Instalar dependencias:
pnpm yo
Ejecutar pruebas:
prueba pnpm
NOTA: Chainlink se encuentra actualmente en el proceso de migración a Foundry y contiene pruebas de Foundry y Hardhat en algunas versiones. Puede encontrar más información aquí: Documentación de Chainlink Foundry. Hardhat ignorará cualquier archivo 't.sol' asociado con las pruebas de Foundry, contenido en los directorios src.
Go generate se utiliza para generar simulacros en este proyecto. Los simulacros se generan con burla y viven en el núcleo/interno/simulacros.
Se proporciona un shell.nix para usar con el administrador de paquetes Nix. De forma predeterminada, utilizamos el shell a través de Nix Flakes.
Nix define un entorno de desarrollo declarativo y reproducible. La versión Flakes utiliza dependencias deterministas congeladas ( flake.lock
) para obtener más coherencia/reproducibilidad en los artefactos construidos.
Para usarlo:
Instale el administrador de paquetes nix en su sistema.
Habilitar soporte de copos
Ejecute nix develop
. Se le colocará en un shell que contiene todas las dependencias.
Opcionalmente, nix develop --command $SHELL
hará uso de su shell actual en lugar del predeterminado (bash).
Puede usar direnv
para habilitarlo automáticamente cuando cd
ingresa a la carpeta; para eso, habilite nix-direnv y use flake
en él.
Cree una base de datos local de Postgres:
mkdir -p $PGDATA && cd $PGDATA/ initdb pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" inicio creadob chainlink_test -h localhost createuser --superuser --password chainlink -h localhost# luego escribe una contraseña de prueba, por ejemplo: chainlink, y configúrala en shell.nix CL_DATABASE_URL
Al volver a ingresar al proyecto, puede reiniciar postgres: cd $PGDATA; pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start
Ahora puedes ejecutar pruebas o compilar código como de costumbre.
Cuando haya terminado, deténgalo: cd $PGDATA; pg_ctl -o "--unix_socket_directories='$PWD'" stop
Usamos conjuntos de cambios para administrar el control de versiones de bibliotecas y servicios.
Cada PR que modifica cualquier configuración o código, probablemente debería ir acompañado de un archivo de conjunto de cambios.
Para instalar changesets
:
Instale pnpm
si aún no está instalado - docs.
Ejecute pnpm install
.
Ya sea antes o después de crear una confirmación, ejecute el comando pnpm changeset
para crear una entrada de conjunto de cambios adjunta que se reflejará en CHANGELOG para la próxima versión.
El formato se basa en Mantener un registro de cambios,
y este proyecto se adhiere al Versionado Semántico.
Para obtener más consejos sobre cómo construir y probar Chainlink, consulte nuestra página de consejos de desarrollo.
Se aceptan contribuciones al código fuente de Chainlink.
Consulte nuestras pautas de contribución para obtener más detalles.
¡Gracias!