Smart Contract
BasicBeastsDrop
A.117396d8a72ad372.BasicBeastsDrop
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