Skip to content

Commit 1698454

Browse files
Add Simplicity verification
Unactivated.
1 parent 96fb8f5 commit 1698454

File tree

4 files changed

+227
-0
lines changed

4 files changed

+227
-0
lines changed

src/script/interpreter.cpp

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
#include <pubkey.h>
1313
#include <script/script.h>
1414
#include <uint256.h>
15+
extern "C" {
16+
#include <simplicity/elements/exec.h>
17+
#include <simplicity/errorCodes.h>
18+
}
1519

1620
typedef std::vector<unsigned char> valtype;
1721

@@ -2596,6 +2600,76 @@ void PrecomputedTransactionData::Init(const T& txTo, std::vector<CTxOut>&& spent
25962600
m_spent_scripts_single_hash = GetSpentScriptsSHA256(m_spent_outputs);
25972601
m_spent_output_spk_single_hashes = GetSpentScriptPubKeysSHA256(m_spent_outputs);
25982602
m_output_spk_single_hashes = GetOutputScriptPubKeysSHA256(txTo);
2603+
2604+
std::vector<rawBuffer> simplicityRawAnnex(txTo.witness.vtxinwit.size());
2605+
std::vector<rawInput> simplicityRawInput(txTo.vin.size());
2606+
for (size_t i = 0; i < txTo.vin.size(); ++i) {
2607+
simplicityRawInput[i].prevTxid = txTo.vin[i].prevout.hash.begin();
2608+
simplicityRawInput[i].prevIx = txTo.vin[i].prevout.n;
2609+
simplicityRawInput[i].sequence = txTo.vin[i].nSequence;
2610+
simplicityRawInput[i].txo.asset = m_spent_outputs[i].nAsset.vchCommitment.empty() ? NULL : m_spent_outputs[i].nAsset.vchCommitment.data();
2611+
simplicityRawInput[i].txo.value = m_spent_outputs[i].nValue.vchCommitment.empty() ? NULL : m_spent_outputs[i].nValue.vchCommitment.data();
2612+
simplicityRawInput[i].txo.scriptPubKey.buf = m_spent_outputs[i].scriptPubKey.data();
2613+
simplicityRawInput[i].txo.scriptPubKey.len = m_spent_outputs[i].scriptPubKey.size();
2614+
simplicityRawInput[i].issuance.blindingNonce = txTo.vin[i].assetIssuance.assetBlindingNonce.begin();
2615+
simplicityRawInput[i].issuance.assetEntropy = txTo.vin[i].assetIssuance.assetEntropy.begin();
2616+
simplicityRawInput[i].issuance.amount = txTo.vin[i].assetIssuance.nAmount.vchCommitment.empty() ? NULL : txTo.vin[i].assetIssuance.nAmount.vchCommitment.data();
2617+
simplicityRawInput[i].issuance.inflationKeys = txTo.vin[i].assetIssuance.nInflationKeys.vchCommitment.empty() ? NULL : txTo.vin[i].assetIssuance.nInflationKeys.vchCommitment.data();
2618+
simplicityRawInput[i].annex = NULL;
2619+
if (i < txTo.witness.vtxinwit.size()) {
2620+
Span<const valtype> stack{txTo.witness.vtxinwit[i].scriptWitness.stack};
2621+
if (stack.size() >= 2 && !stack.back().empty() && stack.back()[0] == ANNEX_TAG) {
2622+
simplicityRawAnnex[i].buf = stack.back().data()+1;
2623+
simplicityRawAnnex[i].len = stack.back().size()-1;
2624+
simplicityRawInput[i].annex = &simplicityRawAnnex[i];
2625+
}
2626+
simplicityRawInput[i].issuance.amountRangePrf.buf = txTo.witness.vtxinwit[i].vchIssuanceAmountRangeproof.data();
2627+
simplicityRawInput[i].issuance.amountRangePrf.len = txTo.witness.vtxinwit[i].vchIssuanceAmountRangeproof.size();
2628+
simplicityRawInput[i].issuance.inflationKeysRangePrf.buf = txTo.witness.vtxinwit[i].vchInflationKeysRangeproof.data();
2629+
simplicityRawInput[i].issuance.inflationKeysRangePrf.len = txTo.witness.vtxinwit[i].vchInflationKeysRangeproof.size();
2630+
assert(!txTo.vin[i].m_is_pegin || ( txTo.witness.vtxinwit[i].m_pegin_witness.stack.size() >= 4 && txTo.witness.vtxinwit[i].m_pegin_witness.stack[2].size() == 32));
2631+
simplicityRawInput[i].pegin = txTo.vin[i].m_is_pegin ? txTo.witness.vtxinwit[i].m_pegin_witness.stack[2].data() : 0;
2632+
} else {
2633+
simplicityRawInput[i].issuance.amountRangePrf.buf = NULL;
2634+
simplicityRawInput[i].issuance.amountRangePrf.len = 0;
2635+
simplicityRawInput[i].issuance.inflationKeysRangePrf.buf = NULL;
2636+
simplicityRawInput[i].issuance.inflationKeysRangePrf.len = 0;
2637+
assert(!txTo.vin[i].m_is_pegin);
2638+
simplicityRawInput[i].pegin = 0;
2639+
}
2640+
}
2641+
2642+
std::vector<rawOutput> simplicityRawOutput(txTo.vout.size());
2643+
for (size_t i = 0; i < txTo.vout.size(); ++i) {
2644+
simplicityRawOutput[i].asset = txTo.vout[i].nAsset.vchCommitment.empty() ? NULL : txTo.vout[i].nAsset.vchCommitment.data();
2645+
simplicityRawOutput[i].value = txTo.vout[i].nValue.vchCommitment.empty() ? NULL : txTo.vout[i].nValue.vchCommitment.data();
2646+
simplicityRawOutput[i].nonce = txTo.vout[i].nNonce.vchCommitment.empty() ? NULL : txTo.vout[i].nNonce.vchCommitment.data();
2647+
simplicityRawOutput[i].scriptPubKey.buf = txTo.vout[i].scriptPubKey.data();
2648+
simplicityRawOutput[i].scriptPubKey.len = txTo.vout[i].scriptPubKey.size();
2649+
if (i < txTo.witness.vtxoutwit.size()) {
2650+
simplicityRawOutput[i].surjectionProof.buf = txTo.witness.vtxoutwit[i].vchSurjectionproof.data();
2651+
simplicityRawOutput[i].surjectionProof.len = txTo.witness.vtxoutwit[i].vchSurjectionproof.size();
2652+
simplicityRawOutput[i].rangeProof.buf = txTo.witness.vtxoutwit[i].vchRangeproof.data();
2653+
simplicityRawOutput[i].rangeProof.len = txTo.witness.vtxoutwit[i].vchRangeproof.size();
2654+
} else {
2655+
simplicityRawOutput[i].surjectionProof.buf = NULL;
2656+
simplicityRawOutput[i].surjectionProof.len = 0;
2657+
simplicityRawOutput[i].rangeProof.buf = NULL;
2658+
simplicityRawOutput[i].rangeProof.len = 0;
2659+
}
2660+
}
2661+
2662+
rawTransaction simplicityRawTx;
2663+
simplicityRawTx.txid = txTo.GetHash().begin();
2664+
simplicityRawTx.input = simplicityRawInput.data();
2665+
simplicityRawTx.numInputs = simplicityRawInput.size();
2666+
simplicityRawTx.output = simplicityRawOutput.data();
2667+
simplicityRawTx.numOutputs = simplicityRawOutput.size();
2668+
simplicityRawTx.version = txTo.nVersion;
2669+
simplicityRawTx.lockTime = txTo.nLockTime;
2670+
2671+
m_simplicity_tx_data = simplicity_elements_mallocTransaction(&simplicityRawTx);
2672+
25992673
m_bip341_taproot_ready = true;
26002674
}
26012675
}
@@ -3038,6 +3112,51 @@ uint32_t GenericTransactionSignatureChecker<T>::GetnIn() const
30383112
return nIn;
30393113
}
30403114

