| 1227 | } |
| 1228 | |
| 1229 | Value listcontractassets(const Array& params, bool fHelp) { |
| 1230 | if (fHelp || params.size() != 1) { |
| 1231 | throw runtime_error("listcontractassets regid\n" |
| 1232 | "\nreturn Array containing address, asset information.\n" |
| 1233 | "\nArguments: regid: Contract RegId\n" |
| 1234 | "\nResult:\n" |
| 1235 | "\nExamples:\n" |
| 1236 | + HelpExampleCli("listcontractassets", "1-1") |
| 1237 | + "\nAs json rpc call\n" |
| 1238 | + HelpExampleRpc("listcontractassets", "1-1")); |
| 1239 | } |
| 1240 | |
| 1241 | if (!CRegID::IsSimpleRegIdStr(params[0].get_str())) |
| 1242 | throw runtime_error("in listcontractassets :regid is invalid!\n"); |
| 1243 | |
| 1244 | CRegID script(params[0].get_str()); |
| 1245 | |
| 1246 | Array retArray; |
| 1247 | assert(pWalletMain != nullptr); |
| 1248 | { |
| 1249 | set<CKeyID> setKeyId; |
| 1250 | pWalletMain->GetKeys(setKeyId); |
| 1251 | if (setKeyId.size() == 0) |
| 1252 | return retArray; |
| 1253 | |
| 1254 | CContractDBCache contractScriptTemp(*pCdMan->pContractCache); |
| 1255 | |
| 1256 | for (const auto &keyid : setKeyId) { |
| 1257 | |
| 1258 | string key = keyid.ToAddress(); |
| 1259 | |
| 1260 | std::shared_ptr<CAppUserAccount> tem = std::make_shared<CAppUserAccount>(); |
| 1261 | if (!contractScriptTemp.GetContractAccount(script, key, *tem.get())) { |
| 1262 | tem = std::make_shared<CAppUserAccount>(key); |
| 1263 | } |
| 1264 | tem.get()->AutoMergeFreezeToFree(chainActive.Height()); |
| 1265 | |
| 1266 | Object obj; |
| 1267 | obj.push_back(Pair("addr", key)); |
| 1268 | obj.push_back(Pair("asset", (double) tem.get()->GetBcoins() / (double) COIN)); |
| 1269 | retArray.push_back(obj); |
| 1270 | } |
| 1271 | } |
| 1272 | |
| 1273 | return retArray; |
| 1274 | } |
| 1275 | |
| 1276 | |
| 1277 | Value gethash(const Array& params, bool fHelp) { |
nothing calls this directly
no test coverage detected