@agentlayer.tech/wallet 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/.openclaw/AGENTS.md +98 -0
  2. package/.openclaw/extensions/agent-wallet/README.md +127 -0
  3. package/.openclaw/extensions/agent-wallet/index.ts +1520 -0
  4. package/.openclaw/extensions/agent-wallet/openclaw.plugin.json +184 -0
  5. package/.openclaw/extensions/agent-wallet/package.json +11 -0
  6. package/.openclaw/extensions/agent-wallet/skills/wallet-operator/SKILL.md +20 -0
  7. package/CHANGELOG.md +42 -0
  8. package/LICENSE +104 -0
  9. package/README.md +332 -0
  10. package/RELEASING.md +204 -0
  11. package/agent-wallet/.env.example +62 -0
  12. package/agent-wallet/AGENTS.md +129 -0
  13. package/agent-wallet/README.md +527 -0
  14. package/agent-wallet/agent_wallet/__init__.py +11 -0
  15. package/agent-wallet/agent_wallet/approval.py +161 -0
  16. package/agent-wallet/agent_wallet/bootstrap.py +178 -0
  17. package/agent-wallet/agent_wallet/btc_user_wallets.py +217 -0
  18. package/agent-wallet/agent_wallet/config.py +382 -0
  19. package/agent-wallet/agent_wallet/encrypted_storage.py +161 -0
  20. package/agent-wallet/agent_wallet/evm_user_wallets.py +370 -0
  21. package/agent-wallet/agent_wallet/exceptions.py +9 -0
  22. package/agent-wallet/agent_wallet/file_ops.py +34 -0
  23. package/agent-wallet/agent_wallet/http_client.py +25 -0
  24. package/agent-wallet/agent_wallet/models.py +66 -0
  25. package/agent-wallet/agent_wallet/nonce_registry.py +59 -0
  26. package/agent-wallet/agent_wallet/openclaw_adapter.py +5128 -0
  27. package/agent-wallet/agent_wallet/openclaw_cli.py +626 -0
  28. package/agent-wallet/agent_wallet/openclaw_runtime.py +272 -0
  29. package/agent-wallet/agent_wallet/plugin_bundle.py +42 -0
  30. package/agent-wallet/agent_wallet/providers/__init__.py +1 -0
  31. package/agent-wallet/agent_wallet/providers/bags.py +259 -0
  32. package/agent-wallet/agent_wallet/providers/evm_portfolio.py +470 -0
  33. package/agent-wallet/agent_wallet/providers/jupiter.py +567 -0
  34. package/agent-wallet/agent_wallet/providers/kamino.py +215 -0
  35. package/agent-wallet/agent_wallet/providers/lifi.py +277 -0
  36. package/agent-wallet/agent_wallet/providers/solana_rpc.py +470 -0
  37. package/agent-wallet/agent_wallet/providers/wdk_btc_local.py +114 -0
  38. package/agent-wallet/agent_wallet/providers/wdk_evm_local.py +205 -0
  39. package/agent-wallet/agent_wallet/sealed_keys.py +61 -0
  40. package/agent-wallet/agent_wallet/solana_stake.py +103 -0
  41. package/agent-wallet/agent_wallet/solana_tx.py +93 -0
  42. package/agent-wallet/agent_wallet/spending_limits.py +101 -0
  43. package/agent-wallet/agent_wallet/transaction_policy.py +518 -0
  44. package/agent-wallet/agent_wallet/user_wallets.py +355 -0
  45. package/agent-wallet/agent_wallet/validation.py +31 -0
  46. package/agent-wallet/agent_wallet/wallet_layer/__init__.py +1 -0
  47. package/agent-wallet/agent_wallet/wallet_layer/base.py +808 -0
  48. package/agent-wallet/agent_wallet/wallet_layer/base58.py +44 -0
  49. package/agent-wallet/agent_wallet/wallet_layer/factory.py +102 -0
  50. package/agent-wallet/agent_wallet/wallet_layer/solana.py +4252 -0
  51. package/agent-wallet/agent_wallet/wallet_layer/wdk_btc.py +272 -0
  52. package/agent-wallet/agent_wallet/wallet_layer/wdk_evm.py +1628 -0
  53. package/agent-wallet/examples/bootstrap_wallet.py +21 -0
  54. package/agent-wallet/examples/openclaw_runtime_onboarding.py +28 -0
  55. package/agent-wallet/examples/openclaw_user_wallet_example.py +31 -0
  56. package/agent-wallet/examples/openclaw_wallet_adapter_example.py +33 -0
  57. package/agent-wallet/openclaw.plugin.json +138 -0
  58. package/agent-wallet/pyproject.toml +31 -0
  59. package/agent-wallet/scripts/bootstrap_openclaw_btc.py +278 -0
  60. package/agent-wallet/scripts/build_release_bundle.py +188 -0
  61. package/agent-wallet/scripts/finalize_openclaw_local_wallet_config.py +121 -0
  62. package/agent-wallet/scripts/install_agent_wallet.py +505 -0
  63. package/agent-wallet/scripts/install_openclaw_local_config.py +226 -0
  64. package/agent-wallet/scripts/install_openclaw_sealed_keys.py +105 -0
  65. package/agent-wallet/scripts/manage_openclaw_btc_wallet.py +244 -0
  66. package/agent-wallet/scripts/reveal_btc_seed.sh +130 -0
  67. package/agent-wallet/scripts/security_utils.py +37 -0
  68. package/agent-wallet/scripts/setup_btc_wallet.sh +146 -0
  69. package/agent-wallet/scripts/switch_openclaw_wallet_network.py +106 -0
  70. package/agent-wallet/skills/wallet-operator/SKILL.md +128 -0
  71. package/bin/openclaw-agent-wallet.mjs +487 -0
  72. package/install-from-github.sh +134 -0
  73. package/package.json +61 -0
  74. package/setup.sh +40 -0
  75. package/wdk-btc-wallet/README.md +325 -0
  76. package/wdk-btc-wallet/bootstrap.sh +22 -0
  77. package/wdk-btc-wallet/package-lock.json +1839 -0
  78. package/wdk-btc-wallet/package.json +18 -0
  79. package/wdk-btc-wallet/run-local.sh +21 -0
  80. package/wdk-btc-wallet/src/config.js +160 -0
  81. package/wdk-btc-wallet/src/json.js +35 -0
  82. package/wdk-btc-wallet/src/local_vault.js +432 -0
  83. package/wdk-btc-wallet/src/network_state.js +84 -0
  84. package/wdk-btc-wallet/src/server.js +257 -0
  85. package/wdk-btc-wallet/src/wdk_btc_wallet.js +332 -0
  86. package/wdk-evm-wallet/README.md +183 -0
  87. package/wdk-evm-wallet/bootstrap.sh +8 -0
  88. package/wdk-evm-wallet/package-lock.json +2340 -0
  89. package/wdk-evm-wallet/package.json +23 -0
  90. package/wdk-evm-wallet/run-local.sh +12 -0
  91. package/wdk-evm-wallet/src/config.js +274 -0
  92. package/wdk-evm-wallet/src/json.js +35 -0
  93. package/wdk-evm-wallet/src/local_vault.js +430 -0
  94. package/wdk-evm-wallet/src/network_state.js +92 -0
  95. package/wdk-evm-wallet/src/server.js +575 -0
  96. package/wdk-evm-wallet/src/wdk_evm_wallet.js +4981 -0
