###### 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 tipoGET
:
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 tipoPOST
:
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)