1.0.3 • Published 8 months ago

nxtfi-tools v1.0.3

Weekly downloads
-
License
MIT
Repository
-
Last release
8 months ago

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');
});
1.0.3

8 months ago

1.0.2

8 months ago

1.0.1

8 months ago

1.0.0

8 months ago