@@ -26,9 +26,9 @@ var prices = map[string]float64{}
2626var pricesMu = & sync.Mutex {}
2727var didInit = uint64 (0 )
2828var feeds = map [string ]* chainlink_feed.Feed {}
29- var calcPairs = map [ string ] bool {}
30- var clCurrency = "ETH"
31- var elCurrency = "ETH"
29+ var mainCurrency = "ETH" // currency in which all exchange rates are denominated, e.g. ETH or GNO
30+ var clCurrency = "ETH" // currency in which all CL values are denominated, e.g. ETH or mGNO
31+ var elCurrency = "ETH" // currency in which all EL values are denominated, e.g. ETH or xDai
3232
3333var currencies = map [string ]struct {
3434 Symbol string
@@ -37,8 +37,7 @@ var currencies = map[string]struct {
3737 "AUD" : {"A$" , "Australian Dollar" },
3838 "CAD" : {"C$" , "Canadian Dollar" },
3939 "CNY" : {"¥" , "Chinese Yuan" },
40- "DAI" : {"DAI" , "DAI stablecoin" },
41- "xDAI" : {"xDAI" , "xDAI stablecoin" },
40+ "xDAI" : {"DAI" , "xDAI stablecoin" },
4241 "ETH" : {"ETH" , "Ether" },
4342 "EUR" : {"€" , "Euro" },
4443 "GBP" : {"£" , "Pound Sterling" },
@@ -52,7 +51,7 @@ func init() {
5251 runOnceWg .Add (1 )
5352}
5453
55- func Init (chainId uint64 , eth1Endpoint , clCurrencyParam , elCurrencyParam string ) {
54+ func Init (chainId uint64 , eth1Endpoint , mainCurrencyParam , clCurrencyParam , elCurrencyParam string ) {
5655 if atomic .AddUint64 (& didInit , 1 ) > 1 {
5756 log .Warnf ("price.Init called multiple times" )
5857 return
@@ -61,21 +60,17 @@ func Init(chainId uint64, eth1Endpoint, clCurrencyParam, elCurrencyParam string)
6160 switch chainId {
6261 case 1 , 100 :
6362 default :
64- setPrice (elCurrency , elCurrency , 1 )
65- setPrice (clCurrency , clCurrency , 1 )
63+ setPrice (mainCurrency , elCurrency , 1 )
64+ setPrice (mainCurrency , clCurrency , 1 )
6665 availableCurrencies = []string {clCurrency , elCurrency }
6766 log .Warnf ("chainId not supported for fetching prices: %v" , chainId )
6867 runOnce .Do (func () { runOnceWg .Done () })
6968 return
7069 }
7170
71+ mainCurrency = mainCurrencyParam
7272 clCurrency = clCurrencyParam
7373 elCurrency = elCurrencyParam
74- if elCurrency == "xDAI" {
75- elCurrency = "DAI"
76- }
77- calcPairs [elCurrency ] = true
78- calcPairs [clCurrency ] = true
7974
8075 eClient , err := ethclient .Dial (eth1Endpoint )
8176 if err != nil {
@@ -104,34 +99,17 @@ func Init(chainId uint64, eth1Endpoint, clCurrencyParam, elCurrencyParam string)
10499 feedAddrs ["JPY/USD" ] = "0xbce206cae7f0ec07b545edde332a47c2f75bbeb3"
105100 feedAddrs ["GBP/USD" ] = "0x5c0ab2d9b5a7ed9f470386e82bb36a3613cdd4b5"
106101 feedAddrs ["AUD/USD" ] = "0x77f9710e7d0a19669a13c055f62cd80d313df022"
107-
102+ setPrice ( "ETH" , "ETH" , 1 )
108103 availableCurrencies = []string {"ETH" , "USD" , "EUR" , "GBP" , "CNY" , "CAD" , "AUD" , "JPY" }
109- case 11155111 :
110- // see: https://docs.chain.link/data-feeds/price-feeds/addresses/
111- feedAddrs ["ETH/USD" ] = "0x694AA1769357215DE4FAC081bf1f309aDC325306"
112- feedAddrs ["EUR/USD" ] = "0x1a81afB8146aeFfCFc5E50e8479e826E7D55b910"
113- feedAddrs ["JPY/USD" ] = "0x8A6af2B75F23831ADc973ce6288e5329F63D86c6"
114- feedAddrs ["GBP/USD" ] = "0x91FAB41F5f3bE955963a986366edAcff1aaeaa83"
115- feedAddrs ["AUD/USD" ] = "0xB0C712f98daE15264c8E26132BCC91C40aD4d5F9"
116-
117- availableCurrencies = []string {"ETH" , "USD" , "EUR" , "GBP" , "AUD" , "JPY" }
118104 case 100 :
119105 // see: https://docs.chain.link/data-feeds/price-feeds/addresses/?network=gnosis-chain
120106 feedAddrs ["GNO/USD" ] = "0x22441d81416430A54336aB28765abd31a792Ad37"
121- feedAddrs ["DAI /USD" ] = "0x678df3415fc31947dA4324eC63212874be5a82f8"
107+ feedAddrs ["xDAI /USD" ] = "0x678df3415fc31947dA4324eC63212874be5a82f8"
122108 feedAddrs ["EUR/USD" ] = "0xab70BCB260073d036d1660201e9d5405F5829b7a"
123109 feedAddrs ["JPY/USD" ] = "0x2AfB993C670C01e9dA1550c58e8039C1D8b8A317"
124- // feedAddrs["CHFUSD"] = "0xFb00261Af80ADb1629D3869E377ae1EEC7bE659F"
125110 feedAddrs ["ETH/USD" ] = "0xa767f745331D267c7751297D982b050c93985627"
126-
127- setPrice ("mGNO" , "GNO" , float64 (1 )/ float64 (32 ))
128111 setPrice ("GNO" , "mGNO" , 32 )
129- setPrice ("mGNO" , "mGNO" , 1 )
130- setPrice ("GNO" , "GNO" , 1 )
131-
132- calcPairs ["GNO" ] = true
133-
134- availableCurrencies = []string {"GNO" , "mGNO" , "DAI" , "ETH" , "USD" , "EUR" , "JPY" }
112+ availableCurrencies = []string {"GNO" , "mGNO" , "xDAI" , "ETH" , "USD" , "EUR" , "JPY" }
135113 default :
136114 log .Fatal (fmt .Errorf ("unsupported chainId %v" , chainId ), "" , 0 )
137115 }
@@ -166,9 +144,6 @@ func updatePrices() {
166144 pricesMu .Lock ()
167145 defer pricesMu .Unlock ()
168146 prices [pair ] = price
169- if pair == "GNO/USD" {
170- prices ["mGNO/USD" ] = price / 32
171- }
172147 return nil
173148 })
174149 }
@@ -177,19 +152,21 @@ func updatePrices() {
177152 log .Error (err , "error upating prices" , 0 )
178153 return
179154 }
180- for p := range calcPairs {
181- if err = calcPricePairs ( p ); err != nil {
182- log . Error ( err , "error calculating price pairs" , 0 , map [ string ] interface {}{ "pair" : p })
183- return
184- }
155+
156+ // add prices of main currency to all other currencies
157+ if err = addPricePairs ( mainCurrency ); err != nil {
158+ log . Error ( err , "error calculating price pairs" , 0 )
159+ return
185160 }
161+
186162 setPrice (elCurrency , elCurrency , 1 )
187163 setPrice (clCurrency , clCurrency , 1 )
188164
189165 runOnce .Do (func () { runOnceWg .Done () })
190166}
191167
192- func calcPricePairs (currency string ) error {
168+ // calculates all prices in a given currency
169+ func addPricePairs (currency string ) error {
193170 pricesMu .Lock ()
194171 defer pricesMu .Unlock ()
195172 pricesCopy := prices
@@ -221,12 +198,6 @@ func GetPrice(a, b string) float64 {
221198 runOnceWg .Wait ()
222199 pricesMu .Lock ()
223200 defer pricesMu .Unlock ()
224- if a == "xDAI" {
225- a = "DAI"
226- }
227- if b == "xDAI" {
228- b = "DAI"
229- }
230201 price , exists := prices [a + "/" + b ]
231202 if ! exists {
232203 log .WarnWithFields (log.Fields {"pair" : a + "/" + b }, "price pair not found" )
0 commit comments