3115+
template <class T>
3116+
bool GenericTransactionSignatureChecker<T>::CheckSimplicity(const valtype& program, const valtype& witness, const rawTapEnv& simplicityRawTap, int64_t budget, ScriptError* serror) const
3117+
{
3118+
simplicity_err error;
3119+
tapEnv* simplicityTapEnv = simplicity_elements_mallocTapEnv(&simplicityRawTap);
3120+
3121+
assert(txdata->m_simplicity_tx_data);
3122+
assert(simplicityTapEnv);
3123+
if (!simplicity_elements_execSimplicity(&error, 0, txdata->m_simplicity_tx_data, nIn, simplicityTapEnv, txdata->m_hash_genesis_block.data(), budget, 0, program.data(), program.size(), witness.data(), witness.size())) {
3124+
assert(!"simplicity_elements_execSimplicity internal error");
3125+
}
3126+
free(simplicityTapEnv);
3127+
switch (error) {
3128+
case SIMPLICITY_NO_ERROR: return set_success(serror);
3129+
case SIMPLICITY_ERR_MALLOC:
3130+
case SIMPLICITY_ERR_NOT_YET_IMPLEMENTED:
3131+
assert(!"simplicity_elements_execSimplicity internal error");
3132+
break;
3133+
case SIMPLICITY_ERR_DATA_OUT_OF_RANGE: return set_error(serror, SCRIPT_ERR_SIMPLICITY_DATA_OUT_OF_RANGE);
3134+
case SIMPLICITY_ERR_DATA_OUT_OF_ORDER: return set_error(serror, SCRIPT_ERR_SIMPLICITY_DATA_OUT_OF_ORDER);
3135+
case SIMPLICITY_ERR_FAIL_CODE: return set_error(serror, SCRIPT_ERR_SIMPLICITY_FAIL_CODE);
3136+
case SIMPLICITY_ERR_STOP_CODE: return set_error(serror, SCRIPT_ERR_SIMPLICITY_STOP_CODE);
3137+
case SIMPLICITY_ERR_HIDDEN: return set_error(serror, SCRIPT_ERR_SIMPLICITY_HIDDEN);
3138+
case SIMPLICITY_ERR_BITSTREAM_EOF: return set_error(serror, SCRIPT_ERR_SIMPLICITY_BITSTREAM_EOF);
3139+
case SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES: return set_error(serror, SCRIPT_ERR_SIMPLICITY_BITSTREAM_TRAILING_BYTES);
3140+
case SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING: return set_error(serror, SCRIPT_ERR_SIMPLICITY_BITSTREAM_ILLEGAL_PADDING);
3141+
case SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION: return set_error(serror, SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_UNIFICATION);
3142+
case SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK: return set_error(serror, SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_OCCURS_CHECK);
3143+
case SIMPLICITY_ERR_TYPE_INFERENCE_NOT_PROGRAM: return set_error(serror, SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_NOT_PROGRAM);
3144+
case SIMPLICITY_ERR_WITNESS_EOF: return set_error(serror, SCRIPT_ERR_SIMPLICITY_WITNESS_EOF);
3145+
case SIMPLICITY_ERR_WITNESS_TRAILING_BYTES: return set_error(serror, SCRIPT_ERR_SIMPLICITY_WITNESS_TRAILING_BYTES);
3146+
case SIMPLICITY_ERR_WITNESS_ILLEGAL_PADDING: return set_error(serror, SCRIPT_ERR_SIMPLICITY_WITNESS_ILLEGAL_PADDING);
3147+
case SIMPLICITY_ERR_UNSHARED_SUBEXPRESSION: return set_error(serror, SCRIPT_ERR_SIMPLICITY_UNSHARED_SUBEXPRESSION);
3148+
case SIMPLICITY_ERR_CMR: return set_error(serror, SCRIPT_ERR_SIMPLICITY_CMR);
3149+
case SIMPLICITY_ERR_EXEC_BUDGET: return set_error(serror, SCRIPT_ERR_SIMPLICITY_EXEC_BUDGET);
3150+
case SIMPLICITY_ERR_EXEC_MEMORY: return set_error(serror, SCRIPT_ERR_SIMPLICITY_EXEC_MEMORY);
3151+
case SIMPLICITY_ERR_EXEC_JET: return set_error(serror, SCRIPT_ERR_SIMPLICITY_EXEC_JET);
3152+
case SIMPLICITY_ERR_EXEC_ASSERT: return set_error(serror, SCRIPT_ERR_SIMPLICITY_EXEC_ASSERT);
3153+
case SIMPLICITY_ERR_ANTIDOS: return set_error(serror, SCRIPT_ERR_SIMPLICITY_ANTIDOS);
3154+
case SIMPLICITY_ERR_HIDDEN_ROOT: return set_error(serror, SCRIPT_ERR_SIMPLICITY_HIDDEN_ROOT);
3155+
case SIMPLICITY_ERR_AMR: return set_error(serror, SCRIPT_ERR_SIMPLICITY_AMR);
3156+
default: return set_error(serror, SCRIPT_ERR_UNKNOWN_ERROR);
3157+
}
3158+
}
3159+
30413160
// explicit instantiation
30423161
template class GenericTransactionSignatureChecker<CTransaction>;
30433162
template class GenericTransactionSignatureChecker<CMutableTransaction>;
@@ -3186,6 +3305,18 @@ static bool VerifyWitnessProgram(const CScriptWitness& witness, int witversion,
31863305
execdata.m_validation_weight_left_init = true;
31873306
return ExecuteWitnessScript(stack, exec_script, flags, SigVersion::TAPSCRIPT, checker, execdata, serror);
31883307
}
3308+
if ((flags & SCRIPT_VERIFY_SIMPLICITY) && (control[0] & TAPROOT_LEAF_MASK) == TAPROOT_LEAF_TAPSIMPLICITY) {
3309+
if (stack.size() != 2 || script_bytes.size() != 32) return set_error(serror, SCRIPT_ERR_SIMPLICITY_WRONG_LENGTH);
3310+
// Tapsimplicity (leaf version 0xbe)
3311+
const valtype& simplicity_program = SpanPopBack(stack);
3312+
const valtype& simplicity_witness = SpanPopBack(stack);
3313+
const int64_t budget = ::GetSerializeSize(witness.stack, PROTOCOL_VERSION) + VALIDATION_WEIGHT_OFFSET;
3314+
rawTapEnv simplicityRawTap;
3315+
simplicityRawTap.controlBlock = control.data();
3316+
simplicityRawTap.pathLen = (control.size() - TAPROOT_CONTROL_BASE_SIZE) / TAPROOT_CONTROL_NODE_SIZE;
3317+
simplicityRawTap.scriptCMR = script_bytes.data();
3318+
return checker.CheckSimplicity(simplicity_program, simplicity_witness, simplicityRawTap, budget, serror);
3319+
}
31893320
if (flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION) {
31903321
return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION);
31913322
}

