battery-materials-supply-chain

SP1V95DB4JK47QVPJBXCEN6MT35JK84CQ4CWS15DQ

Source Code

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

(define-map supply-chain-nodes
  uint
  {
    node-type: (string-ascii 64),
    operator: principal,
    location: (string-ascii 128),
    material-handled: (string-ascii 64),
    capacity: uint,
    active: bool
  })

(define-map material-transfers
  uint
  {
    from-node: uint,
    to-node: uint,
    material: (string-ascii 64),
    quantity: uint,
    transfer-date: uint,
    status: (string-ascii 32)
  })

(define-data-var next-node-id uint u0)
(define-data-var next-transfer-id uint u0)

(define-read-only (get-node (node-id uint))
  (ok (map-get? supply-chain-nodes node-id)))

(define-public (register-node (type (string-ascii 64)) (location (string-ascii 128)) (material (string-ascii 64)) (capacity uint))
  (let ((node-id (var-get next-node-id)))
    (map-set supply-chain-nodes node-id
      {node-type: type, operator: tx-sender, location: location,
       material-handled: material, capacity: capacity, active: true})
    (var-set next-node-id (+ node-id u1))
    (ok node-id)))

(define-public (transfer-material (from uint) (to uint) (material (string-ascii 64)) (quantity uint))
  (let ((transfer-id (var-get next-transfer-id)))
    (asserts! (is-some (map-get? supply-chain-nodes from)) err-not-found)
    (asserts! (is-some (map-get? supply-chain-nodes to)) err-not-found)
    (map-set material-transfers transfer-id
      {from-node: from, to-node: to, material: material,
       quantity: quantity, transfer-date: stacks-block-height, status: "in-transit"})
    (var-set next-transfer-id (+ transfer-id u1))
    (ok transfer-id)))

Functions (3)

FunctionAccessArgs
get-noderead-onlynode-id: uint
register-nodepublictype: (string-ascii 64
transfer-materialpublicfrom: uint, to: uint, material: (string-ascii 64