Home > OS >  Kraken API authentication sample converted from python to Google apps script is not returning the sa
Kraken API authentication sample converted from python to Google apps script is not returning the sa

Time:10-24

I am trying to convert python kraken API auth to Google Script to use it in a Google Spreadsheet, but with no luck.

# python sample    
def get_kraken_signature(urlpath, data, secret):

    postdata = urllib.parse.urlencode(data)
    encoded = (str(data['nonce'])   postdata).encode()
    message = urlpath.encode()   hashlib.sha256(encoded).digest()

    mac = hmac.new(base64.b64decode(secret), message, hashlib.sha512)
    sigdigest = base64.b64encode(mac.digest())
    return sigdigest.decode()

api_sec = "kQH5HW/8p1uGOVjbgWA7FunAmGO8lsSUXNsu3eow76sz84Q18fWxnyRzBHCd3pd5nE9qa99HAZtuZuj6F1huXg=="

data = {
    "nonce": "1616492376594", 
    "ordertype": "limit", 
    "pair": "XBTUSD",
    "price": 37500, 
    "type": "buy",
    "volume": 1.25
}

signature = get_kraken_signature("/0/private/AddOrder", data, api_sec)
print("API-Sign: {}".format(signature))
# prints API-Sign: 4/dpxb3iT4tp/ZCVEwSnEsLxx0bqyhLpdfOpc6fn7OR8 UClSV5n9E6aSS8MPtnRfp32bAb0nmbRn6H8ndwLUQ==

I ended up with this, but it's not returning the same output.

# google script sample from my sheet
function get_kraken_sinature(url, data, nonce, secret) {
  var message = url   Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, Utilities.base64Encode(nonce   data));
  var base64Secret = Utilities.base64Decode(secret);
  var mac = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, secret);
  return Utilities.base64Encode(mac);
}

signature = get_kraken_signature("/0/private/AddOrder", data, api_sec)
print("API-Sign: {}".format(signature))
# prints API-Sign: Jn6Zk8v41uvMWOY/RTBTrb7zhGxyAOTclFFe7lySodBnEnXErfJgIcQb90opFwccuKDd0Nt1l71HT3V9 P8pUQ==

Both code samples should do the same, and are supposed to output an identical API-Sign key. They are not at this stage, and I am wondering why is that.

CodePudding user response:

I believe your goal is as follows.

  • You want to convert your python script to Google Apps Script.
  • In your Google Apps Script, you have already confirmed that the script for requesting works fine. You want to convert get_kraken_signature of your python script to Google Apps Script.

In this case, how about the following modified script?

Modified script:

function get_kraken_sinature(url, data, nonce, secret) {
  var str = Object.entries(data).map(([k, v]) => `${k}=${v}`).join("&");
  var message = Utilities.newBlob(url).getBytes().concat(Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, nonce   str));
  var mac = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, message, Utilities.base64Decode(secret));
  return Utilities.base64Encode(mac);
}

// Please run this function.
function main() {
  const data = {
    "nonce": "1616492376594",
    "ordertype": "limit",
    "pair": "XBTUSD",
    "price": 37500,
    "type": "buy",
    "volume": 1.25
  };
  var url = "/0/private/AddOrder";
  var nonce = "1616492376594";
  var secret = "kQH5HW/8p1uGOVjbgWA7FunAmGO8lsSUXNsu3eow76sz84Q18fWxnyRzBHCd3pd5nE9qa99HAZtuZuj6F1huXg==";
  var res = get_kraken_sinature(url, data, nonce, secret);
  console.log(res)
}

References:

  • Related