src/script/interpreter.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
#include <script/script_error.h>
1111
#include <span.h>
1212
#include <primitives/transaction.h>
13+
extern "C" {
14+
#include <simplicity/elements/env.h>
15+
}
1316

1417
#include <optional>
1518
#include <vector>
@@ -155,6 +158,10 @@ enum : uint32_t {
155158
//
156159
SCRIPT_SIGHASH_RANGEPROOF = (1U << 22),
157160

161+
// Support simplicity
162+
//
163+
SCRIPT_VERIFY_SIMPLICITY = (1U << 23),
164+
158165
// Constants to point to the highest flag in use. Add new flags above this line.
159166
//
160167
SCRIPT_VERIFY_END_MARKER
@@ -164,6 +171,7 @@ bool CheckSignatureEncoding(const std::vector<unsigned char> &vchSig, unsigned i
164171

165172
struct PrecomputedTransactionData
166173
{
174+
transaction* m_simplicity_tx_data = nullptr;
167175
// BIP341 precomputed data.
168176
// These are single-SHA256, see https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-15.
169177
uint256 m_prevouts_single_hash;
@@ -213,6 +221,9 @@ struct PrecomputedTransactionData
213221

214222
template <class T>
215223
explicit PrecomputedTransactionData(const T& tx);
224+
~PrecomputedTransactionData() {
225+
free(m_simplicity_tx_data);
226+
}
216227
};
217228

218229
enum class SigVersion
@@ -262,6 +273,7 @@ static constexpr size_t WITNESS_V1_TAPROOT_SIZE = 32;
262273

263274
static constexpr uint8_t TAPROOT_LEAF_MASK = 0xfe;
264275
static constexpr uint8_t TAPROOT_LEAF_TAPSCRIPT = 0xc4;
276+
static constexpr uint8_t TAPROOT_LEAF_TAPSIMPLICITY = 0xbe;
265277
static constexpr size_t TAPROOT_CONTROL_BASE_SIZE = 33;
266278
static constexpr size_t TAPROOT_CONTROL_NODE_SIZE = 32;
267279
static constexpr size_t TAPROOT_CONTROL_MAX_NODE_COUNT = 128;
@@ -327,6 +339,11 @@ class BaseSignatureChecker
327339
return std::numeric_limits<uint32_t>::max();
328340
}
329341

342+
virtual bool CheckSimplicity(const std::vector<unsigned char>& witness, const std::vector<unsigned char>& program, const rawTapEnv& simplicityRawTap, int64_t budget, ScriptError* serror) const
343+
{
344+
return false;
345+
}
346+
330347
virtual ~BaseSignatureChecker() {}
331348
};
332349

