
Obyte عبارة عن نظام تشفير مفتوح يستخدم الرسم المباشر Acyclic Graph (DAG ، الرسم البياني الموجه بدون دورات) كسجل للمعاملات بدلاً من blockchain ، مع وصول مجاني ومتساوي إلى التسجيل لجميع المشاركين. تتيح DAG ، على عكس blockchain المعتاد للجميع ، إرسال البيانات إلى سجل موزع مباشرة دون مشاركة عمال المناجم بسبب رفض القطع ومن الترتيب الصارم للمعاملات. مقارنةً بالعقود المحظورة ، لا تحتاج بنية DAG إلى فئات مميزة من المستخدمين ، مثل عمال المناجم أو المزورين أو منتجي البلوكات ، لذلك لا توجد وسطاء بين المستخدم والسجل على الشبكة ، ولكل شخص حق الوصول المتساوي والمباشر لإضافة معاملات إلى السجل.
في هذه المقالة ، أود التحدث عن Obyte ، وكلاء الحكم الذاتي ومقارنة كل هذا مع Ethereum.
ما هي وكلاء الحكم الذاتي؟
هذا برنامج يتم تخزين كود مصدره في السجل (DAG) وله عنوانه الخاص ، على غرار عناوين أي مشتركين آخرين في الشبكة. يصف البرنامج الإجراءات التي سيتم تنفيذها استجابةً لإرسال العملات المعدنية والبيانات إلى هذا العنوان. إذا كنت معتادًا على عقود Ethereum الذكية ، فإن وكلاء الحكم الذاتي قريبون جدًا من حيث معانيها.
مثال على الحياة هو آلة البيع. استجابةً لرقم المنتج المكتوب على لوحة المفاتيح وإدخال المبلغ ، يمنح الجهاز المستخدم المنتج نفسه. هناك فرق مهم واحد بين AA وآلات البيع: يتم التحكم في آلات البيع من قبل أصحابها ، ويأمل المستخدمون فقط أن تكون إجراءات الجهاز مطابقة لتوقعات المستخدم. وكلاء مستقلون مستقلون حقًا: يتم تخزين البرنامج بالكامل في DAG ، ويكون الكود المصدر مرئيًا لجميع المشاركين في الشبكة ، ولا يمكن تغييره أو تعطيله أو حذفه.
على سبيل المثال ، يمكنك برمجة AA لتبادل الرموز. بالنسبة للبرمجة ، فإن اللغة المطورة لهذه المهام هي Oscript.
تتميز Obyte أيضًا بمفهوم العقود الذكية ، ولكنها ليست مماثلة للعقود الذكية AA أو Ethereum. الفرق الرئيسي بين العقود الذكية AA و Obyte هو أن العقود الذكية ، مثل العقود العادية في العالم الحقيقي ، تعمل بين مشاركين وتقول في ظل أي شروط يمكن تنفيذ العقد. ببساطة ، مجموعة من الشروط التي تسمح بالمعاملة أو تمنعها. في الوقت نفسه ، يعتبر الوكيل المستقل مشاركًا مبرمجًا مستقلًا ، حيث نتفاعل معه ونبدأ رده (معاملات جديدة ، وما إلى ذلك).
يبدأ تنفيذ رمز AA بعد أن استقرت معاملة الزناد (أي ، كان هناك إجماع على الصفقة وبأن الإنفاق المزدوج غائب بالتأكيد). ستنفذ كل عقدة كاملة كود AA على نسختها من السجل ، وتسجل نتيجة التنفيذ في قاعدة بياناتها فقط. ليست هناك حاجة لنقل نتيجة التنفيذ إلى العقد الأخرى ، لأن حالة جميع المشاركين في الشبكة هي نفسها ونتائج التنفيذ هي حتمية ونفس الشيء بالنسبة للجميع. يتم تحديد الحالة النهائية للسجل فقط من خلال قواعد تنفيذ AA ، ولا يخضع لسيطرة عمال المناجم ولا الناخبين ولا أي شخص آخر.
لماذا هم بحاجة؟
يسمح AA في الوضع اللامركزي بإنشاء أشياء مثل
- خيارات
- العقود الآجلة
- عملات معدنية مستقرة حسابيًا
- الأصول الاصطناعية
- مشتقات أخرى
- قروض الضمان
- تداول الهامش
- التبادلات اللامركزية
- أوراكل لا مركزية
- قنوات الدفع
- الألعاب الاقتصادية
- صناع السوق
- إدارة محفظة الاستثمار التلقائي
وأكثر من ذلك بكثير ...
شفافية المستخدم
توفر Obyte منذ اليوم الأول لوجودها الفرصة لإبرام عقد ذكي بين الأشخاص بشكل يمكن فهمه للبشر. كانت الشفافية وسهولة الإدراك من قبل المستخدمين ولا تزال واحدة من المبادئ الرئيسية في إنشاء النظام الأساسي.
على الرغم من حقيقة أن Oscript هي لغة برمجة ، وقد تم إنشاؤها من أجل التصور من قبل الآلة والمبرمجين ، وليس الأشخاص العاديين ، حاولنا عدم الخروج عن مبادئنا. لذلك ، بالنسبة للأشخاص الذين ليسوا على دراية بالبرمجة ، ستحاول محفظة واجهة المستخدم الرسومية تفسير رمز AA قبل إجراء المعاملة وإظهار النتيجة للشخص بطريقة يفهمها:

