2017-10-05 44 views
0

我尝试使用bitfinex库(https://www.npmjs.com/package/bitfinex)从Bitfinex调用Rest API。当使用相同的API密钥同时运行多个进程时,文档警告此错误。不过,我相信我只能立即运行一个进程,即使我生成了新的API密钥,错误仍然会发生。我正在考虑重写nonce或扩展它,但我不知道如何做到这一点。我曾在互联网上尝试过一些建议,但仍然没有成功。错误:Nonce太小 - Bitfinex api

下面是我的参考代码:

import Bitfinex = require('bitfinex'); 
import pollingtoevent = require('polling-to-event'); 
import { Logger, LoggerFactory } from '../../common'; 
import { AppDataServices } from '../../data'; 

export class BitfinexPoller { 
    private static readonly LOGGER: Logger = LoggerFactory.getLogger(); 
    private bitfinex: any = undefined; 
    private emitter: any = undefined; 
    private public_key: string = '<my-public-key>'; 
    private secret_key: string = '<my-secret-key>'; 
    private nonce: any = new Date().getTime(); 

    constructor(private appServices: AppDataServices) { 
    BitfinexPoller.LOGGER.info('Bitfinex poller init'); 

    this.bitfinex = new Bitfinex(this.public_key, this.secret_key, this.nonce); 

    // Lend book service 
    this.emitter = pollingtoevent((done: any) => { 
     this.bitfinex.lendbook('USD', (err: any, res: any, orderId: any) => { 
     done(err, res); 
     }); 
    }, { interval: 30000, eventName: 'bitfinex-lending' }); 

    this.emitter.on('bitfinex-lending', (data: any) => { 
     BitfinexPoller.LOGGER.info(data); 
     if (data.bids !== undefined) { 
     for (const row of data.bids) { 
      appServices.lendbookService.insert(BitfinexPoller.lendingData('BID', row)); 
     } 
     } 
     if (data.asks !== undefined) { 
     for (const row of data.asks) { 
      appServices.lendbookService.insert(BitfinexPoller.lendingData('ASK', row)); 
     } 
     } 
    }); 

    // Order book service 
    this.emitter = pollingtoevent((done: any) => { 
     this.bitfinex.orderbook('btcusd', (err: any, res: any, orderId: any) => { 
     done(err, res); 
     }); 
    }, { interval: 30000, eventName: 'bitfinex-order' }); 

    this.emitter.on('bitfinex-order', (data: any) => { 
     BitfinexPoller.LOGGER.info(data); 
     if (data.bids !== undefined) { 
     for (const row of data.bids) { 
      appServices.lendbookService.insert(BitfinexPoller.orderData('BID', row)); 
     } 
     } 
     if (data.asks !== undefined) { 
     for (const row of data.asks) { 
      appServices.lendbookService.insert(BitfinexPoller.orderData('ASK', row)); 
     } 
     } 
    }); 
    } 
} 

回答

1

这是最有可能你发射了快速连续两次验证的调用。您发送请求的顺序并不总是与它们处理的顺序相同,因此具有较高随机数的第二个请求正在被首先处理,导致第一个请求失败。

您可以为不同的请求创建和使用多个API密钥,或者有一个循环访问的池,因此不会多次快速连续使用相同的api密钥。

+0

是的,你说得对,我昨天就知道了。 –

相关问题