network.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * mavi network preference (this browser).
  3. * Used for balance, send, and test fund.
  4. */
  5. export type MaviNetworkId = "private-anvil" | "public-anvil";
  6. export type MaviNetwork = {
  7. id: MaviNetworkId;
  8. label: string;
  9. /** Short label for badges */
  10. shortLabel: string;
  11. rpcUrl: string;
  12. chainId: number;
  13. /** Dev fund from anvil #0 only makes sense on local anvils */
  14. canFund: boolean;
  15. hint: string;
  16. };
  17. export const MAVI_NETWORKS: Record<MaviNetworkId, MaviNetwork> = {
  18. "private-anvil": {
  19. id: "private-anvil",
  20. label: "Private local (anvil)",
  21. shortLabel: "Private :8545",
  22. rpcUrl: "http://127.0.0.1:8545",
  23. chainId: 31337,
  24. canFund: true,
  25. hint: "Permissioned stand-in — docker compose private-anvil",
  26. },
  27. "public-anvil": {
  28. id: "public-anvil",
  29. label: "Public local (anvil)",
  30. shortLabel: "Public :8546",
  31. rpcUrl: "http://127.0.0.1:8546",
  32. chainId: 31338,
  33. canFund: true,
  34. hint: "Anchor stand-in — docker compose public-anvil",
  35. },
  36. };
  37. const KEY = "mavi_network_v1";
  38. export function listMaviNetworks(): MaviNetwork[] {
  39. return Object.values(MAVI_NETWORKS);
  40. }
  41. export function readNetworkId(): MaviNetworkId {
  42. if (typeof window === "undefined") return "private-anvil";
  43. try {
  44. const v = window.localStorage.getItem(KEY);
  45. if (v === "private-anvil" || v === "public-anvil") return v;
  46. } catch {
  47. /* ignore */
  48. }
  49. return "private-anvil";
  50. }
  51. export function getActiveNetwork(): MaviNetwork {
  52. return MAVI_NETWORKS[readNetworkId()];
  53. }
  54. export function setNetworkId(id: MaviNetworkId): void {
  55. if (typeof window === "undefined") return;
  56. try {
  57. window.localStorage.setItem(KEY, id);
  58. window.dispatchEvent(new Event("mavi-network"));
  59. } catch {
  60. /* ignore */
  61. }
  62. }