Source Code

;; title: smart-wallet-endpoint
;; version:
;; summary:
;; description:
(define-constant err-invalid-payload (err u5000))
(use-trait sip-010-token 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait)
(use-trait wallet-trait .smart-wallet-trait.smart-wallet-trait)
(use-trait extension-trait .extension-trait.extension-trait)

(define-public (stx-transfer-sponsored
    (sm <wallet-trait>)
    (details {
      amount: uint,
      to: principal,
      fees: uint,
    })
    (sig-auth (optional {
      auth-id: uint,
      signature: (buff 64),
      pubkey: (buff 33),
    }))
  )
  (contract-call? sm extension-call .ext-sponsored-transfer
    (unwrap! (to-consensus-buff? details) err-invalid-payload) sig-auth
  )
)

(define-public (stx-send-many-sponsored
    (sm <wallet-trait>)
    (details {
      recipients: (list 11 {
        ustx: uint,
        to: principal,
      }),
      fees: uint,
    })
    (sig-auth (optional {
      auth-id: uint,
      signature: (buff 64),
      pubkey: (buff 33),
    }))
  )
  (contract-call? sm extension-call .ext-sponsored-send-many
    (unwrap! (to-consensus-buff? details) err-invalid-payload) sig-auth
  )
)

(define-public (sbtc-transfer-sponsored
    (sm <wallet-trait>)
    (details {
      amount: uint,
      to: principal,
      fees: uint,
    })
    (sig-auth (optional {
      auth-id: uint,
      signature: (buff 64),
      pubkey: (buff 33),
    }))
  )
  (contract-call? sm extension-call .ext-sponsored-sbtc-transfer
    (unwrap! (to-consensus-buff? details) err-invalid-payload) sig-auth
  )
)

(define-public (sbtc-transfer-many-sponsored
    (sm <wallet-trait>)
    (details {
      recipients: (list
        11
        {
          ;; Amount in sats.
          a: uint,
          ;; Recipient address.
          r: principal,
        }
      ),
      fees: uint,
    })
    (sig-auth (optional {
      auth-id: uint,
      signature: (buff 64),
      pubkey: (buff 33),
    }))
  )
  (contract-call? sm extension-call .ext-sponsored-sbtc-transfer-many
    (unwrap! (to-consensus-buff? details) err-invalid-payload) sig-auth
  )
)

(define-public (delegate-stx
    (sm <wallet-trait>)
    (extension <extension-trait>)
    (amount uint)
    (to principal)
    (sig-auth (optional {
      auth-id: uint,
      signature: (buff 64),
      pubkey: (buff 33),
    }))
  )
  (contract-call? sm extension-call extension
    (unwrap!
      (to-consensus-buff? {
        action: "delegate",
        amount-ustx: amount,
        delegate-to: to,
        until-burn-ht: none,
        pox-addr: none,
      })
      err-invalid-payload
    )
    sig-auth
  )
)

(define-public (revoke-delegate-stx
    (sm <wallet-trait>)
    (extension <extension-trait>)
    (sig-auth (optional {
      auth-id: uint,
      signature: (buff 64),
      pubkey: (buff 33),
    }))
  )
  (contract-call? sm extension-call extension
    (unwrap!
      (to-consensus-buff? {
        action: "revoke",
        amount-ustx: u0,
        delegate-to: tx-sender,
        until-burn-ht: none,
        pox-addr: none,
      })
      err-invalid-payload
    )
    sig-auth
  )
)