开源
Chainlink:基于区块链技术的去中心化的预言机网络
来源:元经纪     阅读:483
网站管理员
发布于 2023-02-03 09:34
查看主页

概述

Chainlink是一种基于区块链技术的去中心化的预言机网络。它使用智能合约连接链上和链下的数据源或服务,为区块链应用程序提供实时的、可靠的、安全的外部数据输入和输出。简单来说,Chainlink可以让智能合约获取到外部数据,使得区块链应用更具有实用性和可扩展性。同时,Chainlink网络也通过多个节点进行数据验证和交叉验证,保证数据的可信度和安全性。

这个 repo 包含 Chainlink 核心节点和合约。核心节点是捆绑的二进制文件,可由参与去中心化预言机网络的节点运营商运行。所有主要发行版本都有预构建的 docker 镜像,可从Chainlink dockerhub下载。

构建 Chainlink

  1. 安装 Go 1.19,并将你的 GOPATH 的bin 目录添加到你的 PATH
    • macOS 的示例路径export PATH=$GOPATH/bin:$PATH&export GOPATH=/Users/$USER/go
  2. 通过 npm安装NodeJS和pnpm 。
    • 从长远来看,使用nvm在不同项目的节点版本之间切换可能更容易。例如,假设 $NODE_VERSION 设置为有效的 NodeJS 版本,您可以运行:nvm install $NODE_VERSION && nvm use $NODE_VERSION
  3. 安装Postgres(>= 11.x 和 < 15.x)。
    • 您应该将 Postgres 配置为使用 SSL 连接(或者为了测试您可以?sslmode=disable在 Postgres 查询字符串中设置)。
  4. 确保安装了 Python 3(这是编译 solidity 合约所需的solc-select所必需的)
  5. [hidecontent type="logged" desc="隐藏内容:登录后可查看"]

    1. 下载链接:git clone https://github.com/smartcontractkit/chainlink && cd chainlink
    2. 构建并安装 Chainlink:make install
    3. 运行节点:chainlink help

    苹果硅 - ARM64

    基于 Apple Silicon 的本机构建应该开箱即用,但 Docker 映像需要更多考虑。

    Chainlink Docker 镜像目前间接依赖于 WebAssemby,因为我们的terra-money/core(CosmWasm) 依赖于smartcontractkit/chainlink-terra. 这种依赖需要一个本地libwasmvm库,它需要根据底层系统架构来获取。

    默认情况下,将在 ARM64 系统(Apple Silicon)上构建支持 ARM64 的 Docker 映像,但也可以选择添加额外的LIBWASMVM_ARCH构建参数并在aarch64或之间进行选择x86_64

    # LIBWASMVM_ARCH (libwasmvm.so) architecture choice, defaults to output of `uname -m` (arch) if unset
    $ docker build . -t chainlink-develop:latest -f ./core/chainlink.Dockerfile --build-arg LIBWASMVM_ARCH=aarch64

    运行本地 Chainlink 节点

    注意:默认情况下,chainlink 将以 TLS 模式运行。对于本地开发,您可以通过设置以下环境变量来禁用此功能:

    CHAINLINK_DEV=true
    CHAINLINK_TLS_PORT=0
    SECURE_COOKIES=false
    

    tools/bin/self-signed-certs或者,您可以使用或手动生成自签名证书。

    要启动您的 Chainlink 节点,只需运行:

    chainlink node start

    默认情况下,这将在端口 6688 上启动。您应该能够通过http://localhost:6688/访问 UI 。

    Chainlink 提供远程 CLI 客户端和 UI。节点启动后,您可以打开一个新的终端窗口来使用 CLI。您需要先登录以授权客户端:

    chainlink admin login

    (如果你愿意,你也可以ADMIN_CREDENTIALS_FILE=/path/to/credentials/file在以后设置,以避免再次登录)。

    现在您可以通过以下方式查看您当前的工作:

    chainlink jobs list

    要了解有关 Chainlink CLI 的更多信息,您可以随时运行chainlink help.

    查看Jobs的文档页面以了解有关如何创建 Jobs 的更多信息。

    配置

    节点配置由环境变量和通过 API/UI/CLI 直接设置的组合管理。

    查看官方文档以获取有关如何配置节点的更多信息。

    外部适配器

    外部适配器使 Chainlink 易于扩展,提供自定义计算和专用 API 的简单集成。Chainlink 节点通过简单的 REST API 与外部适配器通信。

    有关创建和使用外部适配器的更多信息,请参阅我们的外部适配器页面

    发展

    运行测试

    1. 通过 npm 安装 pnpm

    2. 安装gencodecjq以便能够运行go generate ./...make abigen

    3. 安装mockery

    make mockery

    使用该make命令将安装正确的版本。

    1. 建立合同:
    pushd contracts
    pnpm i
    pnpm compile:native
    popd
    1. 生成编译静态资源:
    go generate ./...
    1. 准备你的开发环境:
    export DATABASE_URL=postgresql://127.0.0.1:5432/chainlink_test?sslmode=disable
    export CL_DATABASE_URL=$DATABASE_URL

    注意:不应设置其他环境变量以使所有测试都通过

    1. 删除/创建测试数据库并运行迁移:
    go run ./core/main.go local db preparetest
    

    如果您最终修改了数据库的迁移,则需要重新运行

    1. 运行测试:
    go test ./...

    笔记

    • parallel标志可用于限制 CPU 使用率,用于在后台运行测试 ( -parallel=4) - 默认为GOMAXPROCS
    • p标志可用于限制同时测试的的数量,如果它们相互干扰(-p=1
    • -short标志跳过依赖于数据库的测试,以便在大约一分钟内快速抽查更简单的测试

    检测器

    从 Go 1.1 开始,运行时包含一个数据竞争检测器,使用-raceflag 启用。这是通过 tools/bin/go_core_race_tests脚本在 CI 中使用的。如果操作检测到竞争,摘要页面上的工件将包含 race.*具有详细堆栈跟踪的文件。

    它不会发出误报,所以请认真对待它的警告。

    对于本地的、有针对性的种族检测,您可以运行:

    GORACE="log_path=$PWD/race" go test -race ./core/path/to/pkg -count 10
    GORACE="log_path=$PWD/race" go test -race ./core/path/to/pkg -count 100 -run TestFooBar/sub_test

    https://go.dev/doc/articles/race_detector

    模糊测试

    从 Go 1.18 开始,模糊测试func FuzzXXX(*testing.F)作为普通测试套件的一部分包含在内,因此现有案例使用go test.

    此外,您可以运行主动模糊测试来搜索新案例:

    go test ./pkg/path -run=XXX -fuzz=FuzzTestName

    https://go.dev/doc/fuzz/

    坚固性

    目录内contracts/

    1. 安装依赖项:
    pnpm i
    1. 运行测试:
    pnpm test

    代码生成

    Go generate 用于在该项目中生成模拟。模拟是用嘲讽生成的,存在于核心/内部/模拟中。

    Nix

    提供了一个shell.nix用于与Nix 包管理器一起使用,具有可选的薄片支持。它定义了一个声明式的、可重现的开发环境。Flakes 版本使用确定性的、冻结的 ( flake.lock) 依赖项,而非 flakes shell 将使用您频道的包版本。

    使用它:

    1. 在您的系统中安装nix 包管理器
    1. 运行nix-shell。您将被放入包含所有依赖项的 shell 中。
    • 要使用 flakes 版本,请运行nix develop而不是nix-shell. 可选地,nix develop --command $SHELL将使用您当前的 shell 而不是默认的 (bash)。
    • 您可以使用-ing 进入文件夹direnv时自动启用它;cd为此,启用nix -direnv或启用它。use nixuse flake
    1. 创建本地 postgres 数据库:
    mkdir -p $PGDATA && cd $PGDATA/
    initdb
    pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start
    createdb chainlink_test -h localhost
    createuser --superuser --password chainlink -h localhost
    # then type a test password, e.g.: chainlink, and set it in shell.nix DATABASE_URL
    1. 重新进入项目时,您可以重新启动 postgres:cd $PGDATA; pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start 现在您可以像往常一样运行测试或编译代码。
    2. 完成后,停止它:cd $PGDATA; pg_ctl -o "--unix_socket_directories='$PWD'" stop

    [/hidecontent]

     
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
大快人心!网红博主张玄化被禁言:宣称米汤可完全代替奶粉母乳
看样学样!青岛中小企业探路数字化转型
信通院专家:人才培养激活企业数字化转型,实际应用成关键
《黑神话:悟空》员工人均月薪2.4万:低于行业均值
涂在锂电池上的神奇“膜”法

首页

分类

定制方案

消息

我的