Skip to content

အဖြစ်အပျက် trigger နမူနာ

ဤဥပမာသည် IDs နယ်ပယ်မဲ့စာရင်းနှင့် Iroha 3 ဒေတာပုံစံတွင် စီမံကိန်းအရင်းအမြစ်အနက်ကောက်ချက်များကို အသုံးပြုသည်။

ကွန်ရက်တစ်ခုမှာ:

  • Alice ရဲ့ သော့က ထိန်းချုပ်တဲ့ တရားဝင်စာရင်းတစ်ခု
  • Mad Hatter ရဲ့ သော့က ထိန်းချုပ်တဲ့ တရားဝင်စာရင်းပါ။
  • wonderland.universal အောက်တွင် tea အဖြစ်ခန့်မှန်းထားသော အရင်းအမြစ်အနက်ကောက်ချက်
  • အကောင့်တစ်ခုစီမှာရှိတဲ့ အရင်းအမြစ်စာရင်း

ရည်မှန်းချက်က Alice ရဲ့ လက်ဖက်စာရင်းကို စောင့်ကြည့်ပြီး Mad Hatter အကောင့်ကနေ ငွေလွှဲပြောင်းမှုကို ထုတ်လွှင့်တဲ့ ကွပ်ကဲမှုတစ်ခုကို မှတ်ပုံတင်ဖို့ပါ။

(၁) စာရင်းများနှင့် အရင်းအမြစ်များကို ပြင်ဆင်ခြင်း

ပါဝင်သူစာရင်းများနှင့် အရင်းအမြစ်အဓိပ္ပာယ်သတ်မှတ်ချက်များကို ပထမဦးဆုံး မှတ်ပုံတင်ပါ။ လက်ရှိ Iroha တွင်, စာရင်း IDs သည်စာရင်းထိန်းချုပ်သူများထံမှလာသည်၊ စီမံကိန်း domain များတွင် domain.dataspace ပုံစံကိုအသုံးပြုသည်။

text
domain: wonderland.universal
asset definition projection: tea in wonderland.universal
holder accounts: AccountId(controller=alice_key), AccountId(controller=mad_hatter_key)

အရင်းအမြစ်အဓိပ္ပါယ်ဖွင့်ဆိုချက်မှာ Canonical ပွင့်လင်းမြင်သာမှုမရှိတဲ့လိပ်စာတစ်ခုရှိတုန်းပါ။ မှတ်ပုံတင်ပြီးနောက် ဒီလိပ်စာကို သိမ်းဆည်း (သို့) မေးမြန်းပြီး trigger လုပ်ဆောင်မှုတွင် အသုံးပြုပါ။

(၂) trigger authority ကို ရွေးချယ်ပါ။

trigger ၏ နည်းပညာအကောင့်ကို တတ်နိုင်သလောက် ရည်စူးထားသော အကောင့်တစ်ခုသို့ သတ်မှတ်ပါ။ ရည်စူးထားတဲ့ အကောင့်သည် trigger ကိုလုပ်ဆောင်ရန်လိုအပ်သည့် ခွင့်ပြုချက်များကို ရှင်းလင်းစေပြီး trigger ကို operator ၏ကိုယ်ပိုင် လက်မှတ်ရေးထိုးမှု သော့နှင့် ချိတ်ဆက်ခြင်းကိုရှောင်ရှားသည်။

Technical account က ရှိပြီးသား ဖြစ်ဖို့လိုပြီး ညွှန်ကြားချက်တွေကို trigger executable ထဲမှာ တင်ဖို့ ခွင့်ပြုချက်ရှိဖို့လိုပါတယ်။

(၃) အကောင်အထည်ဖော်လို့ရတဲ့ ကိရိယာကို သတ်မှတ်ပါ။

event filter ကိုက်ညီတဲ့အခါ trigger ကပို့တဲ့ ညွှန်ကြားချက်အစဉ်ကို executable လို့ခေါ်ပါတယ်။ ဒီဥပမာမှာ transfer တစ်ခုပါဝင်ပါတယ်:

