Skip to content

Commit

Permalink
clean up output of eosc
Browse files Browse the repository at this point in the history
  • Loading branch information
bytemaster committed Jul 25, 2017
1 parent a6a652a commit a39b434
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 18 deletions.
34 changes: 26 additions & 8 deletions libraries/chain/chain_controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,7 @@ void chain_controller::process_message( const ProcessedTransaction& trx, Account
apply_message(apply_ctx);

output.notify.reserve( apply_ctx.notified.size() );
wdump((output));

for( uint32_t i = 0; i < apply_ctx.notified.size(); ++i ) {
try {
Expand Down Expand Up @@ -1056,12 +1057,12 @@ void chain_controller::set_apply_handler( const AccountName& contract, const Acc
chain_initializer_interface::~chain_initializer_interface() {}


SignedTransaction chain_controller::transaction_from_variant( const fc::variant& v )const {
ProcessedTransaction chain_controller::transaction_from_variant( const fc::variant& v )const {
const variant_object& vo = v.get_object();
#define GET_FIELD( VO, FIELD, RESULT ) \
if( VO.contains(#FIELD) ) fc::from_variant( VO[#FIELD], RESULT.FIELD )

SignedTransaction result;
ProcessedTransaction result;
GET_FIELD( vo, refBlockNum, result );
GET_FIELD( vo, refBlockPrefix, result );
GET_FIELD( vo, expiration, result );
Expand Down Expand Up @@ -1094,11 +1095,14 @@ SignedTransaction chain_controller::transaction_from_variant( const fc::variant&
}
}
}
if( vo.contains( "output" ) ) {
const vector<variant>& outputs = vo["output"].get_array();
}
return result;
#undef GET_FIELD
}

fc::variant chain_controller::transaction_to_variant( const SignedTransaction& trx )const {
fc::variant chain_controller::transaction_to_variant( const ProcessedTransaction& trx )const {
#define SET_FIELD( MVO, OBJ, FIELD ) MVO(#FIELD, OBJ.FIELD)

fc::mutable_variant_object trx_mvo;
Expand All @@ -1120,11 +1124,16 @@ fc::variant chain_controller::transaction_to_variant( const SignedTransaction&

const auto& code_account = _db.get<account_object,by_name>( msg.code );
if( code_account.abi.size() > 4 ) { /// 4 == packsize of empty Abi
fc::datastream<const char*> ds( code_account.abi.data(), code_account.abi.size() );
eos::types::Abi abi;
fc::raw::unpack( ds, abi );
types::AbiSerializer abis( abi );
msg_mvo( "data", abis.binaryToVariant( abis.getActionType( msg.type ), msg.data ) );
try {
fc::datastream<const char*> ds( code_account.abi.data(), code_account.abi.size() );
eos::types::Abi abi;
fc::raw::unpack( ds, abi );
types::AbiSerializer abis( abi );
msg_mvo( "data", abis.binaryToVariant( abis.getActionType( msg.type ), msg.data ) );
msg_mvo( "hex_data", msg.data );
} catch ( ... ) {
SET_FIELD( msg_mvo, msg, data );
}
}
else {
SET_FIELD( msg_mvo, msg, data );
Expand All @@ -1133,6 +1142,15 @@ fc::variant chain_controller::transaction_to_variant( const SignedTransaction&
}
trx_mvo( "messages", std::move(msgsv) );

/* TODO: recursively process generated transactions
vector<fc::mutable_variant_object> outs( trx.messages.size() );
for( uint32_t i = 0; i < trx.output.size(); ++i ) {
auto& out_mvo = outs[i];
auto& out = trx.outputs[i];
}
*/
trx_mvo( "output", fc::variant( trx.output ) );

return fc::variant( std::move( trx_mvo ) );
#undef SET_FIELD
}
Expand Down
4 changes: 2 additions & 2 deletions libraries/chain/include/eos/chain/chain_controller.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,13 @@ namespace eos { namespace chain {
* This method will convert a variant to a SignedTransaction using a contract's ABI to
* interpret the message types.
*/
SignedTransaction transaction_from_variant( const fc::variant& v )const;
ProcessedTransaction transaction_from_variant( const fc::variant& v )const;

/**
* This method will convert a signed transaction into a human-friendly variant that can be
* converted to JSON.
*/
fc::variant transaction_to_variant( const SignedTransaction& trx )const;
fc::variant transaction_to_variant( const ProcessedTransaction& trx )const;


/**
Expand Down
4 changes: 3 additions & 1 deletion libraries/chain/message_handling_contexts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@ bool apply_context::has_recipient( const types::AccountName& account )const {
}

void apply_context::require_recipient(const types::AccountName& account) {
if( !has_recipient( account ) )
if( !has_recipient( account ) ) {
idump((account));
notified.push_back(account);
}
}

bool message_validate_context::all_authorizations_used() const {
Expand Down
5 changes: 3 additions & 2 deletions plugins/chain_plugin/chain_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,8 +255,9 @@ read_write::push_block_results read_write::push_block(const read_write::push_blo
}

read_write::push_transaction_results read_write::push_transaction(const read_write::push_transaction_params& params) {
db.push_transaction(params);
return read_write::push_transaction_results{ params.id() };
auto ptrx = db.push_transaction(params);
auto pretty_trx = db.transaction_to_variant( ptrx );
return read_write::push_transaction_results{ params.id(), pretty_trx };
}

} // namespace chain_apis
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ class read_write {

using push_transaction_params = chain::SignedTransaction;
struct push_transaction_results {
chain::transaction_id_type transaction_id;
chain::transaction_id_type transaction_id;
fc::variant processed;
};
push_transaction_results push_transaction(const push_transaction_params& params);
};
Expand Down Expand Up @@ -132,7 +133,7 @@ FC_REFLECT(eos::chain_apis::read_only::get_info_results,
FC_REFLECT(eos::chain_apis::read_only::get_block_params, (block_num_or_id))

FC_REFLECT_DERIVED( eos::chain_apis::read_only::get_block_results, (eos::chain::signed_block), (id)(block_num)(refBlockPrefix) );
FC_REFLECT( eos::chain_apis::read_write::push_transaction_results, (transaction_id) )
FC_REFLECT( eos::chain_apis::read_write::push_transaction_results, (transaction_id)(processed) )
FC_REFLECT( eos::chain_apis::read_only::get_table_rows_i64_params,
(json)(scope)(code)(table)(lower_bound)(upper_bound)(limit) );
FC_REFLECT( eos::chain_apis::read_only::get_table_rows_i64_result,
Expand Down
6 changes: 3 additions & 3 deletions programs/eosc/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ eos::chain_apis::read_only::get_info_results get_info() {
return call( "localhost", 8888, "/v1/chain/get_info" ).as<eos::chain_apis::read_only::get_info_results>();
}

std::pair<fc::variant,fc::variant> push_transaction( SignedTransaction& trx ) {
fc::variant push_transaction( SignedTransaction& trx ) {
auto info = get_info();
trx.expiration = info.head_block_time + 100; //chain.head_block_time() + 100;
trx.set_reference_block(info.head_block_id);
boost::sort( trx.scope );

return std::make_pair( call( "localhost", 8888, "/v1/chain/push_transaction", trx ), fc::variant(trx) );
return call( "localhost", 8888, "/v1/chain/push_transaction", trx );
}


Expand Down Expand Up @@ -122,7 +122,7 @@ int main( int argc, char** argv ) {
trx.expiration = info.head_block_time + 100; //chain.head_block_time() + 100;
trx.set_reference_block(info.head_block_id);

std::cout << fc::json::to_pretty_string( fc::variant( std::make_pair( trx, call( "localhost", 8888, "/v1/chain/push_transaction", trx ) ) ) );
std::cout << fc::json::to_pretty_string( call( "localhost", 8888, "/v1/chain/push_transaction", trx ) );
} else if (command == "create" ) {
if( args[2] == "account" ) {
if( args.size() < 7 ) {
Expand Down

0 comments on commit a39b434

Please sign in to comment.