create static method
- SignIdentity from,
- PublicKey to,
- DateTime? expiration, {
- DelegationChain? previous,
- List<
Principal> ? targets,
Create a delegation chain between two (or more) keys. By default, the expiration time will be very short (15 minutes).
To build a chain of more than 2 identities, this function needs to be called multiple times, passing the previous delegation chain into the options argument. For example:
@example const rootKey = createKey(); const middleKey = createKey(); const bottomeKey = createKey();
const rootToMiddle = await DelegationChain.create( root, middle.getPublicKey(), Date.parse('2100-01-01'), ); const middleToBottom = await DelegationChain.create( middle, bottom.getPublicKey(), Date.parse('2100-01-01'), { previous: rootToMiddle }, );
// We can now use a delegation identity that uses the delegation above: const identity = DelegationIdentity.fromDelegation(bottomKey, middleToBottom);
@param from The identity that will delegate. @param to The identity that gets delegated. It can now sign messages as if it was the identity above. @param expiration The length the delegation is valid. By default, 15 minutes from calling this function. @param options A set of options for this delegation. expiration and previous @param options.previous - Another DelegationChain that this chain should start with. @param options.targets - targets that scope the delegation (e.g. Canister Principals)
Implementation
static Future<DelegationChain> create(
SignIdentity from, PublicKey to, DateTime? expiration,
{DelegationChain? previous, List<Principal>? targets}) async {
expiration ??= DateTime.fromMillisecondsSinceEpoch(
DateTime.now().millisecondsSinceEpoch + 15 * 60 * 1000);
final delegation =
await _createSingleDelegation(from, to, expiration, targets);
return DelegationChain(
[...(previous?.delegations ?? []), delegation],
previous?.publicKey ?? from.getPublicKey().toDer(),
);
}