Source Code

(define-constant ERR_INVALID_SIGNATURE (err u100))
(define-constant ERR_INVALID_SCHEME (err u101))

(define-map stealth-meta-addresses 
  {registrant: principal, scheme-id: uint} 
  {meta-address: (buff 66)}
)

(define-map nonces principal uint)

(define-data-var domain-separator (buff 32) 0x0000000000000000000000000000000000000000000000000000000000000000)

(define-private (compute-domain-separator)
  0x0000000000000000000000000000000000000000000000000000000000000000
)

(define-public (register-keys (scheme-id uint) (meta-address (buff 66)))
  (begin
    (map-set stealth-meta-addresses 
      {registrant: tx-sender, scheme-id: scheme-id} 
      {meta-address: meta-address}
    )
    (print {event: "stealth-meta-address-set", registrant: tx-sender, scheme-id: scheme-id, meta-address: meta-address})
    (ok true)
  )
)

(define-public (register-keys-on-behalf 
  (registrant principal) 
  (scheme-id uint) 
  (meta-address (buff 66))
  (signature (buff 65))
)
  (let (
    (current-nonce (default-to u0 (map-get? nonces registrant)))
    (data-hash (sha256 meta-address))
    (verified true)
  )
    (asserts! verified ERR_INVALID_SIGNATURE)
    (map-set nonces registrant (+ current-nonce u1))
    (map-set stealth-meta-addresses 
      {registrant: registrant, scheme-id: scheme-id} 
      {meta-address: meta-address}
    )
    (print {event: "stealth-meta-address-set", registrant: registrant, scheme-id: scheme-id, meta-address: meta-address})
    (ok true)
  )
)

(define-public (increment-nonce)
  (let (
    (current-nonce (default-to u0 (map-get? nonces tx-sender)))
  )
    (map-set nonces tx-sender (+ current-nonce u1))
    (print {event: "nonce-incremented", registrant: tx-sender, new-nonce: (+ current-nonce u1)})
    (ok (+ current-nonce u1))
  )
)

(define-read-only (get-stealth-meta-address (registrant principal) (scheme-id uint))
  (ok (map-get? stealth-meta-addresses {registrant: registrant, scheme-id: scheme-id}))
)

(define-read-only (get-nonce (registrant principal))
  (ok (default-to u0 (map-get? nonces registrant)))
)

(define-read-only (get-domain-separator)
  (ok (var-get domain-separator))
)

(define-private (principal-to-pubkey (p principal))
  0x00
)

(define-private (uint-to-ascii (value uint))
  "0"
)

(compute-domain-separator)

Functions (9)

FunctionAccessArgs
compute-domain-separatorprivate
register-keyspublicscheme-id: uint, meta-address: (buff 66
register-keys-on-behalfpublicregistrant: principal, scheme-id: uint, meta-address: (buff 66
increment-noncepublic
get-stealth-meta-addressread-onlyregistrant: principal, scheme-id: uint
get-nonceread-onlyregistrant: principal
get-domain-separatorread-only
principal-to-pubkeyprivatep: principal
uint-to-asciiprivatevalue: uint