diff --git a/apps/playground/src/data/links-data.ts b/apps/playground/src/data/links-data.ts
index 62097829..4cdb826d 100644
--- a/apps/playground/src/data/links-data.ts
+++ b/apps/playground/src/data/links-data.ts
@@ -27,7 +27,6 @@ export const metaDataJson = {
link: "/apis/data/json",
icon: Bars3Icon,
};
-// todoß
export const metaDataValue = {
title: "Value",
desc: "Manipulate Cardano Value Easily",
@@ -52,8 +51,8 @@ export const linksData: MenuItem[] = [
metaDataMesh,
metaDataJson,
metaDataValue,
- // metaDataCbor,
- // metaDataUtils,
+ // metaDataCbor, // todo
+ // metaDataUtils, // todo
];
export const metaData = {
diff --git a/apps/playground/src/pages/apis/txbuilder/basics/index.tsx b/apps/playground/src/pages/apis/txbuilder/basics/index.tsx
index 735bc0a6..b1a9544b 100644
--- a/apps/playground/src/pages/apis/txbuilder/basics/index.tsx
+++ b/apps/playground/src/pages/apis/txbuilder/basics/index.tsx
@@ -15,12 +15,14 @@ import TxbuilderSendValues from "./send-values";
import TxbuilderSetNetwork from "./set-network";
import TxbuilderSetRequiredSigners from "./set-required-signers";
import TxbuilderSetTime from "./set-time";
+import TxbuilderMultisigNativeScript from "./multisig-native-script";
const ReactPage: NextPage = () => {
const sidebarItems = [
{ label: "Initialize Tx Builder", to: "initializeTxbuilder" },
{ label: "Send value", to: "sendValue" },
{ label: "Multi-signature", to: "multisig" },
+ // { label: "Multisig native script", to: "multisigNativeScript" },
{ label: "Build with object", to: "buildWithObject" },
{ label: "Coin selection", to: "coinSelection" },
{ label: "Set metadata", to: "cip20" },
@@ -68,6 +70,7 @@ const ReactPage: NextPage = () => {
{/* */}
+ {/* */}
{/* */}
diff --git a/apps/playground/src/pages/apis/txbuilder/basics/multisig-native-script.tsx b/apps/playground/src/pages/apis/txbuilder/basics/multisig-native-script.tsx
new file mode 100644
index 00000000..94239d49
--- /dev/null
+++ b/apps/playground/src/pages/apis/txbuilder/basics/multisig-native-script.tsx
@@ -0,0 +1,208 @@
+import {
+ AppWallet,
+ deserializeAddress,
+ ForgeScript,
+ MeshTxBuilder,
+ MeshWallet,
+ NativeScript,
+ resolveScriptHash,
+ serializeNativeScript,
+ stringToHex,
+} from "@meshsdk/core";
+import { useWallet } from "@meshsdk/react";
+
+import { getProvider } from "~/components/cardano/mesh-wallet";
+import LiveCodeDemo from "~/components/sections/live-code-demo";
+import TwoColumnsScroll from "~/components/sections/two-columns-scroll";
+import Codeblock from "~/components/text/codeblock";
+import { demoAssetMetadata, demoMnemonic } from "~/data/cardano";
+import { getTxBuilder } from "../common";
+
+// const scriptAddress =
+// "addr_test1vpd5480qj5jj4pnjwq9yxnac8l9dw2k3y6gz2cpp6jawzwq838jl8";
+// const scriptCbor =
+// "8201828200581c556f3a70b8a68081cf36c918dd9933abdca34f20fc534499c817182b8200581c5867c3b8e27840f556ac268b781578b14c5661fc63ee720dbeab663f";
+
+export default function TxbuilderMultisigNativeScript() {
+ return (
+
+ );
+}
+
+function Left() {
+ let codeTx = ``;
+
+ return (
+ <>
+
+
+ >
+ );
+}
+
+function Right() {
+ const { wallet, connected } = useWallet();
+
+ function getMeshWallet() {
+ const blockchainProvider = getProvider();
+
+ const wallet = new MeshWallet({
+ networkId: 0,
+ fetcher: blockchainProvider,
+ submitter: blockchainProvider,
+ key: {
+ type: "mnemonic",
+ words: "solution,".repeat(24).split(",").slice(0, 24),
+ },
+ });
+
+ const walletAddress = wallet.getChangeAddress();
+
+ const { pubKeyHash: keyHash } = deserializeAddress(walletAddress);
+ return { wallet, keyHash, walletAddress };
+ }
+
+ async function getScript() {
+ if (!connected) return;
+
+ // first wallet
+ const walletAddress = (await wallet.getUsedAddresses())[0];
+ if (!walletAddress) return;
+ const { pubKeyHash: keyHash1 } = deserializeAddress(walletAddress);
+ // const nativeScriptA: NativeScript = {
+ // type: "all",
+ // scripts: [
+ // {
+ // type: "sig",
+ // keyHash: keyHash,
+ // },
+ // ],
+ // };
+
+ // console.log("Native script A");
+ // const { address: scriptAddressA, scriptCbor: scriptCborA } =
+ // serializeNativeScript(nativeScriptA);
+ // console.log("Script address:", scriptAddressA);
+ // console.log("Script CBOR:", scriptCborA);
+ console.log("keyHash1", keyHash1);
+
+ // second wallet
+ const { keyHash: keyHash2 } = getMeshWallet();
+ // const nativeScriptB: NativeScript = {
+ // type: "all",
+ // scripts: [
+ // {
+ // type: "sig",
+ // keyHash: keyHash2,
+ // },
+ // ],
+ // };
+
+ // console.log("Native script B");
+ // const { address: scriptAddressB, scriptCbor: scriptCborB } =
+ // serializeNativeScript(nativeScriptB);
+ // console.log("Script address:", scriptAddressB);
+ // console.log("Script CBOR:", scriptCborB);
+ console.log("keyHash2", keyHash2);
+
+ // combine
+
+ // const nativeScript: NativeScript = {
+ // type: "atLeast",
+ // required: 2,
+ // scripts: [nativeScriptA, nativeScriptB],
+ // };
+ const nativeScript: NativeScript = {
+ type: "all",
+ scripts: [
+ {
+ type: "sig",
+ keyHash: keyHash1,
+ },
+ {
+ type: "sig",
+ keyHash: keyHash2,
+ },
+ ],
+ };
+
+ console.log("Native script combine");
+ const { address: scriptAddress, scriptCbor } =
+ serializeNativeScript(nativeScript);
+ console.log("Script address:", scriptAddress);
+ console.log("Script CBOR:", scriptCbor);
+
+ return { scriptAddress, scriptCbor: scriptCbor! };
+ }
+
+ async function runDemo() {
+ if (!connected) return;
+
+ const script = await getScript();
+ if (!script) return;
+ const { scriptAddress, scriptCbor } = script;
+
+ const blockchainProvider = getProvider();
+ const utxos = await blockchainProvider.fetchAddressUTxOs(scriptAddress);
+
+ if (utxos.length === 0) {
+ console.log("No utxos");
+ return;
+ }
+ const utxo = utxos[0]!;
+ console.log("utxo", utxo);
+
+ // const walletAddress = (await wallet.getUsedAddresses())[0];
+ // if (!walletAddress) return;
+ // const { pubKeyHash: keyHash1 } = deserializeAddress(walletAddress);
+ const { wallet: walletB, keyHash: keyHash2 } = getMeshWallet();
+
+ const txBuilder = getTxBuilder();
+
+ const unsignedTx = await txBuilder
+ .txIn(
+ utxo.input.txHash,
+ utxo.input.outputIndex,
+ utxo.output.amount,
+ utxo.output.address,
+ )
+ .txInScript(scriptCbor)
+ .txOut(
+ "addr_test1vpvx0sacufuypa2k4sngk7q40zc5c4npl337uusdh64kv0c7e4cxr",
+ [{ unit: "lovelace", quantity: "2000000" }],
+ )
+ .changeAddress(scriptAddress)
+ .selectUtxosFrom(utxos)
+ .complete();
+
+ console.log("unsignedTx", unsignedTx);
+
+ const signedTx1 = await wallet.signTx(unsignedTx, true);
+ const signedTx2 = await walletB.signTx(signedTx1, true);
+
+ const txHash = await wallet.submitTx(signedTx2);
+ console.log("txHash", txHash);
+ return txHash;
+ }
+
+ let codeSnippet = ``;
+
+ return (
+
+ );
+}
diff --git a/apps/playground/src/pages/apis/txbuilder/basics/multisig.tsx b/apps/playground/src/pages/apis/txbuilder/basics/multisig.tsx
index 1056ebbe..f8297619 100644
--- a/apps/playground/src/pages/apis/txbuilder/basics/multisig.tsx
+++ b/apps/playground/src/pages/apis/txbuilder/basics/multisig.tsx
@@ -1,5 +1,5 @@
import {
- AppWallet,
+ MeshWallet,
ForgeScript,
resolveScriptHash,
stringToHex,
@@ -64,7 +64,7 @@ function Right() {
async function runDemo() {
const blockchainProvider = getProvider();
- const mintingWallet = new AppWallet({
+ const mintingWallet = new MeshWallet({
networkId: 0,
fetcher: blockchainProvider,
submitter: blockchainProvider,
@@ -74,7 +74,7 @@ function Right() {
},
});
const forgingScript = ForgeScript.withOneSignature(
- mintingWallet.getPaymentAddress(),
+ mintingWallet.getChangeAddress(),
);
const assetName = "MeshToken";
const policyId = resolveScriptHash(forgingScript);
@@ -99,8 +99,8 @@ function Right() {
return txHash;
}
- let codeSnippet = `import { AppWallet, ForgeScript, Mint, Transaction } from '@meshsdk/core';\n\n`;
- codeSnippet += `const mintingWallet = new AppWallet({\n`;
+ let codeSnippet = `import { MeshWallet, ForgeScript, Mint, Transaction } from '@meshsdk/core';\n\n`;
+ codeSnippet += `const mintingWallet = new MeshWallet({\n`;
codeSnippet += ` networkId: 0,\n`;
codeSnippet += ` fetcher: blockchainProvider,\n`;
codeSnippet += ` submitter: blockchainProvider,\n`;
@@ -111,7 +111,7 @@ function Right() {
codeSnippet += `});\n`;
codeSnippet += `\n`;
codeSnippet += `const forgingScript = ForgeScript.withOneSignature(\n`;
- codeSnippet += ` mintingWallet.getPaymentAddress(),\n`;
+ codeSnippet += ` mintingWallet.getChangeAddress(),\n`;
codeSnippet += `);\n`;
codeSnippet += `\n`;
codeSnippet += `const assetName = "MeshToken";\n`;
diff --git a/apps/playground/src/pages/apis/txbuilder/common.tsx b/apps/playground/src/pages/apis/txbuilder/common.tsx
index 5d3d8830..b949cbf9 100644
--- a/apps/playground/src/pages/apis/txbuilder/common.tsx
+++ b/apps/playground/src/pages/apis/txbuilder/common.tsx
@@ -7,6 +7,7 @@ export function getTxBuilder() {
const txBuilder = new MeshTxBuilder({
fetcher: blockchainProvider,
evaluator: blockchainProvider,
+ verbose: true,
});
txBuilder.setNetwork("preprod");
return txBuilder;
diff --git a/package-lock.json b/package-lock.json
index c277b7ce..984b0b97 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -22364,7 +22364,7 @@
},
"packages/mesh-common": {
"name": "@meshsdk/common",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
"bech32": "^2.0.0",
@@ -22381,14 +22381,14 @@
},
"packages/mesh-contract": {
"name": "@meshsdk/contract",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
- "@meshsdk/common": "1.6.14",
- "@meshsdk/core": "1.6.14",
- "@meshsdk/core-csl": "1.6.14",
- "@meshsdk/core-cst": "1.6.14",
- "@meshsdk/transaction": "1.6.14"
+ "@meshsdk/common": "1.7.0",
+ "@meshsdk/core": "1.7.0",
+ "@meshsdk/core-csl": "1.7.0",
+ "@meshsdk/core-cst": "1.7.0",
+ "@meshsdk/transaction": "1.7.0"
},
"devDependencies": {
"@meshsdk/configs": "*",
@@ -22399,16 +22399,16 @@
},
"packages/mesh-core": {
"name": "@meshsdk/core",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
- "@meshsdk/common": "1.6.14",
- "@meshsdk/core-csl": "1.6.14",
- "@meshsdk/core-cst": "1.6.14",
- "@meshsdk/provider": "1.6.14",
- "@meshsdk/react": "1.6.14",
- "@meshsdk/transaction": "1.6.14",
- "@meshsdk/wallet": "1.6.14"
+ "@meshsdk/common": "1.7.0",
+ "@meshsdk/core-csl": "1.7.0",
+ "@meshsdk/core-cst": "1.7.0",
+ "@meshsdk/provider": "1.7.0",
+ "@meshsdk/react": "1.7.0",
+ "@meshsdk/transaction": "1.7.0",
+ "@meshsdk/wallet": "1.7.0"
},
"devDependencies": {
"@meshsdk/configs": "*",
@@ -22419,10 +22419,10 @@
},
"packages/mesh-core-csl": {
"name": "@meshsdk/core-csl",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
- "@meshsdk/common": "1.6.14",
+ "@meshsdk/common": "1.7.0",
"@sidan-lab/sidan-csl-rs-browser": "0.8.0",
"@sidan-lab/sidan-csl-rs-nodejs": "0.8.0",
"json-bigint": "^1.0.0"
@@ -22438,7 +22438,7 @@
},
"packages/mesh-core-cst": {
"name": "@meshsdk/core-cst",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
"@cardano-sdk/core": "^0.35.4",
@@ -22447,7 +22447,7 @@
"@harmoniclabs/cbor": "1.3.0",
"@harmoniclabs/plutus-data": "1.2.4",
"@harmoniclabs/uplc": "1.2.4",
- "@meshsdk/common": "1.6.14",
+ "@meshsdk/common": "1.7.0",
"@stricahq/bip32ed25519": "^1.1.0",
"@stricahq/cbors": "^1.0.0",
"pbkdf2": "^3.1.2"
@@ -22464,11 +22464,11 @@
},
"packages/mesh-provider": {
"name": "@meshsdk/provider",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
- "@meshsdk/common": "1.6.14",
- "@meshsdk/core-cst": "1.6.14",
+ "@meshsdk/common": "1.7.0",
+ "@meshsdk/core-cst": "1.7.0",
"axios": "^1.7.2"
},
"devDependencies": {
@@ -22480,12 +22480,12 @@
},
"packages/mesh-react": {
"name": "@meshsdk/react",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
- "@meshsdk/common": "1.6.14",
- "@meshsdk/transaction": "1.6.14",
- "@meshsdk/wallet": "1.6.14",
+ "@meshsdk/common": "1.7.0",
+ "@meshsdk/transaction": "1.7.0",
+ "@meshsdk/wallet": "1.7.0",
"react": "^18.2.0"
},
"devDependencies": {
@@ -22500,12 +22500,12 @@
},
"packages/mesh-transaction": {
"name": "@meshsdk/transaction",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
- "@meshsdk/common": "1.6.14",
- "@meshsdk/core-csl": "1.6.14",
- "@meshsdk/core-cst": "1.6.14",
+ "@meshsdk/common": "1.7.0",
+ "@meshsdk/core-csl": "1.7.0",
+ "@meshsdk/core-cst": "1.7.0",
"json-bigint": "^1.0.0"
},
"devDependencies": {
@@ -22518,13 +22518,13 @@
},
"packages/mesh-wallet": {
"name": "@meshsdk/wallet",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
- "@meshsdk/common": "1.6.14",
- "@meshsdk/core-csl": "1.6.14",
- "@meshsdk/core-cst": "1.6.14",
- "@meshsdk/transaction": "1.6.14",
+ "@meshsdk/common": "1.7.0",
+ "@meshsdk/core-csl": "1.7.0",
+ "@meshsdk/core-cst": "1.7.0",
+ "@meshsdk/transaction": "1.7.0",
"@nufi/dapp-client-cardano": "^0.3.1",
"@nufi/dapp-client-core": "^0.3.1"
},
@@ -22538,7 +22538,7 @@
},
"scripts/mesh-cli": {
"name": "meshjs",
- "version": "1.6.14",
+ "version": "1.7.0",
"license": "Apache-2.0",
"dependencies": {
"chalk": "5.3.0",
diff --git a/packages/mesh-wallet/src/browser/index.ts b/packages/mesh-wallet/src/browser/index.ts
index e618b2e7..b3f74359 100644
--- a/packages/mesh-wallet/src/browser/index.ts
+++ b/packages/mesh-wallet/src/browser/index.ts
@@ -12,6 +12,7 @@ import {
UTxO,
Wallet,
} from "@meshsdk/common";
+import { csl } from "@meshsdk/core-csl";
import {
Address,
addressToBech32,
@@ -473,16 +474,18 @@ export class BrowserWallet implements IInitiator, ISigner, ISubmitter {
if (this._walletInstance.cip95 === undefined) return undefined;
const dRepKey = await this._walletInstance.cip95.getPubDRepKey();
- const { dRepKeyHex, dRepIDHash } =
- await BrowserWallet.dRepKeyToDRepID(dRepKey);
+ const { dRepIDHash } = await BrowserWallet.dRepKeyToDRepID(dRepKey);
- const networkId = await this.getNetworkId();
- const dRepId = buildDRepID(dRepKeyHex, networkId);
+ // const networkId = await this.getNetworkId();
+ // const dRepId = buildDRepID(dRepKey, networkId); // todo: this is not correct
+
+ const csldRepIdKeyHash = csl.PublicKey.from_hex(dRepKey).hash();
+ const dRepId = csldRepIdKeyHash.to_bech32("drep");
return {
pubDRepKey: dRepKey,
dRepIDHash: dRepIDHash,
- dRepIDBech32: dRepId, // todo to check
+ dRepIDBech32: dRepId,
};
} catch (e) {
console.error(e);