Smart Contract

FLOATIncinerator

A.2d4c3caffbeab845.FLOATIncinerator

Deployed

2d ago
Feb 26, 2026, 03:51:22 AM UTC

Dependents

0 imports
1import FLOAT from 0x2d4c3caffbeab845
2
3pub contract FLOATIncinerator {
4
5  pub let IncineratorStoragePath: StoragePath
6  pub let IncineratorPublicPath: PublicPath
7
8  pub var flameStrength: UInt64
9  pub var totalIncinerated: UInt64
10
11  pub resource interface IncineratorPublic {
12    pub var individualIncinerated: UInt64
13    pub var contributedStrength: UInt64
14    pub fun getExtraMetadata(): {String: String}
15  }
16
17  pub resource Incinerator: IncineratorPublic {
18    pub var individualIncinerated: UInt64
19    pub var contributedStrength: UInt64
20    access(self) var extraMetadata: {String: String}
21
22    pub fun burn(collection: &FLOAT.Collection, ids: [UInt64]) {
23      let length = ids.length
24
25      for id in ids {
26        let float: &FLOAT.NFT = collection.borrowFLOAT(id: id) ?? panic("This FLOAT does not exist.")
27        let score = FLOATIncinerator.calculateScore(dateReceived: float.dateReceived, serial: float.serial)
28        self.contributedStrength = self.contributedStrength + score
29        FLOATIncinerator.flameStrength = FLOATIncinerator.flameStrength + score
30        collection.delete(id: id)
31      }
32
33      self.individualIncinerated = self.individualIncinerated + UInt64(length)
34      FLOATIncinerator.totalIncinerated = FLOATIncinerator.totalIncinerated + UInt64(length)
35    }
36
37    pub fun getExtraMetadata(): {String: String} {
38      return self.extraMetadata
39    }
40
41    init() {
42      self.individualIncinerated = 0
43      self.contributedStrength = 0
44      self.extraMetadata = {}
45    }
46  }
47
48  pub fun createIncinerator(): @Incinerator {
49    return <- create Incinerator()
50  }
51
52  pub fun calculateScore(dateReceived: UFix64, serial: UInt64): UInt64 {
53    // Serial
54    var serialScore: UInt64 = 0
55    if (serial < 10) {
56      serialScore = 5
57    } else if (serial < 100) {
58      serialScore = 4
59    } else if (serial < 1000) {
60      serialScore = 3
61    } else if (serial < 10000) {
62      serialScore = 2
63    } else if (serial < 100000) {
64      serialScore = 1
65    }
66
67    // Time
68    var timeScore: UInt64 = 0
69    var difference = getCurrentBlock().timestamp - dateReceived
70    if (difference > 31556926.0) { // a year
71      timeScore = 5
72    } else if (difference > 2629743.0) { // a month
73      timeScore = 4
74    } else if (difference > 604800.0) { // a week
75      timeScore = 3
76    } else if (difference > 86400.0) { // a day
77      timeScore = 2
78    } else if (difference > 3600.0) { // an hour
79      timeScore = 1
80    }
81
82    return serialScore + timeScore
83  }
84
85  init() {
86    self.IncineratorStoragePath = /storage/FLOATIncineratorStoragePath
87    self.IncineratorPublicPath = /public/FLOATIncineratorPublicPath
88    self.totalIncinerated = 0
89    self.flameStrength = 0
90  }
91
92}