starcoin.js is a full featured sdk for developing dapp on Starcoin blockchain network.
First, start a Starcoin node with websocket and http APIs opened.
./starcoin -n dev --miner-thread 4 --websocket-apis all --http-apis all
or
./starcoin -n barnard --miner-thread 4 --websocket-apis all --http-apis all
let provider = new JsonRpcProvider('http:https://localhost:9850');
/// Get txn data.
const txnData = await provider.getTransaction(txnHash);
const txnInfoData = await provider.getTransactionInfo(txnHash);
/// Send Transaction
let signer = provider.getSigner();
await signer.unlock(''); // put password into the quotes
// starcoin node should enable account jsonrpc api.
const txnRequest = {
script: {
code: '0x1::TransferScripts::peer_to_peer',
type_args: ['0x1::STC::STC'],
args: [
'0xc13b50bdb12e3fdd03c4e3b05e34926a',
'x"29b6012aee31a216af67c3d05e21a092c13b50bdb12e3fdd03c4e3b05e34926a"',
'100000u128',
],
},
};
let txn = await signer.sendTransaction(txnRequest);
// wait for 7 confirmations.
const txnInfo = await txn.wait(7);
console.log(txnInfo);
TransactionEvents returned from node are encoded in BCS format. client sdk should decode the data to see the detailed information.
import encoding from 'starcoin';
import 'starcoin';
let provider = new JsonRpcProvider('http:https://localhost:9850');
// Get txn info.
const txnEvents = await provider.getEventsOfTransaction(txnHash);
// get a txn event.
const txnEvent = txnEvents.pop();
// then decode with pre-determined event type in onchain_event_types.
console.log(encoding.bcsDecode(DepositEvent, txnEvent.data).toJS());
You can also see the spec in src/index.spec.ts
.
> cd <project>
> yarn
> yarn dev
Publish to npm
-
change version in
package.json
-
npm run build
-
npm login
-
npm config set registry https://registry.npmjs.org/
# usenpm config ls
to confirm -
npm publish --access public --tag latest --dry-run
# test locally before actually publishing to the registry -
npm publish --access public --tag latest
If you are using this sdk in your dapp build up by create-react-app, and sdk version >= 2.0.0,
you will get following error in production(yarn build
), which is not happen in developement(yarn start
):
Uncaught TypeError: Cannot convert a BigInt value to a number
- Root cause:
The plugin @babel/plugin-transform-exponentiation-operator in create-react-app will convert
let x = 10 ** 2;
into
let x = Math.pow(10, 2);`
This operation has no effect on Number, but for the BigInt type of ECMAScript 2020, this conversion is a fatal error. Math.pow() only supports Number type parameters.
and the browserslist
section in create-react-app's package.json
is:
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
the production taget is too old to support ECMAScript 2020.
- Solution:
- change the
browserslist
section in your dapp'spackage.json
as following:
"browserslist": {
"production": [
"chrome >= 67",
"edge >= 79",
"firefox >= 68",
"opera >= 54",
"safari >= 14"
],
"development": [
"chrome >= 67",
"edge >= 79",
"firefox >= 68",
"opera >= 54",
"safari >= 14"
]
},
-
rm -f node_modules/.cache
-
yarn build
Welcome for your PRs!