Files
ObsidianDragon/src/wallet/lite_backend_artifact_contract.h
DanS 863d015628 feat(lite): lite wallet foundation (inherited working-tree state)
Preserve the previously-uncommitted lite wallet implementation and related dev WIP
under version control:
- src/wallet/ lite services: client bridge, bridge runtime, connection, lifecycle,
  sync, gateway, result parsers, state mapper, artifact contract/resolver, refresh
  services, UI adapters, wallet_backend/capabilities. (Includes two small M1 fixes:
  lifecycle walletReady now parses the response; default chain name -> "main".)
- src/chat/ chat protocol; tests/fixtures/ (lite + hushchat); tools/hushchat_fixture_check.cpp;
  scripts/build-lite-backend-artifact.sh.
- Pre-existing modified app_network/security/wizard, network_refresh_service, sidebar,
  mining_tab, bootstrap dialog, and version headers captured as-is.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 21:15:28 -05:00

195 lines
6.7 KiB
C++

#pragma once
#include "lite_backend_artifact_resolver.h"
#include <cstddef>
#include <string>
#include <vector>
namespace dragonx::wallet {
enum class LiteBackendArtifactContractLinkMode {
ImportedLibrary,
RuntimeDynamicLibrary,
ExternalExecutable,
};
enum class LiteBackendArtifactContractStatus {
ReadyForResolver,
WaitingForContractOwner,
WaitingForReadOnlyGate,
WaitingForLinkMode,
WaitingForArtifactPath,
WaitingForArtifactKind,
WaitingForAbiVersion,
WaitingForSymbolInventory,
WaitingForRequiredSymbols,
WaitingForSignatureMetadata,
RuntimeActionDisabled,
};
enum class LiteBackendArtifactContractIssue {
ContractOwnerMissing,
ReadOnlyGateMissing,
RuntimeDynamicLinkDeferred,
ExternalExecutableDeferred,
ArtifactPathMissing,
ArtifactKindNotLinkable,
AbiVersionMissing,
AbiVersionUnsupported,
SymbolInventoryOwnerMissing,
SymbolInventoryMissing,
RequiredSymbolMissing,
SignaturePolicyMissing,
SignatureMetadataMissing,
SignatureMetadataIncomplete,
SignatureVerificationMissing,
SignatureVerificationFailed,
SignatureVerifiedArtifactShaMismatch,
SignatureTrustMetadataMissing,
ArtifactMutationRequested,
DynamicLibraryLoadRequested,
DynamicLibraryUnloadRequested,
SymbolResolutionRequested,
SdxlApiRequested,
BridgeCallRequested,
ServerConnectivityCheckRequested,
WalletLifecycleRequested,
SyncRequested,
SyncStatusPollingRequested,
WorkerQueueRequested,
WalletStateMutationRequested,
WalletPersistenceRequested,
UploadRequested,
SigningRequested,
PublicationRequested,
};
struct LiteBackendArtifactContractSymbol {
std::string logicalName;
std::string abiName;
bool returnsOwnedString = false;
bool cleanupFunction = false;
bool requiredForLifecycle = false;
bool requiredForSync = false;
bool requiredForServerCheck = false;
bool requiredForShutdown = false;
};
struct LiteBackendArtifactContractInput {
bool contractOwnerReady = false;
bool readOnlyGateReady = false;
std::string projectRoot;
std::string artifactPath;
LiteBackendArtifactPlatform platform = LiteBackendArtifactPlatform::Current;
LiteBackendArtifactKind artifactKind = LiteBackendArtifactKind::Unknown;
LiteBackendArtifactContractLinkMode linkMode = LiteBackendArtifactContractLinkMode::ImportedLibrary;
std::string abiVersion;
std::string artifactSha256;
LiteBackendArtifactProvenanceMetadata provenance;
LiteBackendArtifactSignatureVerificationMetadata signatureVerification;
bool sdxlCompatible = false;
bool symbolInventoryOwnerReady = false;
std::vector<std::string> exportedSymbols;
bool artifactMutationRequested = false;
bool dynamicLibraryLoadRequested = false;
bool dynamicLibraryUnloadRequested = false;
bool symbolResolutionRequested = false;
bool sdxlApiRequested = false;
bool bridgeCallRequested = false;
bool serverConnectivityCheckRequested = false;
bool walletLifecycleRequested = false;
bool syncRequested = false;
bool syncStatusPollingRequested = false;
bool workerQueueRequested = false;
bool walletStateMutationRequested = false;
bool walletPersistenceRequested = false;
bool uploadRequested = false;
bool signingRequested = false;
bool publicationRequested = false;
};
struct LiteBackendArtifactContractOptions {
bool requireContractOwner = true;
bool requireReadOnlyGate = true;
bool requireImportedLibraryLinkMode = true;
bool requireAbiVersion = true;
bool requireSymbolInventory = true;
bool requireAllRequiredSymbols = true;
bool requireSignatureMetadataWhenRequired = true;
bool validateOptionalSignatureMetadata = true;
bool rejectRuntimeActions = true;
};
struct LiteBackendArtifactContractIssueInfo {
LiteBackendArtifactContractIssue issue = LiteBackendArtifactContractIssue::ContractOwnerMissing;
std::string message;
};
struct LiteBackendArtifactContractResult {
bool ok = false;
bool readOnlyContract = true;
bool noArtifactMutation = true;
bool noDynamicLibraryLoaded = true;
bool noDynamicLibraryUnloaded = true;
bool noSymbolResolutionPerformed = true;
bool noSdxlCalls = true;
bool noBridgeCalls = true;
bool noServerConnectivityChecked = true;
bool noWalletLifecycle = true;
bool noSyncStarted = true;
bool noSyncStatusPolled = true;
bool noWorkerQueueEnqueue = true;
bool noWalletStateMutation = true;
bool noWalletPersistence = true;
bool noUpload = true;
bool noSigning = true;
bool noPublication = true;
bool contractOwnerAccepted = false;
bool readOnlyGateAccepted = false;
bool importedLinkModeAccepted = false;
bool artifactPathAccepted = false;
bool artifactKindAccepted = false;
bool abiVersionAccepted = false;
bool provenanceForwarded = false;
bool signatureMetadataAccepted = false;
bool signatureVerificationForwarded = false;
bool signatureRequiredForRelease = false;
bool signatureVerified = false;
bool sdxlCompatibilityForwarded = false;
bool symbolInventoryAccepted = false;
bool requiredSymbolsAccepted = false;
bool resolverInputProduced = false;
bool dynamicLibraryLoadAllowed = false;
bool symbolResolutionAllowed = false;
bool runtimeActivationAllowed = false;
std::size_t requiredSymbolCount = 0;
std::size_t exportedSymbolCount = 0;
LiteBackendArtifactContractStatus status = LiteBackendArtifactContractStatus::WaitingForContractOwner;
LiteWalletSdxlArtifactSymbolsInput symbols;
LiteBackendArtifactCandidate resolverCandidate;
LiteBackendArtifactResolverInput resolverInput;
std::vector<std::string> missingSymbols;
std::vector<LiteBackendArtifactContractIssueInfo> issues;
std::string error;
std::string summary;
};
const char* liteBackendArtifactContractSupportedAbiVersion();
const char* liteBackendArtifactContractLinkModeName(LiteBackendArtifactContractLinkMode linkMode);
const char* liteBackendArtifactContractStatusName(LiteBackendArtifactContractStatus status);
const char* liteBackendArtifactContractIssueName(LiteBackendArtifactContractIssue issue);
std::vector<LiteBackendArtifactContractSymbol> liteBackendArtifactContractRequiredSymbols();
LiteWalletSdxlArtifactSymbolsInput liteBackendArtifactSymbolsFromExportedNames(
const std::vector<std::string>& exportedSymbols);
LiteBackendArtifactContractResult evaluateLiteBackendArtifactContract(
const LiteBackendArtifactContractInput& input,
LiteBackendArtifactContractOptions options = {});
LiteBackendArtifactResolverInput liteBackendArtifactResolverInputFromContractResult(
const LiteBackendArtifactContractResult& result);
} // namespace dragonx::wallet