Source Code


;; title: sample-dapp
;; version:
;; summary:
;; description:

;; traits
(use-trait connection-contract .connection-trait.connection-trait)
;;

;; constants
(define-constant err-not-admin (err u100))
(define-constant err-not-connection-contract (err u101))

;; public functions
(define-public (init (connection principal))
    (begin
        (try! (is-admin))
        (contract-call? .sample-dapp-state set-connection-impl connection)
    ))

(define-public (set-sample-dapp-impl (who principal))
    (begin
        (try! (is-admin))
        (contract-call? .sample-dapp-state set-sample-dapp-impl who)
    ))

(define-public (set-admin (who principal))
    (begin
        (try! (is-admin))
        (contract-call? .sample-dapp-state set-admin who)
    ))

(define-public (send-message (dst-chain-id uint) (dst-address (buff 256)) (payload (buff 2048)) (connection <connection-contract>))
  (let (
        (current-connection-contract (contract-call? .sample-dapp-state get-connection-impl))
       )
    (asserts! (is-eq (contract-of connection) current-connection-contract) err-not-connection-contract)
    (unwrap-panic (contract-call? connection send-message dst-chain-id dst-address payload))
    (ok true)
  )
)

(define-public (receive-message (src-chain-id uint) (src-address (buff 256)) (connection-sn uint) (payload (buff 2048)) (signatures (list 25 (buff 65))) (connection <connection-contract>))
  (let (
        (current-connection-contract (contract-call? .sample-dapp-state get-connection-impl))
       )
    (asserts! (is-eq (contract-of connection) current-connection-contract) err-not-connection-contract)
    (unwrap-panic (contract-call? connection verify-message src-chain-id src-address connection-sn payload signatures))
    (emit-receive-message-event src-chain-id src-address connection-sn payload)
    (ok true)
  )
)

;; read only functions
(define-read-only (is-admin)
    (ok (asserts! (is-eq contract-caller (contract-call? .sample-dapp-state get-admin)) err-not-admin))
)

;; events
(define-private (emit-receive-message-event (src-chain-id uint) (src-address (buff 256)) (nonce uint) (payload (buff 2048))) 
(print 
    {
      event: "MessageReceived",
      src-chain-id: src-chain-id,
      src-address: src-address,
      nonce: nonce,
      payload: payload
    }
  )
)

Functions (7)

FunctionAccessArgs
initpublicconnection: principal
set-sample-dapp-implpublicwho: principal
set-adminpublicwho: principal
send-messagepublicdst-chain-id: uint, dst-address: (buff 256
receive-messagepublicsrc-chain-id: uint, src-address: (buff 256
is-adminread-only
emit-receive-message-eventprivatesrc-chain-id: uint, src-address: (buff 256