Skip to content

Commit

Permalink
feat: add Bip and update Signer interface
Browse files Browse the repository at this point in the history
Signed-off-by: Luca Vaccaro <[email protected]>
  • Loading branch information
lvaccaro committed Dec 20, 2024
1 parent 36ed17a commit a85dc2a
Show file tree
Hide file tree
Showing 6 changed files with 252 additions and 0 deletions.
89 changes: 89 additions & 0 deletions android/src/main/java/io/lwkrn/LwkRnModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class LwkRnModule(reactContext: ReactApplicationContext) :
private var _signers = mutableMapOf<String, Signer>()
private var _txBuilders = mutableMapOf<String, TxBuilder>()
private var _contracts = mutableMapOf<String, Contract>()
private var _bips = mutableMapOf<String, Bip>()

/* Descriptor */

Expand All @@ -61,6 +62,47 @@ class LwkRnModule(reactContext: ReactApplicationContext) :
result.resolve(_descriptors[keyId]!!.toString())
}

/* Bip */

@ReactMethod
fun newBip49(
result: Promise
) {
try {
val id = randomId()
_bips[id] = Bip.newBip49()
result.resolve(id)
} catch (error: Throwable) {
result.reject("Bip newBip49 error", error.localizedMessage, error)
}
}

@ReactMethod
fun newBip84(
result: Promise
) {
try {
val id = randomId()
_bips[id] = Bip.newBip84()
result.resolve(id)
} catch (error: Throwable) {
result.reject("Bip newBip84 error", error.localizedMessage, error)
}
}

@ReactMethod
fun newBip87(
result: Promise
) {
try {
val id = randomId()
_bips[id] = Bip.newBip87()
result.resolve(id)
} catch (error: Throwable) {
result.reject("Bip newBip87 error", error.localizedMessage, error)
}
}

/* Signer */

@ReactMethod
Expand Down Expand Up @@ -112,6 +154,53 @@ class LwkRnModule(reactContext: ReactApplicationContext) :
}
}

@ReactMethod
fun keyoriginXpub(
signerId: String,
bipId: String,
result: Promise
) {
try {
val id = randomId()
val signer = _signers[signerId]
val bip = _bips[bipId]
val res = signer!!.keyoriginXpub(bip!!)
result.resolve(res)
} catch (error: Throwable) {
result.reject("Signer keyoriginXpub error", error.localizedMessage, error)
}
}

@ReactMethod
fun mnemonic(
signerId: String,
result: Promise
) {
try {
val id = randomId()
val signer = _signers[signerId]
val res = signer!!.mnemonic()
result.resolve(res)
} catch (error: Throwable) {
result.reject("Signer mnemonic error", error.localizedMessage, error)
}
}

@ReactMethod
fun createRandomSigner(
network: String,
result: Promise
) {
try {
val id = randomId()
val networkObj = setNetwork(network)
_signers[id] = Signer.random(networkObj)
result.resolve(id)
} catch (error: Throwable) {
result.reject("Signer createRandomSigner error", error.localizedMessage, error)
}
}

/* Electrum client */

@ReactMethod
Expand Down
30 changes: 30 additions & 0 deletions ios/LwkRnModule.mm
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,20 @@

@interface RCT_EXTERN_MODULE(LwkRnModule, NSObject)

/** Bip Methods */
RCT_EXTERN_METHOD(
newBip49: (RCTPromiseResolveBlock)resolve
reject: (RCTPromiseRejectBlock)reject
)
RCT_EXTERN_METHOD(
newBip84: (RCTPromiseResolveBlock)resolve
reject: (RCTPromiseRejectBlock)reject
)
RCT_EXTERN_METHOD(
newBip87: (RCTPromiseResolveBlock)resolve
reject: (RCTPromiseRejectBlock)reject
)

/** Signers Methods */
RCT_EXTERN_METHOD(
createSigner: (nonnull NSString)mnemonic
Expand All @@ -21,6 +35,22 @@ @interface RCT_EXTERN_MODULE(LwkRnModule, NSObject)
resolve: (RCTPromiseResolveBlock)resolve
reject: (RCTPromiseRejectBlock)reject
)
RCT_EXTERN_METHOD(
keyoriginXpub: (nonnull NSString)signerId
bipId: (nonnull NSString)bipId
resolve: (RCTPromiseResolveBlock)resolve
reject: (RCTPromiseRejectBlock)reject
)
RCT_EXTERN_METHOD(
mnemonic: (nonnull NSString)signerId
resolve: (RCTPromiseResolveBlock)resolve
reject: (RCTPromiseRejectBlock)reject
)
RCT_EXTERN_METHOD(
createRandomSigner: (nonnull NSString)network
resolve: (RCTPromiseResolveBlock)resolve
reject: (RCTPromiseRejectBlock)reject
)

/** Descriptors Methods */

