Closed andresberrios closed 6 years ago
Thank you for your message - it has prompted us to improve our code.
The problem is that EOSIO has a specific requirement regarding the JSON standard: in EOSIO the order of parameters does matter (even though they are named). Hence, using Python dicts becomes problematic, as JSON does not care about ordering.
But we agree with your suggestion: our current implementation is a bit awkward.
So we'll be changing it in the coming release.
Instead of the current syntax looking like this:
account_tic_tac_toe.push_action(
"create",
'{"challenger":"' + str(account_alice)
+'", "host":"' + str(account_carol) + '"}',
account_carol)
... we'll be introducing something like this:
account_tic_tac_toe.push_action(
"create",
'''{
"challenger": "account_alice",
"host": "account_carol"
}''',
account_carol)
EDIT: It turns out we've made a mistake - EOSIO does NOT require ordering of parameters, as I suggested above, so applying Python dicts actually makes perfect sense. Thanks for the tip!
This allows us to achieve a much cleaner syntax, for example:
account_tic_tac_toe.push_action(
"move",
{
"challenger": account_alice,
"host": account_carol,
"by": account_carol,
"row": 0, "column": 0
},
account_carol)
I don't see why the action data should be specified as a JSON string. It would be much nicer to write if the data parameters for pushing actions would be python dicts that simply get converted to JSON internally before sending to cleos. Of course directly writing JSON strings would still be supported.
What do you think?