@@ -34,6 +34,16 @@ import (
3434const (
3535 // serviceListenAddress is the listening address of the service.
3636 serviceListenAddress = "localhost:8095"
37+
38+ // supportedAssetIdStr is the hex-encoded asset ID for which this price
39+ // oracle provides exchange rates.
40+ supportedAssetIdStr = "7b4336d33b019df9438e586f83c587ca00fa6560249" +
41+ "7b93ace193e9ce53b1a67"
42+
43+ // supportedGroupKeyStr is the hex-encoded asset group key for which
44+ // this price oracle provides exchange rates.
45+ supportedGroupKeyStr = "02875ce409b587a6656357639d099ad9eb08396d0d" +
46+ "fea8930a45e742c81d6fc782"
3747)
3848
3949// setupLogger sets up the logger to write logs to a file.
@@ -65,42 +75,86 @@ type RpcPriceOracleServer struct {
6575 oraclerpc.UnimplementedPriceOracleServer
6676}
6777
68- // isSupportedSubjectAsset returns true if the given subject asset is supported
69- // by the price oracle, and false otherwise.
70- func isSupportedSubjectAsset ( subjectAsset * oraclerpc.AssetSpecifier ) bool {
78+ // isSupportedAssetID returns true if the given asset ID is supported by the
79+ // price oracle, and false otherwise.
80+ func isSupportedAssetID ( rpcAssetSpec * oraclerpc.AssetSpecifier ) bool {
7181 // Ensure that the subject asset is set.
72- if subjectAsset == nil {
82+ if rpcAssetSpec == nil {
7383 logrus .Info ("Subject asset is not set (nil)" )
7484 return false
7585 }
7686
77- supportedAssetIdStr := "7b4336d33b019df9438e586f83c587ca00fa65602497b9" +
78- "3ace193e9ce53b1a67"
7987 supportedAssetIdBytes , err := hex .DecodeString (supportedAssetIdStr )
8088 if err != nil {
8189 fmt .Println ("Error decoding supported asset hex string:" , err )
8290 return false
8391 }
8492
8593 // Check the subject asset bytes if set.
86- subjectAssetIdBytes := subjectAsset .GetAssetId ()
94+ subjectAssetIdBytes := rpcAssetSpec .GetAssetId ()
8795 if len (subjectAssetIdBytes ) > 0 {
8896 logrus .Infof ("Subject asset ID bytes populated: %x" ,
8997 supportedAssetIdBytes )
9098 return bytes .Equal (supportedAssetIdBytes , subjectAssetIdBytes )
9199 }
92100
93- subjectAssetIdStr := subjectAsset .GetAssetIdStr ()
101+ subjectAssetIdStr := rpcAssetSpec .GetAssetIdStr ()
94102 if len (subjectAssetIdStr ) > 0 {
95103 logrus .Infof ("Subject asset ID str populated: %s" ,
96104 supportedAssetIdStr )
97105 return subjectAssetIdStr == supportedAssetIdStr
98106 }
99107
100108 logrus .Infof ("Subject asset ID not set" )
109+
110+ return false
111+ }
112+
113+ // isSupportedAssetGroupKey returns true if the given asset group key is
114+ // supported by the price oracle, and false otherwise.
115+ func isSupportedAssetGroupKey (
116+ rpcAssetSpec * oraclerpc.AssetSpecifier ) bool {
117+
118+ // Ensure that the subject asset is not nil.
119+ if rpcAssetSpec == nil {
120+ logrus .Info ("Subject asset is not set (nil)" )
121+ return false
122+ }
123+
124+ supportedGroupKeyBytes , err := hex .DecodeString (supportedGroupKeyStr )
125+ if err != nil {
126+ fmt .Println ("Error decoding supported asset group key hex " +
127+ "string:" , err )
128+ return false
129+ }
130+
131+ // Check the subject asset group key bytes if set.
132+ subjectGroupKeyBytes := rpcAssetSpec .GetGroupKey ()
133+ if len (subjectGroupKeyBytes ) > 0 {
134+ logrus .Infof ("Subject asset group key bytes populated: %x" ,
135+ supportedGroupKeyBytes )
136+ return bytes .Equal (supportedGroupKeyBytes , subjectGroupKeyBytes )
137+ }
138+
139+ subjectGroupKeyStr := rpcAssetSpec .GetGroupKeyStr ()
140+ if len (subjectGroupKeyStr ) > 0 {
141+ logrus .Infof ("Subject asset group key str populated: %s" ,
142+ supportedGroupKeyStr )
143+ return subjectGroupKeyStr == supportedGroupKeyStr
144+ }
145+
146+ logrus .Infof ("Subject asset group key not set" )
147+
101148 return false
102149}
103150
151+ // isSupportedAssetID returns true if the given subject asset is
152+ // supported by the price oracle, and false otherwise.
153+ func isSupportedSubjectAsset (subjectAsset * oraclerpc.AssetSpecifier ) bool {
154+ return isSupportedAssetID (subjectAsset ) ||
155+ isSupportedAssetGroupKey (subjectAsset )
156+ }
157+
104158// getPurchaseRate returns the buy (purchase) rate for the asset. The unit of
105159// the rate is the number of TAP asset units per BTC.
106160//
@@ -265,7 +319,7 @@ func (p *RpcPriceOracleServer) QueryAssetRates(_ context.Context,
265319
266320 // Ensure that the subject asset is supported.
267321 if ! isSupportedSubjectAsset (req .SubjectAsset ) {
268- logrus .Infof ("Unsupported subject asset ID str : %v\n " ,
322+ logrus .Infof ("Unsupported subject asset: %v\n " ,
269323 req .SubjectAsset )
270324
271325 return & oraclerpc.QueryAssetRatesResponse {
0 commit comments