MCPcopy Create free account
hub / github.com/WaykiChain/WaykiChain / ExGetContractDataFunc

Function ExGetContractDataFunc

src/vm/luavm/lmylib.cpp:1640–1670  ·  view source on GitHub ↗

*bool GetContractData(const void* const scriptID,void* const pkey,short len,void* const pValue,short maxlen) * 中间层传了两个个参数 * 1.脚本的id号 * 2.数据库的key值 */

Source from the content-addressed store, hash-verified

1638 * 2.数据库的key值
1639 */
1640int32_t ExGetContractDataFunc(lua_State *L) {
1641 vector<std::shared_ptr<vector<uint8_t>>> retdata;
1642
1643 if (!GetDataTableGetContractData(L, retdata) || retdata.size() != 2 || retdata.at(0).get()->size() != 6)
1644 return RetFalse("ExGetContractDataFunc tep1 err1");
1645
1646 CLuaVMRunEnv *pVmRunEnv = GetVmRunEnv(L);
1647 if (nullptr == pVmRunEnv)
1648 return RetFalse("pVmRunEnv is nullptr");
1649
1650 CContractDBCache *scriptDB = pVmRunEnv->GetScriptDB();
1651 CRegID contractRegId(*retdata.at(0));
1652 string key((*retdata.at(1)).begin(), (*retdata.at(1)).end());
1653 string value;
1654
1655 int32_t len = 0;
1656 if (contractRegId.IsEmpty() || !scriptDB->GetContractData(contractRegId, key, value)) {
1657 len = 0;
1658 lua_BurnStoreUnchanged(L, key.size(), 0, BURN_VER_R2);
1659 } else {
1660 lua_BurnStoreGet(L, key.size(), value.size(), BURN_VER_R2);
1661 len = RetRstToLua(L, vector<uint8_t>(value.begin(), value.end()));
1662 }
1663 #ifdef TRACE_LUAVM_CONTRACT_DATA
1664 LogPrint(BCLog::LUAVM, "GetContractData(), contract_regid=%s, key=%s, key_hex=%s, value=%s, value_hex=%s\n",
1665 contractRegId.ToString(), key, HexStr(key), value, HexStr(value));
1666 #endif//TRACE_LUAVM_CONTRACT_DATA
1667 /*
1668 * 每个函数里的Lua栈是私有的,当把返回值压入Lua栈以后,该栈会自动被清空*/
1669 return len;
1670}
1671
1672/**
1673 * 取目的账户ID

Callers

nothing calls this directly

Calls 15

RetFalseFunction · 0.85
GetVmRunEnvFunction · 0.85
lua_BurnStoreUnchangedFunction · 0.85
lua_BurnStoreGetFunction · 0.85
RetRstToLuaFunction · 0.85
HexStrFunction · 0.85
atMethod · 0.80
GetScriptDBMethod · 0.80
sizeMethod · 0.45
getMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected