Skip to content

Commit

Permalink
complete TxBuilderRunner
Browse files Browse the repository at this point in the history
  • Loading branch information
michele-nuzzi committed Mar 26, 2024
1 parent 94a2dd4 commit 36f9a3b
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ import { CanBeData, canBeData, forceData } from "../../utils/CanBeData";
import { CanBePoolKeyHash, forcePoolKeyHash } from "./CanBePoolKeyHash";
import { CanBeStakeCreds, forceStakeCreds } from "./CanBeStakeCreds";
import { forceAddr } from "./forceAddr";
import { eqIVoter } from "../../txBuild/ITxBuildVotingProcedures";
import { IProtocolVerision } from "@harmoniclabs/cardano-ledger-ts/dist/ledger/protocol/protocolVersion";
import { Rational } from "../../utils/Rational";
import { eqIVoter } from "../../txBuild/ITxBuildVotingProcedure";

// /** sync */
// interface TxBuilderStep {
Expand Down
38 changes: 22 additions & 16 deletions packages/offchain/src/txBuild/ITxBuildArgs.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import { Address, AddressStr, CanBeHash28, Hash32, IUTxO, IVotingProcedures, PubKeyHash, Script, TxMetadata, TxOut, UTxO, VotingProcedures, isIUTxO } from "@harmoniclabs/cardano-ledger-ts";
import { cloneITxBuildCert, NormalizedITxBuildCert, type ITxBuildCert, normalizeITxBuildCert } from "./ITxBuildCert";
import { cloneITxBuildInput, NormalizedITxBuildInput, type ITxBuildInput, normalizeITxBuildInput } from "./ITxBuildInput/ITxBuildInput";
import { cloneITxBuildMint, NormalizedITxBuildMint, type ITxBuildMint, normalizeITxBuildMint } from "./ITxBuildMint";
import { cloneITxBuildOutput, txBuildOutToTxOut, type ITxBuildOutput } from "./ITxBuildOutput";
import { cloneITxBuildWithdrawal, NormalizedITxBuildWithdrawal, type ITxBuildWithdrawal, normalizeITxBuildWithdrawal } from "./ITxBuildWithdrawal";
import { NormalizedITxBuildCert, type ITxBuildCert, normalizeITxBuildCert } from "./ITxBuildCert";
import { NormalizedITxBuildInput, type ITxBuildInput, normalizeITxBuildInput } from "./ITxBuildInput/ITxBuildInput";
import { NormalizedITxBuildMint, type ITxBuildMint, normalizeITxBuildMint } from "./ITxBuildMint";
import { txBuildOutToTxOut, type ITxBuildOutput } from "./ITxBuildOutput";
import { NormalizedITxBuildWithdrawal, type ITxBuildWithdrawal, normalizeITxBuildWithdrawal } from "./ITxBuildWithdrawal";
import { CanBeUInteger } from "../utils/ints";
import { ChangeInfos, NormalizedChangeInfos, normalizeChangeInfos } from "./ChangeInfos/ChangeInfos";
import { IVotingProcedure, VotingProcedure } from "@harmoniclabs/cardano-ledger-ts/dist/governance/VotingProcedure";
import { IProposalProcedure, ProposalProcedure } from "@harmoniclabs/cardano-ledger-ts/dist/governance/ProposalProcedure";
import { ITxBuildVotingProcedures, NormalizedITxBuildVotingProcedures } from "./ITxBuildVotingProcedures";
import { ITxBuildProposalProcedure, NormalizedITxBuildProposalProcedure } from "./ITxBuildProposalProcedure";
import { ITxBuildVotingProcedure, NormalizedITxBuildVotingProcedure, normalizeITxBuildVotingProcedure } from "./ITxBuildVotingProcedure";
import { ITxBuildProposalProcedure, NormalizedITxBuildProposalProcedure, normalizeITxBuildProposalProcedure } from "./ITxBuildProposalProcedure";

