مجموعة الأصول QoreChain Asset Kit
مجموعة الأصول QoreChain Asset Kit هي أدوات مفتوحة المصدر لإصدار وإدارة رموز مقيَّدة الصلاحيات (permissioned) تمثّل أصولاً من العالم الحقيقي على QoreChain. وتتألف من جزأين لكل منهما حالة مختلفة. الجزء الأول مجموعة من عقود EVM تعمل اليوم على محرك QoreChain EVM: محوّلات لمعيارين مفتوحين لرموز الأصول المنظَّمة (ERC-3643 وCMTAT)، وخزائن (vaults) بحصص مقيَّدة، وضابط واحد خاص بـ QoreChain يشترط أن يكون لكل حامل مفتاح ML-DSA-87 مسجَّل. أما الجزء الثاني فهو مقترح لوحدات سلسلة أصلية، منشور على شكل واجهات protobuf مع عملاء بأربع لغات ومحاكاة داخل الذاكرة، حتى يمكن تصميم التطبيقات واختبارها وفق القواعد المقترحة.
وهي موجهة للمُصدِرين ووكلاء التحويل ومديري الصناديق وفرق الامتثال والشؤون القانونية والمدمجين الذين يريدون إنشاء نموذج أولي لرمز منظَّم على شبكة اختبار QoreChain. الإصدار 0.1.0، برخصة Apache-2.0 (مع استثناءات الرخصة المذكورة في أين يُنشر)، وتصونها جمعية QoreChain. وهي ما قبل 1.0 ولم تُدقَّق.
- يعمل اليوم، على شبكة الاختبار فقط: عقود EVM وسكربتات النشر بـ Foundry ووحدة تحكم المُصدِر، على
qorechain-diana(معرّف سلسلة EVM 9800). يقرأ فحص الحامل المُسبَقpqcKeyStatus(precompile) عند0x0A02، وهو فعّال على شبكة الاختبار وغير فعّال على الشبكة الرئيسية. - الشبكة الرئيسية (
qorechain-vladi، معرّف سلسلة EVM 9801): فحص الحامل يفشل مغلقاً (fails closed). كل عنوان غير مُعفى صراحةً يُعدّ غير مؤهل، فلا يمكن لرمز محمي بالضابط أن ينتقل بين الحاملين العاديين. وترفض سكربتات النشر العمل على السلسلة 9801. - مقترح، وليس حياً في أي مكان: الوحدات الأصلية
x/assetوx/identityوx/complianceوx/settlementوx/attestغير موجودة على أي شبكة QoreChain، ولا توجد ترقية مجدولة تضيفها. ولا يمكن لعملائها التحدث إلا مع محاكاة داخل الذاكرة. - القوالب القانونية في المستودع مسودات لم تُراجَع، معدّة للنقاش مع محامٍ. وهي ليست استشارة قانونية.
الابتكارات
- فحص حامل ما بعد كمّي فوق ضوابط المعيار نفسه. يقرأ الضابط
pqcKeyStatus(address)عند0x0A02ولا يقبل العنوان إلا إذا أعادregisteredومعرّف الخوارزمية 1 (ML-DSA-87) وpossessionProven. المفتاح المسجَّل دون إثبات حيازة قد يعود لشخص آخر، لذلك لا يُحتسب. وتبقى كل ضوابط المعيار الأصلي سارية (سجل الهوية، وموضوعات المطالبات، والتجميد، والإيقاف المؤقت، والتحويل القسري)؛ ويُضاف الفحص إليها. - الفشل مغلقاً مع فك ترميز صارم. يستدعي الضابط المُسبَق (precompile) بحصة غاز ثابتة ويفك ترميز الإجابة بصرامة. والإجابة بالتخطيط القديم ذي الحقول الثلاثة، أو الإجابة المشوَّهة، أو انعدام الإجابة، تُعامَل كأنه "لا يوجد مفتاح". وحيث لا يكون المُسبَق فعّالاً يكون كل عنوان غير مُعفى غير مؤهل.
- الضابط نفسه خلف ثلاثة محوّلات. يتصل
QoreChainHybridHolderRuleبرمز CMTAT v3 بوصفهruleEngineله (أو بوصفه قاعدة داخل CMTA RuleEngine) مع رموز التقييد 60 و61 و62؛ ويتصلQoreChainHybridHolderModuleبالامتثال المعياري لـ ERC-3643 كوحدة plug-and-play؛ وتقبل الخزائن أي سياسةIHolderEligibility، ومنها الضابط. - حصص خزائن لا تتيح تبييض رمز مقيَّد. يفحص
QoreChainRwaVault(ERC-4626) وQoreChainRwaAsyncVault(ERC-7540، تُسوّى فيه الطلبات على دفعات بواسطة مشغّل يحملFULFILLER_ROLE) جهة الاستلام في كل حركة حصص: فتعيدmaxDepositوmaxMintصفراً للمستلم غير المؤهل. ولا تُرفض عمليات الاسترداد أبداً. - عقود المصدر الأصلي تُستخدم دون تعديل. T-REX 4.1.6 وONCHAINID 2.2.1 وCMTAT 3.2.0 وOpenZeppelin هي git submodules، وليست نسخاً.
- مقترح يمكن اختباره قبل وجوده. يفشل كل استدعاء على
ChainClientبالخطأChainUpgradeRequired(الرمزCHAIN_UPGRADE_REQUIREDمع اسم الوحدة) دون إرسال أي طلب شبكة. وينفّذMockChainالقواعد المقترحة داخل الذاكرة ويرفض بالخطأMockChainErrorالذي يحمل اسم رمز الخطأ المقترح، مثلERROR_CODE_ADDRESS_FROZEN. ويمكن كتابة التطبيق على المحاكاة مع إبقاء العميل الحقيقي موصولاً، فيُبلَّغ بوضوح عن ترقية غائبة بدل أن يفشل بصمت. - وحدة تحكم بلا خادم خلفي. وحدة تحكم المُصدِر صفحة React لا ترسل أي طلب شبكة من تلقاء نفسها؛ وتضبط النسخة الإنتاجية Content-Security-Policy بالقيمة
connect-src 'none'، ويمر كل شيء عبر المحفظة المتصلة. - اختبارات تعمل دون اتصال. تعمل 33 اختبار Foundry بلا شبكة، باستخدام بديل اختباري للمُسبَق.
ما الذي تفعله
يعمل اليوم على QoreChain EVM (شبكة الاختبار):
QoreChainHybridHolderGuard. يبيّن ما إذا كان لعنوان مفتاح ML-DSA-87 مسجَّل مع إثبات حيازة (isHybridHolderوisEligibleوrequireHybridHolderوkeyStatusوprecompileActive). إعفاءات يديرها المالك للعقود مثل الخزائن وحسابات الضمان (setExempt، والحدثExemptionSetمع سبب). وتنتقل الملكية على خطوتين (Ownable2Stepمن OpenZeppelin).QoreChainHybridHolderRule. قاعدة تحويل لـ CMTAT v3 مرتبطة بالضابط. رموز التقييد 60 (المرسِل) و61 (المستلِم) و62 (المنفِق) عبرdetectTransferRestrictionوdetectTransferRestrictionFromوmessageForTransferRestriction.QoreChainHybridHolderModule. وحدة امتثال معياري لـ ERC-3643 (T-REX v4) مرتبطة بالضابط. تفحصmoduleCheckالمرسِل والمستلِم. لا إعداد لكل امتثال على حدة.QoreChainRwaVaultوQoreChainRwaAsyncVault. موصوفان أعلاه.IERC7518. رسم أولي لواجهة أقسام ERC-7518 (partitions)، دون تنفيذ؛ ويفحص أحد الاختبارات معرّف ERC-165 الخاص بها0x5a264a5d.- سكربتات النشر (Foundry).
script/DeployCmtat.s.solوscript/erc3643/DeployErc3643.s.solوscript/DeployVaults.s.sol، مع فحص مسبق مشترك (script/QoreChainTestnet.sol) يبلّغ عمّا إذا كان المُسبَق يجيب وعن حالة مفتاح المُنشِر، ويرفض السلسلة 9801. - وحدة تحكم المُصدِر (
packages/issuer-console). تتصل بأي محفظة EIP-6963، وتضيف QoreChain Testnet أو تنتقل إليها، وتنشئ رمز CMTAT محمياً بالضابط (الضابط والقاعدة والرمز، كما فيDeployCmtat.s.sol)، وتفتح رموز CMTAT أو ERC-3643 قائمة، وتنفّذ إجراءات الوكيل (الإصدار والحرق والتجميد وفك التجميد والتحويل القسري والإيقاف المؤقت واستئنافه)، وتعرض الحاملين وسجل تدقيق مبنياً من أحداث السلسلة.
المقترح (غير موجود على السلسلة):
- واجهات protobuf في
proto/لـx/assetوx/identityوx/complianceوx/settlementوx/attest، ودلالاتها فيdocs/proposal.md. - عملاء بلغات TypeScript وPython وGo وJava: الأنواع المولَّدة، و
ChainClient، وMockChain.
مستندات مرجعية في المستودع:
docs/evm-adapters.md: العقود، ورخص المصدر الأصلي، والنشر على شبكة الاختبار.docs/technology-standards.md: مسودة تصف الشبكتين كما يحتاج المُصدِر أو المدقق أن يراهما (الموثوقية، والحوكمة، وصلاحية الترقية، وترتيب المعاملات، وقابلية المراقبة، ومعالجة الحوادث، وإدارة المفاتيح)، وكل واقعة موسومة بإحدى: Verified أو Documented أو Not measured أو Not published.legal/: ثلاثة قوالب للنقاش (راجع الحدود).
حالات الاستخدام
- مُصدِر ينشئ نموذجاً أولياً لرمز مقيَّد الصلاحيات على شبكة الاختبار. ينشر المُصدِر رمز CMTAT بـ
DeployCmtat.s.sol(أو من وحدة تحكم المُصدِر)، أو مجموعة ERC-3643 كاملة بـDeployErc3643.s.sol، ويجرّب التجميد والإيقاف المؤقت والتحويل القسري وفحص الحامل علىqorechain-dianaقبل أي قرار بإصدار حقيقي. - مدير صندوق يدير الاشتراكات والاستردادات عبر خزائن بحصص مقيَّدة. يطلب المستثمرون الإيداع على
QoreChainRwaAsyncVault؛ ويعالجها المدير على دفعات بـfulfillDepositوfulfillRedeem؛ ولا يمكن أن تستلم الحصص إلا العناوين المؤهلة، بينما يبقى الاسترداد مفتوحاً لكل من يحمل حصصاً. - فريق امتثال يشترط تسجيل مفتاح ما بعد كمّي لكل حامل. إضافة
QoreChainHybridHolderRule(CMTAT) أوQoreChainHybridHolderModule(ERC-3643) تعني أن الرمز لا يمكن إصداره أو تحويله إلا إلى عناوين لها مفتاح ML-DSA-87 مسجَّل ومُثبَتة حيازته، فوق ضوابط الهوية وقائمة السماح الخاصة بالمعيار. - مدمج يبني على الوحدات الأصلية المقترحة. تكتب محفظة أو سجل أو نظام خلفي شيفرته مقابل
MockChainبـ TypeScript أو Python أو Go أو Java، ويتحقق من أحداثه ورموز أخطائه، ويُبقيChainClientموصولاً. - فريق منتج يصمم تدفقات التسليم مقابل الدفع (delivery-versus-payment) والإفادات. يمكن تجربة
x/settlementالمقترحة (تعليمات مع إقرار ثنائي الأطراف، كل الأرجل أو لا شيء) وx/attest(بيانات ذات فترة صلاحية وحالة قِدَم) فيMockChainلتصميم تدفقات المستخدم، مع العلم أن أيّاً منهما غير موجود على السلسلة. - فريق قانوني يبدأ الأوراق مع محامٍ. تمنح القوالب الخاصة بورقة مالية قائمة على السجل في سويسرا، وشروط رموز TVTG في ليختنشتاين، وارتباط بنظام DLT التجريبي للاتحاد الأوروبي، هيكلاً وقسماً للربط التقني لتعبئته. ويراجع محامٍ مؤهل في الولاية القضائية كل شيء قبل أي استخدام.
- مراجع العناية الواجبة يقرأ وقائع الشبكة. يسرد
docs/technology-standards.mdما يمكن التحقق منه على الشبكتين الحيتين وما لم يُقَس أو لم يُنشر، مع المصادر.
كيف تعمل
فحص الحامل على EVM
يجيب المُسبَق عند 0x0A02 عن pqcKeyStatus(address) returns (bool registered, uint8 algorithmId, bytes pubkey, bool possessionProven). ويشترط الضابط registered && algorithmId == 1 && possessionProven. وهذا ما يجعل الضابط يفشل مغلقاً: فحيث لا يكون المُسبَق فعّالاً، يكون كل عنوان غير مُعفى صراحةً غير مؤهل. راجع مُسبَقات EVM للمُسبَق نفسه وحالته على الشبكات.
CMTAT v3 token -- ruleEngine --> QoreChainHybridHolderRule --+
+--> QoreChainHybridHolderGuard --> 0x0A02 pqcKeyStatus
ERC-3643 token -> ModularCompliance - module --> QoreChainHybridHolderModule --+ (exemptions for contracts)
|
ERC-4626 / ERC-7540 vault shares ----------- IHolderEligibility ---------+
الفحص إضافي. تبقى كل ضوابط المعيار الأصلي سارية: سجل الهوية في ERC-3643 (ONCHAINID)، وموضوعات المطالبات، والمُصدِرون الموثوقون، والتجميد، والتجميد الجزئي، والإيقاف المؤقت، والتحويل القسري، والاسترداد (recovery)؛ وفي CMTAT التجميد والتجميد الجزئي والإيقاف المؤقت والتحويل القسري والمستندات واللقطات.
ما الذي يغطيه الفحص
المهم هو الاستلام: فالإصدار أو التحويل إلى عنوان بلا مفتاح يُرفض. وتفحص قاعدة CMTAT كذلك المرسِل، وفي transferFrom المنفِق. أما وحدة ERC-3643 فتفحص المرسِل والمستلِم؛ ولا يمرّر ERC-3643 المنفِق إلى وحدات الامتثال، فلا يُفحص منفِق transferFrom هناك. ولا يُرفض الحرق أبداً (في ERC-3643 لا يستشير burn وحدات الامتثال إطلاقاً)، فيمكن استرداد حامل فقد أهليته.
الخزائن
تفحص الخزنتان جهة الاستلام في كل حركة حصص؛ ولا يُرفض الاسترداد أبداً. في خزنة ERC-7540 تُجمَّع الطلبات لكل متحكّم (controller) (معرّف الطلب 0). يحوّل المنفِّذ (fulfiller) الإيداعات المعلّقة إلى حصص بنسبة الأصول لكل حصة في الخزنة نفسها عند التنفيذ، دون أي مدخل تقييم خارجي؛ ثم يطالب المتحكّمون بـ deposit أو mint، أو redeem أو withdraw. ويجب أن يُسمح لعقد الخزنة نفسه بحيازة الرمز الأساسي: مسجَّلاً في سجل الهوية في ERC-3643 أو في قائمة السماح في CMTAT، ومُعفى في الضابط (يضبط DeployVaults.s.sol إعفاءات الضابط).
إرسال معاملة EVM على QoreChain
لا تُقبل أي معاملة EVM على QoreChain إلا إذا كان لدى المرسِل:
- مفتاح ML-DSA-87 مسجَّل، سُجّل بـ
MsgRegisterPQCKeyV2مع إثبات حيازة، و - نافذة تفويض EVM مفتوحة، فتحتها
/qorechain.pqc.v1.MsgOpenEVMWindowفي معاملة مسار Native موقّعة هجيناً (secp256k1 مع ML-DSA-87).
للنشر تحتاج النافذة إلى allowed_targets فارغة (النافذة المقيَّدة بأهداف ترفض إنشاء العقود)، وmax_txs لا يقل عن عدد المعاملات، وmax_value يغطي القيمة مع أقصى رسوم لكل معاملة، وblocks طويلة بما يكفي (17,280 كحد أقصى)، وnative_only بقيمة false. وفتح النافذة يزيد تسلسل الحساب، وهو أيضاً nonce في EVM: افتح النافذة أولاً ثم شغّل السكربت. والاستدعاءات وتقدير الغاز لا تحتاج نافذة. الخلفية: التوقيع ما بعد الكمّي وتطوير EVM.
المقترح
ست رايات (flags) تُثبَّت أو لا تُخفَّف إلا نحو الأضيق عند الإنشاء (require_auth وfreezable وpausable وnon_transferable وsupply_cap وrequire_hybrid_signature)؛ وأدوار (المُصدِر، والوكلاء، والمدققون، ووكلاء الهوية، ومصدرو المطالبات، والمُقِرّون attesters)؛ وفحوص تحويل مرتبة؛ وتجميد وتجميد جزئي واسترداد قسري (clawback) وتحويل قسري مع سبب مسجَّل؛ وهويات بمطالبات دون بيانات شخصية على السلسلة؛ وسجل لوحدات امتثال مُرقَّمة الإصدار (identity-verified وcountry-allowlist وcountry-blocklist وmax-holders وmax-balance وattestation-fresh)؛ وتعليمات تسوية مع إقرارات؛ وإفادات بحالة FRESH أو STALE أو MISSING. والمواصفة هي docs/proposal.md في المستودع. وحيث يختلف النص عن المحاكاة فالنص هو السلوك المقصود. كل هذا تصميم: لا شيء منه موجود على أي شبكة QoreChain.
طريقة الاستخدام
التثبيت
| الجزء | التثبيت | الحد الأدنى للمنصة |
|---|---|---|
| عقود Solidity (من GitHub) | git clone --recurse-submodules https://github.com/qorechain/qorechain-asset-kit (الوسم v0.1.0)، أو كاعتماد في Foundry: forge install qorechain/qorechain-asset-kit@v0.1.0 | Foundry؛ solc 0.8.28 (تستخدم ملفات T-REX وONCHAINID الإصدار 0.8.17)؛ evm_version = "cancun" |
| Java | implementation("io.github.qorechain:asset-kit:0.1.0") (Maven io.github.qorechain:asset-kit:0.1.0) | Java 17 |
| Go | go get github.com/qorechain/qorechain-asset-kit/clients/go@v0.1.0 (الحزمة assetkit) | Go 1.23 |
| Python | قريباً على PyPI باسم qorechain-asset-kit؛ غير منشورة بعد. اليوم، من نسخة مستنسخة: cd clients/python && python -m pip install . (الاستيراد qorechain_asset_kit) | Python 3.10 |
| TypeScript | قريباً على npm باسم @qorechain/asset-kit؛ غير منشورة بعد. اليوم، من نسخة مستنسخة: pnpm install && pnpm -r build | Node.js 22.12 |
| وحدة تحكم المُصدِر | من نسخة مستنسخة: pnpm install، ثم pnpm --filter @qorechain/issuer-console dev (غير منشورة كحزمة) | متصفح مع محفظة EIP-6963 |
يستورد README المستودع وREADME عميل TypeScript من @qorechain/asset-kit كأنها مثبَّتة. وهذا يعمل من نسخة مستنسخة فقط، إلى أن يصدر إصدار npm.
مع forge install تقع العقود تحت lib/qorechain-asset-kit/contracts/ واعتماداتها تحت lib/qorechain-asset-kit/contracts/lib/. إعادات التعيين (remappings) التي تترجم الضابط وقاعدة CMTAT والخزائن:
qorechain-asset-kit/=lib/qorechain-asset-kit/contracts/src/
@openzeppelin/contracts/=lib/qorechain-asset-kit/contracts/lib/openzeppelin-contracts/contracts/
CMTAT/=lib/qorechain-asset-kit/contracts/lib/CMTAT/contracts/
البدء السريع 1: ترجمة العقود واختبارها (دون اتصال)
من README المستودع. بلا شبكة وبلا حساب.
git clone --recurse-submodules https://github.com/qorechain/qorechain-asset-kit
cd qorechain-asset-kit/contracts
forge build && forge test
ينتهي الناتج الملاحَظ بـ 33 tests passed, 0 failed, 0 skipped (33 total tests).
البدء السريع 2: تشغيل تجريبي لنشر على شبكة الاختبار
بدون --broadcast يحاكي Foundry على حالة شبكة الاختبار ولا يرسل شيئاً. يصلح أي عنوان لـ --sender في التشغيل التجريبي.
forge script script/DeployCmtat.s.sol --rpc-url qorechain_testnet --sender <deployer>
qorechain_testnet معرَّف في foundry.toml على أنه https://evm-testnet.qore.host. يطبع الفحص المسبق معرّف السلسلة (9800) وpqcKeyStatus precompile: active وحالة مفتاح المُنشِر. وللعنوان الذي لا مفتاح له يضيف Broadcasting would fail: register an ML-DSA-87 key and open an EVM window first. ثم يطبع العناوين التي سيحصل عليها الضابط والقاعدة والرمز. وينتهي الأمر نفسه على الشبكة الرئيسية بالرسالة QoreChain mainnet: the hybrid-holder guard is testnet only. ويعمل script/erc3643/DeployErc3643.s.sol وscript/DeployVaults.s.sol بالطريقة نفسها. متغيرات البيئة الاختيارية: CMTAT_ADMIN وCMTAT_NAME وCMTAT_SYMBOL وCMTAT_TOKEN_ID وCMTAT_TERMS_URI وTREX_AGENT وTREX_SALT وVAULT_ASSET وVAULT_GUARD.
قبل البث على شبكة الاختبار
- استخدم حساباً على شبكة الاختبار تتحكم به، وفيه قليل من QOR شبكة الاختبار (راجع الصنبور (Faucet)). لا تستخدم أبداً عبارة استرجاع من الشبكة الرئيسية، ولا تموّل أبداً العبارة التجريبية العامة المستخدمة في الأمثلة.
- سجّل مفتاح ML-DSA-87 الخاص به مع إثبات الحيازة (يسجّل المثال
examples/register-and-sendمن QoreSign مفتاحاً). - افتح نافذة تفويض EVM بالإعدادات الواردة في إرسال معاملة EVM، مع
allowed_targetsفارغة. يبني QoreChain SDK الرسالة (openEvmWindowفي مجموعة الرسائلpqcفي TypeScript، وqorsdk.msg.pqc.open_evm_windowفي Python) ويقرأ النافذة (fetchEvmWindowوget_evm_window). - شغّل السكربت بـ
--broadcastوإعداد محفظتك. - أعفِ كل عقد يجب أن يحتفظ بالرمز (الخزائن وحسابات الضمان) بـ
guard.setExempt، وسجّل الحاملين في امتثال الرمز نفسه، وافحص كل حامل بـguard.isHybridHolder(address)قبل الإصدار.
البدء السريع 3: وحدة تحكم المُصدِر (شبكة الاختبار)
pnpm install
pnpm --filter @qorechain/issuer-console dev
اتصل بمحفظة EIP-6963، وانتقل إلى QoreChain Testnet، ثم أنشئ رمز CMTAT أو افتح رمزاً قائماً بعنوانه. وعلى السلسلة 9801 تعرض وحدة التحكم تحذيراً وتعطّل إنشاء الرموز. ولا تسجّل وحدة التحكم مفاتيح ولا تفتح نوافذ؛ فنفّذ الخطوتين 2 و3 أعلاه أولاً.
البدء السريع 4: البناء على الوحدات المقترحة بـ MockChain (Python، دون اتصال)
من README عميل Python. وإلى أن يصدر إصدار PyPI ثبّت من نسخة مستنسخة (راجع التثبيت).
from qorechain_asset_kit import MockChain, MockChainError, asset
chain = MockChain()
chain.asset.create_asset(issuer="qor1issuer", asset_id="bond-2030", flags={"freezable": True})
chain.asset.mint(agent="qor1issuer", asset_id="bond-2030", to="qor1alice", amount="100")
chain.asset.freeze(agent="qor1issuer", asset_id="bond-2030", holder="qor1alice", frozen=True)
try:
chain.asset.transfer(from_="qor1alice", asset_id="bond-2030", to="qor1bob", amount="1")
except MockChainError as e:
print(e.code) # ERROR_CODE_ADDRESS_FROZEN
الناتج الملاحَظ: ERROR_CODE_ADDRESS_FROZEN. أما الاستدعاء نفسه على ChainClient() فيرفع ChainUpgradeRequired مع module == "x/asset" وcode == "CHAIN_UPGRADE_REQUIRED".
البدء السريع 5: الشيء نفسه بلغة Go (وكيل الوحدات v0.1.0)
من README عميل Go، ملفوفاً في حزمة main.
package main
import (
"context"
"errors"
"fmt"
assetkit "github.com/qorechain/qorechain-asset-kit/clients/go"
assetv1 "github.com/qorechain/qorechain-asset-kit/clients/go/gen/qorechain/asset/v1"
)
func main() {
ctx := context.Background()
chain := assetkit.NewMockChain()
_, err := chain.Asset().CreateAsset(ctx, &assetv1.MsgCreateAsset{
Issuer: "qor1issuer", AssetId: "bond-2030", Flags: &assetv1.RwaFlagsV0{Freezable: true},
})
_, err = chain.Asset().Mint(ctx, &assetv1.MsgMint{Agent: "qor1issuer", AssetId: "bond-2030", To: "qor1alice", Amount: "100"})
fmt.Println("mock mint error:", err)
_, err = assetkit.NewChainClient().Asset().Mint(ctx, &assetv1.MsgMint{})
var upgrade *assetkit.ChainUpgradeRequired
fmt.Println(errors.As(err, &upgrade), upgrade.Module)
}
الناتج الملاحَظ: mock mint error: <nil> ثم true x/asset. ويحتوي README عميل Java على المثال المكافئ بـ MockChain وMsgCreateAsset.newBuilder() وMockChainError.code().
يحتوي README عميلَي Go وTypeScript في المستودع على أخطاء صغيرة في مقاطعهما، ستُصحَّح في 0.1.1. ومثال Go أعلاه هو النسخة المصحَّحة.
واجهة البرمجة الرئيسية
العقود
| الاسم | ما يفعله |
|---|---|
QoreChainHybridHolderGuard(initialOwner) | ضابط فوق 0x0A02: isHybridHolder وisEligible وrequireHybridHolder (يتراجع بالخطأ HybridKeyRequired) وkeyStatus وdecodeKeyStatus وprecompileActive وsetExempt وexempt |
QoreChainHybridHolderRule(guard) | قاعدة CMTAT: detectTransferRestriction وdetectTransferRestrictionFrom وcanTransfer وcanTransferFrom وmessageForTransferRestriction وcanReturnTransferRestrictionCode؛ الرموز CODE_FROM_NOT_HYBRID (60) وCODE_TO_NOT_HYBRID (61) وCODE_SPENDER_NOT_HYBRID (62) |
QoreChainHybridHolderModule(guard) | وحدة ERC-3643: moduleCheck وbindCompliance وunbindCompliance وisComplianceBound وisPlugAndPlay وname |
QoreChainRwaVault(asset, name, symbol, eligibility) | خزنة ERC-4626 بحصص مقيَّدة |
QoreChainRwaAsyncVault(asset, name, symbol, eligibility, admin) | خزنة ERC-7540: requestDeposit وfulfillDeposit وrequestRedeem وfulfillRedeem وpendingDepositRequest وclaimableDepositRequest وpendingRedeemRequest وclaimableRedeemRequest وsetOperator، وdeposit وmint وredeem وwithdraw مع متحكّم؛ FULFILLER_ROLE؛ وتتراجع المعاينات (previews) عمداً |
IHolderEligibility | isEligible(address): لتوصيل سياسة أهلية أخرى للخزائن |
IERC7518 | رسم أولي لواجهة الأقسام |
forge script script/DeployCmtat.s.sol | الضابط والقاعدة ورمز CMTAT |
forge script script/erc3643/DeployErc3643.s.sol | بنية T-REX التحتية والضابط والوحدة ومجموعة رمز واحدة |
forge script script/DeployVaults.s.sol | الخزنتان فوق رمز مقيَّد، مع إعفاءات الضابط |
العملاء (مقترح)
تظهر أسماء TypeScript وJava؛ وتستخدم Python الصيغة snake_case (create_asset)، وتستخدم Go الحالة الخاصة بها خلف دوال الوصول (chain.Asset().CreateAsset(ctx, msg)).
| الاسم | ما يفعله |
|---|---|
ChainClient (في Go NewChainClient()) | يفشل كل استدعاء بالخطأ ChainUpgradeRequired؛ دون طلب شبكة |
MockChain (في Go NewMockChain()) | القواعد المقترحة داخل الذاكرة؛ وتُطلق الرفوض MockChainError |
asset | createAsset وupdateFlags وsetRole وproposeIssuer وacceptIssuer وauthorizeHolder وmint وburn وtransfer وfreeze وfreezePartial وpause وclawback وforceTransfer وsetTerms وretire؛ والاستعلامات asset وassets وholder وholders وroles وcanTransfer وparams |
identity | registerIdentity وupdateCountry وbindAddress وunbindAddress وaddClaim وrevokeClaim وremoveIdentity وsetClaimIssuer؛ والاستعلامات identity وidentityByAddress وclaimIssuers وisVerified |
compliance | registerModule وsetModuleStatus وbindModule وunbindModule وmigrateBinding؛ والاستعلامات modules وmodule وbindings وcheck |
settlement | createVenue وcreateInstruction وaffirm وwithdrawAffirmation وexecuteInstruction وcancelInstruction؛ والاستعلامات instruction وinstructionsByParty وvenue |
attest | setAttester وsubmit وrevoke؛ والاستعلامات latest وhistory وattesters |
| مساعدات المحاكاة | setHybridKey وfundBank وbankBalance وadvance(blocks, seconds) وevents(type) وdefineModuleLogic(moduleId, fn) (وفي Python أيضاً has_hybrid_key وheight وtime) |
طريقة الوصول
شبكة الاختبار qorechain-diana | الشبكة الرئيسية qorechain-vladi | |
|---|---|---|
| معرّف سلسلة EVM | 9800 | 9801 |
| EVM RPC | https://evm-testnet.qore.host | https://evm.qore.host |
المُسبَق pqcKeyStatus عند 0x0A02 | فعّال | غير فعّال (تعيد eth_call بيانات فارغة)؛ وتفعيله يحتاج قرار حوكمة، ولم يُتخذ أي قرار |
| الضابط والقاعدة والوحدة الهجينة للحامل | تعمل | تفشل مغلقة: كل عنوان غير مُعفى غير مؤهل، فلا تنتقل الرموز بين الحاملين العاديين |
| سكربتات النشر | تشغيل تجريبي وبث | ترفض العمل |
| وحدة تحكم المُصدِر | كاملة | تحذير؛ وإنشاء الرموز معطَّل |
الوحدات الأصلية (x/asset وغيرها) | غير موجودة | غير موجودة |
متطلبات أي شيء يرسل معاملة EVM: حساب له مفتاح ML-DSA-87 مسجَّل (مع إثبات حيازة) ونافذة تفويض EVM مفتوحة، وكلاهما يُعدّ على مسار Native بمعاملة موقّعة هجيناً. والقراءات (eth_call والسجلات وتقدير الغاز والتشغيلات التجريبية) لا تحتاج أياً منهما. وMockChain واختبارات Foundry لا تحتاج شبكة إطلاقاً. نقاط النهاية الأخرى والصنبور: الاتصال بشبكة الاختبار والاتصال بالشبكة الرئيسية.
سلوك الشبكة الذي يجب وضعه في الحسبان: PREVRANDAO ثابت (ولا يستخدمه أي عقد في المجموعة)؛ ومعاملات blob (النوع 3) مرفوضة، والأنواع 0 و1 و2 و4 مقبولة؛ وتفويضات EIP-7702 تحتاج إلى موافقة صاحب التفويض نفسه ما بعد الكمّية (MsgAuthorizeEVMDelegation).
أين يُنشر
جرى التحقق الحي في 28 أكتوبر 2026 (إصدار GitHub وMaven Central ووكيل Go تقدّم 0.1.0؛ وتعيد PyPI وnpm الخطأ 404).
| السجل | الحزمة | الإصدار | الرابط |
|---|---|---|---|
| Maven Central | io.github.qorechain:asset-kit | 0.1.0 | https://central.sonatype.com/artifact/io.github.qorechain/asset-kit |
| وكيل وحدات Go | github.com/qorechain/qorechain-asset-kit/clients/go | v0.1.0 (الوسم clients/go/v0.1.0) | https://pkg.go.dev/github.com/qorechain/qorechain-asset-kit/clients/go |
| PyPI | qorechain-asset-kit | قريباً (ليست على PyPI بعد) | |
| npm | @qorechain/asset-kit | قريباً (غير منشورة) | |
| GitHub (عقود Solidity ووحدة تحكم المُصدِر وملفات proto والمستندات والقوالب القانونية) | qorechain/qorechain-asset-kit | الإصدار v0.1.0 | https://github.com/qorechain/qorechain-asset-kit/releases/tag/v0.1.0 |
المستودع: https://github.com/qorechain/qorechain-asset-kit. الجهة الصائنة: جمعية QoreChain.
الرخص. الشيفرة بموجب Apache-2.0، باستثناء contracts/script/erc3643/ وcontracts/test/erc3643/ اللذين يُترجمان مع التنفيذ المرجعي لـ ERC-3643 وهما بموجب GPL-3.0-or-later. والتوثيق في docs/ وlegal/ بموجب Apache-2.0. وتحتفظ الاعتمادات برخصها وتُستخدم دون تعديل بوصفها git submodules: T-REX وONCHAINID (GPL-3.0) وCMTAT (MPL-2.0) وOpenZeppelin (MIT). ورمز ERC-3643 المنشور هو شيفرة T-REX بموجب رخصتها؛ ورمز CMTAT المنشور بموجب MPL-2.0. ويسرد الملف NOTICE كل اعتماد.
الحدود والمشكلات المعروفة
- الوحدات الأصلية غير موجودة.
x/assetوx/identityوx/complianceوx/settlementوx/attestمقترح. ولا توجد ترقية مجدولة تضيفها. ولا يمكن لـChainClientأن ينجح في 0.1.0؛ وMockChainأداة تطوير، وليست سلسلة. - فحص الحامل لشبكة الاختبار فقط. على الشبكة الرئيسية يفشل الضابط مغلقاً؛ ولا يمكن لنشر على الشبكة الرئيسية الاعتماد عليه.
- صلاحيات الوكيل تتجاوز فحص الحامل. في المعيارين كليهما، لا يستشير التحويل القسري واسترداد المحفظة بواسطة وكيل القاعدة أو الوحدة: فـ
forcedTransferفي CMTAT وforcedTransferوrecoveryAddressفي ERC-3643 يمكنها وضع رموز على عنوان لا مفتاح له. قيّد من يحمل أدوار الوكيل. - منفِقو
transferFromفي ERC-3643 لا تفحصهم الوحدة، لأن ERC-3643 لا يمرّر المنفِق إلى الامتثال. أما قاعدة CMTAT فتفحص المنفِق. - الحرق والاسترداد يبقيان مفتوحين للحاملين الذين فقدوا أهليتهم، عن قصد، في معياري الرموز وفي الخزنتين.
- لا يمكن إلغاء طلبات ERC-7540 المعلّقة في 0.1.0. وإذا نقل وكيل أصولاً خارج الخزنة غير المتزامنة، تقرأ
totalAssetsصفراً وتفشل المطالبات التي تحتاج إلى الأصول الناقصة إلى أن يعيد المُصدِر الرصيد. - لا مدخل تقييم خارجي في خزنة ERC-7540؛ ويستخدم التحويل رصيد الخزنة نفسها لكل حصة.
- لا تسليم مقابل دفع ولا إفادات على EVM. وهي موجودة فقط في
x/settlementوx/attestالمقترحتين. - ERC-7518 رسم أولي لواجهة، وليس تنفيذاً. ويمكن اليوم نمذجة الأقسام برمز واحد لكل فئة أو شريحة يتشاركان سجل هوية أو قاعدة واحدة.
- CMTA RuleEngine v3 لا يزال منشوراً كمرشحات إصدار (release candidates)؛ وتعمل القاعدة بوصفها
ruleEngineللرمز مباشرة وتعلن عن معرّفَي واجهة القاعدة كليهما (0x2497d6cbو0xb1a69752). - وحدة تحكم المُصدِر لا تسجّل مفاتيح، ولا تفتح نوافذ، ولا تنشر مجموعات ERC-3643 أو خزائن، ولا تدير أدوار CMTAT أو التجميد الجزئي أو المستندات أو اللقطات.
- Python وTypeScript ليستا على سجلّيهما. استخدم نسخة مستنسخة إلى أن يصدر إصدارا PyPI وnpm؛ ولا تقدّم هذه الصفحة أمر تثبيت من سجل لهما.
- أخطاء في README. لمقاطع Go وTypeScript في ملفات README بالمستودع أخطاء صغيرة، ستُصحَّح في 0.1.1. استخدم البدايات السريعة في هذه الصفحة.
- القوالب القانونية. يضم
legal/ثلاث مسودات للنقاش: ورقة مالية قائمة على السجل في سويسرا (المواد 973d إلى 973i من قانون الالتزامات)، وشروط رموز في ليختنشتاين بموجب TVTG (نهج "token container")، ومخطط ارتباط لمشغّل بموجب نظام DLT التجريبي للاتحاد الأوروبي (اللائحة (EU) 2022/858). لم يراجعها محامٍ، وهي ليست استشارة قانونية، ويجب أن يراجعها محامٍ مؤهل في الولاية القضائية المعنية قبل أي استخدام. واستخدامها، أو استخدام المجموعة، لا يدل على شيء بشأن ما إذا كان إصدار معيّن يستوفي أي متطلب قانوني. ولا تعمل جمعية QoreChain مُصدِراً ولا أمين سجل ولا جهة حفظ ولا منصة ولا مستشاراً قانونياً لأي أصل. - ما قبل 1.0. قد تتغير ملفات proto المقترحة في أي إصدار فرعي.
ملاحظات الأمان
- لم تُدقَّق. لم تخضع العقود لأي مراجعة مستقلة. لا تستخدمها لحيازة قيمة حقيقية دون مراجعة.
- تبقى المفاتيح عند أصحابها: يقرأ الضابط حالة المفتاح العام من السلسلة ولا يتعامل مع مفتاح خاص أبداً. مفاتيح المُنشِر والمالك والوكيل حسابات EVM عادية لها مفاتيح ML-DSA-87 مسجَّلة؛ فأبقِ أدوار المُصدِر ومالك الضابط والوكيل على حسابات منفصلة ومحمية جيداً.
- يتحكم مالك الضابط بالإعفاءات. والإعفاء يجعل العنوان مؤهلاً دون مفتاح؛ فامنحه للعقود التي تحتفظ بالأصل بحكم تصميمها، وراقب أحداث
ExemptionSet. - يمكن لأدوار الوكيل أن تتجاوز فحص الحامل (التحويل القسري، والاسترداد). عاملها بوصفها أكثر أدوار الرمز حساسية.
- يفشل الضابط مغلقاً ويفك ترميز إجابة المُسبَق بصرامة؛ ولا يعدّ أبداً مفتاحاً بلا إثبات حيازة صالحاً.
- تضبط النسخة الإنتاجية من وحدة تحكم المُصدِر Content-Security-Policy بالقيمة
connect-src 'none': فالصفحة لا ترسل أي طلب شبكة من تلقاء نفسها، ويمر كل شيء عبر المحفظة. - يثق
MockChainبحقول الموقّع في الرسائل (لا توجد توقيعات)؛ وهو ليس حداً أمنياً. - ينبغي أيضاً إرسال المشكلات في CMTAT أو التنفيذ المرجعي لـ ERC-3643 أو ONCHAINID أو OpenZeppelin إلى القائمين عليها.
- أبلغ عن الثغرات في المجموعة سراً إلى security@qore.network.
صفحات ذات صلة
- QoreChain SDK: تسجيل مفتاح ML-DSA-87 وفتح نافذة تفويض EVM (
openEvmWindowوfetchEvmWindowوget_evm_window). - QoreSign: التوقيع الهجين لمعاملات مسار Native التي تسجّل المفاتيح وتفتح النوافذ.
- التوقيع ما بعد الكمّي والحسابات والتوقيع PQC: تسجيل المفاتيح والتوقيع الهجين.
- تطوير EVM: نافذة تفويض EVM.
- مُسبَقات EVM:
0x0A01و0x0A02، فعّالان على شبكة الاختبار فقط. - Chain developer kit: قوالب Foundry وHardhat وviem ومساعدات النوافذ (SDK 0.11.0، قريباً).
- Custody kit وQoreScan: مجموعتان مجاورتان لجهات الحفظ ولجرد التشفير.
- حزم المطورين: كل حزمة وحالتها في السجل.
- المعايير الأصلية: ERC-3643 وCMTAT وERC-4626 وERC-7540 وERC-7518.