Here is a sample article based on your issue:
Ethereum API Error: Delphi API + Binance + Limit Order Issue
In this article, we will understand why you are encountering an invalid signature error when using the Ethereum API in a Delphi application. We will also discuss potential solutions and provide code examples to help you troubleshoot the issue.
The Problem
The “Invalid Signature” error message appears when your Binance API request does not follow the required signature format. This can happen for a variety of reasons, such as:
- Incorrect API endpoint or method
- Inadequate account balance or authorizations
- Missing or incompatible parameters
Sample Code
To reproduce this issue, let’s use a simple example in Delphi. We will create a form that displays a button and attempts to place a limit order using the Binance API.
procedure TForm1.Button1Click(Sender: ...
begin
// Set your Binance API credentials (API key, secret key)
var
apiKey: string;
apiSecret: string;
// Initialize the Binance API object
api := TbinanceApi.Create;
api.SetApiKey(apiKey);
api.SetApiSecret(apiSecret);
// Get the current account balance
var balance: integer;
api.GetBalance('ETH', 'usdt', balance, nil, nil);
// Create a new order
var order: order;
order.Symbol: = 'BTC/USDT';
order.Side: = order.Buy;
order.Quantity: = 1;
order.MarketPrice: = float64(1000.00);
order.PricingFee: = float64(10.00); // Accept a 10% fee.
order.SellingFee: = float64(20.00); // Accept a 20% fee.
// Try to place the order
if api.Order('limit', 'buy', order) then
writeln('Order successful!');
else
writeln('Error placing order.');
end;
The Problem
In this example, we are trying to place a limit order to buy the Bitcoin/USDT pair using the Binance API. We set our API credentials and get the current account balance. We then create a new Torder object with the desired properties.
Finally, we try to place the order using api.Order('limit', 'buy', order)
.
The Solution
To resolve this issue, you need to:
- Check your signature: Make sure your endpoint and API method follow the required signature format. Binance’s API uses a specific signature scheme for limit orders.
- Check your account balance
: Make sure you have enough funds in your account to place the order.
- Use the correct Torder properties: Double-check the properties of the Torder object you pass to
api.Order()
. Specifically, check that theMarketPrice
field matches the desired price.
Here is an updated example with some additional checks:
“`delphinst1.pas
procedure TForm1.Button1Click(Sender: …
begin
// Set your Binance API credentials (API key, secret key)
var
apiKey: string;
apiSecret: string;
// Initialize the Binance API object
api := TbinanceApi.Create;
api.SetApiKey(apiKey);
api.SetApiSecret(apiSecret);
// Get the current account balance
var balance: integer;
if api.GetBalance(‘ETH’, ‘usdt’, balance, nil, nil), then
writeln(‘Account balance is valid.’);
else
writeln(‘Error getting account balance:’, api.GetBalanceError);
end;
// Create a new order
var order: order;
if order.Symbol = ‘BTC/USDT’ then
order.Side: = order.Buy;
order.Quantity: = 1;
order.MarketPrice: = float64(1000.00); // Assume a market price of $10,000
order.PricingFee: = float64(10.00); // Assume a 10% fee.
order.SellingFee: = float64(20.00); // Assume a 20% fee.
// Try placing the order
if api.Order(‘limit’, ‘buy’, order) then
writeln(‘Order placed successfully!’);
else
writeln(‘Error placing order:’, api.GetBalanceError);
end;
else
writeln(‘Invalid symbol: ‘, order.