@totemsdk/kissvm
v0.1.4
Published
Pure TypeScript KISSVM v1 evaluator for Minima scripting language
Readme
@totemsdk/kissvm
Minima's smart contract language — in pure TypeScript.
KISSVM (Keep It Simple Scripting Virtual Machine) is Minima's on-chain scripting language. This package is a complete evaluator for simulating coin spends, building witnesses, and validating scripts — all client-side with no node required.
Install
npm install @totemsdk/kissvmWhat's inside
| Export | What it does |
|--------|-------------|
| evaluateScript(script, context) | Full VM execution — returns true / false |
| simulateSpend(coin, tx, witness) | Simulate a coin spend against its locking script |
| buildWitness(inputs) | Construct the witness data for a transaction |
| parseScript(source) | Parse KISSVM source to an AST |
| KissvmLimitError | Thrown when gas/resource limits are exceeded |
| KissvmRuntimeError | Thrown for runtime failures (invalid stack state, bad opcode, etc.) |
Supported script types
signedby · multisig · multisig_mofn · timelock · htlc · mast · exchange · vault · flashcash · slowcash · stateful · custom
Usage
Simulate a spend
import { simulateSpend, buildWitness } from '@totemsdk/kissvm';
const witness = buildWitness({
signatures: [{ publicKey: pubKeyHex, signature: sigHex }],
extraData: [],
});
const result = simulateSpend(coin, transaction, witness);
if (!result.success) {
console.error('Script rejected:', result.error);
}Evaluate a script directly
import { evaluateScript } from '@totemsdk/kissvm';
const script = 'RETURN SIGNEDBY(0xABC...)';
const context = {
signatures: [{ publicKey: '0xABC...', signature: '0x...' }],
blockTime: Date.now(),
};
const passed = evaluateScript(script, context);Parse to AST
import { parseScript } from '@totemsdk/kissvm';
const ast = parseScript('RETURN SIGNEDBY(0xABC...) AND BLOCKTIME(1700000000)');
console.log(ast.statements);Error handling
import { KissvmLimitError, KissvmRuntimeError } from '@totemsdk/kissvm';
try {
simulateSpend(coin, tx, witness);
} catch (err) {
if (err instanceof KissvmLimitError) {
console.error('Script exceeded gas limit');
} else if (err instanceof KissvmRuntimeError) {
console.error('Runtime failure:', err.message);
}
}See also
@totemsdk/connect—totemKissvmSimulate/totemKissvmValidateextension methods@totemsdk/tx-builder— builds the transaction fed intosimulateSpend@totemsdk/omnia— usesKissvmEvaluatorinterface for channel conditions