export interface ITxBuildArgs {
inputs: (ITxBuildInput | IUTxO)[],
Expand All @@ -36,7 +34,7 @@ export interface ITxBuildArgs {
withdrawals?: ITxBuildWithdrawal[],
metadata?: TxMetadata,
// conway
votingProcedures?: ITxBuildVotingProcedures[],
votingProcedures?: ITxBuildVotingProcedure[],
proposalProcedures?: ITxBuildProposalProcedure[],
currentTreasuryValue?: CanBeUInteger,
paymentToTreasury?: CanBeUInteger
Expand All @@ -59,10 +57,10 @@ export interface NormalizedITxBuildArgs extends ITxBuildArgs {
withdrawals?: NormalizedITxBuildWithdrawal[],
metadata?: TxMetadata,
// conway
votingProcedures?: NormalizedITxBuildVotingProcedures[],
proposalProcedures: NormalizedITxBuildProposalProcedure[],
currentTreasuryValue: bigint,
paymentToTreasury: bigint
votingProcedures?: NormalizedITxBuildVotingProcedure[],
proposalProcedures?: NormalizedITxBuildProposalProcedure[],
currentTreasuryValue?: bigint,
paymentToTreasury?: bigint
}

export function normalizeITxBuildArgs({
Expand All @@ -79,7 +77,11 @@ export function normalizeITxBuildArgs({
invalidAfter,
certificates,
withdrawals,
metadata
metadata,
votingProcedures,
proposalProcedures,
currentTreasuryValue,
paymentToTreasury
}: ITxBuildArgs ): NormalizedITxBuildArgs
{
return {
Expand All @@ -100,7 +102,11 @@ export function normalizeITxBuildArgs({
invalidAfter: invalidAfter === undefined ? undefined : BigInt( invalidAfter ),
certificates: certificates?.map( normalizeITxBuildCert ),
withdrawals: withdrawals?.map( normalizeITxBuildWithdrawal ),
metadata
metadata,
votingProcedures: Array.isArray( votingProcedures ) ? votingProcedures.map( normalizeITxBuildVotingProcedure ) : undefined,
proposalProcedures: Array.isArray( proposalProcedures ) ? proposalProcedures.map( normalizeITxBuildProposalProcedure ) : undefined,
currentTreasuryValue: currentTreasuryValue === undefined ? undefined : BigInt( currentTreasuryValue ),
paymentToTreasury: paymentToTreasury === undefined ? undefined : BigInt( paymentToTreasury ),
};
}

Expand Down
10 changes: 9 additions & 1 deletion packages/offchain/src/txBuild/ITxBuildProposalProcedure.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Hash28, IProposalProcedure, ITypedVotingProceduresEntry, IVoter, IVotingProcedures, IVotingProceduresEntry, ProposalProcedure, VotingProcedures, canBeHash28, isVoterKind } from "@harmoniclabs/cardano-ledger-ts"
import { IScriptWithRedeemer, ScriptWithRedeemer } from "./ScriptWithRedeemer"
import { IScriptWithRedeemer, ScriptWithRedeemer, normalizeIScriptWithRedeemer } from "./ScriptWithRedeemer"
import { isObject } from "@harmoniclabs/obj-utils"
import { uint8ArrayEq } from "@harmoniclabs/uint8array-utils"

Expand All @@ -12,3 +12,11 @@ export interface NormalizedITxBuildProposalProcedure {
proposalProcedure: ProposalProcedure
script?: ScriptWithRedeemer
}

export function normalizeITxBuildProposalProcedure({ proposalProcedure, script }: ITxBuildProposalProcedure ): NormalizedITxBuildProposalProcedure
{
return {
proposalProcedure: new ProposalProcedure( proposalProcedure ),
script: script === undefined ? undefined : normalizeIScriptWithRedeemer( script )
}
}
58 changes: 58 additions & 0 deletions packages/offchain/src/txBuild/ITxBuildVotingProcedure.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { Hash28, ITxOutRef, ITypedVotingProceduresEntry, IVoter, IVotingProcedure, IVotingProcedures, IVotingProceduresEntry, TxOutRef, Voter, VotingProcedure, VotingProcedures, canBeHash28, forceTxOutRef, isVoterKind } from "@harmoniclabs/cardano-ledger-ts"
import { IScriptWithRedeemer, ScriptWithRedeemer, normalizeIScriptWithRedeemer } from "./ScriptWithRedeemer"
import { isObject } from "@harmoniclabs/obj-utils"
import { uint8ArrayEq } from "@harmoniclabs/uint8array-utils"

export interface ITxBuildVotingProcedure {
votingProcedure: IVotingProceduresEntry
script?: IScriptWithRedeemer
}

export interface NormalizedITxBuildVotingProcedure {
votingProcedure: ITypedVotingProceduresEntry
script?: ScriptWithRedeemer
}

export function eqIVoter( a: IVoter, b: IVoter ): boolean
{
if( !isObject( a ) ) return false;
if( !isObject( b ) ) return false;

return (
isVoterKind( a.kind ) && a.kind === b.kind &&
canBeHash28( a.hash ) &&
canBeHash28( b.hash ) &&
uint8ArrayEq(
new Hash28( a.hash ).toBuffer(),
new Hash28( b.hash ).toBuffer()
)
)
}

export function normalizeITxBuildVotingProcedure({ votingProcedure, script }: ITxBuildVotingProcedure): NormalizedITxBuildVotingProcedure
{
return {
votingProcedure: {
voter: new Voter( votingProcedure.voter ),
votes: votingProcedure.votes.map( normalizeVotesEntry )
},
script: script === undefined ? undefined : normalizeIScriptWithRedeemer( script )
};
}

function normalizeVotesEntry({
govActionId,
vote
}:{
govActionId: ITxOutRef;
vote: IVotingProcedure;
}): {
govActionId: TxOutRef;
vote: VotingProcedure;
}
{
return {
govActionId: forceTxOutRef( govActionId ),
vote: new VotingProcedure( vote )
};
}
30 changes: 0 additions & 30 deletions packages/offchain/src/txBuild/ITxBuildVotingProcedures.ts

This file was deleted.

17 changes: 15 additions & 2 deletions packages/offchain/src/txBuild/ScriptWithRedeemer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { IUTxO, Script, UTxO } from "@harmoniclabs/cardano-ledger-ts";
import { IUTxO, Script, UTxO, isIUTxO } from "@harmoniclabs/cardano-ledger-ts";
import { Data } from "@harmoniclabs/plutus-data";
import { CanBeData } from "../utils/CanBeData";
import { forceData } from "@harmoniclabs/plu-ts-offchain";

export type ScriptWithRedeemer = {
inline: Script
Expand All @@ -16,4 +17,16 @@ export type IScriptWithRedeemer = {
} | {
ref: IUTxO
redeemer: CanBeData
};
};

export function normalizeIScriptWithRedeemer( script: IScriptWithRedeemer ): ScriptWithRedeemer
{
const redeemer = forceData( script.redeemer );
return isIUTxO( (script as any).ref ) ? {
ref: new UTxO( (script as any).ref ),
redeemer
} : {
inline: ((script as any).inline as Script).clone(),
redeemer
};
}

0 comments on commit 36f9a3b

Please sign in to comment.