{"id":34573075,"url":"https://github.com/base/bridge-sdk","last_synced_at":"2026-05-27T06:05:52.900Z","repository":{"id":328411589,"uuid":"1115386904","full_name":"base/bridge-sdk","owner":"base","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-30T13:10:05.000Z","size":472,"stargazers_count":4,"open_issues_count":0,"forks_count":6,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-30T15:10:08.752Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/base.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-12T19:29:21.000Z","updated_at":"2026-03-30T13:10:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"2d7a8362-9639-412f-b671-b93f50ba3894","html_url":"https://github.com/base/bridge-sdk","commit_stats":null,"previous_names":["base/bridge-sdk"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/base/bridge-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/base%2Fbridge-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/base%2Fbridge-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/base%2Fbridge-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/base%2Fbridge-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/base","download_url":"https://codeload.github.com/base/bridge-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/base%2Fbridge-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33553141,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-24T09:45:40.771Z","updated_at":"2026-05-27T06:05:52.861Z","avatar_url":"https://github.com/base.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bridge SDK\n\n\u003e [!WARNING]\n\u003e\n\u003e This codebase is a work in progress and has not been audited. This is not yet recommended for production use.\n\u003e Use at your own risk.\n\nComposable cross-chain bridge SDK for Base Bridge integrations.\n\n## Getting Started\n\n```bash\nbun install\n# type-check \u0026 unit tests\nbun run typecheck\nbun test\n# bundle to dist/\nbun run build\n```\n\n## Features\n\n- **Chain-agnostic API**: One `BridgeClient` entrypoint for any route via `{ sourceChain, destinationChain }`.\n- **Composable primitives**: `transfer`, `call`, `request`, plus `prove`, `execute`, `status`, and `monitor`.\n- **Canonical message identity**: a single `MessageRef` model with stable source identity and optional derived destination ids.\n- **Capability-driven UX**: `capabilities(route)` tells you which steps apply for a route.\n- **Browser/Edge compatible**: Core SDK works in browsers, edge runtimes, and Node.js. Node.js-specific utilities available via `/node` subpath.\n\n## Usage Example\n\n### Bridging SOL from Solana to Base\n\n```ts\nimport { createBridgeClient } from \"bridge-sdk\";\nimport { base, solanaMainnet, makeEvmAdapter, makeSolanaAdapter } from \"bridge-sdk/chains\";\nimport { loadSolanaKeypair } from \"bridge-sdk/node\"; // Node.js only\n\nasync function main() {\n  // Pre-load the Solana keypair before creating the adapter (Node.js only)\n  const payer = await loadSolanaKeypair(\"~/.config/solana/id.json\");\n\n  const client = createBridgeClient({\n    chains: {\n      solana: makeSolanaAdapter({\n        rpcUrl: \"https://api.mainnet-beta.solana.com\",\n        payer,\n        chain: solanaMainnet,\n      }),\n      base: makeEvmAdapter({\n        chain: base,\n        rpcUrl: \"https://mainnet.base.org\",\n        wallet: { type: \"none\" },\n      }),\n    },\n  });\n\n  const op = await client.transfer({\n    route: {\n      sourceChain: solanaMainnet.id,\n      destinationChain: base.id,\n    },\n    asset: { kind: \"native\" }, // SOL\n    amount: 1_000_000n,\n    recipient: \"0x644e3DedB0e4F83Bfcf8F9992964d240224B74dc\",\n    relay: { mode: \"auto\" },\n  });\n\n  for await (const s of client.monitor(op.messageRef)) {\n    if (s.type === \"Executed\") break;\n  }\n}\n\nmain().catch(console.error);\n```\n\n## Network Configuration\n\nThe SDK ships with hardcoded **mainnet** deployment addresses. To target\nadditional networks (e.g. Solana devnet, Base Sepolia) or use custom contract\ndeployments, pass `deployments` overrides to `createBridgeClient()`.\n\n### Default deployment addresses\n\n| Domain   | Chain ID         | Field            | Type         | Description                    |\n| -------- | ---------------- | ---------------- | ------------ | ------------------------------ |\n| `solana` | `solana:mainnet` | `bridgeProgram`  | `SolAddress` | Solana bridge program address  |\n| `solana` | `solana:mainnet` | `relayerProgram` | `SolAddress` | Solana relayer program address |\n| `base`   | `eip155:8453`    | `bridgeContract` | `Hex`        | Base bridge contract address   |\n\n### Devnet / testnet configuration example\n\nThe SDK exports `solanaDevnet` and `baseSepolia` chain objects you can use\nalongside your own deployment addresses:\n\n```ts\nimport { address } from \"@solana/kit\";\nimport { createBridgeClient } from \"bridge-sdk\";\nimport { baseSepolia, solanaDevnet, makeEvmAdapter, makeSolanaAdapter } from \"bridge-sdk/chains\";\nimport { loadSolanaKeypair } from \"bridge-sdk/node\"; // Node.js only\n\nconst payer = await loadSolanaKeypair(\"~/.config/solana/id.json\");\n\nconst client = createBridgeClient({\n  chains: {\n    solana: makeSolanaAdapter({\n      rpcUrl: \"https://api.devnet.solana.com\",\n      payer,\n      chain: solanaDevnet,\n    }),\n    base: makeEvmAdapter({\n      chain: baseSepolia,\n      rpcUrl: \"https://sepolia.base.org\",\n      wallet: { type: \"none\" },\n    }),\n  },\n  bridgeConfig: {\n    deployments: {\n      solana: {\n        // All fields are required when adding a new chain ID\n        [solanaDevnet.id]: {\n          bridgeProgram: address(\"\u003cYOUR_DEVNET_BRIDGE_PROGRAM\u003e\"),\n          relayerProgram: address(\"\u003cYOUR_DEVNET_RELAYER_PROGRAM\u003e\"),\n        },\n      },\n      base: {\n        [baseSepolia.id]: {\n          bridgeContract: \"0x\u003cYOUR_SEPOLIA_BRIDGE_CONTRACT\u003e\",\n        },\n      },\n    },\n  },\n});\n```\n\n### Merge behavior\n\nOverrides are **merged** with the built-in mainnet defaults, not replaced:\n\n- **Existing chain IDs** — individual fields are overridden; unspecified fields\n  keep their defaults.\n- **New chain IDs** (e.g. `solana:devnet`) — all required fields must be\n  provided or the entry is ignored.\n\nThis means you can override a single mainnet address without losing the others,\nor add devnet/testnet entries while keeping the mainnet defaults intact.\n\n## Examples\n\nSee `examples/` for working scripts against the v1 `BridgeClient` API:\n\n- `examples/transfer.ts`: Solana → EVM transfer\n- `examples/call.ts`: Solana → EVM call\n- `examples/evmToSolanaTokenTransfer.ts`: EVM → Solana token transfer (prove + execute)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbase%2Fbridge-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbase%2Fbridge-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbase%2Fbridge-sdk/lists"}