@@ -111,16 +111,22 @@ struct OpenSeaApi {
111111
112112 //print(orders)
113113 // remove duplicates, we request ordered by highest first
114- if ( contract == nil || tokenIds == nil ) {
115- var uniqueOrdersDict : [ String : AssetOrder ] = [ : ]
116- orders. orders. forEach { order in
117- let key = " \( order. asset. asset_contract. address) : \( order. asset. token_id) "
118- uniqueOrdersDict [ key] = uniqueOrdersDict [ key] ?? order
119- }
114+
115+ var dict : [ String : AssetOrder ] = [ : ]
116+ // print(orders)
117+ orders. orders. forEach { order in
120118
121- orders = Orders ( orders: uniqueOrdersDict. map { $1 } )
119+ let key = " \( order. asset. asset_contract. address) : \( order. asset. token_id) : \( order. side) "
120+ dict [ key] = dict [ key] ??
121+ orders. orders. filter {
122+ " \( $0. asset. asset_contract. address) : \( $0. asset. token_id) : \( $0. side) " == key
123+ } . sorted {
124+ $0. payment_token == $1. payment_token && $0. current_price > $1. current_price
125+ } . first!
122126 }
123127
128+ orders = Orders ( orders: dict. map { $1 } )
129+
124130 seal. fulfill ( orders. orders)
125131
126132 } catch {
@@ -145,7 +151,7 @@ struct OpenSeaApi {
145151 let ask = $0. first { $0. side == . sell } . flatMap { ( order: AssetOrder ) -> AskInfo ? in
146152 switch ( order. payment_token, Double ( order. current_price) . map { BigUInt ( $0) } ) {
147153 case ( ETH_ADDRESS, . some( let wei) ) ,
148- ( WETH_ADDRESS, . some( let wei) ) :
154+ ( WETH_ADDRESS, . some( let wei) ) :
149155 return AskInfo ( wei: wei)
150156 default :
151157 return nil
@@ -155,7 +161,7 @@ struct OpenSeaApi {
155161 let bid = $0. first { $0. side == . buy } . flatMap { ( order: AssetOrder ) -> BidInfo ? in
156162 switch ( order. payment_token, Double ( order. current_price) . map { BigUInt ( $0) } ) {
157163 case ( ETH_ADDRESS, . some( let wei) ) ,
158- ( WETH_ADDRESS, . some( let wei) ) :
164+ ( WETH_ADDRESS, . some( let wei) ) :
159165 return BidInfo ( wei: wei)
160166 default :
161167 return nil
@@ -172,7 +178,7 @@ struct OpenSeaApi {
172178 let ask = $0. first { $0. side == . sell } . flatMap { ( order: AssetOrder ) -> AskInfo ? in
173179 switch ( order. payment_token, Double ( order. current_price) . map { BigUInt ( $0) } ) {
174180 case ( ETH_ADDRESS, . some( let wei) ) ,
175- ( WETH_ADDRESS, . some( let wei) ) :
181+ ( WETH_ADDRESS, . some( let wei) ) :
176182 return AskInfo ( wei: wei)
177183 default :
178184 return nil
@@ -182,7 +188,7 @@ struct OpenSeaApi {
182188 let bid = $0. first { $0. side == . buy } . flatMap { ( order: AssetOrder ) -> BidInfo ? in
183189 switch ( order. payment_token, Double ( order. current_price) . map { BigUInt ( $0) } ) {
184190 case ( ETH_ADDRESS, . some( let wei) ) ,
185- ( WETH_ADDRESS, . some( let wei) ) :
191+ ( WETH_ADDRESS, . some( let wei) ) :
186192 return BidInfo ( wei: wei)
187193 default :
188194 return nil
@@ -196,7 +202,7 @@ struct OpenSeaApi {
196202 static func userOrders( address: QueryAddress , side: Side ? ) -> Promise < [ NFTWithLazyPrice ] > {
197203 OpenSeaApi . getOrders ( contract: nil , tokenIds: nil , user: address, side: side)
198204 . map ( on: DispatchQueue . global ( qos: . userInteractive) ) { orders in
199- orders
205+ return orders
200206 . sorted {
201207 switch ( $0. expiration_time, $1. expiration_time) {
202208 case ( 0 , 0 ) :
@@ -209,7 +215,7 @@ struct OpenSeaApi {
209215 return $0. expiration_time < $1. expiration_time
210216 }
211217 }
212-
218+
213219 . map { order in
214220 collectionsFactory
215221 . getByAddress (
@@ -223,15 +229,15 @@ struct OpenSeaApi {
223229 . flatMap { ( nft: NFT ) -> NFTWithLazyPrice ? in
224230 switch ( order. payment_token, Double ( order. current_price) . map { BigUInt ( $0) } ) {
225231 case ( ETH_ADDRESS, . some( let wei) ) ,
226- ( WETH_ADDRESS, . some( let wei) ) :
232+ ( WETH_ADDRESS, . some( let wei) ) :
227233 return NFTWithLazyPrice (
228234 nft: nft,
229235 getPrice: {
230236 ObservablePromise < NFTPriceStatus > (
231237 resolved: NFTPriceStatus . known (
232238 NFTPriceInfo (
233239 price: wei,
234- blockNumber : nil ,
240+ date : order . expiration_time == 0 ? nil : Date ( timeIntervalSince1970 : Double ( order . expiration_time ) ) ,
235241 type: AssetOrder . sideToEvent ( order. side) )
236242 )
237243 )
0 commit comments