create-ckb-js-vm-app
Version:
CLI tool to quickly bootstrap CKB on-chain script with ckb-js-vm.
58 lines (52 loc) • 1.6 kB
text/typescript
import { hexFrom, Transaction, hashTypeToBytes } from "@ckb-ccc/core";
import { readFileSync } from "fs";
import {
Resource,
Verifier,
DEFAULT_SCRIPT_ALWAYS_SUCCESS,
DEFAULT_SCRIPT_CKB_JS_VM,
} from "ckb-testtool";
async function main() {
const resource = Resource.default();
const tx = Transaction.default();
const mainScript = resource.deployCell(
hexFrom(readFileSync(DEFAULT_SCRIPT_CKB_JS_VM)),
tx,
false,
);
const alwaysSuccessScript = resource.deployCell(
hexFrom(readFileSync(DEFAULT_SCRIPT_ALWAYS_SUCCESS)),
tx,
false,
);
const jsScript = resource.deployCell(
hexFrom(readFileSync("../on-chain-script/dist/index.bc")),
tx,
false,
);
mainScript.args = hexFrom(
"0x0000" +
jsScript.codeHash.slice(2) +
hexFrom(hashTypeToBytes(jsScript.hashType)).slice(2) +
"0000000000000000000000000000000000000000000000000000000000000000",
);
// 1 input cell
const inputCell = resource.mockCell(
alwaysSuccessScript,
mainScript,
"0xFF000000000000000000000000000000",
);
tx.inputs.push(Resource.createCellInput(inputCell));
// 2 output cells
tx.outputs.push(Resource.createCellOutput(alwaysSuccessScript, mainScript));
tx.outputsData.push(hexFrom("0xFE000000000000000000000000000000"));
tx.outputs.push(Resource.createCellOutput(alwaysSuccessScript, mainScript));
tx.outputsData.push(hexFrom("0x01000000000000000000000000000000"));
const verifier = Verifier.from(resource, tx);
verifier.verifySuccess(true);
}
describe("unit test", () => {
test("success", () => {
main();
});
});