/// <summary> /// Signs transaction /// </summary> /// <param name="profile">profile of the signer</param> /// <param name="transaction">transaction to sign</param> /// <returns>encoded signed transaction</returns> public async Task <string> SignTransaction(Profile profile, PlasmaCore.Transactions.Transaction transaction) { byte[] encodedTx = transactionEncoder.EncodeRaw(transaction); string signature = await profile.SignTransaction(encodedTx); transaction.SetSignature(profile.ID, signature.HexToByteArray()); return(transactionEncoder.EncodeSigned(transaction).ToHex(true)); }
/// <summary> /// Submits signed transactions and queue response utxos /// </summary> /// <returns></returns> public async Task ProcessTransactions() { if (CanMerge) { foreach (var transaction in Transactions) { string encodedTx = txEncoder.EncodeSigned(transaction).ToHex(true); TransactionReceipt receipt = await plasmaAPIService.SubmitTransaction(encodedTx); if (receipt != null) { UTXOData utxo = new UTXOData(); utxo.BlkNum = receipt.BlkNum; utxo.TxIndex = receipt.TxIndex; utxo.OIndex = 0; utxo.Data = transaction.Outputs[0].Value.ToBigIntegerFromRLPDecoded(); utxo.Owner = transaction.Outputs[0].Owner; utxo.Currency = transaction.Outputs[0].Currency; utxo.Position = UTXOData.CalculatePosition(utxo.BlkNum, utxo.TxIndex, utxo.OIndex); utxoList.Add(utxo); } } Transactions.Clear(); PrepareTransactions(); } }
public static string Sign(ITransactionEncoder txEncoder, Transaction transaction, string address, string privateKey) { byte[] encodedTx = txEncoder.EncodeRaw(transaction); var rawHash = new Sha3Keccack().CalculateHash(encodedTx); var ecKey = new Nethereum.Signer.EthECKey(privateKey); var ecdsaSignature = ecKey.SignAndCalculateV(rawHash); string signature = Nethereum.Signer.EthECDSASignature.CreateStringSignature(ecdsaSignature); transaction.SetSignature(address, signature.HexToByteArray()); return(txEncoder.EncodeSigned(transaction).ToHex(true)); }