Smart Contract

Arbitrage

A.68b5645abcff1008.Arbitrage

Valid From

118,723,579

Deployed

6d ago
Feb 22, 2026, 03:33:42 PM UTC

Dependents

6 imports
1import FungibleToken from 0xf233dcee88fe0abe
2
3access(all) contract Arbitrage {
4
5    // --- Events ---
6    access(all) event TradeCreated(id: UInt64, owner: Address, fromToken: String, toToken: String, fromAmount: UFix64, toAmount: UFix64)
7    access(all) event TradeCompleted(id: UInt64, purchaser: Address)
8    access(all) event TradeCancelled(id: UInt64)
9
10    // --- Data Structures ---
11    access(all) struct TradeInfo {
12        access(all) let id: UInt64
13        access(all) let owner: Address
14        access(all) let fromToken: String
15        access(all) let toToken: String
16        access(all) let fromAmount: UFix64
17        access(all) let toAmount: UFix64
18        access(all) let created: UFix64
19
20        init(id: UInt64, owner: Address, fromToken: String, toToken: String, fromAmount: UFix64, toAmount: UFix64) {
21            self.id = id
22            self.owner = owner
23            self.fromToken = fromToken
24            self.toToken = toToken
25            self.fromAmount = fromAmount
26            self.toAmount = toAmount
27            self.created = getCurrentBlock().timestamp
28        }
29    }
30
31    // --- Contract State ---
32    access(all) var trades: {UInt64: TradeInfo}
33    access(all) var nextTradeId: UInt64
34
35    // --- Core Functions ---
36
37    access(all) fun createTrade(fromToken: String, toToken: String, fromAmount: UFix64, toAmount: UFix64, creator: Address) {
38        let tradeId = self.nextTradeId
39        
40        let tradeInfo = TradeInfo(
41            id: tradeId,
42            owner: creator,
43            fromToken: fromToken,
44            toToken: toToken,
45            fromAmount: fromAmount,
46            toAmount: toAmount
47        )
48
49        self.trades[tradeId] = tradeInfo
50        self.nextTradeId = self.nextTradeId + 1
51
52        emit TradeCreated(id: tradeId, owner: creator, fromToken: fromToken, toToken: toToken, fromAmount: fromAmount, toAmount: toAmount)
53    }
54
55    access(all) fun completeTrade(tradeId: UInt64, purchaser: Address) {
56        pre {
57            self.trades[tradeId] != nil: "Trade not found"
58        }
59        
60        self.trades.remove(key: tradeId)
61        emit TradeCompleted(id: tradeId, purchaser: purchaser)
62    }
63
64    access(all) fun cancelTrade(tradeId: UInt64) {
65        pre {
66            self.trades[tradeId] != nil: "Trade not found"
67        }
68        
69        self.trades.remove(key: tradeId)
70        emit TradeCancelled(id: tradeId)
71    }
72
73    // --- Public Getters ---
74    access(all) view fun getTrade(id: UInt64): TradeInfo? {
75        return self.trades[id]
76    }
77
78    access(all) view fun getOpenTradeIDs(): [UInt64] {
79        return self.trades.keys
80    }
81
82    access(all) view fun getAllTrades(): {UInt64: TradeInfo} {
83        return self.trades
84    }
85
86    init() {
87        self.trades = {}
88        self.nextTradeId = 0
89    }
90}
91