@@ -370,6 +387,7 @@ class GenericTransactionSignatureChecker : public BaseSignatureChecker
370387

371388
const PrecomputedTransactionData* GetPrecomputedTransactionData() const override;
372389
uint32_t GetnIn() const override;
390+
bool CheckSimplicity(const std::vector<unsigned char>& program, const std::vector<unsigned char>& witness, const rawTapEnv& simplicityRawTap, int64_t budget, ScriptError* serror) const override;
373391
};
374392

375393
using TransactionSignatureChecker = GenericTransactionSignatureChecker<CTransaction>;

src/script/script_error.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#include <script/script_error.h>
77

88
#include <string>
9+
extern "C" {
10+
#include <simplicity/errorCodes.h>
11+
}
912

1013
std::string ScriptErrorString(const ScriptError serror)
1114
{
@@ -129,6 +132,54 @@ std::string ScriptErrorString(const ScriptError serror)
129132
return "Arithmetic opcode error";
130133
case SCRIPT_ERR_ECMULTVERIFYFAIL:
131134
return "EC scalar mult verify fail";
135+
case SCRIPT_ERR_SIMPLICITY_WRONG_LENGTH:
136+
return "Simplicity witness has incorrect length";
137+
case SCRIPT_ERR_SIMPLICITY_DATA_OUT_OF_RANGE:
138+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_DATA_OUT_OF_RANGE);
139+
case SCRIPT_ERR_SIMPLICITY_DATA_OUT_OF_ORDER:
140+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_DATA_OUT_OF_ORDER);
141+
case SCRIPT_ERR_SIMPLICITY_FAIL_CODE:
142+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_FAIL_CODE);
143+
case SCRIPT_ERR_SIMPLICITY_STOP_CODE:
144+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_STOP_CODE);
145+
case SCRIPT_ERR_SIMPLICITY_HIDDEN:
146+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_HIDDEN);
147+
case SCRIPT_ERR_SIMPLICITY_BITSTREAM_EOF:
148+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_BITSTREAM_EOF);
149+
case SCRIPT_ERR_SIMPLICITY_BITSTREAM_TRAILING_BYTES:
150+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_BITSTREAM_TRAILING_BYTES);
151+
case SCRIPT_ERR_SIMPLICITY_BITSTREAM_ILLEGAL_PADDING:
152+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_BITSTREAM_ILLEGAL_PADDING);
153+
case SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_UNIFICATION:
154+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_TYPE_INFERENCE_UNIFICATION);
155+
case SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_OCCURS_CHECK:
156+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_TYPE_INFERENCE_OCCURS_CHECK);
157+
case SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_NOT_PROGRAM:
158+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_TYPE_INFERENCE_NOT_PROGRAM);
159+
case SCRIPT_ERR_SIMPLICITY_WITNESS_EOF:
160+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_WITNESS_EOF);
161+
case SCRIPT_ERR_SIMPLICITY_WITNESS_TRAILING_BYTES:
162+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_WITNESS_TRAILING_BYTES);
163+
case SCRIPT_ERR_SIMPLICITY_WITNESS_ILLEGAL_PADDING:
164+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_WITNESS_ILLEGAL_PADDING);
165+
case SCRIPT_ERR_SIMPLICITY_UNSHARED_SUBEXPRESSION:
166+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_UNSHARED_SUBEXPRESSION);
167+
case SCRIPT_ERR_SIMPLICITY_CMR:
168+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_CMR);
169+
case SCRIPT_ERR_SIMPLICITY_EXEC_BUDGET:
170+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_EXEC_BUDGET);
171+
case SCRIPT_ERR_SIMPLICITY_EXEC_MEMORY:
172+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_EXEC_MEMORY);
173+
case SCRIPT_ERR_SIMPLICITY_EXEC_JET:
174+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_EXEC_JET);
175+
case SCRIPT_ERR_SIMPLICITY_EXEC_ASSERT:
176+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_EXEC_ASSERT);
177+
case SCRIPT_ERR_SIMPLICITY_ANTIDOS:
178+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_ANTIDOS);
179+
case SCRIPT_ERR_SIMPLICITY_HIDDEN_ROOT:
180+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_HIDDEN_ROOT);
181+
case SCRIPT_ERR_SIMPLICITY_AMR:
182+
return SIMPLICITY_ERR_MSG(SIMPLICITY_ERR_AMR);
132183
case SCRIPT_ERR_UNKNOWN_ERROR:
133184
case SCRIPT_ERR_ERROR_COUNT:
134185
default: break;

