الهدف من BNB Smart Chain هو توفير إمكانية البرمجة وقابلية التشغيل البيني لسلسلة BNB Beacon. ومن أجل احتضان المجتمع الشعبي الحالي والتكنولوجيا المتقدمة، فإنه سيجلب فوائد كبيرة من خلال البقاء متوافقًا مع جميع العقود الذكية الحالية على أدوات إيثريوم وإيثريوم. ولتحقيق ذلك، فإن الحل الأسهل هو التطوير بناءً على شوكة go-ethereum، حيث أننا نحترم العمل الرائع الذي تقوم به Ethereum كثيرًا.
تبدأ سلسلة BNB الذكية في تطويرها استنادًا إلى شوكة go-ethereum. لذلك قد ترى أن العديد من الأدوات والثنائيات وكذلك المستندات تعتمد على أدوات Ethereum، مثل الاسم "geth".
ولكن من هذا الخط الأساسي المتوافق مع EVM، تقدم BNB Smart Chain نظامًا مكونًا من 21 أداة تحقق مع إجماع إثبات السلطة المتراكمة (PoSA) الذي يمكنه دعم وقت الكتلة القصير ورسوم أقل. سيصبح المرشحون الأكثر ارتباطًا للتدقيق في عملية التوقيع المساحي مدققين وينتجون الكتل. يضمن اكتشاف الإشارة المزدوجة ومنطق القطع الآخر الأمان والاستقرار ونهائية السلسلة.
ستكون سلسلة BNB الذكية :
مزيد من التفاصيل في الورقة البيضاء.
على الرغم من الموافقة على إثبات العمل (PoW) كآلية عملية لتنفيذ شبكة لا مركزية، إلا أنها ليست صديقة للبيئة وتتطلب أيضًا عددًا كبيرًا من المشاركين للحفاظ على الأمان.
يوفر إثبات السلطة (PoA) بعض الدفاع ضد هجوم 51%، مع تحسين الكفاءة والتسامح مع مستويات معينة من اللاعبين البيزنطيين (الضارين أو المخترقين). وفي الوقت نفسه، يتعرض بروتوكول PoA للانتقاد لأنه ليس لامركزيًا مثل PoW، حيث أن المدققين، أي العقد التي تتناوب لإنتاج الكتل، لديهم جميع السلطات ويكونون عرضة للفساد والهجمات الأمنية.
تقدم سلاسل الكتل الأخرى، مثل EOS وCosmos، أنواعًا مختلفة من نائب إثبات الحصة (DPoS) للسماح لحاملي الرمز المميز بالتصويت وانتخاب مجموعة المدقق. إنه يزيد من اللامركزية ويفضل إدارة المجتمع.
للجمع بين DPoS وPoA للتوافق، تطبق BNB Smart Chain محرك إجماع جديد يسمى Parlia والذي:
سيتم تشغيل BNB على BNB Smart Chain بنفس الطريقة التي تعمل بها ETH على Ethereum بحيث تظل native token
لـ BSC. وهذا يعني أنه سيتم استخدام BNB من أجل:
gas
لنشر أو استدعاء العقد الذكي على 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 مزودًا بالعديد من الأغلفة/الملفات التنفيذية الموجودة في دليل cmd
.
يأمر | وصف |
---|---|
geth | عميل BNB Smart Chain الرئيسي الثنائي. إنها نقطة الدخول إلى شبكة BSC (الشبكة الرئيسية أو الاختبارية أو الخاصة)، القادرة على العمل كعقدة كاملة (افتراضية)، أو عقدة أرشيفية (الاحتفاظ بكل الحالة التاريخية) أو عقدة خفيفة (استرجاع البيانات مباشرة). يحتوي على نفس RPC والمزيد من الواجهة الأخرى مثل go-ethereum ويمكن استخدامه بواسطة عمليات أخرى كبوابة إلى شبكة BSC عبر نقاط نهاية JSON RPC المكشوفة أعلى وسائل نقل HTTP و/أو WebSocket و/أو IPC. geth --help وصفحة CLI لخيارات سطر الأوامر. |
clef | أداة توقيع مستقلة، والتي يمكن استخدامها كموقع خلفي لـ geth . |
devp2p | أدوات مساعدة للتفاعل مع العقد الموجودة على طبقة الشبكة، دون تشغيل blockchain كامل. |
abigen | منشئ التعليمات البرمجية المصدر لتحويل تعريفات عقود Ethereum إلى حزم Go سهلة الاستخدام وآمنة للنوع. إنه يعمل على واجهات ABI لعقد Ethereum العادي مع وظائف موسعة إذا كان الرمز الثانوي للعقد متاحًا أيضًا. ومع ذلك، فهو يقبل أيضًا ملفات مصدر Solidity، مما يجعل عملية التطوير أكثر بساطة. يرجى الاطلاع على صفحة التطبيقات اللامركزية الأصلية الخاصة بنا للحصول على التفاصيل. |
bootnode | نسخة مجردة من تطبيق عميل Ethereum الخاص بنا والتي تشارك فقط في بروتوكول اكتشاف عقدة الشبكة، ولكنها لا تقوم بتشغيل أي من بروتوكولات التطبيق ذات المستوى الأعلى. يمكن استخدامه كعقدة تمهيد خفيفة الوزن للمساعدة في العثور على أقران في الشبكات الخاصة. |
evm | إصدار الأداة المساعدة للمطور من EVM (Ethereum Virtual Machine) القادر على تشغيل مقتطفات الكود الثانوي ضمن بيئة قابلة للتكوين ووضع التنفيذ. والغرض منه هو السماح بتصحيح الأخطاء المعزولة والدقيقة لرموز تشغيل EVM (على سبيل المثال 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
قم بتنزيل أحدث لقطة لبيانات السلسلة من هنا. اتبع الدليل لتنظيم ملفاتك.
./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
قديم جدًا، وغير محدث مع المستندات الرسمية)، بالإضافة إلى واجهات برمجة التطبيقات الخاصة بالإدارة الخاصة بـ geth
. هذه الأداة اختيارية وإذا تركتها، يمكنك دائمًا إرفاقها بمثيل geth
قيد التشغيل بالفعل باستخدام geth attach
.
مزيد من التفاصيل حول تشغيل العقدة والتحول إلى مدقق
ملحوظة: على الرغم من أن بعض إجراءات الحماية الداخلية تمنع المعاملات من العبور بين الشبكة الرئيسية وشبكة الاختبار، إلا أنه يجب عليك دائمًا استخدام حسابات منفصلة للعب والمال الحقيقي. ما لم تقم بنقل الحسابات يدويًا، فسيقوم geth
افتراضيًا بفصل الشبكتين بشكل صحيح ولن يتيح أي حسابات بينهما.
كبديل لتمرير العلامات المتعددة إلى ملف geth
الثنائي، يمكنك أيضًا تمرير ملف التكوين عبر:
$ geth --config /path/to/your_config.toml
للحصول على فكرة عن الشكل الذي يجب أن يبدو عليه الملف، يمكنك استخدام الأمر الفرعي dumpconfig
لتصدير التكوين الحالي لديك:
$ geth --your-favourite-flags dumpconfig
geth
كمطور، ستحتاج عاجلاً وليس آجلاً إلى بدء التفاعل مع geth
وشبكة BSC عبر برامجك الخاصة وليس يدويًا من خلال وحدة التحكم. للمساعدة في ذلك، يحتوي geth
على دعم مدمج لواجهات برمجة التطبيقات المستندة إلى JSON-RPC (واجهات برمجة التطبيقات القياسية وواجهات برمجة التطبيقات الخاصة بـ geth
). يمكن كشفها عبر HTTP وWebSockets وIPC (مآخذ توصيل UNIX على الأنظمة الأساسية المستندة إلى UNIX والأنابيب المسماة على Windows).
يتم تمكين واجهة IPC افتراضيًا وتكشف عن جميع واجهات برمجة التطبيقات المدعومة بواسطة geth
، بينما تحتاج واجهات HTTP وWS إلى التمكين يدويًا ولا تكشف إلا مجموعة فرعية من واجهات برمجة التطبيقات لأسباب أمنية. يمكن تشغيل/إيقاف تشغيلها وتهيئتها كما تتوقع.
خيارات واجهة برمجة تطبيقات JSON-RPC المستندة إلى 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
الأصول التي يمكن من خلالها قبول طلبات WebSocket--ipcdisable
تعطيل خادم IPC-RPC--ipcapi
API المقدمة عبر واجهة IPC-RPC (افتراضي: admin,debug,eth,miner,net,personal,txpool,web3
)--ipcpath
Filename لمقبس/أنبوب IPC داخل datadir (المسارات الصريحة تهرب منه) ستحتاج إلى استخدام إمكانات بيئات البرمجة الخاصة بك (المكتبات والأدوات وما إلى ذلك) للاتصال عبر HTTP أو WS أو IPC بعقدة geth
التي تم تكوينها باستخدام العلامات المذكورة أعلاه وستحتاج إلى التحدث بـ JSON-RPC في جميع وسائل النقل. يمكنك إعادة استخدام نفس الاتصال لطلبات متعددة!
ملحوظة: يرجى فهم الآثار الأمنية المترتبة على فتح وسيلة نقل تعتمد على HTTP/WS قبل القيام بذلك! يحاول المتسللون على الإنترنت بنشاط تخريب عقد BSC باستخدام واجهات برمجة التطبيقات المكشوفة! علاوة على ذلك، يمكن لجميع علامات تبويب المتصفح الوصول إلى خوادم الويب التي يتم تشغيلها محليًا، لذلك قد تحاول صفحات الويب الضارة تخريب واجهات برمجة التطبيقات المتاحة محليًا!
Bootnodes هي عقد خفيفة الوزن للغاية وليست خلف NAT وتعمل فقط على بروتوكول الاكتشاف. عند بدء تشغيل عقدة، يجب أن تقوم بتسجيل العقدة الخاصة بك، وهو معرف عام يمكن للآخرين استخدامه للاتصال بالعقدة الخاصة بك.
أولاً، يتطلب رمز التشغيل مفتاحًا، والذي يمكن إنشاؤه باستخدام الأمر التالي، والذي سيحفظ المفتاح في ملف boot.key:
bootnode -genkey boot.key
يمكن بعد ذلك استخدام هذا المفتاح لإنشاء عقدة تمهيد كما يلي:
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 العامة v3.0، والمضمنة أيضًا في مستودعنا في ملف COPYING
.