Skip to content

멀티시그 지갑

FlutterWallet의 멀티시그(Multi-Signature) 지갑 기능입니다.

개요

멀티시그 지갑은 트랜잭션 실행에 여러 소유자의 승인이 필요한 스마트 컨트랙트 지갑입니다.

  • m-of-n 방식: n명의 소유자 중 m명의 승인 필요
  • 예시: 2-of-3 (3명 중 2명 승인 시 실행)

사용 방법

1. 멀티시그 지갑 생성

  1. FlutterWallet 접속 → 멀티시그 지갑 메뉴
  2. "새 멀티시그" 버튼 클릭
  3. 소유자 주소 입력 (줄바꿈으로 구분)
  4. Threshold (필요 승인 수) 설정
  5. MetaMask로 트랜잭션 서명
소유자 예시:
0x1234...5678 (본인)
0xabcd...ef12 (공동 소유자 1)
0x9876...5432 (공동 소유자 2)

Threshold: 2 (3명 중 2명 승인)

2. 트랜잭션 제안

  1. 멀티시그 지갑 선택
  2. "트랜잭션 제안" 클릭
  3. 받는 주소, 금액 입력
  4. 제출 → 자동으로 본인 승인 포함

3. 트랜잭션 승인/취소

  • 승인: 다른 소유자가 대기 중인 TX 승인
  • 취소: 본인이 승인한 TX 취소 가능
  • 자동 실행: threshold 도달 시 자동 실행

스마트 컨트랙트

배포된 컨트랙트

컨트랙트주소
MultiSigFactory0xb82F41c2E76aEb99794791349c2A8E6a2C0278e6

주요 함수

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) 형태로 제안해야 합니다.

보안 고려사항

  1. Threshold 설정

    • 너무 낮으면 보안 약화
    • 너무 높으면 실행 어려움
    • 권장: 2-of-3, 3-of-5
  2. Owner 분산

    • 서로 다른 기기/지갑 사용 권장
    • 백업 키 안전하게 보관
  3. 대기 TX 확인

    • 승인 전 TX 내용 꼼꼼히 확인
    • 알 수 없는 data 필드 주의

ABI

전체 ABI는 다음에서 확인 가능:

  • /home/blockchain/wallet/src/config/multisig.ts

FlutterDev Private Blockchain Platform