Tooltip for SetHook codes in debug stream.
This commit is contained in:
@@ -5,7 +5,7 @@ import { subscribeKey } from "valtio/utils";
|
||||
import { Select } from ".";
|
||||
import state, { ILog, transactionsState } from "../state";
|
||||
import { extractJSON } from "../utils/json";
|
||||
import EnrichAccounts from "./EnrichAccounts";
|
||||
import EnrichLog from "./EnrichLog";
|
||||
import LogBox from "./LogBox";
|
||||
|
||||
interface ISelect<T = string> {
|
||||
@@ -174,13 +174,13 @@ export const pushLog = (
|
||||
const _message = !extracted
|
||||
? msg
|
||||
: msg.slice(0, extracted.start) + msg.slice(extracted.end + 1);
|
||||
const message = ref(<EnrichAccounts str={_message} />);
|
||||
const message = ref(<EnrichLog str={_message} />);
|
||||
|
||||
const _jsonData = extracted
|
||||
? JSON.stringify(extracted.result, null, 2)
|
||||
: undefined;
|
||||
const jsonData = _jsonData
|
||||
? ref(<EnrichAccounts str={_jsonData} />)
|
||||
? ref(<EnrichLog str={_jsonData} />)
|
||||
: undefined;
|
||||
|
||||
if (extracted?.result?.id?._Request?.includes("hooks-builder-req")) {
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
import { FC, useState } from "react";
|
||||
import regexifyString from "regexify-string";
|
||||
import { useSnapshot } from "valtio";
|
||||
import { Link } from ".";
|
||||
import state from "../state";
|
||||
import { AccountDialog } from "./Accounts";
|
||||
|
||||
interface EnrichAccountsProps {
|
||||
str?: string;
|
||||
}
|
||||
|
||||
const EnrichAccounts: FC<EnrichAccountsProps> = ({ str }) => {
|
||||
const { accounts } = useSnapshot(state);
|
||||
const [dialogAccount, setDialogAccount] = useState<string | null>(null);
|
||||
if (!str || !accounts.length) return <>{str}</>;
|
||||
|
||||
const pattern = `(${accounts.map(acc => acc.address).join("|")})`;
|
||||
const res = regexifyString({
|
||||
pattern: new RegExp(pattern, "gim"),
|
||||
decorator: (match, idx) => {
|
||||
const name = accounts.find(acc => acc.address === match)?.name;
|
||||
return (
|
||||
<Link
|
||||
key={match + idx}
|
||||
as="a"
|
||||
onClick={() => setDialogAccount(match)}
|
||||
title={match}
|
||||
highlighted
|
||||
>
|
||||
{name || match}
|
||||
</Link>
|
||||
);
|
||||
},
|
||||
input: str,
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
{res}
|
||||
<AccountDialog
|
||||
setActiveAccountAddress={setDialogAccount}
|
||||
activeAccountAddress={dialogAccount}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default EnrichAccounts;
|
||||
73
components/EnrichLog.tsx
Normal file
73
components/EnrichLog.tsx
Normal file
@@ -0,0 +1,73 @@
|
||||
import { FC, useState } from "react";
|
||||
import regexifyString from "regexify-string";
|
||||
import { useSnapshot } from "valtio";
|
||||
import { Link } from ".";
|
||||
import state from "../state";
|
||||
import { AccountDialog } from "./Accounts";
|
||||
import Tooltip from "./Tooltip";
|
||||
import hookSetCodes from "../content/hook-set-codes.json";
|
||||
import { capitalize } from "../utils/helpers";
|
||||
|
||||
interface EnrichLogProps {
|
||||
str?: string;
|
||||
}
|
||||
|
||||
const EnrichLog: FC<EnrichLogProps> = ({ str }) => {
|
||||
const { accounts } = useSnapshot(state);
|
||||
const [dialogAccount, setDialogAccount] = useState<string | null>(null);
|
||||
if (!str || !accounts.length) return <>{str}</>;
|
||||
|
||||
const addrs = accounts.map(acc => acc.address);
|
||||
const regex = `(${addrs.join("|")}|HookSet\\(\\d+\\))`;
|
||||
const res = regexifyString({
|
||||
pattern: new RegExp(regex, "gim"),
|
||||
decorator: (match, idx) => {
|
||||
if (match.startsWith("r")) {
|
||||
// Account
|
||||
const name = accounts.find(acc => acc.address === match)?.name;
|
||||
return (
|
||||
<Link
|
||||
key={match + idx}
|
||||
as="a"
|
||||
onClick={() => setDialogAccount(match)}
|
||||
title={match}
|
||||
highlighted
|
||||
>
|
||||
{name || match}
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
if (match.startsWith("HookSet")) {
|
||||
const code = match.match(/^HookSet\((\d+)\)/)?.[1];
|
||||
const val = hookSetCodes.find(v => code && v.code === +code);
|
||||
console.log({ code, val });
|
||||
if (!val) return match;
|
||||
|
||||
const content = capitalize(val.description) || "No hint available!";
|
||||
return (
|
||||
<>
|
||||
HookSet(
|
||||
<Tooltip content={content}>
|
||||
<Link>{val.identifier}</Link>
|
||||
</Tooltip>
|
||||
)
|
||||
</>
|
||||
);
|
||||
}
|
||||
return match;
|
||||
},
|
||||
input: str,
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
{res}
|
||||
<AccountDialog
|
||||
setActiveAccountAddress={setDialogAccount}
|
||||
activeAccountAddress={dialogAccount}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default EnrichLog;
|
||||
@@ -79,6 +79,7 @@ const Tooltip: React.FC<
|
||||
open={open}
|
||||
defaultOpen={defaultOpen}
|
||||
onOpenChange={onOpenChange}
|
||||
delayDuration={100}
|
||||
>
|
||||
<TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>
|
||||
<StyledContent side="bottom" align="center" {...rest}>
|
||||
|
||||
434
content/hook-set-codes.json
Normal file
434
content/hook-set-codes.json
Normal file
@@ -0,0 +1,434 @@
|
||||
[
|
||||
{
|
||||
"code": 1,
|
||||
"identifier": "AMENDMENT_DISABLED",
|
||||
"description": "attempt to HookSet when amendment is not yet enabled."
|
||||
},
|
||||
{
|
||||
"code": 2,
|
||||
"identifier": "API_ILLEGAL",
|
||||
"description": "HookSet object contained HookApiVersion for existing HookDefinition"
|
||||
},
|
||||
{
|
||||
"code": 3,
|
||||
"identifier": "API_INVALID",
|
||||
"description": "HookSet object contained HookApiVersion for unrecognised hook API "
|
||||
},
|
||||
{
|
||||
"code": 4,
|
||||
"identifier": "API_MISSING",
|
||||
"description": "HookSet object lacked HookApiVersion"
|
||||
},
|
||||
{
|
||||
"code": 5,
|
||||
"identifier": "BLOCK_ILLEGAL",
|
||||
"description": " a block end instruction moves execution below depth 0 {{}}`}` <= like this"
|
||||
},
|
||||
{
|
||||
"code": 5,
|
||||
"identifier": "BLOCK_ILLEGAL",
|
||||
"description": " a block end instruction moves execution below depth 0 {{}}`}` <= like this"
|
||||
},
|
||||
{
|
||||
"code": 5,
|
||||
"identifier": "BLOCK_ILLEGAL",
|
||||
"description": " a block end instruction moves execution below depth 0 {{}}`}` <= like this"
|
||||
},
|
||||
{
|
||||
"code": 5,
|
||||
"identifier": "BLOCK_ILLEGAL",
|
||||
"description": " a block end instruction moves execution below depth 0 {{}}`}` <= like this"
|
||||
},
|
||||
{
|
||||
"code": 5,
|
||||
"identifier": "BLOCK_ILLEGAL",
|
||||
"description": " a block end instruction moves execution below depth 0 {{}}`}` <= like this"
|
||||
},
|
||||
{
|
||||
"code": 5,
|
||||
"identifier": "BLOCK_ILLEGAL",
|
||||
"description": " a block end instruction moves execution below depth 0 {{}}`}` <= like this"
|
||||
},
|
||||
{
|
||||
"code": 6,
|
||||
"identifier": "CALL_ILLEGAL",
|
||||
"description": "wasm tries to call a non-whitelisted function"
|
||||
},
|
||||
{
|
||||
"code": 7,
|
||||
"identifier": "CALL_INDIRECT",
|
||||
"description": "wasm used call indirect instruction which is disallowed"
|
||||
},
|
||||
{
|
||||
"code": 8,
|
||||
"identifier": "CREATE_FLAG",
|
||||
"description": "create operation requires hsoOVERRIDE"
|
||||
},
|
||||
{
|
||||
"code": 9,
|
||||
"identifier": "DELETE_FIELD",
|
||||
"description": ""
|
||||
},
|
||||
{
|
||||
"code": 10,
|
||||
"identifier": "DELETE_FLAG",
|
||||
"description": "delete operation requires hsoOVERRIDE"
|
||||
},
|
||||
{
|
||||
"code": 11,
|
||||
"identifier": "DELETE_NOTHING",
|
||||
"description": "delete operation would delete nothing"
|
||||
},
|
||||
{
|
||||
"code": 12,
|
||||
"identifier": "EXPORTS_MISSING",
|
||||
"description": "hook did not export *any* functions (should be cbak, hook)"
|
||||
},
|
||||
{
|
||||
"code": 13,
|
||||
"identifier": "EXPORT_CBAK_FUNC",
|
||||
"description": "hook did not export correct func def int64_t cbak(uint32_t)"
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"identifier": "EXPORT_HOOK_FUNC",
|
||||
"description": "hook did not export correct func def int64_t hook(uint32_t)"
|
||||
},
|
||||
{
|
||||
"code": 15,
|
||||
"identifier": "EXPORT_MISSING",
|
||||
"description": "distinct from export*S*_missing, either hook or cbak is missing"
|
||||
},
|
||||
{
|
||||
"identifier": "FLAGS_INVALID",
|
||||
"code": 16,
|
||||
"description": "HookSet flags were invalid for specified operation "
|
||||
},
|
||||
{
|
||||
"identifier": "FUNCS_MISSING",
|
||||
"code": 17,
|
||||
"description": "hook did not include function code for any functions "
|
||||
},
|
||||
{
|
||||
"identifier": "FUNC_PARAM_INVALID",
|
||||
"code": 18,
|
||||
"description": "parameter types may only be i32 i64 u32 u64 "
|
||||
},
|
||||
{
|
||||
"identifier": "FUNC_RETURN_COUNT",
|
||||
"code": 19,
|
||||
"description": "a function type is defined in the wasm which returns > 1 return value "
|
||||
},
|
||||
{
|
||||
"identifier": "FUNC_RETURN_INVALID",
|
||||
"code": 20,
|
||||
"description": "a function type does not return i32 i64 u32 or u64 "
|
||||
},
|
||||
{
|
||||
"identifier": "FUNC_TYPELESS",
|
||||
"code": 21,
|
||||
"description": "hook defined hook/cbak but their type is not defined in wasm "
|
||||
},
|
||||
{
|
||||
"identifier": "FUNC_TYPE_INVALID",
|
||||
"code": 22,
|
||||
"description": "malformed and illegal wasm in the func type section "
|
||||
},
|
||||
{
|
||||
"identifier": "GRANTS_EMPTY",
|
||||
"code": 23,
|
||||
"description": "HookSet object contained an empty grants array (you should remove it) "
|
||||
},
|
||||
{
|
||||
"identifier": "GRANTS_EXCESS",
|
||||
"code": 24,
|
||||
"description": "HookSet object cotnained a grants array with too many grants "
|
||||
},
|
||||
{
|
||||
"identifier": "GRANTS_FIELD",
|
||||
"code": 25,
|
||||
"description": "HookSet object contained a grant without Authorize or HookHash "
|
||||
},
|
||||
{
|
||||
"identifier": "GRANTS_ILLEGAL",
|
||||
"code": 26,
|
||||
"description": "Hookset object contained grants array which contained a non Grant object "
|
||||
},
|
||||
{
|
||||
"identifier": "GUARD_IMPORT",
|
||||
"code": 27,
|
||||
"description": "guard import is missing "
|
||||
},
|
||||
{
|
||||
"identifier": "GUARD_MISSING",
|
||||
"code": 28,
|
||||
"description": "guard call missing at top of loop "
|
||||
},
|
||||
{
|
||||
"identifier": "GUARD_PARAMETERS",
|
||||
"code": 29,
|
||||
"description": "guard called but did not use constant expressions for params "
|
||||
},
|
||||
{
|
||||
"identifier": "HASH_OR_CODE",
|
||||
"code": 30,
|
||||
"description": "HookSet object can contain only one of CreateCode and HookHash "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOKON_MISSING",
|
||||
"code": 31,
|
||||
"description": "HookSet object did not contain HookOn but should have "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOKS_ARRAY_BAD",
|
||||
"code": 32,
|
||||
"description": "attempt to HookSet with a Hooks array containing a non-Hook obj "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOKS_ARRAY_BLANK",
|
||||
"code": 33,
|
||||
"description": "all hook set objs were blank "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOKS_ARRAY_EMPTY",
|
||||
"code": 34,
|
||||
"description": "attempt to HookSet with an empty Hooks array "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOKS_ARRAY_MISSING",
|
||||
"code": 35,
|
||||
"description": "attempt to HookSet without a Hooks array "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOKS_ARRAY_TOO_BIG",
|
||||
"code": 36,
|
||||
"description": "attempt to HookSet with a Hooks array beyond the chain size limit "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOK_ADD",
|
||||
"code": 37,
|
||||
"description": "Informational: adding ltHook to directory "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOK_DEF_MISSING",
|
||||
"code": 38,
|
||||
"description": "attempt to reference a hook definition (by hash) that is not on ledger "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOK_DELETE",
|
||||
"code": 39,
|
||||
"description": "unable to delete ltHook from owner "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOK_INVALID_FIELD",
|
||||
"code": 40,
|
||||
"description": "HookSetObj contained an illegal/unexpected field "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOK_PARAMS_COUNT",
|
||||
"code": 41,
|
||||
"description": "hookset obj would create too many hook parameters "
|
||||
},
|
||||
{
|
||||
"identifier": "HOOK_PARAM_SIZE",
|
||||
"code": 42,
|
||||
"description": "hookset obj sets a parameter or value that exceeds max allowable size "
|
||||
},
|
||||
{
|
||||
"identifier": "IMPORTS_MISSING",
|
||||
"code": 43,
|
||||
"description": "hook must import guard, and accept/rollback "
|
||||
},
|
||||
{
|
||||
"identifier": "IMPORT_ILLEGAL",
|
||||
"code": 44,
|
||||
"description": "attempted import of a non-whitelisted function "
|
||||
},
|
||||
{
|
||||
"identifier": "IMPORT_MODULE_BAD",
|
||||
"code": 45,
|
||||
"description": "hook attempted to specify no or a bad import module "
|
||||
},
|
||||
{
|
||||
"identifier": "IMPORT_MODULE_ENV",
|
||||
"code": 46,
|
||||
"description": "hook attempted to specify import module not named env "
|
||||
},
|
||||
{
|
||||
"identifier": "IMPORT_NAME_BAD",
|
||||
"code": 47,
|
||||
"description": "import name was too short or too long "
|
||||
},
|
||||
{
|
||||
"identifier": "INSTALL_FLAG",
|
||||
"code": 48,
|
||||
"description": "install operation requires hsoOVERRIDE "
|
||||
},
|
||||
{
|
||||
"identifier": "INSTALL_MISSING",
|
||||
"code": 49,
|
||||
"description": "install operation specifies hookhash which doesn't exist on the ledger "
|
||||
},
|
||||
{
|
||||
"identifier": "INSTRUCTION_COUNT",
|
||||
"code": 50,
|
||||
"description": "worst case execution instruction count as computed by HookSet "
|
||||
},
|
||||
{
|
||||
"identifier": "INSTRUCTION_EXCESS",
|
||||
"code": 51,
|
||||
"description": "worst case execution instruction count was too large "
|
||||
},
|
||||
{
|
||||
"identifier": "MEMORY_GROW",
|
||||
"code": 52,
|
||||
"description": "memory.grow instruction is present but disallowed "
|
||||
},
|
||||
{
|
||||
"identifier": "NAMESPACE_MISSING",
|
||||
"code": 53,
|
||||
"description": "HookSet object lacked HookNamespace "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE",
|
||||
"code": 54,
|
||||
"description": "Informational: a namespace is being deleted "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_ACCOUNT",
|
||||
"code": 55,
|
||||
"description": "nsdelete tried to delete ns from a non-existing account "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_COUNT",
|
||||
"code": 56,
|
||||
"description": "namespace state count less than 0 / overflow "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_DIR",
|
||||
"code": 57,
|
||||
"description": "could not delete directory node in ledger "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_DIRECTORY",
|
||||
"code": 58,
|
||||
"description": "nsdelete operation failed to delete ns directory "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_DIR_ENTRY",
|
||||
"code": 59,
|
||||
"description": "nsdelete operation failed due to bad entry in ns directory "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_ENTRY",
|
||||
"code": 60,
|
||||
"description": "nsdelete operation failed due to missing hook state entry "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_FIELD",
|
||||
"code": 61
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_FLAGS",
|
||||
"code": 62
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_NONSTATE",
|
||||
"code": 63,
|
||||
"description": "nsdelete operation failed due to the presence of a non-hookstate obj "
|
||||
},
|
||||
{
|
||||
"identifier": "NSDELETE_NOTHING",
|
||||
"code": 64,
|
||||
"description": "hsfNSDELETE provided but nothing to delete "
|
||||
},
|
||||
{
|
||||
"identifier": "OPERATION_INVALID",
|
||||
"code": 65,
|
||||
"description": "could not deduce an operation from the provided hookset obj "
|
||||
},
|
||||
{
|
||||
"identifier": "OVERRIDE_MISSING",
|
||||
"code": 66,
|
||||
"description": "HookSet object was trying to update or delete a hook but lacked hsfOVERRIDE "
|
||||
},
|
||||
{
|
||||
"identifier": "PARAMETERS_FIELD",
|
||||
"code": 67,
|
||||
"description": "HookParameters contained a HookParameter with an invalid key in it "
|
||||
},
|
||||
{
|
||||
"identifier": "PARAMETERS_ILLEGAL",
|
||||
"code": 68,
|
||||
"description": "HookParameters contained something other than a HookParameter "
|
||||
},
|
||||
{
|
||||
"identifier": "PARAMETERS_NAME",
|
||||
"code": 69,
|
||||
"description": "HookParameters contained a HookParameter which lacked ParameterName field "
|
||||
},
|
||||
{
|
||||
"identifier": "PARAM_HOOK_CBAK",
|
||||
"code": 70,
|
||||
"description": "hook and cbak must take exactly one u32 parameter "
|
||||
},
|
||||
{
|
||||
"identifier": "RETURN_HOOK_CBAK",
|
||||
"code": 71,
|
||||
"description": "hook and cbak must retunr i64 "
|
||||
},
|
||||
{
|
||||
"identifier": "SHORT_HOOK",
|
||||
"code": 72,
|
||||
"description": "web assembly byte code ended abruptly "
|
||||
},
|
||||
{
|
||||
"identifier": "TYPE_INVALID",
|
||||
"code": 73,
|
||||
"description": "malformed and illegal wasm specifying an illegal local var type "
|
||||
},
|
||||
{
|
||||
"identifier": "WASM_BAD_MAGIC",
|
||||
"code": 74,
|
||||
"description": "wasm magic number missing or not wasm "
|
||||
},
|
||||
{
|
||||
"identifier": "WASM_INVALID",
|
||||
"code": 75,
|
||||
"description": "set hook operation would set invalid wasm "
|
||||
},
|
||||
{
|
||||
"identifier": "WASM_PARSE_LOOP",
|
||||
"code": 76,
|
||||
"description": "wasm section parsing resulted in an infinite loop "
|
||||
},
|
||||
{
|
||||
"identifier": "WASM_SMOKE_TEST",
|
||||
"code": 77,
|
||||
"description": "Informational: first attempt to load wasm into wasm runtime "
|
||||
},
|
||||
{
|
||||
"identifier": "WASM_TEST_FAILURE",
|
||||
"code": 78,
|
||||
"description": "the smoke test failed "
|
||||
},
|
||||
{
|
||||
"identifier": "WASM_TOO_BIG",
|
||||
"code": 79,
|
||||
"description": "set hook would exceed maximum hook size "
|
||||
},
|
||||
{
|
||||
"identifier": "WASM_TOO_SMALL",
|
||||
"code": 80
|
||||
},
|
||||
{
|
||||
"identifier": "WASM_VALIDATION",
|
||||
"code": 81,
|
||||
"description": "a generic error while parsing wasm, usually leb128 overflow"
|
||||
},
|
||||
{
|
||||
"identifier": "HOOK_CBAK_DIFF_TYPES",
|
||||
"code": 82,
|
||||
"description": "hook and cbak function definitions were different"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user