mirror of
https://github.com/fluencelabs/examples
synced 2025-04-24 18:22:15 +00:00
64 lines
1.7 KiB
Plaintext
64 lines
1.7 KiB
Plaintext
import "@fluencelabs/aqua-lib/builtin.aqua"
|
|
|
|
data Result:
|
|
result: f64
|
|
success: bool
|
|
error_msg: string
|
|
|
|
service PriceGetterService:
|
|
price_getter(coin: string, currency: string, timestamp_ms: u64) -> Result
|
|
|
|
service MeanService:
|
|
mean(data: []f64) -> Result
|
|
|
|
service F64Op("op"):
|
|
identity(x:f64) -> f64
|
|
|
|
data Payload:
|
|
coin: string
|
|
currency: string
|
|
|
|
data NodeServicePair:
|
|
node: string
|
|
service_id: string
|
|
|
|
func get_price(coin: string, currency: string, node: string, pg_sid: string, mean_sid: string) -> Result:
|
|
prices: *f64
|
|
on node:
|
|
k <- Op.string_to_b58(node)
|
|
|
|
PriceGetterService pg_sid
|
|
MeanService mean_sid
|
|
|
|
ts_ms0 <- Peer.timestamp_ms()
|
|
res0 <- PriceGetterService.price_getter(coin, currency, ts_ms0)
|
|
-- if price.success:
|
|
prices <- F64Op.identity(res0.result)
|
|
|
|
ts_ms1 <- Peer.timestamp_ms()
|
|
res1 <- PriceGetterService.price_getter(coin, currency, ts_ms1)
|
|
-- if price.success:
|
|
prices <- F64Op.identity(res1.result)
|
|
|
|
result <- MeanService.mean(prices)
|
|
-- else:
|
|
-- logError("price_getter: ", price.error_msg)
|
|
<- result
|
|
|
|
func get_price_par(coin: string, currency: string, getter_topo: []NodeServicePair, mean_topo: NodeServicePair) -> Result:
|
|
prices: *f64
|
|
for topo <- getter_topo par:
|
|
on topo.node:
|
|
PriceGetterService topo.service_id
|
|
ts_ms <- Peer.timestamp_ms()
|
|
res <- PriceGetterService.price_getter(coin, currency, ts_ms)
|
|
prices <- F64Op.identity(res.result)
|
|
Op.noop()
|
|
|
|
on mean_topo.node:
|
|
F64Op.identity(prices!1)
|
|
MeanService mean_topo.service_id
|
|
result <- MeanService.mean(prices)
|
|
<- result
|
|
|