Source Code

(define-constant contract-owner tx-sender)
(define-constant err-owner-only (err u100))
(define-constant err-not-found (err u101))
(define-constant err-signal-lost (err u102))

(define-map satellite-signals
  uint
  {
    satellite-id: (string-ascii 32),
    latitude: int,
    longitude: int,
    altitude: uint,
    timestamp: uint,
    accuracy: uint,
    signal-strength: uint
  })

(define-map gnss-receivers
  principal
  {
    receiver-id: (string-ascii 32),
    last-position-lat: int,
    last-position-lon: int,
    last-update: uint,
    active: bool
  })

(define-data-var next-signal-id uint u0)

(define-read-only (get-signal (signal-id uint))
  (ok (map-get? satellite-signals signal-id)))

(define-read-only (get-receiver (user principal))
  (ok (map-get? gnss-receivers user)))

(define-public (log-position (sat-id (string-ascii 32)) (lat int) (lon int) (alt uint) (accuracy uint) (strength uint))
  (let ((signal-id (var-get next-signal-id)))
    (map-set satellite-signals signal-id
      {satellite-id: sat-id, latitude: lat, longitude: lon, altitude: alt,
       timestamp: stacks-block-height, accuracy: accuracy, signal-strength: strength})
    (var-set next-signal-id (+ signal-id u1))
    (ok signal-id)))

(define-public (register-receiver (receiver-id (string-ascii 32)))
  (begin
    (map-set gnss-receivers tx-sender
      {receiver-id: receiver-id, last-position-lat: 0, last-position-lon: 0,
       last-update: stacks-block-height, active: true})
    (ok true)))

(define-public (update-receiver-position (lat int) (lon int))
  (let ((receiver (unwrap! (map-get? gnss-receivers tx-sender) err-not-found)))
    (ok (map-set gnss-receivers tx-sender
      (merge receiver {last-position-lat: lat, last-position-lon: lon, last-update: stacks-block-height})))))

Functions (5)

FunctionAccessArgs
get-signalread-onlysignal-id: uint
get-receiverread-onlyuser: principal
log-positionpublicsat-id: (string-ascii 32
register-receiverpublicreceiver-id: (string-ascii 32
update-receiver-positionpubliclat: int, lon: int