TransactionSEALED
&&#○●?■█$◆!&@■○■*○□@□!!@╳○@$╲%^$◇╱@▪▪?●○#$╱◇▫##@◇■○%▒~▒●◆▪╲░▓╳%▒
Transaction ID
Transaction Summary
TransactionScript 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}