Jucid a fork of Lucid, which allows you to create Cardano transactions and off-chain code for your Plutus contracts in JavaScript, Deno and Node.js without worrying about memory leaks.
Jucid is JSHy's fork of Lucid (Jshy + Lucid = Jucid). Lucid accidentally introduces memory leaks into applications due to incorrect memory management of WASM objects. Jucid handles internal memory correctly, exposes new interfaces to allow you to management objects you use correclty, and is a drop-in replacement for Lucid. Once this fork is merged into Lucid, it is unlikely it will be maintained.
npm install jucid-cardano
For JavaScript and TypeScript
import { jucid } from "https://deno.land/x/jucid@1.0.0-alpha.1/mod.ts";
<script type="module">
import { Lucid } from "https://unpkg.com/jucid@1.0.0-alpha.1/web/mod.js";
// ...
</script>
Build NPM and Web target
deno task build
Outputs a dist
folder
- Coming Soon
// import { Blockfrost, Lucid } from "https://deno.land/x/jucid@1.0.0-alpha.1/mod.ts"; Deno
import { Blockfrost, Lucid } from "jucid-cardano"; // NPM
const lucid = await Lucid.new(
new Blockfrost("https://cardano-preview.blockfrost.io/api/v0", "<projectId>"),
"Preview"
);
// Assumes you are in a browser environment
const api = await window.cardano.nami.enable();
lucid.selectWallet(api);
const tx = lucid.newTx().payToAddress("addr...", { lovelace: 5000000n });
const completeTx = await tx.complete();
const signedTx = await completeTx.sign();
const txHash = await signedTx.submit();
Freeables.free(tx, completeTx, signedTx);
console.log(txHash);
deno task test
This library is built on top of a customized version of the serialization-lib (cardano-multiplatform-lib) and on top of the message-signing library, which are written in Rust.
deno task build:core
deno task test:core
You can generate documentation with:
deno doc
Lucid is an ES Module, so to run it in the browser any bundler which allows for
top level await and WebAssembly is recommended. If you use Webpack 5 enable in
the webpack.config.js
:
experiments: {
asyncWebAssembly: true,
topLevelAwait: true,
layers: true // optional, with some bundlers/frameworks it doesn't work without
}
To run the library in Node.js you need to set {"type" : "module"}
in your
project's package.json
. Otherwise you will get import issues.
Contributions and PRs are welcome!
The contribution instructions.