提交 fa7a0db6 编写于 作者: B Brian Johnson

Added flag to cleos get code command to write code file as wasm instead of wast. GH #3131

上级 7ef18203
......@@ -714,7 +714,11 @@ read_only::get_code_results read_only::get_code( const get_code_params& params )
const auto& accnt = d.get<account_object,by_name>( params.account_name );
if( accnt.code.size() ) {
result.wast = wasm_to_wast( (const uint8_t*)accnt.code.data(), accnt.code.size() );
if (params.code_as_wasm) {
result.wasm = string(accnt.code.begin(), accnt.code.end());
} else {
result.wast = wasm_to_wast( (const uint8_t*)accnt.code.data(), accnt.code.size() );
}
result.code_hash = fc::sha256::hash( accnt.code.data(), accnt.code.size() );
}
......
......@@ -113,12 +113,14 @@ public:
struct get_code_results {
name account_name;
string wast;
string wasm;
fc::sha256 code_hash;
optional<abi_def> abi;
};
struct get_code_params {
name account_name;
bool code_as_wasm = false;
};
get_code_results get_code( const get_code_params& params )const;
......@@ -403,9 +405,9 @@ FC_REFLECT( eosio::chain_apis::read_only::get_producers_params, (json)(lower_bou
FC_REFLECT( eosio::chain_apis::read_only::get_producers_result, (rows)(total_producer_vote_weight)(more) );
FC_REFLECT( eosio::chain_apis::read_only::get_account_results, (account_name)(privileged)(last_code_update)(created)(ram_quota)(net_weight)(cpu_weight)(net_limit)(cpu_limit)(ram_usage)(permissions)(total_resources)(delegated_bandwidth)(voter_info) )
FC_REFLECT( eosio::chain_apis::read_only::get_code_results, (account_name)(code_hash)(wast)(abi) )
FC_REFLECT( eosio::chain_apis::read_only::get_code_results, (account_name)(code_hash)(wast)(wasm)(abi) )
FC_REFLECT( eosio::chain_apis::read_only::get_account_params, (account_name) )
FC_REFLECT( eosio::chain_apis::read_only::get_code_params, (account_name) )
FC_REFLECT( eosio::chain_apis::read_only::get_code_params, (account_name)(code_as_wasm) )
FC_REFLECT( eosio::chain_apis::read_only::producer_info, (producer_name) )
FC_REFLECT( eosio::chain_apis::read_only::abi_json_to_bin_params, (code)(action)(args) )
FC_REFLECT( eosio::chain_apis::read_only::abi_json_to_bin_result, (binargs) )
......
......@@ -1526,18 +1526,27 @@ int main( int argc, char** argv ) {
// get code
string codeFilename;
string abiFilename;
bool code_as_wasm = false;
auto getCode = get->add_subcommand("code", localized("Retrieve the code and ABI for an account"), false);
getCode->add_option("name", accountName, localized("The name of the account whose code should be retrieved"))->required();
getCode->add_option("-c,--code",codeFilename, localized("The name of the file to save the contract .wast to") );
getCode->add_option("-c,--code",codeFilename, localized("The name of the file to save the contract .wast/wasm to") );
getCode->add_option("-a,--abi",abiFilename, localized("The name of the file to save the contract .abi to") );
getCode->add_flag("--wasm", code_as_wasm, localized("Save contract as wasm"));
getCode->set_callback([&] {
auto result = call(get_code_func, fc::mutable_variant_object("account_name", accountName));
auto result = call(get_code_func, fc::mutable_variant_object("account_name", accountName)("code_as_wasm",code_as_wasm));
std::cout << localized("code hash: ${code_hash}", ("code_hash", result["code_hash"].as_string())) << std::endl;
if( codeFilename.size() ){
std::cout << localized("saving wast to ${codeFilename}", ("codeFilename", codeFilename)) << std::endl;
auto code = result["wast"].as_string();
std::cout << localized("saving ${type} to ${codeFilename}", ("type", (code_as_wasm ? "wasm" : "wast"))("codeFilename", codeFilename)) << std::endl;
string code;
if(code_as_wasm) {
code = result["wasm"].as_string();
} else {
code = result["wast"].as_string();
}
std::ofstream out( codeFilename.c_str() );
out << code;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册