[ ] Call openKeepFeeEstimate and openKeep when Random Beacon clients are functional.
After group selection beacon is called for a new random entry. When entry is ready
the group selection seed is updated with the entry value in the BondedECDSAKeepFactory.
[ ] Call openKeepFeeEstimate and openKeep when Random Beacon clients are not working.
fee estimate is returned
a keep is created successfully after providing the estimated fee
[ ] Batch calls to Random Beacon: openKeepFeeEstimate and openKeep called n times quickly one after another
openKeepFeeEstimate should return the same value for each single call
openKeep should expect the same fee to be passed
all calls should succeed
the factory should be correctly reseed
reseed pool should have enough funds to trigger n-1 refunds
[ ] Reseed BondedECDSAKeepFactory when there are no funds in the reseed pool
When entry is ready the group selection seed is updated with the entry value in
the BondedECDSAKeepFactory.
[ ] Reseed BondedECDSAKeepFactory when there is enough funds in the pool to reseed
with no additional payment.
When entry is ready the group selection seed is updated with the entry value in
the BondedECDSAKeepFactory.
[ ] Reseed BondedECDSAKeepFactory with payment lower than estimated fee.
Random Beacon Integration
[ ] Call openKeepFeeEstimate and openKeep when Random Beacon clients are functional.
After group selection beacon is called for a new random entry. When entry is ready the group selection seed is updated with the entry value in the BondedECDSAKeepFactory.
[ ] Call openKeepFeeEstimate and openKeep when Random Beacon clients are not working.
[ ] Batch calls to Random Beacon:
openKeepFeeEstimate
andopenKeep
calledn
times quickly one after anotheropenKeepFeeEstimate
should return the same value for each single callopenKeep
should expect the same fee to be passedn-1
refunds[ ] Reseed BondedECDSAKeepFactory when there are no funds in the reseed pool
[ ] Reseed BondedECDSAKeepFactory when there is enough funds in the pool to reseed with no additional payment.
[ ] Reseed BondedECDSAKeepFactory with payment lower than estimated fee.
Open Keep
Positive scenarios
[X] Request with minimum group size (1) and threshold = group size :x: https://github.com/keep-network/keep-ecdsa/issues/392
[x] Request with group size # 3 and threshold = group size
[ ] Request with maximum group size (16) and threshold = group size
[x] Request with threshold = 1
[x] Request with threshold = group size - 1
[x] Request with threshold = group size
[ ] Request
n
keeps at once:n
= 10n
= 50n
= 100n
= 1000[x] Request keeps for two different Sanctioned Applications supported by at least one client at once
[x] Signers that are not part of the keep ignore the request
Verify logs.
Expected results:
Negative scenarios
[x] Request with group size = 0
[ ] Request with threshold = 0
[x] Request with threshold = group size + 1
[x] Call from not supported Sanctioned Application
Call from address that is not backed by any operator as a Sanctioned Application.
[x] Request for group size greater than the number of registered clients
Client Unavailability
[x] Request when one of the clients selected to the group is down and threshold = group size
Start a client so it's registered in the pool and close the client. Request a new keep where the client is on the list of selected members.
[x] Temporarily break a client while generating a group key when threshold = group size
restart the client (pod)
remove the client from kubernetes service
[x] Permanently break a client while generating a group key when threshold = group size
Disable the client (pod)
Sign
Positive scenarios
[x] Request signature from keep with group size = 1 :x: https://github.com/keep-network/keep-ecdsa/issues/392
[x] Request signature from keep with group size = 3
[ ] Request signature from keep with maximum group size (16)
[ ] Request signatures from
n
keeps at once:n
= 10n
= 50n
= 100n
= 1000[x] Request signatures for two different Sanctioned Applications from keeps supported by the same client
[x] Signers that are not part of the keep ignore the request
Verify logs.
Expected results:
Negative scenarios
[ ] Request signature before the public key is generated
Request gets rejected, public key has not been set yet.
[x] Request signature from a closed keep
Request gets rejected, keep is not active.
[x] Multiple concurrent executions for the same keep
Request gets rejected, only one signing process at a time is possible.
Client Unavailability
[x] Request when one of the signers is down and threshold = group size
Close the client before new signature is requested. Start the client after other clients received signing request.
Request when one of the clients selected to the group is down and threshold = group size - 1 - ❗ THRESHOLD SIGNING IS NOT SUPPORTED
Close the client before new signature is requested.
[x] Temporarily break a client while calculating a signature when threshold = group size
When client is back up it should continue signature calculation as it rejoins the process within a generation timeout.
[ ] Permanently break a client while calculating a signature when threshold = group size
Key generation should fail due to a timeout.
Close Keep
[x] Call closeKeep by the keep owner
Clients should stop supporting the keep and archive their data
Seize Signer Bonds
[x] Call seizeSignerBonds by the keep owner
Clients should stop supporting the keep and archive it's data
Submit Signature Fraud
🚫 Blocked by https://github.com/keep-network/keep-core/issues/1588
To test these scenarios easier we should expect a network of 3 operator nodes and keeps with group size of 3.
Below tests should be executed for two situations:
[ ] Submit valid signature fraud when one of keeps members operators has just a minimum stake
[ ] Submit valid signature fraud for operators that have multiplies of the minimum stake