*bool WriteDataDB(const void* const key,const uint8_t keylen,const void * const value,const uint16_t valuelen,const uint32_t time) * 这个函数式从中间层传了三个个参数过来: * 1.第一个是 key值 * 2.第二个是value值 */
| 1339 | * 2.第二个是value值 |
| 1340 | */ |
| 1341 | int32_t ExWriteDataDBFunc(lua_State *L) { |
| 1342 | vector<std::shared_ptr < vector<uint8_t> > > retdata; |
| 1343 | if (!GetDataTableWriteDataDB(L, retdata) || retdata.size() != 2) { |
| 1344 | return RetFalse("ExWriteDataDBFunc key err1"); |
| 1345 | } |
| 1346 | |
| 1347 | string key((*retdata.at(0)).begin(), (*retdata.at(0)).end()); |
| 1348 | string value((*retdata.at(1)).begin(), (*retdata.at(1)).end()); |
| 1349 | |
| 1350 | CLuaVMRunEnv* pVmRunEnv = GetVmRunEnv(L); |
| 1351 | if (nullptr == pVmRunEnv) { |
| 1352 | |
| 1353 | return RetFalse("pVmRunEnv is nullptr"); |
| 1354 | } |
| 1355 | |
| 1356 | const CRegID contractRegId = pVmRunEnv->GetContractRegID(); |
| 1357 | bool flag = true; |
| 1358 | CContractDBCache* scriptDB = pVmRunEnv->GetScriptDB(); |
| 1359 | string oldValue; |
| 1360 | // TODO: get old data when set data ?? |
| 1361 | scriptDB->GetContractData(contractRegId, key, oldValue); |
| 1362 | if (!scriptDB->SetContractData(contractRegId, key, value)) { |
| 1363 | LogPrint(BCLog::LUAVM, "ExWriteDataDBFunc SetContractData failed, key:%s!\n",HexStr(key)); |
| 1364 | lua_BurnStoreUnchanged(L, key.size(), value.size(), BURN_VER_R2); |
| 1365 | flag = false; |
| 1366 | } else { |
| 1367 | lua_BurnStoreSet(L, key.size(), oldValue.size(), value.size(), BURN_VER_R2); |
| 1368 | } |
| 1369 | #ifdef TRACE_LUAVM_CONTRACT_DATA |
| 1370 | LogPrint(BCLog::LUAVM, "WriteData(), contract_regid=%s, key=%s, key_hex=%s, new_value=%s, new_value_hex=%s\n", |
| 1371 | contractRegId.ToString(), key, HexStr(key), value, HexStr(value)); |
| 1372 | #endif//TRACE_LUAVM_CONTRACT_DATA |
| 1373 | return RetRstBooleanToLua(L,flag); |
| 1374 | } |
| 1375 | |
| 1376 | /** |
| 1377 | *bool DeleteDataDB(const void* const key,const uint8_t keylen) |
nothing calls this directly
no test coverage detected