{"id":19107390,"url":"https://github.com/smartcontractkit/ccip","last_synced_at":"2025-04-12T23:30:08.059Z","repository":{"id":190239566,"uuid":"677464375","full_name":"smartcontractkit/ccip","owner":"smartcontractkit","description":"Cross Chain Interoperability Protocol","archived":false,"fork":false,"pushed_at":"2024-10-29T14:56:42.000Z","size":303794,"stargazers_count":122,"open_issues_count":21,"forks_count":49,"subscribers_count":32,"default_branch":"ccip-develop","last_synced_at":"2024-10-29T14:58:55.198Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/smartcontractkit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-11T16:29:38.000Z","updated_at":"2024-10-28T16:10:28.000Z","dependencies_parsed_at":"2023-08-23T19:56:12.697Z","dependency_job_id":"4e4ccb92-0bff-4479-bea0-87fa548eb1f0","html_url":"https://github.com/smartcontractkit/ccip","commit_stats":null,"previous_names":["smartcontractkit/ccip"],"tags_count":499,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fccip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fccip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fccip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smartcontractkit%2Fccip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smartcontractkit","download_url":"https://codeload.github.com/smartcontractkit/ccip/tar.gz/refs/heads/ccip-develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248647249,"owners_count":21139081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T04:12:27.788Z","updated_at":"2025-04-12T23:30:08.023Z","avatar_url":"https://github.com/smartcontractkit.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Active development of CCIP has moved to other repositories\n\nOnchain [smartcontractkit/chainlink](https://github.com/smartcontractkit/chainlink)\n\nOffchain [smartcontractkit/chainlink-ccip](https://github.com/smartcontractkit/chainlink-ccip)\n\n\u003cbr/\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://chain.link\" target=\"_blank\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/smartcontractkit/chainlink/develop/docs/logo-chainlink-blue.svg\" width=\"225\" alt=\"Chainlink logo\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\u003cbr/\u003e\n\n[![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/smartcontractkit/chainlink?style=flat-square)](https://hub.docker.com/r/smartcontract/chainlink/tags)\n[![GitHub license](https://img.shields.io/github/license/smartcontractkit/chainlink?style=flat-square)](https://github.com/smartcontractkit/chainlink/blob/master/LICENSE)\n[![GitHub workflow changeset](https://img.shields.io/github/actions/workflow/status/smartcontractkit/chainlink/changeset.yml)](https://github.com/smartcontractkit/chainlink/actions/workflows/changeset.yml?query=workflow%3AChangeset)\n[![GitHub contributors](https://img.shields.io/github/contributors-anon/smartcontractkit/chainlink?style=flat-square)](https://github.com/smartcontractkit/chainlink/graphs/contributors)\n[![GitHub commit activity](https://img.shields.io/github/commit-activity/y/smartcontractkit/chainlink?style=flat-square)](https://github.com/smartcontractkit/chainlink/commits/master)\n[![Official documentation](https://img.shields.io/static/v1?label=docs\u0026message=latest\u0026color=blue)](https://docs.chain.link/)\n\n[Chainlink](https://chain.link/) expands the capabilities of smart contracts by enabling access to real-world data and off-chain computation while maintaining the security and reliability guarantees inherent to blockchain technology.\n\nThis repo contains the Chainlink core node and contracts. The core node is the bundled binary available to be run by node operators participating in a [decentralized oracle network](https://link.smartcontract.com/whitepaper).\nAll major release versions have pre-built docker images available for download from the [Chainlink dockerhub](https://hub.docker.com/r/smartcontract/chainlink/tags).\nIf you are interested in contributing please see our [contribution guidelines](./docs/CONTRIBUTING.md).\nIf you are here to report a bug or request a feature, please [check currently open Issues](https://github.com/smartcontractkit/chainlink/issues).\nFor more information about how to get started with Chainlink, check our [official documentation](https://docs.chain.link/).\nResources for Solidity developers can be found in the [Chainlink Hardhat Box](https://github.com/smartcontractkit/hardhat-starter-kit).\n\n## Community\n\nChainlink has an active and ever growing community. [Discord](https://discordapp.com/invite/aSK4zew)\nis the primary communication channel used for day to day communication,\nanswering development questions, and aggregating Chainlink related content. Take\na look at the [community docs](./docs/COMMUNITY.md) for more information\nregarding Chainlink social accounts, news, and networking.\n\n## Build Chainlink\n\n1. [Install Go 1.22](https://golang.org/doc/install), and add your GOPATH's [bin directory to your PATH](https://golang.org/doc/code.html#GOPATH)\n   - Example Path for macOS `export PATH=$GOPATH/bin:$PATH` \u0026 `export GOPATH=/Users/$USER/go`\n2. Install [NodeJS v20](https://nodejs.org/en/download/package-manager/) \u0026 [pnpm v9 via npm](https://pnpm.io/installation#using-npm).\n   - It might be easier long term to use [nvm](https://nodejs.org/en/download/package-manager/#nvm) to switch between node versions for different projects. For example, assuming $NODE_VERSION was set to a valid version of NodeJS, you could run: `nvm install $NODE_VERSION \u0026\u0026 nvm use $NODE_VERSION`\n3. Install [Postgres (\u003e= 12.x)](https://wiki.postgresql.org/wiki/Detailed_installation_guides). It is recommended to run the latest major version of postgres.\n   - Note if you are running the official Chainlink docker image, the highest supported Postgres version is 16.x due to the bundled client.\n   - You should [configure Postgres](https://www.postgresql.org/docs/current/ssl-tcp.html) to use SSL connection (or for testing you can set `?sslmode=disable` in your Postgres query string).\n4. Ensure you have Python 3 installed (this is required by [solc-select](https://github.com/crytic/solc-select) which is needed to compile solidity contracts)\n5. Download Chainlink: `git clone https://github.com/smartcontractkit/chainlink \u0026\u0026 cd chainlink`\n6. Build and install Chainlink: `make install`\n7. Run the node: `chainlink help`\n\nFor the latest information on setting up a development environment, see the [Development Setup Guide](https://github.com/smartcontractkit/chainlink/wiki/Development-Setup-Guide).\n\n### Apple Silicon - ARM64\n\nNative builds on the Apple Silicon should work out of the box, but the Docker image requires more consideration.\n\n```bash\n$ docker build . -t chainlink-develop:latest -f ./core/chainlink.Dockerfile\n```\n\n### Ethereum Execution Client Requirements\n\nIn order to run the Chainlink node you must have access to a running Ethereum node with an open websocket connection.\nAny Ethereum based network will work once you've [configured](https://github.com/smartcontractkit/chainlink#configure) the chain ID.\nEthereum node versions currently tested and supported:\n\n[Officially supported]\n\n- [Parity/Openethereum](https://github.com/openethereum/openethereum) (NOTE: Parity is deprecated and support for this client may be removed in future)\n- [Geth](https://github.com/ethereum/go-ethereum/releases)\n- [Besu](https://github.com/hyperledger/besu)\n\n[Supported but broken]\nThese clients are supported by Chainlink, but have bugs that prevent Chainlink from working reliably on these execution clients.\n\n- [Nethermind](https://github.com/NethermindEth/nethermind)\n  Blocking issues:\n  - ~https://github.com/NethermindEth/nethermind/issues/4384~\n- [Erigon](https://github.com/ledgerwatch/erigon)\n  Blocking issues:\n  - https://github.com/ledgerwatch/erigon/discussions/4946\n  - https://github.com/ledgerwatch/erigon/issues/4030#issuecomment-1113964017\n\nWe cannot recommend specific version numbers for ethereum nodes since the software is being continually updated, but you should usually try to run the latest version available.\n\n## Running a local Chainlink node\n\n**NOTE**: By default, chainlink will run in TLS mode. For local development you can disable this by using a `dev build` using `make chainlink-dev` and setting the TOML fields:\n\n```toml\n[WebServer]\nSecureCookies = false\nTLS.HTTPSPort = 0\n\n[Insecure]\nDevWebServer = true\n```\n\nAlternatively, you can generate self signed certificates using `tools/bin/self-signed-certs` or [manually](https://github.com/smartcontractkit/chainlink/wiki/Creating-Self-Signed-Certificates).\n\nTo start your Chainlink node, simply run:\n\n```bash\nchainlink node start\n```\n\nBy default this will start on port 6688. You should be able to access the UI at [http://localhost:6688/](http://localhost:6688/).\n\nChainlink provides a remote CLI client as well as a UI. Once your node has started, you can open a new terminal window to use the CLI. You will need to log in to authorize the client first:\n\n```bash\nchainlink admin login\n```\n\n(You can also set `ADMIN_CREDENTIALS_FILE=/path/to/credentials/file` in future if you like, to avoid having to login again).\n\nNow you can view your current jobs with:\n\n```bash\nchainlink jobs list\n```\n\nTo find out more about the Chainlink CLI, you can always run `chainlink help`.\n\nCheck out the [doc](https://docs.chain.link/) pages on [Jobs](https://docs.chain.link/docs/jobs/) to learn more about how to create Jobs.\n\n### Configuration\n\nNode configuration is managed by a combination of environment variables and direct setting via API/UI/CLI.\n\nCheck the [official documentation](https://docs.chain.link/docs/configuration-variables) for more information on how to configure your node.\n\n### External Adapters\n\nExternal adapters are what make Chainlink easily extensible, providing simple integration of custom computations and specialized APIs. A Chainlink node communicates with external adapters via a simple REST API.\n\nFor more information on creating and using external adapters, please see our [external adapters page](https://docs.chain.link/docs/external-adapters).\n\n## Verify Official Chainlink Releases\n\nWe use `cosign` with OIDC keyless signing during the [Build, Sign and Publish Chainlink](https://github.com/smartcontractkit/chainlink/actions/workflows/build-publish.yml) workflow.\n\nIt is encourage for any node operator building from the official Chainlink docker image to verify the tagged release version was did indeed built from this workflow.\n\nYou will need `cosign` in order to do this verification. [Follow the instruction here to install cosign](https://docs.sigstore.dev/system_config/installation/).\n\n```bash\n# tag is the tagged release version - ie. v2.16.0\ncosign verify public.ecr.aws/chainlink/chainlink:${tag} \\\n      --certificate-oidc-issuer https://token.actions.githubusercontent.com \\\n      --certificate-identity \"https://github.com/smartcontractkit/chainlink/.github/workflows/build-publish.yml@refs/tags/${tag}\"\n```\n\n## Development\n\n### Running tests\n\n1. [Install pnpm 9 via npm](https://pnpm.io/installation#using-npm)\n\n2. Install [gencodec](https://github.com/fjl/gencodec) and [jq](https://stedolan.github.io/jq/download/) to be able to run `go generate ./...` and `make abigen`\n\n3. Install mockery\n\n`make mockery`\n\nUsing the `make` command will install the correct version.\n\n4. Build contracts:\n\n```bash\npushd contracts\npnpm i\npnpm compile:native\npopd\n```\n\n4. Generate and compile static assets:\n\n```bash\nmake generate\n```\n\n5. Prepare your development environment:\n\nThe tests require a postgres database. In turn, the environment variable\n`CL_DATABASE_URL` must be set to value that can connect to `_test` database, and the user must be able to create and drop\nthe given `_test` database.\n\nNote: Other environment variables should not be set for all tests to pass\n\nThere helper script for initial setup to create an appropriate test user. It requires postgres to be running on localhost at port 5432. You will be prompted for\nthe `postgres` user password \n\n```bash\nmake setup-testdb\n```\n\nThis script will save the `CL_DATABASE_URL` in `.dbenv`\n\nChanges to database require migrations to be run. Similarly, `pull`'ing the repo may require migrations to run.\nAfter the one-time setup above:\n```\nsource .dbenv\nmake testdb\n```\n\nIf you encounter the error `database accessed by other users (SQLSTATE 55006) exit status 1`\nand you want force the database creation then use\n```\nsource .dbenv\nmake testdb-force\n```\n\n\n7. Run tests:\n\n```bash\ngo test ./...\n```\n\n#### Notes\n\n- The `parallel` flag can be used to limit CPU usage, for running tests in the background (`-parallel=4`) - the default is `GOMAXPROCS`\n- The `p` flag can be used to limit the number of _packages_ tested concurrently, if they are interferring with one another (`-p=1`)\n- The `-short` flag skips tests which depend on the database, for quickly spot checking simpler tests in around one minute\n\n#### Race Detector\n\nAs of Go 1.1, the runtime includes a data race detector, enabled with the `-race` flag. This is used in CI via the\n`tools/bin/go_core_race_tests` script. If the action detects a race, the artifact on the summary page will include\n`race.*` files with detailed stack traces.\n\n\u003e _**It will not issue false positives, so take its warnings seriously.**_\n\nFor local, targeted race detection, you can run:\n\n```bash\nGORACE=\"log_path=$PWD/race\" go test -race ./core/path/to/pkg -count 10\nGORACE=\"log_path=$PWD/race\" go test -race ./core/path/to/pkg -count 100 -run TestFooBar/sub_test\n```\n\nhttps://go.dev/doc/articles/race_detector\n\n#### Fuzz tests\n\nAs of Go 1.18, fuzz tests `func FuzzXXX(*testing.F)` are included as part of the normal test suite, so existing cases are executed with `go test`.\n\nAdditionally, you can run active fuzzing to search for new cases:\n\n```bash\ngo test ./pkg/path -run=XXX -fuzz=FuzzTestName\n```\n\nhttps://go.dev/doc/fuzz/\n\n### Go Modules\n\nThis repository contains three Go modules:\n\n```mermaid\nflowchart RL\n    github.com/smartcontractkit/chainlink/v2\n    github.com/smartcontractkit/chainlink/integration-tests --\u003e github.com/smartcontractkit/chainlink/v2\n    github.com/smartcontractkit/chainlink/core/scripts --\u003e github.com/smartcontractkit/chainlink/v2\n\n```\nThe `integration-tests` and `core/scripts` modules import the root module using a relative replace in their `go.mod` files,\nso dependency changes in the root `go.mod` often require changes in those modules as well. After making a change, `go mod tidy`\ncan be run on all three modules using:\n```\nmake gomodtidy\n```\n\n### Solidity\n\nInside the `contracts/` directory:\n\n1. Install dependencies:\n\n```bash\npnpm i\n```\n\n2. Run tests:\n\n```bash\npnpm test\n```\nNOTE: Chainlink is currently in the process of migrating to Foundry and contains both Foundry and Hardhat tests in some versions. More information can be found here: [Chainlink Foundry Documentation](https://github.com/smartcontractkit/chainlink/blob/develop/contracts/foundry.md).\nAny 't.sol' files associated with Foundry tests, contained within the src directories will be ignored by Hardhat.\n\n### Code Generation\n\nGo generate is used to generate mocks in this project. Mocks are generated with [mockery](https://github.com/vektra/mockery) and live in core/internal/mocks.\n\n### Nix\n\nA [shell.nix](https://nixos.wiki/wiki/Development_environment_with_nix-shell) is provided for use with the [Nix package manager](https://nixos.org/). By default,we utilize the shell through [Nix Flakes](https://nixos.wiki/wiki/Flakes). \n\nNix defines a declarative, reproducible development environment. Flakes version use deterministic, frozen (`flake.lock`) dependencies to\ngain more consistency/reproducibility on the built artifacts.\n\nTo use it:\n\n1. Install [nix package manager](https://nixos.org/download.html) in your system.\n\n- Enable [flakes support](https://nixos.wiki/wiki/Flakes#Enable_flakes)\n\n2. Run `nix develop`. You will be put in shell containing all the dependencies.\n\n- Optionally, `nix develop --command $SHELL` will make use of your current shell instead of the default (bash).\n- You can use `direnv` to enable it automatically when `cd`-ing into the folder; for that, enable [nix-direnv](https://github.com/nix-community/nix-direnv) and `use flake` on it.\n\n3. Create a local postgres database:\n\n```sh\nmkdir -p $PGDATA \u0026\u0026 cd $PGDATA/\ninitdb\npg_ctl -l postgres.log -o \"--unix_socket_directories='$PWD'\" start\ncreatedb chainlink_test -h localhost\ncreateuser --superuser --password chainlink -h localhost\n# then type a test password, e.g.: chainlink, and set it in shell.nix CL_DATABASE_URL\n```\n\n4. When re-entering project, you can restart postgres: `cd $PGDATA; pg_ctl -l postgres.log -o \"--unix_socket_directories='$PWD'\" start`\n   Now you can run tests or compile code as usual.\n5. When you're done, stop it: `cd $PGDATA; pg_ctl -o \"--unix_socket_directories='$PWD'\" stop`\n\n### Changesets\n\nWe use [changesets](https://github.com/changesets/changesets) to manage versioning for libs and the services.\n\nEvery PR that modifies any configuration or code, should most likely accompanied by a changeset file.\n\nTo install `changesets`:\n  1. Install `pnpm` if it is not already installed - [docs](https://pnpm.io/installation).\n  2. Run `pnpm install`.\n\nEither after or before you create a commit, run the `pnpm changeset` command to create an accompanying changeset entry which will reflect on the CHANGELOG for the next release.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\n\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n### Tips\n\nFor more tips on how to build and test Chainlink, see our [development tips page](https://github.com/smartcontractkit/chainlink/wiki/Development-Tips).\n\n### Contributing\n\nContributions are welcome to Chainlink's source code.\n\nPlease check out our [contributing guidelines](./docs/CONTRIBUTING.md) for more details.\n\nThank you!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmartcontractkit%2Fccip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmartcontractkit%2Fccip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmartcontractkit%2Fccip/lists"}