Skip to content

Conversation

@pio-noncelab
Copy link
Collaborator

@pio-noncelab pio-noncelab commented Nov 23, 2025

변경사항

*CDS 변경이 필요해 임시로 Main 브랜치로 설정해 두었으니, Pull 이후 pub get을 진행해주셔야 합니다.

리뷰 전 필독

1. send_screen_draft.dart

ㄴ send_screen_draft.dart: 👉 send_screen이 너무 길어 임시저장 관련 함수는 여기로 분리해서 part / part of 키워드로 send_screen.dart와 연결시켰습니다.


2. RealmDB에 새로운 테이블을 추가: TransactionDraft

class _RealmTransactionDraft {
  @PrimaryKey()
  late int id;
  late int walletId;
  // 각 문자열은 {"address": "...", "amount": "..."} 형태
  late List<String> recipientJsons;
  late DateTime createdAt;
  late double feeRate;
  late bool isMaxMode;
  late bool? isFeeSubtractedFromSendAmount;
  late String? bitcoinUnit;
  late List<String> selectedUtxoIds;
  late String? txWaitingForSign;
}

DB Layer보다 상위 Layer에서 사용할 DTO 클래스는 lib/model/wallet/transaction_draft.dart에 정의했습니다.
◦ 서명 전/서명완료 임시 저장 "공통" 항목: id, walletId, recipientJsons, createdAt, feeRate, isMaxMode (임시저장 목록 UI에 보여줘야 해서 서명 완료인 경우에도 저장할 수 밖에 없었습니다.)
◦ 서명 전 임시 저장에만 사용하는 항목: isFeeSubtractedFromSendAmount, bitcoinUnit, selectedUtxoIds (서명 완료 임시 저장의 utxo 검증은 selectedUtxoIds 저장해놓지 않고, 트랜잭션 input에서 utxoId 추출해서 사용했습니다.)
◦ 서명 완료 임시 저장에만 사용하는 항목: txWaitingForSign, signedPsbtBase64Encoded(DTO 클래스에만 있음)


3. 👉signedPsbtBase64Encoded 프로퍼티가 DTO 클래스에만 있는 이유

서명 완료 데이터는 SecureStorage에 별도로 저장하기로 했기 때문입니다.
transaction_draft_repository.dart 를 참조해주세요.


4. TS/TC ③ 예외 사항 테스트 시 토스트 글자가 하얀색으로 보이는 현상

CDS 업데이트 후 고쳐질 예정입니다.


5. Dropdown 동작

보내기 화면에서 오른쪽 상단 케밥 아이콘 터치 시 나오는 Dropdown 메뉴가 비활성화 상태일 때는 눌러도 Dropdown이 안사라지게 하고 싶었는데, CDS 변경이 필요한 사항인지 의도한대로 되지 않아서 그냥 냅뒀습니다.

  • 관련 TS/TC는 노션에 정리되어있습니다.

#414

…Draft 구조 수정

임시 저장 트랜잭션 화면구현
임시 저장 트랜잭션 카드구현
- 삭제 기능은 미완성

RealmTransactionDraft 데이터 구조 변경
- 추가 : createdAt, currentUnit, selectedUtxoListJson
-삭제 : draftStatus
왼쪽으로 드래그 시 삭제 가능한 기능 구현
화면에 처음 들어왔을 때 '서명 완료' 내역이 없고 '서명 전' 내역은 있을 때 segmentedControl이 자동으로 '서명 전'을 보여줌
- 보내기 화면에서 임시저장 트랜잭션 불러오기 기능 구현
- 임시 저장 트랜잭션  화면에서 카드 선택시 보내기 화면으로 이동 및 데이터 입력 구현
- 임시 저장 트랜잭션 삭제 시 삭제완료 팝업 추가
   - 임시 저장 트랜잭션 화면에서 카드 드래그를 통한 삭제
   - 이미 사용된 UTXO가 포함되어 있을 때 삭제
   - 잠금 설정 된 UTXO가 포함되어 있을 때 삭제
- 임시 저장 트랜잭션 중복 체크 제거
- RealmTransactionDraft 필드 추가: totalAmount(서명된 트랜잭션 수량을 임시저장하기 위함)
- 기존 '서명 전' 임시저장 트랜잭션 내용 변경 여부 체크 로직 수정
- '서명 완료' 임시저장 트랜잭션 자동 삭제 기능 추가
@pio-noncelab pio-noncelab self-assigned this Nov 23, 2025
@pio-noncelab pio-noncelab added 💫 feat 기능 구현 이슈 🎨 UI UI 그리기 labels Nov 23, 2025
@doey-noncelab doey-noncelab linked an issue Jan 15, 2026 that may be closed by this pull request
10 tasks
@ella-noncelab
Copy link
Collaborator

스크린샷 2026-01-27 오후 2 35 19 보내기 화면에서 Draft List bottomSheet > 리스트 요소의 꼭지점 부분이 울퉁불퉁함

@ella-noncelab
Copy link
Collaborator

ella-noncelab commented Jan 27, 2026

원래 보내기 화면에서 화면에 새로운 input이 입력될 때마다 buildTransaction()을 호출하게 되어 있었음.

트랜잭션 임시 저장 내역을 로드할 때 기존의 함수들을 재활용하면서 불필요하게 buildTransaction()이 여러번 호출되게 되고 ,
호출되지 않아도 될 시점에 호출되면서 아래와 같이 double 형을 int.parse 하는 로직이 실행되며 앱이 멈춰버리는 버그가 발생함

이 에러는 sats unit으로 설정되어 있던 draft를 불러왔다가 btc unit으로 설정된 draft를 불러오는 과정에서 발생함
스크린샷 2026-01-27 오후 2 46 16

스크린샷 2026-01-27 오후 2 48 27

@ella-noncelab
Copy link
Collaborator

스크린샷 2026-01-27 오후 5 13 34 보통 DB Entity와 매핑할 도메인 모델(DTO class)를 만들고 converter를 이용해서 변환하여 화면 layer에서 사용하는데, 현재는 DB Entity(RealmTransactionDraft)을 그대로 사용하고 있음

@roy-noncelab
Copy link
Collaborator

roy-noncelab commented Jan 27, 2026

  • 서명되지 않은 임시 저장된 트랜잭션을 불러온 후 서명 완료 하면 최종 확인 화면에서 임시 저장이 불가능합니다.
  • TS/TC와 다르게 임시 저장 트랜잭션 화면에서 서명 전 PSBT를 불러올 경우에도 드롭다운 표시되는 현상이 있는데 생각해보니 수정 후 다시 저장할 수도 있어서 그냥 놔두는 것도 괜찮을 것 같습니다.
  • TS/TC 3-3)에 적힌 팝업이 나타나지 않고 보내기를 눌렀을 때 브로드캐스팅 실패 팝업만 발생

@ella-noncelab
Copy link
Collaborator

보내기 화면
Draft 불러오기 > 수정 > 저장 시 새로운 Draft로 저장됨
Update 기능 추가 필요.

pio-noncelab and others added 20 commits January 29, 2026 18:58
@ella-noncelab ella-noncelab self-assigned this Feb 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💫 feat 기능 구현 이슈 🎨 UI UI 그리기

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 트랜잭션 임시 저장

3 participants