FT TransferSEALED

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

Transaction ID

Timestamp

Feb 12, 2026, 08:56:45 AM UTC
2w ago

Block Height

141,959,358

Computation

0

Execution Fee

0.0001 FLOW

Execution Error

Error Code: 1101

authorizer count mismatch for transaction: expected 3, got 2

Raw Error

[Error Code: 1101] error caused by: 1 error occurred: * transaction preprocess failed: [Error Code: 1101] cadence runtime error: Execution failed: error: authorizer count mismatch for transaction: expected 3, got 2 --> 2fd284de86d74a563a49323bd7e505e73544aa8276b670b4f83670d00eb56162 Was this error unhelpful? Consider suggesting an improvement here: https://github.com/onflow/cadence/issues.

Transaction Summary

FT Transfer

Called CricketMoments, FungibleToken, NonFungibleToken +2 more

Script Arguments

0amountsFromBuyerToMinter[UFix64]
[]
1amountsFromMinterToBuyer[UFix64]
[]
2saleItemIDUInt64
106982698
3priceUFix64
20.00000000
4beneficiaryAddressAddress

Cadence Script

1import CricketMoments from 0x4eded0de73020ca5
2import FungibleToken from 0xf233dcee88fe0abe
3import NonFungibleToken from 0x1d7e57aa55817448
4import FazeUtilityCoin from 0x4eded0de73020ca5
5import NFTStorefront from 0x4eb8a10cb9f87357
6
7transaction(amountsFromBuyerToMinter: [UFix64], amountsFromMinterToBuyer: [UFix64], saleItemID: UInt64, price: UFix64, beneficiaryAddress: Address) {
8
9     let paymentVault: @{FungibleToken.Vault}
10     let CricketMomentsCollection: &CricketMoments.Collection
11     let storefront: auth(NFTStorefront.CreateListing) &NFTStorefront.Storefront
12     let listing: &{NFTStorefront.ListingPublic}
13     let tokenAdmin: &FazeUtilityCoin.Administrator
14     let buyerFTTokenReceiver: &{FungibleToken.Receiver}
15     let buyerFTVaultRef: auth(FungibleToken.Withdraw) &FazeUtilityCoin.Vault
16     let buyerNFTAddress: Address
17     let buyerFTAddress: Address
18     let minterAddress: Address
19     let beneficiaryFazeUtilityCoinReceiver: Capability<&FazeUtilityCoin.Vault>
20     let cricketMomentsProvider: Capability<auth(NonFungibleToken.Withdraw) &CricketMoments.Collection>
21     let saleOfferResourceID:UInt64
22     let vaultRef: auth(FungibleToken.Withdraw) &FazeUtilityCoin.Vault
23
24    prepare(buyerFT: auth(BorrowValue, Capabilities, SaveValue) &Account, 
25            buyerNFT: auth(BorrowValue, Capabilities, SaveValue) &Account, 
26            minter: auth(BorrowValue, Capabilities, SaveValue) &Account) {
27        self.buyerNFTAddress = buyerNFT.address
28        self.buyerFTAddress = buyerFT.address
29        self.minterAddress = minter.address
30        self.vaultRef = minter.storage.borrow<auth(FungibleToken.Withdraw) &FazeUtilityCoin.Vault>(from: FazeUtilityCoin.VaultStoragePath)
31			?? panic("Could not borrow reference to the owner's Vault!")
32
33        // 0 - Storefront create a listing for the item
34        self.beneficiaryFazeUtilityCoinReceiver = getAccount(self.minterAddress).capabilities.get<&FazeUtilityCoin.Vault>(FazeUtilityCoin.ReceiverPublicPath)
35        
36        assert(self.beneficiaryFazeUtilityCoinReceiver.borrow() != nil, message: "Missing or mis-typed beneficiary FazeUtilityCoin receiver")
37
38        self.cricketMomentsProvider = minter.capabilities.storage.issue<auth(NonFungibleToken.Withdraw) &CricketMoments.Collection>(CricketMoments.CollectionStoragePath)
39        assert(self.cricketMomentsProvider.borrow() != nil, message: "Missing or mis-typed CricketMoments.Collection provider")
40
41        self.storefront = minter.storage.borrow<auth(NFTStorefront.CreateListing) &NFTStorefront.Storefront>(from: NFTStorefront.StorefrontStoragePath)
42            ?? panic("Missing or mis-typed NFTStorefront Storefront")
43
44        let beneficiarySaleCut = NFTStorefront.SaleCut(
45            receiver: self.beneficiaryFazeUtilityCoinReceiver,
46            amount: price
47        )
48
49        self.saleOfferResourceID = self.storefront.createListing(
50            nftProviderCapability: self.cricketMomentsProvider,
51            nftType: Type<@CricketMoments.NFT>(),
52            nftID: saleItemID,
53            salePaymentVaultType: Type<@FazeUtilityCoin.Vault>(),
54            saleCuts: [beneficiarySaleCut]
55        )
56
57        self.listing = self.storefront.borrowListing(listingResourceID: self.saleOfferResourceID)
58            ?? panic("No offer with that ID in Storefront")  
59
60        // 1 - Admin mints tokens to Buyer - Deposits
61        self.tokenAdmin = minter.storage
62            .borrow<&FazeUtilityCoin.Administrator>(from: FazeUtilityCoin.AdminStoragePath)
63            ?? panic("minter is not the token admin")
64        self.buyerFTTokenReceiver = getAccount(self.buyerFTAddress)
65            .capabilities
66            .borrow<&{FungibleToken.Receiver}>(FazeUtilityCoin.ReceiverPublicPath)
67            ?? panic("Unable to borrow receiver reference")
68
69        // 2 - Withdraw tokens from buyer's vault to send to Minter - Withdrawals
70        self.buyerFTVaultRef = buyerFT.storage.borrow<auth(FungibleToken.Withdraw) &FazeUtilityCoin.Vault>(from: FazeUtilityCoin.VaultStoragePath)
71            ?? panic("Could not borrow reference to the owner's Vault!")
72
73        // 4 - Withdraw payment from buyer 
74        // withdraw the payment to complete the listing
75        let mainFazeUtilityCoinVault = buyerFT.storage.borrow<auth(FungibleToken.Withdraw) &FazeUtilityCoin.Vault>(from: FazeUtilityCoin.VaultStoragePath)
76            ?? panic("Cannot borrow FazeUtilityCoin vault from account storage")
77        self.paymentVault <- mainFazeUtilityCoinVault.withdraw(amount: price)
78        // get the CricketMoments collection for depositing
79        self.CricketMomentsCollection = buyerNFT.storage.borrow<&CricketMoments.Collection>(
80            from: CricketMoments.CollectionStoragePath
81        ) ?? panic("Cannot borrow CricketMoments collection receiver from account")
82
83    }
84
85    execute {
86
87        // 1 - NFTStorefront sales
88        let item <- self.listing.purchase(
89            payment: <-self.paymentVault
90        )
91        self.CricketMomentsCollection.deposit(token: <-item)
92        self.storefront.cleanup(listingResourceID: self.saleOfferResourceID)
93    
94
95        // 2 - Admin mints tokens to buyer - Deposits
96        var totalAmountFromMinterToBuyer = 0.0
97        for amountFromMinterToBuyer in amountsFromMinterToBuyer {
98            totalAmountFromMinterToBuyer = totalAmountFromMinterToBuyer + amountFromMinterToBuyer
99        }
100        let minter <- self.tokenAdmin.createNewMinter(allowedAmount: totalAmountFromMinterToBuyer)
101        for amountFromMinterToBuyer in amountsFromMinterToBuyer {
102            if self.vaultRef.balance < amountFromMinterToBuyer {
103                let mintedVault <- minter.mintTokens(amount: amountFromMinterToBuyer)
104                self.buyerFTTokenReceiver.deposit(from: <-mintedVault)
105            } else {
106                let sentVault <- self.vaultRef.withdraw(amount: amountFromMinterToBuyer)
107                self.buyerFTTokenReceiver.deposit(from: <-sentVault)
108            }
109        }
110        destroy minter
111
112        // 3 - Withdraw FUCs from buyer's vault to send to Minter - Withdrawals
113        let minterAccount = getAccount(self.minterAddress)
114        let minterReceiverRef = minterAccount.capabilities
115            .borrow<&{FungibleToken.Receiver}>(FazeUtilityCoin.ReceiverPublicPath)
116            ?? panic("Could not borrow receiver reference to the recipient's Vault")
117        for amountFromBuyerToMinter in amountsFromBuyerToMinter {
118            let sentVault <- self.buyerFTVaultRef.withdraw(amount: amountFromBuyerToMinter)
119            minterReceiverRef.deposit(from: <-sentVault)
120        }
121        
122    }
123}