Oscript - لغة الوكيل المستقلة
لن يجد المطورون الذين لديهم دراية بأي لغة تشبه لغة C صعوبة في التعامل مع AA.
أولا ، أود أن جعل الميزات.
AA يعمل فقط على إطلاق المعاملات. يمكن أن يكون إما الدفع فقط ، أو نقل البيانات AA. على سبيل المثال ، يمكنك تمرير البيانات
{foo: 'bar' ، القيمة: 100} وسيتم تلقيها بواسطة AA
كمدخلات ، وبناءً على ذلك ، يتم تنفيذ الإجراءات.
ما AA لديه حق الوصول إلى
- إلى أي متغيرات تصف الحالة الحالية لـ DAG
- المبالغ الواردة في المعاملات الزناد
- البيانات من المعاملات الزناد
- الذين أرسلوا الصفقة الزناد
- متغيرات الدولة لدينا AA وغيرها
- الوصول إلى العديد من البيانات العامة من DAG ، مثل data_feed من oracles ، وشهادات الاسم الحقيقي ، إلخ.
- أرصدة لدينا وغيرها AA
- معلومات الأصول
ملامح أوسكريبت
Oscript - ليس تورينج اللغة كاملة ، ومع ذلك ، في ترسانتها هناك:
- العمليات الحسابية
- العمليات المنطقية (و ، أو ، إلخ)
- مقارنة
- سلسلة السلسلة
- بعض وظائف الرياضيات
- وظائف التشفير (إنشاء التجزئة ، والتحقق من التوقيع)
- المتفرعة (إذا / آخر)
- لا الحلقات والوظائف (لمنع تكرار لا حصر له). يمكنك معرفة المزيد في الدليل على هذا الرابط
للتحكم في استخدام الموارد ومنع السيناريوهات الضارة ، تقتصر AA على 100 عملية كثيفة العمالة ، مثل وظائف التشفير أو الوصول إلى قاعدة البيانات. يحدث التحقق في وقت نشر رمز الوكيل.
ولكن لا توجد صيغ معقدة لحساب تكلفة أداء AA. لا توجد مثل هذه الصيغ على الإطلاق ، وتنفيذ التعليمات البرمجية مجاني ، والمستخدمون ، مثل AA نفسه ، يدفعون فقط لإضافة البيانات إلى سجل DAG ، مثل أي أعضاء شبكة آخرين - 1 بايت بعملة Obyte لكل بايت من البيانات المضافة إلى DAG. ومع ذلك ، يجب على AA الحفاظ على توازنها بالبايت لا يقل عن حجم جميع متغيرات الحالة التي تخزنها.
في حالة تنفيذ AA ، عند التنفيذ ، تنفيذ AA أخرى ، فسيتم أولاً تسجيل المعاملة الناتجة لـ AA الأولى في السجل ، وعندها فقط يبدأ تنفيذ AA التالي.
وكلاء الحكم الذاتي في العمل
الآن سنقوم بكتابة أبسط سيناريو بينج بونج. نرسل AA الأموال ، وقال انه يترك بعض المبلغ لنفسه ويرسل الباقي مرة أخرى. سوف نحل نفس المشكلة على منصتين -
Obyte و
Ethereum ، والمقارنة. في Ethereum ، يشار إلى كيانات AA المماثلة عادةً بالعقود الذكية (على الرغم من أن الورقة البيضاء لـ Ethereum تسميها عملاء مستقلين مرة واحدة).
Ethereum
سأفعل كل شيء من خلال
geth. تشغيل العقدة في وضع
الضوء وانتظر التزامن.
geth --testnet --ws --wsapi "admin,db,eth,net,web3,personal" --syncmode "light" --allow-insecure-unlock
الآن لدينا خياران لتطوير الأحداث:
- انتظر حتى يتم اكتشاف الأقران ويبدأ التزامن
- إضافة أقرانهم يدويا
اخترت الخيار الثاني. و
rfikki وقائمته الجاهزة من الأوامر تأتي
لإنقاذ . نحن متصلون بالعقدة ونضيف الأقران:
geth attach ws://127.0.0.1:8546 admin.addPeer("enode://bc827e035cf3a42c249374be7ddc9c2fb819765c440116cf01aa6a8d70d03043d29ccd42b32a283f5ab08294467eb3b92fc40111e9af1770c84bc116edae89c0@104.248.199.52:30303"); admin.addPeer("enode://2d86877fbb2fcc3c27a4fa14fa8c5041ba711ce9682c38a95786c4c948f8e0420c7676316a18fc742154aa1df79cfaf6c59536bd61a9e63c6cc4b0e0b7ef7ec4@13.83.92.81:30303"); admin.addPeer("enode://053d2f57829e5785d10697fa6c5333e4d98cc564dbadd87805fd4fedeb09cbcb642306e3a73bd4191b27f821fb442fcf964317d6a520b29651e7dd09d1beb0ec@79.98.29.154:30303"); admin.addPeer("enode://690c93ac2f6e6f711a175cc6a73a3cf3b649eea83c458ce34364c69d1b557bb408693f06bdf6fc31538a744d5c231fdd904cce5665d04ce165032c0fc009a208@104.248.199.160:30303");
بعد ذلك ، ستبدأ عملية المزامنة ، وحتى لا تضيع الوقت ، قم بإنشاء حساب. للقيام بذلك ، سنكتب الأوامر التالية في اتصالنا وتعيين كلمة المرور:
personal.newAccount();
في وحدة التحكم ، سنرى العنوان ،
وانسخه وانتقل إلى
صنبور . الصق في الحقل وانقر فوق إرسال.
تحقق الآن من التزامن:
eth.syncing
وتحقق من التوازن:
eth.getBalance(eth.accounts[0])
اكتمل الإعداد ، والآن يمكننا الانتقال إلى كتابة العقد ونشره.
قم بإنشاء ملف ، على سبيل المثال pingPong.sol واكتب عقدنا فيه:
pragma solidity ^0.5.10; contract PingPong{ function deposit() payable public { msg.sender.transfer(msg.value - 20000); } function getBalance() public view returns(uint256){ return address(this).balance; } }
في هذا العقد ، نقوم بإنشاء وظيفتين عامتين:
إيداع - استدعاء عن طريق التجديد والعودة ناقص 20،000.
getBalance - يظهر لنا فقط رصيد عنوان العقد.
بعد ذلك ، نحتاج إلى تجميعها ، لذلك
أستخدم وحدة npm solc :
solcjs -o . --bin --abi pingPong.sol
قم الآن بإعداد الملفات المترجمة للتنزيل السريع في برنامج
geth client. تغيير ملف
أبي للنظر
var pingPongContract = eth.contract([{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]);
وبن للعرض
personal.unlockAccount(eth.accounts[0]) var pingPong = pingPongContract.new( { from: eth.accounts[0], data: "", gas: 500000});
انتقل إلى عميل
geth وربط هذه البرامج النصية
loadScript('sol2/pingPong_sol_PingPong.abi') loadScript('sol2/pingPong_sol_PingPong.bin')
حيث
sol2 هو المسار إلى مجلد البرنامج النصي الخاص بك. بعد تنفيذ البرنامج النصي الثاني ، سيطلب منك إلغاء قفل حسابك. القيام به.
بعد ذلك ، اكتب `pingPong`. إذا رأيت نتيجةً لذلك أن العنوان غير فارغ - لقد تم نشر العقد ، إن لم يكن - فستحتاج إلى الانتظار قليلاً والمحاولة مرة أخرى.
بعد ذلك ، سنقوم بتنفيذ وظيفة
الإيداع ، وإرسال الأموال ، والتحقق من كيفية سير كل شيء.
personal.unlockAccount(eth.accounts[0]) pingPong.deposit({from: eth.accounts[0], value: 500000});
في الإخراج ، يمكننا أن نرى معرف المعاملة. انسخها ، سنحتاجها لاحقًا. قبل ذلك ، ندعو وظيفة
getBalance ونرى هناك 20،000 ، والتي
نطرحها .
pingPong.getBalance()
الآن دعنا نتحول إلى etherscan. هناك ، سترى في "المعاملات الداخلية" دفعة مقابل 48000. اتضح مثل هذا -
https://ropsten.etherscan.io/tx/0xc3fab9f39f2ec32eadffc54608a61c3c77c4ac0f363003737b5c312d3b66ee85f8#internalObyte
للنشر سوف نستخدم
محرر Oscriptقم بتنظيف القالب الذي يقدمه لنا. سوف نكتب من الصفر. الحد الأدنى AA هو كائن مع مجموعة من الرسائل.
{ messages: [] }
نظرًا لأننا سنرسل الدفعة ، نحتاج إلى إضافة كائن يحتوي على الخصائص التي تشير إلى هذه الرسائل:
{ messages: [ { app: 'payment', payload: { asset: 'base', outputs: [ {address: "{trigger.address}", amount: "{trigger.output[[asset=base]] - 20000}"} ] } } ] }
هنا نرى البيانات الوصفية القياسية للدفع. يتم تغييرها باستخدام "{}" في السطور. يتم استخدام كائن
المشغل لنقل القيم ؛ فهو يخزن معلومات حول الدفعة المستلمة. يمكنك معرفة المزيد حول بناء الجملة
في الوثائق .
نقوم بلصق هذا الرمز في المحرر ، ثم انقر فوق نشر.
هذا كل شيء!AA نشرت وأدناه نرى العنوان. الآن نحن بحاجة إلى
محفظة واجهة المستخدم الرسومية testnet ، تثبيته وتشغيله. بعد ذلك ، للحصول على بعض العملات المعدنية التجريبية ، انتقل إلى "الدردشة" ، واختر "متجر بوت" وأضف "Faucet Bot" إلى هناك. سيتم فتح محادثتنا ، انقر فوق القائمة الموجودة على اليسار وحدد "إدراج عنوان بريدي"

ثم نرسل وننتظر الرسالة التي تفيد بأن المال جاء إلينا: "الدفع: ...". بعد ذلك ، نحتاج إلى الانتقال إلى العملة الرئيسية والانتظار حتى يختفي النقش "بما في ذلك التأكيد المعلق" (بضع دقائق) ، مما يعني أنه تم تأكيد العملات المستلمة ويمكن استخدامها.
كل ما تبقى بالنسبة لنا هو الذهاب إلى "تلقي" ، أدخل العنوان AA ، أدخل المبلغ "500000" ثم اضغط على "إرسال". نحن الآن بحاجة إلى الانتظار حتى تستقر المعاملة (التحقق من السجل). هذا ضروري لتحريك. سنتحقق مما إذا كانت الأموال المعادة إلينا:

هذا كل شيء ، إنه يعمل. من خلال الذهاب إلى المستكشف
في AA ، يمكننا أن نرى أن رصيده قد زاد بمقدار 20،000 ناقص رسوم دفع لنا. في Obyte ، يدفع وكلاء الحكم الذاتي أنفسهم عمولة عن الأعمال التي يؤدونها.
النتائج
كما نرى من المقارنة أعلاه ، فإن Obyte أسهل بكثير في النشر والكتابة والتحكم في ما يحدث. على سبيل المثال ، في Ethereum ، لا يمكننا دائمًا تحديد غاز صفقة صادرة ، حيث يمكن تأكيد ذلك لفترة طويلة جدًا. من بين مزايا Ethereum ، يمكن للمرء أن يفرد النشر والتأكيد السريع (حوالي دقيقة واحدة ، وهذا يتوقف على الغاز الموردة). يتم النشر فورًا في Obyte ، ويعتمد وقت التأكيد على حمل الشبكة ، مع حمل خفيف - حوالي 10-15 دقيقة ، مع حمولة كبيرة - أقل من ثلاث دقائق.
في المقالات التالية ، سنقوم بتحليل بعض الأمثلة المثيرة والحيوية ، على سبيل المثال ، كيفية تنفيذ DAO البسيط باستخدام AA والإجابة على أسئلتك.
منافسة
فيما يتعلق بالابتكار ، ندعو المطورين للانضمام إلى المسابقة للحصول على التطبيق الأكثر إثارة للإعجاب من وكلاء الحكم الذاتي. المسابقة مستمرة بالفعل وستستمر حتى منتصف أكتوبر. على سبيل المثال من التطبيقات التي تم تلقيها بالفعل ، هناك العديد من شهادات AA للتمويل الجماعي ، ومبادلين ، و "سجلات" مختلفة ، ومتعقبو السمعة ، واليانصيب ، والألعاب ، إلخ. كل أسبوعين ، تعلن هيئة المحلفين في فريق Obyte عن أفضل المشاركات.
الميزانية الإجمالية للمسابقة
تبلغ 38000 دولار (بمعدل
جيجابايت في وقت الإطلاق).
يمكنك قراءة المزيد عن المنافسة
في هذه المقالة .