Expand Down
90 changes: 90 additions & 0 deletions ios/LwkRnModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class LwkRnModule: NSObject {
var _psets: [String: Pset] = [:]
var _txBuilders: [String: TxBuilder] = [:]
var _contracts: [String: Contract] = [:]
var _bips: [String: Bip] = [:]

/* WolletDescriptor */
@objc
Expand All @@ -40,7 +41,48 @@ class LwkRnModule: NSObject {
resolve(_descriptors[keyId]!.description)
}

/* Bip */
@objc
func newBip49(
resolve: RCTPromiseResolveBlock,
reject: RCTPromiseRejectBlock
) -> Void {
do {
let id = randomId()
_bips[id] = try Bip.newBip49()
resolve(id)
} catch {
reject("Bip newBip49 error", error.localizedDescription, error)
}
}

@objc
func newBip84(
resolve: RCTPromiseResolveBlock,
reject: RCTPromiseRejectBlock
) -> Void {
do {
let id = randomId()
_bips[id] = try Bip.newBip84()
resolve(id)
} catch {
reject("Bip newBip84 error", error.localizedDescription, error)
}
}

@objc
func newBip87(
resolve: RCTPromiseResolveBlock,
reject: RCTPromiseRejectBlock
) -> Void {
do {
let id = randomId()
_bips[id] = try Bip.newBip87()
resolve(id)
} catch {
reject("Bip newBip87 error", error.localizedDescription, error)
}
}

/* Signer */
@objc
Expand Down Expand Up @@ -94,6 +136,54 @@ class LwkRnModule: NSObject {
reject("Signer wpkhSlip77Descriptor error", error.localizedDescription, error)
}
}

@objc
func keyoriginXpub(
_ signerId: String,
_ bipId: String,
resolve: RCTPromiseResolveBlock,
reject: RCTPromiseRejectBlock
) -> Void {
do {
let signer = _signers[signerId]
let bip = _bips[bipId]
let res = try signer?.keyoriginXpub(bip)
resolve(res)
} catch {
reject("Signer keyoriginXpub error", error.localizedDescription, error)
}
}

@objc
func mnemonic(
_ signerId: String,
resolve: RCTPromiseResolveBlock,
reject: RCTPromiseRejectBlock
) -> Void {
do {
let signer = _signers[signerId]
let res = try signer?.mnemonic()
resolve(res)
} catch {
reject("Signer mnemonic error", error.localizedDescription, error)
}
}

@objc
func createRandomSigner(
_ network: String,
resolve: RCTPromiseResolveBlock,
reject: RCTPromiseRejectBlock
) -> Void {
do {
let id = randomId()
let network = setNetwork(networkStr: network)
_signers[id] = try Signer.random(network: network)
resolve(id)
} catch {
reject("Signer createRandomSigner error", error.localizedDescription, error)
}
}

/* Electrum client */

Expand Down
18 changes: 18 additions & 0 deletions src/classes/Bip.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { NativeLoader } from './NativeLoader';

export class Bip extends NativeLoader {
id: string = '';

async newBip49(): Promise<Bip> {
this.id = await this._lwk.newBip49();
return this;
}
async newBip84(): Promise<Bip> {
this.id = await this._lwk.newBip84();
return this;
}
async newBip87(): Promise<Bip> {
this.id = await this._lwk.newBip87();
return this;
}
}
8 changes: 8 additions & 0 deletions src/classes/NativeLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ export interface NativeLwk {
createSigner(mnemonic: string, network: Network): string;
sign(signerId: string, psetId: string): string;
wpkhSlip77Descriptor(signerId: string): string;
keyoriginXpub(signerId: string, bipId: string): string;
createRandomSigner(network: Network): string;
mnemonic(signerId: string): string;

// Wollet
createWollet(
Expand Down Expand Up @@ -94,6 +97,11 @@ export interface NativeLwk {
version: number
): string;
contractAsString(id: string): string;

// Bip
newBip49(): string;
newBip84(): string;
newBip87(): string;
}

export class NativeLoader {
Expand Down
17 changes: 17 additions & 0 deletions src/classes/Signer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { NativeLoader } from './NativeLoader';
import { Pset } from './Pset';
import { Network } from '../lib/enums';
import { Descriptor } from './Descriptor';
import { Bip } from './Bip';

export class Signer extends NativeLoader {
id: string = '';
Expand All @@ -23,4 +24,20 @@ export class Signer extends NativeLoader {
let newId = await this._lwk.wpkhSlip77Descriptor(this.id);
return new Descriptor().from(newId);
}

async createRandomSigner(network: Network): Promise<Signer> {
if (!Object.values(Network).includes(network)) {
throw `Invalid network passed. Allowed values are ${Object.values(Network)}`;
}
this.id = await this._lwk.createRandomSigner(network);
return this;
}

async keyoriginXpub(bip: Bip): Promise<string> {
return await this._lwk.keyoriginXpub(this.id, bip.id);
}

async mnemonic(): Promise<string> {
return await this._lwk.mnemonic(this.id);
}
}

0 comments on commit a85dc2a

Please sign in to comment.