@helios-lang/contract-utils 0.2.33 → 0.2.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/cast/Cast.js +10 -0
- package/src/cast/UserFunc.js +46 -14
- package/src/codegen/LoadedScriptsWriter.js +2 -0
- package/src/codegen/TypeCheckedModule.js +1 -0
- package/src/codegen/TypeSchema.js +4 -0
- package/types/cast/Cast.d.ts.map +1 -1
- package/types/cast/UserFunc.d.ts +7 -0
- package/types/cast/UserFunc.d.ts.map +1 -1
- package/types/codegen/LoadedScriptsWriter.d.ts.map +1 -1
- package/types/codegen/TypeCheckedModule.d.ts +1 -0
- package/types/codegen/TypeCheckedModule.d.ts.map +1 -1
- package/types/codegen/TypeSchema.d.ts.map +1 -1
package/package.json
CHANGED
package/src/cast/Cast.js
CHANGED
|
@@ -12,6 +12,8 @@ import {
|
|
|
12
12
|
StakingValidatorHash,
|
|
13
13
|
TimeRange,
|
|
14
14
|
TxId,
|
|
15
|
+
TxInput,
|
|
16
|
+
TxOutput,
|
|
15
17
|
TxOutputDatum,
|
|
16
18
|
TxOutputId,
|
|
17
19
|
ValidatorHash,
|
|
@@ -161,6 +163,10 @@ function schemaToUplc(schema, x, defs = {}) {
|
|
|
161
163
|
return TimeRange.new(x).toUplcData()
|
|
162
164
|
case "TxId":
|
|
163
165
|
return TxId.new(x).toUplcData()
|
|
166
|
+
case "TxInput":
|
|
167
|
+
return /** @type {TxInput} */ (x).toUplcData()
|
|
168
|
+
case "TxOutput":
|
|
169
|
+
return /** @type {TxOutput} */ (x).toUplcData()
|
|
164
170
|
case "TxOutputDatum":
|
|
165
171
|
return x
|
|
166
172
|
? TxOutputDatum.new(x)?.toUplcData() ??
|
|
@@ -325,6 +331,10 @@ function uplcToSchema(schema, data, config, defs = {}) {
|
|
|
325
331
|
return TimeRange.fromUplcData(data)
|
|
326
332
|
case "TxId":
|
|
327
333
|
return TxId.fromUplcData(data)
|
|
334
|
+
case "TxInput":
|
|
335
|
+
return TxInput.fromUplcData(config.isMainnet, data)
|
|
336
|
+
case "TxOutput":
|
|
337
|
+
return TxOutput.fromUplcData(config.isMainnet, data)
|
|
328
338
|
case "TxOutputId":
|
|
329
339
|
return TxOutputId.fromUplcData(data)
|
|
330
340
|
case "ValidatorHash":
|
package/src/cast/UserFunc.js
CHANGED
|
@@ -4,6 +4,7 @@ import { Cast } from "./Cast.js"
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @typedef {import("@helios-lang/type-utils").TypeSchema} TypeSchema
|
|
7
|
+
* @typedef {import("@helios-lang/uplc").CekResult} CekResult
|
|
7
8
|
* @typedef {import("@helios-lang/uplc").UplcData} UplcData
|
|
8
9
|
* @typedef {import("@helios-lang/uplc").UplcProgram} UplcProgram
|
|
9
10
|
* @typedef {import("@helios-lang/uplc").UplcValue} UplcValue
|
|
@@ -102,6 +103,22 @@ export class UserFunc {
|
|
|
102
103
|
* @returns {UplcData}
|
|
103
104
|
*/
|
|
104
105
|
evalUnsafe(namedArgs) {
|
|
106
|
+
const result = this.profile(namedArgs).result
|
|
107
|
+
|
|
108
|
+
if (isLeft(result)) {
|
|
109
|
+
throw new Error(result.left.error)
|
|
110
|
+
} else if (result.right instanceof UplcDataValue) {
|
|
111
|
+
return result.right.value
|
|
112
|
+
} else {
|
|
113
|
+
throw new Error(`${result.right.toString()} isn't a UplcDataValue`)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @param {UnsafeArgsT<ArgsT>} namedArgs
|
|
119
|
+
* @returns {CekResult}
|
|
120
|
+
*/
|
|
121
|
+
profile(namedArgs) {
|
|
105
122
|
/**
|
|
106
123
|
* @type {UplcData[]}
|
|
107
124
|
*/
|
|
@@ -113,10 +130,7 @@ export class UserFunc {
|
|
|
113
130
|
return new ConstrData(1, [])
|
|
114
131
|
}
|
|
115
132
|
} else {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
// TODO: apply type conversion
|
|
119
|
-
return rawArg
|
|
133
|
+
return expectSome(namedArgs[name])
|
|
120
134
|
}
|
|
121
135
|
})
|
|
122
136
|
|
|
@@ -132,32 +146,50 @@ export class UserFunc {
|
|
|
132
146
|
const index = expectSome(
|
|
133
147
|
expectSome(this.props.validatorIndices)[currentScriptName]
|
|
134
148
|
)
|
|
149
|
+
|
|
135
150
|
args.push(new ConstrData(index, []))
|
|
136
151
|
}
|
|
137
152
|
|
|
138
153
|
const argValues = args.map((a) => new UplcDataValue(a))
|
|
139
154
|
|
|
140
|
-
const
|
|
155
|
+
const cekResult = this.uplc.eval(argValues)
|
|
141
156
|
|
|
142
157
|
if ("alt" in this.uplc && this.uplc.alt instanceof UplcProgramV2) {
|
|
143
|
-
const
|
|
158
|
+
const cekResultUnoptim = this.uplc.alt.eval(argValues)
|
|
159
|
+
const resultUnoptim = cekResultUnoptim.result
|
|
144
160
|
const resultUnoptimStr = evalResultToString(resultUnoptim)
|
|
145
|
-
const resultStr = evalResultToString(result)
|
|
161
|
+
const resultStr = evalResultToString(cekResult.result)
|
|
146
162
|
|
|
147
163
|
if (resultStr != resultUnoptimStr) {
|
|
148
164
|
throw new Error(
|
|
149
165
|
`Critical error: contact Helios maintainers, expected ${resultUnoptimStr}, got ${resultStr}`
|
|
150
166
|
)
|
|
151
167
|
}
|
|
152
|
-
}
|
|
153
168
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
169
|
+
// also make sure the cost is an improvement
|
|
170
|
+
if (cekResult.cost.mem > cekResultUnoptim.cost.mem) {
|
|
171
|
+
throw new Error(
|
|
172
|
+
`Critical error: optimizer worsened memory cost of ${this.props.name}`
|
|
173
|
+
)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (cekResult.cost.cpu > cekResultUnoptim.cost.cpu) {
|
|
177
|
+
throw new Error(
|
|
178
|
+
`Critical error: optimizer worsened cpu cost of ${this.props.name}`
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (
|
|
183
|
+
cekResult.cost.mem == cekResultUnoptim.cost.mem &&
|
|
184
|
+
cekResult.cost.cpu == cekResultUnoptim.cost.cpu
|
|
185
|
+
) {
|
|
186
|
+
console.error(
|
|
187
|
+
`Warning: optimizer didn't improve cost of ${this.props.name}`
|
|
188
|
+
)
|
|
189
|
+
}
|
|
160
190
|
}
|
|
191
|
+
|
|
192
|
+
return cekResult
|
|
161
193
|
}
|
|
162
194
|
}
|
|
163
195
|
|
|
@@ -76,6 +76,10 @@ export function genTypes(schema) {
|
|
|
76
76
|
]
|
|
77
77
|
case "TxId":
|
|
78
78
|
return ["TxId", "TxId | string | number[]"]
|
|
79
|
+
case "TxInput":
|
|
80
|
+
return ["TxInput", "TxInput"]
|
|
81
|
+
case "TxOutput":
|
|
82
|
+
return ["TxOutput", "TxOutput"]
|
|
79
83
|
case "TxOutputDatum":
|
|
80
84
|
return [
|
|
81
85
|
"TxOutputDatum | null",
|
package/types/cast/Cast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cast.d.ts","sourceRoot":"","sources":["../../src/cast/Cast.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Cast.d.ts","sourceRoot":"","sources":["../../src/cast/Cast.js"],"names":[],"mappings":"AAkeA;;;;;;GAMG;AACH,kGAHW,UAAU,8BASpB;AA3cD;;;GAGG;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;GAGG;AACH;IAaI;;;OAGG;IACH,oBAHW,UAAU,UACV,UAAU,EAKpB;IAnBD;;;OAGG;IACH,iBAFU,UAAU,CAEd;IAEN;;;OAGG;IACH,iBAFU,UAAU,CAEd;IAWN;;;OAGG;IACH,mBAHW,QAAQ,GACN,OAAO,CAInB;IAED;;;OAGG;IACH,cAHW,WAAW,GACT,QAAQ,CAIpB;CACJ;uBAhEY,OAAO,mBAAmB,EAAE,QAAQ;yBACpC,OAAO,qBAAqB,EAAE,UAAU;yBAIxC;IACZ,SAAa,EAAE,OAAO,CAAA;CACnB;8DAMkB,UAAU,KAAK,KAAK,OAAO,EAAE,WAAW,CAAC;;;;6CAOlD,KAAK,OAAO,EAAE,WAAW,CAAC,GAAG,iBAAiB,OAAO,EAAE,WAAW,CAAC"}
|
package/types/cast/UserFunc.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @typedef {import("@helios-lang/type-utils").TypeSchema} TypeSchema
|
|
3
|
+
* @typedef {import("@helios-lang/uplc").CekResult} CekResult
|
|
3
4
|
* @typedef {import("@helios-lang/uplc").UplcData} UplcData
|
|
4
5
|
* @typedef {import("@helios-lang/uplc").UplcProgram} UplcProgram
|
|
5
6
|
* @typedef {import("@helios-lang/uplc").UplcValue} UplcValue
|
|
@@ -58,8 +59,14 @@ export class UserFunc<ArgsT extends {
|
|
|
58
59
|
* @returns {UplcData}
|
|
59
60
|
*/
|
|
60
61
|
evalUnsafe(namedArgs: UnsafeArgsT<ArgsT>): UplcData;
|
|
62
|
+
/**
|
|
63
|
+
* @param {UnsafeArgsT<ArgsT>} namedArgs
|
|
64
|
+
* @returns {CekResult}
|
|
65
|
+
*/
|
|
66
|
+
profile(namedArgs: UnsafeArgsT<ArgsT>): CekResult;
|
|
61
67
|
}
|
|
62
68
|
export type TypeSchema = import("@helios-lang/type-utils").TypeSchema;
|
|
69
|
+
export type CekResult = import("@helios-lang/uplc").CekResult;
|
|
63
70
|
export type UplcData = import("@helios-lang/uplc").UplcData;
|
|
64
71
|
export type UplcProgram = import("@helios-lang/uplc").UplcProgram;
|
|
65
72
|
export type UplcValue = import("@helios-lang/uplc").UplcValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserFunc.d.ts","sourceRoot":"","sources":["../../src/cast/UserFunc.js"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"UserFunc.d.ts","sourceRoot":"","sources":["../../src/cast/UserFunc.js"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AAEH;;;GAGG;AACH;;;IAeI;;;OAGG;IACH,kBAHW,WAAW,SACX,aAAa,EAKvB;IArBD;;;;OAIG;IACH,sBAAI;IAEJ;;;;OAIG;IACH,uBAAK;IAWL;;;OAGG;IACH,gBAHW,KAAK,GACH,IAAI,CAkChB;IAED;;;OAGG;IACH,sBAHW,YAAY,KAAK,CAAC,GAChB,QAAQ,CAYpB;IAED;;;OAGG;IACH,mBAHW,YAAY,KAAK,CAAC,GAChB,SAAS,CA0ErB;CACJ;yBA5LY,OAAO,yBAAyB,EAAE,UAAU;wBAC5C,OAAO,mBAAmB,EAAE,SAAS;uBACrC,OAAO,mBAAmB,EAAE,QAAQ;0BACpC,OAAO,mBAAmB,EAAE,WAAW;wBACvC,OAAO,mBAAmB,EAAE,SAAS;yBACrC,OAAO,WAAW,EAAE,UAAU;4BAI9B;IACZ,MAAU,MAAM,CAAA;IAChB,qBAAyB,EAAE,OAAO,CAAA;IAClC,qBAAyB,EAAE,OAAO,CAAA;IAClC,SAAa,EAAE;QACf,MAAY,MAAM,CAAA;QAClB,IAAU,EAAE,UAAU,CAAA;QACtB,UAAgB,EAAE,OAAO,CAAA;KACpB,EAAE,CAAA;IACP,OAAW,EAAE,UAAU,CAAA;IACvB,gBAAoB,CAAC,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,UAAc,EAAE,UAAU,CAAA;CACvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadedScriptsWriter.d.ts","sourceRoot":"","sources":["../../src/codegen/LoadedScriptsWriter.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH;IAUI;;;OAGG;IACH,gBAFa,mBAAmB,CAQ/B;IAfG,yBAAoC;IACpC,0BAAqC;IACrC,uBAAkC;IAetC;;;OAGG;IACH;;QAFa,mBAAmB,CAgC/B;IAED;;;OAGG;IACH;;QAFa,mBAAmB,CAoC/B;IAED;;OAEG;IACH,YAFa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAQpC;IAED;;;;;OAKG;IACH,cAKC;IAED;;;;;OAKG;IACH,sBALW,MAAM,YACN,MAAM,eACN,MAAM,EAAE,GACN,mBAAmB,CAmB/B;IAED;;;;OAIG;IACH,kBAJW,MAAM,kBACN,MAAM,EAAE,GACN,mBAAmB,CAQ/B;IAED;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"LoadedScriptsWriter.d.ts","sourceRoot":"","sources":["../../src/codegen/LoadedScriptsWriter.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH;IAUI;;;OAGG;IACH,gBAFa,mBAAmB,CAQ/B;IAfG,yBAAoC;IACpC,0BAAqC;IACrC,uBAAkC;IAetC;;;OAGG;IACH;;QAFa,mBAAmB,CAgC/B;IAED;;;OAGG;IACH;;QAFa,mBAAmB,CAoC/B;IAED;;OAEG;IACH,YAFa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAQpC;IAED;;;;;OAKG;IACH,cAKC;IAED;;;;;OAKG;IACH,sBALW,MAAM,YACN,MAAM,eACN,MAAM,EAAE,GACN,mBAAmB,CAmB/B;IAED;;;;OAIG;IACH,kBAJW,MAAM,kBACN,MAAM,EAAE,GACN,mBAAmB,CAQ/B;IAED;;OAEG;IACH,qBAgCC;IAED;;OAEG;IACH,kBAFW,OAAO,MAAM,EAAE,UAAU,CAAC,QAyBpC;IAED;;OAEG;IACH,0BAFW,OAAO,MAAM,EAAE,mBAAmB,CAAC,QA2B7C;IAED;;;OAGG;IACH,oBA6BC;IAED;;;OAGG;IACH,uBAqDC;IAED;;OAEG;IACH,kCAFW,OAAO,MAAM,EAAE,oBAAoB,CAAC,QAuB9C;CACJ;gCA5XY,OAAO,wBAAwB,EAAE,iBAAiB;kCAClD,OAAO,wBAAwB,EAAE,mBAAmB;mCACpD,OAAO,2BAA2B,EAAE,oBAAoB;yBACxD,OAAO,iBAAiB,EAAE,UAAU;6BARpB,0BAA0B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeCheckedModule.d.ts","sourceRoot":"","sources":["../../src/codegen/TypeCheckedModule.js"],"names":[],"mappings":"yBAGa,OAAO,iBAAiB,EAAE,UAAU;kCAIpC;IACZ,qBAAyB,EAAE,OAAO,CAAA;IAClC,qBAAyB,EAAE,OAAO,CAAA;IAClC,SAAa,EAAE;QACf,MAAY,MAAM,CAAA;QAClB,IAAU,EAAE,UAAU,CAAA;QACtB,UAAgB,EAAE,OAAO,CAAA;KACpB,EAAE,CAAA;IACP,OAAW,EAAE,UAAU,CAAA;CACpB;gCAIS;IACZ,MAAU,MAAM,CAAA;IAChB,OAAW,EAAE,MAAM,CAAA;IACnB,UAAc,EAAE,MAAM,CAAA;IACtB,iBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,KAAS,EAAE,OAAO,MAAM,EAAE,UAAU,CAAC,CAAA;IACrC,SAAa,CAAC,EAAE,OAAO,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAChD"}
|
|
1
|
+
{"version":3,"file":"TypeCheckedModule.d.ts","sourceRoot":"","sources":["../../src/codegen/TypeCheckedModule.js"],"names":[],"mappings":"yBAGa,OAAO,iBAAiB,EAAE,UAAU;kCAIpC;IACZ,MAAU,MAAM,CAAA;IAChB,qBAAyB,EAAE,OAAO,CAAA;IAClC,qBAAyB,EAAE,OAAO,CAAA;IAClC,SAAa,EAAE;QACf,MAAY,MAAM,CAAA;QAClB,IAAU,EAAE,UAAU,CAAA;QACtB,UAAgB,EAAE,OAAO,CAAA;KACpB,EAAE,CAAA;IACP,OAAW,EAAE,UAAU,CAAA;CACpB;gCAIS;IACZ,MAAU,MAAM,CAAA;IAChB,OAAW,EAAE,MAAM,CAAA;IACnB,UAAc,EAAE,MAAM,CAAA;IACtB,iBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,KAAS,EAAE,OAAO,MAAM,EAAE,UAAU,CAAC,CAAA;IACrC,SAAa,CAAC,EAAE,OAAO,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAChD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSchema.d.ts","sourceRoot":"","sources":["../../src/codegen/TypeSchema.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,iCAHW,UAAU,GACR,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"TypeSchema.d.ts","sourceRoot":"","sources":["../../src/codegen/TypeSchema.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,iCAHW,UAAU,GACR,CAAC,MAAM,EAAE,MAAM,CAAC,CAgK5B;yBAtKY,OAAO,yBAAyB,EAAE,UAAU"}
|