@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
99 lines (98 loc) • 4.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeRedeemerValidator = exports.makeValidator = void 0;
var utils_1 = require("../type_system/utils.js");
var perror_1 = require("../lib/perror.js");
var pmakeUnit_1 = require("../lib/std/unit/pmakeUnit.js");
var builtins_1 = require("../lib/builtins/index.js");
var papp_1 = require("../lib/papp.js");
var pfn_1 = require("../lib/pfn.js");
var types_1 = require("../type_system/types.js");
var type_system_1 = require("../type_system/index.js");
var fromData_1 = require("../lib/std/data/conversion/fromData.js");
var traces_1 = require("../lib/std/traces.js");
/**
* @deprecated
*
* since plutus v3, all plutus scripts take only the script context as argument
* and redeemer and datum can be extracted from there
*
* it is suggested to use plutus v3 (or higher) to get the best performance out of your contract
*
* also make sure your contract returns a `unit` and no longer a `bool`
*/
function makeValidator(typedValidator, errorMessage) {
return (0, pfn_1.pfn)([
types_1.data,
types_1.data,
types_1.data
], types_1.unit)(function (rawDatum, rawRedeemer, rawCtx) {
var vType = typedValidator.type;
var err = function () { return new Error("cannot make a validator from a term of type " + (0, utils_1.termTypeToString)(vType)); };
if (vType[0] !== types_1.PrimType.Lambda)
throw err();
var datumType = vType[1];
if (!(0, type_system_1.isWellFormedType)(datumType))
throw err();
var postDatum = vType[2];
if (postDatum[0] !== types_1.PrimType.Lambda)
throw err();
var redeemerType = postDatum[1];
if (!(0, type_system_1.isWellFormedType)(redeemerType))
throw err();
var postRedeemer = postDatum[2];
if (postRedeemer[0] !== types_1.PrimType.Lambda)
throw err();
var ctxType = postRedeemer[1];
if (!(0, type_system_1.isWellFormedType)(ctxType))
throw err();
var expectedBool = postRedeemer[2];
if (!(0, type_system_1.typeExtends)(expectedBool, types_1.bool))
throw err();
var errorTerm = errorMessage === undefined ?
(0, perror_1.perror)(types_1.unit) : (0, traces_1.ptraceError)(types_1.unit, errorMessage).$(errorMessage);
return (0, builtins_1.pif)(types_1.unit).$((0, papp_1.papp)((0, papp_1.papp)((0, papp_1.papp)(typedValidator, (0, fromData_1.fromData)(datumType)(rawDatum)), (0, fromData_1.fromData)(redeemerType)(rawRedeemer)), (0, fromData_1.fromData)(ctxType)(rawCtx)))
.$((0, pmakeUnit_1.pmakeUnit)())
.$(errorTerm);
});
}
exports.makeValidator = makeValidator;
/**
* @deprecated
*
* since plutus v3, all plutus scripts take only the script context as argument
* and redeemer and datum can be extracted from there
*
* it is suggested to use plutus v3 (or higher) to get the best performance out of your contract
*
* also make sure your contract returns a `unit` and no longer a `bool`
*/
function makeRedeemerValidator(typedValidator, errorMessage) {
return (0, pfn_1.pfn)([
types_1.data,
types_1.data
], types_1.unit)(function (rawRedeemer, rawCtx) {
var vType = typedValidator.type;
var err = function () { return new Error("cannot make a validator from a term of type " + (0, utils_1.termTypeToString)(vType)); };
if (vType[0] !== types_1.PrimType.Lambda)
throw err();
var redeemerType = vType[1];
if (!(0, type_system_1.isWellFormedType)(redeemerType))
throw err();
var postRedeemer = vType[2];
if (postRedeemer[0] !== types_1.PrimType.Lambda)
throw err();
var ctxType = postRedeemer[1];
if (!(0, type_system_1.isWellFormedType)(ctxType))
throw err();
var expectedBool = postRedeemer[2];
if (!(0, type_system_1.typeExtends)(expectedBool, types_1.bool))
throw err();
var errorTerm = errorMessage === undefined ?
(0, perror_1.perror)(types_1.unit) : (0, traces_1.ptraceError)(types_1.unit, errorMessage).$(errorMessage);
return (0, builtins_1.pif)(types_1.unit).$((0, papp_1.papp)((0, papp_1.papp)(typedValidator, (0, fromData_1.fromData)(redeemerType)(rawRedeemer)), (0, fromData_1.fromData)(ctxType)(rawCtx)))
.$((0, pmakeUnit_1.pmakeUnit)())
.$(errorTerm);
});
}
exports.makeRedeemerValidator = makeRedeemerValidator;