;; ---------------------------------------------------------
;; SIP-10 Fungible Token Contract | SUII is a meme coin inspired by the legendary footballer Cristiano Ronaldo. Although the coin celebrates Ronaldo's iconic status and influence, it has no official affiliation or endorsement from him. SUII is built on the Stacks SP-10 blockchain and is powered by the security and robustness of the Bitcoin network.
;;
;; This token embodies the playful and enthusiastic spirit of the meme coin community, with a focus on fun and creativity rather than utility or financial gain. As a project with no roadmap, SUII thrives on the spontaneity and engagement of its community, offering a unique and entertaining experience for all participants.
;; ---------------------------------------------------------
;; Errors
(define-constant ERR-UNAUTHORIZED u401)
(define-constant ERR-NOT-OWNER u402)
(define-constant ERR-INVALID-PARAMETERS u403)
(define-constant ERR-NOT-ENOUGH-FUND u101)
(impl-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait)
;; Constants
(define-constant MAXSUPPLY u1000000000)
;; Variables
(define-fungible-token SUII MAXSUPPLY)
(define-data-var contract-owner principal tx-sender)
;; SIP-10 Functions
(define-public (transfer (amount uint) (from principal) (to principal) (memo (optional (buff 34))))
(begin
(asserts! (is-eq from tx-sender)
(err ERR-UNAUTHORIZED))
;; Perform the token transfer
(ft-transfer? SUII amount from to)
)
)
;; DEFINE METADATA
(define-data-var token-uri (optional (string-utf8 256)) (some u"https://gaia.hiro.so/hub/14urT7nEuB2YDerRJT6TGkeXRaEnBZcYJ8/suii-0-decimals.json"))
(define-public (set-token-uri (value (string-utf8 256)))
(begin
(asserts! (is-eq tx-sender (var-get contract-owner)) (err ERR-UNAUTHORIZED))
(var-set token-uri (some value))
(ok (print {
notification: "token-metadata-update",
payload: {
contract-id: (as-contract tx-sender),
token-class: "ft"
}
})
)
)
)
(define-read-only (get-balance (owner principal))
(ok (ft-get-balance SUII owner))
)
(define-read-only (get-name)
(ok "SUII")
)
(define-read-only (get-symbol)
(ok "SUII")
)
(define-read-only (get-decimals)
(ok u0)
)
(define-read-only (get-total-supply)
(ok (ft-get-supply SUII))
)
(define-read-only (get-token-uri)
(ok (var-get token-uri))
)
;; transfer ownership
(define-public (transfer-ownership (new-owner principal))
(begin
;; Checks if the sender is the current owner
(if (is-eq tx-sender (var-get contract-owner))
(begin
;; Sets the new owner
(var-set contract-owner new-owner)
;; Returns success message
(ok "Ownership transferred successfully"))
;; Error if the sender is not the owner
(err ERR-NOT-OWNER)))
)
;; ---------------------------------------------------------
;; Utility Functions
;; ---------------------------------------------------------
(define-public (send-many (recipients (list 200 { to: principal, amount: uint, memo: (optional (buff 34)) })))
(fold check-err (map send-token recipients) (ok true))
)
(define-private (check-err (result (response bool uint)) (prior (response bool uint)))
(match prior ok-value result err-value (err err-value))
)
(define-private (send-token (recipient { to: principal, amount: uint, memo: (optional (buff 34)) }))
(send-token-with-memo (get amount recipient) (get to recipient) (get memo recipient))
)
(define-private (send-token-with-memo (amount uint) (to principal) (memo (optional (buff 34))))
(let ((transferOk (try! (transfer amount tx-sender to memo))))
(ok transferOk)
)
)
(define-private (send-stx (recipient principal) (amount uint))
(begin
(try! (stx-transfer? amount tx-sender recipient))
(ok true)
)
)
;; ---------------------------------------------------------
;; Mint
;; ---------------------------------------------------------
(begin
(try! (send-stx 'SP1FQ3DQDR5N9HJX3XC5DNKFCG4DHH48EFJQV6QH0 u5000000))
(try! (ft-mint? SUII MAXSUPPLY (var-get contract-owner)))
)