TransactionSEALED

&&#○●?■█$◆!&@■○■*○□@□!!@╳○@$╲%^$◇╱@▪▪?●○#$╱◇▫##@◇■○%▒~▒●◆▪╲░▓╳%▒

Transaction ID

Timestamp

Sep 05, 2024, 12:47:02 PM UTC
1y ago

Block Height

86,041,824

Computation

0

Proposerseq:13 key:0

Authorizers

1

Transaction Summary

Transaction

Script Arguments

0pidUInt64
86
1vaultPaths[String]
[
  "stFlowTokenVault"
]

Cadence Script

1import Staking from 0x1b77ba4b414de352
2import SwapConfig from 0xb78ef7afa52ff906
3import FungibleToken from 0xf233dcee88fe0abe
4
5import stFlowToken from 0xd6f80565193ad727
6
7transaction(pid: UInt64, vaultPaths:[String]) {
8    let userCertificate: &{Staking.IdentityCertificate}
9    let pool: &{Staking.PoolPublic}
10    let tokenVaults: {String: &{FungibleToken.Vault}}
11
12    prepare(signer: auth(Storage, Capabilities) &Account) {
13        if signer.storage.borrow<&{FungibleToken.Vault}>(from: /storage/stFlowTokenVault) == nil {
14      signer.storage.save(<-stFlowToken.createEmptyVault(vaultType:Type<@stFlowToken.Vault>()), to: /storage/stFlowTokenVault)
15     signer.capabilities.publish(
16          signer.capabilities.storage.issue<&{FungibleToken.Receiver}>(/storage/stFlowTokenVault),
17          at: /public/stFlowTokenReceiver
18      )
19      signer.capabilities.publish(
20          signer.capabilities.storage.issue<&{FungibleToken.Balance}>(/storage/stFlowTokenVault),
21          at: /public/stFlowTokenBalance
22      )
23    }
24
25
26        if signer.storage.borrow<&{Staking.IdentityCertificate}>(from: Staking.UserCertificateStoragePath) == nil {
27            destroy <-signer.storage.load<@AnyResource>(from: Staking.UserCertificateStoragePath)
28            let userCertificate <- Staking.setupUser()
29            signer.storage.save(<-userCertificate, to: Staking.UserCertificateStoragePath)
30        }
31        self.userCertificate = signer.storage.borrow<&{Staking.IdentityCertificate}>(from: Staking.UserCertificateStoragePath)!
32
33        self.tokenVaults = {}
34
35        for path in vaultPaths {
36            let vaultRef = signer.storage.borrow<auth(FungibleToken.Withdraw) &{FungibleToken.Vault}>(from: StoragePath(identifier: path)!)!
37            let key = SwapConfig.SliceTokenTypeIdentifierFromVaultType(vaultTypeIdentifier: vaultRef.getType().identifier)
38            self.tokenVaults[key] = vaultRef
39        }
40
41        let collectionRef = getAccount(0x1b77ba4b414de352).capabilities.borrow<&{Staking.PoolCollectionPublic}>(Staking.CollectionPublicPath)!
42        self.pool = collectionRef.getPool(pid: pid)
43    }
44
45    execute {
46        let rewards <- self.pool.claimRewards(userCertificate: self.userCertificate)
47
48        let keys = rewards.keys
49        for key in keys {
50            let rewardVaultRef = &rewards[key] as auth(FungibleToken.Withdraw) &{FungibleToken.Vault}?
51            self.tokenVaults[key]!.deposit(from: <- rewardVaultRef!.withdraw(amount: rewardVaultRef!.balance))
52        }
53        destroy rewards
54    }
55}