에이전트 연동

1. 에이전트 방식 개요

에이전트 방식은 옥텟이 제공하는 MPC 에이전트(Agent) 프로그램을 고객사 서버에 설치하여 운용하는 통합 방식입니다. MPC 키 생성 및 서명 연산이 고객사 인프라 내 에이전트에서 수행되며, 엔드유저는 User Share를 직접 보관합니다.


시스템 아키텍처

  1. 엔드유저(App): 고객사에 키 생성 요청을 한 이후 받은 키를 저장하고 서명 요청 시에 저장하고 있는 키를 고객사에 전달합니다.
  2. 고객사 서버(Client): 엔드유저와 옥텟 사이에서 중계 역할을 하며, MPC 에이전트를 관리합니다.
  3. MPC 에이전트: 고객사 서버 내에 설치되며, 엔드유저의 키 조각 생성 및 서명 연산을 수행합니다.
  4. 옥텟: 키 생성 및 서명 요청에 대해 옥텟 측 MPC 연산을 수행하며, 에러 핸들링 및 성공 시 후처리 합니다.

MPC 에이전트 제공

현재 옥텟의 MPC 솔루션 중 에이전트 방식은 고객사 서버에 설치하는 에이전트 형태로 제공됩니다. 해당 가이드를 진행하기 위해 필요한 에이전트 프로그램 및 설치 안내는 아래 연락처로 문의하시기 바랍니다.



2. MPC 키 생성 가이드

MPC 키는 고객사(Company) 단위로 생성되며, 생성된 키는 지갑의 자식 주소를 생성할 때 연결하여 사용할 수 있습니다.

그림 1 : 키 생성 아키텍처

키 생성 흐름

  1. MPC 키 생성 신청: 고객사는 옥텟 API를 호출하여 키 생성 작업을 요청하고 인증 토큰을 받습니다.
  2. MPC 에이전트 키 생성 요청: 발급받은 토큰과 UUID를 통해 고객사 인프라 내의 MPC 에이전트가 실제 키 생성 연산을 시작합니다.
  3. User Share 추출 및 전달: 연산 완료 후, MPC 에이전트에서 생성된 User Share를 조회하여 엔드유저에게 안전하게 전달합니다.
  4. 에이전트 내 Share 삭제: 보안을 위해 에이전트에 일시 저장된 User Share를 삭제합니다.

상세 단계

1단계: 옥텟에 키 생성 신청

MPC 키 생성 신청 API를 호출합니다.

  • 응답값: uuid (작업 고유 ID), token (MPC 에이전트 인증용 JWT)

2단계: MPC 에이전트 작업 요청

1단계에서 받은 정보를 사용하여 고객사 내 MPC 에이전트에 요청을 보냅니다.

  • 작업: MPC 에이전트와 옥텟 간의 통신을 통해 Key Share들이 분산 생성됩니다.

3단계: User Share 전달 및 관리

  • 키 조회: MPC 에이전트의 조회 API를 통해 생성된 User Share을 가져옵니다.
  • 키 전달: 가져온 User Share을 엔드유저에게 전달합니다.
  • 에이전트 내 삭제: 전달이 완료되면 에이전트의 삭제 API를 호출하여 고객사 서버에 남은 User Share을 지웁니다.

4단계: 상태 확인

키 생성 연산의 진행 상황이나 최종 결과는 옥텟 API로 확인할 수 있습니다.

자식 주소 생성 시 MPC 키 연결

MPC 키 생성이 완료되면, 지갑 내에서 해당 키를 사용하는 주소를 만들 수 있습니다.

  • 방법: 자식 주소 생성 API 호출 시 mpcKeyUuid 필드에 위에서 생성한 키의 uuid를 입력합니다.
  • 이 주소로 발생하는 모든 출금은 해당 MPC 키의 서명이 필요하게 됩니다.


3. MPC 키 서명 가이드 (출금)

MPC 지갑에서의 출금은 엔드유저가 보유한 키 조각과 옥텟이 보유한 키 조각이 결합하여 서명을 생성하는 과정을 거칩니다.

그림 1 : 키 서명 아키텍처

서명 및 출금 흐름

  1. 트랜잭션 생성: 고객사가 서명되지 않은 트랜잭션 데이터를 직접 생성합니다.
  2. 옥텟 출금 신청: 옥텟 API에 출금을 신청하고 서명 작업 정보를 받습니다.
  3. MPC 에이전트 서명: 엔드유저의 User Share와 옥텟의 작업 정보를 사용하여 MPC 에이전트에서 서명을 생성합니다.
  4. 트랜잭션 전파: 서명이 완료되면 옥텟이 자동으로 최종 트랜잭션을 구성하여 블록체인에 전파합니다.

상세 단계

1단계: 출금 신청 준비

MPC 주소로부터 출금할 때는 아래 두 가지 설정을 반드시 포함해야 합니다.

  • autoSigning: false (옥텟이 단독으로 서명할 수 없으므로 필수)
  • serializedUnsignedTransaction: 고객사가 직접 생성한 서명 전 트랜잭션 데이터 (Hex String)

2단계: 옥텟에 출금 신청

출금 신청 API를 호출합니다.

  • 응답값: 성공 시 응답 객체 내에 mpc 필드가 포함됩니다.
{
  "uuid": "...",
  "mpc": {
    "unsignedTransactionHash": "2c745b3cd5af47515df7bded000d1906147e27c275a3029cc6d4a585aa1c47b0",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }
}

3단계: MPC 에이전트 서명 요청

엔드유저로부터 받은 User Share와 2단계에서 받은 mpc 정보를 사용하여 에이전트에 서명을 요청합니다.

  • 필수 입력: User Share, unsignedTransactionHash, token
  • 동작: 에이전트가 옥텟과 연동하여 2-of-3 서명을 생성합니다.

4단계: 출금 완료

  • MPC 에이전트에서 서명 연산이 성공적으로 완료되면, 옥텟 시스템은 이를 감지하여 미리 전달받았던 serializedUnsignedTransaction과 생성된 서명값을 결합합니다.
  • 최종적으로 서명된 트랜잭션(serializedSignedTransaction)이 만들어지며, 옥텟이 이를 블록체인 네트워크에 전파합니다.