build method

Result<Wallet, String> build()

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);
}