public async Task <AdmissionControl.SubmitTransactionResponse> SendTransactionAsync( byte[] privateKey, RawTransaction rawTransaction) { var bytesTrx = rawTransaction.ToByteArray(); LibraHasher libraHasher = new LibraHasher(EHashType.RawTransaction); var hash = libraHasher.GetHash(bytesTrx); var key = Key.Import(SignatureAlgorithm.Ed25519, privateKey, KeyBlobFormat.RawPrivateKey); AdmissionControl.SubmitTransactionRequest req = new AdmissionControl.SubmitTransactionRequest(); req.SignedTxn = new SignedTransaction(); req.SignedTxn.RawTxnBytes = ByteString.CopyFrom(bytesTrx); req.SignedTxn.SenderPublicKey = ByteString.CopyFrom(key.Export(KeyBlobFormat.RawPublicKey)); var sig = SignatureAlgorithm.Ed25519.Sign(key, hash); req.SignedTxn.SenderSignature = ByteString.CopyFrom(sig); var result = await _client.SubmitTransactionAsync( req, new Metadata()); return(result); }
// public async Task<bool> TransferCoins(Account sender, string receiverAddress, ulong amount, ulong gasUnitPrice = 0, ulong maxGasAmount = 1000000) public async Task <bool> TransferCoins(Account sender, string receiverAddress, ulong amount, ulong gasUnitPrice = 0, ulong maxGasAmount = 1000000) { try { var program = new Program(); program.Code = Convert.FromBase64String(Constant.ProgamBase64Codes.PeerToPeerTxn).ToByteString(); program.Arguments.Add(new TransactionArgument { Type = TransactionArgument.Types.ArgType.Address, Data = receiverAddress.ToByteString() }); program.Arguments.Add(new TransactionArgument { Type = TransactionArgument.Types.ArgType.U64, Data = amount.ToBytes().Reverse().ToByteString() }); var transaction = new RawTransaction(); transaction.ExpirationTime = (ulong)Math.Floor((decimal)DateTimeOffset.Now.ToUnixTimeMilliseconds() / 1000) + 100; transaction.GasUnitPrice = gasUnitPrice; transaction.MaxGasAmount = maxGasAmount; var accountState = await QueryBalance(sender.Address); transaction.SequenceNumber = accountState.SequenceNumber; transaction.Program = program; transaction.SenderAccount = sender.Address.ToByteString(); var hash = new SHA3_256().ComputeVariable(Constant.HashSaltValues.RawTransactionHashSalt.FromHexToBytes().Concat(transaction.ToByteArray()).ToArray()); var senderSignature = sender.KeyPair.Sign(hash); var request = new SubmitTransactionRequest { SignedTxn = new SignedTransaction { RawTxnBytes = transaction.ToByteString(), SenderPublicKey = sender.PublicKey, SenderSignature = senderSignature.ToByteString() } }; var response = await acClient.SubmitTransactionAsync(request); return(response.AcStatus.Code == AdmissionControlStatusCode.Accepted); } catch (Exception ex) { throw ex; } }