diff --git a/include/wrapping_dap_chain_datum_tx.h b/include/wrapping_dap_chain_datum_tx.h index 595e5cb2014460a339ecefa96e99f0c7cf22da87..4991798eb2d39b716231306ad6ae0f6b19da2937 100644 --- a/include/wrapping_dap_chain_datum_tx.h +++ b/include/wrapping_dap_chain_datum_tx.h @@ -6,6 +6,7 @@ #include "libdap_crypto_key_python.h" #include "dap_chain_datum_tx_out_cond.h" #include "wrapping_dap_hash.h" +#include "dap_chain_datum_tx_items.h" #ifdef __cplusplus extern "C" { @@ -158,18 +159,14 @@ 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_verify_sign_py(PyObject *self, PyObject *args); -static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj); -static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs); - - 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, ""}, + {"addItem", (PyCFunction)dap_chain_datum_tx_add_item_py, METH_VARARGS, ""}, + {"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, ""}, + {"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, ""}, + {"addSignItem", (PyCFunction)dap_chain_datum_tx_add_sign_item_py, METH_VARARGS, ""}, {"verifySign", (PyCFunction)dap_chain_datum_tx_verify_sign_py, METH_VARARGS, ""}, {NULL, NULL, 0, NULL} }; @@ -265,9 +262,6 @@ static PyTypeObject DapChainTxOutCond_DapChainTxOutCondObjectType = { PyType_GenericNew, /* tp_new */ }; -dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list); -PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond); - /* -------------------------------------- */ #ifdef __cplusplus diff --git a/src/wrapping_dap_chain_datum_tx.c b/src/wrapping_dap_chain_datum_tx.c index f412bf616f7f6ee44408234c6bce4ac9aa02f581..5241612dc97960223d856bc7f9c5de0bf405b7bb 100644 --- a/src/wrapping_dap_chain_datum_tx.c +++ b/src/wrapping_dap_chain_datum_tx.c @@ -54,69 +54,52 @@ void PyDapChainDatumTxObject_delete(PyDapChainDatumTxObject* datumTx){ } 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); return PyLong_FromSize_t(size); } PyObject *dap_chain_datum_tx_add_item_py(PyObject *self, PyObject *args){ - PyObject *in_obj; - u_int8_t *a_item; - if (!PyArg_ParseTuple(args, "O|b", &in_obj, &a_item)) + uint8_t *a_item; + if (!PyArg_ParseTuple(args, "b", &a_item)) return NULL; - dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(in_obj); - int res = dap_chain_datum_tx_add_item(txs, a_item); - if (res == -1){ - return NULL; - } else { - PyObject *out = DapChainDatumTxArrayToPyList(txs); - return Py_BuildValue("O", out); - } + int res = dap_chain_datum_tx_add_item(&(((PyDapChainDatumTxObject*)self)->datum_tx), a_item); + return PyLong_FromLong(res); } PyObject *dap_chain_datum_tx_add_in_item_py(PyObject *self, PyObject *args){ - PyObject *in_obj_datum_txs; PyObject *in_obj_hash_fast; 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; - dap_chain_datum_tx_t **a_txs = PyListToDapChainDatumTxArray(in_obj_datum_txs); - int res = dap_chain_datum_tx_add_in_item(a_txs, ((PyDapHashFastObject*)in_obj_hash_fast)->hash_fast, + int res = dap_chain_datum_tx_add_in_item(&(((PyDapChainDatumTxObject*)self)->datum_tx), + ((PyDapHashFastObject*)in_obj_hash_fast)->hash_fast, in_tx_out_pref_idx); - if (res == -1){ - return NULL; - } else { - PyObject *out = DapChainDatumTxArrayToPyList(a_txs); - return Py_BuildValue("O", out); - } + return PyLong_FromLong(res); } PyObject *dap_chain_datum_tx_add_in_cond_item_py(PyObject *self, PyObject *args){ - PyObject *in_obj_datum_txs; PyObject *in_chain_hash_fast; unsigned int in_tx_out_prev_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; - 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); } PyObject *dap_chain_datum_tx_add_out_item_py(PyObject *self, PyObject *args){ - PyObject *in_obj_datum_txs; PyObject *in_addr; uint64_t value; - if (!PyArg_ParseTuple(args, "O|O|k", &in_obj_datum_txs, &in_addr, value)) - return NULL; - 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); - if (res == -1){ + if (!PyArg_ParseTuple(args, "O|k", &in_addr, &value)) return NULL; - } else { - PyObject *out = DapChainDatumTxArrayToPyList(txs); - return Py_BuildValue("O", out); - } + int res = dap_chain_datum_tx_add_out_item(&(((PyDapChainDatumTxObject*)self)->datum_tx), + ((PyDapChainAddrObject*)in_addr)->addr, + value); + return PyLong_FromLong(res); } PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args){ - PyObject *obj_txs; PyObject *obj_key; PyObject *obj_srv_uid; uint64_t value; @@ -124,79 +107,31 @@ PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args PyObject *obj_srv_price_unit_uid; PyObject *obj_cond_bytes; 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)) return NULL; - dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs); 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, - value, value_max_per_unit, ((PyDapChainNetSrvPriceUnitUIDObject*)obj_srv_price_unit_uid)->price_unit_uid, + int res = dap_chain_datum_tx_add_out_cond_item(&(((PyDapChainDatumTxObject*)self)->datum_tx), + ((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); - if (res == -1){ - return NULL; - } else { - PyObject *out = DapChainDatumTxArrayToPyList(txs); - return Py_BuildValue("O", out); - } + return PyLong_FromLong(res); } PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args){ - PyObject *obj_txs; 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; - } else { - PyObject *out = DapChainDatumTxArrayToPyList(txs); - return Py_BuildValue("O", out); - } -} -PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args) -{ - int res = dap_chain_datum_tx_verify_sign(((PyDapChainDatumTxObject*)self)->datum_tx); + int res = dap_chain_datum_tx_add_sign_item(&(((PyDapChainDatumTxObject*)self)->datum_tx), + ((PyCryptoKeyObject*)obj_key)->key); return PyLong_FromLong(res); } -static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *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); - for (Py_ssize_t i = 0; i < size;i++){ - txs[i] = ((PyDapChainDatumTxObject*)PyList_GetItem(a_in_obj, i))->datum_tx; - } - return txs; -} - -static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs){ - size_t len = sizeof(datum_txs) / sizeof(*datum_txs); - PyObject* list = PyList_New((Py_ssize_t)len); - for (size_t i=0; i < len; i++){ - PyObject *obj = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType); - ((PyDapChainDatumTxObject*)obj)->datum_tx = datum_txs[i]; - PyList_Append(list, obj); - } - return list; -} - -dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *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); - for (Py_ssize_t i=0; i < size; i++){ - out_conds[i] = ((PyDapChainTxOutCondObject*)PyList_GetItem(list, i))->out_cond; - } - return out_conds; -} - -PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond){ - size_t len = sizeof(out_cond) / sizeof(*out_cond); - PyObject *list = PyList_New((Py_ssize_t)len); - for (size_t i=0; i< len;i++ ){ - PyObject *obj = _PyObject_New(&DapChainTxOutCond_DapChainTxOutCondObjectType); - ((PyDapChainTxOutCondObject*)obj)->out_cond = out_cond[i]; - PyList_Append(list, obj); - } - return list; +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); + return PyLong_FromLong(res); } /* -------------------------------------- */