DeploySEALED
^^%#@▪█$╱█!■#●~▫▓◆╲!▒╲▪▒◇$╳&╲@●░●●~~?▫*&╳%□●╲#~■!▪◆◆█?╲●▫%~$$▒%░
Transaction ID
Execution Fee
0.00154 FLOWTransaction Summary
DeployContract deployment
Contract deployment
Script Arguments
0nameString
Escrow
1codeString
import NonFungibleToken from 0x1d7e57aa55817448
import FungibleToken from 0xf233dcee88fe0abe
import FlowToken from 0x1654653399040a61
import FlowTransactionScheduler from 0xe467b9dd11fa00df
access(all)
contract Escrow {
access(self) var handlerId: UInt64
access(self) let address: Address
access(all) entitlement Owner
// -----------------------------------------------------------------------
/// Handler resource that implements the Scheduled Transaction interface
access(all) resource Handler: FlowTransactionScheduler.TransactionHandler {
// RECEIPTS
///./////.////
access(all) let handlerId: UInt64
access(all) let receiver: Address
access(self) var offerVault: @FlowToken.Vault
access(self) var receipts: @[FlowTransactionScheduler.ScheduledTransaction]
access(FlowTransactionScheduler.Execute) fun executeTransaction(id: UInt64, data: AnyStruct?) {
pre {
self.offerVault.balance > 0.0: "Offer vault is empty"
}
let balance <- self.offerVault.withdraw(amount: self.offerVault.balance) as! @FlowToken.Vault
let owner = getAccount(self.owner!.address)
let vault = owner.capabilities.borrow<&{FungibleToken.Receiver}>(/public/flowTokenReceiver)!.deposit(from: <- balance.withdraw(amount: balance.balance))
destroy balance
}
// Function to withdraw funds from the offer vault
// this is called when the offer is accepted
access(Owner) fun withdrawFunds(): @FlowToken.Vault {
pre {
self.offerVault.balance > 0.0: "Offer vault is empty"
}
let balance <- self.offerVault.withdraw(amount: self.offerVault.balance) as! @FlowToken.Vault
return <- balance
}
// deposit receipt
access(all) fun depositReceipt(receipt: @FlowTransactionScheduler.ScheduledTransaction) {
self.receipts.append(<- receipt)
}
init(
offerVault: @FlowToken.Vault,
receiver: Address,
) {
// increment the handler id
Escrow.handlerId = Escrow.handlerId + 1
// set the handler id
self.handlerId = Escrow.handlerId
self.offerVault <- offerVault
self.receipts <- []
self.receiver = receiver
/* let inboxIdentifier = "\(receiver)_Escrow_Handler_\(self.handlerId)"
// Get a cap to this handler resource
let handlerCap = Escrow.account.capabilities.storage.issue<auth(Owner) &Handler>(Escrow.getHandlerStoragePath(self.handlerId))
// Pubish an authorized capability to the inbox
Escrow.account.inbox.publish(handlerCap, name: inboxIdentifier, recipient: receiver) */
}
}
// Public helper functions
// function to get storage path for a handler
// based on the handler id
access(all) view fun getHandlerStoragePath(_ handlerId: UInt64): StoragePath {
return StoragePath(identifier: "\(Escrow.account.address)_Escrow_Handler_\(handlerId)")!
}
// function to create a new handler
access(all) fun createHandler(offerVault: @FlowToken.Vault, receiver: Address): @Handler {
return <- create Handler(offerVault: <- offerVault, receiver: receiver)
}
// function to get the address of the escrow
access(all) view fun getAddress(): Address {
return self.address
}
init() {
self.handlerId = 0
self.address = self.account.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 }