Files
zeekay 7cf87b230b node-unified is the node
The module already called itself github.com/luxfi/node while containing no node
in Go: cmd/luxd was twenty-one lines that printed the size of a few types, and
the Go column of the matrix measured a VM plugin. A repo that fetches the thing
it claims to be has not replaced it, so the Go sources move in — 1515 files,
the daemon and everything under it — and the build reaches outside this module
for nothing.

Rust and C++ sit beside it unchanged and are still measured against it by the
differential. That is the point of one repo: the reference implementation and
the two ports are the same checkout, so parity is a thing you can run rather
than a thing you assert.

Verified: builds, and the closure carries no lux-private — checked at build time
rather than believed. The daemon starts twelve chains on a local network
(P X C Q Z A B G K M F, plus D through its plugin) and reports healthy.
2026-09-07 16:15:25 -07:00

225 lines
30 KiB
Go

// Code generated by zipdoc; DO NOT EDIT.
package admin
import (
"encoding/json"
"github.com/zap-proto/zip"
)
func init() {
zip.Describe("github.com/luxfi/node/service/admin GET /chain/aliases", zip.Doc{
Description: "ChainAliases are the names a chain answers to.",
Example: json.RawMessage(`{"chain":"2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM"}`),
Response: json.RawMessage(`{"aliases":["X","2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM"]}`),
})
zip.Describe("github.com/luxfi/node/service/admin GET /chains/tracked", zip.Doc{
Description: "TrackedChains are the chains this node follows.",
Response: json.RawMessage(`{"trackedChains":["2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM"]}`),
})
zip.Describe("github.com/luxfi/node/service/admin GET /config", zip.Doc{
Description: "Config is the configuration this node booted with. The fields that hold key\nmaterial are marked `json:\"-\"` on the type and are not in the answer.",
Fields: map[string]string{
"APIConfig.adminAPIEnabled": "Enable/Disable APIs",
"AdaptiveTimeoutConfig.timeoutCoefficient": "Timeout is [timeoutCoefficient] * average response time\n[timeoutCoefficient] must be > 1",
"AdaptiveTimeoutConfig.timeoutHalflife": "Larger halflife --> less volatile timeout\n[timeoutHalfLife] must be positive",
"BandwidthThrottlerConfig.bandwidthMaxBurstRate": "Max amount of consumable bandwidth that can accumulate for a given peer",
"BandwidthThrottlerConfig.bandwidthRefillRate": "Rate at which the inbound bandwidth consumable by a peer replenishes",
"BootstrapConfig.bootstrapAncestorsMaxContainersReceived": "This node will only consider the first [AncestorsMaxContainersReceived]\ncontainers in an ancestors message it receives.",
"BootstrapConfig.bootstrapAncestorsMaxContainersSent": "Max number of containers in an ancestors message sent by this node.",
"BootstrapConfig.bootstrapBeaconConnectionTimeout": "Timeout before emitting a warn log when connecting to bootstrapping beacons",
"BootstrapConfig.bootstrapMaxTimeGetAncestors": "Max time to spend fetching a container and its\nancestors while responding to a GetAncestors message",
"BootstrapConfig.enableAutomining": "Enable automining in POA mode",
"BootstrapConfig.skipBootstrap": "Skip bootstrapping and start processing immediately",
"ChainSecurityProfile.AllowedProofBackends": "AllowedProofBackends is the set of ProofBackendIDs admissible under\nthis profile. Strict-PQ profiles list only IsProductionPQ() backends.\nOrder is canonicalised by ComputeHash so manifest-ordering doesn't\nchange the digest.",
"ChainSecurityProfile.AllowedProofFormats": "AllowedProofFormats is the set of ProofFormatIDs admissible under\nthis profile. Same dispatch shape as AllowedProofBackends.",
"ChainSecurityProfile.ContractAuthID": "ContractAuthID pins the default authorisation primitive smart\ncontracts use to gate calls on this chain. Contracts may opt into\nstronger primitives (e.g. high-value treasury uses\nContractAuthMultisigMLDSA + ContractAuthMLDSA87) but anything\noutside the strict-PQ acceptable set is refused at the chain\nlevel via ForbidECDSAContractAuth / ForbidBLSContractAuth.",
"ChainSecurityProfile.FinalitySchemeID": "FinalitySchemeID is the single mandatory finality-signature scheme\n(the Pulsar-M variant Q-Chain consumes). Locked profiles pin a\n0x50-block scheme.",
"ChainSecurityProfile.ForbidBLSContractAuth": "ForbidBLSContractAuth refuses any contract-authorisation\nprimitive that names classical BLS aggregates\n(ContractAuthBLSUnsafe). Strict-PQ profiles set true.",
"ChainSecurityProfile.ForbidClassicalKEM": "ForbidClassicalKEM refuses any KEM primitive in the 0x90\nclassical block (KeyExchangeX25519Unsafe). Strict-PQ profiles set\ntrue.",
"ChainSecurityProfile.ForbidClassicalSNARKs": "ForbidClassicalSNARKs demands `UsesClassicalSNARKWrapper == false`.\nDefence against a backend that produces a PQ STARK then wraps it\nin Groth16 for cheap EVM verification (the canonical anti-pattern\nHIP-0078 names).",
"ChainSecurityProfile.ForbidDevProofs": "ForbidDevProofs refuses any backend in the 0x70 dev block. Set on\nproduction profiles; left false on testnet/devnet profiles.",
"ChainSecurityProfile.ForbidECDSAContractAuth": "ForbidECDSAContractAuth refuses any contract-authorisation\nprimitive that names classical ECDSA (ContractAuthECDSAUnsafe).\nStrict-PQ profiles set true.",
"ChainSecurityProfile.ForbidECDSAWallets": "ForbidECDSAWallets refuses any wallet primitive in the 0x90\nclassical block at this chain. Strict-PQ profiles set true.",
"ChainSecurityProfile.ForbidFallbacks": "ForbidFallbacks refuses to fall back to a weaker primitive when\nthe preferred path is unavailable. Strict-PQ profiles set this so\na missing preferred-backend artifact fails the round rather than\nsilently downgrading.",
"ChainSecurityProfile.ForbidKZG": "ForbidKZG demands `UsesKZG == false`. Closes the polynomial\ncommitment trapdoor attack.",
"ChainSecurityProfile.ForbidPairings": "ForbidPairings demands `UsesPairings == false`. Closes the\n\"classical pairing primitive smuggled through\" attack class.",
"ChainSecurityProfile.ForbidTrustedSetup": "ForbidTrustedSetup demands `UsesTrustedSetup == false`. Subsumes\nForbidPairings / ForbidKZG for the classical SNARK families that\nneed a structured reference string.",
"ChainSecurityProfile.HashSuiteID": "HashSuiteID is the single mandatory hash family for transcripts /\nMerkle commitments. Profiles pin exactly one; locked profiles never\ncarry HashSuiteNone.",
"ChainSecurityProfile.HighValueKEM": "HighValueKEM pins the stronger KEM the chain uses for high-value\noperations (treasury withdrawals, governance roots, cross-chain\nbridge state). Strict-PQ pins ML-KEM-1024. Distinct from\nKeyExchangeID so the high-value cost is only paid for the\noperations that need it.",
"ChainSecurityProfile.HighValueSchemeID": "HighValueSchemeID is the signature scheme governance checkpoints\nand treasury actions sign under. Stronger than FinalitySchemeID so\nrare high-stakes operations pay the per-signature cost. Locked\nprofiles pin Pulsar-M-65 or Pulsar-M-87 (never M-44 — devnet only).",
"ChainSecurityProfile.IdentitySchemeID": "IdentitySchemeID is the single mandatory identity-signature scheme\n(validator registration / rotation / revocation). Locked profiles\npin raw FIPS 204 ML-DSA (the 0x40 block).",
"ChainSecurityProfile.KeyExchangeID": "KeyExchangeID pins the default KEM used for session-key\nestablishment and encrypted-state-transition envelopes. Strict-PQ\npins ML-KEM-768; the chain refuses classical X25519 via\nForbidClassicalKEM.",
"ChainSecurityProfile.MinHashOutputBits": "MinHashOutputBits is the floor on the proof's claimed hash output\nwidth in bits (e.g. STARK Merkle digest width). Strict-PQ pins ≥ 384.",
"ChainSecurityProfile.MinSoundnessBits": "MinSoundnessBits is the floor on the proof's claimed soundness in\nbits. Backends advertise their soundness in the envelope; the\nverifier refuses any proof below this floor regardless of backend.\nStrict-PQ profiles set ≥ 128.",
"ChainSecurityProfile.ProfileHash": "ProfileHash is SHA3-384 over the canonical TupleHash256-style\nencoding of every other field. Computed by ComputeHash; pinned in\ngenesis and bound into every cert envelope produced under this\nprofile. Any mutation to any other field changes the hash.",
"ChainSecurityProfile.ProfileID": "ProfileID is the dense numeric identifier for this profile. uint32\nwide so future profiles aren't squeezed; the well-known\nProfileStrictPQ / ProfilePermissive / ProfileFIPS bytes fit in the\nlow byte. Used alongside ProfileHash on the wire for fast lookup;\nProfileHash is authoritative.",
"ChainSecurityProfile.ProfileName": "ProfileName is the canonical human-readable name. Appears in logs,\naudit reports, error messages. Non-empty on a locked profile.",
"ChainSecurityProfile.ProofPolicyID": "ProofPolicyID is the single mandatory proof security class. Every\nadmitted proof MUST declare this policy on the wire; the profile\ndoes not allow a list of policies.",
"ChainSecurityProfile.RecoverySchemeID": "RecoverySchemeID pins the signature scheme the chain's account-\nrecovery / breakglass key signs under. Strict-PQ pins SLH-DSA-192\n(stateless hash-based backstop). RecoverySchemeNone is permitted\nonly when HighValueSchemeID is Pulsar-M-87 / ML-DSA-87 — the\nhigh-value path then carries the strong fallback recovery would\notherwise provide.",
"ChainSecurityProfile.RequireTransparent": "RequireTransparent demands `TransparentSetup == true` in the\nenvelope. STARK / FRI proof systems are transparent (no trusted\nsetup); Groth16 / KZG are not. Strict-PQ profiles set this true.",
"ChainSecurityProfile.RequireTypedTxAuth": "RequireTypedTxAuth demands that every transaction authorisation\nenvelope on this chain carry an explicit TxSchemeID byte (no\nimplicit fallback to \"the wallet scheme inferred from the\npublic key\"). Strict-PQ profiles set true so a receiver sees the\nauth primitive named on the wire.",
"ChainSecurityProfile.TxSchemeID": "TxSchemeID pins the signature scheme accepted on the outer\ntransaction authorisation envelope. May differ from\nWalletSchemeID (a tx may be authorised by a session key rather\nthan the wallet's identity key).",
"ChainSecurityProfile.WalletSchemeID": "WalletSchemeID pins the signature scheme accepted from wallets on\nthis chain. Strict-PQ pins ML-DSA-65; the chain refuses ECDSA\nwallets via ForbidECDSAWallets.",
"Config.allowedNodes": "AllowedNodes is the set of node IDs that are explicitly allowed to connect to this Net when\nValidatorOnly is enabled.",
"Config.chainDataDir": "ChainDataDir is the root path for per-chain directories where VMs can\nwrite arbitrary data.",
"Config.chains": "Chains is the operator's consent list: the chains this node agrees to\nrun, named by letter or alias (\"D\", \"dex\", \"dexvm\"). Some\nprimary-network chains cost an operator something that validating the\nprimary network did not ask for — co-location with a matcher, an HSM, a\nGPU, a custody role — so the node runs them only when they are named\nhere, even under --track-all-chains.\n\nEnforcement is real, not advisory: this list resolves to chain IDs and\nflows into chains.ManagerConfig.Consented, where\nauthorizeChainActivation declines any consent-requiring chain the\noperator did not name.\n\nIt is NECESSARY but not always SUFFICIENT. Where a chain is also\nrestricted it composes AND-wise with the entitlement: consent says what\nthe operator WANTS, the M-Chain attestation says what they are ENTITLED\nto, and only the attestation lives somewhere the operator cannot\nrewrite.",
"Config.compressionType": "The compression type to use when compressing outbound messages.\nAssumes all peers support this compression type.",
"Config.consensusAppConcurrency": "ConsensusAppConcurrency defines the maximum number of goroutines to\nhandle App messages per chain.",
"Config.consensusGossipFreq": "Poll for new frontiers every [FrontierPollFrequency]",
"Config.consensusOverrides": "ConsensusOverrides are the consensus parameters the operator set\nEXPLICITLY. Nil fields keep the per-networkID default; see\nchains.ConsensusOverrides.",
"Config.consensusShutdownTimeout": "RouterHealthConfig router.HealthConfig `json:\"routerHealthConfig\"` // router.HealthConfig not available",
"Config.excessConversionConstant": "Constant used to convert excess gas to a gas price.",
"Config.fdLimit": "File Descriptor Limit",
"Config.healthCheckFreq": "Health",
"Config.lowMemoryEnabled": "Low Memory Configuration",
"Config.maxCapacity": "Maximum amount of gas the chain is allowed to store for future use.",
"Config.maxConsumptionRate": "MaxConsumptionRate is the rate to allocate funds if the validator's stake\nduration is equal to [MintingPeriod]",
"Config.maxPerSecond": "Maximum amount of gas the chain is allowed to consume per second.",
"Config.maximumInboundMessageTimeout": "MaximumInboundMessageTimeout is the maximum deadline duration in a\nmessage. Messages sent by clients setting values higher than this value\nwill be reset to this value.",
"Config.meterVMEnabled": "Metrics",
"Config.minConsumptionRate": "MinConsumptionRate is the rate to allocate funds if the validator's stake\nduration is 0.",
"Config.minPrice": "Minimum price per unit of gas.",
"Config.mintingPeriod": "MintingPeriod is period that the staking calculator runs on. It is\nnot valid for a validator's stake duration to be larger than this.",
"Config.networkConfig": "Network configuration",
"Config.networkID": "ID of the network this node should connect to",
"Config.peerReadBufferSize": "Size, in bytes, of the buffer that we read peer messages into\n(there is one buffer per peer)",
"Config.peerWriteBufferSize": "Size, in bytes, of the buffer that we write peer messages into\n(there is one buffer per peer)",
"Config.poaEnabled": "POA Mode Configuration",
"Config.processContextFilePath": "Path to write process context to (including PID, API URI, and\nstaking address).",
"Config.proposerMinBlockDelay": "ProposerMinBlockDelay is the minimum delay this node will enforce when\nbuilding a linear++ block.",
"Config.proposerNumHistoricalBlocks": "ProposerNumHistoricalBlocks is the number of historical linear++ blocks\nthis node will index per chain. If set to 0, the node will index all\nlinear++ blocks.\n\nNote: The last accepted block is not considered a historical block. This\nprevents the user from only storing the last accepted block, which can\nnever be safe due to the non-atomic commits between the proposervm\ndatabase and the innerVM's database.\n\nInvariant: This value must be set such that the proposervm never needs to\nrollback more blocks than have been deleted. On startup, the proposervm\nrolls back its accepted chain to match the innerVM's accepted chain. If\nthe innerVM is not persisting its last accepted block quickly enough, the\ndatabase can become corrupted.\n\nbasis.",
"Config.proposerWindowDuration": "ProposerWindowDuration overrides the proposervm proposer-slot spacing.\nZero keeps the 5s mainnet default; small local/dev nets set it low (e.g.\n1s) so block cadence is not floored at 5s per proposer slot.",
"Config.requireValidatorToConnect": "RequireValidatorToConnect require that all connections must have at least\none validator between the 2 peers. This can be useful to enable if the\nnode wants to connect to the minimum number of nodes without impacting\nthe network negatively.",
"Config.supplyCap": "SupplyCap is the target value that the reward calculation should be\nasymptotic to.",
"Config.systemTrackerCPUHalflife": "Halflife to use for the cpu tracker.\nLarger halflife --> cpu usage metrics change more slowly.",
"Config.systemTrackerDiskHalflife": "Halflife to use for the disk tracker.\nLarger halflife --> disk usage metrics change more slowly.",
"Config.systemTrackerFrequency": "Frequency to check the real resource usage of tracked processes.\nMore frequent checks --> usage metrics are more accurate, but more\nexpensive to track",
"Config.systemTrackerProcessingHalflife": "Halflife to use for the processing requests tracker.\nLarger halflife --> usage metrics change more slowly.",
"Config.targetPerSecond": "Target amount of gas the chain should consume per second to keep the fees\nstable.",
"Config.uptimeMetricFreq": "UptimeMetricFreq marks how frequently this node will recalculate the\nobserved average uptime metric.",
"Config.useCurrentHeight": "See comment on [UseCurrentHeight] in platformvm.Config",
"Config.validatorOnly": "ValidatorOnly indicates that this Net's Chains are available to only net validators.\nNo chain related messages will go out to non-validators.\nValidators will drop messages received from non-validators.\nAlso see [AllowedNodes] to allow non-validators to connect to this Net.",
"Config.weights": "Weights to merge fee dimensions into a single gas value.",
"DatabaseConfig.name": "Name of the database type to use",
"DatabaseConfig.path": "Path to database",
"DatabaseConfig.readOnly": "If true, all writes are to memory and are discarded at node shutdown.",
"DelayConfig.initialReconnectDelay": "InitialReconnectDelay is the minimum amount of time the node will delay a\nreconnection to a peer. This value is used to start the exponential\nbackoff.",
"DelayConfig.maxReconnectDelay": "MaxReconnectDelay is the maximum amount of time the node will delay a\nreconnection to a peer.",
"Endpoint.AddrPort": "AddrPort is set when Type == EndpointTypeIP",
"Endpoint.Destination": "Destination is set when Type == EndpointTypeRNS\nThis is a 128-bit truncated hash of the Reticulum identity",
"Endpoint.Hostname": "Hostname is set when Type == EndpointTypeHostname",
"Endpoint.Port": "Port is set for IP and Hostname endpoints (0 for RNS)",
"Endpoint.Type": "Type indicates whether this is an IP, hostname, or RNS endpoint",
"HealthConfig.NoIngressValidatorConnectionGracePeriod": "NoIngressValidatorConnectionGracePeriod denotes the time after which the health check fails\nfor primary network validators with no ingress connections.",
"HealthConfig.maxPortionSendQueueBytesFull": "MaxPortionSendQueueBytesFull is the maximum percentage of the pending\nsend byte queue that should be used for the network to be considered\nhealthy. Should be in (0,1].",
"HealthConfig.maxSendFailRate": "MaxSendFailRate is the maximum percentage of send attempts that should be\nfailing for the network to be considered healthy. This does not include\nsend attempts that were not made due to benching. Should be in [0,1].",
"HealthConfig.maxTimeSinceMsgReceived": "MaxTimeSinceMsgReceived is the maximum amount of time since the network\nlast received a message to be considered healthy.",
"HealthConfig.maxTimeSinceMsgSent": "MaxTimeSinceMsgSent is the maximum amount of time since the network last\nsent a message to be considered healthy.",
"HealthConfig.minConnectedPeers": "MinConnectedPeers is the minimum number of peers that the network should\nbe connected to be considered healthy.",
"HealthConfig.sendFailRateHalflife": "SendFailRateHalflife is the halflife of the averager used to calculate\nthe send fail rate percentage. Should be > 0. Larger values mean that the\nfail rate is affected less by recently dropped messages.",
"IPConfig.listenHost": "The host portion of the address to listen on. The port to\nlisten on will be sourced from IPPort.\n\n- If empty, listen on all interfaces (both ipv4 and ipv6).\n- If populated, listen only on the specified address.",
"InboundConnUpgradeThrottlerConfig.maxRecentConnsUpgraded": "Maximum number of inbound connections upgraded within [UpgradeCooldown].\n(As implemented in inboundConnUpgradeThrottler, may actually upgrade\n[MaxRecentConnsUpgraded+1] due to a race condition but that's fine.)\nIf <= 0, inbound connections not rate-limited.",
"InboundConnUpgradeThrottlerConfig.upgradeCooldown": "ShouldUpgrade(ipStr) returns true if it has been at least [UpgradeCooldown]\nsince the last time ShouldUpgrade(ipStr) returned true or if\nShouldUpgrade(ipStr) has never been called.\nIf <= 0, inbound connections not rate-limited.",
"Parameters.Alpha": "For compatibility with Quasar",
"Parameters.Beta": "For compatibility with Quasar",
"Parameters.BlockTime": "For compatibility",
"Parameters.ConvergenceSettleWindow": "ConvergenceSettleWindow is how long a contested fork slot is observed (since the\nlast competing sibling was tracked) before this node casts its ONE per-height\naccept signature for the converged (lowest-canonical) winner. It MUST exceed the\nsibling-gossip latency of the deployment: a settle shorter than gossip lets a node\nbind its vote to an incomplete sibling set (a non-global-minimum block), which —\nunder the height-only vote-once rule — is an UNRECOVERABLE vote split. It is\ndecoupled from RoundTO on purpose so an operator can lengthen it for high-latency\n(WAN) validator sets WITHOUT slowing the round cadence. Zero ⇒ auto (RoundTO/2,\nclamped [150ms, 2s]); see Transitive.convergenceSettleWindow.",
"Parameters.GasLimit": "Per-block gas limit (0 = use chain default)",
"Parameters.PQMode": "PQMode selects which post-quantum signature paths the engine runs\nalongside BLS. Zero value (PQModeBLSOnly) preserves the classical\nfast path. See pq_mode.go for the full enum.",
"Parameters.RoundTO": "For compatibility",
"PeerListGossipConfig.peerListBloomResetFreq": "PeerListBloomResetFreq is how frequently this node will recalculate the\nIP tracker's bloom filter.",
"PeerListGossipConfig.peerListNumValidatorIPs": "PeerListNumValidatorIPs is the number of validator IPs to gossip in every\ngossip event.",
"PeerListGossipConfig.peerListPullGossipFreq": "PeerListPullGossipFreq is the frequency that this node will attempt to\nrequest signed IPs from its peers.",
"StakingConfig.nodeID": "BLS key information for genesis replay",
"StakingConfig.stakingKeyPath": "not accessed but used for logging",
"StakingConfig.stakingMLDSAKeyPath": "File paths kept for log-line context, mirroring StakingKeyPath etc.",
"SystemThrottlerConfig.maxRecheckDelay": "The maximum amount of time we'll wait before re-checking whether a call\nto [Acquire] can return.",
"TargeterConfig.MaxNonVdrNodeUsage": "MaxNonVdrNodeUsage is the max resource usage per non-validator node (0-1)",
"TargeterConfig.MaxNonVdrUsage": "MaxNonVdrUsage is the max resource usage for non-validators (0-1)",
"TargeterConfig.VdrAlloc": "VdrAlloc is the percentage of resource usage attributed to validators (0-1)",
"TimeoutConfig.pingPongTimeout": "PingPongTimeout is the maximum amount of time to wait for a Pong response\nfrom a peer we sent a Ping to.",
"TimeoutConfig.readHandshakeTimeout": "ReadHandshakeTimeout is the maximum amount of time to wait for the peer's\nconnection upgrade to finish before starting the p2p handshake.",
},
})
zip.Describe("github.com/luxfi/node/service/admin GET /log/level", zip.Doc{
Description: "LogLevel is what a named logger writes to its file and to the display.\nLoggers are addressed by name and cannot be enumerated, so a name is required.",
Fields: map[string]string{
"LoggerLevel.levels": "Levels are what it writes to its file and to the display.",
"LoggerLevel.logger": "Logger is the logger's name, the key it appears under on the JSON wire.",
},
Example: json.RawMessage(`{"loggerName":"C"}`),
Response: json.RawMessage(`{"loggerLevels":{"C":{"logLevel":"DEBUG","displayLevel":"INFO"}}}`),
})
zip.Describe("github.com/luxfi/node/service/admin GET /plugins", zip.Doc{
Description: "ListVMs are the VMs installed on this node, the names each answers to, and\nwhere each one's plugin was found. It is addressed as the plugins because\nthat is what it adds over info's own list of VMs — an operator asking this\nwants to know which file on this disk a chain is running.",
Response: json.RawMessage(`{"vms":{"mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6":{"id":"mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6","aliases":["platformvm"]}}}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /chain/alias", zip.Doc{
Description: "Gives a running chain another name, and mounts that name on this\nnode's router while it serves.",
Example: json.RawMessage(`{"chain":"2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM","alias":"myChain"}`),
Response: json.RawMessage(`{}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /chains/tracked", zip.Doc{
Description: "Adds chains to the set this node follows.",
Example: json.RawMessage(`{"chains":["2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM"]}`),
Response: json.RawMessage(`{"trackedChains":["2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM"]}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /db/value", zip.Doc{
Description: "DBValue is what the node's database holds at a key, hex for hex. It is a POST\nbecause the key names anything: what it discloses is chosen by the caller, so\nthe operator answers for it.",
Example: json.RawMessage(`{"key":"0x68656c6c6f"}`),
Response: json.RawMessage(`{"value":"0x776f726c64"}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /log/level", zip.Doc{
Description: "Moves what a named logger writes to its file, to the display, or\nto both. A level that does not parse leaves every logger untouched.",
Example: json.RawMessage(`{"loggerName":"C","logLevel":"debug","displayLevel":"info"}`),
Response: json.RawMessage(`{}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /plugins/load", zip.Doc{
Description: "LoadVMs rescans the plugin directory and brings in any VM that was not there\nat boot, then retries the chains that were waiting for one.",
Fields: map[string]string{
"FailedVM.error": "Error is what stopped it loading.",
"FailedVM.vm": "VM is the VM's id, the key it appears under on the JSON wire.",
"LoadedVM.aliases": "Aliases are the names it also answers to.",
"LoadedVM.vm": "VM is the VM's id, the key it appears under on the JSON wire.",
},
Response: json.RawMessage(`{"newVMs":{},"failedVMs":{},"chainsRetried":0}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /profile/cpu/start", zip.Doc{
Description: "StartCPU begins writing a CPU profile into the node's profile directory.",
Response: json.RawMessage(`{}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /profile/cpu/stop", zip.Doc{
Description: "StopCPU ends the CPU profile and closes the file it was written to.",
Response: json.RawMessage(`{}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /profile/lock", zip.Doc{
Description: "Writes a mutex-contention profile into the node's profile\ndirectory.",
Response: json.RawMessage(`{}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /profile/memory", zip.Doc{
Description: "Writes a heap profile into the node's profile directory.",
Response: json.RawMessage(`{}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /route/alias", zip.Doc{
Description: "Gives one of this node's API endpoints a second address to answer\non.",
Example: json.RawMessage(`{"endpoint":"chain/X","alias":"myChain"}`),
Response: json.RawMessage(`{}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /snapshot", zip.Doc{
Description: "Snapshot writes the node's database to a file, whole or since a version a\nprevious snapshot returned. A path ending .zst or .zstd is compressed.",
Example: json.RawMessage(`{"path":"/var/backups/node.zst","since":0}`),
Response: json.RawMessage(`{"version":42}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /snapshot/restore", zip.Doc{
Description: "Restore reads a snapshot back into the node's database, overwriting what is\nthere. A path ending .zst or .zstd is decompressed.",
Example: json.RawMessage(`{"path":"/var/backups/node.zst"}`),
Response: json.RawMessage(`{}`),
})
zip.Describe("github.com/luxfi/node/service/admin POST /stacktrace", zip.Doc{
Description: "Stacktrace writes every goroutine's stack to stacktrace.txt beside the node.",
Response: json.RawMessage(`{}`),
})
}