Chindan ham mavjud bo'lgan aktivlar
Haqiqiy dunyo aktivlari (RWAs) zanjirdan tashqari aktivlar modeli bo'lib, ularning mulkdorligi yoki nazorati zanjirda kuzatiladi. Iroha da RWA - bu yaratilgan identifikator, egasining hisob raqami, miqdor, biznes metadatalari, kelib chiqishi va hayot davri nazoratlarini o'z ichiga olgan ro'yxatga olingan katta daftar lotidir .
RWAs raqamli aktivlar saldi bilan farq qiladi:
- raqamli aktiv - hisobda saqlanayotgan tangible balans;
- NFT - bitta egasiga ega bo'lgan yagona zanjirdagi yozuv
- RWA - bu biznes metadatalarini, miqdorni, saqlovlarni, muzlatishni, to'lov holatini, kelib chiqishini va nazoratchi siyosatini olib borishi mumkin bo'lgan partiyadir
RWAs dan foydalaning, agar katta ro'yxat faqat shov-shuv bilan bog'liq bo'lmagan lotni ifodalashi kerak bo'lsa.
RWA Lot
RWA partiyasida quyidagilar mavjud:
id: hosil qilingan kanonik RWA identifikatori,<hash>$<domain>sifatida ko'rsatiladi.owned_by: partiyani hozirda egallagan hisob raqamlariquantity: partiya tomonidan ko'rsatilgan to'liq miqdorspec: miqdorni belgilash, masalan, o'nlik baravarprimary_reference: zanjirdan tashqaridagi asosiy rasit, sertifikat, faktura yoki reyestr ma'lumotnomasi.status: ishbilarmonlik holati matni;metadata: biznes kontekstida va indekslashda ishlatiladigan kompakt JSON maydonlariparents: ushbu partiyani olish uchun ishlatilgan manba lotlaricontrols: nazoratchi hisobvaraqlari, nazoratchining vazifasi va ruxsat etilgan nazoratchi operatsiyalari;is_frozenvaheld_quantity: ish vaqti bilan qo'llab-quvvatlanadigan hayot davri holati
Zilziladagi foydali yukni kompak saqlang. Katta huquqiy hujjatlar, inspeksiya hisobotlari va audit to'plamlarini WSV tashqarisida saqlash, so'ngra URI, SoraFS yo'li yoki RWA metadatalariga ma'lumotlar bilan bog'lash.
Identifikatorlar
RegisterRwa qo'ng'iroq qiluvchi tomonidan tanlangan id so'zini qabul qilmaydi va owner maydonini ham qabul qilmaydi. Transaksiya organi dastlabki owned_by hisob raqamiga aylanadi, ish vaqti esa maqsadli domendagi RwaId so'zni hosil qiladi.
RWA ID ning matn shakli quyidagicha:
<generated-hash>$<domain>Masalan:
0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef$commodities.universalTalabnomalar o'z biznes identifikatorini primary_reference yoki metadata da saqlashlari kerak, so'ngra RwaEvent::Created, FindRwas, /v1/rwas dan hosil bo'lgan RwaId yoki tranzaksiya majburiyatlaridan keyin aniqlangan qidiruvchining yo'nalishini aniqlashlari lozim.
Hayot davri
RWA umumiy ish oqimlari quyidagilarni o'z ichiga oladi:
| Operatsiya | Amalga oshirilgan xatti-harakatlar |
|---|---|
RegisterRwa | ID lotini domenida yarating; bitim hokimiyati owned_byga aylanadi. |
TransferRwa | Ko'plikni boshqa hisob raqamiga o'tkazing. To'liq o'tkazish owned_by o'zgartirishi mumkin. qisman o'tkazilish ID hosil bo'lgan alohida bola lotini yaratadi. |
HoldRwa | ehtiyot miqdori. Konfiguratsiya qilingan nazoratchi va hold_enabled kerak. |
ReleaseRwa | Qo'llanilgan miqdorni olib tashlash. Konfiguratsiya qilingan boshqaruvchini va hold_enabled talab qiladi. |
FreezeRwa | Oddiy egasining operatsiyalarini bloklash. Konfiguratsiyalangan boshqaruvchini va freeze_enabled talab qiladi. |
UnfreezeRwa | Oddiy egasi operatsiyalarini qayta qo'llash. Konfiguratsiyalangan boshqaruvchini va freeze_enabled talab qiladi. |
RedeemRwa | Muvaffaqiyatdan doimiy ravishda miqdorni tortib olish. Egasi yoki nazoratchi redeem_enabled to'g'ri bo'lganda uni taqdim qilishi mumkin. |
MergeRwas | Bir xil domenga ega bo'lgan ota-ona partiyalarining miqdorlarini birlashtirib, hosil qilingan bola partiyasiga aylantiring. |
ForceTransferRwa | Ko'plikni nazoratchi oqimi orqali ko'chirish. Konfiguratsiya qilingan nazoratchini va force_transfer_enabled talab qiladi. |
SetRwaControls | Partiya nazoratini o'zgartirish uchun mulkdor yoki nazoratchi kerak. |
SetKeyValue<Rwa> / RemoveKeyValue<Rwa> | Lot metadatalarini yangilash. Egasini yoki nazoratchini talab qiladi; muzlatilgan lotlarga nazoratchi kerak. |
Joriy kodda UnregisterRwa ko'rsatmasi yo'q. Belgilangan miqdor yetkazib berilgan, iste'mol qilingan, hisobdan chiqarilgan yoki boshqa tarzda muomaladan olib tashlanganda, zanjirdagi lotni RedeemRwa bilan doimiy ravishda muomaladan chiqaring.
Metadotlar va nazoratlar
Ilovalarni lotni aniqlash va tasdiqlash uchun kompakt faktlar uchun metadatalardan foydalaning:
- aktivlar sinflari, emitentlar, depozitorlar yoki reyestr ma'lumotlari
- ombor, vaft, ISIN, faktura yoki sertifikat identifikatorlari
- attestatsiyalar va huquqiy hujjatlar uchun tarkib hashlari
- SoraFS ko'proq dalillar to'plamlari uchun yo'nalishlar yoki ma'lumotlar ma'lumotlari
- zaryaddan tashqaridagi xizmatlar tomonidan ishlatiladigan muddati, vakolat yoki muvofiqlik belgilari
Amalga oshirilgan RwaControlPolicy ga quyidagi maydonlar kiradi:
{
"controller_accounts": [],
"controller_roles": [],
"freeze_enabled": true,
"hold_enabled": true,
"force_transfer_enabled": false,
"redeem_enabled": true
}Boshqaruvchining hisoblari va rollari faqat tegishli boolean bayroqlar tomonidan qo'llanilgan operatsiyalarni amalga oshirishi mumkin. Hozirgi boshqaruv yuklamasida nazoratchi kimligi va operatsion bayroqlar mavjud. O'tkazish ruxsatnomalari ro'yxatlari va uyushtirilgan transfers qoidalari ushbu foydali yuklamadan tashqarida joylashgan.
Savollar, hodisalar va APIs
Foydalanish FindRwas ro'yxatga olingan RWA To'g'ridan-to'g'ri yangilanishlar kerak bo'lgan dasturlar Rwa ma'lumotlar hodisalari yaratilgan, mulkdorini o'zgartirgan, bo'linadigan, birlashtirilgan, sotib olingan, muzlatilgan, muzlatmagan, O'tkazilgan, chiqarilgan, kuch bilan o'tkaziladigan, nazoratni o'zgartirgan va metadata hodisalari.
Torii zaryad holati yo'nalishlarini aniqlaydi: /v1/rwas va /v1/rwas/query, qo'shimcha tadqiqotchi yo'nalishlari: /v1/explorer/rwas va /v1/explorer/rwas/{rwa_id} yaratilgan mijozlar jonli o'rnatish /openapi bir nod tomonidan aniq javob shakli uchun hujjat.
Taira bilan sinab ko'ring.
Taira tomonidan hozirda RWA lotlar ro'yxatdan o'tkazilganligini tekshirish:
curl -fsS 'https://taira.sora.org/v1/rwas?limit=5' \
| jq '{total, rwa_ids: [.items[].id]}'jonli Taira OpenAPI hujjatida ko'rsatilgan RWA yo'nalishlarini ro'yxatdan o'tkazish:
curl -fsS https://taira.sora.org/openapi.json \
| jq -r '.paths | keys[] | select(startswith("/v1/rwas") or startswith("/v1/explorer/rwas"))'Umumiy lotlar hali ro'yxatdan o'tmagan bo'lsa, bo'sh items chiqarilishi kutilmoqda. Ro'yxatga olish, o'tkazish, saqlash, muzlatish va sotib olish imzolangan bitimlar hisoblanadi.
Buni sinab koʻring .
Quyida keltirilgan misollarda Python SDK Shared Setup ning yuzalaridan foydalaniladi. Transaksiyani taqdim etishdan oldin hisob raqami IDs, xususiy kalitlar va hosil qilingan lot IDs ni o'zingizning tarmoqingizdagi qiymatlar bilan almashtiring.
RWA API yo'nalishlarini kashf etish
Ushbu faqat o'qishga mo'ljallangan misol Torii uzuni so'raydi, qaysi dasturga qaraydigan RWA yo'nalishlari qo'llanilgan:
from iroha_python import create_torii_client
client = create_torii_client("https://taira.sora.org")
openapi = client.request_json("GET", "/openapi", expected_status=(200,))
rwa_paths = sorted(
path for path in openapi.get("paths", {}) if path.startswith("/v1/rwas")
)
for path in rwa_paths:
print(path)Agar ro'yxat bo'sh bo'lsa, nod hali ham RWA ko'rsatmalarini va boshqa Torii APIs orqali so'rovlarni qo'llab-quvvatlashi mumkin, ammo u JSON yo'nalishining fakultativ oilasi bilan bog'liq emas.
Omborxona qudratini ro'yxatga olish
Bir biznes-harakat bir imzolangan tranzaksiyaga aylanishi kerak bo'lganda loyiha usulidan foydalaning. primary_reference; katta kitob ID Transaksiya majburiyatlaridan so'ng hosil bo'ladi.
from iroha_python import TransactionConfig, TransactionDraft
config = TransactionConfig(
chain_id=CHAIN_ID,
authority=alice,
metadata={**TX_METADATA, "source": "rwa-docs"},
)
draft = TransactionDraft(config)
draft.register_rwa(
{
"domain": "commodities.universal",
"quantity": "100",
"spec": {"scale": 0},
"primary_reference": "warehouse-receipt-001",
"status": "active",
"metadata": {
"asset_class": "commodity",
"commodity": "copper",
"warehouse": "DXB-01",
"inspection_report": "sorafs://reports/copper-001.json",
},
"parents": [],
"controls": {
"controller_accounts": [alice],
"controller_roles": [],
"freeze_enabled": True,
"hold_enabled": True,
"force_transfer_enabled": False,
"redeem_enabled": True,
},
}
)
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Transaksiya qo'yilganidan so'ng, ro'yxat RWA IDs hosil bo'ladi. Zilzi davlat yo'nalishlari kanonik IDs ni ochadi; voqealar yoki kashfiyotchining batafsil yo'nalishlaridan foydalanib, agar siz ID bilan primary_reference yoki metadatalarga qaytishingiz kerak bo'lganda:
page = client.list_rwas_typed(limit=20, offset=0)
for lot in page.items:
print(lot.id)Eksploratorni qo'llab-quvvatlaydigan nodlar ham boyroq proyeksiyalarni qaytarishi mumkin:
page = client.list_explorer_rwas_typed(domain="commodities.universal")
for lot in page.items:
print(lot.id, lot.primary_reference, lot.owned_by, lot.quantity)Vaqtinchalik to'xtatish bilan ko'chirish
Xatcho'p tomonidan qaytarilgan hosil qilingan RWA ID dan foydalaning. Ushbu misolda alice ega bo'lishini nazarda tutadi va u hold_enabled bilan nazoratchi sifatida ham moslanadi.
warehouse_lot_id = (
"0123456789abcdef0123456789abcdef"
"0123456789abcdef0123456789abcdef$commodities.universal"
)
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.transfer_rwa(warehouse_lot_id, quantity="10", destination=bob)
draft.hold_rwa(warehouse_lot_id, quantity="5")
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Zilziladan tashqari jarayon muvaffaqiyatli bo'lganidan so'ng ReleaseRwa taqdim etiladi:
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.release_rwa(warehouse_lot_id, quantity="5")
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Nazorat va audit meta ma'lumotlarini qo'shish
Nazoratlar va metadotlar alohida hisoblanadi. Nazoratchilar siyosati uchun nazoratlardan va arizalar yoki auditorlar ko'rsatishi kerak bo'lgan faktlar uchun metadotlardan foydalaning:
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.set_rwa_controls(
warehouse_lot_id,
{
"controller_accounts": [alice],
"controller_roles": [],
"freeze_enabled": True,
"hold_enabled": True,
"force_transfer_enabled": True,
"redeem_enabled": True,
},
)
draft.set_rwa_key_value(warehouse_lot_id, "auditor", "alice")
draft.set_rwa_key_value(
warehouse_lot_id,
"proof_hash",
"sha256:2b1c7a4e...",
)
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)To'lov yoki pensiya miqdori
Joʻnatish RedeemRwa ta'minlangan zanjirdan tashqaridagi aktiv yetkazib berilganidan, iste'mol qilinganidan, pensiyaga olinganidan yoki boshqa tarzda aylanishdan chiqarilganidan keyin. Bu partiyadan taqdim etilgan miqdorni doimiy ravishda chiqarib tashlaydi. redeem_enabled. Imzolovchi mulkdor yoki nazoratchi bo'lishi kerak.
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.redeem_rwa(warehouse_lot_id, quantity="1")
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Qoʻllanishni tekshirish paytida toʻxtatish
FreezeRwa ro'yxati tashqaridagi ko'rib chiqish odatdagi mulkdorlarning operatsiyalarini blokirovka qilishi kerak bo'lganda taqdim etilsin. imzo qo'ygan shaxs nazoratchi bo'lishi kerak. Lot freeze_enabled bo'lishi shart.
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.freeze_rwa(warehouse_lot_id)
draft.set_rwa_key_value(
warehouse_lot_id,
"review",
{
"status": "frozen",
"reason": "custodian inventory check",
"case_id": "OPS-2026-0042",
},
)
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Tekshirish o'tganidan so'ng UnfreezeRwani taqdim etish:
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.unfreeze_rwa(warehouse_lot_id)
draft.set_rwa_key_value(
warehouse_lot_id,
"review",
{"status": "cleared", "case_id": "OPS-2026-0042"},
)
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Hisobvaraqning olinishi
Hisobvaraqni RWA partiyasi sifatida primary_reference raqami va metadatalarni saqlash orqali ifodalash. Ro'yxatdan o'tgandan so'ng, o'tkazish va to'lov uchun hosil qilingan ID faylini ishlating.
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.register_rwa(
{
"domain": "receivables.universal",
"quantity": "50000",
"spec": {"scale": 2},
"primary_reference": "INV-2026-0007",
"status": "issued",
"metadata": {
"asset_class": "invoice",
"currency": "USD",
"debtor": "example-buyer",
"due_date": "2026-06-30",
"document_hash": "sha256:4df4c8...",
},
"parents": [],
"controls": {
"controller_accounts": [alice],
"controller_roles": [],
"freeze_enabled": True,
"hold_enabled": False,
"force_transfer_enabled": False,
"redeem_enabled": True,
},
}
)
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)To'lov mablag'lari moliyalashtirilgan yoki to'langan bo'lsa, hosil qilingan faktura lotidan foydalanish ID:
invoice_lot_id = (
"fedcba9876543210fedcba9876543210"
"fedcba9876543210fedcba9876543210$receivables.universal"
)
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.transfer_rwa(invoice_lot_id, quantity="50000", destination=bob)
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Xatchoʻpdan tashqarida hisob-kitob qilinganidan soʻng aks ettirilgan miqdorni sotib olish:
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=bob, metadata=TX_METADATA)
)
draft.redeem_rwa(invoice_lot_id, quantity="50000")
envelope = draft.sign_with_keypair(bob_pair)
client.submit_transaction_envelope_and_wait(envelope)Karbon kreditlari pensiyasi
E'lon qilingan karbonat kreditlarini aylanmadan olib tashlash uchun RedeemRwani taqdim eting. Xizmatdan tashqari sertifikat yoki ro'yxatdan o'tgan hujjatni metadatalarda saqlash:
carbon_lot_id = (
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa$carbon.universal"
)
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.redeem_rwa(carbon_lot_id, quantity="250")
draft.set_rwa_key_value(
carbon_lot_id,
"retirement_certificate",
"sorafs://certificates/carbon-credit-2026-001-retired.json",
)
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Ikki to'pni birlashtiring
Ikki zanjirdan tashqari pozitsiyalar biriktirilganda lotlarni birlashtiring. Ota-onalar bir xil domendagi bo'lishi va bir xil miqdorni qo'llashlari kerak. Ish vaqti bola lotini hosil qiladi ID.
warehouse_lot_id_2 = (
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb$commodities.universal"
)
draft = TransactionDraft(
TransactionConfig(chain_id=CHAIN_ID, authority=alice, metadata=TX_METADATA)
)
draft.merge_rwas(
{
"parents": [
{"rwa": warehouse_lot_id, "quantity": "40"},
{"rwa": warehouse_lot_id_2, "quantity": "60"},
],
"primary_reference": "warehouse-receipt-003",
"status": "merged",
"metadata": {
"asset_class": "commodity",
"commodity": "copper",
"warehouse": "DXB-01",
"merge_reason": "same custodian and quality grade",
},
}
)
envelope = draft.sign_with_keypair(alice_pair)
client.submit_transaction_envelope_and_wait(envelope)Python tranzaksiyasining to'liq namunasi uchun Real-World Assets-ni ko'ring.