Chainlink ขยายขีดความสามารถของสัญญาอัจฉริยะโดยทำให้สามารถเข้าถึงข้อมูลในโลกแห่งความเป็นจริงและการคำนวณนอกเครือข่าย ขณะเดียวกันก็รักษาความปลอดภัยและการรับประกันความน่าเชื่อถือที่มีอยู่ในเทคโนโลยีบล็อกเชน
การซื้อคืนนี้ประกอบด้วยโหนดหลักและสัญญาของ Chainlink โหนดหลักคือไบนารีแบบรวมที่มีให้เรียกใช้โดยตัวดำเนินการโหนดที่เข้าร่วมในเครือข่าย Oracle แบบกระจายอำนาจ เวอร์ชันหลักที่เผยแพร่ทั้งหมดมีอิมเมจ Docker ที่สร้างไว้ล่วงหน้าซึ่งพร้อมให้ดาวน์โหลดได้จาก Chainlink dockerhub หากคุณสนใจที่จะมีส่วนร่วม โปรดดูหลักเกณฑ์การบริจาคของเรา หากคุณมาที่นี่เพื่อรายงานข้อบกพร่องหรือขอคุณสมบัติ โปรดตรวจสอบปัญหาที่เปิดอยู่ในปัจจุบัน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีเริ่มต้นใช้งาน Chainlink โปรดดูเอกสารอย่างเป็นทางการของเรา แหล่งข้อมูลสำหรับนักพัฒนา Solidity สามารถพบได้ใน Chainlink Hardhat Box
Chainlink มีชุมชนที่กระตือรือร้นและเติบโตอย่างต่อเนื่อง Discord เป็นช่องทางการสื่อสารหลักที่ใช้สำหรับการสื่อสารในแต่ละวัน ตอบคำถามด้านการพัฒนา และการรวบรวมเนื้อหาที่เกี่ยวข้องกับ Chainlink ดูเอกสารชุมชนเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับบัญชีโซเชียล Chainlink ข่าวสาร และเครือข่าย
ติดตั้ง Go 1.22 และเพิ่มไดเร็กทอรี bin ของ GOPATH ลงใน PATH ของคุณ
ตัวอย่างเส้นทางสำหรับ macOS export PATH=$GOPATH/bin:$PATH
& export GOPATH=/Users/$USER/go
ติดตั้ง NodeJS v20 & pnpm v9 ผ่าน npm
การใช้ nvm เพื่อสลับระหว่างเวอร์ชันของโหนดสำหรับโปรเจ็กต์ต่างๆ อาจง่ายกว่าในระยะยาว ตัวอย่างเช่น สมมติว่า $NODE_VERSION ถูกตั้งค่าเป็นเวอร์ชันที่ถูกต้องของ NodeJS คุณสามารถรันได้: nvm install $NODE_VERSION && nvm use $NODE_VERSION
ติดตั้ง Postgres (>= 12.x) ขอแนะนำให้รัน postgres เวอร์ชันหลักล่าสุด
โปรดทราบว่าหากคุณใช้งานอิมเมจ Docker ของ Chainlink อย่างเป็นทางการ เวอร์ชัน Postgres ที่รองรับสูงสุดคือ 16.x เนื่องจากไคลเอ็นต์แบบรวม
คุณควรกำหนดค่า Postgres ให้ใช้การเชื่อมต่อ SSL (หรือสำหรับการทดสอบ คุณสามารถตั้งค่า ?sslmode=disable
ในสตริงการสืบค้น Postgres ของคุณ)
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Python 3 แล้ว (จำเป็นสำหรับ solc-select ซึ่งจำเป็นในการรวบรวมสัญญาความแข็งแกร่ง)
ดาวน์โหลด Chainlink: git clone https://github.com/smartcontractkit/chainlink && cd chainlink
สร้างและติดตั้ง Chainlink: make install
รันโหนด: chainlink help
สำหรับข้อมูลล่าสุดเกี่ยวกับการตั้งค่าสภาพแวดล้อมการพัฒนา โปรดดูคู่มือการตั้งค่าการพัฒนา
การสร้างแบบเนทีฟบน Apple Silicon ควรใช้งานได้ทันที แต่อิมเมจ Docker ต้องมีการพิจารณาเพิ่มเติม
$ สร้างนักเทียบท่า -t chainlink-develop:latest -f ./core/chainlink.Dockerfile
ในการรันโหนด Chainlink คุณต้องมีสิทธิ์เข้าถึงโหนด Ethereum ที่ทำงานอยู่ด้วยการเชื่อมต่อ websocket แบบเปิด เครือข่ายที่ใช้ Ethereum จะทำงานเมื่อคุณกำหนดค่า chain ID แล้ว เวอร์ชันโหนด Ethereum ที่ได้รับการทดสอบและรองรับในปัจจุบัน:
[สนับสนุนอย่างเป็นทางการ]
Parity/Openethereum (หมายเหตุ: Parity เลิกใช้แล้วและการสนับสนุนสำหรับไคลเอ็นต์นี้อาจถูกลบออกในอนาคต)
เก็ท
เบซู
[รองรับแต่ใช้งานไม่ได้] ไคลเอนต์เหล่านี้ได้รับการสนับสนุนโดย Chainlink แต่มีข้อบกพร่องที่ทำให้ Chainlink ไม่สามารถทำงานได้อย่างน่าเชื่อถือบนไคลเอนต์การดำเนินการเหล่านี้
ปัญหาการบล็อก Nethermind:
NethermindEth/เนเธอร์มายด์#4384
ปัญหาการบล็อก Eragon:
เอริกอนเทค/เอริกอน#4946
erigontech/erigon#4030 (ความคิดเห็น)
เราไม่สามารถแนะนำหมายเลขเวอร์ชันเฉพาะสำหรับโหนด ethereum ได้ เนื่องจากซอฟต์แวร์ได้รับการอัปเดตอย่างต่อเนื่อง แต่โดยปกติคุณควรลองใช้เวอร์ชันล่าสุดที่มีอยู่
หมายเหตุ : ตามค่าเริ่มต้น chainlink จะทำงานในโหมด TLS สำหรับการพัฒนาท้องถิ่น คุณสามารถปิดการใช้งานนี้ได้โดยใช้ dev build
โดยใช้ make chainlink-dev
และตั้งค่าฟิลด์ TOML:
[เว็บเซิร์ฟเวอร์]SecureCookies = falseTLS.HTTPSPort = 0[ไม่ปลอดภัย]DevWebServer = true
หรือคุณสามารถสร้างใบรับรองที่ลงนามด้วยตนเองโดยใช้ tools/bin/self-signed-certs
หรือด้วยตนเอง
หากต้องการเริ่มต้นโหนด Chainlink ของคุณ เพียงเรียกใช้:
โหนด chainlink เริ่มต้น
ตามค่าเริ่มต้น สิ่งนี้จะเริ่มบนพอร์ต 6688 คุณควรจะสามารถเข้าถึง UI ได้ที่ http://localhost:6688/
Chainlink มอบไคลเอ็นต์ CLI ระยะไกลและ UI เมื่อโหนดของคุณเริ่มต้นแล้ว คุณสามารถเปิดหน้าต่างเทอร์มินัลใหม่เพื่อใช้ CLI ได้ คุณจะต้องเข้าสู่ระบบเพื่ออนุญาตลูกค้าก่อน:
เข้าสู่ระบบผู้ดูแลระบบ chainlink
(คุณยังสามารถตั้งค่า ADMIN_CREDENTIALS_FILE=/path/to/credentials/file
ในอนาคตได้หากต้องการ เพื่อหลีกเลี่ยงการเข้าสู่ระบบอีกครั้ง)
ตอนนี้คุณสามารถดูงานปัจจุบันของคุณด้วย:
รายการงาน chainlink
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับ Chainlink CLI คุณสามารถเรียกใช้ chainlink help
ได้ตลอดเวลา
ตรวจสอบหน้าเอกสารเกี่ยวกับงานเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีสร้างงาน
การกำหนดค่าโหนดได้รับการจัดการโดยการผสมผสานระหว่างตัวแปรสภาพแวดล้อมและการตั้งค่าโดยตรงผ่าน API/UI/CLI
ตรวจสอบเอกสารอย่างเป็นทางการสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีกำหนดค่าโหนดของคุณ
อะแดปเตอร์ภายนอกคือสิ่งที่ทำให้ Chainlink สามารถขยายได้อย่างง่ายดาย โดยให้การผสานรวมการคำนวณแบบกำหนดเองและ API เฉพาะทางอย่างง่ายดาย โหนด Chainlink สื่อสารกับอะแดปเตอร์ภายนอกผ่าน REST API แบบธรรมดา
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและการใช้อะแดปเตอร์ภายนอก โปรดดูที่หน้าอะแดปเตอร์ภายนอกของเรา
เราใช้ cosign
กับการเซ็นชื่อแบบไม่ใช้กุญแจ OIDC ในระหว่างเวิร์กโฟลว์ Build, Sign และ Publish Chainlink
ขอแนะนำให้ผู้ดำเนินการโหนดสร้างจากอิมเมจ Docker อย่างเป็นทางการของ Chainlink เพื่อตรวจสอบว่าเวอร์ชันที่เผยแพร่ที่ติดแท็กนั้นถูกสร้างขึ้นจากเวิร์กโฟลว์นี้จริง ๆ
คุณจะต้องมี cosign
เพื่อทำการตรวจสอบนี้ ทำตามคำแนะนำที่นี่เพื่อติดตั้ง cosign
# tag เป็นเวอร์ชันที่ออกแท็ก - เช่น v2.16.0cosign ตรวจสอบ public.ecr.aws/chainlink/chainlink:${tag} --certificate-oidc-ผู้ออก https://token.actions.githubusercontent.com --certificate-identity "https://github.com/smartcontractkit/chainlink/.github/workflows/build-publish.yml@refs/tags/${tag}"
ติดตั้ง pnpm 9 ผ่าน npm
ติดตั้ง gencodec และ jq เพื่อให้สามารถรัน go generate ./...
และ make abigen
ติดตั้งการเยาะเย้ย
make mockery
การใช้คำสั่ง make
จะติดตั้งเวอร์ชันที่ถูกต้อง
สัญญาก่อสร้าง:
ผลักดันสัญญา เวลาบ่ายโมงครึ่ง pnpm คอมไพล์: Nativepopd
สร้างและรวบรวมสินทรัพย์คงที่:
ทำให้สร้าง
เตรียมสภาพแวดล้อมการพัฒนาของคุณ:
การทดสอบต้องใช้ฐานข้อมูล postgres ในทางกลับกัน ตัวแปรสภาพแวดล้อม CL_DATABASE_URL
จะต้องตั้งค่าที่สามารถเชื่อมต่อกับฐานข้อมูล _test
และผู้ใช้จะต้องสามารถสร้างและวางฐานข้อมูล _test
ที่กำหนดได้
หมายเหตุ: ไม่ควรตั้งค่าตัวแปรสภาพแวดล้อมอื่นๆ เพื่อให้การทดสอบทั้งหมดผ่าน
มีสคริปต์ตัวช่วยสำหรับการตั้งค่าเริ่มต้นเพื่อสร้างผู้ใช้ทดสอบที่เหมาะสม ต้องการให้ postgres ทำงานบน localhost ที่พอร์ต 5432 คุณจะได้รับแจ้งให้ใส่รหัสผ่านผู้ใช้ postgres
ทำการตั้งค่า testdb
สคริปต์นี้จะบันทึก CL_DATABASE_URL
ใน .dbenv
การเปลี่ยนแปลงฐานข้อมูลจำเป็นต้องมีการโยกย้าย ในทำนองเดียวกัน pull
repo อาจต้องมีการโยกย้ายจึงจะรันได้ หลังจากการตั้งค่าครั้งเดียวข้างต้น:
source .dbenv make testdb
หากคุณพบ database accessed by other users (SQLSTATE 55006) exit status 1
และคุณต้องการบังคับให้สร้างฐานข้อมูล ให้ใช้
source .dbenv make testdb-force
ทำการทดสอบ:
ไปทดสอบ ./...
สามารถใช้แฟล็ก parallel
เพื่อจำกัดการใช้งาน CPU สำหรับการรันการทดสอบในเบื้องหลัง ( -parallel=4
) - ค่าเริ่มต้นคือ GOMAXPROCS
แฟล็ก p
สามารถใช้เพื่อจำกัดจำนวน แพ็กเกจ ที่ทดสอบพร้อมกัน หากแพ็กเกจเหล่านั้นรบกวนซึ่งกันและกัน ( -p=1
)
ธง -short
ข้ามการทดสอบซึ่งขึ้นอยู่กับฐานข้อมูล เพื่อให้ตรวจสอบการทดสอบที่ง่ายกว่าได้อย่างรวดเร็วในเวลาประมาณหนึ่งนาที
ตั้งแต่ Go 1.1 รันไทม์จะรวมตัวตรวจจับการแข่งขันของข้อมูล ซึ่งเปิดใช้งานด้วยแฟล็ก -race
สิ่งนี้ใช้ใน CI ผ่านทางสคริปต์ tools/bin/go_core_race_tests
หากการดำเนินการตรวจพบการแข่งขัน อาร์ติแฟกต์ในหน้าสรุปจะรวมไฟล์ race.*
พร้อมด้วยสแต็กเทรซโดยละเอียด
มันจะไม่ออกผลบวกลวง ดังนั้นให้ปฏิบัติตามคำเตือนอย่างจริงจัง
สำหรับการตรวจจับการแข่งขันแบบกำหนดเป้าหมายในพื้นที่ คุณสามารถเรียกใช้:
GORACE="log_path=$PWD/race" ไปทดสอบ -race ./core/path/to/pkg -count 10 GORACE="log_path=$PWD/race" ไปทดสอบ -race ./core/path/to/pkg -count 100 -run TestFooBar/sub_test
https://go.dev/doc/articles/race_detector
ตั้งแต่ Go 1.18 การทดสอบ fuzz func FuzzXXX(*testing.F)
จะรวมเป็นส่วนหนึ่งของชุดการทดสอบปกติ ดังนั้นกรณีที่มีอยู่จะถูกดำเนินการด้วย go test
นอกจากนี้ คุณยังสามารถเรียกใช้ Active Fuzzing เพื่อค้นหากรณีและปัญหาใหม่ได้:
ไปทดสอบ ./pkg/path -run=XXX -fuzz=FuzzTestName
https://go.dev/doc/fuzz/
พื้นที่เก็บข้อมูลนี้มีโมดูล Go สามโมดูล:
ผังงาน 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
กำลังโหลด โมดูล integration-tests
และ core/scripts
นำเข้าโมดูลรูทโดยใช้การแทนที่แบบสัมพันธ์ในไฟล์ go.mod
ดังนั้นการเปลี่ยนแปลงการขึ้นต่อกันในรูท go.mod
มักจะต้องมีการเปลี่ยนแปลงในโมดูลเหล่านั้นเช่นกัน หลังจากทำการเปลี่ยนแปลง go mod tidy
สามารถรันบนทั้งสามโมดูลได้โดยใช้:
make gomodtidy
ภายใน contracts/
ไดเร็กทอรี:
ติดตั้งการพึ่งพา:
เวลาบ่ายโมงครึ่ง
ทำการทดสอบ:
การทดสอบพีเอ็นพีเอ็ม
หมายเหตุ: ขณะนี้ Chainlink อยู่ระหว่างการย้ายไปยัง Foundry และมีทั้งการทดสอบ Foundry และ Hardhat ในบางเวอร์ชัน สามารถดูข้อมูลเพิ่มเติมได้ที่นี่: เอกสารประกอบของ Chainlink Foundry ไฟล์ 't.sol' ใดๆ ที่เกี่ยวข้องกับการทดสอบ Foundry ซึ่งอยู่ภายในไดเร็กทอรี src จะถูกละเว้นโดย Hardhat
Go create ใช้เพื่อสร้าง mocks ในโปรเจ็กต์นี้ การเยาะเย้ยถูกสร้างขึ้นด้วยการเยาะเย้ยและอาศัยอยู่ในแกนกลาง/ภายใน/การเยาะเย้ย
shell.nix มีไว้เพื่อใช้กับตัวจัดการแพ็คเกจ Nix ตามค่าเริ่มต้น เราใช้เชลล์ผ่าน Nix Flakes
ห้ามกำหนดสภาพแวดล้อมการพัฒนาที่ประกาศและทำซ้ำได้ เวอร์ชัน Flakes ใช้การขึ้นต่อกันที่กำหนดขึ้นและแช่แข็ง ( flake.lock
) เพื่อให้มีความสอดคล้อง/การทำซ้ำมากขึ้นในอาร์ติแฟกต์ที่สร้างขึ้น
หากต้องการใช้:
ติดตั้ง nix package manager ในระบบของคุณ
เปิดใช้งานการสนับสนุนสะเก็ด
รัน nix develop
คุณจะถูกใส่ในเชลล์ที่มีการขึ้นต่อกันทั้งหมด
ทางเลือก nix develop --command $SHELL
จะใช้เชลล์ปัจจุบันของคุณแทนค่าเริ่มต้น (bash)
คุณสามารถใช้ direnv
เพื่อเปิดใช้งานโดยอัตโนมัติเมื่อ cd
เข้าไปในโฟลเดอร์ เพื่อสิ่งนั้น ให้เปิดใช้งาน nix-direnv และ use flake
กับมัน
สร้างฐานข้อมูล postgres ท้องถิ่น:
mkdir -p $PGDATA && ซีดี $PGDATA/ initdb pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" เริ่มต้น createb chainlink_test -h localhost createuser --superuser --password chainlink -h localhost# จากนั้นพิมพ์รหัสผ่านทดสอบ เช่น: chainlink และตั้งค่าใน shell.nix CL_DATABASE_URL
เมื่อกลับเข้าสู่โปรเจ็กต์ คุณสามารถรีสตาร์ท postgres: cd $PGDATA; pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start
ตอนนี้คุณสามารถรันการทดสอบหรือคอมไพล์โค้ดได้ตามปกติ
เมื่อคุณทำเสร็จแล้ว ให้หยุดมัน: cd $PGDATA; pg_ctl -o "--unix_socket_directories='$PWD'" stop
เราใช้ชุดการแก้ไขเพื่อจัดการการกำหนดเวอร์ชันสำหรับ lib และบริการต่างๆ
PR ทุกรายการที่แก้ไขการกำหนดค่าหรือโค้ดใดๆ ควรมีไฟล์เซ็ตการแก้ไขมาด้วย
ในการติดตั้ง changesets
:
ติดตั้ง pnpm
หากยังไม่ได้ติดตั้ง - เอกสาร
เรียกใช้ pnpm install
ไม่ว่าจะหลังจากหรือก่อนที่คุณจะสร้างการคอมมิต ให้รันคำสั่ง pnpm changeset
เพื่อสร้างรายการเซ็ตการแก้ไขที่แนบมาซึ่งจะสะท้อนถึง CHANGELOG สำหรับรีลีสถัดไป
รูปแบบจะขึ้นอยู่กับ Keep a Changelog
และโปรเจ็กต์นี้เป็นไปตาม Semantic Versioning
สำหรับเคล็ดลับเพิ่มเติมเกี่ยวกับวิธีสร้างและทดสอบ Chainlink โปรดดูหน้าเคล็ดลับการพัฒนาของเรา
การมีส่วนร่วมยินดีต้อนรับสู่ซอร์สโค้ดของ Chainlink
โปรดตรวจสอบหลักเกณฑ์การสนับสนุนของเราสำหรับรายละเอียดเพิ่มเติม
ขอบคุณ!