4

I know a very similar question has been asked here (How to do something when your contract is an action notification recipient (like when it receives funds)?), however I don't have enough reputation to ask a follow up question to that answer, so I open a new question.

As mentioned in that answer, extending the EOSIO_ABI macro with a statement like "if( code == self || code == N(eosio.token) || action == N(onerror) )" can trigger the "transfer" function in your contract when a eosio.token transfer notification is received. However, what if I already have another function named "transfer" with a different purpose? How can I map the eosio.token transfer notification to a function that has a different name?

  • can't understand, can you speak Chinese? – Jimmy Guo Jun 25 '18 at 14:41
1

Create a transfer action and a transfer_b action in the contract. Call tranfer_b as an inline action in the transfer action.

Do not change 'apply' and use it as macro generated it.

Use 'SEND_INLINE_ACTION' when calling 'transfer_b' in an inline action with a transfer action.

For an example of this, see the issue action of the following code. https://sourcegraph.com/github.com/EOSIO/eos/-/blob/contracts/eosio.token/eosio.token.cpp#L32:65

| improve this answer | |
0

code is the contract processing the message, action is which action is called. these two condition is enough to identify which transfer is used.

| improve this answer | |
  • Thanks for your reply!! I understand how to identify which contract the action is from, however I don't understand how to call the action that has a different name from the original action. Say I want to call an action named transfer_b when I receive a transfer notification from eosio.token, I believe I need to modify the "MEMBERS" in "switch( action ) {EOSIO_API( TYPE, MEMBERS)}" in the macro, however I just have no idea how to modify it, I couldn't find any documentation about these macros. – mochunhei Jun 27 '18 at 5:38
  • if(code == N(eosio.token) && action == N(transfer)) {you call trasnfer_b} – bread1984 Jul 8 '18 at 2:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.