UNPKG

wowok

Version:

Create, collaborate, and transact on your own terms with the AI-driven web3 collaboration protocol.

690 lines 37.8 kB
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