Skip to main content

Deploy & Invoke Logics

Pre-requisites

Before you begin, you'll required to know how to setup a JSON-RPC provider, a wallet and initialize a wallet.

Incase you are not familiar with the above, please refer to the Getting Started tutorial.

Deploying Logic

To facilitate the deployment of a logic, it is imperative to have a corresponding manifest file. This JSON-formatted file encapsulates essential metadata associated with the logic. Deployment necessitates the presence of both the logic's manifest file and a wallet, the latter requiring initialization through a mnemonic.

import { LogicFactory } from 'js-moi-sdk';

import manifest from './path/to/manifest.json';
import { wallet } from './wallet';


const deploy = () => {
const logicFactory = new LogicFactory(manifest, wallet);

const name = "LOG-FAC";
const description = "LOG";
const amount = 100000000;
const code = "0xffcd8ee6a29ec442dbbf9c6124dd3aeb833ef58052237d521654740857716b34";

const ix = await logicFactory.deploy("Seeder!", name, description, amount, code);

console.log(ix); // OUTPUT: { hash: '0x...', wait: [Function: bound waitForInteraction] AsyncFunction, result: [Function: bound processResult] AsyncFunction }

const receipt = await ix.wait();

console.log(receipt);

/**
Receipt Response:
{
"ix_type": "0x8",
"ix_hash": "0x...",
"status": 0,
"fuel_used": "0x2b..",
"hashes": [
...
],
"extra_data": {
"logic_id": "0x...",
"error": "0x"
},
"from": "0x...",
"to": "0x...",
"ix_index": "0x0",
"parts": [
...
]
}
*/

const result = await ix.result();

/**
Result Response
{
logic_id: "0x...",
error: null
}
*/
}

Invoking Logic

To invoke a logic, it required a wallet and the logic's ID.

The corresponding example below demonstrates how to invoke a logic and retrieve the result.

import fs from 'node:fs/promise';

import { wallet } from "./wallet";

const logicId = "0x...";

const logic = await getLogicDriver(logicId, wallet);
const { allTodos } = await this.logic.routines.GetTodos();

console.log(allTodos); // OUTPUT: [ { id: 1, text: 'Hello World!', completed: false } ]

Reading From Persistent Storage

To read from persistent storage, it required a wallet and the logic's ID.

The corresponding example below demonstrates how to read from persistent storage.

import fs from 'node:fs/promise';

const logic = await getLogicDriver(logicId, wallet);
const name = await logicDriver.persistentState.get("name");

console.log("name - ", name); // OUTPUT: "name - LOG-FAC"