darwinia.js
Version >= ^3.0.2 for Darwinia 2.0. Version < 3.0.0 is for Darwinia 1.0.
A library to help
- fetch internal substrate storages, and
- dispatch calls
- Easy-to-use derived functions(Derived API List) which are build from 1 and 2.
Nodejs
npm install darwinia.js@^3.1.1
NOTE:
-
3.1 break change:
call returns
ethers.providers.TransactionResponse
instead ofethers.providers.TransactionReceipt
.
Browser
storage(collatorCount): <span id="collators"></span><br/>
call(remarkWithEvemt): <span id="remark"></span>
<script type="module">
import { ethers } from "https://esm.sh/ethers@5.7.2";
import { clientBuilder } from "https://esm.sh/darwinia.js@3.1.1";
const provider = new ethers.providers.Web3Provider(window.ethereum);
const client = clientBuilder.buildPangolinClient(provider);
// storage
const collatorsCount = await client.storages.darwiniaStaking.collatorCount();
const collatorsEl = document.getElementById("collators");
collatorsEl.innerHTML = collatorsCount;
// call
await window.ethereum.request({ method: "eth_requestAccounts" });
const signer = provider.getSigner();
const tx = await client.calls.system.remarkWithEvent(signer, "0x12345678");
const remarkEl = document.getElementById("remark");
remarkEl.innerHTML = `<a href="https://pangolin.subscan.io/tx/${tx.hash}">${tx.hash}</a>`;
</script>
Try it in jsfiddle:
Usage
fetch storage
The returns of this lib's functions are all json string or null.
import { ethers } from "ethers";
import { clientBuilder } from "darwinia.js";
async function main(): Promise<void> {
const provider = new ethers.providers.JsonRpcProvider(
"https://pangolin-rpc.darwinia.network"
);
// or
// const provider = new ethers.providers.Web3Provider(window.ethereum);
const pangolin = clientBuilder.buildPangolinClient(provider);
let result = await pangolin.storages.system.account(
"0x794BF0B66926D84CB735283D849f454A2A8d9a44"
);
console.log(`${result}\n`);
}
main();
dispatch call
import { ethers } from "ethers";
import { clientBuilder } from "darwinia.js";
async function main(): Promise<void> {
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();
const pangolin = clientBuilder.buildPangolinClient(provider);
const tx = await pangolin.calls.session.setKeys(
signer,
{
aura: "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
}, // keys
"0x" // proof
);
console.log(`https://pangolin.subscan.io/tx/${tx.hash}`);
}
main();
dispatch multiple calls in a single transaction
import { ethers } from "ethers";
import { clientBuilder } from "darwinia.js";
async function main(): Promise<void> {
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();
const pangolin = clientBuilder.buildPangolinClient(provider);
// prepare calls
const setKeysCall = pangolin.calls.session.buildSetKeysCall(
// keys
{
aura: "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d",
},
// proof
"px"
);
const collectCall = pangolin.calls.staking.buildCollectCall(120000000);
// dispatch
const tx = await pangolin.calls.utility.batchAll(signer, [setKeysCall, collectCall]);
console.log(`https://pangolin.subscan.io/tx/${tx.hash}`);
}
main();
dispatch call with encoded input
import { ethers } from "ethers";
import { clientBuilder } from "darwinia.js";
async function main(): Promise<void> {
const provider = new ethers.providers.Web3Provider(window.ethereum);
const signer = provider.getSigner();
const pangolin = clientBuilder.buildPangolinClient(provider);
// call ended with `D` is the version that accept params encoded in scale codec
const tx = await pangolin.calls.session.setKeysH(
signer,
"0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d00" // encoded (keys, proof)
);
console.log(`https://pangolin.subscan.io/tx/${tx.hash}`);
}
main();
More examples in examples
Derived API List
nominateAndStake
Nominate a collator and stake tokens to the collator.
setSessionKeysAndCommission
Set session keys and commission percetage. Example
trackSystemEvents
Track specified events. Example
getSystemEvents
Get the latest events. You can use this function with provider.on('block', callback)
to implement the tracking functionality like trackSystemEvents
. Example
See src/derived.ts.
Update Chains Metadata
npm run gen