EOS 学習メモ:custom dispatcher 編 ①

m0t0k1ch1(48)
Published in
#eos
Words
158
Reading
1 min
Listen
Play
8y

dg1uxga7sv.jpg

EOS 学習メモ:EOSIO_DISPATCH 編 の続き。

今回から数回は custom dispatcher 編として、dispatcher のカスタマイズパターンについて、なぜカスタマイズする必要があるのかを意識しながら学習していく。なお、チュートリアルとしてはこれが最後の項目になる。

まず初回は、そもそも EOSIO_DISPATCH が生成する dispatcher がどうなっているのかをより具体的に把握する。

ということで、EOSIO_DISPATCH macro に頼らず、それと同じ処理をする dispatcher を実装した contract を書くと、こんな感じ になる。dispatcher だけ抜き出すと以下。

 extern "C" {
   void apply(uint64_t receiver, uint64_t code, uint64_t action) {
     if (code == receiver) {
       switch (action) {
       case name("a").value:
         execute_action(name(receiver), name(code), &test::a);
         break;
       case name("b").value:
         execute_action(name(receiver), name(code), &test::b);
         break;
       case name("c").value:
         execute_action(name(receiver), name(code), &test::c);
         break;
       }
     }
   }
 };



特にわかりにくい処理はないかなと思う。actionswitch に渡してあげて、対応する action handler を呼び出しているだけ。なお、action handler の呼び出しには execute_action() が使われており、その実装は こんな感じ になっているので、第 1 引数と第 2 引数には apply action handler の引数である receivercode をそのまま渡し、第 3 引数には呼び出したい action handler を渡してあげればよい模様。

今回はここまで。

EOS 学習メモ:custom dispatcher 編 ① | Ecency