← Semua pembelajaran / Blockchain Nol → RWA
Fase 4 · Keamanan & Key Management

Multi-signature wallet — Gnosis Safe

Sejauh ini kontrak-kontrak latihanmu punya satu owner — satu private key yang, kalau bocor atau hilang, berarti kontrak lumpuh atau dikuasai penyerang. Untuk dana bernilai signifikan, ini risiko yang tidak bisa diterima institusi mana pun.

Sumber asli docs.safe.global Resmi Rangkuman ~7 menit baca

Intisari

  • Safe (dulu Gnosis Safe) adalah smart contract wallet — bukan Externally Owned Account (EOA) biasa — yang membutuhkan N dari M tanda tangan pemilik sebelum transaksi dieksekusi.
  • Kepemilikan kontrak (Ownable/AccessControl dari Fase 1) bisa dipindahkan ke address Safe, bukan ke satu EOA — sekarang aksi admin butuh persetujuan bersama.
  • Tanda tangan dikumpulkan off-chain dulu (lewat Safe Transaction Service API atau antarmuka Safe{Wallet}) sebelum transaksi akhirnya dikirim on-chain — hanya satu transaksi yang benar-benar dieksekusi, bukan N transaksi terpisah.
  • Cocok untuk: treasury organisasi, kunci upgrade kontrak, penambahan/pencabutan role admin — kapan pun keputusan seharusnya butuh konsensus, bukan satu orang.
  • Bukan pengganti KMS — keduanya dipakai bersama: tiap pemilik Safe idealnya menyimpan key-nya sendiri di HSM/KMS terpisah, supaya kompromi satu sistem tidak otomatis mengompromikan semua pemilik.

Masalah satu private key admin

Kontrak GoldToken di Fase 2 punya DEFAULT_ADMIN_ROLE yang bisa memberi dan mencabut role apa pun. Kalau role itu dipegang satu address dengan satu private key, dua skenario buruk sama-sama mungkin: private key itu bocor (penyerang menguasai seluruh sistem role), atau private key itu hilang (tidak ada yang bisa lagi mengelola role sama sekali). Safe menyelesaikan keduanya sekaligus.

Cara kerja: kontrak sebagai "pemilik"

Safe sendiri adalah smart contract yang di-deploy dengan daftar owners (address EOA atau kontrak lain) dan threshold (berapa banyak tanda tangan yang dibutuhkan). Transaksi apa pun yang ingin dieksekusi atas nama Safe harus dikumpulkan tanda tangannya dulu dari cukup banyak owner sebelum benar-benar dikirim.

Safe dengan 5 owner, threshold 3 ("3-of-5"):
  ├── Direktur teknologi
  ├── Direktur keuangan
  ├── Direktur operasional
  ├── Auditor independen
  └── Key cadangan disimpan terpisah (cold storage)

  Transaksi apa pun butuh persetujuan MINIMAL 3 dari 5 — satu key
  bocor atau hilang TIDAK cukup untuk mengendalikan atau mengunci dana.

Memindahkan kepemilikan kontrak ke Safe

// Setelah deploy GoldToken (Fase 2) dan deploy Safe terpisah lewat
// antarmuka Safe{Wallet} atau SDK, pindahkan admin role ke address Safe:
goldToken.grantRole(DEFAULT_ADMIN_ROLE, alamatSafe);
goldToken.revokeRole(DEFAULT_ADMIN_ROLE, alamatDeployerAwal);

Setelah ini, tidak ada satu pun individu yang bisa sendirian mengubah role di GoldToken. Setiap perubahan — menambah KYC officer baru, mencabut akses custodian yang keluar — butuh persetujuan ambang batas yang sudah disepakati. Ini konsekuensi langsung dari pola onlyRole(DEFAULT_ADMIN_ROLE) yang kamu tulis di Fase 1 dan 2: siapa pun yang memegang role admin (sekarang: Safe itu sendiri) yang berkuasa, bukan siapa yang menulis kodenya.

Alur mengumpulkan tanda tangan

  1. Salah satu owner mengajukan transaksi (mis. "grant KYC_OFFICER_ROLE ke address baru") lewat antarmuka Safe{Wallet} atau SDK.
  2. Transaksi ini belum dikirim on-chain — baru tersimpan sebagai draft di Safe Transaction Service, menunggu tanda tangan.
  3. Owner lain login, meninjau detail transaksi (address, data yang dipanggil), lalu menandatangani secara off-chain.
  4. Begitu jumlah tanda tangan mencapai threshold, siapa pun (owner atau relayer) bisa mengirim satu transaksi on-chain yang membawa seluruh tanda tangan terkumpul sekaligus.
EOA biasa (1 private key)Safe (N-of-M)
Satu key bocorKontrol penuh langsung diambil alihTidak cukup — butuh threshold key
Satu key hilangKontrol atas kontrak hilang totalOwner lain masih bisa lanjut beroperasi
Perlu persetujuan berjenjang?Tidak bisaBawaan lewat threshold
Biaya gas per transaksiLebih rendahSedikit lebih tinggi (verifikasi N tanda tangan on-chain)

Latihan: deploy satu Safe testnet 2-of-3 lewat Safe{Wallet} memakai tiga akun testnet-mu sendiri. Pindahkan DEFAULT_ADMIN_ROLE kontrak GoldToken (Fase 2) ke address Safe itu, lalu ajukan transaksi grantRole dari satu akun, tanda tangani dari akun kedua, dan verifikasi transaksinya baru benar-benar tereksekusi setelah ambang batas terpenuhi.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.