Source Code

;; .derupt-core-yyyymmdd Contract
;; (impl-trait 'ST1ZK0A249B4SWAHVXD70R13P6B5HNKZAA0WNTJTR.derupt-core-trait.derupt-core-trait)
(impl-trait 'SP7MKPEA5DVQQ1PQNYPC1P5YRF14CY3CWZF70R01.derupt-core-trait.derupt-core-trait)

;; (use-trait derupt-ext-trait 'ST1ZK0A249B4SWAHVXD70R13P6B5HNKZAA0WNTJTR.derupt-ext-trait.derupt-ext)
(use-trait derupt-ext-trait 'SP7MKPEA5DVQQ1PQNYPC1P5YRF14CY3CWZF70R01.derupt-ext-trait.derupt-ext)

;; (use-trait sip-010-trait 'ST3D8PX7ABNZ1DPP9MRRCYQKVTAC16WXJ7VCN3Z97.sip-010-trait-ft-standard.sip-010-trait)
(use-trait sip-010-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait)

;; Error
(define-constant ERR-UNAUTHORIZED (err u100))
(define-constant ERR-NOTFOUND (err u101))

;; Constant Equals Versioning via Contract Naming Convention
(define-constant derupt-core-yyyymmdd (as-contract tx-sender))

;; Get Costs
(define-read-only (get-chime-stx-amount)  
  (contract-call? .derupt-feed get-chime-stx-amount)
)

(define-read-only (get-chime-ft-amount)  
  (contract-call? .derupt-feed get-chime-ft-amount)
)

;; Log Stacking
(define-private (log-stack (stacker principal) (dislike-ft-total uint) (lockPeriod uint)) 
  (contract-call? .derupt-stackers log-stack tx-sender dislike-ft-total lockPeriod)
)

;; Log Mining
(define-private (log-mine (miner principal) (mine-amounts (list 200 uint))) 
  (contract-call? .derupt-miners log-mine tx-sender mine-amounts)
)

;; Log Gifting
(define-private (log-gift 
  (sender principal) 
  (recipient principal) 
  (is-stx bool) 
  (contractId <sip-010-trait>) 
  (amount uint) 
  (memo (optional (buff 34)))
  (ext (optional <derupt-ext-trait>))
) 
  (contract-call? .derupt-gifts log-gift sender recipient is-stx contractId amount memo ext)
)

;; Log Send Message
(define-private (log-send-message 
  (content (string-utf8 256)) 
  (attachment-uri (optional (string-utf8 256))) 
  (thumbnail-uri (optional (string-utf8 256))) 
  (reply-to (optional (string-utf8 256))) 
  (mine-amounts (list 200 uint)) 
  (alt-origin (string-utf8 256))
  (ext (optional <derupt-ext-trait>))
  (pay-dev bool) 
  (pay-gaia bool) 
  (dev-stx-amount uint) 
  (gaia-stx-amount uint)
  (dev-principal (optional principal)) 
  (gaia-principal (optional principal))
) 
  (contract-call? .derupt-feed log-send-message content attachment-uri thumbnail-uri reply-to mine-amounts alt-origin ext pay-dev pay-gaia dev-stx-amount gaia-stx-amount dev-principal gaia-principal)
)

;; Log Like Message
(define-private (log-like-message 
  (author-principal principal) 
  (like-ft-total uint) 
  (liked-txid (string-utf8 256)) 
  (contractId <sip-010-trait>)
  (pay-dev bool)
  (pay-gaia bool) 
  (dev-ft-total uint) 
  (gaia-ft-total uint)
  (dev-principal (optional principal)) 
  (gaia-principal (optional principal))
  (ext (optional <derupt-ext-trait>))
) 
  (contract-call? .derupt-sentiment log-like-message tx-sender author-principal like-ft-total liked-txid contractId pay-dev pay-gaia dev-ft-total gaia-ft-total dev-principal gaia-principal ext)
)

;; Log Dislike Message
(define-private (log-dislike-message 
  (author-principal principal) 
  (dislike-ft-total uint) 
  (lock-period uint) 
  (disliked-txid (string-utf8 256)) 
  (contractId <sip-010-trait>)
  (pay-dev bool) 
  (pay-gaia bool) 
  (dev-ft-total uint) 
  (gaia-ft-total uint)
  (dev-principal (optional principal)) 
  (gaia-principal (optional principal))
  (ext (optional <derupt-ext-trait>))
) 
  (contract-call? .derupt-sentiment log-dislike-message tx-sender author-principal dislike-ft-total lock-period disliked-txid contractId pay-dev pay-gaia dev-ft-total gaia-ft-total dev-principal gaia-principal ext)
)

;; Mine Reward Claim
(define-private (claim-mining-reward (minerBlockHeight uint)) 
  (contract-call? .cryptocash-core claim-mining-reward minerBlockHeight)
)
(define-public (claim-mining-reward-list (claimHeights (list 200 uint))) 
  (begin 
    (map claim-mining-reward claimHeights)
    (try! (contract-call? .derupt-miners log-mining-reward-claim claimHeights))
    (ok true)
  )
)

;; Stack Reward Claim
(define-private (claim-stacking-reward (targetCycle uint)) 
  (contract-call? .cryptocash-core claim-stacking-reward targetCycle)
)
(define-public (claim-stacking-reward-list (targetCycles (list 32 uint))) 
  (begin 
    (map claim-stacking-reward targetCycles)
    (try! (contract-call? .derupt-stackers log-stacking-reward-claim targetCycles))
    (ok true)
  )
)

(define-public (gift-message (sender principal) 
    (recipient principal) (is-stx bool) 
    (contractId <sip-010-trait>) (amount uint)
    (memo (optional (buff 34)))
    (ext (optional <derupt-ext-trait>))
    (extras (optional (list 10 
      {
        stringutf8: (optional (string-utf8 256)), 
        stringascii: (optional (string-ascii 256)), 
        uint: (optional uint), 
        int: (optional int), 
        principal: (optional principal), 
        bool: (optional bool),
        buff: (optional (buff 34)),
        proxy: (optional (buff 2048))
      }))
    )    
  ) 
  (begin    

    ;; Executes extention contract function if defined
    (if (not (is-none ext))
      (let 
        ((targetContract (unwrap! ext ERR-NOTFOUND))) 
        (try! (contract-call? targetContract exec-ext-func extras))
        true
      )
      false
    )

    (is-ok (log-gift sender recipient is-stx contractId amount memo ext))
    (ok true)
  )
)

;; Core Operation Send Message
(define-public (send-message 
  (content (string-utf8 256)) 
  (attachment-uri (optional (string-utf8 256))) 
  (thumbnail-uri (optional (string-utf8 256))) 
  (reply-to (optional (string-utf8 256))) 
  (mine-amounts (list 200 uint)) 
  (alt-origin (string-utf8 256))
  (ext (optional <derupt-ext-trait>))
  (extras (optional (list 10 
    {
      stringutf8: (optional (string-utf8 256)), 
      stringascii: (optional (string-ascii 256)), 
      uint: (optional uint), 
      int: (optional int), 
      principal: (optional principal), 
      bool: (optional bool),
      buff: (optional (buff 34)),
      proxy: (optional (buff 2048))
    }))
  )
  (pay-dev bool) 
  (pay-gaia bool) 
  (dev-stx-amount uint) 
  (gaia-stx-amount uint)
  (dev-principal (optional principal)) 
  (gaia-principal (optional principal))
)
  (let 
    (
      (dev-stx-total dev-stx-amount) 
      (gaia-stx-total gaia-stx-amount) 
    ) 
      (try! (contract-call? .derupt-feed pay-stx mine-amounts pay-dev pay-gaia dev-stx-amount gaia-stx-amount dev-principal gaia-principal))

      ;; Executes extention contract function if defined
      (if (not (is-none ext))
        (let 
          ((targetContract (unwrap! ext ERR-NOTFOUND))) 
          (try! (contract-call? targetContract exec-ext-func extras))
          true
        )
        false
      )

      (is-ok (log-send-message content attachment-uri thumbnail-uri reply-to mine-amounts alt-origin ext pay-dev pay-gaia dev-stx-total gaia-stx-total dev-principal gaia-principal))
      (is-ok (log-mine tx-sender mine-amounts))
      (ok true)
  )
)

;; Core Operation Like Message
(define-public (like-message 
  (author-principal principal) 
  (liked-txid (string-utf8 256)) 
  (contractId <sip-010-trait>)
  (like-ft-amount uint) 
  (pay-dev bool) 
  (pay-gaia bool) 
  (dev-ft-amount uint) 
  (gaia-ft-amount uint)
  (dev-principal (optional principal)) 
  (gaia-principal (optional principal))
  (ext (optional <derupt-ext-trait>))
  (extras (optional (list 10 
    {
      stringutf8: (optional (string-utf8 256)), 
      stringascii: (optional (string-ascii 256)), 
      uint: (optional uint), 
      int: (optional int), 
      principal: (optional principal), 
      bool: (optional bool),
      buff: (optional (buff 34)),
      proxy: (optional (buff 2048))
    }))
  )
)
  (let
    (
      (like-ft-total like-ft-amount)
      (dev-ft-total dev-ft-amount)
      (gaia-ft-total gaia-ft-amount)
    )    
      (asserts! (not (is-eq tx-sender author-principal)) ERR-UNAUTHORIZED)
      (try! (contract-call? .derupt-feed pay-ft-like author-principal like-ft-total pay-dev pay-gaia dev-ft-total gaia-ft-total dev-principal gaia-principal contractId))

      ;; Executes extention contract function if defined
      (if (not (is-none ext))
        (let 
          ((targetContract (unwrap! ext ERR-NOTFOUND))) 
          (try! (contract-call? targetContract exec-ext-func extras))
          true
        )
        false
      )

      (is-ok (log-like-message author-principal like-ft-total liked-txid contractId pay-dev pay-gaia dev-ft-total gaia-ft-total dev-principal gaia-principal ext))
      (ok true)
  )
)

;; Core Operation Dislike Message
(define-public (dislike-message 
  (author-principal principal) 
  (disliked-txid (string-utf8 256)) 
  (contractId <sip-010-trait>)
  (dislike-ft-amount uint)
  (lockPeriod uint) 
  (pay-dev bool) 
  (pay-gaia bool) 
  (dev-ft-amount uint) 
  (gaia-ft-amount uint)
  (dev-principal (optional principal)) 
  (gaia-principal (optional principal))
  (ext (optional <derupt-ext-trait>))
  (extras (optional (list 10 
    {
      stringutf8: (optional (string-utf8 256)), 
      stringascii: (optional (string-ascii 256)), 
      uint: (optional uint), 
      int: (optional int), 
      principal: (optional principal), 
      bool: (optional bool),
      buff: (optional (buff 34)),
      proxy: (optional (buff 2048))
    }))
  )
)
  (let
    (
      (dislike-ft-total dislike-ft-amount)
      (dev-ft-total dev-ft-amount)
      (gaia-ft-total gaia-ft-amount)
    )
      (asserts! (not (is-eq tx-sender author-principal)) ERR-UNAUTHORIZED)
      (try! (contract-call? .derupt-feed pay-ft-dislike dislike-ft-total lockPeriod pay-dev pay-gaia dev-ft-total gaia-ft-total dev-principal gaia-principal contractId))
      
      ;; Executes extention contract function if defined
      (if (not (is-none ext))
        (let 
          ((targetContract (unwrap! ext ERR-NOTFOUND))) 
          (try! (contract-call? targetContract exec-ext-func extras))
          true
        )
        false
      )

      (is-ok (log-dislike-message author-principal dislike-ft-total lockPeriod disliked-txid contractId pay-dev pay-gaia dev-ft-total gaia-ft-total dev-principal gaia-principal ext))      
      (is-ok (log-stack tx-sender dislike-ft-total lockPeriod))
      (ok true)
  )
)

;; Core Operation Favorable Reply Message
(define-public (favorable-reply-message 
  (content (string-utf8 256)) 
  (author-principal principal) 
  (attachment-uri (optional (string-utf8 256))) 
  (thumbnail-uri (optional (string-utf8 256))) 
  (reply-to (string-utf8 256)) 
  (liked-txid (string-utf8 256)) 
  (mine-amounts (list 200 uint)) 
  (alt-origin (string-utf8 256))
  (ext (optional <derupt-ext-trait>)) 
  (extras (optional (list 10 
    {
      stringutf8: (optional (string-utf8 256)), 
      stringascii: (optional (string-ascii 256)), 
      uint: (optional uint), 
      int: (optional int), 
      principal: (optional principal), 
      bool: (optional bool),
      buff: (optional (buff 34)),
      proxy: (optional (buff 2048))
    }))
  )
  (contractId <sip-010-trait>)
  (like-ft-amount uint)
  (pay-dev bool) 
  (pay-gaia bool) 
  (dev-stx-amount uint) 
  (gaia-stx-amount uint)
  (dev-ft-amount uint) 
  (gaia-ft-amount uint)
  (dev-principal (optional principal)) 
  (gaia-principal (optional principal))
)
    (begin
      (asserts! (not (is-eq tx-sender author-principal)) ERR-UNAUTHORIZED)
      (try! (send-message content attachment-uri thumbnail-uri (some reply-to) mine-amounts alt-origin none none pay-dev pay-gaia dev-stx-amount gaia-stx-amount dev-principal gaia-principal))
      (try! (like-message author-principal liked-txid contractId like-ft-amount pay-dev pay-gaia dev-ft-amount gaia-ft-amount dev-principal gaia-principal none none))

      ;; Executes extention contract function if defined
      (if (not (is-none ext))
        (let 
          ((targetContract (unwrap! ext ERR-NOTFOUND))) 
          (try! (contract-call? targetContract exec-ext-func extras))
          true
        )
        false
      )

      (ok true)
    )
)

;; Core Operation Unfavorable Reply Message
(define-public (unfavorable-reply-message 
  (content (string-utf8 256)) 
  (author-principal principal) 
  (attachment-uri (optional (string-utf8 256))) 
  (thumbnail-uri (optional (string-utf8 256))) 
  (reply-to (string-utf8 256))   
  (disliked-txid (string-utf8 256)) 
  (mine-amounts (list 200 uint))  
  (alt-origin (string-utf8 256))
  (ext (optional <derupt-ext-trait>))  
  (extras (optional (list 10 
    {
      stringutf8: (optional (string-utf8 256)), 
      stringascii: (optional (string-ascii 256)), 
      uint: (optional uint), 
      int: (optional int), 
      principal: (optional principal), 
      bool: (optional bool),
      buff: (optional (buff 34)),
      proxy: (optional (buff 2048))
    }))
  )
  (contractId <sip-010-trait>)
  (dislike-ft-amount uint)
  (lockPeriod uint)
  (pay-dev bool) 
  (pay-gaia bool) 
  (dev-stx-amount uint) 
  (gaia-stx-amount uint)
  (dev-ft-amount uint) 
  (gaia-ft-amount uint)
  (dev-principal (optional principal)) 
  (gaia-principal (optional principal))
)
    (begin
      (asserts! (not (is-eq tx-sender author-principal)) ERR-UNAUTHORIZED)
      (try! (send-message content attachment-uri thumbnail-uri (some reply-to) mine-amounts alt-origin none none pay-dev pay-gaia dev-stx-amount gaia-stx-amount dev-principal gaia-principal))
      (try! (dislike-message author-principal disliked-txid contractId dislike-ft-amount lockPeriod pay-dev pay-gaia dev-ft-amount gaia-ft-amount dev-principal gaia-principal none none))

      ;; Executes extention contract function if defined
      (if (not (is-none ext))
        (let 
          ((targetContract (unwrap! ext ERR-NOTFOUND))) 
          (try! (contract-call? targetContract exec-ext-func extras))
          true
        )
        false
      )
      
      (ok true)
    )
)

;; Set the derupt-core-yyyymmdd version in derupt-feed contract as a data variable
(contract-call? .derupt-feed set-derupt-core-contract derupt-core-yyyymmdd)

Functions (18)

FunctionAccessArgs
get-chime-stx-amountread-only
get-chime-ft-amountread-only
log-stackprivatestacker: principal, dislike-ft-total: uint, lockPeriod: uint
log-mineprivateminer: principal, mine-amounts: (list 200 uint
log-giftprivatesender: principal, recipient: principal, is-stx: bool, contractId: <sip-010-trait>, amount: uint, memo: (optional (buff 34
log-send-messageprivatecontent: (string-utf8 256
log-like-messageprivateauthor-principal: principal, like-ft-total: uint, liked-txid: (string-utf8 256
log-dislike-messageprivateauthor-principal: principal, dislike-ft-total: uint, lock-period: uint, disliked-txid: (string-utf8 256
claim-mining-rewardprivateminerBlockHeight: uint
claim-mining-reward-listpublicclaimHeights: (list 200 uint
claim-stacking-rewardprivatetargetCycle: uint
claim-stacking-reward-listpublictargetCycles: (list 32 uint
gift-messagepublicsender: principal, recipient: principal, is-stx: bool, contractId: <sip-010-trait>, amount: uint, memo: (optional (buff 34
send-messagepubliccontent: (string-utf8 256
like-messagepublicauthor-principal: principal, liked-txid: (string-utf8 256
dislike-messagepublicauthor-principal: principal, disliked-txid: (string-utf8 256
favorable-reply-messagepubliccontent: (string-utf8 256
unfavorable-reply-messagepubliccontent: (string-utf8 256