Safe Guard
Safe Guard bir Safe çoklu imza cüzdanını korur: bir işlem ancak onaylayıcılarınız telefonlarında onayladıktan sonra çalışır. Her telefon ham işlemi kendisi okur, ne yaptığını gösterir (tutarlar, tam adresler, riskler) ve yalnızca Face ID'si ya da parmak iziyle açılan bir anahtarla imzalar. Safe'inizdeki Touchque guard bu imzaları zincirde kontrol eder ve yeterince imzası olmayan işlemi reddeder. Touchque onay verebilecek hiçbir anahtarı tutmaz.
Panel → Developers → Safe Guard. Kurulum rehberi şu adımlardan geçer:
- Your Safe. Elinizdeki bir Safe (adresini yapıştırın; Safe{Wallet}'ın sep:0x… biçimi de olur) ya da panelden yeni bir tane.
- Approvers and rules. Onaylayacak kişiler: Touchque uygulaması bir kripto anahtarı oluşturmuş üyeler. Bir işlemin kaç onaya ihtiyacı olduğu; guard'ın kendisindeki değişiklikler için daha yüksek bir sayı ve bekleme süresi.
- Address book (optional). Ödeme yaptığınız adreslere zincirde tutulan adlar. Adres kilidi açıkken ödemeler ve harcama izinleri yalnızca defterdekilere gider; başka her şey guard değişikliği sayılır (daha yüksek sayı ve bekleme süresi).
- Install the guard. Safe'in sahipleri kurulum çağrılarını ve setGuard'ı imzalar: panelden tarayıcı cüzdanıyla, bir öneriyi zincir dışında imzalayarak ya da çağrıları Transaction Builder'a yapıştırarak.
- Test approval (optional). Bir onaylayıcının telefonuna, orada çözülmüş halini görmek için bir deneme işlemi.
Sonrasında sayfanın dört sekmesi vardır: Safes (zincir durumu, onaylayıcılar, zincirde bekleyen değişiklikler), Address book, Approvals (her istek ve yanıtı) ve Policy (Touchque'nin kendi limitleri).
Sunucunuz ham Safe işlemini bir onaylayıcının telefonuna gönderir, onayı bekler, onu kendi işlemine ve guard'daki onaylayıcı anahtarına göre kontrol eder ve execTransaction imzalarına ekler. Telefon yalnızca ham alanları alır ve kendisi çözer; bu yüzden değiştirilmiş bir web sayfası ya da sunucu, telefonun gösterdiğini değiştiremez.
type tanımladığınız bir işlem türüdür (bkz. İşlem türleri).const { Touchque, verifySafeApproval, withSafeApprovals } = require('@touchque/node');
const tq = new Touchque(); // TQ_API_KEY / TQ_API_SECRET ortamdan
// 1. Onaylayıcının telefonuna sorun (her zaman biyometriyle)
const { requestId } = await tq.safeGuard.request({
externalUsername: 'treasurer@acme.com',
type: 'SAFE_PAYMENT', // tanımladığınız bir işlem türü
safeTx: {
chainId: 11155111, safe: SAFE, guard: GUARD,
tx: { to, value: '0', data, operation: 0, nonce: 42 },
config: { threshold: 2, govThreshold: 3, govDelay: 172800, exitDelay: 259200 },
batchTargets: [MULTI_SEND_CALL_ONLY],
approverIndex: 0, // bu kişinin guard'daki sırası
},
});
// 2. Telefonun yanıtını bekleyin (reddedilirse ya da süresi dolarsa hata fırlatır)
const status = await tq.safeGuard.waitForApproval({ requestId });
// 3. Onayı kendi işleminize ve guard'daki onaylayıcı anahtarına göre kendiniz doğrulayın: verifySafeApproval
// 4. Onayları execTransaction imzalarına ekleyin: withSafeApprovals(ownerSignatures, approvals)# İmzalı istekler (HMAC), bkz. Kimlik doğrulama
POST /safe-guard/approvals
{ "externalUsername": "treasurer@acme.com", "type": "SAFE_PAYMENT",
"safeTx": { "chainId": 11155111, "safe": "0x…", "guard": "0x…",
"tx": { "to": "0x…", "value": "0", "data": "0x…", "operation": 0, "nonce": 42 },
"config": { "threshold": 2, "govThreshold": 3, "govDelay": 172800, "exitDelay": 259200 },
"approverIndex": 0 } }
→ { "requestId": "…", … }
GET /safe-guard/approvals/<requestId>
→ { "status": "CONFIRMED", "safeTx": { "approval": "0x…", … }, … } # PENDING | CONFIRMED | REJECTED | EXPIRED