เป้าหมายของ BNB Smart Chain คือการนำความสามารถในการตั้งโปรแกรมและการทำงานร่วมกันมาสู่ BNB Beacon Chain เพื่อที่จะยอมรับชุมชนยอดนิยมและเทคโนโลยีขั้นสูงที่มีอยู่ จะนำมาซึ่งผลประโยชน์มหาศาลโดยเข้ากันได้กับสัญญาอัจฉริยะทั้งหมดที่มีอยู่ในเครื่องมือ Ethereum และ Ethereum และเพื่อให้บรรลุเป้าหมายนั้น ทางออกที่ง่ายที่สุดคือการพัฒนาโดยใช้ go-ethereum fork เนื่องจากเราเคารพผลงานอันยอดเยี่ยมของ Ethereum เป็นอย่างมาก
BNB Smart Chain เริ่มการพัฒนาโดยใช้ go-ethereum fork ดังนั้นคุณอาจเห็นเครื่องมือ ไบนารี่ และเอกสารมากมายที่อิงจาก Ethereum เช่น ชื่อ "geth"
แต่จากพื้นฐานที่เข้ากันได้กับ EVM นั้น BNB Smart Chain แนะนำระบบเครื่องมือตรวจสอบความถูกต้อง 21 ตัวพร้อมฉันทามติ Proof of Staked Authority (PoSA) ที่สามารถรองรับระยะเวลาบล็อกสั้นและค่าธรรมเนียมที่ต่ำกว่า ผู้ตรวจสอบความถูกต้องที่ถูกผูกมัดมากที่สุดในการเดิมพันจะกลายเป็นผู้ตรวจสอบและสร้างบล็อก การตรวจจับสัญญาณคู่และลอจิกแบบเฉือนอื่น ๆ รับประกันความปลอดภัย ความเสถียร และขั้นสุดท้ายของห่วงโซ่
BNB Smart Chain จะเป็น:
รายละเอียดเพิ่มเติมในเอกสารไวท์เปเปอร์
แม้ว่า Proof-of-Work (PoW) จะได้รับการอนุมัติให้เป็นกลไกในทางปฏิบัติในการใช้เครือข่ายแบบกระจายอำนาจ แต่ก็ไม่เป็นมิตรต่อสิ่งแวดล้อม และยังต้องมีผู้เข้าร่วมจำนวนมากเพื่อรักษาความปลอดภัย
Proof-of-Authority (PoA) ให้การป้องกันการโจมตี 51% พร้อมประสิทธิภาพที่ดีขึ้นและความทนทานต่อผู้เล่น Byzantine บางระดับ (ที่เป็นอันตรายหรือถูกแฮ็ก) ในขณะเดียวกัน โปรโตคอล PoA ถูกวิพากษ์วิจารณ์มากที่สุดว่าไม่ได้รับการกระจายอำนาจเท่ากับ PoW เนื่องจากผู้ตรวจสอบความถูกต้อง เช่น โหนดที่ผลัดกันสร้างบล็อก มีอำนาจทั้งหมด และมีแนวโน้มที่จะเกิดการทุจริตและการโจมตีด้านความปลอดภัย
บล็อกเชนอื่น ๆ เช่น EOS และ Cosmos ทั้งคู่แนะนำรอง Proof of Stake (DPoS) ประเภทต่างๆ เพื่อให้ผู้ถือโทเค็นสามารถลงคะแนนและเลือกชุดเครื่องมือตรวจสอบได้ มันเพิ่มการกระจายอำนาจและสนับสนุนการกำกับดูแลชุมชน
เพื่อรวม DPoS และ PoA เข้าด้วยกันเป็นเอกฉันท์ BNB Smart Chain ได้ใช้กลไกฉันทามติใหม่ที่เรียกว่า Parlia ที่:
BNB จะทำงานบน BNB Smart Chain ในลักษณะเดียวกับที่ ETH ทำงานบน Ethereum เพื่อให้ยังคงเป็น native token
สำหรับ BSC ซึ่งหมายความว่า BNB จะถูกนำมาใช้เพื่อ:
gas
เพื่อปรับใช้หรือเรียกใช้ Smart Contract บน BSC รายการด้านล่างนี้หลายรายการเหมือนหรือคล้ายกับ go-ethereum
สำหรับข้อกำหนดเบื้องต้นและคำแนะนำในการสร้างโดยละเอียด โปรดอ่านคำแนะนำในการติดตั้ง
การสร้าง geth
ต้องใช้ทั้ง Go (เวอร์ชัน 1.21 หรือใหม่กว่า) และคอมไพเลอร์ C (GCC 5 หรือสูงกว่า) คุณสามารถติดตั้งได้โดยใช้ตัวจัดการแพ็คเกจที่คุณชื่นชอบ เมื่อติดตั้งการพึ่งพาแล้วให้รัน
make geth
หรือเพื่อสร้างชุดสาธารณูปโภคเต็มรูปแบบ:
make all
หากคุณได้รับข้อผิดพลาดดังกล่าวเมื่อรันโหนดด้วยไบนารี่ที่สร้างขึ้นเอง:
Caught SIGILL in blst_cgo_init, consult < blst > /bindinds/go/README.md.
โปรดลองเพิ่มตัวแปรสภาพแวดล้อมต่อไปนี้และสร้างใหม่อีกครั้ง:
export CGO_CFLAGS= " -O -D__BLST_PORTABLE__ "
export CGO_CFLAGS_ALLOW= " -O -D__BLST_PORTABLE__ "
โปรเจ็กต์ bsc มาพร้อมกับ wrapper/executable หลายตัวที่พบในไดเร็กทอรี cmd
สั่งการ | คำอธิบาย |
---|---|
geth | ไบนารีไคลเอ็นต์ BNB Smart Chain หลัก เป็นจุดเริ่มต้นเข้าสู่เครือข่าย BSC (เครือข่ายหลัก เครือข่ายทดสอบ หรือเครือข่ายส่วนตัว) สามารถทำงานเป็นโหนดเต็ม (ค่าเริ่มต้น) โหนดเก็บถาวร (รักษาสถานะประวัติทั้งหมด) หรือโหนดแสง (ดึงข้อมูลสด) มี RPC และอินเทอร์เฟซอื่น ๆ ที่เหมือนกันและมากกว่า go-ethereum และสามารถนำมาใช้โดยกระบวนการอื่น ๆ เป็นเกตเวย์เข้าสู่เครือข่าย BSC ผ่านทางจุดสิ้นสุด JSON RPC ที่เปิดเผยที่ด้านบนของการขนส่ง HTTP, WebSocket และ/หรือ IPC geth --help และหน้า CLI สำหรับตัวเลือกบรรทัดคำสั่ง |
clef | เครื่องมือลงนามแบบสแตนด์อโลน ซึ่งสามารถใช้เป็นผู้ลงนามแบ็กเอนด์สำหรับ geth ได้ |
devp2p | ยูทิลิตี้ในการโต้ตอบกับโหนดบนเลเยอร์เครือข่ายโดยไม่ต้องใช้บล็อคเชนเต็มรูปแบบ |
abigen | ตัวสร้างซอร์สโค้ดเพื่อแปลงคำจำกัดความสัญญา Ethereum ให้เป็นแพ็คเกจ Go ที่ปลอดภัยและใช้เวลาคอมไพล์ที่ใช้งานง่าย มันทำงานบน ABI สัญญา Ethereum ธรรมดาพร้อมฟังก์ชันการทำงานที่ขยายเพิ่มเติม หากมีรหัสไบต์ของสัญญาด้วย อย่างไรก็ตาม มันยังยอมรับไฟล์ต้นฉบับ Solidity อีกด้วย ทำให้การพัฒนามีความคล่องตัวมากขึ้น โปรดดูหน้า Native DApps ของเราเพื่อดูรายละเอียด |
bootnode | เวอร์ชันที่แยกออกของการใช้งานไคลเอนต์ Ethereum ของเราที่เข้าร่วมในโปรโตคอลการค้นพบโหนดเครือข่ายเท่านั้น แต่ไม่ได้รันโปรโตคอลแอปพลิเคชันระดับที่สูงกว่าใด ๆ สามารถใช้เป็นโหนดบูตสแตรปแบบน้ำหนักเบาเพื่อช่วยในการค้นหาเพียร์ในเครือข่ายส่วนตัว |
evm | เวอร์ชันยูทิลิตี้สำหรับนักพัฒนาของ EVM (Ethereum Virtual Machine) ที่สามารถเรียกใช้ข้อมูลโค้ดไบต์ภายในสภาพแวดล้อมที่กำหนดค่าได้และโหมดการดำเนินการ จุดประสงค์คือเพื่อให้สามารถแยกส่วนการดีบัก EVM opcodes แบบละเอียดได้ (เช่น evm --code 60ff60ff --debug run ) |
rlpdump | เครื่องมือยูทิลิตี้สำหรับนักพัฒนาในการแปลงดัมพ์ RLP ไบนารี (คำนำหน้าความยาวแบบเรียกซ้ำ) (การเข้ารหัสข้อมูลที่ใช้โดยโปรโตคอล Ethereum ทั้งเครือข่ายและตามฉันทามติ) เพื่อแสดงลำดับชั้นที่เป็นมิตรต่อผู้ใช้ (เช่น rlpdump --hex CE0183FFFFFFC4C304050583616263 ) |
geth
การดำเนินการผ่านแฟล็กบรรทัดคำสั่งที่เป็นไปได้ทั้งหมดนั้นอยู่นอกขอบเขตที่นี่ (โปรดดูหน้า CLI Wiki ของเรา) แต่เราได้แจกแจงคอมโบพารามิเตอร์ทั่วไปบางประการเพื่อให้คุณเร่งความเร็วได้อย่างรวดเร็วเกี่ยวกับวิธีการเรียกใช้อินสแตนซ์ geth
ของคุณเอง
ฮาร์ดแวร์ต้องเป็นไปตามข้อกำหนดบางประการเพื่อรันโหนดเต็มบนเมนเน็ต:
ข้อกำหนดสำหรับเทสเน็ต:
# Linux
wget $( curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest | grep browser_ | grep geth_linux | cut -d " -f4 )
mv geth_linux geth
chmod -v u+x geth
# MacOS
wget $( curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest | grep browser_ | grep geth_mac | cut -d " -f4 )
mv geth_macos geth
chmod -v u+x geth
//== mainnet
wget $( curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest | grep browser_ | grep mainnet | cut -d " -f4 )
unzip mainnet.zip
//== testnet
wget $( curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest | grep browser_ | grep testnet | cut -d " -f4 )
unzip testnet.zip
ดาวน์โหลด chaindata snapshot ล่าสุดได้จากที่นี่ ทำตามคำแนะนำเพื่อจัดโครงสร้างไฟล์ของคุณ
./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0
# # It is recommend to run fullnode with `--tries-verify-mode none` if you want high performance and care little about state consistency
# # It will run with Hash-Base Storage Scheme by default
./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none
# # It runs fullnode with Path-Base Storage Scheme.
# # It will enable inline state prune, keeping the latest 90000 blocks' history state by default.
./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none --state.scheme path
ตรวจสอบบันทึกจาก ./node/bsc.log ตามค่าเริ่มต้น เมื่อโหนดเริ่มการซิงค์ ควรจะเห็นผลลัพธ์ต่อไปนี้:
t=2022-09-08T13:00:27+0000 lvl=info msg= " Imported new chain segment " blocks=1 txs=177 mgas=17.317 elapsed=31.131ms mgasps=556.259 number=21,153,429 hash=0x42e6b54ba7106387f0650defc62c9ace3160b427702dab7bd1c5abb83a32d8db dirty= " 0.00 B "
t=2022-09-08T13:00:29+0000 lvl=info msg= " Imported new chain segment " blocks=1 txs=251 mgas=39.638 elapsed=68.827ms mgasps=575.900 number=21,153,430 hash=0xa3397b273b31b013e43487689782f20c03f47525b4cd4107c1715af45a88796e dirty= " 0.00 B "
t=2022-09-08T13:00:33+0000 lvl=info msg= " Imported new chain segment " blocks=1 txs=197 mgas=19.364 elapsed=34.663ms mgasps=558.632 number=21,153,431 hash=0x0c7872b698f28cb5c36a8a3e1e315b1d31bda6109b15467a9735a12380e2ad14 dirty= " 0.00 B "
เริ่มต้นคอนโซล JavaScript แบบโต้ตอบในตัวของ geth
(ผ่านคำสั่งย่อย console
ต่อท้าย) ซึ่งคุณสามารถโต้ตอบโดยใช้วิธี web3
(หมายเหตุ: เวอร์ชัน web3
ที่รวมอยู่ใน geth
นั้นเก่ามาก และไม่ทันสมัยกับเอกสารอย่างเป็นทางการ) รวมถึง API การจัดการของ geth
เอง เครื่องมือนี้เป็นทางเลือก และหากคุณปล่อยทิ้งไว้ คุณสามารถแนบไปกับอินสแตนซ์ geth
ที่กำลังทำงานอยู่แล้วด้วย geth attach
รายละเอียดเพิ่มเติมเกี่ยวกับการรันโหนดและการเป็นผู้ตรวจสอบความถูกต้อง
หมายเหตุ: แม้ว่ามาตรการป้องกันภายในบางอย่างจะป้องกันไม่ให้ธุรกรรมข้ามระหว่างเครือข่ายหลักและเครือข่ายทดสอบ แต่คุณควรใช้บัญชีแยกกันสำหรับการเล่นและเงินจริง เว้นแต่คุณจะย้ายบัญชีด้วยตนเอง ตามค่าเริ่มต้น geth
จะแยกเครือข่ายทั้งสองอย่างถูกต้อง และจะไม่ทำให้บัญชีใดๆ สามารถใช้งานได้ระหว่างเครือข่ายเหล่านั้น
อีกทางเลือกหนึ่งในการส่งแฟล็กจำนวนมากไปยังไบนารี geth
คุณยังสามารถส่งไฟล์การกำหนดค่าผ่าน:
$ geth --config /path/to/your_config.toml
หากต้องการทราบว่าไฟล์ควรมีลักษณะอย่างไร คุณสามารถใช้คำสั่งย่อย dumpconfig
เพื่อส่งออกการกำหนดค่าที่มีอยู่:
$ geth --your-favourite-flags dumpconfig
geth
โดยทางโปรแกรม ในฐานะนักพัฒนา ไม่ช้าก็เร็ว คุณจะต้องเริ่มโต้ตอบกับ geth
และเครือข่าย BSC ผ่านโปรแกรมของคุณเอง ไม่ใช่ด้วยตนเองผ่านคอนโซล เพื่อช่วยสิ่งนี้ geth
ได้รองรับ API ที่ใช้ JSON-RPC ในตัว (API มาตรฐานและ API เฉพาะ geth
) สิ่งเหล่านี้สามารถเปิดเผยได้ผ่านทาง HTTP, WebSockets และ IPC (ซ็อกเก็ต UNIX บนแพลตฟอร์มที่ใช้ UNIX และไปป์ที่มีชื่อบน Windows)
อินเทอร์เฟซ IPC ถูกเปิดใช้งานตามค่าเริ่มต้นและเปิดเผย API ทั้งหมดที่รองรับโดย geth
ในขณะที่อินเทอร์เฟซ HTTP และ WS จำเป็นต้องเปิดใช้งานด้วยตนเองและเปิดเผยเฉพาะชุดย่อยของ API เนื่องจากเหตุผลด้านความปลอดภัย สิ่งเหล่านี้สามารถเปิด/ปิดและกำหนดค่าได้ตามที่คุณคาดหวัง
ตัวเลือก JSON-RPC API ที่ใช้ HTTP:
--http
เปิดใช้งานเซิร์ฟเวอร์ HTTP-RPC--http.addr
อินเทอร์เฟซการฟังเซิร์ฟเวอร์ HTTP-RPC (ค่าเริ่มต้น: localhost
)--http.port
พอร์ตการฟังเซิร์ฟเวอร์ HTTP-RPC (ค่าเริ่มต้น: 8545
)--http.api
API นำเสนอผ่านอินเทอร์เฟซ HTTP-RPC (ค่าเริ่มต้น: eth,net,web3
)--http.corsdomain
จุลภาคคั่นรายการโดเมนที่จะยอมรับคำขอข้ามต้นทาง (บังคับใช้เบราว์เซอร์)--ws
เปิดใช้งานเซิร์ฟเวอร์ WS-RPC--ws.addr
อินเทอร์เฟซการฟังเซิร์ฟเวอร์ WS-RPC (ค่าเริ่มต้น: localhost
)--ws.port
พอร์ตการฟังเซิร์ฟเวอร์ WS-RPC (ค่าเริ่มต้น: 8546
)--ws.api
API นำเสนอผ่านอินเทอร์เฟซ WS-RPC (ค่าเริ่มต้น: eth,net,web3
)--ws.origins
Origins ที่จะยอมรับคำขอ WebSocket--ipcdisable
ปิดการใช้งานเซิร์ฟเวอร์ IPC-RPC--ipcapi
API นำเสนอผ่านอินเทอร์เฟซ IPC-RPC (ค่าเริ่มต้น: admin,debug,eth,miner,net,personal,txpool,web3
)--ipcpath
ชื่อไฟล์สำหรับซ็อกเก็ต / ไปป์ IPC ภายใน datadir (เส้นทางที่ชัดเจนจะหลบหนี) คุณจะต้องใช้ความสามารถของสภาพแวดล้อมการเขียนโปรแกรมของคุณเอง (ไลบรารี เครื่องมือ ฯลฯ) เพื่อเชื่อมต่อผ่าน HTTP, WS หรือ IPC ไปยังโหนด geth
ที่กำหนดค่าด้วยแฟล็กด้านบน และคุณจะต้องพูด JSON-RPC ในการขนส่งทั้งหมด คุณสามารถใช้การเชื่อมต่อเดียวกันซ้ำได้สำหรับคำขอหลายรายการ!
หมายเหตุ: โปรดทำความเข้าใจผลกระทบด้านความปลอดภัยของการเปิดการขนส่งแบบ HTTP/WS ก่อนที่จะดำเนินการดังกล่าว! แฮกเกอร์บนอินเทอร์เน็ตกำลังพยายามล้มล้างโหนด BSC ด้วย API ที่เปิดเผย! นอกจากนี้ แท็บเบราว์เซอร์ทั้งหมดยังสามารถเข้าถึงเว็บเซิร์ฟเวอร์ที่ทำงานในเครื่องได้ ดังนั้นหน้าเว็บที่เป็นอันตรายจึงสามารถพยายามบ่อนทำลาย API ที่มีอยู่ในเครื่องได้!
Bootnode เป็นโหนดที่มีน้ำหนักเบาเป็นพิเศษซึ่งไม่ได้อยู่หลัง NAT และใช้งานเพียงโปรโตคอลการค้นหาเท่านั้น เมื่อคุณเริ่มต้นโหนด โหนดควรบันทึกอีโหนดของคุณ ซึ่งเป็นตัวระบุสาธารณะที่ผู้อื่นสามารถใช้เพื่อเชื่อมต่อกับโหนดของคุณได้
ขั้นแรก bootnode ต้องใช้คีย์ ซึ่งสามารถสร้างได้ด้วยคำสั่งต่อไปนี้ ซึ่งจะบันทึกคีย์ลงใน boot.key:
bootnode -genkey boot.key
คีย์นี้สามารถใช้เพื่อสร้าง bootnode ได้ดังนี้:
bootnode -nodekey boot.key -addr :30311 -network bsc
การเลือกพอร์ตที่ส่งไปยัง -addr นั้นขึ้นอยู่กับอำเภอใจ คำสั่ง bootnode ส่งคืนบันทึกต่อไปนี้ไปยังเทอร์มินัล เพื่อยืนยันว่าคำสั่งกำลังทำงานอยู่:
enode://3063d1c9e1b824cfbb7c7b6abafa34faec6bb4e7e06941d218d760acdd7963b274278c5c3e63914bd6d1b58504c59ec5522c56f883baceb8538674b92da48a96@127.0.0.1:0?discport=30311
Note: you're using cmd/bootnode, a developer tool.
We recommend using a regular node as bootstrap node for production deployments.
INFO [08-21|11:11:30.687] New local node record seq=1,692,616,290,684 id=2c9af1742f8f85ce ip= udp=0 tcp=0
INFO [08-21|12:11:30.753] New local node record seq=1,692,616,290,685 id=2c9af1742f8f85ce ip=54.217.128.118 udp=30311 tcp=0
INFO [09-01|02:46:26.234] New local node record seq=1,692,616,290,686 id=2c9af1742f8f85ce ip=34.250.32.100 udp=30311 tcp=0
ขอขอบคุณที่พิจารณาช่วยเหลือเกี่ยวกับซอร์สโค้ด! เรายินดีรับความช่วยเหลือจากทุกคนบนอินเทอร์เน็ต และรู้สึกขอบคุณสำหรับการแก้ไขเล็กๆ น้อยๆ!
หากคุณต้องการสนับสนุน bsc โปรดแยก แก้ไข คอมมิต และส่งคำขอดึงเพื่อให้ผู้ดูแลตรวจสอบและรวมเข้ากับฐานโค้ดหลัก หากคุณต้องการส่งการเปลี่ยนแปลงที่ซับซ้อนมากขึ้น โปรดตรวจสอบกับผู้พัฒนาหลักก่อนในช่อง Discord ของเราเพื่อให้แน่ใจว่าการเปลี่ยนแปลงเหล่านั้นสอดคล้องกับปรัชญาทั่วไปของโปรเจ็กต์ และ/หรือรับคำติชมตั้งแต่เนิ่นๆ ซึ่งจะทำให้คุณทั้งสองพยายามได้มาก เบากว่ารวมถึงขั้นตอนการตรวจสอบและรวมของเราที่ง่ายและรวดเร็ว
โปรดตรวจสอบให้แน่ใจว่าการมีส่วนร่วมของคุณเป็นไปตามหลักเกณฑ์การเขียนโค้ดของเรา:
master
โปรดดูคู่มือนักพัฒนาสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการกำหนดค่าสภาพแวดล้อม การจัดการการขึ้นต่อกันของโปรเจ็กต์ และขั้นตอนการทดสอบ
ไลบรารี bsc (เช่น รหัสทั้งหมดที่อยู่นอกไดเร็กทอรี cmd
) ได้รับอนุญาตภายใต้ GNU Lesser General Public License v3.0 ซึ่งรวมอยู่ในพื้นที่เก็บข้อมูลของเราในไฟล์ COPYING.LESSER
ไบนารี bsc (เช่น รหัสทั้งหมดภายในไดเร็กทอรี cmd
) ได้รับอนุญาตภายใต้ GNU General Public License v3.0 ซึ่งรวมอยู่ในพื้นที่เก็บข้อมูลของเราในไฟล์ COPYING