@@ -0,0 +1,44 @@
1
+ """Minimal base58 helpers to avoid extra runtime dependencies."""
2
+
3
+ from __future__ import annotations
4
+
5
+ _ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
6
+ _ALPHABET_INDEX = {char: index for index, char in enumerate(_ALPHABET)}
7
+
8
+
9
+ def b58encode(raw: bytes) -> str:
10
+ """Encode bytes into a base58 string."""
11
+ if not raw:
12
+ return ""
13
+
14
+ zeros = 0
15
+ for byte in raw:
16
+ if byte == 0:
17
+ zeros += 1
18
+ else:
19
+ break
20
+
21
+ value = int.from_bytes(raw, "big")
22
+ encoded = []
23
+ while value > 0:
24
+ value, remainder = divmod(value, 58)
25
+ encoded.append(_ALPHABET[remainder])
26
+
27
+ return ("1" * zeros) + "".join(reversed(encoded or ["1"]))
28
+
29
+
30
+ def b58decode(value: str) -> bytes:
31
+ """Decode a base58 string into bytes."""
32
+ cleaned = value.strip()
33
+ if not cleaned:
34
+ return b""
35
+
36
+ number = 0
37
+ for char in cleaned:
38
+ if char not in _ALPHABET_INDEX:
39
+ raise ValueError(f"Invalid base58 character: {char!r}")
40
+ number = (number * 58) + _ALPHABET_INDEX[char]
41
+
42
+ decoded = number.to_bytes((number.bit_length() + 7) // 8, "big") if number else b""
43
+ leading_zeros = len(cleaned) - len(cleaned.lstrip("1"))
44
+ return (b"\x00" * leading_zeros) + decoded
@@ -0,0 +1,102 @@
1
+ """Factory helpers for agent wallet backends."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+
7
+ from agent_wallet.bootstrap import ensure_solana_wallet_ready, ensure_wallet_pin
8
+ from agent_wallet.encrypted_storage import load_wallet_secret_material
9
+ from agent_wallet.config import (
10
+ resolve_runtime_solana_rpc_config,
11
+ resolve_runtime_solana_swap_config,
12
+ resolve_solana_private_key,
13
+ settings,
14
+ )
15
+ from agent_wallet.wallet_layer.base import AgentWalletBackend, WalletBackendError
16
+ from agent_wallet.wallet_layer.wdk_evm import WdkEvmLocalWalletBackend
17
+ from agent_wallet.wallet_layer.solana import SolanaLocalKeypairSigner, SolanaWalletBackend
18
+ from agent_wallet.wallet_layer.wdk_btc import WdkBtcLocalWalletBackend
19
+
20
+
21
+ def _load_keypair_material() -> str | None:
22
+ secret = resolve_solana_private_key()
23
+ if secret:
24
+ return secret
25
+
26
+ ensured = ensure_solana_wallet_ready()
27
+ keypair_path = settings.solana_agent_keypair_path.strip() or (ensured["path"] if ensured else "")
28
+ if not keypair_path:
29
+ return None
30
+
31
+ path = Path(keypair_path).expanduser()
32
+ if not path.exists():
33
+ raise WalletBackendError(
34
+ f"Configured Solana keypair path does not exist: {path}"
35
+ )
36
+ secret_material, _ = load_wallet_secret_material(path)
37
+ return secret_material.strip()
38
+
39
+
40
+ def create_wallet_backend() -> AgentWalletBackend | None:
41
+ """Build the configured wallet backend instance."""
42
+ backend = settings.agent_wallet_backend.strip().lower()
43
+ if not backend or backend == "none":
44
+ return None
45
+
46
+ if backend in {"solana", "solana_local", "solana-local"}:
47
+ secret_material = _load_keypair_material()
48
+ signer = (
49
+ SolanaLocalKeypairSigner.from_secret_material(secret_material)
50
+ if secret_material
51
+ else None
52
+ )
53
+ keypair_path = settings.solana_agent_keypair_path.strip()
54
+ if signer and keypair_path:
55
+ ensure_wallet_pin(
56
+ Path(keypair_path).expanduser(),
57
+ address=signer.address,
58
+ network=settings.solana_network,
59
+ )
60
+ configured_address = settings.solana_agent_public_key.strip() or None
61
+ rpc_config = resolve_runtime_solana_rpc_config(
62
+ settings.solana_network,
63
+ settings.solana_rpc_url,
64
+ settings.solana_rpc_urls,
65
+ )
66
+ swap_config = resolve_runtime_solana_swap_config(settings.solana_network)
67
+ return SolanaWalletBackend(
68
+ rpc_url=rpc_config["rpc_urls"],
69
+ commitment=settings.solana_commitment,
70
+ network=settings.solana_network,
71
+ signer=signer,
72
+ address=configured_address,
73
+ sign_only=settings.agent_wallet_sign_only,
74
+ rpc_provider_mode=str(rpc_config["mode"]),
75
+ rpc_provider=str(rpc_config["provider"]),
76
+ rpc_transport=str(rpc_config["transport"]),
77
+ swap_provider=str(swap_config["provider"]),
78
+ swap_transport=str(swap_config["transport"]),
79
+ )
80
+
81
+ if backend in {"wdk_btc_local", "wdk-btc-local", "btc_local", "btc-local"}:
82
+ return WdkBtcLocalWalletBackend(
83
+ service_url=settings.wdk_btc_service_url,
84
+ wallet_id=settings.wdk_btc_wallet_id,
85
+ network=settings.solana_network,
86
+ account_index=settings.wdk_btc_account_index,
87
+ sign_only=settings.agent_wallet_sign_only,
88
+ )
89
+
90
+ if backend in {"wdk_evm_local", "wdk-evm-local", "evm_local", "evm-local"}:
91
+ return WdkEvmLocalWalletBackend(
92
+ service_url=settings.wdk_evm_service_url,
93
+ wallet_id=settings.wdk_evm_wallet_id,
94
+ network=settings.solana_network,
95
+ account_index=settings.wdk_evm_account_index,
96
+ sign_only=settings.agent_wallet_sign_only,
97
+ )
98
+
99
+ raise WalletBackendError(
100
+ f"Unsupported agent wallet backend: {backend}. "
101
+ "Supported values: none, solana_local, wdk_btc_local, wdk_evm_local."
102
+ )