TransactionSEALED
?╲╲╳╲╳□■◆%%%○◆□■█◆%@╱▓@#●@?□▓?!?▒~▫□#╱╲&○$◇◆█╱@■~╱▓@$~□░░░╱▒◆#◇╱
Transaction ID
Execution Error
Error Code: 1009
error caused by: 1 error occurred:
Raw Error
[Error Code: 1009] error caused by: 1 error occurred: * transaction verification failed: [Error Code: 1006] invalid proposal key: public key 6 on account f380b22ef386ac7e does not have a valid signature: [Error Code: 1009] invalid envelope key: public key 6 on account f380b22ef386ac7e does not have a valid signature: signature is not valid
Transaction Summary
TransactionScript Arguments
0vaultIdentifierString
A.f1ab99c82dee3526.USDCFlow.Vault
1senderAddress
2receiverAddress
3amountUFix64
0.00100000
Cadence Script
1import HybridCustody from 0xd8a7e05a7ac670c0
2
3// HC-owned imports
4import CapabilityFactory from 0xd8a7e05a7ac670c0
5import CapabilityFilter from 0xd8a7e05a7ac670c0
6import ViewResolver from 0x1d7e57aa55817448
7import FungibleToken from 0xf233dcee88fe0abe
8import FungibleTokenMetadataViews from 0xf233dcee88fe0abe
9
10
11
12transaction(vaultIdentifier:String, sender: Address, receiver: Address, amount: UFix64 ) {
13
14 let paymentVault: @{FungibleToken.Vault}
15 let vaultData: FungibleTokenMetadataViews.FTVaultData
16
17 prepare(signer: auth(Storage) &Account) {
18 let type = CompositeType(vaultIdentifier)
19 let identifierSplit = vaultIdentifier.split(separator: ".")
20 let address = Address.fromString("0x".concat(identifierSplit[1]))!
21 let name = identifierSplit[2]!
22
23 let viewResolver = getAccount(address).contracts.borrow<&{ViewResolver}>(name: name)
24 ?? panic("Could not borrow ViewResolver from FungibleToken contract")
25 let m = signer.storage.borrow<auth(HybridCustody.Manage) &HybridCustody.Manager>(from: HybridCustody.ManagerStoragePath)
26 ?? panic("manager does not exist")
27 let childAcct = m.borrowAccount(addr: sender) ?? panic("child account not found")
28
29 self.vaultData = viewResolver.resolveContractView(resourceType: nil, viewType: Type<FungibleTokenMetadataViews.FTVaultData>()) as! FungibleTokenMetadataViews.FTVaultData?
30 ?? panic("Could not get the vault data view for <Token> ")
31
32 //get Ft cap from child account
33 let capType = Type<auth(FungibleToken.Withdraw) &{FungibleToken.Provider}>()
34 let controllerID = childAcct.getControllerIDForType(type: capType, forPath: self.vaultData.storagePath)
35 ?? panic("no controller found for capType")
36
37 let cap = childAcct.getCapability(controllerID: controllerID, type: capType) ?? panic("no cap found")
38 let providerCap = cap as! Capability<auth(FungibleToken.Withdraw) &{FungibleToken.Provider}>
39 assert(providerCap.check(), message: "invalid provider capability")
40
41 // Get a reference to the child's stored vault
42 let vaultRef = providerCap.borrow()!
43
44 // Withdraw tokens from the signer's stored vault
45 self.paymentVault <- vaultRef.withdraw(amount: amount)
46 }
47
48 execute {
49
50 // Get the recipient's public account object
51 let recipient = getAccount(receiver)
52
53 // Get a reference to the recipient's Receiver
54 let receiverRef = recipient.capabilities.get<&{FungibleToken.Receiver}>(self.vaultData.receiverPath)!.borrow()
55 ?? panic("Could not borrow receiver reference to the recipient's Vault")
56
57 // Deposit the withdrawn tokens in the recipient's receiver
58 receiverRef.deposit(from: <-self.paymentVault)
59 }
60}