int main()

in service/tools/kv/api_tools/contract_service_tools.cpp [103:189]


int main(int argc, char** argv) {
  if (argc < 2) {
    printf("<cmd> -c [config]\n");
    return 0;
  }


  std::string config_file;
  
  std::string cmd;
  std::string caller_address, contract_name, contract_path, params,
      contract_address, func_name;
  int c;
  int option_index;
  std::string client_config_file;
  while ((c = getopt_long(argc, argv, "c:h", long_options, &option_index)) != -1) {
    switch (c) {
      case -1:
        break;
      case 'f':
        config_file = optarg;
        break;
      case 'c':
        client_config_file = optarg;
        break;
      case 'h':
        ShowUsage();
        break;
    }
  }

  nlohmann::json js = ReadJSConfig(config_file);
  std::cout<<js<<std::endl;
  cmd = GetValue(js, "command");

  ResDBConfig config = GenerateResDBConfig(client_config_file);
  config.SetClientTimeoutMs(100000);

  ContractClient client(config);
  printf("cmd = %s\n", cmd.c_str());
  if (cmd == "create_account") {
    CreateAccount(&client);
  } else if (cmd == "deploy") {
    
    contract_path = GetValue(js, "contract_path");
    contract_name = GetValue(js, "contract_name");
    contract_address = GetValue(js, "owner_address");
    params = GetValue(js, "init_params");

    printf("contract path %s cmd %s contract name %s caller_address %s init params %s\n", contract_path.c_str(), cmd.c_str(), contract_name.c_str(), contract_address.c_str(), params.c_str());

    std::vector<std::string> init_params;
    boost::split(init_params, params, boost::is_any_of(","));

    DeployContract(&client, contract_address, contract_name, contract_path,
                   init_params);
  } else if (cmd == "execute") {

    caller_address = GetValue(js, "caller_address");
    contract_address = GetValue(js, "contract_address");
    func_name = GetValue(js, "func_name");
    params = GetValue(js, "params");

    printf(
        "execute\n caller address:%s\n contract address: %s\n func: %s\n "
        "params:%s\n",
        caller_address.c_str(), contract_address.c_str(), func_name.c_str(),
        params.c_str());
    std::vector<std::string> func_params;
    boost::split(func_params, params, boost::is_any_of(","));

    ExecuteContract(&client, caller_address, contract_address, func_name,
                    func_params);
  }
  else if (cmd == "get_balance") {
    std::string address = GetValue(js, "address");
    auto balance_or = client.GetBalance(address);
    printf("get address %s balance %s\n", address.c_str(), (*balance_or).c_str());
  } else if (cmd == "set_balance") {
    std::string address = GetValue(js, "address");
    std::string balance = GetValue(js, "balance");
    printf("address %s balance %s\n", address.c_str(), balance.c_str());
    auto ret = client.SetBalance(address, balance);
    printf("set address %s balance %s ret %s\n", address.c_str(), balance.c_str(), (*ret).c_str());
  }

}