wowok
Version:
Create, collaborate, and transact on your own terms with the AI-driven web3 collaboration protocol.
690 lines • 37.8 kB
JavaScript
import { SuiClient } from '@mysten/sui/client';
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
import { Transaction as TransactionBlock } from '@mysten/sui/transactions';
import { capitalize, IsValidAddress, IsValidArray, IsValidU128, IsValidU256, IsValidU64, IsValidU8 } from './utils.js';
import { isValidSuiObjectId } from '@mysten/sui/utils';
import { ERROR, Errors } from './exception.js';
export var MODULES;
(function (MODULES) {
MODULES["machine"] = "machine";
MODULES["progress"] = "progress";
MODULES["repository"] = "repository";
MODULES["permission"] = "permission";
MODULES["passport"] = "passport";
MODULES["guard"] = "guard";
MODULES["demand"] = "demand";
MODULES["order"] = "order";
MODULES["service"] = "service";
MODULES["resource"] = "resource";
MODULES["entity"] = "entity";
MODULES["wowok"] = "wowok";
MODULES["treasury"] = "treasury";
MODULES["payment"] = "payment";
MODULES["arbitration"] = "arbitration";
MODULES["arb"] = "arb";
})(MODULES || (MODULES = {}));
export var OperatorType;
(function (OperatorType) {
OperatorType[OperatorType["TYPE_QUERY"] = 1] = "TYPE_QUERY";
OperatorType[OperatorType["TYPE_NUMBER_ADD"] = 2] = "TYPE_NUMBER_ADD";
OperatorType[OperatorType["TYPE_NUMBER_SUBTRACT"] = 3] = "TYPE_NUMBER_SUBTRACT";
OperatorType[OperatorType["TYPE_NUMBER_MULTIPLY"] = 4] = "TYPE_NUMBER_MULTIPLY";
OperatorType[OperatorType["TYPE_NUMBER_DEVIDE"] = 5] = "TYPE_NUMBER_DEVIDE";
OperatorType[OperatorType["TYPE_NUMBER_MOD"] = 6] = "TYPE_NUMBER_MOD";
OperatorType[OperatorType["TYPE_NUMBER_ADDRESS"] = 7] = "TYPE_NUMBER_ADDRESS";
OperatorType[OperatorType["TYPE_STRING_LOWERCASE"] = 8] = "TYPE_STRING_LOWERCASE";
OperatorType[OperatorType["TYPE_LOGIC_AS_U256_GREATER"] = 11] = "TYPE_LOGIC_AS_U256_GREATER";
OperatorType[OperatorType["TYPE_LOGIC_AS_U256_GREATER_EQUAL"] = 12] = "TYPE_LOGIC_AS_U256_GREATER_EQUAL";
OperatorType[OperatorType["TYPE_LOGIC_AS_U256_LESSER"] = 13] = "TYPE_LOGIC_AS_U256_LESSER";
OperatorType[OperatorType["TYPE_LOGIC_AS_U256_LESSER_EQUAL"] = 14] = "TYPE_LOGIC_AS_U256_LESSER_EQUAL";
OperatorType[OperatorType["TYPE_LOGIC_AS_U256_EQUAL"] = 15] = "TYPE_LOGIC_AS_U256_EQUAL";
OperatorType[OperatorType["TYPE_LOGIC_EQUAL"] = 16] = "TYPE_LOGIC_EQUAL";
OperatorType[OperatorType["TYPE_LOGIC_HAS_SUBSTRING"] = 17] = "TYPE_LOGIC_HAS_SUBSTRING";
OperatorType[OperatorType["TYPE_LOGIC_NOT"] = 18] = "TYPE_LOGIC_NOT";
OperatorType[OperatorType["TYPE_LOGIC_AND"] = 19] = "TYPE_LOGIC_AND";
OperatorType[OperatorType["TYPE_LOGIC_OR"] = 20] = "TYPE_LOGIC_OR";
OperatorType[OperatorType["TYPE_SAFE_U8"] = 21] = "TYPE_SAFE_U8";
OperatorType[OperatorType["TYPE_SAFE_U64"] = 22] = "TYPE_SAFE_U64";
})(OperatorType || (OperatorType = {}));
export const LogicsInfo = [
[OperatorType.TYPE_LOGIC_AS_U256_GREATER, 'Unsigned Integer >', 'The first item > anything that follows'],
[OperatorType.TYPE_LOGIC_AS_U256_GREATER_EQUAL, 'Unsigned Integer >=', 'The first item >= anything that follows'],
[OperatorType.TYPE_LOGIC_AS_U256_LESSER, 'Unsigned Integer <', 'The first item < anything that follows'],
[OperatorType.TYPE_LOGIC_AS_U256_LESSER_EQUAL, 'Unsigned Integer <=', 'The first item <= anything that follows'],
[OperatorType.TYPE_LOGIC_AS_U256_EQUAL, 'Unsigned Integer =', 'The first item = anything that follows'],
[OperatorType.TYPE_LOGIC_EQUAL, 'Equal', 'Data and type are exactly equal for all items'],
[OperatorType.TYPE_LOGIC_HAS_SUBSTRING, 'Has Sub String', 'The first string contains anything that follows'],
[OperatorType.TYPE_LOGIC_NOT, 'Not', 'Not operation'],
[OperatorType.TYPE_LOGIC_AND, 'And', 'All Items And operations'],
[OperatorType.TYPE_LOGIC_OR, 'Or', 'All Items Or operations'],
];
export var ValueType;
(function (ValueType) {
ValueType[ValueType["TYPE_BOOL"] = 100] = "TYPE_BOOL";
ValueType[ValueType["TYPE_ADDRESS"] = 101] = "TYPE_ADDRESS";
ValueType[ValueType["TYPE_U8"] = 102] = "TYPE_U8";
ValueType[ValueType["TYPE_U64"] = 103] = "TYPE_U64";
ValueType[ValueType["TYPE_VEC_U8"] = 104] = "TYPE_VEC_U8";
ValueType[ValueType["TYPE_U128"] = 105] = "TYPE_U128";
ValueType[ValueType["TYPE_VEC_ADDRESS"] = 106] = "TYPE_VEC_ADDRESS";
ValueType[ValueType["TYPE_VEC_BOOL"] = 107] = "TYPE_VEC_BOOL";
ValueType[ValueType["TYPE_VEC_VEC_U8"] = 108] = "TYPE_VEC_VEC_U8";
ValueType[ValueType["TYPE_VEC_U64"] = 109] = "TYPE_VEC_U64";
ValueType[ValueType["TYPE_VEC_U128"] = 110] = "TYPE_VEC_U128";
ValueType[ValueType["TYPE_OPTION_ADDRESS"] = 111] = "TYPE_OPTION_ADDRESS";
ValueType[ValueType["TYPE_OPTION_BOOL"] = 112] = "TYPE_OPTION_BOOL";
ValueType[ValueType["TYPE_OPTION_U8"] = 113] = "TYPE_OPTION_U8";
ValueType[ValueType["TYPE_OPTION_U64"] = 114] = "TYPE_OPTION_U64";
ValueType[ValueType["TYPE_OPTION_U128"] = 115] = "TYPE_OPTION_U128";
ValueType[ValueType["TYPE_OPTION_U256"] = 116] = "TYPE_OPTION_U256";
ValueType[ValueType["TYPE_OPTION_STRING"] = 117] = "TYPE_OPTION_STRING";
ValueType[ValueType["TYPE_OPTION_VEC_U8"] = 118] = "TYPE_OPTION_VEC_U8";
ValueType[ValueType["TYPE_VEC_U256"] = 119] = "TYPE_VEC_U256";
ValueType[ValueType["TYPE_STRING"] = 120] = "TYPE_STRING";
ValueType[ValueType["TYPE_VEC_STRING"] = 121] = "TYPE_VEC_STRING";
ValueType[ValueType["TYPE_U256"] = 122] = "TYPE_U256";
})(ValueType || (ValueType = {}));
export var RepositoryValueType;
(function (RepositoryValueType) {
RepositoryValueType[RepositoryValueType["Address"] = 200] = "Address";
RepositoryValueType[RepositoryValueType["Address_Vec"] = 201] = "Address_Vec";
RepositoryValueType[RepositoryValueType["PositiveNumber"] = 202] = "PositiveNumber";
RepositoryValueType[RepositoryValueType["PositiveNumber_Vec"] = 203] = "PositiveNumber_Vec";
RepositoryValueType[RepositoryValueType["String"] = 204] = "String";
RepositoryValueType[RepositoryValueType["String_Vec"] = 205] = "String_Vec";
RepositoryValueType[RepositoryValueType["Bool"] = 206] = "Bool";
})(RepositoryValueType || (RepositoryValueType = {}));
export const RepositoryValueTypeInfo = [
{ type: RepositoryValueType.String, name: 'string', description: 'String.' },
{ type: RepositoryValueType.Address, name: 'address', description: 'Object id or Personal address.' },
{ type: RepositoryValueType.PositiveNumber, name: 'unsigned integer', description: 'Including u8, u16 ,..., u256' },
{ type: RepositoryValueType.String_Vec, name: 'string vector', description: 'Vector of string.' },
{ type: RepositoryValueType.Address_Vec, name: 'address vector', description: 'Vector of address.' },
{ type: RepositoryValueType.PositiveNumber_Vec, name: 'unsigned integer vector', description: 'Vector of unsigned integer' },
{ type: RepositoryValueType.Bool, name: 'bool', description: 'True or False.' },
];
export const OperatorTypeArray = Object.values(OperatorType).filter((v) => typeof (v) === 'number');
export const ValueTypeArray = Object.values(ValueType).filter((v) => typeof (v) === 'number');
export const IsValidOperatorType = (type) => { return OperatorTypeArray.includes(type); };
export const IsValidValueType = (type) => { return ValueTypeArray.includes(type); };
export const IsNumberType = (type) => {
return type === ValueType.TYPE_U128 || type === ValueType.TYPE_U256 ||
type === ValueType.TYPE_U64 || type === ValueType.TYPE_U8;
};
export var ContextType;
(function (ContextType) {
ContextType[ContextType["TYPE_SIGNER"] = 60] = "TYPE_SIGNER";
ContextType[ContextType["TYPE_CLOCK"] = 61] = "TYPE_CLOCK";
ContextType[ContextType["TYPE_GUARD"] = 62] = "TYPE_GUARD";
ContextType[ContextType["TYPE_CONSTANT"] = 80] = "TYPE_CONSTANT";
ContextType[ContextType["TYPE_ORDER_PROGRESS"] = 30] = "TYPE_ORDER_PROGRESS";
ContextType[ContextType["TYPE_ORDER_MACHINE"] = 31] = "TYPE_ORDER_MACHINE";
ContextType[ContextType["TYPE_ORDER_SERVICE"] = 32] = "TYPE_ORDER_SERVICE";
ContextType[ContextType["TYPE_PROGRESS_MACHINE"] = 33] = "TYPE_PROGRESS_MACHINE";
ContextType[ContextType["TYPE_ARB_ORDER"] = 34] = "TYPE_ARB_ORDER";
ContextType[ContextType["TYPE_ARB_ARBITRATION"] = 35] = "TYPE_ARB_ARBITRATION";
ContextType[ContextType["TYPE_ARB_PROGRESS"] = 36] = "TYPE_ARB_PROGRESS";
ContextType[ContextType["TYPE_ARB_MACHINE"] = 37] = "TYPE_ARB_MACHINE";
ContextType[ContextType["TYPE_ARB_SERVICE"] = 38] = "TYPE_ARB_SERVICE";
})(ContextType || (ContextType = {}));
export const IsContextWitness = (type) => {
return typeof (type) === 'number' && type >= ContextType.TYPE_ORDER_PROGRESS && type <= ContextType.TYPE_ARB_SERVICE;
};
export const ContextWitnessRetType = (type) => {
if (IsContextWitness(type))
return ValueType.TYPE_ADDRESS;
};
export const WitnessObjectModule = (type) => {
switch (type) {
case ContextType.TYPE_ARB_ARBITRATION:
case ContextType.TYPE_ARB_ORDER:
case ContextType.TYPE_ARB_SERVICE:
case ContextType.TYPE_ARB_PROGRESS:
case ContextType.TYPE_ARB_MACHINE:
return MODULES.arb;
case ContextType.TYPE_ORDER_MACHINE:
case ContextType.TYPE_ORDER_SERVICE:
case ContextType.TYPE_ORDER_PROGRESS:
return MODULES.order;
case ContextType.TYPE_PROGRESS_MACHINE:
return MODULES.progress;
default:
ERROR(Errors.WitnessTypeInvalid, `WitnessObjectModule`);
}
return MODULES.progress;
};
export const WitnessForModule = (type) => {
switch (type) {
case ContextType.TYPE_ARB_ARBITRATION:
return MODULES.arbitration;
case ContextType.TYPE_ORDER_MACHINE:
case ContextType.TYPE_ARB_MACHINE:
case ContextType.TYPE_PROGRESS_MACHINE:
return MODULES.machine;
case ContextType.TYPE_ORDER_SERVICE:
case ContextType.TYPE_ARB_SERVICE:
return MODULES.service;
case ContextType.TYPE_ORDER_PROGRESS:
case ContextType.TYPE_ARB_PROGRESS:
return MODULES.progress;
case ContextType.TYPE_ARB_ORDER:
default:
return MODULES.order;
}
};
export const SER_VALUE = [
{ type: ValueType.TYPE_BOOL, name: 'bool', description: 'boolean. eg:true or false', validator: (value) => { return (value === true || value === false); } },
{ type: ValueType.TYPE_ADDRESS, name: 'address', description: 'address or object-id. eg:0x6789af', validator: IsValidAddress },
{ type: ContextType.TYPE_SIGNER, name: 'txn signer', description: "signer address of the transaction" },
{ type: ContextType.TYPE_GUARD, name: 'guard address', description: "current guard address" },
{ type: ContextType.TYPE_CLOCK, name: 'txn time', description: "u64 number for the transaction time" },
{ type: ContextType.TYPE_ARB_ARBITRATION, name: `address`, description: "witness Arb's Arbitration address" },
{ type: ContextType.TYPE_ARB_MACHINE, name: `address`, description: "witness Arb's Machine address" },
{ type: ContextType.TYPE_ARB_ORDER, name: `address`, description: "witness Arb's Order address" },
{ type: ContextType.TYPE_ARB_PROGRESS, name: `address`, description: "witness Arb's Progress address" },
{ type: ContextType.TYPE_ARB_SERVICE, name: `address`, description: "witness Arb's Service address" },
{ type: ContextType.TYPE_ORDER_MACHINE, name: `address`, description: "witness Order's Machine address" },
{ type: ContextType.TYPE_ORDER_PROGRESS, name: `address`, description: "witness Order's Progress address" },
{ type: ContextType.TYPE_ORDER_SERVICE, name: `address`, description: "witness Order's Service address" },
{ type: ContextType.TYPE_PROGRESS_MACHINE, name: `address`, description: "witness Progress's Machine address" },
{ type: ValueType.TYPE_U64, name: 'number', description: 'u64 number. eg:23870233', validator: IsValidU64 },
{ type: ValueType.TYPE_U8, name: 'number', description: 'u8 number. eg:255', validator: IsValidU8 },
{ type: ValueType.TYPE_VEC_U8, name: 'string', description: 'string or unsigned-8 number array. eg:"[1,2,3]"' },
{ type: ValueType.TYPE_U128, name: 'number', description: 'u128 number. eg:12348900999', validator: IsValidU128 },
{ type: ValueType.TYPE_VEC_ADDRESS, name: '[address]', description: 'address array. eg:[0x2277f2, 0x3344af]' },
{ type: ValueType.TYPE_VEC_BOOL, name: '[bool]', description: 'boolean array. eg:[true, false, true]' },
{ type: ValueType.TYPE_VEC_VEC_U8, name: '[[number]]', description: 'array of u8 number array. eg:["i", "like", "wowok"]' },
{ type: ValueType.TYPE_VEC_U64, name: '[number]', description: 'u64 number array. eg:[123, 778888, 42312]' },
{ type: ValueType.TYPE_VEC_U128, name: '[number]', description: 'u128 number array. eg:[123, 778888, 42312]' },
{ type: ValueType.TYPE_OPTION_ADDRESS, name: 'option', description: 'option of address. eg:none or address' },
{ type: ValueType.TYPE_OPTION_BOOL, name: 'option', description: 'option of bool. eg:none or boolean value' },
{ type: ValueType.TYPE_OPTION_U8, name: 'option', description: 'option of u8. eg:none or u8 value' },
{ type: ValueType.TYPE_OPTION_U64, name: 'option', description: 'option of u64. eg:none or u64 value' },
{ type: ValueType.TYPE_OPTION_U128, name: 'option', description: 'option of u128. eg:none or u128 value' },
{ type: ValueType.TYPE_OPTION_U256, name: 'option', description: 'option of u256. eg:none or u256 value' },
{ type: ValueType.TYPE_VEC_U256, name: '[number]', description: 'u256 number array. eg:[123, 778888, 42312]' },
{ type: ValueType.TYPE_VEC_STRING, name: '[string]', description: 'utf8 string array. eg:["abc", "hi"]' },
{ type: ValueType.TYPE_STRING, name: 'string', description: 'utf8 string. eg:"wowok"', },
{ type: ValueType.TYPE_OPTION_STRING, name: 'option', description: 'option of utf8 string. eg:none or "some"' },
{ type: ValueType.TYPE_U256, name: 'number', description: 'u256 number. eg:12345678901233', validator: IsValidU256 },
];
export var ENTRYPOINT;
(function (ENTRYPOINT) {
ENTRYPOINT["mainnet"] = "sui mainnet";
ENTRYPOINT["testnet"] = "sui testnet";
ENTRYPOINT["wowoknet"] = "wowok";
ENTRYPOINT["localnet"] = "local wowok";
})(ENTRYPOINT || (ENTRYPOINT = {}));
const TESTNET = {
wowok: "0x396045da9236e00a1b63ff6163401df3e48f4f8a6bd40b823b90703b37815ef1",
wowok_origin: '0x396045da9236e00a1b63ff6163401df3e48f4f8a6bd40b823b90703b37815ef1',
base: '0xb96b344049ce42cff7c5bb563a847b234185544bcc4034de881051dcf1ab9d61',
base_origin: '0xb96b344049ce42cff7c5bb563a847b234185544bcc4034de881051dcf1ab9d61',
wowok_object: '0x6b4df768101e16158f3613a8e2c2f9aa2a0e5316f4b0a049319908f71222c50a',
entity_object: '0x3584e5cbc59026dc3f030420cdc1713cdd959d4244c8a2a2ef8ebbc88d1c7c2d',
treasury_cap: '0xe0a5691ee96d984cba6312e02c6fcf6772a85ca125e1e12a436091d2430220a2',
oracle_object: '0xfc3538cc8c764f1a8214e7c022aa6eeb48db0b76f13b54780f9365f7547d190d',
coin_meta: '0xb3383715fc831a3ba013440abb069b8e4cce12d0be347458162e539104a09d95',
};
const MAINNET = {
wowok: "",
wowok_origin: "",
base: "",
base_origin: "",
wowok_object: '',
entity_object: '',
treasury_cap: '',
oracle_object: '',
coin_meta: '',
};
export class Protocol {
constructor(network = ENTRYPOINT.testnet) {
this.packages = new Map();
this.signer = '';
this.wowok_object = '';
this.entity_object = '';
this.treasury_cap = '';
this.oracle_object = '';
this.machineFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.machine}::${fn}`; };
this.baseMachineFn = (fn) => { return `${this.packages.get('base')}::${MODULES.machine}::${fn}`; };
this.progressFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.progress}::${fn}`; };
this.repositoryFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.repository}::${fn}`; };
this.permissionFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.permission}::${fn}`; };
this.passportFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.passport}::${fn}`; };
this.demandFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.demand}::${fn}`; };
this.orderFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.order}::${fn}`; };
this.serviceFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.service}::${fn}`; };
this.resourceFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.resource}::${fn}`; };
this.entityFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.entity}::${fn}`; };
this.wowokFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.wowok}::${fn}`; };
this.treasuryFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.treasury}::${fn}`; };
this.paymentFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.payment}::${fn}`; };
this.guardFn = (fn) => { return `${this.packages.get('base')}::${MODULES.guard}::${fn}`; };
this.baseWowokFn = (fn) => { return `${this.packages.get('base')}::${MODULES.wowok}::${fn}`; };
this.arbitrationFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.arbitration}::${fn}`; };
this.arbFn = (fn) => { return `${this.packages.get('wowok')}::${MODULES.arb}::${fn}`; };
this.query = async (objects, options = { showContent: true }, network) => {
const ids = objects.map((value) => value.objectid);
const res = await Protocol.Client(network).call('sui_multiGetObjects', [ids, options]);
let ret = [];
for (let i = 0; i < res.length; i++) {
objects.forEach((object) => {
object.callback(this, res[i], object, options);
});
}
return res;
};
this.query_raw = async (objects, options = { showContent: true }, network) => {
return await Protocol.Client(network).call('sui_multiGetObjects', [objects, options]);
};
this.new_session = () => {
this.txb = new TransactionBlock();
return this.txb;
};
this.sessionCurrent = () => { return this.txb ? this.txb : this.new_session(); };
this.sign_excute = async (exes, priv_key, param, options = { showObjectChanges: true }, network) => {
exes.forEach((e) => { e(this, param); });
const keypair = Ed25519Keypair.fromSecretKey(priv_key);
const response = await Protocol.Client(network).signAndExecuteTransaction({
transaction: this.sessionCurrent(),
signer: keypair,
options,
});
this.txb = undefined; // reset the txb to undefine
return response;
};
this.WOWOK_TOKEN_TYPE = () => { return this.packages.get('base') + '::wowok::WOWOK'; };
this.WOWOK_COIN_TYPE = () => { return '0x2::coin::Coin<' + this.packages.get('base') + '::wowok::WOWOK>'; };
this.COINS_TYPE = () => {
switch (this.network) {
case ENTRYPOINT.testnet:
return this.CoinTypes_Testnet;
case ENTRYPOINT.mainnet:
return this.CoinTypes_Mainnet;
}
;
return [];
};
this.update_coinType = (coinType, network) => {
if (!network)
network = this.network;
switch (network) {
case ENTRYPOINT.testnet:
var r = this.CoinTypes_Testnet.filter((v) => v?.type !== coinType.type);
r.push({ ...coinType });
this.CoinTypes_Testnet = r;
break;
case ENTRYPOINT.mainnet:
var r = this.CoinTypes_Mainnet.filter((v) => v?.type !== coinType.type);
r.push({ ...coinType });
this.CoinTypes_Mainnet = r;
break;
}
;
};
this.explorerUrl = (objectid, type = 'object') => {
if (this.network === ENTRYPOINT.testnet) {
return 'https://testnet.suivision.xyz/' + type + '/' + objectid;
}
else if (this.network === ENTRYPOINT.mainnet) {
return 'https://suivision.xyz/' + type + '/' + objectid;
}
;
return '';
};
this.CoinTypes_Testnet = [
{
type: TESTNET.base + '::wowok::WOWOK',
decimals: 9,
name: 'WoWok',
symbol: 'WOW',
description: 'https://wowok.net',
iconUrl: null,
id: TESTNET.coin_meta,
},
{
type: '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',
decimals: 9,
name: 'Sui',
symbol: 'SUI',
description: '',
iconUrl: null,
id: '0x587c29de216efd4219573e08a1f6964d4fa7cb714518c2c8a0f29abfa264327d'
}
];
this.CoinTypes_Mainnet = [
{
type: MAINNET.base + '::wowok::WOWOK',
decimals: 9,
name: 'WoWok',
symbol: 'WOW',
description: 'https://wowok.net',
iconUrl: null,
id: MAINNET.coin_meta,
},
{
type: '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',
decimals: 9,
name: 'Sui',
symbol: 'SUI',
description: '',
iconUrl: null,
id: '0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3'
},
{
type: '0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37::coin::COIN',
decimals: 8,
name: 'Aptos Coin',
symbol: 'APT',
description: '',
iconUrl: null,
id: '0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8'
},
{
type: '0x356a26eb9e012a68958082340d4c4116e7f55615cf27affcff209cf0ae544f59::wal::WAL',
decimals: 9,
name: 'WAL Token',
symbol: 'WAL',
description: 'The native token for the Walrus Protocol.',
iconUrl: 'https://www.walrus.xyz/wal-icon.svg',
id: '0xcf8a31804ae40cb3e7183fe57320f87467a7750d4fa701bca1ffbb1edd37781e'
},
{
type: '0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP',
decimals: 6,
name: 'DeepBook Token',
symbol: 'DEEP',
description: 'The DEEP token secures the DeepBook protocol, the premier wholesale liquidity venue for on-chain trading.',
iconUrl: 'https://images.deepbook.tech/icon.svg',
id: '0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0'
},
{
type: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',
decimals: 6,
name: 'USDC',
symbol: 'USDC',
description: 'USDC is a US dollar-backed stablecoin issued by Circle. USDC is designed to provide a faster, safer, and more efficient way to send, spend, and exchange money around the world.',
iconUrl: 'https://circle.com/usdc-icon',
id: '0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6'
},
{
type: '0x7262fb2f7a3a14c888c438a3cd9b912469a58cf60f367352c46584262e8299aa::ika::IKA',
decimals: 9,
name: 'IKA Token',
symbol: 'IKA',
description: 'Ika Protocol.',
iconUrl: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjEwMDAiIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiIGZpbGw9Im5vbmUiPiA8cmVjdCB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiBmaWxsPSIjRUUyQjVCIi8+IDxwYXRoIGQ9Ik02NzguNzQyIDU4OC45MzRWNDEwLjQ2N0M2NzguNzQyIDMxMS45MDIgNTk4Ljg0IDIzMiA1MDAuMjc1IDIzMlYyMzJDNDAxLjcxIDIzMiAzMjEuODA4IDMxMS45MDIgMzIxLjgwOCA0MTAuNDY3VjU4OC45MzQiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iNTcuMzIyOCIvPiA8cGF0aCBkPSJNNjc4Ljc0OCA1MjkuNDQxTDY3OC43NDggNTk4Ljg0NUM2NzguNzQ4IDYzNy4xNzYgNzA5LjgyMiA2NjguMjQ5IDc0OC4xNTIgNjY4LjI0OVY2NjguMjQ5Qzc4Ni40ODMgNjY4LjI0OSA4MTcuNTU2IDYzNy4xNzYgODE3LjU1NiA1OTguODQ1TDgxNy41NTYgNTI5LjQ0MSIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI1Ny4zMjI4Ii8+IDxwYXRoIGQ9Ik01NzMuNDkxIDc2OC45MThMNTczLjQ5MSA2NjMuMTU5QzU3My40OTEgNjIyLjcyMyA1NDAuNzExIDU4OS45NDIgNTAwLjI3NCA1ODkuOTQyVjU4OS45NDJDNDU5LjgzNyA1ODkuOTQyIDQyNy4wNTYgNjIyLjcyMyA0MjcuMDU2IDY2My4xNTlMNDI3LjA1NiA3NjguOTE4IiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjU3LjMyMjgiLz4gPHBhdGggZD0iTTE4MyA1MjkuNDQxTDE4MyA1OTguODQ1QzE4MyA2MzcuMTc2IDIxNC4wNzMgNjY4LjI0OSAyNTIuNDA0IDY2OC4yNDlWNjY4LjI0OUMyOTAuNzM1IDY2OC4yNDkgMzIxLjgwOCA2MzcuMTc2IDMyMS44MDggNTk4Ljg0NUwzMjEuODA4IDUyOS40NDEiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iNTcuMzIyOCIvPiA8cGF0aCBkPSJNNTAwLjI3MiAzNzAuNzk4QzUzMy4xMjcgMzcwLjc5OCA1NTkuNzYxIDM5Ny40MzMgNTU5Ljc2MSA0MzAuMjg4QzU1OS43NjEgNDYzLjE0MiA1MzMuMTI3IDQ4OS43NzcgNTAwLjI3MiA0ODkuNzc3QzQ5NC4xNzQgNDg5Ljc3NyA0ODguMjkgNDg4Ljg1OCA0ODIuNzUxIDQ4Ny4xNTNDNDkzLjA4MiA0ODIuNDkgNTAwLjI3MiA0NzIuMSA1MDAuMjcyIDQ2MC4wMjlDNTAwLjI3MiA0NDMuNjAyIDQ4Ni45NTUgNDMwLjI4NSA0NzAuNTI4IDQzMC4yODVDNDU4LjQ1OCA0MzAuMjg1IDQ0OC4wNjcgNDM3LjQ3MyA0NDMuNDA0IDQ0Ny44MDJDNDQxLjcwMSA0NDIuMjY1IDQ0MC43ODMgNDM2LjM4MyA0NDAuNzgzIDQzMC4yODhDNDQwLjc4MyAzOTcuNDMzIDQ2Ny40MTcgMzcwLjc5OCA1MDAuMjcyIDM3MC43OThaIiBmaWxsPSJ3aGl0ZSIvPiA8L3N2Zz4=',
id: '0xe9ea4723d69d1f399e88b8d890e128813eb30dc40bc012a9aca7f300332c0347'
},
{
type: '0x83556891f4a0f233ce7b05cfe7f957d4020492a34f5405b2cb9377d060bef4bf::spring_sui::SPRING_SUI',
decimals: 9,
name: 'Spring SUI',
symbol: 'sSUI',
description: 'Infinitely liquid staking on Sui',
iconUrl: 'https://suilend-assets.s3.us-east-2.amazonaws.com/lst.png',
id: '0x06e4724ae397623b3024ed80641b57cb80397c8a8c54552241fb994be4087d9a'
},
{
type: '0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI',
decimals: 9,
name: 'haSUI',
symbol: 'haSUI',
description: 'haSUI is a staking token of SUI',
iconUrl: 'https://assets.haedal.xyz/logos/hasui.svg',
id: '0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24'
},
{
type: '0xaafb102dd0902f5055cadecd687fb5b71ca82ef0e0285d90afde828ec58ca96b::btc::BTC',
decimals: 8,
name: 'Wrapped Bitcoin',
symbol: 'wBTC',
description: 'wBTC by Sui Bridge',
iconUrl: 'https://bridge-assets.sui.io/suiWBTC.png',
id: '0x53e1cae1ad70a778d0b450d36c7c2553314ca029919005aad26945d65a8fb784'
},
{
type: '0x3a304c7feba2d819ea57c3542d68439ca2c386ba02159c740f7b406e592c62ea::haedal::HAEDAL',
decimals: 9,
name: 'Haedal',
symbol: 'HAEDAL',
description: '',
iconUrl: 'https://node1.irys.xyz/Rp80fmqZS3qBDnfyxyKEvc65nVdTunjOG3NY8T6AjpI',
id: '0xcc89fcc22f0d13de3688b94fa16d64a22079186a941914280c67101ff754263c'
},
{
type: '0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068::usdt::USDT',
decimals: 6,
name: 'Tether',
symbol: 'USDT',
description: 'Bridged Tether token',
iconUrl: 'https://bridge-assets.sui.io/usdt.png',
id: '0xda61b33ac61ed4c084bbda65a2229459ed4eb2185729e70498538f0688bec3cc'
},
{
type: '0xd1b72982e40348d069bb1ff701e634c117bb5f741f44dff91e472d3b01461e55::stsui::STSUI',
decimals: 9,
name: 'AlphaFi Staked SUI',
symbol: 'stSUI',
description: 'Instantly unstakable liquid staking token by AlphaFi',
iconUrl: 'https://images.alphafi.xyz/stSUI.png',
id: '0x99235d8d9f508bed2799e1eef59a7622405bc74c50f32cefdc9ec19344ad2cec'
},
{
type: '0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH',
decimals: 8,
name: 'ETH by Sui Bridge',
symbol: 'ETH',
description: 'Bridged Ether by Sui Bridge',
iconUrl: 'https://bridge-assets.sui.io/eth.png',
id: '0x89b04ba87f8832d4d76e17a1c9dce72eb3e64d372cf02012b8d2de5384faeef0'
},
{
type: '0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD',
decimals: 6,
name: 'AUSD',
symbol: 'AUSD',
description: 'AUSD is a digital dollar issued by Agora',
iconUrl: 'https://static.agora.finance/ausd-token-icon.svg',
id: '0xc72215e72d16005840180ca3b26f20c9ca3c59d6516c8eea9846e8aa8ce9d6b5'
}
];
this.coinTypeInfo = (token_type, handler, network) => {
if (!token_type)
return 'loading';
let r = this.COINS_TYPE().find((v) => v?.type === token_type);
if (!r) {
Protocol.Client(network).getCoinMetadata({ coinType: token_type }).then((res) => {
if (res?.decimals && res?.symbol) {
const obj = { type: token_type, ...res };
this.update_coinType(obj, network);
handler(obj);
}
}).catch((e) => {
console.log(e);
});
}
else {
return r;
}
;
return 'loading';
};
this.WOWOK_OBJECTS_TYPE = () => Object.keys(MODULES).map((key) => { let i = (key === MODULES.guard ? this.packages.get('base') : this.packages.get('wowok')) + '::' + key + '::'; return i + capitalize(key); });
this.WOWOK_OBJECTS_PREFIX_TYPE = () => Object.keys(MODULES).map((key) => { return (key === MODULES.guard ? this.packages.get('base') : this.packages.get('wowok')) + '::' + key + '::'; });
this.object_name_from_type_repr = (type_repr) => {
if (!type_repr)
return '';
let i = type_repr.indexOf('::');
if (i > 0 && this.hasPackage(type_repr.slice(0, i))) {
i = type_repr.indexOf('<');
if (i > 0) {
type_repr = type_repr.slice(0, i);
}
let n = type_repr.lastIndexOf('::');
if (n > 0) {
return type_repr.slice(n + 2);
}
}
return '';
};
this.module_object_name_from_type_repr = (type_repr) => {
if (!type_repr)
return '';
let i = type_repr.indexOf('::');
if (i > 0 && this.hasPackage(type_repr.slice(0, i))) {
i = type_repr.indexOf('<');
if (i > 0) {
type_repr = type_repr.slice(0, i);
}
let n = type_repr.indexOf('::');
if (n > 0) {
return type_repr.slice(n + 2);
}
}
return '';
};
this.use_network(network);
this.new_session();
}
static Instance() {
if (!Protocol._instance) {
Protocol._instance = new Protocol();
}
;
return Protocol._instance;
}
static Client(network) {
const n = Protocol.Instance().networkUrl(network)?.url;
if (!n)
ERROR(Errors.networkInvalid, Object.entries(ENTRYPOINT));
return new SuiClient({ url: n });
}
use_network(network = ENTRYPOINT.testnet) {
this.network = network;
switch (network) {
case ENTRYPOINT.localnet:
break;
case ENTRYPOINT.wowoknet:
break;
case ENTRYPOINT.testnet:
this.packages.set('wowok', TESTNET.wowok);
this.packages.set('base', TESTNET.base);
this.packages.set('wowok_origin', TESTNET.wowok_origin); //@ orgin package!!!
this.packages.set('base_origin', TESTNET.base_origin);
this.wowok_object = TESTNET.wowok_object;
this.entity_object = TESTNET.entity_object;
this.treasury_cap = TESTNET.treasury_cap;
//this.graphql = 'https://sui-testnet.mystenlabs.com/graphql';
this.oracle_object = TESTNET.oracle_object;
break;
case ENTRYPOINT.mainnet:
this.packages.set('wowok', MAINNET.wowok);
this.packages.set('base', MAINNET.base);
this.packages.set('wowok_origin', MAINNET.wowok_origin); //@ orgin package!!!
this.packages.set('base_origin', MAINNET.base_origin);
this.wowok_object = MAINNET.wowok_object;
this.entity_object = MAINNET.entity_object;
this.treasury_cap = MAINNET.treasury_cap;
//this.graphql = 'https://sui-mainnet.mystenlabs.com/graphql';
this.oracle_object = MAINNET.oracle_object;
break;
}
;
}
package(type) {
return this.packages.get(type) ?? '';
}
objectWowok() { return this.wowok_object; }
objectEntity() { return this.entity_object; }
objectOracle() { return this.oracle_object; }
objectTreasuryCap() { return this.treasury_cap; }
IsNetworkValid() { return this.network !== undefined; }
networkUrl(network) {
if (!network) {
if (!this.IsNetworkValid()) {
ERROR(Errors.networkInvalid, Object.entries(ENTRYPOINT));
}
network = this.network;
}
switch (network) {
case ENTRYPOINT.localnet:
return { url: "http://127.0.0.1:9000", network: network };
case ENTRYPOINT.wowoknet:
return { url: "", network: this.network };
case ENTRYPOINT.testnet:
return { url: "https://fullnode.testnet.sui.io:443", network: network };
case ENTRYPOINT.mainnet:
return { url: "https://fullnode.mainnet.sui.io:443", network: network };
}
;
ERROR(Errors.networkInvalid, Object.entries(ENTRYPOINT));
return { network: ENTRYPOINT.testnet, url: '' };
}
;
static TXB_OBJECT(txb, arg) {
if (typeof (arg) == 'string')
return txb.object(arg);
return arg;
}
hasPackage(pack) {
for (let value of this.packages.values()) {
if (pack.includes(value)) {
return true;
}
}
return false;
}
}
// used in service, discount, order, because service has COIN wrapper for TOKEN
Protocol.SUI_TOKEN_TYPE = '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI'; // TOKEN_TYPE
// used in demand, reward, ...
Protocol.SUI_COIN_TYPE = '0x0000000000000000000000000000000000000000000000000000000000000002::coin::Coin<0x2::sui::SUI>'; // COIN TYPE
Protocol.CLOCK_OBJECT = { objectId: '0x6', mutable: false, initialSharedVersion: 1 };
Protocol.IsValidObjects = (arr) => {
return IsValidArray(arr, (v) => {
if (!v)
return false;
if (typeof (v) === 'string' && !isValidSuiObjectId(v)) {
return false;
}
return true;
});
};
export class RpcResultParser {
}
RpcResultParser.Object_Type_Extra = () => {
let names = Object.keys(MODULES).map((key) => { return key + '::' + capitalize(key); });
names.push('order::Discount');
return names;
};
RpcResultParser.objectids_from_response = (protocol, response, concat_result) => {
//console.log(response)
let ret = new Map();
if (response?.objectChanges) {
response.objectChanges.forEach((change) => {
RpcResultParser.Object_Type_Extra().forEach((name) => {
if (change.type == 'created' && protocol.module_object_name_from_type_repr(change.objectType) === name) {
if (ret.has(name)) {
ret.get(name)?.push(change.objectId);
}
else {
ret.set(name, [change.objectId]);
}
}
});
});
}
if (concat_result) {
ret.forEach((value, key) => {
if (concat_result.has(key)) {
concat_result.set(key, concat_result.get(key).concat(value));
}
else {
concat_result.set(key, value);
}
});
}
return ret;
};
//# sourceMappingURL=protocol.js.map