DeploySEALED

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

Transaction ID

Timestamp

Oct 09, 2025, 04:00:41 PM UTC
4mo ago

Block Height

128,903,601

Computation

0

Execution Fee

0.00000924 FLOW

Transaction Summary

Deploy

Contract deployment

Contract deployment

Script Arguments

0nameString
AgentManager3
1codeString
import FungibleToken from 0xf233dcee88fe0abe import FlowToken from 0x1654653399040a61 import stFlowToken from 0xd6f80565193ad727 import EVM from 0xe467b9dd11fa00df import VaultCore from 0x79f5b5b0f95a160b /// AgentManager3 - Simplified version without nested strategy resources access(all) contract AgentManager3 { access(all) let AgentStoragePath: StoragePath access(all) let AgentPublicPath: PublicPath access(all) event StrategyExecuted(strategy: String, amount: UFix64, result: String) access(all) event FundsBridgedToEVM(amount: UFix64, evmAddress: String) access(all) event FundsBridgedFromEVM(amount: UFix64) access(self) var totalBridgedToEVM: UFix64 access(self) var totalBridgedFromEVM: UFix64 /// Simplified Agent - only manages vault and COA, strategies are stateless access(all) resource Agent { access(self) let vaultRef: &VaultCore.Vault access(self) let coa: auth(EVM.Call, EVM.Withdraw) &EVM.CadenceOwnedAccount init(vaultRef: &VaultCore.Vault, coa: auth(EVM.Call, EVM.Withdraw) &EVM.CadenceOwnedAccount) { self.vaultRef = vaultRef self.coa = coa } // Bridge functions work directly with vault and COA access(all) fun bridgeToEVM(amount: UFix64): Bool { let flowVault <- self.vaultRef.withdrawForEVMBridge(assetType: VaultCore.AssetType.flow, amount: amount) as! @FlowToken.Vault self.coa.deposit(from: <-flowVault) AgentManager3.totalBridgedToEVM = AgentManager3.totalBridgedToEVM + amount emit FundsBridgedToEVM(amount: amount, evmAddress: self.coa.address().toString()) return true } access(all) fun bridgeFromEVM(amount: UFix64): Bool { let scaledAmount = amount * 1000000000.0 let amountUInt = UInt(scaledAmount) * 1000000000 let balance = EVM.Balance(attoflow: amountUInt) let flowVault <- self.coa.withdraw(balance: balance) as! @FlowToken.Vault let actualAmount = flowVault.balance self.vaultRef.depositFromEVMBridge(from: <-flowVault) AgentManager3.totalBridgedFromEVM = AgentManager3.totalBridgedFromEVM + actualAmount emit FundsBridgedFromEVM(amount: actualAmount) return true } access(all) fun executeEVMStrategy(contractAddress: String, calldata: [UInt8], value: UFix64): EVM.Result { let scaledValue = value * 1000000000.0 let amountUInt = UInt(scaledValue) * 1000000000 let balance = EVM.Balance(attoflow: amountUInt) let addressBytes = contractAddress.decodeHex() assert(addressBytes.length == 20, message: "Invalid EVM address") let fixedBytes: [UInt8; 20] = [addressBytes[0], addressBytes[1], addressBytes[2], addressBytes[3], addressBytes[4], addressBytes[5], addressBytes[6], addressBytes[7], addressBytes[8], addressBytes[9], addressBytes[10], addressBytes[11], addressBytes[12], addressBytes[13], addressBytes[14], addressBytes[15], addressBytes[16], addressBytes[17], addressBytes[18], addressBytes[19]] let evmAddress = EVM.EVMAddress(bytes: fixedBytes) return self.coa.call(to: evmAddress, data: calldata, gasLimit: 10_000_000, value: balance) } access(all) fun getCOAAddress(): String { return self.coa.address().toString() } access(all) fun getCOABalance(): UFix64 { let balanceAttoflow = self.coa.balance().attoflow let scaledDown = UFix64(balanceAttoflow / 1000000000) return scaledDown / 1000000000.0 } access(all) fun getVaultAddress(): Address { return self.vaultRef.owner!.address } } access(all) fun createAgent(vaultRef: &VaultCore.Vault, coa: auth(EVM.Call, EVM.Withdraw) &EVM.CadenceOwnedAccount): @Agent { return <- create Agent(vaultRef: vaultRef, coa: coa) } access(all) fun getMetrics(): {String: UFix64} { return {"totalBridgedToEVM": self.totalBridgedToEVM, "totalBridgedFromEVM": self.totalBridgedFromEVM} } init() { self.AgentStoragePath = /storage/AgentManager3 self.AgentPublicPath = /public/AgentManager3 self.totalBridgedToEVM = 0.0 self.totalBridgedFromEVM = 0.0 } }

Cadence Script

1transaction(name: String, code: String ) {
2		prepare(signer: auth(AddContract) &Account) {
3			signer.contracts.add(name: name, code: code.utf8 )
4		}
5	}