Skip to content

Commit f27b301

Browse files
committed
Implement SignTransaction, BroadcastTransaction
Allow requiredKeys override
1 parent 6fd7a93 commit f27b301

3 files changed

Lines changed: 60 additions & 11 deletions

File tree

EosSharp/EosSharp.Core/EosBase.cs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -382,9 +382,25 @@ public async Task<GetScheduledTransactionsResponse> GetScheduledTransactions(Get
382382
/// Creates a signed transaction using the signature provider and broadcasts it to the network
383383
/// </summary>
384384
/// <param name="trx">Transaction to send</param>
385+
/// <param name="requiredKeys">Override required keys to sign transaction</param>
385386
/// <returns>transaction id</returns>
386-
public async Task<string> CreateTransaction(Transaction trx)
387+
public async Task<string> CreateTransaction(Transaction trx, List<string> requiredKeys = null)
387388
{
389+
var signedTrx = await SignTransaction(trx, requiredKeys);
390+
return await BroadcastTransaction(signedTrx);
391+
}
392+
393+
/// <summary>
394+
/// Creates a signed transaction using the signature provider
395+
/// </summary>
396+
/// <param name="trx">Transaction to sign</param>
397+
/// <param name="requiredKeys">Override required keys to sign transaction</param>
398+
/// <returns>transaction id</returns>
399+
public async Task<SignedTransaction> SignTransaction(Transaction trx, List<string> requiredKeys = null)
400+
{
401+
if (trx == null)
402+
throw new ArgumentNullException("Transaction");
403+
388404
if (EosConfig.SignProvider == null)
389405
throw new ArgumentNullException("SignProvider");
390406

@@ -429,24 +445,44 @@ public async Task<string> CreateTransaction(Transaction trx)
429445
}
430446

431447
var packedTrx = await AbiSerializer.SerializePackedTransaction(trx);
432-
var availableKeys = await EosConfig.SignProvider.GetAvailableKeys();
433-
var requiredKeys = await GetRequiredKeys(availableKeys.ToList(), trx);
434-
448+
449+
if(requiredKeys == null || requiredKeys.Count == 0)
450+
{
451+
var availableKeys = await EosConfig.SignProvider.GetAvailableKeys();
452+
requiredKeys = await GetRequiredKeys(availableKeys.ToList(), trx);
453+
}
454+
435455
IEnumerable<string> abis = null;
436456

437457
if (trx.actions != null)
438458
abis = trx.actions.Select(a => a.account);
439459

440460
var signatures = await EosConfig.SignProvider.Sign(chainId, requiredKeys, packedTrx, abis);
441461

462+
return new SignedTransaction()
463+
{
464+
Signatures = signatures,
465+
PackedTransaction = packedTrx
466+
};
467+
}
468+
469+
/// <summary>
470+
/// Broadcast signed transaction to the network
471+
/// </summary>
472+
/// <param name="strx">Signed transaction to send</param>
473+
/// <returns></returns>
474+
public async Task<string> BroadcastTransaction(SignedTransaction strx)
475+
{
476+
if (strx == null)
477+
throw new ArgumentNullException("SignedTransaction");
478+
442479
var result = await Api.PushTransaction(new PushTransactionRequest()
443480
{
444-
signatures = signatures.ToArray(),
481+
signatures = strx.Signatures.ToArray(),
445482
compression = 0,
446483
packed_context_free_data = "",
447-
packed_trx = SerializationHelper.ByteArrayToHexString(packedTrx)
484+
packed_trx = SerializationHelper.ByteArrayToHexString(strx.PackedTransaction)
448485
});
449-
450486
return result.transaction_id;
451487
}
452488

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace EosSharp.Core
6+
{
7+
public class SignedTransaction
8+
{
9+
public IEnumerable<string> Signatures { get; set; }
10+
public byte[] PackedTransaction { get; set; }
11+
}
12+
}

EosSharp/EosSharp/EosSharp.csproj

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
<Copyright>Copyright 2019</Copyright>
1414
<Product>eos-sharp</Product>
1515
<PackageId>eos-sharp</PackageId>
16-
<AssemblyVersion>2.1.1.0</AssemblyVersion>
17-
<FileVersion>2.1.1.0</FileVersion>
18-
<Version>2.1.1</Version>
19-
<PackageReleaseNotes>Implement CombinedSignerProvider to allow for multiple combined signatureProviders to sign the same transaction</PackageReleaseNotes>
16+
<AssemblyVersion>2.1.2.0</AssemblyVersion>
17+
<FileVersion>2.1.2.0</FileVersion>
18+
<Version>2.1.2</Version>
19+
<PackageReleaseNotes>Implement SignTransaction, BroadcastTransaction
20+
Allow requiredKeys override</PackageReleaseNotes>
2021
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
2122
</PropertyGroup>
2223

0 commit comments

Comments
 (0)