XO wallet integration

This commit is contained in:
Jim Hamill
2025-05-05 03:19:47 +00:00
parent f9fe792542
commit e0a554e897
14 changed files with 745 additions and 213 deletions
+16 -17
View File
@@ -59,22 +59,24 @@ export type WalletHDGenesisData = {
export class WalletHD extends BaseWallet {
static async from<T extends typeof WalletHD>(
this: T,
services: WalletDependencies,
deps: WalletDependencies,
genesisData: WalletHDGenesisData,
) {
// Assign in memory stores as defaults in case otherwise not provided.
const servicesFinal = {
...{
// Default to an in-memory-only Activity store.
activities: await Activities.fromStores(StoreInMemory.from()),
store: new StoreInMemory(),
cache: new StoreInMemory(),
},
...services,
// Assign defaults if not otherwise provideed.
const activities = deps.activities
? deps.activities
: await Activities.from();
const cache = deps.cache ? deps.cache : StoreInMemory.from();
// Assign our final dependencies.
const depsFinal = {
activities,
cache,
blockchain: deps.blockchain,
};
// Return a new instance of WalletHD.
return new this(servicesFinal, genesisData) as InstanceType<T>;
return new this(depsFinal, genesisData) as InstanceType<T>;
}
// Dependencies.
@@ -158,10 +160,6 @@ export class WalletHD extends BaseWallet {
);
}
async getActivities(): Promise<Activities> {
return this.activities;
}
async start() {
// Get the address gap.
// TODO: This should come from activities.
@@ -263,7 +261,7 @@ export class WalletHD extends BaseWallet {
const unspentDirectives = await Promise.all(fetchPromises);
// Flatten them.
const unspentsFlattened = unspentDirectives.flat();
const unspentsFlattened = ExtMap.flatten(unspentDirectives);
// Return the unspents.
return unspentsFlattened;
@@ -358,7 +356,7 @@ export class WalletHD extends BaseWallet {
// Build the transaction.
const tx = TransactionBuilder.build(
txTemplateFinal,
unspents,
unspents.toArray(),
changeLockingBytecode,
);
@@ -398,6 +396,7 @@ export class WalletHD extends BaseWallet {
// Create a child P2PKH wallet for this Private Key.
const wallet = await WalletP2PKH.from(
{
activities: this.activities,
blockchain: this.blockchain,
cache: this.cache,
},