# nxtfi-tools

> Collections of tools necesary for testing and building smart-contracts for the NxtFi Blockchain

Latest version **1.0.3** (published 2023-09-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install nxtfi-tools
pnpm add nxtfi-tools
yarn add nxtfi-tools
bun add nxtfi-tools
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.3 |
| Published | 2023-09-15 |
| First published | 2023-09-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 250.6 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Maintainers | guerrerocarlos |

## Links

- npm: https://www.npmjs.com/package/nxtfi-tools
- npm.io page: https://npm.io/package/nxtfi-tools

## Dependencies (1)

- [esbuild](https://npm.io/package/esbuild.md) ^0.19.2

## Recent versions

- 1.0.3 (latest) — 2023-09-15
- 1.0.2 — 2023-09-11
- 1.0.1 — 2023-09-11
- 1.0.0 — 2023-09-11

## 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`:

```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:

```js
const bundledSmartContract = await nxtfiTools.build('./src/index.ts');
```

The `bundledSmartContract` variable now contains the bundled code and can be executed as follow:

```js
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:

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

---
_Source: https://npm.io/package/nxtfi-tools · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
