Nil.js
: working with tokens
Basic example
To create a new token and withdraw it:
const client = new PublicClient({
transport: new HttpTransport({
endpoint: RPC_ENDPOINT,
}),
shardId: 1,
});
const smartAccount = await generateSmartAccount({
shardId: 1,
rpcEndpoint: RPC_ENDPOINT,
faucetEndpoint: FAUCET_ENDPOINT,
});
{
const hashTransaction = await smartAccount.setTokenName("MY_TOKEN");
await waitTillCompleted(client, hashTransaction);
}
{
const hashTransaction = await smartAccount.mintToken(100_000_000n);
await waitTillCompleted(client, hashTransaction);
}
To burn an existing token:
{
const hashTransaction = await smartAccount.burnToken(50_000_000n);
await waitTillCompleted(client, hashTransaction);
}
Working with multiple smart accounts
This example creates a smart account that stores three tokens: the default token, and two custom tokens.
Create two new smart accounts:
const client = new PublicClient({
transport: new HttpTransport({
endpoint: RPC_ENDPOINT,
}),
shardId: 1,
});
const smartAccount = await generateSmartAccount({
shardId: 1,
rpcEndpoint: RPC_ENDPOINT,
faucetEndpoint: FAUCET_ENDPOINT,
});
const smartAccountTwo = await generateSmartAccount({
shardId: 1,
rpcEndpoint: RPC_ENDPOINT,
faucetEndpoint: FAUCET_ENDPOINT,
});
{
const hashTransaction = await smartAccount.setTokenName("MY_TOKEN");
await waitTillCompleted(client, hashTransaction);
}
{
const hashTransaction = await smartAccountTwo.setTokenName("ANOTHER_TOKEN");
await waitTillCompleted(client, hashTransaction);
}
Create a new token for Smart Account 1 and withdraw it:
{
const hashTransaction = await smartAccount.mintToken(100_000_000n);
await waitTillCompleted(client, hashTransaction);
}
{
const hashTransaction = await smartAccountTwo.mintToken(50_000_000n);
await waitTillCompleted(client, hashTransaction);
}
Create a new token for Smart Account 2 and send it to Smart Account 1:
const transferTransaction = smartAccountTwo.sendTransaction({
to: smartAccount.address,
value: 1_000_000n,
feeCredit: 5_000_000n,
tokens: [
{
id: smartAccountTwo.address,
amount: 50_000_000n,
},
],
});
const tokens = await client.getTokens(smartAccount.address, "latest");
Working with the faucet service
tip
Refer to the Codebook for ready-made canonical examples on using the faucet service.
Nil.js offers several 'helper' wrappers designed to simplify work with the faucet service.
To create a new faucet client:
const faucetClient = new FaucetClient({
transport: new HttpTransport({
endpoint: FAUCET_ENDPOINT,
}),
});
To request a list of all faucets:
const faucets = await faucetClient.getAllFaucets();
To request tokens from a faucet:
await faucetClient.topUpAndWaitUntilCompletion({
smartAccountAddress: SMART_ACCOUNT_ADDRESS,
faucetAddress: FAUCET_ADDRESS,
amount: AMOUNT,
});