Skip to content

Commit 4f54079

Browse files
authored
wallet v2 (#122)
1 parent 39664a0 commit 4f54079

19 files changed

Lines changed: 205 additions & 212 deletions

File tree

examples/developer-controlled-wallet/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ async function main() {
4646

4747
// Get Cardano wallet
4848
const { cardanoWallet: cardano } = await sdk.wallet.getWallet(info.id, "cardano");
49-
const addresses = cardano!.getAddresses();
50-
console.log("Cardano base address:", addresses.baseAddressBech32);
49+
const cardanoAddress = await cardano!.getChangeAddressBech32();
50+
console.log("Cardano base address:", cardanoAddress);
5151

5252
// Get Spark wallet info
5353
const sparkWalletInfo = await sdk.wallet.sparkIssuer.getWallet(info.id);

examples/nextjs/app/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export default function Home() {
4848
const user = web3Wallet.getUser();
4949

5050
const cardanoAddress =
51-
(await web3Wallet.cardano.getChangeAddress()) || "";
51+
(await web3Wallet.cardano.getChangeAddressBech32()) || "";
5252
const bitcoinAddresses = await web3Wallet.bitcoin.getAddresses();
5353
const bitcoinAddress = bitcoinAddresses[0]?.address || "";
5454
const sparkAddressInfo = web3Wallet.spark.getAddress();

examples/react-native/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export default function App() {
6464
const user = web3Wallet.getUser();
6565

6666
const cardanoAddress =
67-
(await web3Wallet.cardano.getChangeAddress()) || "";
67+
(await web3Wallet.cardano.getChangeAddressBech32()) || "";
6868
const bitcoinAddresses = await web3Wallet.bitcoin.getAddresses();
6969
const bitcoinAddress = bitcoinAddresses[0]?.address || "";
7070
const sparkAddressInfo = web3Wallet.spark.getAddress();

examples/third-party-auth/app/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export default function Home() {
5050
refreshToken: token as string,
5151
});
5252

53-
console.log(await wallet.cardano.getChangeAddress());
53+
console.log(await wallet.cardano.getChangeAddressBech32());
5454
}}
5555
>
5656
Auto Sign In With Token{" "}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@utxos/sdk",
3-
"version": "0.1.5",
3+
"version": "0.2.0",
44
"description": "UTXOS SDK - Web3 infrastructure platform for UTXO blockchains",
55
"main": "./dist/index.cjs",
66
"module": "./dist/index.js",
@@ -66,7 +66,7 @@
6666
"@meshsdk/common": "1.9.0-beta.89",
6767
"@meshsdk/core-cst": "1.9.0-beta.89",
6868
"@meshsdk/transaction": "1.9.0-beta.89",
69-
"@meshsdk/wallet": "1.9.0-beta.89",
69+
"@meshsdk/wallet": "2.0.0-beta.5",
7070
"@peculiar/webcrypto": "^1.5.0",
7171
"axios": "^1.8.3",
7272
"base32-encoding": "^1.0.0",

src/functions/client/derive-wallet.test.ts

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ import { encryptWithCipher } from "../crypto";
33
import { spiltKeyIntoShards } from "../key-shard";
44

55
// Mock external wallet SDKs
6+
const mockCardanoWalletInstance = {
7+
getUsedAddressesBech32: jest.fn().mockResolvedValue(["addr_test1..."]),
8+
};
9+
610
jest.mock("@meshsdk/wallet", () => ({
7-
MeshWallet: jest.fn().mockImplementation(() => ({
8-
init: jest.fn().mockResolvedValue(undefined),
9-
getUsedAddresses: jest.fn().mockResolvedValue(["addr_test1..."]),
10-
})),
11+
MeshCardanoHeadlessWallet: {
12+
fromMnemonic: jest.fn().mockResolvedValue(mockCardanoWalletInstance),
13+
},
1114
}));
1215

1316
jest.mock("@meshsdk/bitcoin", () => ({
@@ -28,7 +31,7 @@ jest.mock("@buildonspark/spark-sdk", () => ({
2831

2932
// Import after mocks
3033
import { clientDeriveWallet } from "./derive-wallet";
31-
import { MeshWallet } from "@meshsdk/wallet";
34+
import { MeshCardanoHeadlessWallet } from "@meshsdk/wallet";
3235
import { EmbeddedWallet } from "@meshsdk/bitcoin";
3336
import { SparkWallet } from "@buildonspark/spark-sdk";
3437

@@ -122,7 +125,7 @@ describe("clientDeriveWallet", () => {
122125
expect(EmbeddedWallet).toHaveBeenCalledWith(
123126
expect.objectContaining({ network: "Testnet" }),
124127
);
125-
expect(MeshWallet).toHaveBeenCalledWith(
128+
expect(MeshCardanoHeadlessWallet.fromMnemonic).toHaveBeenCalledWith(
126129
expect.objectContaining({ networkId: 0 }),
127130
);
128131
expect(SparkWallet.initialize).toHaveBeenCalledWith(
@@ -146,7 +149,7 @@ describe("clientDeriveWallet", () => {
146149
expect(EmbeddedWallet).toHaveBeenCalledWith(
147150
expect.objectContaining({ network: "Mainnet" }),
148151
);
149-
expect(MeshWallet).toHaveBeenCalledWith(
152+
expect(MeshCardanoHeadlessWallet.fromMnemonic).toHaveBeenCalledWith(
150153
expect.objectContaining({ networkId: 1 }),
151154
);
152155
expect(SparkWallet.initialize).toHaveBeenCalledWith(
@@ -241,24 +244,6 @@ describe("clientDeriveWallet", () => {
241244
expect(result.key).toBe(testMnemonic);
242245
});
243246

244-
it("initializes cardano wallet", async () => {
245-
const shards = await spiltKeyIntoShards(testMnemonic);
246-
const deviceKey = await deriveKeyFromPassword("device-password");
247-
248-
const encryptedDeviceShard = await encryptWithCipher({
249-
data: shards[0]!,
250-
key: deviceKey,
251-
});
252-
253-
const result = await clientDeriveWallet(
254-
encryptedDeviceShard,
255-
deviceKey,
256-
shards[1]!,
257-
0,
258-
);
259-
260-
expect(result.cardanoWallet.init).toHaveBeenCalled();
261-
});
262247
});
263248

264249
describe("clientDeriveWallet with 24-word mnemonic", () => {

src/functions/client/derive-wallet.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { IBitcoinProvider } from "@meshsdk/bitcoin";
2+
import { IFetcher } from "@meshsdk/common";
23
import { decryptWithCipher } from "../crypto";
34
import { combineShardsBuildWallet } from "../key-shard";
45

@@ -8,6 +9,7 @@ export async function clientDeriveWallet(
89
custodialShard: string,
910
networkId: 0 | 1,
1011
bitcoinProvider?: IBitcoinProvider,
12+
fetcher?: IFetcher,
1113
) {
1214
const keyShare1 = await decryptWithCipher({
1315
encryptedDataJSON: encryptedKeyShard,
@@ -21,6 +23,7 @@ export async function clientDeriveWallet(
2123
keyShare1,
2224
keyShare2,
2325
bitcoinProvider,
26+
fetcher,
2427
);
2528

2629
return { bitcoinWallet, cardanoWallet, sparkWallet, key };

src/functions/client/generate-wallet.test.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import { crypto } from "../crypto";
22

33
// Mock external wallet SDKs
4+
const mockCardanoWalletInstance = {
5+
getChangeAddressBech32: jest.fn().mockResolvedValue(
6+
"addr_test1qz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3jcu5d8ps7zex2k2xt3uqxgjqnnj83ws8lhrn648jjxtwq2ytjqp",
7+
),
8+
};
9+
410
jest.mock("@meshsdk/wallet", () => ({
5-
MeshWallet: jest.fn().mockImplementation(() => ({
6-
init: jest.fn().mockResolvedValue(undefined),
7-
getAddresses: jest.fn().mockResolvedValue({
8-
baseAddressBech32:
9-
"addr_test1qz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3jcu5d8ps7zex2k2xt3uqxgjqnnj83ws8lhrn648jjxtwq2ytjqp",
10-
}),
11-
})),
11+
MeshCardanoHeadlessWallet: {
12+
fromMnemonic: jest.fn().mockResolvedValue(mockCardanoWalletInstance),
13+
},
1214
}));
1315

1416
jest.mock("@meshsdk/common", () => ({
@@ -47,7 +49,7 @@ jest.mock("@buildonspark/spark-sdk", () => ({
4749
// Import after mocks
4850
import { clientGenerateWallet } from "./generate-wallet";
4951
import { generateMnemonic } from "@meshsdk/common";
50-
import { MeshWallet } from "@meshsdk/wallet";
52+
import { MeshCardanoHeadlessWallet } from "@meshsdk/wallet";
5153
import { EmbeddedWallet } from "@meshsdk/bitcoin";
5254
import { SparkWallet } from "@buildonspark/spark-sdk";
5355
import { decryptWithCipher } from "../crypto";
@@ -204,13 +206,13 @@ describe("clientGenerateWallet", () => {
204206
);
205207
});
206208

207-
it("creates MeshWallet with networkId 1", async () => {
209+
it("creates MeshCardanoHeadlessWallet with networkId 1", async () => {
208210
const deviceKey = await deriveKeyFromPassword("device-password");
209211
const recoveryKey = await deriveKeyFromPassword("recovery-password");
210212

211213
await clientGenerateWallet(deviceKey, recoveryKey);
212214

213-
expect(MeshWallet).toHaveBeenCalledWith(
215+
expect(MeshCardanoHeadlessWallet.fromMnemonic).toHaveBeenCalledWith(
214216
expect.objectContaining({ networkId: 1 }),
215217
);
216218
});

src/functions/client/generate-wallet.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MeshWallet } from "@meshsdk/wallet";
1+
import { MeshCardanoHeadlessWallet } from "@meshsdk/wallet";
22
import { generateMnemonic } from "@meshsdk/common";
33
import { deserializeBech32Address } from "@meshsdk/core-cst";
44
import { EmbeddedWallet } from "@meshsdk/bitcoin";
@@ -47,18 +47,15 @@ export async function clientGenerateWallet(
4747
const bitcoinMainnetPubKeyHash = bitcoinMainnetWallet.getPublicKey();
4848

4949
/* cardano */
50-
const cardanoWallet = new MeshWallet({
50+
const cardanoWallet = await MeshCardanoHeadlessWallet.fromMnemonic({
51+
mnemonic: mnemonic.split(" "),
5152
networkId: 1,
52-
key: {
53-
type: "mnemonic",
54-
words: mnemonic.split(" "),
55-
},
53+
walletAddressType: 1,
5654
});
57-
await cardanoWallet.init();
5855

59-
const cardanoAddresses = await cardanoWallet.getAddresses();
56+
const cardanoBaseAddress = await cardanoWallet.getChangeAddressBech32();
6057
const cardanoKeyHashes = deserializeBech32Address(
61-
cardanoAddresses.baseAddressBech32!,
58+
cardanoBaseAddress,
6259
);
6360

6461
/* spark */

src/functions/client/recovery.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { shamirCombine } from "../key-shard";
66

77
// Mock external wallet SDKs
88
jest.mock("@meshsdk/wallet", () => ({
9-
MeshWallet: jest.fn().mockImplementation(() => ({
10-
init: jest.fn().mockResolvedValue(undefined),
11-
})),
9+
MeshCardanoHeadlessWallet: {
10+
fromMnemonic: jest.fn().mockResolvedValue({}),
11+
},
1212
}));
1313

1414
jest.mock("@meshsdk/bitcoin", () => ({

0 commit comments

Comments
 (0)