build method
Create a transactional wallet matching the supplied properties. Resets the builder.
Implementation
Result<Wallet, String> build() {
if (_hdWallet != null) {
_rootSigningKey = _hdWallet!.rootSigningKey;
} else {
if (_mnemonic != null) {
_hdWallet = HdWallet.fromMnemonic(_mnemonic!.join(' '));
_rootSigningKey = _hdWallet!.rootSigningKey;
} else if (_rootSigningKey != null) {
_hdWallet = HdWallet(rootSigningKey: _rootSigningKey!);
} else {
return Err("wallet creation requires a 'rootPrivateKey' or 'mnemonic'");
}
}
_walletName ??= "Wallet #${_walletNameIndex++}";
if (_blockchainAdapter != null) {
if (_blockchainAdapter! is BlockfrostBlockchainAdapter) {
_networkId =
(_blockchainAdapter as BlockfrostBlockchainAdapter).networkId;
}
} else {
_networkId ??= NetworkId.mainnet;
final adapterResult = _lookupOrCreateBlockchainAdapter(
networkId: _networkId!,
key: _networkId! == NetworkId.mainnet
? _mainnetAdapterKey
: _testnetAdapterKey,
);
if (adapterResult.isErr()) return Err(adapterResult.unwrapErr());
_blockchainAdapter = adapterResult.unwrap();
}
final stakeKeyPair = _hdWallet!.deriveAddressKeys(role: stakingRole);
final stakeAddress = _hdWallet!.toRewardAddress(
spend: stakeKeyPair.verifyKey!, networkId: _networkId!);
final addressKeyPair = _hdWallet!.deriveAddressKeys(account: accountIndex);
//printKey(addressKeyPair);
final wallet = WalletImpl(
blockchainAdapter: _blockchainAdapter!,
stakeAddress: stakeAddress,
addressKeyPair: addressKeyPair,
walletName: _walletName!,
hdWallet: _hdWallet!,
coinSelectionFunction: _coinSelectionFunction,
);
reset();
return Ok(wallet);
}