멀티시그 지갑
FlutterWallet의 멀티시그(Multi-Signature) 지갑 기능입니다.
개요
멀티시그 지갑은 트랜잭션 실행에 여러 소유자의 승인이 필요한 스마트 컨트랙트 지갑입니다.
- m-of-n 방식: n명의 소유자 중 m명의 승인 필요
- 예시: 2-of-3 (3명 중 2명 승인 시 실행)
사용 방법
1. 멀티시그 지갑 생성
- FlutterWallet 접속 → 멀티시그 지갑 메뉴
- "새 멀티시그" 버튼 클릭
- 소유자 주소 입력 (줄바꿈으로 구분)
- Threshold (필요 승인 수) 설정
- MetaMask로 트랜잭션 서명
소유자 예시:
0x1234...5678 (본인)
0xabcd...ef12 (공동 소유자 1)
0x9876...5432 (공동 소유자 2)
Threshold: 2 (3명 중 2명 승인)2. 트랜잭션 제안
- 멀티시그 지갑 선택
- "트랜잭션 제안" 클릭
- 받는 주소, 금액 입력
- 제출 → 자동으로 본인 승인 포함
3. 트랜잭션 승인/취소
- 승인: 다른 소유자가 대기 중인 TX 승인
- 취소: 본인이 승인한 TX 취소 가능
- 자동 실행: threshold 도달 시 자동 실행
스마트 컨트랙트
배포된 컨트랙트
| 컨트랙트 | 주소 |
|---|---|
| MultiSigFactory | 0xb82F41c2E76aEb99794791349c2A8E6a2C0278e6 |
주요 함수
solidity
// 지갑 생성
function createWallet(address[] _owners, uint256 _threshold) returns (address)
// 트랜잭션 제안 (제안자 자동 승인)
function submitTransaction(address _to, uint256 _value, bytes _data) returns (uint256 txId)
// 트랜잭션 승인
function confirmTransaction(uint256 _txId)
// 승인 취소
function revokeConfirmation(uint256 _txId)
// 트랜잭션 실행 (threshold 도달 시 자동, 수동 호출도 가능)
function executeTransaction(uint256 _txId)View 함수
solidity
// 소유자 목록
function getOwners() returns (address[] memory)
// 대기 중인 TX 목록
function getPendingTransactions() returns (uint256[] memory)
// TX 상세 정보
function getTransaction(uint256 _txId) returns (
address to,
uint256 value,
bytes memory data,
bool executed,
uint256 confirmations,
uint256 createdAt
)
// 특정 TX 승인자 목록
function getConfirmations(uint256 _txId) returns (address[] memory)Owner 관리
멀티시그 트랜잭션을 통해 Owner 추가/제거 가능:
solidity
// Owner 추가
wallet.addOwner(newOwner)
// Owner 제거
wallet.removeOwner(owner)
// Threshold 변경
wallet.changeThreshold(newThreshold)주의
Owner 관리 함수는 멀티시그 지갑 자체에서만 호출 가능합니다. submitTransaction(wallet.address, 0, data) 형태로 제안해야 합니다.
보안 고려사항
Threshold 설정
- 너무 낮으면 보안 약화
- 너무 높으면 실행 어려움
- 권장: 2-of-3, 3-of-5
Owner 분산
- 서로 다른 기기/지갑 사용 권장
- 백업 키 안전하게 보관
대기 TX 확인
- 승인 전 TX 내용 꼼꼼히 확인
- 알 수 없는 data 필드 주의
ABI
전체 ABI는 다음에서 확인 가능:
/home/blockchain/wallet/src/config/multisig.ts