Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private async Task ConnectToGdaxFix()
- {
- _socketTcpClient = new TcpClient();
- _socketTcpClient.NoDelay = true;
- _bufferEnd = 0;
- await _socketTcpClient.ConnectAsync(_gdaxFixGateway, _gdaxFixPort);
- _sslStream = new SslStream(_socketTcpClient.GetStream());
- await _sslStream.AuthenticateAsClientAsync(_gdaxFixGateway);
- byte[] buffer = new byte[2048];
- var message = await FixSendLoginMessage();
- var bytes = await _sslStream.ReadAsync(buffer, 0, buffer.Length);
- }
- private async Task<string> FixSendLoginMessage()
- {
- var sendTime = DateTime.UtcNow.ToString("yyyyMMdd-HH:mm:ss.fff");
- string msgType = "A";
- var messageSeqNumber = (++messageSeqNum).ToString();
- var senderCompId = "apiKey";
- var targetCompId = "Coinbase";
- var password = "passphrase";
- var accessSign = CreateAccessSign(
- sendTime,
- msgType,
- messageSeqNumber,
- senderCompId,
- targetCompId,
- password
- );
- var logonMessage = $"98=0{'x01'}108=30{'x01'}554={password}{'x01'}96={accessSign}{'x01'}8013=Y";
- var headerAfter9Tag = $"35={msgType}{'x01'}34={messageSeqNumber}{'x01'}52={sendTime}{'x01'}49={senderCompId}{'x01'}56={targetCompId}";
- var length = logonMessage.Length + headerAfter9Tag.Length + 1;
- var messageHeader = $"8=FIX.4.2{'x01'}9={length}{'x01'}{headerAfter9Tag}";
- var messageWithHeader = $"{messageHeader}{'x01'}{logonMessage}";
- int sum = 0;
- int len = messageWithHeader.Length;
- for (int i = 0; i < len; i++)
- {
- sum += Convert.ToChar(messageWithHeader.Substring(i, 1));
- }
- sum = sum % 256;
- var messageWithChecksum = $"{messageWithHeader}{'x01'}10={sum.ToString("000")}{'x01'}";
- byte[] buffer = Encoding.ASCII.GetBytes(messageWithChecksum);
- await _sslStream.WriteAsync(buffer, 0, buffer.Length);
- return messageWithChecksum;
- }
- private string CreateAccessSign(
- string sendingTime,
- string msgType,
- string msgSeqNumber,
- string senderCompId,
- string targetCompId,
- string password
- )
- {
- var stringToHash = string.Join('x01', sendingTime, msgType, msgSeqNumber, senderCompId, targetCompId, password);
- var privateKeyAsBytes = Encoding.UTF8.GetBytes("privateKey");
- using (var hmac = new HMACSHA256(privateKeyAsBytes))
- {
- var signature = hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToHash));
- return Convert.ToBase64String(signature);
- }
- }
Add Comment
Please, Sign In to add comment