Skip to content

Commit ec33008

Browse files
committed
Fix fee voting for replenishment
1 parent 0e49647 commit ec33008

File tree

6 files changed

+27
-18
lines changed

6 files changed

+27
-18
lines changed

src/Stratis.Bitcoin.Features.Interop/InteropBehavior.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private async Task ProcessConversionRequestPayloadAsync(INetworkPeer peer, Conve
120120
if (!this.federationManager.IsFederationMember)
121121
return;
122122

123-
this.logger.LogDebug($"Conversion request payload request for id '{payload.RequestId}' received from '{peer.PeerEndPoint.Address}':'{peer.RemoteSocketEndpoint.Address}' proposing transaction ID '{payload.TransactionId}', (IsTransfer: {payload.IsTransfer}).");
123+
this.logger.LogDebug($"Conversion request payload request for id '{payload.RequestId}' received from '{peer.PeerEndPoint.Address}':'{peer.RemoteSocketEndpoint.Address}' proposing transaction ID '{payload.TransactionId}', (IsTransfer: {payload.IsTransfer}, IsReplenishment: {payload.IsReplenishment}).");
124124

125125
if (payload.TransactionId == BigInteger.MinusOne)
126126
return;
@@ -168,9 +168,9 @@ private async Task ProcessConversionRequestPayloadAsync(INetworkPeer peer, Conve
168168
return;
169169
}
170170

171-
// Only add votes if the conversion request has not already been finalized.
171+
// Only add votes if the conversion request has not already been finalized or if it is a replenishment.
172172
ConversionRequest conversionRequest = this.conversionRequestRepository.Get(payload.RequestId);
173-
if (conversionRequest != null && conversionRequest.RequestStatus != ConversionRequestStatus.VoteFinalised)
173+
if ((conversionRequest != null && conversionRequest.RequestStatus != ConversionRequestStatus.VoteFinalised) || payload.IsReplenishment)
174174
this.conversionRequestCoordinationService.AddVote(payload.RequestId, payload.TransactionId, pubKey);
175175

176176
if (payload.IsRequesting)
@@ -179,7 +179,7 @@ private async Task ProcessConversionRequestPayloadAsync(INetworkPeer peer, Conve
179179
await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
180180

181181
string signature = this.federationManager.CurrentFederationKey.SignMessage(payload.RequestId + payload.TransactionId);
182-
await this.AttachedPeer.SendMessageAsync(ConversionRequestPayload.Reply(payload.RequestId, payload.TransactionId, signature, payload.DestinationChain, payload.IsTransfer)).ConfigureAwait(false);
182+
await this.AttachedPeer.SendMessageAsync(ConversionRequestPayload.Reply(payload.RequestId, payload.TransactionId, signature, payload.DestinationChain, payload.IsTransfer, payload.IsReplenishment)).ConfigureAwait(false);
183183
}
184184
}
185185

src/Stratis.Bitcoin.Features.Interop/InteropPoller.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1452,7 +1452,7 @@ private async Task PerformReplenishmentAsync(IETHClient clientForDestinationChai
14521452
// Now we need to broadcast the mint transactionId to the other multisig nodes so that they can sign it off.
14531453
// TODO: The other multisig nodes must be careful not to blindly trust that any given transactionId relates to a mint transaction. Need to validate the recipient
14541454

1455-
await this.BroadcastCoordinationVoteRequestAsync(mintRequestId, mintTransactionId, request.DestinationChain, false).ConfigureAwait(false);
1455+
await this.BroadcastCoordinationVoteRequestAsync(mintRequestId, mintTransactionId, request.DestinationChain, false, true).ConfigureAwait(false);
14561456
}
14571457
else
14581458
this.logger.Info("Insufficient reserve balance remaining, waiting for originator to initiate mint transaction to replenish reserve.");
@@ -1479,7 +1479,7 @@ private async Task PerformReplenishmentAsync(IETHClient clientForDestinationChai
14791479
{
14801480
this.logger.Debug("Originator broadcasting id {0}.", mintTransactionId);
14811481

1482-
await this.BroadcastCoordinationVoteRequestAsync(mintRequestId, mintTransactionId, request.DestinationChain, false).ConfigureAwait(false);
1482+
await this.BroadcastCoordinationVoteRequestAsync(mintRequestId, mintTransactionId, request.DestinationChain, false, true).ConfigureAwait(false);
14831483
}
14841484
else
14851485
{
@@ -1495,7 +1495,7 @@ private async Task PerformReplenishmentAsync(IETHClient clientForDestinationChai
14951495
this.conversionRequestCoordinationService.AddVote(mintRequestId, ourTransactionId, this.federationManager.CurrentFederationKey.PubKey);
14961496

14971497
// Broadcast our vote.
1498-
await this.BroadcastCoordinationVoteRequestAsync(mintRequestId, ourTransactionId, request.DestinationChain, false).ConfigureAwait(false);
1498+
await this.BroadcastCoordinationVoteRequestAsync(mintRequestId, ourTransactionId, request.DestinationChain, false, true).ConfigureAwait(false);
14991499
}
15001500
}
15011501

@@ -1556,10 +1556,10 @@ private async Task PerformReplenishmentAsync(IETHClient clientForDestinationChai
15561556
}
15571557
}
15581558

1559-
private async Task BroadcastCoordinationVoteRequestAsync(string requestId, BigInteger transactionId, DestinationChain destinationChain, bool isTransfer)
1559+
private async Task BroadcastCoordinationVoteRequestAsync(string requestId, BigInteger transactionId, DestinationChain destinationChain, bool isTransfer, bool isReplenishment = false)
15601560
{
15611561
string signature = this.federationManager.CurrentFederationKey.SignMessage(requestId + ((int)transactionId));
1562-
await this.federatedPegBroadcaster.BroadcastAsync(ConversionRequestPayload.Request(requestId, (int)transactionId, signature, destinationChain, isTransfer)).ConfigureAwait(false);
1562+
await this.federatedPegBroadcaster.BroadcastAsync(ConversionRequestPayload.Request(requestId, (int)transactionId, signature, destinationChain, isTransfer, isReplenishment)).ConfigureAwait(false);
15631563
}
15641564

15651565
private BigInteger CoinsToWei(ulong satoshi)

src/Stratis.Bitcoin.Features.Interop/InteropPollerStateMachine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ private string DetermineTransactionTypeForLog(ConversionRequest request, bool is
235235
private async Task BroadcastCoordinationVoteRequestAsync(string requestId, BigInteger transactionId, DestinationChain destinationChain, bool isTransfer)
236236
{
237237
string signature = this.federationManager.CurrentFederationKey.SignMessage(requestId + ((int)transactionId));
238-
await this.federatedPegBroadcaster.BroadcastAsync(ConversionRequestPayload.Request(requestId, (int)transactionId, signature, destinationChain, isTransfer)).ConfigureAwait(false);
238+
await this.federatedPegBroadcaster.BroadcastAsync(ConversionRequestPayload.Request(requestId, (int)transactionId, signature, destinationChain, isTransfer, false)).ConfigureAwait(false);
239239
}
240240
}
241241
}

src/Stratis.Bitcoin.Features.Interop/Payloads/ConversionRequestPayload.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public sealed class ConversionRequestPayload : Payload
1313
private int destinationChain;
1414
private bool isRequesting;
1515
private bool isTransfer;
16+
private bool isReplenishment;
1617

1718
public string RequestId { get { return this.requestId; } }
1819

@@ -34,19 +35,26 @@ public sealed class ConversionRequestPayload : Payload
3435
/// </summary>
3536
public bool IsTransfer { get { return this.isTransfer; } }
3637

38+
/// <summary>
39+
/// <c>True</c> if the request in question is for a wStrax replenishment transaction.
40+
/// <c>False</c> if not.
41+
/// </summary>
42+
public bool IsReplenishment { get { return this.isReplenishment; } }
43+
3744
/// <summary>Parameterless constructor needed for deserialization.</summary>
3845
public ConversionRequestPayload()
3946
{
4047
}
4148

42-
private ConversionRequestPayload(string requestId, int transactionId, string signature, DestinationChain destinationChain, bool isRequesting, bool isTransfer)
49+
private ConversionRequestPayload(string requestId, int transactionId, string signature, DestinationChain destinationChain, bool isRequesting, bool isTransfer, bool isReplenishment)
4350
{
4451
this.requestId = requestId;
4552
this.transactionId = transactionId;
4653
this.signature = signature;
4754
this.destinationChain = (int)destinationChain;
4855
this.isRequesting = isRequesting;
4956
this.isTransfer = isTransfer;
57+
this.isReplenishment = isReplenishment;
5058
}
5159

5260
/// <inheritdoc/>
@@ -58,16 +66,17 @@ public override void ReadWriteCore(BitcoinStream stream)
5866
stream.ReadWrite(ref this.destinationChain);
5967
stream.ReadWrite(ref this.isRequesting);
6068
stream.ReadWrite(ref this.isTransfer);
69+
stream.ReadWrite(ref this.isReplenishment);
6170
}
6271

63-
public static ConversionRequestPayload Request(string requestId, int transactionId, string signature, DestinationChain destinationChain, bool isTransfer)
72+
public static ConversionRequestPayload Request(string requestId, int transactionId, string signature, DestinationChain destinationChain, bool isTransfer, bool isReplenishment)
6473
{
65-
return new ConversionRequestPayload(requestId, transactionId, signature, destinationChain, true, isTransfer);
74+
return new ConversionRequestPayload(requestId, transactionId, signature, destinationChain, true, isTransfer, isReplenishment);
6675
}
6776

68-
public static ConversionRequestPayload Reply(string requestId, int transactionId, string signature, DestinationChain destinationChain, bool isTransfer)
77+
public static ConversionRequestPayload Reply(string requestId, int transactionId, string signature, DestinationChain destinationChain, bool isTransfer, bool isReplenishment)
6978
{
70-
return new ConversionRequestPayload(requestId, transactionId, signature, destinationChain, false, isTransfer);
79+
return new ConversionRequestPayload(requestId, transactionId, signature, destinationChain, false, isTransfer, isReplenishment);
7180
}
7281

7382
/// <inheritdoc/>

src/Stratis.Bitcoin/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.2.3.2")]
36-
[assembly: AssemblyFileVersion("1.2.3.2")]
35+
[assembly: AssemblyVersion("1.2.3.3")]
36+
[assembly: AssemblyFileVersion("1.2.3.3")]
3737
[assembly: InternalsVisibleTo("Stratis.Bitcoin.Tests")]

src/Stratis.Bitcoin/Stratis.Bitcoin.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
1515
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
1616
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
17-
<Version>1.2.3.2</Version>
17+
<Version>1.2.3.3</Version>
1818
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
1919
<CodeAnalysisRuleSet>..\Stratis.ruleset</CodeAnalysisRuleSet>
2020
<Authors>Stratis Group Ltd.</Authors>

0 commit comments

Comments
 (0)