Smart Contract
Arbitrage
A.68b5645abcff1008.Arbitrage
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