*bool ExModifyDataDBFunc(const void* const key,const uint8_t keylen, const void* const pvalue,const uint16_t valuelen) * 中间层传了两个参数 * 1.第一个是 key * 2.第二个是 value */
| 1474 | * 2.第二个是 value |
| 1475 | */ |
| 1476 | int32_t ExModifyDataDBFunc(lua_State *L) { |
| 1477 | vector<std::shared_ptr < vector<uint8_t> > > retdata; |
| 1478 | if (!GetDataTableWriteDataDB(L,retdata) ||retdata.size() != 2) { |
| 1479 | return RetFalse("ExModifyDataDBFunc key err"); |
| 1480 | } |
| 1481 | |
| 1482 | string key((*retdata.at(0)).begin(), (*retdata.at(0)).end()); |
| 1483 | string newValue((*retdata.at(1)).begin(), (*retdata.at(1)).end()); |
| 1484 | |
| 1485 | CLuaVMRunEnv* pVmRunEnv = GetVmRunEnv(L); |
| 1486 | if (nullptr == pVmRunEnv) { |
| 1487 | return RetFalse("pVmRunEnv is nullptr"); |
| 1488 | } |
| 1489 | |
| 1490 | CRegID contractRegId = pVmRunEnv->GetContractRegID(); |
| 1491 | CContractDBCache* scriptDB = pVmRunEnv->GetScriptDB(); |
| 1492 | string oldValue; |
| 1493 | bool flag = false; |
| 1494 | if (scriptDB->GetContractData(contractRegId, key, oldValue)) { |
| 1495 | if (scriptDB->SetContractData(contractRegId, key, newValue)) { |
| 1496 | lua_BurnStoreSet(L, key.size(), oldValue.size(), newValue.size(), BURN_VER_R2); |
| 1497 | flag = true; |
| 1498 | } else { |
| 1499 | lua_BurnStoreUnchanged(L, key.size(), newValue.size(), BURN_VER_R2); |
| 1500 | } |
| 1501 | } else { |
| 1502 | lua_BurnStoreUnchanged(L, key.size(), newValue.size(), BURN_VER_R2); |
| 1503 | } |
| 1504 | #ifdef TRACE_LUAVM_CONTRACT_DATA |
| 1505 | LogPrint(BCLog::LUAVM, "ModifyData(), contract_regid=%s, key=%s, key_hex=%s, new_value=%s, new_value_hex=%s\n", |
| 1506 | contractRegId.ToString(), key, HexStr(key), newValue, HexStr(newValue)); |
| 1507 | #endif//TRACE_LUAVM_CONTRACT_DATA |
| 1508 | |
| 1509 | return RetRstBooleanToLua(L,flag); |
| 1510 | } |
| 1511 | |
| 1512 | |
| 1513 | static bool GetDataTableWriteOutput(lua_State *L, CVmOperate &operate) { |
nothing calls this directly
no test coverage detected