SchnorrSign function

Map<String, dynamic> SchnorrSign(
  1. String privateKey,
  2. Map<String, dynamic> txnDetails
)

Implementation

Map<String, dynamic> SchnorrSign(
    String privateKey, Map<String, dynamic> txnDetails) {
  var pubKey = getPubKeyFromPrivateKey(privateKey);
  Map<String, dynamic> txn = {
    'version': txnDetails['version'],
    'nonce': txnDetails['nonce'],
    'toAddr': txnDetails['toAddr'],
    'amount': txnDetails['amount'],
    'pubKey': pubKey,
    'gasPrice': txnDetails['gasPrice'],
    'gasLimit': txnDetails['gasLimit'],
    'code': txnDetails['code'] != null ? txnDetails['code'] : '',
    'data': txnDetails['data'] != null ? txnDetails['data'] : ''
  };

  Uint8List encodedTx = encodeTransactionProto(txn);

  SchnorrSignature signature = sign(
      encodedTx, numbers.hexToBytes(privateKey), numbers.hexToBytes(pubKey));

  txn.addEntries([new MapEntry('signature', signature.signature)]);
  if (verify(encodedTx, signature.r, signature.s, numbers.hexToBytes(pubKey))) {
    return txn;
  } else {
    throw 'Signature verify failure';
  }
}