DeploySEALED
!●?&○$%▓%▒&%○~□▫░◆@#◆▓○~╲▪^■╳!●○░█$■◆&?╱#&~◇▒▪●$$$╲░○▓?$□▒##@@*█
Transaction ID
Execution Fee
0.00000649 FLOWTransaction Summary
DeployContract deployment
Contract deployment
Script Arguments
0nameString
StakingContract_V2
1codeString
import FungibleToken from 0xf233dcee88fe0abe
import FlowToken from 0x1654653399040a61
access(all) contract StakingContract_V2 {
access(self) var historyStats: {Address: [HistoryStats]}
access(all) resource Staking {
access(all) var stakedAmount: UFix64
access(all) var releasedAmount: UFix64
access(all) let vault: @{FungibleToken.Vault}
access(all) let flowVault: @{FungibleToken.Vault}
init(vault: @{FungibleToken.Vault}) {
self.stakedAmount = 0.0
self.releasedAmount = 0.0
self.vault <- vault
self.flowVault <- FlowToken.createEmptyVault(vaultType: Type<@FlowToken.Vault>())
}
access(all) fun stake(address: &Account, amount: UFix64, timeCommitted: UInt64) {
self.flowVault.deposit(from: <- self.vault.withdraw(amount: amount))
self.stakedAmount = amount
if StakingContract_V2.historyStats[address.address] == nil {
StakingContract_V2.historyStats[address.address] = []
}
StakingContract_V2.historyStats[address.address]!.append(HistoryStats(totalStaked: amount, timeCommitted: timeCommitted))
}
access(all) fun cleanup(address: &Account): @{FungibleToken.Vault} {
let remainingAmount: UFix64 = self.stakedAmount
self.stakedAmount = 0.0
let historyStats: [HistoryStats]? = StakingContract_V2.historyStats[address.address]
if historyStats != nil {
if historyStats!.length > 0 {
var mutableHistoryStats: [StakingContract_V2.HistoryStats] = historyStats!
let lastHistory: StakingContract_V2.HistoryStats = mutableHistoryStats[mutableHistoryStats.length - 1]
lastHistory.end()
mutableHistoryStats[mutableHistoryStats.length - 1] = lastHistory
StakingContract_V2.historyStats[address.address] = mutableHistoryStats
}
}
return <- self.flowVault.withdraw(amount: remainingAmount)
}
}
access(all) struct HistoryStats {
access(self) let startDate: UInt64
access(self) var endDate: UInt64
access(self) let totalStaked: UFix64
access(self) var totalUnstaked: UFix64
access(self) let timeCommitted: UInt64
init(totalStaked: UFix64, timeCommitted: UInt64) {
self.startDate = UInt64(getCurrentBlock().timestamp)
self.totalStaked = totalStaked
self.timeCommitted = timeCommitted
self.endDate = 0
self.totalUnstaked = 0.0
}
access(all) fun end() {
self.endDate = UInt64(getCurrentBlock().timestamp)
self.totalUnstaked = self.totalStaked
}
}
init() {
self.historyStats = {}
}
access(all) fun createStaking(vault: @{FungibleToken.Vault}): @Staking {
return <- create Staking(vault: <- vault)
}
access(all) fun getStats(address: Address): [HistoryStats]? {
return self.historyStats[address]
}
}
Cadence Script
1transaction(name: String, code: String ) {
2 prepare(signer: auth(AddContract) &Account) {
3 signer.contracts.add(name: name, code: code.utf8 )
4 }
5 }