nxtfi-tools
v1.0.3
Published
Collections of tools necesary for testing and building smart-contracts for the NxtFi Blockchain
Downloads
16
Readme
NxtFi-Tools
Collections of tools necesary for testing and building smart-contracts for the NxtFi Blockchain
Build
To be able to build typescript into ESM format specially built for NxtFi Isolated Environment Execution, add the following line to package.json
:
"scripts": {
"build": "node ./node_modules/nxtfi-tools/build.js ./src/index.ts ./build/bundle.js",
}
To execute, then run npm run build
Unit Testing
The build process can be used from tests environment to compile typescript on the fly and test it using nxtfiTools.build()
example:
const bundledSmartContract = await nxtfiTools.build('./src/index.ts');
The bundledSmartContract
variable now contains the bundled code and can be executed as follow:
import test from 'ava';
import fs from 'fs'
import nxtfiTools from 'nxtfi-tools'
const block = JSON.parse(fs.readFileSync('./__tests__/blocks/initialization/block.json', 'utf8').toString())
const bundledSmartContract = await nxtfiTools.build('./src/index.ts');
test('Initialization', async t => {
const isoEnv = new nxtfiTools.IsolatedEnvironment({
block,
code: bundledSmartContract
});
const response = await isoEnv.run();
t.is(response, 'Initialized for scope \'data\' assigned 5000 to data');
});
The nxtfiTools.IsolatedEnvironment()
function receives a block
and code
parameters, and allows for tests to be executed in separated environments easily.
The isoEnv.run();
executes the code and returns any message from it.
The isoEnv.run();
can also receive more parameters to test the invokation of a smart-contract by other contracts using different json payloads, as an example:
test('Transaction', async t => {
const isoEnv = new nxtfiTools.IsolatedEnvironment({
block,
code: bundledSmartContract
});
isoEnv.setStorage(`/_storage/__${block.hash}/initialized.json`, true)
isoEnv.setStorage(`/_storage/__${block.hash}/data.json`, 10000)
const response = await isoEnv.run({ block, _importPayload: { to: "carlos", amount: 10 } });
t.is(response, 'Tranfered 10 from data to carlos');
});