如何从CorDapp代码访问versionInfo?

时间:2019-04-26 14:44:12

标签: version corda

是否可以通过Cordapp代码访问VersionInfo?这似乎是该节点的内部方法:

https://github.com/corda/corda/blob/bffac331a37666415b91c0780d811669885a5d48/node/src/main/kotlin/net/corda/node/VersionInfo.kt

1 个答案:

答案 0 :(得分:0)

在Corda中,您需要的大多数功能都可以在serviceHub中找到,该功能可以在流执行中访问。在这种情况下,您将要访问CorDapp的应用程序上下文。在应用程序内容内部,您可以访问有关CorDapp的信息,包括应用程序正在使用的Corda版本。

#include <stdio.h>
#include <stdlib.h>

#if defined(__APPLE__) || defined(__MACH__)
    #include <Python/Python.h>
#elif defined(unix) || defined(__unix__) || defined(__unix)
    #include <Python.h>
    #include <stdint.h>
#endif

static void check_PyAPI(const char *fn, PyObject *rv)
{
  if (rv) {
    fprintf(stderr, "%s: result: ", fn);
    PyObject_Print(rv, stderr, 0);
    putc('\n', stderr);
  } else {
    fprintf(stderr, "%s: exception:\n", fn);
    PyErr_PrintEx(0);
    exit(1);
  }
}

int main(int argc, char **argv)
{
  setvbuf(stderr, 0, _IOLBF, 0); // ensure line-buffering for stderr
  fputs("main begins\n", stderr);

  Py_SetProgramName(argv[0]);
  fputs("Py_SetProgramName: ok\n", stderr);

  Py_Initialize();
  fputs("Py_Initialize: ok\n", stderr);

  PyObject* myModuleString = PyUnicode_FromString((char *) "kmer_counter");
  check_PyAPI("PyUnicode_FromString('kmer_counter')", myModuleString);

  PyObject* myModule = PyImport_Import(myModuleString);
  check_PyAPI("PyImport_Import(myModuleString)", myModule);

  PyObject* myFunction = PyObject_GetAttrString(myModule, (char *) "counter");
  check_PyAPI("PyObject_GetAttrString(myModule, 'counter')", myFunction);

  PyObject *myResult = PyObject_CallFunction(myFunction, "i", 5);
  check_PyAPI("PyObject_CallFunction(myFunction, 'i', 5)", myResult);

  Py_Finalize();
  fputs("after Py_Finalize\n", stderr);

  return 0;
}