يصف هذا النص تجريد نظام الثقة ، الذي يسمح لك بدمج خدمات الضمان في أي مجال من مجالات العلاقات الاقتصادية.
إيداع الأموال هو جزء أساسي من أي معاملة. إذا كانت الأطراف المقابلة لا تعرف معلومات موثوقة عن بعضها البعض ، فإن خطر الاحتيال يزداد. يسمح لك هذا الصعود ببرمجة نموذج لحل النزاعات ، ونموذج لإجراء المعاملات التلقائية ، والمعاملات الآمنة ، وما إلى ذلك في شبكة لامركزية ، علاوة على ذلك ، فإن مثل هذا النموذج من نظام الثقة مفتوح. تتيح لنا جميع المعاملات التي تتم بمشاركة التسلسل الهرمي لمحفظة الاشتراكات المتعددة التحقق من تصنيف الطرف المقابل وأيضًا حماية أنفسنا من المخططات الاحتيالية للمشاركين الجدد في العلاقات الاقتصادية.
المحتويات
1
مقدمة2
وصف المحفظة متعددة التوقيع3
طرق لبناء التسلسل الهرمي للمحفظة4
واجهة متعددة التسلسل الهرمي للمحفظة5
تيارات التفاعل5.1
تدفق التفاعل القياسي5.2
تدفق التفاعل الآمن5.3
تدفق التفاعل المثير للجدل6
بروتوكول ESCB97
تكامل نظام الثقة والعقود الذكية تنفيذ بروتوكول ESCB98
أمثلة على العقود التي تنفذ ESCB98.1
عقد ذكي لسوق الإيجار الخاص ، على غرار مثال AirBnb8.2
عقد ذكي لتبادل أي عملة مشفرة مقابل أموال الورقية والعودة في وضع لامركزي9
عقد التحكيم10
قاموس1. مقدمة
المشكلة الرئيسية لخدمات الضمان هي إنشاء علاقات ثقة بين جميع المشاركين. علاوة على ذلك ، لا ينبغي بالضرورة أن يكون المشاركون أنفسهم معروفين لكل موضوع علاقات. لتلخيص جميع الحالات ، سنأخذ في الاعتبار أنها كلها مجهولة. بالنسبة لنظام علاقات الثقة هذا ، من المهم تنظيم علاقات المشاركين الجدد بالأطراف القديمة. يتمتع المشاركون القدامى بالفعل بتصنيف معين في نظام العلاقات وبالتالي يتسببون في مزيد من الثقة. نظرًا لأن لا أحد يعرف أي شخص في نظام الثقة ، فإن هذا يسبب مشاكل في التحقق من التصنيف السابق. يصف هذا المستند نظام الثقة القائم على محافظ التشفير متعددة الاشتراكات. يمكن برمجة مثل هذا النظام في عقد ذكي. في ضوء التوزيع الواسع لمنصة Ethereum ، سنختار هذه المنصة كمنصة لوصف جميع العقود الذكية في هذا المستند.
2. وصف المحفظة متعددة التوقيع
التجريد الذي يسمح لك بتأكيد أو إلغاء المعاملات فقط إذا تم التوصل إلى توافق في الآراء بين المشاركين المصرح لهم لاتخاذ مثل هذا القرار يسمى محفظة متعددة التوقيع. المعاملة في هذا السياق هي عملية ذرية مبرمجة لتنفيذ طريقة في عقد ذكي آخر أو نفس العقد.
يمكن تمثيل واجهة العقد الذكي لمثل هذا التجريد على النحو التالي:
- يقبل المنشئ عناوين الأعضاء المؤسسين وعدد الحد الأدنى من التأكيدات المطلوبة للمعاملات
constructor(address[]:members, uint256:requiredConfirmationCount)
- واجهة مشارك مفوض
- الحصول على قائمة المشاركين
static getMembers() -> address[]:address
- عرض عنوان العضو
static getMember(uint256:indexNumber) -> address:address
- التحقق من عنوان العضوية
static isMember(address:address) -> bool:value
- الحصول على أكبر عدد ممكن من المشاركين في المحفظة
static getMaxMemberCount() -> uint256:value
- تأكيد الحد الأدنى من الإجماع
static getRequiredConfirmationCount() -> uint256:value
- حدث إضافة عضو جديد
event MemberAddition() -> address:member
- حدث حذف العضو
event MemberRemoval() -> address:member
- مطلوب تغيير حدث عدد من التأكيدات لتنفيذها
event RequiredConfirmationCountChange() -> uint256:count
- إضافة عضو
execute addMember(address:member) -> void:value
- حذف العضو
execute removeMember(address:member) -> void:value
- استبدال العضو
execute replaceMember(address:currentMember, address:newMember) -> void:value
- تغيير في عدد التأكيدات الإلزامية للتنفيذ
execute changeRequiredConfirmationCount(uint256:count) -> void:value
- واجهة المعاملات
- التحقق من تأكيد المعاملة على عنوان المشارك
static getConfirmationByAddress(uint256:indexNumber, address:addressMember) -> bool:value
- الحصول على معلومات من معاملة
static getTransactionInfo(uint256:indexNumber) -> [address:destination, uint256:value, bytes:data, bool:executed]
- الحصول على العدد الإجمالي للمعاملات في هذه المحفظة
static getTransactionCount() -> uint256:value
- تلقي حالة تأكيد المعاملة
static isConfirmed(uint256:transactionId) -> bool:value
- تلقي عدد التأكيدات
static getConfirmationCount(uint256:transactionId) -> uint256:count
- الحصول على عدد المعاملات حسب النوع
static getTransactionCount(bool:pending, bool:executed) -> uint256:count
- الحصول على قائمة المشاركين الذين أكدوا المعاملة
static getConfirmations(uint256:transactionId) -> address[]:confirmations
- الحصول على قائمة معرف المعاملة حسب النوع في فترة زمنية معينة
static getTransactionIds(uint256:from, uint256:to, bool:pending, bool:executed) -> uint256[]:transactionIds
- حدث تأكيد معاملة الطرف
event Confirmation() -> [address:sender, uint256:transactionId, uint256:timeStamp]
- حدث سحب تأكيد مشارك قبل المعاملة
event Revocation() -> [address:sender, uint256:transactionId, uint256:timeStamp]
- إضافة معاملة قائمة الانتظار حدث
event Submission() -> [uint256:transactionId]
- حدث تنفيذ المعاملات
event Execution() -> [uint256:transactionId]
- حدث خطأ في المعاملة
event ExecutionFailure -> [uint256:transactionId]
- حدث تجديد المحفظة
event Deposit -> [address:sender, uint256:amount]
- إضافة معاملة العضو
execute submitTransaction(address:destination, uint256:value, bytes:data) -> uint256:transactionId
- تأكيد المعاملة من قبل المشارك
execute confirmTransaction(uint256:transactionId) -> void:value
- سحب التأكيد من قبل المشارك
execute revokeConfirmation(uint256:transactionId) -> void:value
- معاملة يدوية
execute executeTransaction(uint256:transactionId) -> void:value
3 طرق لبناء التسلسل الهرمي للمحفظة
هناك طريقتان رئيسيتان لبناء نظام ثقة. عمودي وأفقي. تنطوي الطريقة الأفقية للبناء على إنشاء قائمة بمحافظ الأطفال من قبل أحد الوالدين الرئيسيين. تتضمن الطريقة الرأسية للبناء سلسلة تتكون من محافظ أطفال مع الإشارة إلى الأصل. في هذه الحالة ، قد تكون المحفظة الرئيسية تابعة لمحفظة رئيسية أخرى.
كما نرى ، قد يكون مسار البناء الأفقي نوعًا فرعيًا لمسار البناء الرأسي. لذلك ، نترك هذا النهج دون مراقبة.
4 واجهة متعددة التسلسل الهرمي للمحفظة
لبناء نظام ثقة ، من الضروري توسيع الواجهة البسيطة للمحفظة متعددة الاشتراكات الموضحة أعلاه ، وإضافة آليات لتنظيم التسلسل الهرمي والتنفيذ التلقائي للتأكيدات ، بالإضافة إلى إمكانية التنفيذ المؤجل.
- يقبل المنشئ عنوان المحفظة الأم ، وعناوين الأعضاء المؤسسين ، وعدد الحد الأدنى من التأكيدات المطلوبة للمعاملات ، والوقت القياسي للتأكيدات التلقائية في ثوان
constructor(address:parent, address[]:members, uint256:requiredConfirmationCount, uint256:standardTimeAutoConfirmation)
- واجهة العضو
- الحصول على قائمة المشاركين
static getMembers() -> address[]:address
- وظيفة لعرض عنوان المشارك
static getMember(uint256:indexNumber) -> address:address
- التحقق من عنوان العضوية
static isMember(address:address) -> bool:value
- الحصول على أكبر عدد ممكن من المشاركين في المحفظة
static getMaxMemberCount() -> uint256:value
- تأكيد الحد الأدنى من الإجماع
static getRequiredConfirmationCount() -> uint256:value
- حدث إضافة عضو جديد
event memberAddition() -> address:member
- حدث حذف العضو
event memberRemoval() -> address:member
- مطلوب تغيير حدث عدد من التأكيدات لتنفيذه
event requiredConfirmationCountChange() -> uint256:count
- إضافة عضو
execute addMember(address:member) -> void:value
- حذف العضو
execute removeMember(address:member) -> void:value
- استبدال العضو
execute replaceMember(address:currentMember, address:newMember) -> void:value
- تغيير في عدد التأكيدات الإلزامية للتنفيذ
execute changeRequiredConfirmationCount(uint256:count) -> void:value
- واجهة التسلسل الهرمي
- الحصول على قائمة محافظ الأطفال
static getChildren() -> address[]:wallets
- تحقق مما إذا كان عنوان المحفظة تابعًا للحافظة الحالية
static isChild() -> bool:value
- التحقق مما إذا كان عنوان المحفظة أبويًا للعنوان الحالي يتم من خلال isChild من خلال مقارنته.
- حدث مرفق محفظة التابعة
event childAttachment() -> [address:address,uint256:timeStamp]
- حدث إزالة محفظة الطفل
event childRemoval() -> [address:address,uint256:timeStamp]
- وضع محفظة أطفال
execute attachChild(addres:child) -> void:value
- حذف محفظة الأطفال
execute removeChild(address:address) -> void:value
- تغيير محفظة طفل إلى آخر
execute replaceChild(address:newAddress) -> void:value
- واجهة المعاملات
- تحقق من حالة المعاملة
static getTransactionStatus(uint256:transactionId) -> enum:{submitted,completed,frozen,disputed,reverted}
- التحقق من حالة المعاملة للامتثال
static isTransactionStatus(uint256:transactionId, uint256:enumStatusNumber) -> bool:value
- التحقق من تأكيد المعاملة على عنوان المشارك
static getConfirmationByAddress(uint256:transactionId, address:addressMember) -> bool:value
- الحصول على معلومات من معاملة
static getTransactionInfo(uint256:transactionId) -> [address:destination, uint256:value, bytes:data, bool:executed]
- الحصول على العدد الإجمالي للمعاملات في المحفظة
static getTransactionCount() -> uint256:value
- تلقي حالة تأكيد المعاملة
static isConfirmed(uint256:transactionId) -> bool:value
- تلقي عدد التأكيدات
static getConfirmationCount(uint256:transactionId) -> uint256:count
- الحصول على عدد المعاملات حسب النوع
static getTransactionCount(bool:pending, bool:executed) -> uint256:count
- الحصول على قائمة المشاركين الذين أكدوا المعاملة
static getConfirmations(uint256:transactionId) -> address[]:confirmations
- الحصول على وقت للتأكيد التلقائي
static getTimeAutoConfirmation(uint256:transactionId) -> uint256:timestamp
- الحصول على قائمة معرف المعاملة حسب النوع في فترة زمنية معينة
static getTransactionIds(uint256:from, uint256:to, bool:pending, bool:executed) -> uint256[]:transactionIds
- حدث تأكيد معاملة الطرف
event Confirmation() -> [address:sender, uint256:transactionId, uint256:timeStamp]
- حدث تأكيد المعاملة التلقائي
event AutoConfirmation() -> [uint256:transactionId, uint256:timeStamp]
- حدث سحب تأكيد مشارك قبل المعاملة
event Revocation() -> [address:sender, uint256:transactionId, uint256:timeStamp]
- إضافة معاملة قائمة الانتظار حدث
event Submission() -> [uint256:transactionId]
- حدث تنفيذ المعاملات
event Execution() -> [uint256:transactionId]
- حدث خطأ في المعاملة
event ExecutionFailure -> [uint256:transactionId]
- تغيير حالة المعاملة إلى الحدث المجمد
event TransactionFrozen -> [uint256:transactionId]
- تغيير حالة المعاملة إلى حدث مثير للجدل
event TransactionDisputed -> [uint256:transactionId]
- تغيير حالة المعاملة إلى الحدث المرتجع
event TransactionReverted -> [uint256:transactionId]
- حدث تجديد المحفظة
event Deposit -> [address:sender, uint256:amount]
- إضافة معاملة للتنفيذ
execute submitTransaction(address:destination, uint256:value, uint256:TimeAutoConfirmation, bytes:data) -> uint256:transactionId
- تأكيد المعاملة
execute confirmTransaction(uint256:transactionId) -> void:value
- تأكيد الإبطال
execute revokeConfirmation(uint256:transactionId) -> void:value
- تغيير حالة المعاملة إلى المجمدة
execute setTransactionStatus(uint256:transactionId, uint256:enumStatusNumber) -> void:value
- معاملة يدوية
execute executeTransaction(uint256:transactionId) -> void:value
- إدارة التصنيف
- الحصول على تصنيف في
static getRatingByAddress(address:agent) -> [uint256:negativeRating, uint256:positiveRating, uint256:countRatingRecords]
- الحصول على سجل التصنيف حسب العنوان والرقم التسلسلي
static getRatingRecordForAddress(address:agent, uint256:indexNumber) -> void:value
- حدث إضافة سجل إلى التصنيف في
event RatingRecordAdded -> [address:author, address:agent, bytes32:smartContractAddress, bool:positiveOrNegative, uin256:ratingNumber, bytes:comment, uint256:indexNumber]
- إضافة سجل لتصنيف العنوان
execute addRatingRecord(address:agent, bytes32:smartContractAddress, bool:positiveOrNegative, uin256:ratingNumber, bytes:comment) -> void:value
- التكامل مع بروتوكول ESCB9
- التحقق في العنوان ما إذا كان العقد الذكي المرفق بهذه المحفظة هو عقد ذكي مع تنفيذ ESCB9
static isAttachedESCB9SmartContract(address:smartContract) -> bool:result
- التحقق من حالة الإيداع لعقد ذكي مع ESCB9 المرفق بهذه المحفظة
static getDepositStatusForESCB9SmartContract(address:smartContract) -> enum:{awaiting,founded,returned}
- حدث إرفاق عقد ذكي مع تنفيذ محفظة ESCB9
event AttachingESCB9SmartContract -> [address:smartContract]
- حدث إيداع للعقد الذكي مع التنفيذ المرفق لمحفظة ESCB9
event ConfirmationForDepositESCB9SmartContract -> [address:smartContract, uint256:sum, bytes:notice]
- إرفاق عقد ذكي مع تنفيذ ESCB9 في المحفظة
execute attachESCB9SmartContract(address:smartContract) -> void:value
- تأكيد الإيداع للعقد الذكي مع تنفيذ ESCB9. إذا كان الإيداع في النظام الخارجي ، فسيكون للإعلان تسمية. إذا كان الإيداع في ETH ، فسيتم إرسال مبلغ الإيداع عند تنفيذ الطريقة.
execute fundDepositForESCB9SmartContract(address:smartContract, uint256:sum, bytes:notice) -> void:value
5 تيارات التفاعل
يمكن دمج أي عقد ذكي في التسلسل الهرمي للمحافظ متعددة التوقيع. سيكون لهذا التكامل تدفقات من التفاعلات. بشكل عام ، نلخص عدة أنواع من التدفقات:
- قياسي . في هذا النموذج ، تتم المعاملة تلقائيًا. دون مشاركة الأعضاء المصرح لهم في التسلسل الهرمي للمحفظة.
- محمي . في هذا النموذج ، يمكن زيادة وقت المعاملة من معيار التأكيد التلقائي للوقت إلى اللازم. في هذه الحالة ، من الضروري مشاركة الأعضاء المصرح لهم في التسلسل الهرمي للمحفظة.
- مثير للجدل . في هذا النموذج ، يجوز للمشارك في المعاملة تجميد المعاملة. في هذه الحالة ، مشاركة الأعضاء المصرح لهم في التسلسل الهرمي للمحفظة ضرورية لبناء الإجماع.
كل محفظة في نظام الثقة لديها عدد من المشاركين المفوضين ، الذين يصدرون قرارًا. لسبب بسيط ، سوف نجمع بين جميع المشاركين المصرح لهم في المحفظة في مفهوم واحد -
الحكم .
5.1 تدفق التفاعل القياسي
من أجل بساطة العرض ، نأتي بمفهوم السلع والخدمات إلى مفهوم موضوع النقل (الكائن) ، ومفهوم النقود الورقية ، العملة المشفرة إلى مفهوم وسائل النقل (الوسائل).
يقوم الطرف المقابل ، صاحب الشيء ، بعقد صفقة مع الطرف المقابل ، صاحب الأموال ، لغرض التبادل. في هذه الحالة ، يقوم مالك الكائن بإنشاء عقد ضمان ذكي عن طريق إرسال معاملة موحدة إلى إحدى المحافظ المصرح بها في التسلسل الهرمي للمحافظ متعددة التوقيع. في هذه الحالة ، يتم تسجيل المعاملة من قبل طرف ثالث كنظام ثقة. لكل معاملة ، يتم تحديد الوقت القياسي لتنفيذها. يقوم الطرف المقابل ، مالك الأموال ، بإيداع المعاملة على أساس تحويل الأموال إلى نظام الائتمان. بعد ذلك ، ينقل مالك الكائن الكائن إلى مالك الأموال. يتحقق مالك الأموال من جودة الكائن. إذا كان قبل نهاية وقت المعاملة ، لم يؤكد الجودة ، ثم يتم تحويل الأموال إلى مالك الكائن كجزء من المعاملة. كلا الطرفين يعطيان تقييمات الراحة لبعضهما البعض. وبالتالي ، يمكن لصاحب الأموال تغيير تدفق التفاعل حتى إتمام المعاملة. بعد تحويل الأموال إلى مالك الكائن ، يمكن لمالك الأموال تقديم طلب إلى محفظة أعلى في مستوى التسلسل الهرمي لحل النزاعات في غضون الوقت المحدد في اللائحة. بعد هذا الوقت ، يتم تطبيق تصنيفات المعاملة على كلا الطرفين وتصبح المعاملة غير قابلة للإلغاء.
5.2 تدفق التفاعل الآمن
إذا كان ، لبعض الأسباب خارجة عن سيطرة الأطراف المقابلة ، يجب تمديد الموعد النهائي للمعاملة ، فعندئذٍ وبموافقة الأطراف ، يمكن لمحفظة التسلسل الهرمي متعدد التوقيع (الحكم) تغيير الوقت المخصص للمعاملة. بعد تغيير الوقت ، يعود تدفق التفاعل المخصص للمعاملة إلى المستوى المنطقي للتدفق القياسي.
5.3 تدفق التفاعل المثير للجدل
إذا كانت جودة الشيء أثناء المعاملة لا تتناسب مع الطرف المقابل ، مالك الأموال التي يساهم بها في نظام أمانة التسلسل الهرمي للمحافظ متعددة التوقيع ، فقد يتم تجميد المعاملة. في هذه الحالة ، لا يتم تحويل الإيداع إلى الطرف المقابل ، مالك الكائن حتى يتم إصدار حكم على المعاملة. يجب أن يقدم صاحب الأموال دليلاً جوهريًا لحكم المعاملة. بعد ذلك يصدر المحكم قراراً لصالح أحد الأطراف المقابلة. إذا لم يكن أي طرف في المعاملة راضياً عن الحكم ، فإنه يتحول إلى محفظة أعلى بالترتيب في التسلسل الهرمي للمحافظ متعددة التوقيع. بعد اجتياز جميع حالات التسلسل الهرمي ، يجوز لأي من الطرفين طلب تصويت عام. لا يمكن تعيين هذا التدبير الاستثنائي إلا من خلال محفظة مطلقة.
6 بروتوكول ESCB9
مثال على بروتوكول ESCB9 في Solidity كعقد ذكي مجرد (البروتوكول قيد التطوير وقابل للتغيير)
contract ESCB9 { modifier onlyArbitrage() { require(msg.sender == arbitrage()); _; } modifier isDeposited { uint i; bytes memory _funcName = bytes4(keccak256("getDepositStatusForESCB9SmartContract(address)")); bytes memory _concat = new bytes(_funcName.length + 32); for(i=0; i < address(this).length; i++) { _concat[i] = address(this)[i]; } require(arbitrage().call.value(0)(_concat) == 1);
7 تكامل نظام الثقة والعقود الذكية تنفيذ بروتوكول ESCB9
لاستخدام نظام الثقة للتسلسل الهرمي للمحافظ متعددة التوقيع في مشروعك الخاص ، تحتاج إلى إنشاء عقد ذكي يطبق معيار ESCB9 وإرفاق مثل هذا العقد الذكي بأحد المحكمين الذين ليس لديهم محافظ فرعية. تسمى هذه المحافظ في التسلسل الهرمي للاشتراكات المتعددة "عقد الإدخال". يشار إلى جميع المحافظ متعددة التوقيع المنبع باسم "عقد التحكيم".
8 أمثلة على العقود التي تنفذ ESCB9
8.1 عقد ذكي لسوق الإيجار الخاص ، على غرار مثال AirBnb
8.2 عقد ذكي لتبادل أي عملة مشفرة مقابل أموال الورقية والعودة في وضع لامركزي
يتيح لك مثال العقد الذكي الموضح أدناه استبدال BTC مقابل النقود الورقية مباشرة ، بدون مشاركة المبادلات وخدمات الطرف الثالث. يقوم البائع BTC بتحويل المبلغ في العقد الذكي إلى الإيداع في blockchain BTC. بعد تأكيد الإيداع من قبل الحكم ، يقوم المشتري تلقائيًا بتحويل المبلغ المنصوص عليه في العقد إلى الحساب أو رقم البطاقة البلاستيكية المدرجة في العقد. يجوز للمحكم التدخل في المعاملة بعد استئناف أحد المشاركين. في البداية ، سيتم تجميد الإيداع وإذا لم يتفق الطرفان بتوافق الآراء ، فإن هذا العقد سيصبح محل نزاع مع مزيد من القرار بشأن تدفق التفاعل المتنازع عليه.
9 عقد التحكيم
للحفاظ على عمل نظام الثقة ، تم إدخال تسلسل هرمي من المحافظ متعددة التوقيع. عقد التحكيم ، أي أن مثل هذه المحافظ في التسلسل الهرمي التي تحتوي على محافظ فرعية تحتها ، تعمل كضامن لتسوية المنازعات. لا يمكن تعيين المفوضين لمثل هذه العقد إلا من خلال التسلسل الهرمي الأعلى. يحصل كل مشارك معتمد على مكافأة من خلال توزيع الأرباح والمكافآت للعمل مع تدفقات التفاعل المتنازع عليها. يتم تحديد حجم المكافأة بالإجماع.
للحصول على حالة مشارك مفوض في عقدة التحكيم ، من الضروري أن يكون لديك عدد محدد من الرموز المميزة المتفق عليها بالإجماع على عنوان مشارك مفوض. . , .
10
Ethereum هي تقنية مفتوحة المصدر تسمح لك بإنشاء سلسلة معاملات لامركزية ثابتة. يمكن تنفيذ كل معاملة بشروط معينة مسجلة في عقد ذكي.عقد ذكي - مكتوب بلغة Solidity ، المنطق الذي يتم تنفيذه في جهاز Ethereum الظاهري ، والذي يسمح لك بتوسيع منطق المعاملات.المحفظة متعددة التوقيع (حكم) هي عقد ذكي خاص تتحكم فيه مجموعة من المشاركين المعتمدين الذين يمكنهم تأكيد أو إلغاء المعاملات. باستخدام آلية المحافظ متعددة الاشتراكات ، يمكنك إنشاء سلسلة من بوابات المعاملات ومراقبة التنفيذ أو رد الأموال في الوقت المناسب.– , , . . , .
– , , . . , .