Skip to content

Commit 1643006

Browse files
committed
feat: display Safe Owner in CLI import table
1 parent 93de02d commit 1643006

2 files changed

Lines changed: 57 additions & 16 deletions

File tree

src/iwa/plugins/olas/plugin.py

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,20 @@ def _add_safe_info(self, table, service) -> Tuple[Optional[List[str]], Optional[
141141
safe_text = service.safe_address
142142
if safe_exists:
143143
safe_text += " [green]✓[/green]"
144+
145+
# Check if Agent is a signer
146+
agent_key = next((k for k in service.keys if k.role == "agent"), None)
147+
if agent_key and on_chain_signers:
148+
key_addr = agent_key.address.lower()
149+
if not key_addr.startswith("0x"):
150+
key_addr = "0x" + key_addr
151+
152+
is_signer = key_addr in [s.lower() for s in on_chain_signers]
153+
if not is_signer:
154+
safe_text += f"\n[bold red]⚠ Agent {agent_key.address} - NOT A SIGNER![/bold red]"
155+
else:
156+
safe_text += f" (Signer: {agent_key.address[:6]}...)"
157+
144158
elif safe_exists is False:
145159
safe_text = (
146160
f"[bold red]⚠ {service.safe_address} - DOES NOT EXIST ON-CHAIN![/bold red]"
@@ -165,24 +179,50 @@ def _add_staking_info(self, table, service) -> None:
165179

166180
def _add_owner_info(self, table, service) -> None:
167181
"""Add owner information to the display table."""
182+
# 1. Display Signer/EOA Owner
168183
owner_key = next((k for k in service.keys if k.role == "owner"), None)
169-
owner_addr = service.service_owner_address
170-
if not owner_addr and owner_key:
171-
owner_addr = owner_key.address
172-
173-
if owner_addr:
174-
val = owner_addr
175-
if owner_key:
176-
if owner_key.signature_verified:
177-
val = f"[green]{owner_addr}[/green]"
178-
elif not owner_key.is_encrypted:
179-
val = f"[red]{owner_addr}[/red]"
180-
status = "🔒 encrypted" if owner_key.is_encrypted else "🔓 plaintext"
181-
table.add_row("Owner", f"{val} {status}")
182-
else:
183-
table.add_row("Owner", val)
184+
if owner_key:
185+
val = owner_key.address
186+
if owner_key.signature_verified:
187+
val = f"[green]{val}[/green]"
188+
elif not owner_key.is_encrypted:
189+
val = f"[red]{val}[/red]"
190+
status = "🔒 encrypted" if owner_key.is_encrypted else "🔓 plaintext"
191+
table.add_row("Owner (EOA)", f"{val} {status}")
192+
elif service.service_owner_address and service.service_owner_address != service.service_owner_safe:
193+
# Fallback if we have an address but no key object, and it's not the safe
194+
table.add_row("Owner (EOA)", service.service_owner_address)
195+
else:
196+
table.add_row("Owner (EOA)", "[yellow]N/A[/yellow]")
197+
198+
# 2. Display Safe Owner
199+
if service.service_owner_safe:
200+
# Check on-chain existence if possible (using same helper as agent safe)
201+
on_chain_signers, safe_exists = self._get_safe_signers(
202+
service.service_owner_safe, service.chain_name
203+
)
204+
val = service.service_owner_safe
205+
if safe_exists:
206+
val += " [green]✓[/green]"
207+
208+
# Check if EOA owner is a signer
209+
if owner_key and on_chain_signers:
210+
key_addr = owner_key.address.lower()
211+
if not key_addr.startswith("0x"):
212+
key_addr = "0x" + key_addr
213+
214+
is_signer = key_addr in [s.lower() for s in on_chain_signers]
215+
if not is_signer:
216+
val += f"\n[bold red]⚠ {owner_key.address} - NOT A SIGNER![/bold red]"
217+
else:
218+
val += f" (Signer: {owner_key.address[:6]}...)"
219+
220+
elif safe_exists is False:
221+
val += " [bold red]⚠ DOES NOT EXIST![/bold red]"
222+
223+
table.add_row("Owner (Safe)", val)
184224
else:
185-
table.add_row("Owner", "[red]Not detected[/red]")
225+
table.add_row("Owner (Safe)", "[yellow]N/A[/yellow]")
186226

187227
def _add_agent_info(self, table, service, on_chain_signers, safe_exists) -> None:
188228
"""Add agent information to the display table."""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

0 commit comments

Comments
 (0)