Source Code

(define-fungible-token rwa)

(define-data-var total-supply uint u0)

(define-map balances principal uint)
(define-map frozen-tokens principal uint)
(define-map can-transact-list principal bool)

(define-constant contract-owner tx-sender)
(define-constant err-not-owner (err u100))
(define-constant err-cannot-transact (err u101))
(define-constant err-insufficient-balance (err u102))
(define-constant err-frozen (err u103))

(define-read-only (get-balance (account principal))
  (default-to u0 (map-get? balances account)))

(define-read-only (get-frozen-tokens (account principal))
  (default-to u0 (map-get? frozen-tokens account)))

(define-read-only (can-transact (account principal))
  (default-to true (map-get? can-transact-list account)))

(define-read-only (can-transfer (from principal) (to principal) (amount uint))
  (let ((from-balance (get-balance from))
        (frozen (get-frozen-tokens from)))
    (and (can-transact from)
         (can-transact to)
         (>= (- from-balance frozen) amount))))

(define-public (mint (account principal) (amount uint))
  (begin
    (asserts! (is-eq tx-sender contract-owner) err-not-owner)
    (try! (ft-mint? rwa amount account))
    (map-set balances account (+ (get-balance account) amount))
    (var-set total-supply (+ (var-get total-supply) amount))
    (ok true)))

(define-public (transfer (amount uint) (sender principal) (recipient principal) (memo (optional (buff 34))))
  (let ((sender-balance (get-balance sender))
        (frozen (get-frozen-tokens sender)))
    (asserts! (is-eq tx-sender sender) err-not-owner)
    (asserts! (can-transfer sender recipient amount) err-cannot-transact)
    (asserts! (>= (- sender-balance frozen) amount) err-frozen)
    (try! (ft-transfer? rwa amount sender recipient))
    (map-set balances sender (- sender-balance amount))
    (map-set balances recipient (+ (get-balance recipient) amount))
    (ok true)))

(define-public (forced-transfer (from principal) (to principal) (amount uint))
  (let ((from-balance (get-balance from)))
    (asserts! (is-eq tx-sender contract-owner) err-not-owner)
    (try! (ft-transfer? rwa amount from to))
    (map-set balances from (- from-balance amount))
    (map-set balances to (+ (get-balance to) amount))
    (ok true)))

(define-public (set-frozen-tokens (account principal) (amount uint) (frozen-status bool))
  (begin
    (asserts! (is-eq tx-sender contract-owner) err-not-owner)
    (if frozen-status
      (map-set frozen-tokens account amount)
      (map-delete frozen-tokens account))
    (ok true)))

(define-public (set-can-transact (account principal) (status bool))
  (begin
    (asserts! (is-eq tx-sender contract-owner) err-not-owner)
    (map-set can-transact-list account status)
    (ok true)))

(define-read-only (get-total-supply)
  (ok (var-get total-supply)))

(define-read-only (get-name)
  (ok "Real World Asset"))

(define-read-only (get-symbol)
  (ok "RWA"))

(define-read-only (get-decimals)
  (ok u6))

(define-read-only (get-contract-hash)
  (contract-hash? .rwa))

(define-read-only (get-block-time)
  stacks-block-time)

Functions (15)

FunctionAccessArgs
get-balanceread-onlyaccount: principal
get-frozen-tokensread-onlyaccount: principal
can-transactread-onlyaccount: principal
can-transferread-onlyfrom: principal, to: principal, amount: uint
mintpublicaccount: principal, amount: uint
transferpublicamount: uint, sender: principal, recipient: principal, memo: (optional (buff 34
forced-transferpublicfrom: principal, to: principal, amount: uint
set-frozen-tokenspublicaccount: principal, amount: uint, frozen-status: bool
set-can-transactpublicaccount: principal, status: bool
get-total-supplyread-only
get-nameread-only
get-symbolread-only
get-decimalsread-only
get-contract-hashread-only
get-block-timeread-only