From 848cc0429e393391ffe4936a6d4ecce8548c82a7 Mon Sep 17 00:00:00 2001 From: MusadaLovers <129270946+MusadaLovers@users.noreply.github.com> Date: Fri, 31 Mar 2023 03:35:11 +0700 Subject: [PATCH] musada inery task 4 --- musada/README.md | 64 ++++++++++++++++++++++++++++++ musada/package.json | 27 +++++++++++++ musada/token-contract/create.mjs | 57 ++++++++++++++++++++++++++ musada/token-contract/issue.mjs | 57 ++++++++++++++++++++++++++ musada/token-contract/transfer.mjs | 57 ++++++++++++++++++++++++++ musada/value-contract/create.mjs | 58 +++++++++++++++++++++++++++ musada/value-contract/destroy.mjs | 57 ++++++++++++++++++++++++++ musada/value-contract/read.mjs | 57 ++++++++++++++++++++++++++ musada/value-contract/update.mjs | 58 +++++++++++++++++++++++++++ 9 files changed, 492 insertions(+) create mode 100644 musada/README.md create mode 100644 musada/package.json create mode 100644 musada/token-contract/create.mjs create mode 100644 musada/token-contract/issue.mjs create mode 100644 musada/token-contract/transfer.mjs create mode 100644 musada/value-contract/create.mjs create mode 100644 musada/value-contract/destroy.mjs create mode 100644 musada/value-contract/read.mjs create mode 100644 musada/value-contract/update.mjs diff --git a/musada/README.md b/musada/README.md new file mode 100644 index 000000000..a919b24aa --- /dev/null +++ b/musada/README.md @@ -0,0 +1,64 @@ +## INERY blockchain sample RPC push transaction via JSON-RPC by jambulmerah with inery account `musada` + +## Install packet dependencies +``` +curl https://deb.nodesource.com/setup_lts.x | bash +sudo apt install nodejs -y +npm install -g npm +``` + +## PRE-USAGE + +### Change directory to `musada` +``` +cd musada +``` + +### Install module dependencies +``` +npm install +``` + +### Set the env vars in `.env` +``` +nano .env +``` + +## USAGE + +### RPC push transaction with value/crud contract +##### `create` data action +``` +npm run create-crud +``` + +##### `read` data action +``` +npm run read-crud +``` + +##### `update` data action +``` +npm run update-crud +``` + +##### `destroy` data action +``` +npm run destroy-crud +``` + +### RPC push transaction with token contract +##### `create` token action +``` +npm run create-token +``` + +##### `issue` token action +``` +npm run issue-token +``` + +##### `transfer` token action +``` +npm run transfer-token +``` diff --git a/musada/package.json b/musada/package.json new file mode 100644 index 000000000..3cf3612a6 --- /dev/null +++ b/musada/package.json @@ -0,0 +1,27 @@ +{ + "name": "musada task4", + "version": "0.1.0", + "description": "Sample RPC push transaction via JSON RPC by musada", + "main": "dist/index.js", + "scripts": { + "create-crud": "node ./value-contract/create.mjs", + "read-crud": "node ./value-contract/read.mjs", + "update-crud": "node ./value-contract/update.mjs", + "destroy-crud": "node ./value-contract/destroy.mjs", + "create-token": "node ./token-contract/create.mjs", + "issue-token": "node ./token-contract/issue.mjs", + "transfer-token": "node ./token-contract/transfer.mjs" + }, + "author": "musada", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/MusadaLovers/inery-testnet-faucet-tasks" + }, + "homepage": "https://github.com/MusadaLovers/inery-testnet-faucet-tasks", + "dependencies": { + "dotenv": "latest", + "dotenv-expand": "latest", + "ineryjs": "github:inery-blockchain/ineryjs" + } +} diff --git a/musada/token-contract/create.mjs b/musada/token-contract/create.mjs new file mode 100644 index 000000000..7befd7648 --- /dev/null +++ b/musada/token-contract/create.mjs @@ -0,0 +1,57 @@ +import { Api, JsonRpc, RpcError, JsSignatureProvider } from 'ineryjs/dist/index.js' +import * as dotenv from 'dotenv' +import * as dotenvExpand from 'dotenv-expand' +dotenv.config() +dotenvExpand.expand(dotenv.config()) + +const account = process.env.TOKEN_ACCOUNT +const actor = process.env.USER_ACC_NAME +const symbol = process.env.SYMBOL +const amount = process.env.AMOUNT + +const json_rpc = new JsonRpc(process.env.INERY_NODE_RPC) +const signature = new JsSignatureProvider([process.env.INERY_PRIV_KEY]); + +const api = new Api({ + rpc: json_rpc, + signatureProvider: signature +}) + +async function createToken(issuer, maximum_supply){ + try{ + const tx = await api.transact({ + actions:[ + { + account, + name:"create", + authorization:[ + { + actor, + permission:"active" + } + ], + data:{ + issuer, maximum_supply + } + } + ] + },{broadcast:true,sign:true}) + console.log("\x1b[1;7;92m") + console.log("CREATE transaction details") + console.log("\x1b[0m") + console.log(tx.processed) + console.log("\x1b[1;7;92m") + console.log("RPC Push transaction action CREATE details") + console.log("\x1b[0m") + console.log(tx.processed.action_traces[0].act) + }catch(error){ + console.log(error) + console.log("\x1b[1;7;91m") + console.log("ERROR : Can't CREATE token symbol", symbol) + console.log("DETAILS :", error.details[0].message) + console.log("\x1b[0m") + } +} + +createToken(actor, amount) + diff --git a/musada/token-contract/issue.mjs b/musada/token-contract/issue.mjs new file mode 100644 index 000000000..f2839c2fb --- /dev/null +++ b/musada/token-contract/issue.mjs @@ -0,0 +1,57 @@ +import { Api, JsonRpc, RpcError, JsSignatureProvider } from 'ineryjs/dist/index.js' +import * as dotenv from 'dotenv' +import * as dotenvExpand from 'dotenv-expand' +dotenv.config() +dotenvExpand.expand(dotenv.config()) + +const account = process.env.TOKEN_ACCOUNT +const actor = process.env.USER_ACC_NAME +const symbol = process.env.SYMBOL +const amount = process.env.ISSUE_AMOUNT +const memo = process.env.ISSUE_MEMO + +const json_rpc = new JsonRpc(process.env.INERY_NODE_RPC) +const signature = new JsSignatureProvider([process.env.INERY_PRIV_KEY]); + +const api = new Api({ + rpc: json_rpc, + signatureProvider: signature +}) + +async function issueToken(to, quantity, memo){ + try{ + const tx = await api.transact({ + actions:[ + { + account, + name:"issue", + authorization:[ + { + actor, + permission:"active" + } + ], + data:{ + to, quantity, memo + } + } + ] + },{broadcast:true,sign:true}) + console.log("\x1b[1;7;92m") + console.log("ISSUE transaction details") + console.log("\x1b[0m") + console.log(tx.processed) + console.log("\x1b[1;7;92m") + console.log("RPC Push transaction action ISSUE details") + console.log("\x1b[0m") + console.log(tx.processed.action_traces[0].act) + }catch(error){ + console.log(error) + console.log("\x1b[1;7;91m") + console.log("ERROR : Can't ISSUE token symbol", symbol) + console.log("DETAILS :", error.details[0].message) + console.log("\x1b[0m") + } +} + +issueToken(actor, amount, memo) diff --git a/musada/token-contract/transfer.mjs b/musada/token-contract/transfer.mjs new file mode 100644 index 000000000..f00599170 --- /dev/null +++ b/musada/token-contract/transfer.mjs @@ -0,0 +1,57 @@ +import { Api, JsonRpc, RpcError, JsSignatureProvider } from 'ineryjs/dist/index.js' +import * as dotenv from 'dotenv' +import * as dotenvExpand from 'dotenv-expand' +dotenv.config() +dotenvExpand.expand(dotenv.config()) + +const account = process.env.TOKEN_ACCOUNT +const actor = process.env.USER_ACC_NAME +const symbol = process.env.SYMBOL +const amount = process.env.TRANSFER_AMOUNT +const memo = process.env.TRANSFER_MEMO + +const json_rpc = new JsonRpc(process.env.INERY_NODE_RPC) +const signature = new JsSignatureProvider([process.env.INERY_PRIV_KEY]); + +const api = new Api({ + rpc: json_rpc, + signatureProvider: signature +}) + +async function transferToken(from, to, quantity, memo){ + try{ + const tx = await api.transact({ + actions:[ + { + account, + name:"issue", + authorization:[ + { + actor, + permission:"active" + } + ], + data:{ + from, to, quantity, memo + } + } + ] + },{broadcast:true,sign:true}) + console.log("\x1b[1;7;92m") + console.log("TRANSFER transaction details") + console.log("\x1b[0m") + console.log(tx.processed) + console.log("\x1b[1;7;92m") + console.log("RPC Push transaction action TRANSFER details") + console.log("\x1b[0m") + console.log(tx.processed.action_traces[0].act) + }catch(error){ + console.log(error) + console.log("\x1b[1;7;91m") + console.log("ERROR : Can't TRANSFER token symbol", symbol) + console.log("DETAILS :", error.details[0].message) + console.log("\x1b[0m") + } +} + +transferToken(account, actor, amount, memo) diff --git a/musada/value-contract/create.mjs b/musada/value-contract/create.mjs new file mode 100644 index 000000000..a120523bb --- /dev/null +++ b/musada/value-contract/create.mjs @@ -0,0 +1,58 @@ +import { Api, JsonRpc, RpcError, JsSignatureProvider } from 'ineryjs/dist/index.js' +import * as dotenv from 'dotenv' +dotenv.config() + +const account = process.env.USER_ACC_NAME +const actor = account +const id = process.env.DATA_ID +const create_data = process.env.CREATE_CRUD_DATA + +const json_rpc = new JsonRpc(process.env.INERY_NODE_RPC) +const signature = new JsSignatureProvider([process.env.INERY_PRIV_KEY]); + +const api = new Api({ + rpc: json_rpc, + signatureProvider: signature +}) + +async function createCrud(id, user, data){ + try{ + const tx = await api.transact({ + actions:[ + { + account, + name:"create", + authorization:[ + { + actor, + permission:"active" + } + ], + data:{ + id, user, data + } + } + ] + },{broadcast:true,sign:true}) + console.log("\x1b[1;7;92m") + console.log("CREATE transaction details") + console.log("\x1b[0m") + console.log(tx.processed) + console.log("\x1b[1;7;92m") + console.log("RPC Push transaction action CREATE details") + console.log("\x1b[0m") + console.log(tx.processed.action_traces[0].act) + console.log("\x1b[1;7;92m") + console.log(tx.processed.action_traces[0].console) + console.log("\x1b[0m") + }catch(error){ + console.log(error) + console.log("\x1b[1;7;91m") + console.log("ERROR : Can't create contract ID", id) + console.log("DETAILS :", error.details[0].message) + console.log("\x1b[0m") + } +} + +createCrud(id, account, create_data) + diff --git a/musada/value-contract/destroy.mjs b/musada/value-contract/destroy.mjs new file mode 100644 index 000000000..9741ec452 --- /dev/null +++ b/musada/value-contract/destroy.mjs @@ -0,0 +1,57 @@ +import { Api, JsonRpc, RpcError, JsSignatureProvider } from 'ineryjs/dist/index.js' +import * as dotenv from 'dotenv' +dotenv.config() + +const account = process.env.USER_ACC_NAME +const actor = account +const id = process.env.DATA_ID + +const json_rpc = new JsonRpc(process.env.INERY_NODE_RPC) +const signature = new JsSignatureProvider([process.env.INERY_PRIV_KEY]); + +const api = new Api({ + rpc: json_rpc, + signatureProvider: signature +}) + +async function destroyContract(id){ + try{ + const tx = await api.transact({ + actions:[ + { + account, + name:"destroy", + authorization:[ + { + actor, + permission:"active" + } + ], + data:{ + id + } + } + ] + },{broadcast:true,sign:true}) + console.log("\x1b[1;7;92m") + console.log("DESTROY transaction details") + console.log("\x1b[0m") + console.log(tx.processed) + console.log("\x1b[1;7;92m") + console.log("RPC Push transaction action DESTROY details") + console.log("\x1b[0m") + console.log(tx.processed.action_traces[0].act) + console.log("\x1b[1;7;92m") + console.log(tx.processed.action_traces[0].console) + console.log("\x1b[0m") + }catch(error){ + console.log(error) + console.log("\x1b[1;7;91m") + console.log("ERROR : Can't destroy contract ID", id) + console.log("DETAILS :", error.details[0].message) + console.log("\x1b[0m") + } +} + +destroyContract(id) + diff --git a/musada/value-contract/read.mjs b/musada/value-contract/read.mjs new file mode 100644 index 000000000..9f381d36c --- /dev/null +++ b/musada/value-contract/read.mjs @@ -0,0 +1,57 @@ +import { Api, JsonRpc, RpcError, JsSignatureProvider } from 'ineryjs/dist/index.js' +import * as dotenv from 'dotenv' +dotenv.config() + +const account = process.env.USER_ACC_NAME +const actor = account +const id = process.env.DATA_ID + +const json_rpc = new JsonRpc(process.env.INERY_NODE_RPC) +const signature = new JsSignatureProvider([process.env.INERY_PRIV_KEY]); + +const api = new Api({ + rpc: json_rpc, + signatureProvider: signature +}) + +async function readContract(id){ + try{ + const tx = await api.transact({ + actions:[ + { + account, + name:"read", + authorization:[ + { + actor, + permission:"active" + } + ], + data:{ + id + } + } + ] + },{broadcast:true,sign:true}) + console.log("\x1b[1;7;92m") + console.log("READ transaction details") + console.log("\x1b[0m") + console.log(tx.processed) + console.log("\x1b[1;7;92m") + console.log("RPC Push transaction action READ details") + console.log("\x1b[0m") + console.log(tx.processed.action_traces[0].act) + console.log("\x1b[1;7;92m") + console.log(tx.processed.action_traces[0].console) + console.log("\x1b[0m") + }catch(error){ + console.log(error) + console.log("\x1b[1;7;91m") + console.log("ERROR : Can't read contract ID", id) + console.log("DETAILS :", error.details[0].message) + console.log("\x1b[0m") + } +} + +readContract(id) + diff --git a/musada/value-contract/update.mjs b/musada/value-contract/update.mjs new file mode 100644 index 000000000..f7cf5ece6 --- /dev/null +++ b/musada/value-contract/update.mjs @@ -0,0 +1,58 @@ +import { Api, JsonRpc, RpcError, JsSignatureProvider } from 'ineryjs/dist/index.js' +import * as dotenv from 'dotenv' +dotenv.config() + +const account = process.env.USER_ACC_NAME +const actor = account +const id = process.env.DATA_ID +const update_data = process.env.UPDATE_CRUD_DATA + +const json_rpc = new JsonRpc(process.env.INERY_NODE_RPC) +const signature = new JsSignatureProvider([process.env.INERY_PRIV_KEY]); + +const api = new Api({ + rpc: json_rpc, + signatureProvider: signature +}) + +async function updateContract(id, data){ + try{ + const tx = await api.transact({ + actions:[ + { + account, + name:"update", + authorization:[ + { + actor, + permission:"active" + } + ], + data:{ + id, data + } + } + ] + },{broadcast:true,sign:true}) + console.log("\x1b[1;7;92m") + console.log("U0DATE transaction details") + console.log("\x1b[0m") + console.log(tx.processed) + console.log("\x1b[1;7;92m") + console.log("RPC Push transaction action UPDATE details") + console.log("\x1b[0m") + console.log(tx.processed.action_traces[0].act) + console.log("\x1b[1;7;92m") + console.log(tx.processed.action_traces[0].console) + console.log("\x1b[0m") + }catch(error){ + console.log(error) + console.log("\x1b[1;7;91m") + console.log("ERROR : Can't update contract ID", id) + console.log("DETAILS :", error.details[0].message) + console.log("\x1b[0m") + } +} + +updateContract(id, update_data) +