Sagat
Sagat는 Sui multisig wallet을 위한 full-stack multisig 관리 플랫폼이다. 이는 backend에 Bun과 TypeScript API를, frontend에 React를 사용해 구축된다.
transaction을 서명하고, signature를 분석하며, multisig를 생성하고 관리하고, multisig invitation을 수락하거나 거부하며, proposal을 생성하고 이에 투표하고 실행하려면 Sagat web interface를 사용한다. 또는 이러한 작업을 programmatically 수행하려 면 Sagat SDK를 사용한다.
multisig란?
다중 서명 인증는 transaction이 실행되기 전에 서로 다른 party의 여러 signature를 요구하는 authentication 유형이다. 여러 address를 multisig group에 초대할 수 있다. Sagat에서는 초대된 모든 party가 수락해야 multisig가 생성된다.
각 multisig는 서로 다른 voting threshold를 가질 수 있다. 예를 들어 3명의 user가 포함된 multisig에서는, proposed transaction이 승인되기 위해 2명의 user만 서명하면 될 수 있다. 다른 시나리오에서는 모든 user가 transaction에 서명해야 할 수 있으며, 한 명이라도 이를 거부하면 proposed transaction은 취소된다. 각 threshold는 user별로 서로 다른 weight를 구성할 수 있어, 2개의 address만으로 6명 중 5명과 같은 무한한 조합을 가능하게 한다.
TypeScript SDK for multisig 사용 방법을 알아본다.
리스크
Sagat는 multisig 관리를 용이하게 하기 위해 proposal 데이터를 저장하는 목적으로 API layer와 frontend layer에 Mysten Labs 인프라를 사용한다.
애플리케이션의 frontend 역시 Mysten Labs 서비스로 호스팅되며, 사용자 는 이 서비스가 안전하다고 신뢰해야 한다. web interface만 보지 말고 wallet과 같은 2차 위치에서 transaction preview를 항상 검증한다.
Sagat self-hosting으로 risk 완화
제어권을 갖고 trustless 방식으로 Sagat를 사용하려면 self-hosting할 수 있다. 이를 위해 먼저 GitHub repository를 다운로드한다:
$ git clone https://github.com/MystenLabs/sagat/tree/main
그 다음, 다음 command로 SDK를 build하고 frontend와 API를 실행한다:
$ bun run dev
SDK는 custom URL을 받을 수 있으므로, build는 optional이다.
이는 dev mode에서 bun server를 실행하므로, 개발 중에는 변경 사항이 즉시 반영된다.
Sagat 웹 인터페이스 사용
Sagat web interface를 사용하여 다음을 수행한다:
-
브라우저 내에서 multisig를 생성한다. 브라우저는 각 multisig를 검증하고 real-time preview를 표시한다.
-
multisig composition에 참여하기 위한 invitation을 수락하거나 거부한다.
-
새 transaction을 제안한다.
-
transaction을 preview하고 서명한다.
-
link를 통해 transaction을 공유한다.
-
기존 multisig group 밖에서 external proposer를 추가한다.
-
voting threshold에 도달하면 transaction을 실행한다.
각 작업은 programmatically도 실행할 수 있다.
지갑 연결
먼저 Slush 또는 Suilet과 같은 wallet을 Sagat web interface에 연결한다:

ed25519, secp256r1 및 secp256k1을 지원하는 어떤 address든 지원된다. ZkLogin은 지원되지 않는다.
wallet을 Sagat web interface에 연결하면 서비스에 wallet key가 등록된다. multisig에는 Sagat에 등록된 key만 포함할 수 있다. key는 programmatically도 등록할 수 있다.
"No wallets found. Install a wallet (ex. Slush Wallet) to continue." 메시지는 계속하려면 install the Slush extension을 해야 함을 나타낸다.
wallet을 unlock하고 초기 transaction을 승인한다. Sagat web interface는 wallet을 authenticate하기 위한 두 번째 transaction을 생성하도록 요청하며, 이는 confidentiality에 도움이 된다.

wallet에서 안내하는 단계에 따라 transaction을 서명하고 승인한 다음, account ownership를 검증한다.
Testnet vs Mainnet
account drop-down menu에는 Test Mode toggle option이 있다. Test mode는 켜면 Testnet 연결로 전환하고 끄면 Mainnet 연결로 전환한다.
Testnet은 signing 및 submitting transaction에 fiat equivalent value가 없는 Testnet SUI token을 사용하므로 testing과 debugging에 권장된다. Mainnet에 transaction을 signing 및 submitting하면 fiat equivalent value가 있는 real SUI token이 비용으로 든다.
multisig 생성 및 관리
multisig는 execution 전에 user group이 transaction에 대해 vote하고 승인해야 하는 user group이다. multisig transaction을 생성하고 실행하려면 먼저 multisig를 생성해야 한다.
Click Create Your First Multisig

multisig를 생성하기 위해서는 최소 2개의 address를 추가하고, multisig가 생성되기 전에 approval threshold를 설정해야 한다.

다른 member를 추가하려면 Add Another Member를 클릭한 다음 public key를 추가하고 approval weight를 구성한다.
user의 public key를 모르면, 돋보기 아이콘을 클릭할 수 있다:

그 다음 Sui address를 입력한다. 그러면 해당 address의 public key가 반환된다.

address는 multisig에 초대되기 전에 Sagat에 등록되어야 한다.
multisig를 생성하기 전에 multisig preview가 표시된다.

multisig invitation
multisig가 생성되면, 추가된 address는 multisig에 참여하기 위한 invitation을 받는다. pending invitation은 Invitations tab에서 확인할 수 있다.
