--- id: TASK-37 title: Port folk-transaction-builder shape (Safe multisig) status: Done assignee: [] created_date: '2026-02-18 19:51' updated_date: '2026-03-12 04:38' labels: - shape-port - phase-4 - web3 milestone: m-0 dependencies: - TASK-24 references: - canvas-website/src/shapes/TransactionBuilderShapeUtil.tsx - canvas-website/src/components/safe/TransactionComposer.tsx - canvas-website/src/components/safe/PendingTransactions.tsx - canvas-website/src/components/safe/TransactionHistory.tsx priority: low --- ## Description Port TransactionBuilderShapeUtil + Safe components from canvas-website to rspace-online. Source: canvas-website/src/shapes/TransactionBuilderShapeUtil.tsx (157 lines) + canvas-website/src/components/safe/ (585 lines total: SafeHeader, TransactionComposer, PendingTransactions, TransactionHistory) Target: rspace-online/lib/folk-transaction-builder.ts Features to implement: - Transaction composition UI (select recipient, amount, data) - Pending transaction queue display - Transaction history view - Mode switching: compose/pending/history - Safe wallet integration May need safe-apps-sdk or ethers.js dependency (TASK-24). ## Acceptance Criteria - [ ] #1 Transaction composer creates valid transactions - [ ] #2 Pending queue displays waiting transactions - [ ] #3 History view shows past transactions - [ ] #4 Mode switching works (compose/pending/history) - [ ] #5 Toolbar button added to canvas.html ## Implementation Notes Created folk-transaction-builder.ts canvas shape with Compose/Pending/History tabs. Compose: form for recipient, value, calldata, description with Propose button. Pending: fetches from rwallet proxy, shows confirmation count vs threshold, Confirm/Execute buttons. History: paginated executed txs with block explorer links. Supports Ethereum, Optimism, Gnosis, Polygon, Arbitrum, Base chains. Registered in canvas.html (SHAPE_DEFAULTS, toolbar Spend group, context menu). Uses existing rwallet API endpoints.