Skip to content
Snippets Groups Projects
Commit 3adc7bde authored by alexey.stratulat's avatar alexey.stratulat
Browse files

[*] Fix wrapping dap_chain_datum_tx.

parent 427637bf
No related branches found
No related tags found
1 merge request!26Support 3689
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "libdap_crypto_key_python.h" #include "libdap_crypto_key_python.h"
#include "dap_chain_datum_tx_out_cond.h" #include "dap_chain_datum_tx_out_cond.h"
#include "wrapping_dap_hash.h" #include "wrapping_dap_hash.h"
#include "dap_chain_datum_tx_items.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
...@@ -158,22 +159,34 @@ PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args ...@@ -158,22 +159,34 @@ PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args
PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args); PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args);
PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args); PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args);
static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj); //static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj);
static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs); //static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs);
static PyMethodDef PyDapChainDatumTxObjectMethods[] ={ static PyMethodDef PyDapChainDatumTxObjectMethods[] ={
{"getSize", (PyCFunction)dap_chain_datum_tx_get_size_py, METH_VARARGS, ""}, {"getSize", (PyCFunction)dap_chain_datum_tx_get_size_py, METH_VARARGS, ""},
{"addItem", (PyCFunction)dap_chain_datum_tx_add_item_py, METH_VARARGS | METH_STATIC, ""}, {"addItem", (PyCFunction)dap_chain_datum_tx_add_item_py, METH_VARARGS, ""},
{"addInItem", (PyCFunction)dap_chain_datum_tx_add_in_item_py, METH_VARARGS | METH_STATIC, ""}, {"addInItem", (PyCFunction)dap_chain_datum_tx_add_in_item_py, METH_VARARGS, ""},
{"addInCondItem", (PyCFunction)dap_chain_datum_tx_add_in_cond_item_py, METH_VARARGS | METH_STATIC, ""}, {"addInCondItem", (PyCFunction)dap_chain_datum_tx_add_in_cond_item_py, METH_VARARGS, ""},
{"addOutItem", (PyCFunction)dap_chain_datum_tx_add_out_item_py, METH_VARARGS | METH_STATIC, ""}, {"addOutItem", (PyCFunction)dap_chain_datum_tx_add_out_item_py, METH_VARARGS, ""},
{"addOutCond", (PyCFunction)dap_chain_datum_tx_add_out_cond_item_py, METH_VARARGS | METH_STATIC, ""}, {"addOutCond", (PyCFunction)dap_chain_datum_tx_add_out_cond_item_py, METH_VARARGS, ""},
{"addSignItem", (PyCFunction)dap_chain_datum_tx_add_sign_item_py, METH_VARARGS | METH_STATIC, ""}, {"addSignItem", (PyCFunction)dap_chain_datum_tx_add_sign_item_py, METH_VARARGS, ""},
{"verifySign", (PyCFunction)dap_chain_datum_tx_verify_sign_py, METH_VARARGS, ""}, {"verifySign", (PyCFunction)dap_chain_datum_tx_verify_sign_py, METH_VARARGS, ""},
{NULL, NULL, 0, NULL} {NULL, NULL, 0, NULL}
}; };
//static PyMethodDef PyDapChainDatumTxObjectMethods[] ={
// {"getSize", (PyCFunction)dap_chain_datum_tx_get_size_py, METH_VARARGS, ""},
// {"addItem", (PyCFunction)dap_chain_datum_tx_add_item_py, METH_VARARGS | METH_STATIC, ""},
// {"addInItem", (PyCFunction)dap_chain_datum_tx_add_in_item_py, METH_VARARGS | METH_STATIC, ""},
// {"addInCondItem", (PyCFunction)dap_chain_datum_tx_add_in_cond_item_py, METH_VARARGS | METH_STATIC, ""},
// {"addOutItem", (PyCFunction)dap_chain_datum_tx_add_out_item_py, METH_VARARGS | METH_STATIC, ""},
// {"addOutCond", (PyCFunction)dap_chain_datum_tx_add_out_cond_item_py, METH_VARARGS | METH_STATIC, ""},
// {"addSignItem", (PyCFunction)dap_chain_datum_tx_add_sign_item_py, METH_VARARGS | METH_STATIC, ""},
// {"verifySign", (PyCFunction)dap_chain_datum_tx_verify_sign_py, METH_VARARGS, ""},
// {NULL, NULL, 0, NULL}
//};
static PyTypeObject DapChainDatumTx_DapChainDatumTxObjectType = { static PyTypeObject DapChainDatumTx_DapChainDatumTxObjectType = {
PyVarObject_HEAD_INIT(NULL, 0) PyVarObject_HEAD_INIT(NULL, 0)
"CellFrame.Chain.DatumTx", /* tp_name */ "CellFrame.Chain.DatumTx", /* tp_name */
...@@ -265,8 +278,8 @@ static PyTypeObject DapChainTxOutCond_DapChainTxOutCondObjectType = { ...@@ -265,8 +278,8 @@ static PyTypeObject DapChainTxOutCond_DapChainTxOutCondObjectType = {
PyType_GenericNew, /* tp_new */ PyType_GenericNew, /* tp_new */
}; };
dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list); //dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list);
PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond); //PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond);
/* -------------------------------------- */ /* -------------------------------------- */
......
...@@ -54,69 +54,63 @@ void PyDapChainDatumTxObject_delete(PyDapChainDatumTxObject* datumTx){ ...@@ -54,69 +54,63 @@ void PyDapChainDatumTxObject_delete(PyDapChainDatumTxObject* datumTx){
} }
PyObject *dap_chain_datum_tx_get_size_py(PyObject *self, PyObject *args){ PyObject *dap_chain_datum_tx_get_size_py(PyObject *self, PyObject *args){
(void)args;
size_t size = dap_chain_datum_tx_get_size(((PyDapChainDatumTxObject*)self)->datum_tx); size_t size = dap_chain_datum_tx_get_size(((PyDapChainDatumTxObject*)self)->datum_tx);
return PyLong_FromSize_t(size); return PyLong_FromSize_t(size);
} }
PyObject *dap_chain_datum_tx_add_item_py(PyObject *self, PyObject *args){ PyObject *dap_chain_datum_tx_add_item_py(PyObject *self, PyObject *args){
PyObject *in_obj; uint8_t *a_item;
u_int8_t *a_item; if (!PyArg_ParseTuple(args, "b", &a_item))
if (!PyArg_ParseTuple(args, "O|b", &in_obj, &a_item))
return NULL; return NULL;
dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(in_obj); int res = dap_chain_datum_tx_add_item(&(((PyDapChainDatumTxObject*)self)->datum_tx), a_item);
int res = dap_chain_datum_tx_add_item(txs, a_item); return PyLong_FromLong(res);
if (res == -1){ // if (res == -1){
return NULL; // return NULL;
} else { // } else {
PyObject *out = DapChainDatumTxArrayToPyList(txs); // PyObject *out = DapChainDatumTxArrayToPyList(txs);
return Py_BuildValue("O", out); // return Py_BuildValue("O", out);
} // }
} }
PyObject *dap_chain_datum_tx_add_in_item_py(PyObject *self, PyObject *args){ PyObject *dap_chain_datum_tx_add_in_item_py(PyObject *self, PyObject *args){
PyObject *in_obj_datum_txs;
PyObject *in_obj_hash_fast; PyObject *in_obj_hash_fast;
uint32_t in_tx_out_pref_idx; uint32_t in_tx_out_pref_idx;
if (!PyArg_ParseTuple(args, "O|O|I", &in_obj_datum_txs, &in_obj_hash_fast, &in_tx_out_pref_idx)) if (!PyArg_ParseTuple(args, "O|I", &in_obj_hash_fast, &in_tx_out_pref_idx))
return NULL; return NULL;
dap_chain_datum_tx_t **a_txs = PyListToDapChainDatumTxArray(in_obj_datum_txs); int res = dap_chain_datum_tx_add_in_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
int res = dap_chain_datum_tx_add_in_item(a_txs, ((PyDapHashFastObject*)in_obj_hash_fast)->hash_fast, ((PyDapHashFastObject*)in_obj_hash_fast)->hash_fast,
in_tx_out_pref_idx); in_tx_out_pref_idx);
if (res == -1){ return PyLong_FromLong(res);
return NULL;
} else {
PyObject *out = DapChainDatumTxArrayToPyList(a_txs);
return Py_BuildValue("O", out);
}
} }
PyObject *dap_chain_datum_tx_add_in_cond_item_py(PyObject *self, PyObject *args){ PyObject *dap_chain_datum_tx_add_in_cond_item_py(PyObject *self, PyObject *args){
PyObject *in_obj_datum_txs; // PyObject *in_obj_datum_txs;
PyObject *in_chain_hash_fast; PyObject *in_chain_hash_fast;
unsigned int in_tx_out_prev_idx; unsigned int in_tx_out_prev_idx;
unsigned int in_receipt_idx; unsigned int in_receipt_idx;
if (!PyArg_ParseTuple(args, "O|O|I|I", &in_obj_datum_txs, &in_chain_hash_fast, &in_tx_out_prev_idx, &in_receipt_idx)) if (!PyArg_ParseTuple(args, "O|I|I", &in_chain_hash_fast, &in_tx_out_prev_idx, &in_receipt_idx))
return NULL; return NULL;
dap_chain_datum_tx_t **a_txs = PyListToDapChainDatumTxArray(in_obj_datum_txs); // dap_chain_datum_tx_t **a_txs = PyListToDapChainDatumTxArray(in_obj_datum_txs);
int res = dap_chain_datum_tx_add_in_cond_item(a_txs, ((PyDapHashFastObject*)in_chain_hash_fast)->hash_fast, in_tx_out_prev_idx, in_receipt_idx); int res = dap_chain_datum_tx_add_in_cond_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
((PyDapHashFastObject*)in_chain_hash_fast)->hash_fast,
in_tx_out_prev_idx,
in_receipt_idx);
return PyLong_FromLong(res); return PyLong_FromLong(res);
} }
PyObject *dap_chain_datum_tx_add_out_item_py(PyObject *self, PyObject *args){ PyObject *dap_chain_datum_tx_add_out_item_py(PyObject *self, PyObject *args){
PyObject *in_obj_datum_txs; // PyObject *in_obj_datum_txs;
PyObject *in_addr; PyObject *in_addr;
uint64_t value; uint64_t value;
if (!PyArg_ParseTuple(args, "O|O|k", &in_obj_datum_txs, &in_addr, value)) if (!PyArg_ParseTuple(args, "O|k", &in_addr, &value))
return NULL; return NULL;
dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(in_obj_datum_txs); // dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(in_obj_datum_txs);
int res = dap_chain_datum_tx_add_out_item(txs, ((PyDapChainAddrObject*)in_addr)->addr, value); int res = dap_chain_datum_tx_add_out_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
if (res == -1){ ((PyDapChainAddrObject*)in_addr)->addr,
return NULL; value);
} else { return PyLong_FromLong(res);
PyObject *out = DapChainDatumTxArrayToPyList(txs);
return Py_BuildValue("O", out);
}
} }
PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args){ PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args){
PyObject *obj_txs; // PyObject *obj_txs;
PyObject *obj_key; PyObject *obj_key;
PyObject *obj_srv_uid; PyObject *obj_srv_uid;
uint64_t value; uint64_t value;
...@@ -124,78 +118,74 @@ PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args ...@@ -124,78 +118,74 @@ PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args
PyObject *obj_srv_price_unit_uid; PyObject *obj_srv_price_unit_uid;
PyObject *obj_cond_bytes; PyObject *obj_cond_bytes;
Py_ssize_t cond_size; Py_ssize_t cond_size;
if (!PyArg_ParseTuple(args, "O|O|O|k|k|O|O|n", &obj_txs, &obj_key, &obj_srv_uid, &value, &value_max_per_unit, if (!PyArg_ParseTuple(args, "O|O|k|k|O|O|n", &obj_key, &obj_srv_uid, &value, &value_max_per_unit,
&obj_srv_price_unit_uid, &obj_cond_bytes, &cond_size)) &obj_srv_price_unit_uid, &obj_cond_bytes, &cond_size))
return NULL; return NULL;
dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs); // dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs);
void *cond = (void*)PyBytes_AsString(obj_cond_bytes); void *cond = (void*)PyBytes_AsString(obj_cond_bytes);
int res = dap_chain_datum_tx_add_out_cond_item(txs, ((PyCryptoKeyObject*)obj_key)->key, ((PyDapChainNetSrvUIDObject*)obj_srv_uid)->net_srv_uid, int res = dap_chain_datum_tx_add_out_cond_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
value, value_max_per_unit, ((PyDapChainNetSrvPriceUnitUIDObject*)obj_srv_price_unit_uid)->price_unit_uid, ((PyCryptoKeyObject*)obj_key)->key,
((PyDapChainNetSrvUIDObject*)obj_srv_uid)->net_srv_uid,
value, value_max_per_unit,
((PyDapChainNetSrvPriceUnitUIDObject*)obj_srv_price_unit_uid)->price_unit_uid,
cond, (size_t)cond_size); cond, (size_t)cond_size);
if (res == -1){ return PyLong_FromLong(res);
return NULL;
} else {
PyObject *out = DapChainDatumTxArrayToPyList(txs);
return Py_BuildValue("O", out);
}
} }
PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args){ PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args){
PyObject *obj_txs; // PyObject *obj_txs;
PyObject *obj_key; PyObject *obj_key;
if (!PyArg_ParseTuple(args, "O|O", &obj_txs, &obj_key)) if (!PyArg_ParseTuple(args, "O", &obj_key))
return NULL;
dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs);
int res = dap_chain_datum_tx_add_sign_item(txs, ((PyCryptoKeyObject*)obj_key)->key);
if (res == -1){
return NULL; return NULL;
} else { // dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs);
PyObject *out = DapChainDatumTxArrayToPyList(txs); int res = dap_chain_datum_tx_add_sign_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
return Py_BuildValue("O", out); ((PyCryptoKeyObject*)obj_key)->key);
} return PyLong_FromLong(res);
} }
PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args){ PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args){
(void)args;
int res = dap_chain_datum_tx_verify_sign(((PyDapChainDatumTxObject*)self)->datum_tx); int res = dap_chain_datum_tx_verify_sign(((PyDapChainDatumTxObject*)self)->datum_tx);
return PyLong_FromLong(res); return PyLong_FromLong(res);
} }
static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj){ //static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj){
Py_ssize_t size = PyList_Size(a_in_obj); // Py_ssize_t size = PyList_Size(a_in_obj);
dap_chain_datum_tx_t **txs = calloc(sizeof(dap_chain_datum_tx_t), (size_t)size); // dap_chain_datum_tx_t **txs = calloc(sizeof(dap_chain_datum_tx_t), (size_t)size);
for (Py_ssize_t i = 0; i < size;i++){ // for (Py_ssize_t i = 0; i < size;i++){
txs[i] = ((PyDapChainDatumTxObject*)PyList_GetItem(a_in_obj, i))->datum_tx; // txs[i] = ((PyDapChainDatumTxObject*)PyList_GetItem(a_in_obj, i))->datum_tx;
} // }
return txs; // return txs;
} //}
static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs){ //static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs){
size_t len = sizeof(datum_txs) / sizeof(*datum_txs); //// size_t len = sizeof(datum_txs) / sizeof(*datum_txs);
PyObject* list = PyList_New((Py_ssize_t)len); //// size_t len = dap_chain_datum_item_tx_get_size(datum_txs);
for (size_t i=0; i < len; i++){ // PyObject* list = PyList_New((Py_ssize_t)len);
PyObject *obj = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType); // for (size_t i=0; i < len; i++){
((PyDapChainDatumTxObject*)obj)->datum_tx = datum_txs[i]; // PyObject *obj = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType);
PyList_Append(list, obj); // ((PyDapChainDatumTxObject*)obj)->datum_tx = datum_txs[i];
} // PyList_Append(list, obj);
return list; // }
} // return list;
//}
dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list){ //dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list){
Py_ssize_t size = PyList_Size(list); // Py_ssize_t size = PyList_Size(list);
dap_chain_tx_out_cond_t **out_conds = calloc(sizeof(dap_chain_tx_out_cond_t), (size_t)size); // dap_chain_tx_out_cond_t **out_conds = calloc(sizeof(dap_chain_tx_out_cond_t), (size_t)size);
for (Py_ssize_t i=0; i < size; i++){ // for (Py_ssize_t i=0; i < size; i++){
out_conds[i] = ((PyDapChainTxOutCondObject*)PyList_GetItem(list, i))->out_cond; // out_conds[i] = ((PyDapChainTxOutCondObject*)PyList_GetItem(list, i))->out_cond;
} // }
return out_conds; // return out_conds;
} //}
PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond){ //PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond){
size_t len = sizeof(out_cond) / sizeof(*out_cond); // size_t len = sizeof(out_cond) / sizeof(*out_cond);
PyObject *list = PyList_New((Py_ssize_t)len); // PyObject *list = PyList_New((Py_ssize_t)len);
for (size_t i=0; i< len;i++ ){ // for (size_t i=0; i< len;i++ ){
PyObject *obj = _PyObject_New(&DapChainTxOutCond_DapChainTxOutCondObjectType); // PyObject *obj = _PyObject_New(&DapChainTxOutCond_DapChainTxOutCondObjectType);
((PyDapChainTxOutCondObject*)obj)->out_cond = out_cond[i]; // ((PyDapChainTxOutCondObject*)obj)->out_cond = out_cond[i];
PyList_Append(list, obj); // PyList_Append(list, obj);
} // }
return list; // return list;
} //}
/* -------------------------------------- */ /* -------------------------------------- */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment