Skip to content

Commit 1398e6b

Browse files
authored
Merge pull request #3730 from limebell/feature/update-validatorset
Introduce `IAccount.SetValidatorSet()` method
2 parents e025295 + 053ea90 commit 1398e6b

File tree

4 files changed

+55
-0
lines changed

4 files changed

+55
-0
lines changed

CHANGES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ Version DPoS
2020
- (Libplanet.Action) `ActionEvaluator` constructor requires
2121
`policyBeginBlockActionGetter` and `policyEndBlockActionGetter`
2222
parameters instead of the `policyBlockActionGetter` parameter. [[#3701]]
23+
- (Libplanet.Action) Added `SetValidatorSet` method to `IAccount` interface
24+
and its implementations. [[#3730]]
2325

2426
### Backward-incompatible network protocol changes
2527

@@ -36,6 +38,7 @@ Version DPoS
3638
### CLI tools
3739

3840
[#3701]: https://github.com/planetarium/libplanet/pull/3701
41+
[#3730]: https://github.com/planetarium/libplanet/pull/3730
3942

4043

4144
Version 4.1.0

Libplanet.Action/State/Account.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,11 @@ public IAccount BurnAsset(
183183
public IAccount SetValidator(Validator validator) =>
184184
UpdateValidatorSet(GetValidatorSet().Update(validator));
185185

186+
/// <inheritdoc/>
187+
[Pure]
188+
public IAccount SetValidatorSet(ValidatorSet validatorSet) =>
189+
UpdateValidatorSet(validatorSet);
190+
186191
[Pure]
187192
private Account UpdateState(
188193
Address address,

Libplanet.Action/State/IAccount.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,5 +173,16 @@ IAccount BurnAsset(
173173
/// <paramref name="validator"/> set.</returns>
174174
[Pure]
175175
IAccount SetValidator(Validator validator);
176+
177+
/// <summary>
178+
/// Sets the <see cref="ValidatorSet"/> with the given <paramref name="validatorSet"/>.
179+
/// </summary>
180+
/// <param name="validatorSet">
181+
/// A new <see cref="ValidatorSet"/> instance to update.
182+
/// </param>
183+
/// <returns>A new <see cref="IAccount"/> instance with the updated
184+
/// <paramref name="validatorSet"/>.</returns>
185+
[Pure]
186+
IAccount SetValidatorSet(ValidatorSet validatorSet);
176187
}
177188
}

Libplanet.Tests/Action/AccountTest.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,42 @@ public virtual void SetValidator()
399399
Assert.Equal(0, delta.GetValidatorSet().TotalCount);
400400
}
401401

402+
[Fact]
403+
public virtual void SetValidatorSet()
404+
{
405+
var initCount = _keys.Length;
406+
var key3 = new PrivateKey().PublicKey;
407+
var key4 = new PrivateKey().PublicKey;
408+
409+
IAccount delta = _initAccount;
410+
// delta already has 3 validators
411+
Assert.Equal(initCount, delta.GetValidatorSet().TotalCount);
412+
413+
// remove on validator, add two validators
414+
var validators = delta.GetValidatorSet().Validators.ToList();
415+
var removedValidator = validators[0];
416+
validators.Remove(validators[0]);
417+
validators.Add(new Validator(key3, 1));
418+
validators.Add(new Validator(key4, 1));
419+
delta = delta.SetValidatorSet(new ValidatorSet(validators));
420+
Assert.Equal(4, delta.GetValidatorSet().TotalCount);
421+
Assert.Contains(
422+
delta.GetValidatorSet().Validators,
423+
v => v.PublicKey.Equals(validators[0].PublicKey));
424+
Assert.Contains(
425+
delta.GetValidatorSet().Validators,
426+
v => v.PublicKey.Equals(validators[1].PublicKey));
427+
Assert.Contains(
428+
delta.GetValidatorSet().Validators,
429+
v => v.PublicKey.Equals(key3));
430+
Assert.Contains(
431+
delta.GetValidatorSet().Validators,
432+
v => v.PublicKey.Equals(key4));
433+
Assert.DoesNotContain(
434+
delta.GetValidatorSet().Validators,
435+
v => v.PublicKey.Equals(removedValidator.PublicKey));
436+
}
437+
402438
protected FungibleAssetValue Value(int currencyIndex, BigInteger quantity) =>
403439
new FungibleAssetValue(_currencies[currencyIndex], quantity, 0);
404440

0 commit comments

Comments
 (0)