Easily write Ergo off-chain code with a lightweight and pure JS library.
- 🪄 Easy to use
- 🪶 Lightweight: ~15kB minified + gziped
- 🦾 Powerful: easily create complex transactions with a fluent API
- 🧪 100% code coverage
- 🌲 Tree-shakeable
npm install @fleet-sdk/core
import { OutputBuilder, TransactionBuilder } from "@fleet-sdk/core";
const unsignedTransaction = new TransactionBuilder(creationHeight)
.from(inputs)
.to(new OutputBuilder(1000000n, "9gNvAv97W71Wm33GoXgSQBFJxinFubKvE6wh2dEhFTSgYEe783j"))
.sendChangeTo("9i2bQmRpCPLmDdVgBNyeAy7dDXqBQfjvcxVVt5YMzbDud6AvJS8")
.payMinFee()
.build();
To build a a transaction with multiple outputs you can simply pass an array of OutputBuilder
as argument of to()
method.
import { OutputBuilder, TransactionBuilder } from "@fleet-sdk/core";
const unsignedTransaction = new TransactionBuilder(creationHeight)
.from(inputs)
.to([
new OutputBuilder(1000000n, "9gNvAv97W71Wm33GoXgSQBFJxinFubKvE6wh2dEhFTSgYEe783j"),
new OutputBuilder(2000000n, "9fhJkRaSoPfzE9rA3e4ptK51xvyNsLKonYN1xje5LWaLukx7iX2")
])
.sendChangeTo("9i2bQmRpCPLmDdVgBNyeAy7dDXqBQfjvcxVVt5YMzbDud6AvJS8")
.payMinFee()
.build();
import { OutputBuilder, TransactionBuilder } from "@fleet-sdk/core";
const unsignedTransaction = new TransactionBuilder(creationHeight)
.from(inputs)
.to(
new OutputBuilder(1000000n, "9gNvAv97W71Wm33GoXgSQBFJxinFubKvE6wh2dEhFTSgYEe783j").addTokens([
{ tokenId: "0cd8c9f416e5b1ca9f986a7f10a84191dfb85941619e49e53c0dc30ebf83324b", amount: 100n },
{ tokenId: "36aba4b4a97b65be491cf9f5ca57b5408b0da8d0194f30ec8330d1e8946161c1", amount: 429n }
])
)
.sendChangeTo("9i2bQmRpCPLmDdVgBNyeAy7dDXqBQfjvcxVVt5YMzbDud6AvJS8")
.payMinFee()
.build();
import { OutputBuilder, TransactionBuilder } from "@fleet-sdk/core";
const unsignedTransaction = new TransactionBuilder(creationHeight)
.from(inputs)
.to(
new OutputBuilder(1000000n, "9gNvAv97W71Wm33GoXgSQBFJxinFubKvE6wh2dEhFTSgYEe783j").mintToken({
name: "TestToken",
amount: 21000000n,
decimals: 4,
description: "Just a test token"
})
)
.sendChangeTo("9i2bQmRpCPLmDdVgBNyeAy7dDXqBQfjvcxVVt5YMzbDud6AvJS8")
.payMinFee()
.build();
import { OutputBuilder, TransactionBuilder } from "@fleet-sdk/core";
const unsignedTransaction = new TransactionBuilder(creationHeight)
.from(inputs)
.burnTokens([
{ tokenId: "0cd8c9f416e5b1ca9f986a7f10a84191dfb85941619e49e53c0dc30ebf83324b", amount: 100n },
{ tokenId: "36aba4b4a97b65be491cf9f5ca57b5408b0da8d0194f30ec8330d1e8946161c1", amount: 429n }
])
.sendChangeTo("9i2bQmRpCPLmDdVgBNyeAy7dDXqBQfjvcxVVt5YMzbDud6AvJS8")
.payMinFee()
.build();
You can use configureSelector
method to ensure one or more inputs to be included in the transaction. Useful when working with contracts.
import { OutputBuilder, TransactionBuilder } from "@fleet-sdk/core";
const boxId = "e56847ed19b3dc6b72828fcfb992fdf7310828cf291221269b7ffc72fd66706e";
const unsignedTransaction = new TransactionBuilder(creationHeight)
.from(inputs)
.to(new OutputBuilder(1000000n, "9gNvAv97W71Wm33GoXgSQBFJxinFubKvE6wh2dEhFTSgYEe783j"))
.sendChangeTo("9i2bQmRpCPLmDdVgBNyeAy7dDXqBQfjvcxVVt5YMzbDud6AvJS8")
.configureSelector((selector) => selector.ensureInclusion((input) => input.boxId === boxId))
.payMinFee()
.build();