beempy verify command allows users to check "who" signed operations on the blockchain. This enables in some cases to distinguish bot-votes and manual votes, or provides information on which dApp acted in the name of the user. The
beempy verify command has a
--use-api option that instructs the tool to use the
get_potential_signatures Steem API call to find the signers of transactions.
beempy verify --trx [trx_num] --use-api [block_num] should use the
get_potential_signatures call to find the signing keys for a given block or transaction.
beempy verify --trx [trx_num] --use-api [block_num] raises a
How to reproduce
# beempy verify --trx 37 --use-api 28592655 Traceback (most recent call last): [...] File "/usr/local/lib/python3.6/site-packages/beem/cli.py", line 3146, in verify public_keys = tx.get_potential_signatures() File "/usr/local/lib/python3.6/site-packages/beem/transactionbuilder.py", line 339, in get_potential_signatures ret = self.steem.rpc.get_potential_signatures(args, api="database") File "/usr/local/lib/python3.6/site-packages/beemapi/graphenerpc.py", line 467, in method query = get_query(self.is_appbase_ready() and not self.use_condenser, self.get_request_id(), api_name, name, args) File "/usr/local/lib/python3.6/site-packages/beemapi/rpcutils.py", line 33, in get_query args = json.loads(json.dumps(args)) [...] TypeError: Object of type 'datetime' is not JSON serializable
The problem in this case was that the corresponding raw transaction data was parsed already and timestamp strings were replaced by
datetime objects. The
TransactionBuilder class used to load that transaction tried to JSON-serialize these objects and failed. By passing the raw JSON transaction data to the
TransactionBuilder class instead of the preprocessed data, the class can properly serialized the data. See PR#138.