Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions packages/mesh-common/src/data/json/aliases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,13 @@ export type Tuple<T extends any[]> = { list: T };
* Aiken alias
* The Plutus Data Option in JSON
*/
export type Option<T> = Some<T> | None;
export type Option<T extends PlutusData> = Some<T> | None;

/**
* Aiken alias
* The Plutus Data Option - Some in JSON
*/
export type Some<T> = ConStr0<[T]>;
export type Some<T extends PlutusData> = ConStr0<[T]>;

/**
* Aiken alias
Expand Down Expand Up @@ -246,7 +246,7 @@ export const tuple = <T extends PlutusData[]>(...args: T): Tuple<T> => ({
* @param value The optional value of the option
* @returns Return None constructor if the value is not provided, otherwise return Some constructor with the value
*/
export const option = <T>(value?: T): Option<T> => {
export const option = <T extends PlutusData>(value?: T): Option<T> => {
if (!value) {
return none();
}
Expand All @@ -258,7 +258,7 @@ export const option = <T>(value?: T): Option<T> => {
* @param value The value of the option
* @returns The Plutus Data Option - Some object
*/
export const some = <T>(value: T): Some<T> => conStr0([value]);
export const some = <T extends PlutusData>(value: T): Some<T> => conStr0([value]);

/**
* The utility function to create a Plutus Data Option - None in JSON
Expand Down
47 changes: 32 additions & 15 deletions packages/mesh-common/src/data/json/constructors.ts
Original file line number Diff line number Diff line change
@@ -1,71 +1,88 @@
import { PlutusData } from ".";

/**
* The Plutus Data constructor object, representing custom data type in JSON
*/
export type ConStr<N = 0, T = any> = { constructor: N; fields: T };

export interface ConStr<N = number, T extends PlutusData[] = PlutusData[]> {
constructor: N;
fields: T;
}
/**
* The Plutus Data index 0 constructor object, representing custom data type in JSON
*/
export type ConStr0<T = any> = ConStr<0, T>;
export interface ConStr0<T extends PlutusData[] = PlutusData[]> extends ConStr<
0,
T
> {}

/**
* The Plutus Data index 1 constructor object, representing custom data type in JSON
*/
export type ConStr1<T = any> = ConStr<1, T>;
export interface ConStr1<T extends PlutusData[] = PlutusData[]> extends ConStr<
1,
T
> {}

/**
* The Plutus Data index 2 constructor object, representing custom data type in JSON
*/
export type ConStr2<T = any> = ConStr<2, T>;
export interface ConStr2<T extends PlutusData[] = PlutusData[]> extends ConStr<
2,
T
> {}

/**
* The Plutus Data index 3 constructor object, representing custom data type in JSON
*/
export type ConStr3<T = any> = ConStr<3, T>;
export interface ConStr3<T extends PlutusData[] = PlutusData[]> extends ConStr<
3,
T
> {}

/**
* The utility function to create a Plutus Data constructor object, representing custom data type in JSON
* @param constructor The constructor index number
* @param fields The items in array
* @returns The Plutus Data constructor object
*/
export const conStr = <N extends number, T>(
export const conStr = <N extends number, T extends PlutusData[]>(
constructor: N,
fields: T,
): ConStr<N, T> => {
if (!Array.isArray(fields)) {
throw new Error("fields of a constructor must be an array");
}
return {
constructor,
fields,
};
return { constructor, fields };
};

/**
* The utility function to create a Plutus Data index 0 constructor object, representing custom data type in JSON
* @param fields The items of in array
* @returns The Plutus Data constructor object
*/
export const conStr0 = <T>(fields: T): ConStr0<T> => conStr<0, T>(0, fields);
export const conStr0 = <T extends PlutusData[]>(fields: T): ConStr0<T> =>
conStr<0, T>(0, fields);

/**
* The utility function to create a Plutus Data index 1 constructor object, representing custom data type in JSON
* @param fields The items of in array
* @returns The Plutus Data constructor object
*/
export const conStr1 = <T>(fields: T): ConStr1<T> => conStr<1, T>(1, fields);
export const conStr1 = <T extends PlutusData[]>(fields: T): ConStr1<T> =>
conStr<1, T>(1, fields);

/**
* The utility function to create a Plutus Data index 2 constructor object, representing custom data type in JSON
* @param fields The items of in array
* @returns The Plutus Data constructor object
*/
export const conStr2 = <T>(fields: T): ConStr2<T> => conStr<2, T>(2, fields);
export const conStr2 = <T extends PlutusData[]>(fields: T): ConStr2<T> =>
conStr<2, T>(2, fields);

/**
* The utility function to create a Plutus Data index 3 constructor object, representing custom data type in JSON
* @param fields The items of in array
* @returns The Plutus Data constructor object
*/
export const conStr3 = <T>(fields: T): ConStr3<T> => conStr<3, T>(3, fields);
export const conStr3 = <T extends PlutusData[]>(fields: T): ConStr3<T> =>
conStr<3, T>(3, fields);
1 change: 1 addition & 0 deletions packages/mesh-common/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,4 @@ export * from "./transaction-builder";
export * from "./deserialized";
export * from "./blueprint";
export * from "./governance";
export * from "./transaction-builder-v2";
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import { MeshTxBuilder, RefTxIn, Voter, VotingProcedure } from "@meshsdk/core";
import { SpendScriptBuilder } from "./spend";
import { MintScriptBuilder } from "./mint";
import { WithdrawScriptBuilder } from "./withdrawal";
import { VoteScriptBuilder } from "./vote";

export interface _MeshTxBuilderV2
extends Omit<MeshTxBuilder, ScriptMethodsToDrop> {
spendPlutusV1(txHash: string, txIndex: number): SpendScriptBuilder;
spendPlutusV2(txHash: string, txIndex: number): SpendScriptBuilder;
spendPlutusV3(txHash: string, txIndex: number): SpendScriptBuilder;

mintPlutusV1(
quantity: string,
policyId: string,
assetName: string,
): MintScriptBuilder;
mintPlutusV2(
quantity: string,
policyId: string,
assetName: string,
): MintScriptBuilder;
mintPlutusV3(
quantity: string,
policyId: string,
assetName: string,
): MintScriptBuilder;

withdrawPlutusV1(
rewardAddress: string,
amount: string,
): WithdrawScriptBuilder;
withdrawPlutusV2(
rewardAddress: string,
amount: string,
): WithdrawScriptBuilder;
withdrawPlutusV3(
rewardAddress: string,
amount: string,
): WithdrawScriptBuilder;

votePlutusV1(
voter: Voter,
govActionId: RefTxIn,
votingProcedure: VotingProcedure,
): VoteScriptBuilder;
votePlutusV2(
voter: Voter,
govActionId: RefTxIn,
votingProcedure: VotingProcedure,
): VoteScriptBuilder;
votePlutusV3(
voter: Voter,
govActionId: RefTxIn,
votingProcedure: VotingProcedure,
): VoteScriptBuilder;
}

type ScriptMethodsToDrop =
| "spendingPlutusScript"
| "spendingPlutusScriptV1"
| "spendingPlutusScriptV2"
| "spendingPlutusScriptV3"
| "spendingTxInReference"
| "spendingReferenceTxInInlineDatumPresent"
| "spendingReferenceTxInRedeemerValue"
| "mintPlutusScript"
| "mintPlutusScriptV1"
| "mintPlutusScriptV2"
| "mintPlutusScriptV3"
| "mintingScript"
| "mintTxInReference"
| "mintReferenceTxInRedeemerValue"
| "mintRedeemerValue"
| "withdrawalPlutusScript"
| "withdrawalPlutusScriptV1"
| "withdrawalPlutusScriptV2"
| "withdrawalPlutusScriptV3"
| "withdrawalScript"
| "withdrawalTxInReference"
| "withdrawalReferenceTxInRedeemerValue"
| "withdrawalRedeemerValue"
| "votePlutusScript"
| "votePlutusScriptV1"
| "votePlutusScriptV2"
| "votePlutusScriptV3"
| "voteScript"
| "voteTxInReference"
| "voteReferenceTxInRedeemerValue"
| "voteRedeemerValue"
| "txInScript"
| "txInDatumValue"
| "txInInlineDatumPresent"
| "txInRedeemerValue";
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export * from './builder-core';
export * from './mint';
export * from './spend';
export * from './vote';
export * from './withdrawal'
28 changes: 28 additions & 0 deletions packages/mesh-common/src/types/transaction-builder-v2/mint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Asset, Budget, BuilderData } from "@meshsdk/core";

import { _MeshTxBuilderV2 } from "./builder-core";

export interface MintScriptBuilder {
script(scriptCbor: string): MintRedeemerBuilder;
referenceScript(
txHash: string,
txIndex: number,
scriptSize?: string,
scriptHash?: string,
): MintRedeemerBuilder;
}

export interface MintRedeemerBuilder {
redeemerJson(
redeemer: BuilderData["content"],
exUnits?: Budget,
): MintTxOutBuilder;
redeemerCbor(
redeemer: BuilderData["content"],
exUnits?: Budget,
): MintTxOutBuilder;
}

export interface MintTxOutBuilder {
txOut(address: string, amount: Asset[]): _MeshTxBuilderV2;
}
33 changes: 33 additions & 0 deletions packages/mesh-common/src/types/transaction-builder-v2/spend.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Asset, Budget, BuilderData } from "@meshsdk/core";
import { _MeshTxBuilderV2 } from "./builder-core";

export interface SpendScriptBuilder {
script(scriptCbor: string): SpendRedeemerBuilder;
referenceScript(
refTxHash: string,
refTxIndex: number,
scriptSize?: string,
scriptHash?: string,
): SpendRedeemerBuilder;
}

export interface SpendRedeemerBuilder {
redeemerJson(
redeemer: BuilderData["content"],
exUnits?: Budget,
): SpendTxOutBuilder;
redeemerCbor(
redeemer: BuilderData["content"],
exUnits?: Budget,
): SpendTxOutBuilder;
}

export interface SpendTxOutBuilder {
txOut(address: string, amount: Asset[]): SpendDatumBuilder;
}

export interface SpendDatumBuilder {
datumHash(datumHash: string): _MeshTxBuilderV2;
datumCbor(datumCbor: BuilderData["content"]): _MeshTxBuilderV2;
datumJson(datumJson: BuilderData["content"]): _MeshTxBuilderV2;
}
24 changes: 24 additions & 0 deletions packages/mesh-common/src/types/transaction-builder-v2/vote.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Budget, BuilderData } from "@meshsdk/core";

import { _MeshTxBuilderV2 } from "./builder-core";

export interface VoteScriptBuilder {
script(scriptCbor: string): VoteRedeemerBuilder;
referenceScript(
txHash: string,
txIndex: number,
scriptSize?: string,
scriptHash?: string,
): VoteRedeemerBuilder;
}

export interface VoteRedeemerBuilder {
redeemerJson(
redeemer: BuilderData["content"],
exUnits?: Budget,
): _MeshTxBuilderV2;
redeemerCbor(
redeemer: BuilderData["content"],
exUnits?: Budget,
): _MeshTxBuilderV2;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Budget, BuilderData } from "@meshsdk/core";

import { _MeshTxBuilderV2 } from "./builder-core";

export interface WithdrawScriptBuilder {
script(scriptCbor: string): WithdrawRedeemerBuilder;
referenceScript(
txHash: string,
txIndex: number,
scriptSize?: string,
scriptHash?: string,
): WithdrawRedeemerBuilder;
}

export interface WithdrawRedeemerBuilder {
redeemerJson(
redeemer: BuilderData["content"],
exUnits?: Budget,
): _MeshTxBuilderV2;
redeemerCbor(
redeemer: BuilderData["content"],
exUnits?: Budget,
): _MeshTxBuilderV2;
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export type MeshTxBuilderBody = {
certificates: Certificate[];
withdrawals: Withdrawal[];
votes: Vote[];
proposals: Proposal[];
proposals: Proposal[];
signingKey: string[];
extraInputs: UTxO[];
chainedTxs: string[];
Expand Down
1 change: 1 addition & 0 deletions packages/mesh-transaction/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ export * from "./scripts";
export * from "./transaction";
export * from "./utils";
export * from "./tx-parser";
export * from "./mesh-tx-builder-v2";
export { LargestFirstInputSelector } from "./mesh-tx-builder/coin-selection";
Loading
Loading