@@ -399,43 +399,47 @@ func (f *clientPool) serveCapQuery(id enode.ID, freeID string, data []byte) []by
399399 return nil
400400 }
401401 result := make (vflux.CapacityQueryReply , len (req .AddTokens ))
402- if f .synced () {
403- node := f .ns .GetNode (id )
404- if node == nil {
405- node = enode .SignNull (& enr.Record {}, id )
406- }
407- c , _ := f .ns .GetField (node , clientInfoField ).(* clientInfo )
408- if c == nil {
409- c = & clientInfo {node : node }
410- f .ns .SetField (node , clientInfoField , c )
411- f .ns .SetField (node , connAddressField , freeID )
412- defer func () {
413- f .ns .SetField (node , connAddressField , nil )
414- f .ns .SetField (node , clientInfoField , nil )
415- }()
416- if c .balance , _ = f .ns .GetField (node , f .BalanceField ).(* vfs.NodeBalance ); c .balance == nil {
417- log .Error ("BalanceField is missing" , "node" , node .ID ())
418- return nil
419- }
402+ if ! f .synced () {
403+ capacityQueryZeroMeter .Mark (1 )
404+ reply , _ := rlp .EncodeToBytes (& result )
405+ return reply
406+ }
407+
408+ node := f .ns .GetNode (id )
409+ if node == nil {
410+ node = enode .SignNull (& enr.Record {}, id )
411+ }
412+ c , _ := f .ns .GetField (node , clientInfoField ).(* clientInfo )
413+ if c == nil {
414+ c = & clientInfo {node : node }
415+ f .ns .SetField (node , clientInfoField , c )
416+ f .ns .SetField (node , connAddressField , freeID )
417+ defer func () {
418+ f .ns .SetField (node , connAddressField , nil )
419+ f .ns .SetField (node , clientInfoField , nil )
420+ }()
421+ if c .balance , _ = f .ns .GetField (node , f .BalanceField ).(* vfs.NodeBalance ); c .balance == nil {
422+ log .Error ("BalanceField is missing" , "node" , node .ID ())
423+ return nil
420424 }
421- // use vfs.CapacityCurve to answer request for multiple newly bought token amounts
422- curve := f .pp .GetCapacityCurve ().Exclude (id )
423- bias := time .Second * time .Duration (req .Bias )
424- if f .connectedBias > bias {
425- bias = f .connectedBias
425+ }
426+ // use vfs.CapacityCurve to answer request for multiple newly bought token amounts
427+ curve := f .pp .GetCapacityCurve ().Exclude (id )
428+ bias := time .Second * time .Duration (req .Bias )
429+ if f .connectedBias > bias {
430+ bias = f .connectedBias
431+ }
432+ pb , _ := c .balance .GetBalance ()
433+ for i , addTokens := range req .AddTokens {
434+ add := addTokens .Int64 ()
435+ result [i ] = curve .MaxCapacity (func (capacity uint64 ) int64 {
436+ return c .balance .EstimatePriority (capacity , add , 0 , bias , false ) / int64 (capacity )
437+ })
438+ if add <= 0 && uint64 (- add ) >= pb && result [i ] > f .minCap {
439+ result [i ] = f .minCap
426440 }
427- pb , _ := c .balance .GetBalance ()
428- for i , addTokens := range req .AddTokens {
429- add := addTokens .Int64 ()
430- result [i ] = curve .MaxCapacity (func (capacity uint64 ) int64 {
431- return c .balance .EstimatePriority (capacity , add , 0 , bias , false ) / int64 (capacity )
432- })
433- if add <= 0 && uint64 (- add ) >= pb && result [i ] > f .minCap {
434- result [i ] = f .minCap
435- }
436- if result [i ] < f .minCap {
437- result [i ] = 0
438- }
441+ if result [i ] < f .minCap {
442+ result [i ] = 0
439443 }
440444 }
441445 // add first result to metrics (don't care about priority client multi-queries yet)
0 commit comments