std::unique_ptr ContractTransactionManager::ExecuteData()

in executor/contract/executor/contract_executor.cpp [31:88]


std::unique_ptr<std::string> ContractTransactionManager::ExecuteData(
    const std::string& client_request) {
  Request request;
  Response response;

  if (!request.ParseFromString(client_request)) {
    LOG(ERROR) << "parse data fail";
    return nullptr;
  }
  int ret = 0;
  if (request.cmd() == contract::Request::CREATE_ACCOUNT) {
    absl::StatusOr<Account> account_or = CreateAccount();
    if (account_or.ok()) {
      response.mutable_account()->Swap(&(*account_or));
    LOG(ERROR)<<" create count:"<<response.account().DebugString();
    } else {
      ret = -1;
    }
  } else if (request.cmd() == contract::Request::DEPLOY) {
    absl::StatusOr<Contract> contract_or = Deploy(request);
    if (contract_or.ok()) {
      response.mutable_contract()->Swap(&(*contract_or));
    } else {
      ret = -1;
    }
  } else if (request.cmd() == contract::Request::EXECUTE) {
    auto res_or = Execute(request);
    if (res_or.ok()) {
      response.set_res(*res_or);
    } else {
      ret = -1;
    }
  } else if (request.cmd() == resdb::contract::Request::GETBALANCE) {
    auto res_or = GetBalance(request);
    if (res_or.ok()) {
      response.set_res(*res_or);
    } else {
      ret = -1;
    }

  } else if (request.cmd() == resdb::contract::Request::SETBALANCE) {
    auto res_or = SetBalance(request);
    if (res_or.ok()) {
      response.set_res("1");
    } else {
      ret = -1;
    }
  }

  response.set_ret(ret);

  std::unique_ptr<std::string> resp_str = std::make_unique<std::string>();
  if (!response.SerializeToString(resp_str.get())) {
    return nullptr;
  }

  return resp_str;
}