Source Code

;; ;; parse-address-parts
;; ;; Parses an ASCII string into address and optional contract name parts
;; ;; @param ascii-string (string-ascii) - The input string in format "address" or "address.contract-name"
;; ;; @returns (tuple (address (string-ascii 64)) (contract-name (optional (string-ascii 40))))
;; (define-read-only (parse-address-parts (ascii-string (string-ascii 64)))
;;   (let
;;     (
;;       ;; Find the position of the "." delimiter if it exists
;;       (delimiter-index (index-of? ascii-string "."))
;;     )
;;     (tuple
;;       (address 
;;         (if (is-some delimiter-index)
;;           (slice? ascii-string u0 (unwrap-panic delimiter-index))
;;           ascii-string))
;;       (contract-name 
;;         (if (is-some delimiter-index)
;;           (some (slice? ascii-string 
;;                 (+ (unwrap-panic delimiter-index) u1) 
;;                 (- (len ascii-string) (+ (unwrap-panic delimiter-index) u1))))
;;           none))
;;     )
;;   )
;; )

;; string-to-buffer
;; Converts an ASCII string to a consensus buffer
;; @param str (string-ascii) - The ASCII string to convert
;; @returns (optional (buff 32)) - The buffer representation or none if conversion fails
(define-read-only (string-to-buffer (str (string-ascii 64)))
  (to-consensus-buff? str)
)

;; ;; construct-principal-from-parts
;; ;; Constructs a principal from address buffer and optional contract name
;; ;; @param address-buffer (buff 32) - The buffer representation of the address
;; ;; @param contract-name (optional (string-ascii 40)) - Optional contract name
;; ;; @returns (response principal { error_code: uint, value: (optional principal) })
;; (define-read-only (construct-principal-from-parts 
;;                     (address-buffer (buff 32))
;;                     (contract-name (optional (string-ascii 40))))
;;   (match contract-name
;;     contract-name-value 
;;       ;; If contract name is provided, create a contract principal
;;       (principal-construct? 0x16 address-buffer contract-name-value)
;;     ;; If no contract name, create a standard principal
;;     (principal-construct? 0x16 address-buffer)
;;   )
;; )

;; ;; ascii-to-principal
;; ;; Main function that converts an ASCII string to a principal
;; ;; @param ascii-string (string-ascii) - The ASCII string to convert (format: "address" or "address.contract-name")
;; ;; @returns (response principal { error_code: uint, value: (optional principal) })
;; (define-read-only (ascii-to-principal (ascii-string (string-ascii 64)))
;;   (let
;;     (
;;       ;; Parse the address parts
;;       (parts (parse-address-parts ascii-string))
;;       (address (get address parts))
;;       (contract-name (get contract-name parts))
      
;;       ;; Convert address to buffer
;;       (address-buffer (string-to-buffer address))
;;     )
;;     ;; Construct principal from components
;;     (match address-buffer
;;       buffer (construct-principal-from-parts buffer contract-name)
;;       none (err (tuple (error_code u1) (value none)))
;;     )
;;   )
;; )

Functions (3)

FunctionAccessArgs
parse-address-partsread-onlyascii-string: (string-ascii 64
string-to-bufferread-onlystr: (string-ascii 64
ascii-to-principalread-onlyascii-string: (string-ascii 64