Smart Contract

BasicBeastsDrop

A.117396d8a72ad372.BasicBeastsDrop

Deployed

1d ago
Feb 27, 2026, 03:00:30 PM UTC

Dependents

0 imports
1import FungibleToken from 0xf233dcee88fe0abe
2
3access(all)
4contract BasicBeastsDrop{ 
5	access(all) entitlement AdminOwner
6
7	access(all) event ContractInitialized()
8	
9	access(all)
10	let AdminStoragePath: StoragePath
11	
12	access(all)
13	var currentDrop: UInt32
14	
15	access(self)
16	var drops:{ UInt32: [Drop]}
17	
18	access(all)
19	struct Drop{ 
20		access(all)
21		let order: UInt32
22		
23		access(all)
24		let drop: UInt32
25		
26		access(all)
27		let amount: UFix64
28		
29		access(all)
30		let totalPurchase: UFix64
31		
32		access(all)
33		let vaultAddress: Address
34		
35		access(all)
36		let type: String
37		
38		access(all)
39		let address: Address
40		
41		init(
42			order: UInt32,
43			amount: UFix64,
44			totalPurchase: UFix64,
45			vaultAddress: Address,
46			type: String,
47			address: Address
48		){ 
49			self.order = order
50			self.drop = BasicBeastsDrop.currentDrop
51			self.amount = amount
52			self.totalPurchase = totalPurchase
53			self.vaultAddress = vaultAddress
54			self.type = type
55			self.address = address
56		}
57	}
58	
59	access(all)
60	resource Admin{ 
61		access(AdminOwner)
62		fun startNewDrop(){ 
63			BasicBeastsDrop.currentDrop = BasicBeastsDrop.currentDrop + 1
64		}
65	}
66	
67	access(all)
68	fun participate(
69		amount: UFix64,
70		vaultAddress: Address,
71		type: String,
72		vault: @{FungibleToken.Vault},
73		address: Address
74	){ 
75		var quantity = 0
76		var amountForPack: UFix64 = 0.0
77		switch type{ 
78			case "Starter":
79				quantity = Int(amount / 10.0)
80				amountForPack = 10.0
81			case "Cursed Black":
82				quantity = Int(amount / 300.0)
83				amountForPack = 300.0
84			case "Shiny Gold":
85				quantity = Int(amount / 999.0)
86				amountForPack = 999.0
87		}
88		if BasicBeastsDrop.drops[BasicBeastsDrop.currentDrop] == nil{ 
89			BasicBeastsDrop.drops[BasicBeastsDrop.currentDrop] = []
90		}
91		var i = 0
92		while quantity > i{ 
93			(BasicBeastsDrop.drops[BasicBeastsDrop.currentDrop]!).append(Drop(order: UInt32((BasicBeastsDrop.drops[BasicBeastsDrop.currentDrop]!).length + 1), amount: amountForPack, totalPurchase: amount, vaultAddress: vaultAddress, type: type, address: address))
94			i = i + 1
95		}
96		(
97			(
98				getAccount(vaultAddress).capabilities.get<&{FungibleToken.Receiver}>(
99					/public/fusdReceiver
100				)!
101			).borrow()!
102		).deposit(from: <-vault)
103	}
104	
105	access(all) view fun getDrops(): [UInt32]{ 
106		return BasicBeastsDrop.drops.keys
107	}
108	
109	access(all) view fun getDropData(drop: UInt32): [Drop]?{ 
110		return BasicBeastsDrop.drops[drop]
111	}
112	
113	init(){ 
114		self.AdminStoragePath = /storage/basicBeastsDropAdmin
115		self.currentDrop = 12
116		self.drops ={} 
117		
118		// Create a Admin resource and save it to storage
119		let admin <- create Admin()
120		self.account.storage.save(<-admin, to: self.AdminStoragePath)
121		emit ContractInitialized()
122	}
123}
124