Source Code


;; title: intent-filler-state
;; version:
;; summary:
;; description:
(use-trait ft-trait .sip-010-trait.sip-010-trait)
(use-trait connection-contract .connection-trait.connection-trait)

;; constants
(define-constant err-not-intent-filler (err u3000))
(define-constant  err-not-admin (err u3001))
(define-constant err-not-standard-principal (err u3002))
(define-constant err-not-proposed-admin (err u3003))
;;

;; data vars
(define-data-var admin principal tx-sender)
(define-data-var proposed-admin (optional principal) none)

(define-data-var intent-filler-impl principal tx-sender)
(define-data-var connection-impl principal tx-sender)

(define-data-var hub-chain-id uint u0)
(define-data-var hub-intent (optional (buff 256)) none)

(define-data-var next bool true)

(define-map fills (buff 32) bool)
(define-map fillers (buff 32) principal)
;;

;; public functions
(define-public (set-intent-filler-impl (who principal))
    (begin
        (try! (is-dapp))
        (try! (is-standard-principal who))
        (ok (var-set intent-filler-impl who))
    )
)

(define-public (propose-admin (new-admin principal))
    (begin
        (asserts! (is-eq contract-caller (var-get admin)) err-not-admin)
        (asserts! (is-standard new-admin) err-not-standard-principal)
        (ok (var-set proposed-admin (some new-admin)))
))

(define-public (accept-admin)
    (let
        ((new-admin (unwrap! (var-get proposed-admin) err-not-proposed-admin)))
        (asserts! (is-eq contract-caller new-admin) err-not-proposed-admin)
        (var-set admin new-admin)
        (ok (var-set proposed-admin none))
    )
)

(define-public (set-connection-impl (connection principal))
  (begin
    (try! (is-dapp))
    (try! (is-standard-principal connection))
    (ok (var-set connection-impl connection))))


(define-public (set-hub-chain-id (id uint))
  (begin
    (try! (is-dapp))
    (ok (var-set hub-chain-id id))))

(define-public (set-hub-intent (intents (buff 256)))
  (begin
    (try! (is-dapp))
    (ok (var-set hub-intent (some intents)))))

(define-public (set-next (n bool))
  (begin
    (asserts! (is-eq contract-caller (var-get admin)) err-not-admin)
    (ok (var-set next n))))

(define-public (deposit (token (optional <ft-trait>)) (amount uint))
  (begin
    (try! (is-dapp))
      (match token ft-token 
        (try! (contract-call? ft-token transfer amount tx-sender current-contract none))
        (try! (stx-transfer? amount tx-sender current-contract))
      )
      (ok true)
  ))

(define-public (withdraw (token (optional <ft-trait>)) (amount uint) (receiver principal))
  (begin
      (try! (is-dapp))
      (match token 
        ;; if token trait is passed
        ft-token
          (try! (as-contract? ((with-ft (contract-of ft-token) "*" amount))
            (try! (contract-call? ft-token transfer amount current-contract receiver none))
          ))
        ;; if no token trait
        (try! (as-contract? ((with-stx amount))
          (try! (stx-transfer? amount current-contract receiver))
        ))
      )
      (ok true)
))

;; (restrict-assets? tx-sender
;;   ((with-ft (contract-of token-trait) "stackaroo" u50))
;;   (try! (contract-call? token-trait transfer u100 tx-sender 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM none))
;; )

(define-public (set-fill (filler (buff 32)) (filled bool))
  (begin
    (try! (is-dapp))
    (ok (map-set fills filler filled))
  ))

(define-public (set-filler (filler (buff 32)) (who principal))
  (begin
    (try! (is-dapp))
    (ok (map-set fillers filler who))
  ))

(define-public (delete-fill (filler (buff 32)))
  (begin
    (try! (is-dapp))
    (ok (map-delete fills filler))
  ))

(define-public (delete-filler (filler (buff 32)))
  (begin
    (try! (is-dapp))
    (ok (map-delete fillers filler))
  ))

;; connection functions
(define-public (send-message (dst-chain-id uint) (dst-address (buff 256)) (message (buff 4096)) (connection <connection-contract>))
  (begin
    (try! (is-dapp))
    (ok (try! (contract-call? connection send-message dst-chain-id dst-address message)))
  ))

(define-public (verify-message (src-chain-id uint) (src-address (buff 256)) (connection-sn uint) (payload (buff 4096)) (signatures (list 50 (buff 65))) (connection <connection-contract>))
  (begin
    (try! (is-dapp))
    (ok (try! (contract-call? connection verify-message src-chain-id src-address connection-sn payload signatures)))
))
;;

;; read only functions
  (define-read-only (is-dapp)
    (ok (asserts! (is-eq contract-caller (var-get intent-filler-impl)) err-not-intent-filler))
  )
  
  (define-read-only (is-standard-principal (who principal))
    (ok (asserts! (is-standard who) err-not-standard-principal))
  )

  (define-read-only (get-admin) (var-get admin))    
  (define-read-only (get-connection-impl) (var-get connection-impl))
  (define-read-only (get-hub-chain-id) (var-get hub-chain-id))
  (define-read-only (get-hub-intent) (var-get hub-intent))
  (define-read-only (get-intent-filler-impl) (var-get intent-filler-impl))
  (define-read-only (is-hash-filled (hash (buff 32))) (match (map-get? fills hash) filled filled false))
  (define-read-only (get-filler (hash (buff 32))) (map-get? fillers hash))
  (define-read-only (get-impl-params) 
    {
      impl: (var-get intent-filler-impl),
      next: (var-get next)
    }
  )




Functions (25)

FunctionAccessArgs
set-intent-filler-implpublicwho: principal
propose-adminpublicnew-admin: principal
accept-adminpublic
set-connection-implpublicconnection: principal
set-hub-chain-idpublicid: uint
set-hub-intentpublicintents: (buff 256
set-nextpublicn: bool
depositpublictoken: (optional <ft-trait>
withdrawpublictoken: (optional <ft-trait>
set-fillpublicfiller: (buff 32
set-fillerpublicfiller: (buff 32
delete-fillpublicfiller: (buff 32
delete-fillerpublicfiller: (buff 32
send-messagepublicdst-chain-id: uint, dst-address: (buff 256
verify-messagepublicsrc-chain-id: uint, src-address: (buff 256
is-dappread-only
is-standard-principalread-onlywho: principal
get-adminread-only
get-connection-implread-only
get-hub-chain-idread-only
get-hub-intentread-only
get-intent-filler-implread-only
is-hash-filledread-onlyhash: (buff 32
get-fillerread-onlyhash: (buff 32
get-impl-paramsread-only