src/script/script_error.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,33 @@ typedef enum ScriptError_t
9696
SCRIPT_ERR_ARITHMETIC64,
9797
SCRIPT_ERR_ECMULTVERIFYFAIL,
9898

99+
/* Elements: Simplicity related errors */
100+
SCRIPT_ERR_SIMPLICITY_WRONG_LENGTH,
101+
SCRIPT_ERR_SIMPLICITY_NOT_YET_IMPLEMENTED,
102+
SCRIPT_ERR_SIMPLICITY_DATA_OUT_OF_RANGE,
103+
SCRIPT_ERR_SIMPLICITY_DATA_OUT_OF_ORDER,
104+
SCRIPT_ERR_SIMPLICITY_FAIL_CODE,
105+
SCRIPT_ERR_SIMPLICITY_STOP_CODE,
106+
SCRIPT_ERR_SIMPLICITY_HIDDEN,
107+
SCRIPT_ERR_SIMPLICITY_BITSTREAM_EOF,
108+
SCRIPT_ERR_SIMPLICITY_BITSTREAM_TRAILING_BYTES,
109+
SCRIPT_ERR_SIMPLICITY_BITSTREAM_ILLEGAL_PADDING,
110+
SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_UNIFICATION,
111+
SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_OCCURS_CHECK,
112+
SCRIPT_ERR_SIMPLICITY_TYPE_INFERENCE_NOT_PROGRAM,
113+
SCRIPT_ERR_SIMPLICITY_WITNESS_EOF,
114+
SCRIPT_ERR_SIMPLICITY_WITNESS_TRAILING_BYTES,
115+
SCRIPT_ERR_SIMPLICITY_WITNESS_ILLEGAL_PADDING,
116+
SCRIPT_ERR_SIMPLICITY_UNSHARED_SUBEXPRESSION,
117+
SCRIPT_ERR_SIMPLICITY_CMR,
118+
SCRIPT_ERR_SIMPLICITY_EXEC_BUDGET,
119+
SCRIPT_ERR_SIMPLICITY_EXEC_MEMORY,
120+
SCRIPT_ERR_SIMPLICITY_EXEC_JET,
121+
SCRIPT_ERR_SIMPLICITY_EXEC_ASSERT,
122+
SCRIPT_ERR_SIMPLICITY_ANTIDOS,
123+
SCRIPT_ERR_SIMPLICITY_HIDDEN_ROOT,
124+
SCRIPT_ERR_SIMPLICITY_AMR,
125+
99126
/* Must go last */
100127
SCRIPT_ERR_ERROR_COUNT
101128
} ScriptError;

0 commit comments

Comments
 (0)