🚧

Para fazer a autenticação, é necessário criar suas Chaves de Api

Abaixo temos um exemplo para assinatura da mensagem e envio da transação.

Passo a passo:

1- Instalar a biblioteca eliptic: npm i elliptic.
2- Instalar a biblioteca crypto: npm i crypto-js.
3- Criar um objeto elliptic passando como parâmetro a criptografia: 'ed25519'.
4- Montar a query da requisição passando o timestamp e o recwindow + parâmetros obrigatórios ou opcionais do endpoint.
5- Com o objeto eliptic instanciado, invocar a função "keyFromPrivate" passando dois parâmetros: secret e digest (onde digest deve ser 'hex').
6- Criar o hash da query com a biblioteca Crypto onde o algoritmo deve ser 'sha256' e digest (onde digest deve ser 'hex').
7- Com o objeto eliptic instanciado, invocar a função 'sign' passando o hash como parâmetro e encadear a função toDER passando digest (onde digest deve ser 'hex').
8- Fazer o request para o endpoint montando o header com duas propriedades: "X-MBX-APIKEY" e "signature" e passando a query (passo 4).

No exemplo nodeJS abaixo, temos um request do tipo GET:

import { ec } from 'elliptic';
import { createHash } from 'crypto'
import { stringify } from 'urlencode'

const algorithm = new ec('ed25519');
const apiKey = "[chave_publica]";
const secret = "[chave_privada]";
const nonce = + new Date; // timestamp
const recvWindow = 5000
const data = {
    symbol: 'BTC:BRL', 
    limit: 25,
    timestamp: nonce,
    recvWindow: 5000
}
const query = stringify(data);
const clientFromPriv = algorithm.keyFromPrivate(secret, "hex");
const hash = createHash('sha256').update(query).digest('hex');
const signature = clientFromPriv.sign(hash).toDER("hex");

const response = await request.default('[URL_API]')
      .get(`[ENDPOINT]?${query}`)
      .set({ 'X-MBX-APIKEY': apiKey, 'signature': signature}) //HEADER

No exemplo nodeJS abaixo, temos um request do tipo POST:

import { ec } from 'elliptic';
import { createHash } from 'crypto'
import { stringify } from 'urlencode'

const algorithm = new ec('ed25519');
const apiKey = "[chave_publica]";
const secret = "[chave_privada]";
const nonce = + new Date; // timestamp
const recvWindow = 5000
const data = {
    symbol: 'BTC:BRL',
    side:"buy",
    type:"limit",
    amount: 10,
    price: 15.01,
    timestamp: nonce,
    recvWindow: 5000
}
const body = stringify(data);
const clientFromPriv = algorithm.keyFromPrivate(secret, "hex");
const hash = createHash('sha256').update(body).digest('hex');
const signature = clientFromPriv.sign(hash).toDER("hex");

const response = await request.default('[URL_API]')
      .post(`[ENDPOINT]`)
      .set({ 'X-MBX-APIKEY': apiKey,
       'signature': signature})
      .send(body)