text
Transfer(
  source = AssetId(tea_definition, mad_hatter_account),
  value = Numeric(1),
  destination = AssetId(tea_definition, alice_account)
)

SDK ၏ လက်ရှိရိုက်ကူးထားသော builders များကို နောက်ဆုံးရောင်းဝယ်မှု အသုံးဝင်ဝန်ဆောင်မှုအတွက်အသုံးပြုပါ။ ထရီဂါကုဒ်တွင် hard-coding ရှေးစာသား IDs ကိုရှောင်ရှားပါ; စစ်ဆေးခြင်း (သို့) မေးမြန်းမှု ကန်နီကလီးယား IDs အကောင်အထည်ဖော်နိုင်သည့် build မလုပ်ခင်။

4. အဖြစ်အပျက် filter ကို သတ်မှတ်ပါ။

သင် ဂရုစိုက်တဲ့ အရာဝတ္ထုကို ဖြစ်ရပ်တွေကို ကျဉ်းမြောင်းစေတဲ့ ဒေတာဖြစ်စဉ် စစ်ဆေးမှုကို သုံးပါ။

text
EventFilterBox::Data(
  DataEventFilter for asset changes involving
  AssetId(tea_definition, alice_account)
)

AcceptAll Filter ကို Debug လုပ်ဖို့ အသုံးဝင်ပေမဲ့ လိုက်ဖက်တဲ့ ဖြစ်ရပ်တိုင်းက trigger evaluation ရဲ့ ကုန်ကျစရိတ်ကို ပေးပါတယ်။

(၅) trigger ကို မှတ်ပုံတင်ပါ။

trigger ကို မှတ်ပုံတင်ပါ

  • စခန်းတစ်ခု TriggerId
  • အကောင်အထည်ဖော်နိုင်သော ညွှန်ကြားချက် အစဉ်
  • Repeats::Indefinitely သို့မဟုတ် Repeats::Exactly(n)
  • နည်းပညာစာရင်း
  • အဖြစ်အပျက် စစ်ဆေးမှု
  • ရွေးချယ်စရာ metadata

Trigger မှတ်ပုံတင်ခြင်းသည် ပုံမှန်ကုန်သွယ်မှုတစ်ခုဖြစ်သည်၊ ထို့ကြောင့် မှတ်ပုံတင်စာရင်းက trigger များကိုမှတ်ပုံတင်ရန် ခွင့်ပြုချက်လိုအပ်သည်။ နည်းပညာစာရင်းသည် trigger အကောင်အထည်ဖော်နိုင်သည့်အတွက် လိုအပ်သော ခွင့်ပြုချက်တွေလိုအပ်သည်။

အမိန့်ချမှတ်ချက်

Block တစ်ခုကို လုပ်ဆောင်တဲ့အခါ:

  1. ပုံမှန် ငွေပေးချေမှု ညွှန်ကြားချက်တွေကို အရင်လုပ်ပါ။
  2. အဲဒီ ညွှန်ကြားချက်တွေကနေ ထုတ်တဲ့ အချက်အလက်တွေကို စုစည်းပါတယ်။
  3. ဒီဖြစ်ရပ်တွေနဲ့ ဆင်တူတဲ့ စစ်ဆေးချက်ရှိတဲ့ trigger တွေကို အစီအစဉ်ချထားပါတယ်။
  4. trigger-produced effects တွေကို block execution pipeline ထဲမှာ handle လုပ်ပြီး Restricted recursive trigger execution ကို မပြုလုပ်ဘဲ ပြုလုပ်ပါတယ်။

trigger တစ်ခုမှာ Repeats::Exactly(n) ကိုသုံးတယ်ဆိုရင် count ပြီးသွားတဲ့အခါ trigger အသစ်တစ်ခုကို မှတ်တမ်းတင်ပြီး အလားတူ ပြုမူမှုကို ထပ်လုပ်ဖို့လိုပါတယ်။