diff --git a/apps/daimo-mobile/src/logic/note.ts b/apps/daimo-mobile/src/logic/note.ts
index d73335e66..5c5112970 100644
--- a/apps/daimo-mobile/src/logic/note.ts
+++ b/apps/daimo-mobile/src/logic/note.ts
@@ -103,7 +103,6 @@ export function useEphemeralSignature(
account: ephemeralAccount,
chain: baseGoerli,
transport: http(),
- // TODO: webSocket("wss://base-goerli.public.blastapi.io")
});
const message = keccak256(recipient);
const signature = await ephemeralClient.signMessage({
diff --git a/apps/daimo-mobile/src/view/HomeStack.tsx b/apps/daimo-mobile/src/view/HomeStack.tsx
index cc7aae4bf..1b6d7dbd0 100644
--- a/apps/daimo-mobile/src/view/HomeStack.tsx
+++ b/apps/daimo-mobile/src/view/HomeStack.tsx
@@ -2,15 +2,15 @@ import { tokenMetadata } from "@daimo/contract";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import { useMemo } from "react";
-import { AccountScreen } from "./screen/AccountScreen";
import { HistoryScreen } from "./screen/History";
import { HistoryOpScreen } from "./screen/HistoryOpScreen";
import HomeScreen from "./screen/HomeScreen";
import OnboardingScreen from "./screen/OnboardingScreen";
-import ClaimNoteScreen from "./screen/receive/ClaimNoteScreen";
+import { SettingsScreen } from "./screen/SettingsScreen";
+import NoteScreen from "./screen/link/NoteScreen";
+import CreateRequestScreen from "./screen/receive/CreateRequestScreen";
import DepositScreen from "./screen/receive/DepositScreen";
-import RequestScreen from "./screen/receive/RequestScreen";
-import RequestSendScreen from "./screen/receive/RequestSendScreen";
+import SendRequestScreen from "./screen/receive/SendRequestScreen";
import SendScreen from "./screen/send/SendScreen";
import WithdrawScreen from "./screen/send/WithdrawScreen";
import { HomeStackParamList } from "./shared/nav";
@@ -30,7 +30,7 @@ export function HomeStackNav() {
options={useMemo(() => ({ headerShown: !!account }), [account])}
/>
-
+
-
+
-
+
diff --git a/apps/daimo-mobile/src/view/screen/AccountScreen.tsx b/apps/daimo-mobile/src/view/screen/SettingsScreen.tsx
similarity index 99%
rename from apps/daimo-mobile/src/view/screen/AccountScreen.tsx
rename to apps/daimo-mobile/src/view/screen/SettingsScreen.tsx
index fdae1c0f5..81545a885 100644
--- a/apps/daimo-mobile/src/view/screen/AccountScreen.tsx
+++ b/apps/daimo-mobile/src/view/screen/SettingsScreen.tsx
@@ -29,7 +29,7 @@ import { useNav } from "../shared/nav";
import { color, ss } from "../shared/style";
import { TextBody, TextBold, TextH2, TextH3, TextLight } from "../shared/text";
-export function AccountScreen() {
+export function SettingsScreen() {
const [account, setAccount] = useAccount();
const nav = useNav();
diff --git a/apps/daimo-mobile/src/view/screen/receive/ClaimNoteScreen.tsx b/apps/daimo-mobile/src/view/screen/link/NoteScreen.tsx
similarity index 93%
rename from apps/daimo-mobile/src/view/screen/receive/ClaimNoteScreen.tsx
rename to apps/daimo-mobile/src/view/screen/link/NoteScreen.tsx
index ceb09c0bd..11202024a 100644
--- a/apps/daimo-mobile/src/view/screen/receive/ClaimNoteScreen.tsx
+++ b/apps/daimo-mobile/src/view/screen/link/NoteScreen.tsx
@@ -10,7 +10,6 @@ import { NativeStackScreenProps } from "@react-navigation/native-stack";
import { ReactNode, useEffect, useState } from "react";
import { ActivityIndicator, ScrollView, StyleSheet, View } from "react-native";
import { Address } from "viem";
-import { privateKeyToAccount } from "viem/accounts";
import { SendOpFn, useSendAsync } from "../../../action/useSendAsync";
import {
@@ -28,17 +27,14 @@ import { TextCenter, TextError, TextLight } from "../../shared/text";
type Props = NativeStackScreenProps;
-export default function ClaimNoteScreen({ route }: Props) {
+export default function NoteScreen({ route }: Props) {
const [account] = useAccount();
assert(account != null);
- const { ephemeralPrivateKey, ephemeralOwner: passedEphemeralOwner } =
- route.params || {};
- const ephemeralOwner =
- passedEphemeralOwner || privateKeyToAccount(ephemeralPrivateKey!).address;
-
+ const { ephemeralPrivateKey, ephemeralOwner } = route.params;
console.log(`[NOTE] rendering note ${ephemeralOwner}`);
+ // TODO: delete useFetchNote etc, use rpcFunc.getLinkStatus
const [note, loadState] = useFetchNote(ephemeralOwner);
return (
diff --git a/apps/daimo-mobile/src/view/screen/receive/RequestScreen.tsx b/apps/daimo-mobile/src/view/screen/receive/CreateRequestScreen.tsx
similarity index 97%
rename from apps/daimo-mobile/src/view/screen/receive/RequestScreen.tsx
rename to apps/daimo-mobile/src/view/screen/receive/CreateRequestScreen.tsx
index 22bceb5f4..dc13cbe8d 100644
--- a/apps/daimo-mobile/src/view/screen/receive/RequestScreen.tsx
+++ b/apps/daimo-mobile/src/view/screen/receive/CreateRequestScreen.tsx
@@ -12,7 +12,7 @@ import { useNav } from "../../shared/nav";
import { ss } from "../../shared/style";
import { TextLight } from "../../shared/text";
-export default function RequestScreen() {
+export default function CreateRequestScreen() {
const nav = useNav();
const send = useCallback(() => nav.navigate("RequestSend"), [nav]);
diff --git a/apps/daimo-mobile/src/view/screen/receive/RequestSendScreen.tsx b/apps/daimo-mobile/src/view/screen/receive/SendRequestScreen.tsx
similarity index 98%
rename from apps/daimo-mobile/src/view/screen/receive/RequestSendScreen.tsx
rename to apps/daimo-mobile/src/view/screen/receive/SendRequestScreen.tsx
index 6e25a9a0b..14313775c 100644
--- a/apps/daimo-mobile/src/view/screen/receive/RequestSendScreen.tsx
+++ b/apps/daimo-mobile/src/view/screen/receive/SendRequestScreen.tsx
@@ -15,7 +15,7 @@ import { AmountInput } from "../../shared/Input";
import { useNav } from "../../shared/nav";
import { color } from "../../shared/style";
-export default function RequestSendScreen() {
+export default function SendRequestScreen() {
const [account] = useAccount();
assert(account != null);
const [dollars, setDollars] = useState(0);
diff --git a/apps/daimo-mobile/src/view/shared/Header.tsx b/apps/daimo-mobile/src/view/shared/Header.tsx
index 420b8dd1e..74125f9b6 100644
--- a/apps/daimo-mobile/src/view/shared/Header.tsx
+++ b/apps/daimo-mobile/src/view/shared/Header.tsx
@@ -10,7 +10,7 @@ import { useAccount } from "../../model/account";
export function Header() {
const nav = useNav();
- const goToAccount = useCallback(() => nav.navigate("Account"), [nav]);
+ const goToAccount = useCallback(() => nav.navigate("Settings"), [nav]);
const [account] = useAccount();
diff --git a/apps/daimo-mobile/src/view/shared/nav.ts b/apps/daimo-mobile/src/view/shared/nav.ts
index 67bb9b7aa..041a3bb21 100644
--- a/apps/daimo-mobile/src/view/shared/nav.ts
+++ b/apps/daimo-mobile/src/view/shared/nav.ts
@@ -1,26 +1,25 @@
-import { DaimoLink, parseDaimoLink, OpEvent } from "@daimo/common";
+import {
+ DaimoLink,
+ DaimoLinkNote,
+ OpEvent,
+ parseDaimoLink,
+} from "@daimo/common";
import { useNavigation } from "@react-navigation/native";
import type { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { useURL } from "expo-linking";
import { useEffect } from "react";
-import { Address } from "viem";
import { Recipient, getRecipient } from "../../sync/recipients";
export type HomeStackParamList = {
Home: undefined;
- Account: undefined;
+ Settings: undefined;
Chain: undefined;
Send: undefined | { recipient: Recipient; dollars?: number };
Withdraw: undefined;
Request: undefined;
Deposit: undefined;
- Note:
- | undefined
- | {
- ephemeralPrivateKey: `0x${string}` | undefined;
- ephemeralOwner: Address | undefined;
- };
+ Note: DaimoLinkNote;
RequestSend: undefined;
History: undefined;
HistoryOp: { op: OpEvent };
@@ -62,10 +61,7 @@ async function goTo(nav: ReturnType, link: DaimoLink) {
break;
}
case "note": {
- nav.navigate("Note", {
- ephemeralPrivateKey: link.ephemeralPrivateKey,
- ephemeralOwner: link.ephemeralOwner,
- });
+ nav.navigate("Note", link);
break;
}
default:
diff --git a/packages/daimo-api/src/router.ts b/packages/daimo-api/src/router.ts
index 5ee37b1da..30f301f31 100644
--- a/packages/daimo-api/src/router.ts
+++ b/packages/daimo-api/src/router.ts
@@ -1,11 +1,11 @@
import {
- DaimoRequestStatus,
DAccount,
+ DaimoRequestStatus,
TransferLogSummary,
+ hasAccountName,
parseDaimoLink,
zAddress,
zHex,
- hasAccountName,
} from "@daimo/common";
import { DaimoAccount } from "@daimo/userop";
import { Address, PublicClient, Transport, getAddress } from "viem";
@@ -132,30 +132,8 @@ export function createRouter(
})
)
.query(async (opts) => {
+ const ret = null as DAccount | null;
// TODO: lookup account by signing key
- // Doing this efficiently likely requires an AddKey event
- // Alternately, an indexer contract thru which all accounts are deployed
- let ret = null as DAccount | null;
-
- // Stub to test client
- if (
- opts.input.pubKeyHex ===
- "0x3059301306072a8648ce3d020106082a8648ce3d03010703420004fea4465280cfcb1e1b77a91525ca90dfdd213705b6eac7bc7a79931af4e0cfe7464564a11e15252f840d73da0d34fddb74ebe806e93840f3c208e68d620d7376"
- ) {
- ret = {
- name: "test",
- addr: "0xa3449c3f57af6d39bc9eb41d6e0b75d3723210cd",
- };
- } else if (
- opts.input.pubKeyHex ===
- `0x3059301306072a8648ce3d020106082a8648ce3d0301070342000436dff9029e718c4c7da071077a53a987569ecc780f92203e26afc7b91e1362582ce0bfc65b7cef65dff64768978e691eca8576da6f9d387fe77c70eeaed26f33`
- ) {
- ret = {
- name: "jules",
- addr: "0xbfbff790707f8a9bddae662985270df58011cd9c",
- };
- }
-
console.log(
`[API] lookup found ${ret?.name || ""} for pubkey ${
opts.input.pubKeyHex
diff --git a/packages/daimo-common/src/daimoLink.ts b/packages/daimo-common/src/daimoLink.ts
index 7c3b5aa3a..befdbf6b6 100644
--- a/packages/daimo-common/src/daimoLink.ts
+++ b/packages/daimo-common/src/daimoLink.ts
@@ -31,15 +31,17 @@ export type DaimoLinkNote = {
export function formatDaimoLink(link: DaimoLink) {
switch (link.type) {
- case "account":
+ case "account": {
return `${daimoLinkBase}/account/${link.addr}`;
- case "request":
+ }
+ case "request": {
return `${daimoLinkBase}/request/${link.recipient}/${link.dollars}`;
- case "note":
- if (link.ephemeralPrivateKey == null) {
- return `${daimoLinkBase}/note/${link.ephemeralOwner}`;
- }
- return `${daimoLinkBase}/note/${link.ephemeralOwner}#${link.ephemeralPrivateKey}`;
+ }
+ case "note": {
+ const base = `${daimoLinkBase}/note/${link.ephemeralOwner}`;
+ const hash = link.ephemeralPrivateKey && `#${link.ephemeralPrivateKey}`;
+ return `${base}${hash || ""}`;
+ }
}
}