@completium/completium-cli
Version:
360 lines (301 loc) • 9.25 kB
JavaScript
/*!
* completium-cli <https://github.com/completium/completium-cli>
*
* Copyright (c) 2021-2025, edukera, SAS.
* Released under the MIT License.
*/
import * as Main from './main.js'
import assert from 'node:assert';
import { BigNumber } from 'bignumber.js'
function computeCost(op) {
if (op.results !== undefined) {
var cost = new BigNumber('0');
op.results.forEach(x => {
const fee = new BigNumber(x.fee);
const storage_limit = new BigNumber(x.storage_limit);
cost = cost.plus(fee.plus(storage_limit.multipliedBy(new BigNumber('250'))))
});
return cost;
} else {
return null;
}
}
function updateCost(op) {
if (op !== undefined && op != null) {
const cost = computeCost(op);
return { ...op, cost: cost };
} else {
return op;
}
}
export async function deploy(path, obj, originate = false) {
const options = { ...obj, file: path, force: true, originate: originate };
const x = await Main.deploy(options);
if (x == null) {
return [null, null];
} else {
var [contract_id, op] = x;
if (op != null) {
op = updateCost(op);
}
const contract = await getContract(contract_id)
return [contract, op];
}
}
export async function originate(path, obj) {
return await deploy(path, obj, true);
}
export async function call(input, obj) {
const options = { ...obj, contract: input, force: true, verbose: true };
var op = await Main.callContract(options);
op = updateCost(op);
return op;
}
export async function runGetter(getterid, contract, options) {
const obj = options ? options : {};
return Main.runGetter({...obj, getterid: getterid, contract: contract});
}
export async function runView(viewid, contract, options) {
const obj = options ? options : {};
return Main.runView({...obj, viewid: viewid, contract: contract});
}
export async function getStorage(contract_id) {
return Main.getStorage(contract_id);
}
export async function getContract(contract_id) {
return new Promise(async (resolve, reject) => {
let contract = null;
try {
contract = await Main.getTezosContract(contract_id);
} catch (ex) {
reject(ex)
}
const contract_address = contract.address;
const x = await Main.getEntries(contract_address, true);
const entries = JSON.parse(x);
const sigs = entries.map(x => x);
sigs.forEach(sig => {
const id = sig.name.startsWith("%") ? sig.name.substring(1) : sig.name;
if (id === "_set_now") {
contract['_setNow'] = (x => call(contract_id, {
arg: { "": x },
entry: "_set_now"
}))
}
contract[id] = (settings => call(contract_id, {
...settings,
entry: id
}))
});
contract["default"] = (settings => call(contract_id, {
...settings,
entry: "default"
}));
contract["getStorage"] = (p => getStorage(contract_id));
contract["getBalance"] = (p => getBalance(contract_id));
resolve(contract);
});
}
export async function getBalance(alias, obj) {
const options = alias === undefined ? {} : obj === undefined ? { alias: alias } : { ...obj, alias: alias };
return Main.getBalance(options);
}
export function setAccount(account, obj) {
const options = obj === undefined ? { account: account } : { ...obj, account: account };
return Main.setAccount(options);
}
export function setEndpoint(endpoint, obj) {
const options = obj === undefined ? { endpoint: endpoint } : { ...obj, endpoint: endpoint };
return Main.setEndpoint(options);
}
export function getAddress(alias) {
const options = { alias: alias };
return Main.getAddress(options);
}
export function getAccount(alias) {
const options = { alias: alias };
return Main.getAccountExt(options);
}
export function pack(value) {
const options = { value: value };
return Main.pack(options);
}
export function packTyped(data, typ) {
const options = { data: data, typ: typ };
return Main.packTyped(options);
}
export function blake2b(value) {
const options = { value: value };
return Main.blake2b(options);
}
export function keccak(value) {
const options = { value: value };
return Main.keccak(options);
}
export async function sign(value, obj) {
const options = {...obj, value: value };
return await Main.sign(options);
}
export async function signFromSk(value, obj) {
const options = {...obj, value: value };
return await Main.signFromSk(options);
}
export function setQuiet(value) {
Main.setQuiet(value);
}
export async function setNow(contract_id, date) {
const options = { contract: contract_id, date: date, force: true, verbose: true };
var op = await Main.setNow(options);
op = updateCost(op);
return op;
}
export function setMockupNow(date) {
const options = { date: date, force: true, verbose: true };
Main.setMockupNow(options);
}
export function getMockupNow() {
return Main.getMockupNow()
}
export function setMockupLevel(level) {
const options = { value: level, force: true, verbose: true };
Main.setMockupLevel(options);
}
export function getMockupLevel() {
return Main.getMockupLevel()
}
export function setMockupChainId(chainid) {
const options = { value: chainid, force: true, verbose: true };
Main.setMockupChainId(options);
}
export async function mockupBake(obj) {
const options = {...obj, force: true, verbose: false };
await await Main.mockupBake(options)
}
export async function transfer(from, to, amount) {
const options = { from: from, to: to, vamount: amount, force: true, verbose: true };
var op = await Main.transfer(options);
return op;
}
function expr_micheline_to_json(v) {
return Main.expr_micheline_to_json(v);
}
function json_micheline_to_expr(v) {
return Main.json_micheline_to_expr(v);
}
export function exprMichelineToJson(v) {
return expr_micheline_to_json(v);
}
export function jsonMichelineToExpr(v) {
return json_micheline_to_expr(v);
}
export async function checkBalanceDelta(a, d, f) {
const balance_before = (await (getBalance(a))).toNumber();
try {
await f ();
const balance_after = (await (getBalance(a))).toNumber();
// After Minus Before
const delta = balance_after - balance_before;
const account = getAccount(a);
const account_id = (account !== undefined && account != null) ? account.name : a;
const errorMsg = "Invalid delta balance of " + (delta / 1000000) + "XTZ for " + account_id.toString();
try {
if (!d((balance_after - balance_before) / 1000000)) {
throw (new Error(errorMsg))
}
} catch (e) {
if (isNaN(d) || !(typeof d === 'number')) {
throw e
} else if (delta !== d * 1000000) {
throw (new Error(errorMsg))
}
}
} catch (e) {
throw e
}
}
export async function getValueFromBigMap(id, data, type, type_value) {
var v = await Main.getValueFromBigMap(id, data, type, type_value);
return v;
}
export async function expectToThrow(f, e) {
if (e === undefined) {
throw new Error("expectToThrow: error must be defined")
}
const m = "Failed to throw" + e;
try {
await f();
throw new Error(m)
} catch (ex) {
if (ex.value) {
assert(ex.value == e, `${ex.value} instead of ${e}`)
} else {
throw ex
}
}
}
export function getEndpoint() {
const config = Main.getConfig();
return config.tezos.endpoint;
}
export function isMockup() {
return getEndpoint() === "mockup";
}
export async function exprMichelineFromArg(arg, type) {
var v = await Main.exprMichelineFromArg(arg, type);
return v;
}
export function taquitoExecuteSchema(arg, type) {
var v = Main.taquitoExecuteSchema(arg, type);
return v;
}
export async function generateContractInterface(path, options) {
const obj = options ? options : {};
const res = await Main.generate_contract_interface({...obj, path: path});
return JSON.parse(res);
}
export async function exec_batch(ts, options) {
const obj = options ? options : {};
return await Main.exec_batch(ts, obj);
}
export async function getRawStorage(contract_address) {
return Main.getRawStorage(contract_address);
}
export async function getKeysFrom(sk) {
return Main.getKeysFrom(sk)
}
export async function registerGlobalConstant(options) {
return Main.registerGlobalConstant(options)
}
export async function mockupInit(options) {
return Main.mockupInit(options)
}
export async function importContract(options) {
return Main.importContract(options)
}
export async function rpcGet(uri) {
return Main.rpcGet(uri)
}
export async function getContractScript(contract_address) {
return Main.getContractScript(contract_address)
}
export async function getStorageType(contract_address) {
return Main.getStorageType(contract_address)
}
export async function getParameterType(contract_address) {
return Main.getParameterType(contract_address)
}
export function build_json_type(obj) {
return Main.build_json_type(obj)
}
export function get_sandbox_exec_address() {
return Main.get_sandbox_exec_address()
}
export async function interp(options) {
return Main.interp(options)
}
export async function retrieveBalanceFor(addr) {
return Main.retrieveBalanceFor(addr)
}
export async function getChainId() {
return Main.getChainId()
}