Source Code

;; title: cross-chain-bridge
;; version: 1.0.0
;; summary: Cross-chain asset bridge
;; description: Bridge assets across chains - Clarity 4

;; Constants
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-UNAUTHORIZED (err u6500))
(define-constant ERR-BRIDGE-PAUSED (err u6501))
(define-constant ERR-INVALID-CHAIN (err u6502))

;; Supported chains
(define-constant NETWORK-ETHEREUM u1)
(define-constant NETWORK-BSC u2)
(define-constant NETWORK-POLYGON u3)
(define-constant NETWORK-AVALANCHE u4)

;; Bridge status
(define-constant STATUS-PENDING u1)
(define-constant STATUS-CONFIRMED u2)
(define-constant STATUS-COMPLETED u3)
(define-constant STATUS-FAILED u4)

;; Data Variables
(define-data-var bridge-paused bool false)
(define-data-var next-bridge-id uint u1)
(define-data-var total-bridged-volume uint u0)

;; Data Maps - Using stacks-block-time for Clarity 4
(define-map bridge-transactions uint {
  user: principal,
  from-chain: uint,
  to-chain: uint,
  token: principal,
  amount: uint,
  status: uint,
  initiated-at: uint,  ;; Clarity 4: Unix timestamp
  completed-at: uint,
  bridge-fee: uint
})

(define-map chain-configs uint {
  is-active: bool,
  min-amount: uint,
  max-amount: uint,
  bridge-fee: uint,  ;; Basis points
  total-volume: uint
})

(define-map user-bridge-stats principal {
  total-bridges: uint,
  total-volume: uint,
  last-bridge: uint  ;; Clarity 4: Unix timestamp
})

;; Public Functions

(define-public (initiate-bridge
  (to-chain uint)
  (token principal)
  (amount uint))
  (let (
    (bridge-id (var-get next-bridge-id))
    (chain-config (unwrap! (map-get? chain-configs to-chain) ERR-INVALID-CHAIN))
    (bridge-fee (/ (* amount (get bridge-fee chain-config)) u10000))
    (user-stats (default-to
      { total-bridges: u0, total-volume: u0, last-bridge: u0 }
      (map-get? user-bridge-stats tx-sender)))
  )
    (asserts! (not (var-get bridge-paused)) ERR-BRIDGE-PAUSED)
    (asserts! (get is-active chain-config) ERR-INVALID-CHAIN)
    (asserts! (>= amount (get min-amount chain-config)) (err u400))
    (asserts! (<= amount (get max-amount chain-config)) (err u401))

    (map-set bridge-transactions bridge-id {
      user: tx-sender,
      from-chain: u0,  ;; Stacks chain
      to-chain: to-chain,
      token: token,
      amount: amount,
      status: STATUS-PENDING,
      initiated-at: stacks-block-time,
      completed-at: u0,
      bridge-fee: bridge-fee
    })

    (map-set user-bridge-stats tx-sender {
      total-bridges: (+ (get total-bridges user-stats) u1),
      total-volume: (+ (get total-volume user-stats) amount),
      last-bridge: stacks-block-time
    })

    (var-set next-bridge-id (+ bridge-id u1))
    (var-set total-bridged-volume (+ (var-get total-bridged-volume) amount))

    (print {
      event: "bridge-initiated",
      bridge-id: bridge-id,
      to-chain: to-chain,
      amount: amount,
      timestamp: stacks-block-time
    })

    (ok bridge-id)
  )
)

(define-public (complete-bridge (bridge-id uint))
  (let (
    (bridge-data (unwrap! (map-get? bridge-transactions bridge-id) (err u404)))
  )
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-UNAUTHORIZED)
    (asserts! (is-eq (get status bridge-data) STATUS-PENDING) (err u400))

    (map-set bridge-transactions bridge-id (merge bridge-data {
      status: STATUS-COMPLETED,
      completed-at: stacks-block-time
    }))

    (ok true)
  )
)

(define-public (configure-chain
  (target-chain-id uint)
  (is-active bool)
  (min-amount uint)
  (max-amount uint)
  (bridge-fee uint))
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-UNAUTHORIZED)

    (map-set chain-configs target-chain-id {
      is-active: is-active,
      min-amount: min-amount,
      max-amount: max-amount,
      bridge-fee: bridge-fee,
      total-volume: u0
    })

    (ok true)
  )
)

(define-public (toggle-bridge-pause)
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-UNAUTHORIZED)
    (var-set bridge-paused (not (var-get bridge-paused)))
    (ok (var-get bridge-paused))
  )
)

;; Read-Only Functions

(define-read-only (get-bridge-transaction (bridge-id uint))
  (map-get? bridge-transactions bridge-id)
)

(define-read-only (get-chain-config (target-chain-id uint))
  (map-get? chain-configs target-chain-id)
)

(define-read-only (get-user-stats (user principal))
  (map-get? user-bridge-stats user)
)

(define-read-only (is-bridge-paused)
  (var-get bridge-paused)
)

(define-read-only (get-total-volume)
  (var-get total-bridged-volume)
)

Functions (9)

FunctionAccessArgs
toggle-bridge-pausepublic
initiate-bridgepublicto-chain: uint, token: principal, amount: uint
complete-bridgepublicbridge-id: uint
configure-chainpublictarget-chain-id: uint, is-active: bool, min-amount: uint, max-amount: uint, bridge-fee: uint
get-bridge-transactionread-onlybridge-id: uint
get-chain-configread-onlytarget-chain-id: uint
get-user-statsread-onlyuser: principal
is-bridge-pausedread-only
get-total-volumeread-only