ღონისძიების გამომწვევი მაგალითი
აღნიშნული მაგალითი იყენებს კანონიკულ დომენის გარეშე ანგარიშს IDs და პროგნოზირებულ აქტივების განსაზღვრას Iroha 3 მონაცემთა მოდელის მიხედვით.
ვთქვათ, ქსელში არის:
- კანონიკური ანგარიში, რომელიც აკონტროლდება ალისის გასაღებით
- კანონიკური ანგარიში, რომელსაც გიჟი თოფის გასაღები აკონტროლებს.
- აქტივების განსაზღვრა, რომელიც პროგნოზირებულია როგორც
teawonderland.universalქვეშ. - თითოეული ანგარიშის მიერ განთავსებული ამ აქტივის ბალანსი
მიზანი არის დარეგისტრირდეს გამშვები, რომელიც აკვირდება ალისის ჩაის ბალანსს და წარუდგენს გადარიცხვას Mad Hatter-ის ანგარიშიდან, როდესაც შესაბამისი მონაცემების მოვლენა გამოცემულია.
1. მოამზადეთ ანგარიშები და აქტივები
დარეგისტრირეთ მონაწილე ანგარიშები და აქტივების განსაზღვრა პირველ რიგში. მიმდინარე Iroha-ში, ანგარიში IDs მოდის ანგარიშის კონტროლერებისგან, ხოლო პროექტირებული დომენები იყენებენ ფორმას domain.dataspace:
domain: wonderland.universal
asset definition projection: tea in wonderland.universal
holder accounts: AccountId(controller=alice_key), AccountId(controller=mad_hatter_key)ქონების განსაზღვრა კვლავ აქვს კანონიკური არაგამჭვირვალე მისამართი. შეინახეთ ან გამოკითხეთ ეს მისამართი რეგისტრაციის შემდეგ და გამოიყენეთ ის გაშვების მოქმედებაში.
2. აირჩიეთ გამომწვევი ავტორიტეტი
განსაზღვრეთ ტრიგერის ტექნიკური ანგარიში სპეციალურ ანგარიშზე, როდესაც ეს შესაძლებელია. სპეციალური ანგარიში ცხადყოფს, თუ რა ნებართვებია საჭირო ტრიგერის შესრულებისთვის და თავიდან აცილებს ტრიგერს ოპერატორის პირადი ხელმოწერის გასაღებთან მიერთებას.
ტექნიკური ანგარიში უკვე უნდა არსებობდეს და მას უნდა ჰქონდეს უფლება წარუდგინოს ინსტრუქციები ამოქმედებადი გამშვები ღილაკში.
3. განსაზღვრეთ აღსრულება
განხორციელებადი არის ინსტრუქციის თანმიმდევრობა, რომელიც გამშვები აძლევს, როდესაც მოვლენების ფილტრი შეესაბამება. ამ მაგალითისთვის იგი შეიცავს ერთ გადაცემას:
Transfer(
source = AssetId(tea_definition, mad_hatter_account),
value = Numeric(1),
destination = AssetId(tea_definition, alice_account)
)გამოიყენეთ SDK ამჟამინდელი ტიპირებული მშენებლები საბოლოო ტრანზაქციის სასარგებლო დატვირთვისთვის. თავიდან აიცილეთ ძველი ტექსტური IDs მკაცრი კოდირება საგამოძრავებელი კოდში; ანალიზება ან გამოკითხვა კანონიკური IDs შესრულებადი აშენების წინ.
4. განსაზღვრეთ მოვლენების ფილტრი
გამოიყენეთ მონაცემთა მოვლენების ფილტრი, რომელიც შეამცირებს მოვლენებს იმ ობიექტზე, რომელზეც ზრუნავთ:
EventFilterBox::Data(
DataEventFilter for asset changes involving
AssetId(tea_definition, alice_account)
)შეინარჩუნეთ ფილტრები ისეთი კონკრეტული, როგორც პრაქტიკული. AcceptAll ფილტრი გამოსადეგია დებუგინგისთვის, მაგრამ ის იძულებს თითოეულ შედარებულ მოვლენას გადაიხადოს გამოწვევის შეფასების ღირებულება.
5. დარეგისტრირეთ გამშვები.
დარეგისტრირეთ გამშვები ღილაკი:
- სტაბილური
TriggerId - განხორციელებადი ინსტრუქციის თანმიმდევრობა
Repeats::IndefinitelyანRepeats::Exactly(n)- ტექნიკური ანგარიში
- მოვლენების ფილტრი
- ვარიანტური მეტა მონაცემები
ტრიგერის რეგისტრაცია თავისთავად ჩვეულებრივი ტრანზაქციაა, ამიტომ რეგისტრირების ანგარიშს სჭირდება ნებართვა ტრიგერების რეგისტრაციისთვის. ტექნიკურ ანგარიშს საჭიროა იმ ნებართვები, რომლებიც მოითხოვს ტრიგერი შესრულებადია.
აღსრულების ბრძანება
როდესაც ბლოკი შესრულდება:
- ნორმალური ტრანზაქციის ინსტრუქციები პირველ რიგში ჩატარდება.
- აღნიშნული ინსტრუქციით წარმოებული მონაცემთა მოვლენების შეგროვება ხდება.
- ტრიგერები, რომელთა ფილტრებიც შეესაბამება ამ ღონისძიებებს, დაგეგმილია.
- ბლოკის განხორციელების მიწოდებაში ტრიგერით გამოწვეული ეფექტები ხორციელდება, რის შედეგადაც რეკურსიური ტრიგერის განხორციელება შეუზღუდავი არ არის.
თუ გამშვები ღილაკი იყენებს Repeats::Exactly(n), დაარეგისტრირეთ ახალი გამშვები, როდესაც გათვლა ამოწურულია და იგივე ქმედება კვლავ საჭიროა.