@ocap/client 1.13.46 → 1.13.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/extension.js"],"names":["get","require","omit","cloneDeep","camelCase","toTypeInfo","transactions","typeUrls","multiSignTxs","multiSignV2Txs","createMessage","getMessageType","bytesToHex","toBase58","toBase64","toHex","toBuffer","fromTokenToUnit","fromUnitToToken","DEFAULT_TOKEN_DECIMAL","formatFactoryState","preMintFromFactory","isValidFactory","toDelegateAddress","toAssetAddress","toFactoryAddress","toTokenAddress","toStakeAddress","toRollupAddress","debug","name","createExtensionMethods","client","encodeTxAsBase64","Object","defineProperty","value","loading","ready","callbacks","token","getContext","decimal","amount","getTxSendMethods","map","x","getTxEncodeMethods","getTxSignMethods","getTxMultiSignMethods","concat","getType","fn","decodeTx","input","Transaction","deserializeBinary","toObject","ctx","context","Promise","resolve","push","result","doRawQuery","chainId","consensus","tokenStateMap","Map","forEach","cb","getTokenStateMap","addressList","notExistAddressList","address","has","set","size","length","getTokenState","code","state","Error","all","getWallet","wallet","publicKey","toAddress","pk","txEncodeFn","tx","delegator","w","from","nonce","Date","now","signatures","Array","isArray","signaturesList","itx","typeUrl","type","txObj","signature","Buffer","txToSignBytes","serializeBinary","object","buffer","encodeMethod","__tx__","txSendFn","commit","encoded","res","sign","reject","txBytes","txStr","hash","sendTx","err","sendMethod","_formatEncodedTx","encoding","txSignFn","signMethod","includes","txMultiSignFn","data","unshift","signer","multiSignMethod","item","find","s","declare","moniker","issuer","extra","itxData","sendDeclareTx","migrateAccount","to","sendAccountMigrateTx","delegate","privileges","ops","rules","txTypes","values","filter","startsWith","some","sendDelegateTx","revokeDelegate","sendRevokeDelegateTx","Boolean","toString","createAsset","parent","ttl","readonly","transferrable","payload","sendCreateAssetTx","updateAsset","sendUpdateAssetTx","createAssetFactory","factory","description","settlement","limit","trustedIssuers","output","hooks","display","sendCreateFactoryTx","preMintAsset","inputs","owner","options","ignoreFields","factoryState","issuerState","getFactoryState","getAccountState","asset","variables","assign","entries","key","acquireAsset","sendAcquireAssetV2Tx","mintAsset","sendMintAssetTx","transfer","assets","tokens","memo","contextToken","tmpTokens","tokensMap","t","sendTransferV2Tx","stake","locked","message","multiSignStakeTx","receiver","signStakeTx","sendStakeTx","revokeStake","sendRevokeStakeTx","outputs","createRollup","props","requiredProps","tokenAddress","toBNStr","n","maxStakeAmount","minStakeAmount","minSignerCount","maxSignerCount","minBlockSize","maxBlockSize","minBlockInterval","minBlockConfirmation","minDepositAmount","maxDepositAmount","minWithdrawAmount","maxWithdrawAmount","depositFeeRate","withdrawFeeRate","proposerFeeShare","minDepositFee","maxDepositFee","minWithdrawFee","maxWithdrawFee","erc20TokenAddress","erc20ContractAddress","sendCreateRollupTx","prepareExchange","offerToken","offerAssets","demandToken","demandAssets","offerTokens","demandTokens","tmpOfferTokens","tmpDemandTokens","signExchangeV2Tx","sender","finalizeExchange","multiSignExchangeV2Tx","exchange","sendExchangeV2Tx","createToken","symbol","unit","icon","totalSupply","tokenDecimal","sendCreateTokenTx","module","exports"],"mappings":"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","file":"extension.js","sourcesContent":["/* eslint-disable prefer-object-spread */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable object-curly-newline */\nconst get = require('lodash/get');\nconst omit = require('lodash/omit');\nconst cloneDeep = require('lodash/cloneDeep');\nconst camelCase = require('lodash/camelCase');\nconst { toTypeInfo } = require('@arcblock/did');\nconst { transactions, typeUrls, multiSignTxs, multiSignV2Txs } = require('@ocap/proto');\nconst { createMessage, getMessageType } = require('@ocap/message');\nconst { bytesToHex, toBase58, toBase64, toHex, toBuffer, fromTokenToUnit, fromUnitToToken } = require('@ocap/util');\nconst { DEFAULT_TOKEN_DECIMAL } = require('@ocap/util/lib/constant');\nconst { formatFactoryState, preMintFromFactory, isValidFactory } = require('@ocap/asset');\nconst {\n toDelegateAddress,\n toAssetAddress,\n toFactoryAddress,\n toTokenAddress,\n toStakeAddress,\n toRollupAddress,\n} = require('@arcblock/did-util');\n\nconst debug = require('debug')(require('../package.json').name);\n\n/**\n * Generate extension methods on the fly\n *\n * @public\n * @param {object} client\n * @param {object} [{ encodeTxAsBase64 = false }={}]\n */\nconst createExtensionMethods = (client, { encodeTxAsBase64 = false } = {}) => {\n Object.defineProperty(client, 'ctx', {\n value: {\n loading: false,\n ready: false,\n callbacks: [],\n },\n });\n\n /**\n * Format big number presentation amount to token number\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#fromUnitToToken\n * @param {string} value\n * @returns {string}\n */\n client.fromUnitToToken = async (value) => {\n const { token } = await client.getContext();\n return fromUnitToToken(value, token.decimal);\n };\n\n /**\n * Encode amount to corresponding token big number presentation\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#fromTokenToUnit\n * @param {number} amount\n * @returns {BN}\n */\n client.fromTokenToUnit = async (amount) => {\n const { token } = await client.getContext();\n return fromTokenToUnit(amount, token.decimal);\n };\n\n /**\n * List all transaction send methods\n * Each method can send one kind of transactions supported by forge core, such as `DeclareTx`\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxSendMethods\n * @returns {Array<string>} method name list\n */\n client.getTxSendMethods = () => transactions.map((x) => camelCase(`send_${x}`));\n\n /**\n * List all transaction encode methods, each method can be used to encode transaction to buffer and object\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxEncodeMethods\n * @returns {Array<string>} method name list\n */\n client.getTxEncodeMethods = () => transactions.map((x) => camelCase(`encode_${x}`));\n\n /**\n * List all transaction sign methods, each method can be used to sign transaction to an object\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxSignMethods\n * @returns {Array<string>} method name list\n */\n client.getTxSignMethods = () => transactions.map((x) => camelCase(`sign_${x}`));\n\n /**\n * List all transaction multi sign methods, each method can be used to do multi sign a transaction\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxMultiSignMethods\n * @returns {Array<string>} method name list\n */\n client.getTxMultiSignMethods = () => multiSignTxs.concat(multiSignV2Txs).map((x) => camelCase(`multi_sign_${x}`));\n\n /**\n * Get protobuf message class by name, only supports forge-built-in types\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getType\n * @param {string} x\n * @returns {class|null} message type\n */\n client.getType = (x) => getMessageType(x).fn;\n\n /**\n * Decode transaction buffer/base64/base58 to an object\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#decodeTx\n * @param {buffer|hex|base48|base64} input\n * @returns {object} transaction object\n */\n client.decodeTx = (input) => {\n const Transaction = client.getType('Transaction');\n return Transaction.deserializeBinary(toBuffer(input)).toObject();\n };\n\n /**\n * Ensure a connection is bootstrapped with some meta info fetched from chain node\n *\n * @private\n * @param {string} [conn=undefined]\n * @returns {object}\n */\n client.getContext = async () => {\n if (client.ctx.ready) {\n return client.context;\n }\n\n if (client.ctx.loading) {\n return new Promise((resolve) => {\n client.ctx.callbacks.push(() => resolve(client.context));\n });\n }\n\n client.ctx.loading = true;\n const result = await client.doRawQuery(`{\n getChainInfo {\n code\n info {\n network\n consensusVersion\n }\n }\n getForgeState {\n code\n state {\n token {\n decimal\n symbol\n }\n }\n }\n }`);\n\n client.context = {\n chainId: get(result, 'getChainInfo.info.network'),\n consensus: get(result, 'getChainInfo.info.consensusVersion'),\n token: get(result, 'getForgeState.state.token'),\n tokenStateMap: new Map(),\n };\n\n client.ctx.ready = true;\n client.ctx.loading = false;\n client.ctx.callbacks.forEach((cb) => cb());\n debug('context ready');\n\n return client.context;\n };\n\n client.getTokenStateMap = async (addressList) => {\n const result = new Map();\n const notExistAddressList = [];\n addressList.forEach((address) => {\n if (client.context.tokenStateMap.has(address)) {\n result.set(address, client.context.tokenStateMap.get(address));\n } else {\n notExistAddressList.push(address);\n }\n });\n\n if (result.size === addressList.length) {\n return result;\n }\n\n const getTokenState = async (address) => {\n const {\n getTokenState: { code, state },\n } = await client.doRawQuery(`{\n getTokenState(address: \"${address}\") {\n code\n state {\n decimal\n }\n }\n }`);\n\n if (code !== 'OK') {\n throw new Error(`get token ${address} state failed`);\n }\n\n result.set(address, state);\n client.context.tokenStateMap.set(address, state);\n };\n\n await Promise.all(notExistAddressList.map((address) => getTokenState(address)));\n\n return result;\n };\n\n // Unify a client wallet | forge managed wallet\n const getWallet = (wallet) => {\n if (!wallet) {\n return {\n address: '',\n publicKey: '',\n };\n }\n\n if (typeof wallet.toAddress === 'function') {\n return {\n address: wallet.address,\n publicKey: wallet.publicKey,\n };\n }\n\n return {\n address: wallet.address,\n publicKey: wallet.pk || wallet.publicKey || '',\n };\n };\n\n // Generate transaction sign/send/encode functions on fly\n transactions.forEach((x) => {\n /**\n * Encode a transaction\n *\n * @param {object} input\n * @param {object} input.tx - data of the transaction\n * @param {object} input.tx.itx - the actual transaction object\n * @param {object} [input.tx.from] - the sender address, can be derived from wallet\n * @param {object} [input.tx.nonce] - the tx nonce, defaults to Date.now if not set\n * @param {object} [input.tx.chainId] - the chainId\n * @param {object} [input.tx.signature] - the signature\n * @param {object} [input.tx.signatures] - the signature list\n * @param {object} input.wallet - the wallet used to sign the transaction\n * @param {object} input.delegator - the wallet address that delegated permissions to the `input.wallet` address\n * @returns Promise\n */\n const txEncodeFn = async ({ tx, wallet, delegator }) => {\n const w = getWallet(wallet);\n\n // Determine sender address\n const address = tx.from || w.address;\n const pk = tx.pk || w.publicKey;\n\n // Determine chainId & nonce, only attach new one when not exist\n const nonce = typeof tx.nonce === 'undefined' ? Date.now() : tx.nonce;\n let chainId = tx.chainId || '';\n if (!chainId) {\n const context = await client.getContext();\n // eslint-disable-next-line prefer-destructuring\n chainId = context.chainId;\n }\n\n // Determine signatures for multi sig\n let signatures = [];\n if (Array.isArray(tx.signatures)) {\n // eslint-disable-next-line prefer-destructuring\n signatures = tx.signatures;\n }\n if (Array.isArray(tx.signaturesList)) {\n signatures = tx.signaturesList;\n }\n\n // Determine itx\n let itx = null;\n if (tx.itx.typeUrl && tx.itx.value) {\n // eslint-disable-next-line prefer-destructuring\n itx = tx.itx;\n } else {\n itx = { type: x, value: tx.itx };\n }\n\n const txObj = createMessage('Transaction', {\n from: tx.delegator ? address : delegator || address,\n nonce,\n pk,\n chainId,\n signature: tx.signature || Buffer.from([]),\n signatures,\n delegator: tx.delegator || (delegator ? address : ''),\n itx,\n });\n const txToSignBytes = txObj.serializeBinary();\n\n debug(`encodeTx.${x}.txObj`, txObj.toObject());\n\n return { object: txObj.toObject(), buffer: Buffer.from(txToSignBytes) };\n };\n\n const encodeMethod = camelCase(`encode_${x}`);\n txEncodeFn.__tx__ = encodeMethod;\n client[encodeMethod] = txEncodeFn;\n\n /**\n * Send a transaction\n *\n * @param {object} input\n * @param {object} input.tx - data of the transaction\n * @param {object} input.tx.itx - the actual transaction object\n * @param {object} [input.tx.from] - the sender address, can be derived from wallet\n * @param {object} [input.tx.nonce] - the tx nonce, defaults to Date.now if not set\n * @param {object} [input.tx.chainId] - the chainId\n * @param {object} [input.tx.signature] - the signature\n * @param {object} [input.tx.signatures] - the signatures\n * @param {object} [input.commit=false] - whether we should wait for transaction commit\n * @param {object} input.wallet - the wallet used to sign the transaction, either a forge managed wallet or user managed wallet\n * @param {object} [input.signature] - the signature of the tx, if exist, we will not sign the transaction\n * @param {object} input.delegator - the wallet address that delegated permissions to the `input.wallet` address\n * @returns {Promise<string>}\n */\n const txSendFn = async ({ tx, wallet, signature, delegator, commit = false }) => {\n let encoded;\n if (signature) {\n encoded = tx;\n encoded.signature = signature;\n } else if (tx.signature) {\n const res = await txEncodeFn({ tx, wallet, delegator });\n encoded = res.object;\n } else {\n const res = await txEncodeFn({ tx, wallet, delegator });\n encoded = res.object;\n encoded.signature = wallet.sign(bytesToHex(res.buffer));\n }\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n if (encodeTxAsBase64) {\n const txObj = createMessage('Transaction', encoded);\n const txBytes = txObj.serializeBinary();\n const txStr = toBase64(txBytes);\n debug(`sendTx.${x}.txObj`, txObj.toObject());\n const { hash } = await client.sendTx({ tx: txStr, commit });\n resolve(hash);\n } else {\n const txObj = createMessage('Transaction', encoded).toObject();\n debug(`sendTx.${x}.txObj`, txObj);\n const { hash } = await client.sendTx({ tx: txObj, commit });\n resolve(hash);\n }\n } catch (err) {\n reject(err);\n }\n });\n };\n\n const sendMethod = camelCase(`send_${x}`);\n txSendFn.__tx__ = sendMethod;\n client[sendMethod] = txSendFn;\n\n const _formatEncodedTx = async (tx, encoding) => {\n if (encoding) {\n const { buffer: txBytes } = await txEncodeFn({ tx });\n if (encoding === 'base64') {\n return toBase64(txBytes);\n }\n if (encoding === 'base58') {\n return toBase58(txBytes);\n }\n if (encoding === 'base16' || encoding === 'hex') {\n return toHex(txBytes);\n }\n return txBytes;\n }\n\n return tx;\n };\n\n // Generate transaction signing function\n const txSignFn = async ({ tx, wallet, delegator, encoding = '' }) => {\n if (tx.signature) {\n delete tx.signature;\n }\n\n const { object, buffer } = await txEncodeFn({ tx, wallet, delegator });\n object.signature = wallet.sign(buffer);\n\n return _formatEncodedTx(object, encoding);\n };\n const signMethod = camelCase(`sign_${x}`);\n txSignFn.__tx__ = signMethod;\n client[signMethod] = txSignFn;\n\n // TODO: verify existing signatures before adding new signatures\n // Generate transaction multi sign function\n if (multiSignTxs.includes(x)) {\n const txMultiSignFn = async ({ tx, wallet, delegator, data, encoding = '' }) => {\n if (typeof wallet.toAddress !== 'function') {\n throw new Error('Multisig requires a valid wallet');\n }\n tx.signaturesList = tx.signatures || tx.signaturesList || [];\n if (delegator) {\n tx.signaturesList.unshift({\n pk: wallet.publicKey,\n signer: delegator,\n delegator: wallet.address,\n data,\n });\n } else {\n tx.signaturesList.unshift({\n pk: wallet.publicKey,\n signer: wallet.address,\n delegator: '',\n data,\n });\n }\n\n const { object, buffer } = await txEncodeFn({ tx, wallet });\n object.signaturesList[0].signature = wallet.sign(bytesToHex(buffer));\n return _formatEncodedTx(object, encoding);\n };\n const multiSignMethod = camelCase(`multi_sign_${x}`);\n txMultiSignFn.__tx__ = multiSignMethod;\n client[multiSignMethod] = txMultiSignFn;\n }\n\n if (multiSignV2Txs.includes(x)) {\n const txMultiSignFn = async ({ tx, wallet, encoding = '' }) => {\n if (typeof wallet.toAddress !== 'function') {\n throw new Error('Multisig requires a valid wallet');\n }\n\n const signer = wallet.address;\n const signatures = cloneDeep(tx.signatures || tx.signaturesList || []);\n const item = signatures.find((s) => s.signer === signer || s.delegator === signer);\n if (!item) {\n throw new Error('Signer not in the list');\n }\n\n tx.signaturesList = signatures.map((s) => omit(s, ['signature']));\n const { object, buffer } = await txEncodeFn({ tx, wallet });\n\n item.signature = wallet.sign(bytesToHex(buffer));\n object.signaturesList = signatures;\n return _formatEncodedTx(object, encoding);\n };\n const multiSignMethod = camelCase(`multi_sign_${x}`);\n txMultiSignFn.__tx__ = multiSignMethod;\n client[multiSignMethod] = txMultiSignFn;\n }\n });\n\n /**\n * Declare an DID and it's public key on chain\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#declare\n * @param {object} params\n * @param {string} params.moniker - user nickname\n * @param {string} [params.issuer=\"\"] - who issued the account\n * @param {object} [params.data=undefined] - who issued the account\n * @param {WalletObject} params.wallet - wallet to sign the tx\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the transaction hash once resolved\n */\n client.declare = ({ moniker, issuer = '', data, wallet }, extra) => {\n let itxData = data;\n\n // If there is no data attached to the account, we can attach wallet type by default\n if (!itxData) {\n itxData = { typeUrl: 'json', value: toTypeInfo(wallet.address, true) };\n }\n\n return client.sendDeclareTx(\n {\n tx: {\n itx: { moniker, issuer, data: itxData },\n },\n wallet,\n },\n extra\n );\n };\n\n /**\n * Migrate current account to a new account\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#migrateAccount\n * @param {object} params\n * @param {WalletObject} params.from - which account to migrate from\n * @param {WalletObject} params.to - which account to migrate to\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the transaction hash once resolved\n */\n client.migrateAccount = ({ from, to }, extra) =>\n client.sendAccountMigrateTx(\n {\n tx: {\n itx: {\n address: to.address,\n pk: to.publicKey,\n type: to.type,\n },\n },\n wallet: from,\n },\n extra\n );\n\n /**\n * Delegate some privileges to another account\n * So that that account can send transactions on behalf of the delegator\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#delegate\n * @param {object} params\n * @param {WalletObject} params.from - the delegator, who grants the privilege to others\n * @param {WalletObject} params.to - the delegatee, who is authorized to send transactions\n * @param {Array} params.privileges - the privilege settings\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, delegateAddress]` once resolved\n */\n client.delegate = async ({ from, to, privileges }, extra) => {\n let ops = Array.isArray(privileges) ? privileges : [privileges];\n ops = ops.map((x) => {\n if (x.typeUrl && Array.isArray(x.rules)) {\n return x;\n }\n\n return { typeUrl: x.typeUrl, rules: [] };\n });\n\n const txTypes = Object.values(typeUrls).filter((x) => x.startsWith('fg:t:'));\n if (ops.some((x) => txTypes.includes(x.typeUrl) === false)) {\n throw new Error('Invalid type url provided for delegation');\n }\n\n const address = toDelegateAddress(from.address, to.address);\n const hash = await client.sendDelegateTx(\n {\n tx: {\n itx: {\n address,\n to: to.address,\n ops,\n },\n },\n wallet: from,\n },\n extra\n );\n\n return [hash, address];\n };\n\n /**\n * Revoke a previous delegation\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#revokeDelegate\n * @param {object} params\n * @param {WalletObject} params.from - the delegator, who grants the privilege to others\n * @param {WalletObject} params.to - the delegatee, who is authorized to send transactions\n * @param {Array} params.privileges - the privilege settings\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the transaction hash once resolved\n */\n client.revokeDelegate = ({ from, to, privileges }, extra) =>\n client.sendRevokeDelegateTx(\n {\n tx: {\n itx: {\n address: toDelegateAddress(from.address, to.address),\n to: to.address,\n typeUrls: privileges.filter(Boolean).map((x) => x.toString()),\n },\n },\n wallet: from,\n },\n extra\n );\n\n /**\n * Create an new asset (non-fungible-token)\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createAsset\n * @param {object} params\n * @param {string} params.moniker - asset name\n * @param {string} params.parent - asset parent\n * @param {object} params.data - asset data payload\n * @param {number} params.ttl - ttl after first consumption\n * @param {boolean} params.readonly - whether the asset can be updated after creation\n * @param {boolean} params.transferrable - whether the asset can be transferred to another account\n * @param {string} params.delegator - who authorized this transaction\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, assetAddress]` once resolved\n */\n client.createAsset = async (\n { moniker, parent = '', ttl = 0, data, readonly = false, transferrable = true, delegator = '', wallet },\n extra\n ) => {\n const payload = { moniker, parent, ttl, readonly, transferrable, data };\n const address = toAssetAddress(payload);\n payload.address = address;\n const hash = await client.sendCreateAssetTx(\n {\n tx: { itx: payload },\n delegator,\n wallet,\n },\n extra\n );\n return [hash, address];\n };\n\n /**\n * Update an existing asset (non-fungible-token)\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#updateAsset\n * @param {object} params\n * @param {string} params.address - asset address\n * @param {string} params.moniker - asset name\n * @param {object} params.data - asset data payload\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.updateAsset = ({ address, moniker, data, wallet }, extra) =>\n client.sendUpdateAssetTx(\n {\n tx: {\n itx: {\n moniker,\n address,\n data,\n },\n },\n wallet,\n },\n extra\n );\n\n /**\n * Create an asset factory that can be used to mint new assets in future transactions\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createAssetFactory\n * @param {object} params\n * @param {string} params.factory - asset factory\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, factoryAddress]` once resolved\n */\n client.createAssetFactory = async ({ factory, wallet }, extra) => {\n const itx = {\n name: factory.name,\n description: factory.description,\n settlement: factory.settlement || 'instant',\n limit: factory.limit || 0,\n trustedIssuers: factory.trustedIssuers || [],\n input: factory.input,\n output: factory.output,\n data: factory.data || null,\n hooks: factory.hooks || [],\n display: factory.display || null,\n };\n\n isValidFactory(itx, true);\n\n itx.address = toFactoryAddress(itx);\n\n const hash = await client.sendCreateFactoryTx({ tx: { itx }, wallet }, extra);\n return [hash, itx.address];\n };\n\n /**\n * Prepare an acquire_asset itx\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#preMintAsset\n * @param {object} params\n * @param {string} params.factory - asset factory address\n * @param {object} params.inputs - factory inputs\n * @param {string} params.owner - who will own the asset\n * @param {WalletObject} params.wallet - the wallet of the asset issuer\n * @param {object} extra - other param to merge into the itx\n * @returns {Promise} the `[transactionHash, factoryAddress]` once resolved\n */\n client.preMintAsset = async ({ factory, inputs = {}, owner, wallet, extra = {} }) => {\n const options = { ignoreFields: ['context.genesisTx', 'context.renaissanceTx'] };\n const [{ state: factoryState }, { state: issuerState }] = await Promise.all([\n client.getFactoryState({ address: factory }, options),\n client.getAccountState({ address: wallet.address }, options),\n ]);\n\n if (!factoryState) {\n throw new Error('Factory does not exist on chain');\n }\n\n if (!issuerState) {\n throw new Error('Issuer does not exist on chain');\n }\n\n const { asset, address, issuer, variables } = preMintFromFactory({\n factory: formatFactoryState(factoryState),\n inputs,\n owner,\n issuer: { wallet, name: issuerState.moniker },\n });\n\n return Object.assign({}, extra, {\n asset: Object.assign({ address, owner, parent: factory }, asset),\n factory,\n address,\n variables: Object.entries(variables).map(([key, value]) => ({ name: key, value })),\n issuer,\n owner,\n });\n };\n\n /**\n * Acquire an asset from factory\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#acquireAsset\n * @param {object} params\n * @param {AcquireAssetV2Tx} params.itx - result from preMintAsset\n * @param {string} params.delegator - who authorized this transaction\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.acquireAsset = ({ itx, delegator = '', wallet }, extra) =>\n client.sendAcquireAssetV2Tx({ tx: { itx }, delegator, wallet }, extra);\n\n /**\n * Mint an asset from factory\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#mintAsset\n * @param {object} params\n * @param {MintAssetTx} params.itx - result from preMintAsset\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.mintAsset = ({ itx, wallet }, extra) => client.sendMintAssetTx({ tx: { itx }, wallet }, extra);\n\n /**\n * Transfer token or assets to another account\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#transfer\n * @param {object} params\n * @param {number} params.token - how much token can be transferred\n * @param {Array} params.assets - which assets should be transferred\n * @param {string} params.to - who receive the transfer\n * @param {string} params.memo - transaction note\n * @param {string} params.delegator - who authorized this transaction\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.transfer = async (\n { token = 0, assets = [], tokens = [], to = '', memo = '', delegator = '', wallet },\n extra\n ) => {\n const { token: contextToken } = await client.getContext();\n\n let tmpTokens = [];\n if (tokens.length > 0) {\n const tokensMap = await client.getTokenStateMap(tokens.map((t) => t.address));\n tmpTokens = tokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n }\n\n return client.sendTransferV2Tx(\n {\n tx: {\n itx: {\n to,\n value: fromTokenToUnit(token, contextToken.decimal),\n assets,\n tokens: tmpTokens,\n data: {\n typeUrl: 'json',\n value: memo || 'empty',\n },\n },\n },\n delegator,\n wallet,\n },\n extra\n );\n };\n\n /**\n * Stake token or assets for another account\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#stake\n * @param {object} params\n * @param {Array} params.assets - which assets to stake\n * @param {Array} params.tokens - which tokens to stake\n * @param {string} params.to - who receive the stake\n * @param {string} params.locked - is the stake locked on creation\n * @param {string} params.message - stake note\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` and `stakeAddress` once resolved\n */\n client.stake = async ({ assets = [], tokens = [], to = '', locked = false, message = '', wallet }, extra) => {\n let tmpTokens = [];\n if (tokens.length > 0) {\n const tokensMap = await client.getTokenStateMap(tokens.map((t) => t.address));\n tmpTokens = tokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n }\n\n const from = wallet.address;\n const address = toStakeAddress(from, to);\n let tx = await client.multiSignStakeTx(\n {\n tx: {\n itx: {\n address,\n receiver: to,\n locked,\n message,\n inputs: [\n {\n owner: from,\n assets,\n tokens: tmpTokens,\n },\n ],\n },\n signatures: [\n {\n signer: from,\n pk: wallet.publicKey,\n },\n ],\n },\n wallet,\n },\n extra\n );\n\n tx = await client.signStakeTx({ tx, wallet });\n const hash = await client.sendStakeTx({ tx, wallet }, extra);\n return [hash, address];\n };\n\n /**\n * Revoke token or assets from some stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#revokeStake\n * @param {object} params\n * @param {Array} params.assets - which assets to stake\n * @param {Array} params.tokens - which tokens to stake\n * @param {string} params.from - stake address\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.revokeStake = async ({ assets = [], tokens = [], from = '', wallet }, extra) => {\n let tmpTokens = [];\n if (tokens.length > 0) {\n const tokensMap = await client.getTokenStateMap(tokens.map((t) => t.address));\n tmpTokens = tokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n }\n\n return client.sendRevokeStakeTx(\n {\n tx: {\n itx: {\n address: from,\n outputs: [\n {\n owner: wallet.address,\n assets,\n tokens: tmpTokens,\n },\n ],\n },\n },\n wallet,\n },\n extra\n );\n };\n\n /**\n * Create an rollup (sub-chain that lives in ocap)\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createRollup\n * @param {object} params\n * @param {string} params.tokenAddress - ocap token address\n * @param {string} params.contractAddress - rollup contract address\n * @param {string} params.contractAddress - rollup contract address\n * @param {string} params.minStakeAmount\n * @param {string} params.maxStakeAmount\n * @param {number} params.minSignerCount\n * @param {number} params.maxSignerCount\n * @param {number} params.minBlockSize\n * @param {number} params.maxBlockSize\n * @param {number} params.minBlockInterval - in seconds\n * @param {number} params.minBlockConfirmation\n * @param {Array} params.seedValidators - list of seed validators\n * @param {string} params.foreignChainType - foreign chain type\n * @param {string} params.foreignChainId - foreign chain id\n * @param {object} params.data - data payload\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, rollupAddress]` once resolved\n */\n client.createRollup = async (props, extra) => {\n const requiredProps = [\n 'tokenAddress',\n 'contractAddress',\n 'seedValidators',\n 'foreignChainType',\n 'foreignChainId',\n 'minStakeAmount',\n ];\n for (const key of requiredProps) {\n if (!props[key]) {\n throw new Error(`Missing required property: ${key} when creating rollup`);\n }\n }\n\n const { state } = await client.getTokenState({ address: props.tokenAddress });\n if (!state) {\n throw new Error(`Token ${props.tokenAddress} not found when creating rollup`);\n }\n\n const toBNStr = (n) => fromTokenToUnit(n, state.decimal).toString(10);\n const itx = Object.assign(\n {\n maxStakeAmount: props.minStakeAmount,\n minSignerCount: 3,\n maxSignerCount: 8,\n minBlockSize: 1,\n maxBlockSize: 10,\n minBlockInterval: 600, // 10 minutes\n minBlockConfirmation: 3,\n minDepositAmount: toBNStr(100),\n maxDepositAmount: toBNStr(1000000),\n minWithdrawAmount: toBNStr(100),\n maxWithdrawAmount: toBNStr(1000000),\n depositFeeRate: 100, // 1%\n withdrawFeeRate: 100, // 1%\n proposerFeeShare: 7000, // 70%\n minDepositFee: toBNStr(1),\n maxDepositFee: toBNStr(10000),\n minWithdrawFee: toBNStr(1),\n maxWithdrawFee: toBNStr(10000),\n erc20TokenAddress: state.erc20ContractAddress,\n },\n props\n );\n\n const address = toRollupAddress(itx);\n itx.address = address;\n\n const hash = await client.sendCreateRollupTx({ tx: { itx }, wallet: props.wallet }, extra);\n\n return [hash, address];\n };\n\n /**\n * Prepare an exchange transaction between multiple accounts\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#prepareExchange\n * @param {object} params\n * @param {number} params.offerToken - how much token can be sent\n * @param {Array} params.offerAssets - which assets should be sent\n * @param {number} params.demandToken - how much token can be received\n * @param {Array} params.demandAssets - which assets should be received\n * @param {string} params.receiver - who receive the transfer\n * @param {string} params.memo - transaction note\n * @param {string} params.delegator - which assets should be transferred\n * @param {WalletObject} params.wallet - the wallet who is the offerer\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transaction` object once resolved\n */\n client.prepareExchange = async (\n {\n offerToken = 0,\n offerAssets = [],\n demandToken = 0,\n demandAssets = [],\n offerTokens = [],\n demandTokens = [],\n receiver = '',\n memo = '',\n delegator = '',\n wallet,\n },\n extra\n ) => {\n const { token } = await client.getContext();\n const tokensMap = await client.getTokenStateMap([...offerTokens, ...demandTokens].map((t) => t.address));\n\n const tmpOfferTokens = offerTokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n const tmpDemandTokens = demandTokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n\n return client.signExchangeV2Tx(\n {\n tx: {\n itx: {\n to: receiver,\n sender: {\n value: fromTokenToUnit(offerToken, token.decimal),\n assets: Array.isArray(offerAssets) ? offerAssets : [],\n tokens: tmpOfferTokens,\n },\n receiver: {\n value: fromTokenToUnit(demandToken, token.decimal),\n assets: Array.isArray(demandAssets) ? demandAssets : [],\n tokens: tmpDemandTokens,\n },\n data: {\n typeUrl: 'json',\n value: memo || 'empty',\n },\n },\n },\n delegator,\n wallet,\n },\n extra\n );\n };\n\n /**\n * Finalize an exchange transaction between multiple accounts\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#finalizeExchange\n * @param {object} params\n * @param {object} params.tx - the transaction object from `prepareExchange`\n * @param {string} params.delegator - who authorized this transaction\n * @param {object} params.data - extra data in the multi sig\n * @param {WalletObject} params.wallet - the wallet who is the demander\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transaction` object once resolved\n */\n client.finalizeExchange = ({ tx, delegator = '', data, wallet }, extra) =>\n client.multiSignExchangeV2Tx({ tx, delegator, data, wallet }, extra);\n\n /**\n * Send an exchange transaction\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#exchange\n * @param {object} params\n * @param {object} params.tx - the transaction object from `finalizeExchange`\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.exchange = ({ tx, wallet }, extra) => client.sendExchangeV2Tx({ tx, wallet }, extra);\n\n /**\n * Create an new token\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createToken\n * @param {object} params\n * @param {string} params.name\n * @param {string} params.description\n * @param {string} params.symbol\n * @param {string} params.unit\n * @param {string} params.icon\n * @param {number} params.totalSupply\n * @param {object} params.data - asset data payload\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, assetAddress]` once resolved\n */\n client.createToken = async ({ name, description, symbol, unit, decimal, icon, totalSupply, data, wallet }, extra) => {\n const tokenDecimal = typeof decimal === 'undefined' ? DEFAULT_TOKEN_DECIMAL : decimal;\n\n const payload = {\n name,\n description,\n symbol,\n unit,\n decimal: tokenDecimal,\n icon,\n totalSupply: fromTokenToUnit(totalSupply, tokenDecimal).toString(),\n data,\n };\n\n const address = toTokenAddress(payload);\n payload.address = address;\n const hash = await client.sendCreateTokenTx(\n {\n tx: { itx: payload },\n wallet,\n },\n extra\n );\n return [hash, address];\n };\n};\n\nmodule.exports = { createExtensionMethods };\n"]}
1
+ {"version":3,"sources":["../src/extension.js"],"names":["get","require","omit","cloneDeep","camelCase","toTypeInfo","transactions","typeUrls","multiSignTxs","multiSignV2Txs","createMessage","getMessageType","bytesToHex","toBase58","toBase64","toHex","toBuffer","fromTokenToUnit","fromUnitToToken","DEFAULT_TOKEN_DECIMAL","formatFactoryState","preMintFromFactory","isValidFactory","toDelegateAddress","toAssetAddress","toFactoryAddress","toTokenAddress","toStakeAddress","toRollupAddress","debug","name","createExtensionMethods","client","encodeTxAsBase64","Object","defineProperty","value","loading","ready","callbacks","token","getContext","decimal","amount","getTxSendMethods","map","x","getTxEncodeMethods","getTxSignMethods","getTxMultiSignMethods","concat","getType","fn","decodeTx","input","Transaction","deserializeBinary","toObject","ctx","context","Promise","resolve","push","result","doRawQuery","chainId","consensus","tokenStateMap","Map","forEach","cb","getTokenStateMap","addressList","notExistAddressList","address","has","set","size","length","getTokenState","code","state","Error","all","getWallet","wallet","publicKey","toAddress","pk","txEncodeFn","tx","delegator","w","from","nonce","Date","now","signatures","Array","isArray","signaturesList","itx","typeUrl","type","txObj","signature","Buffer","txToSignBytes","serializeBinary","object","buffer","encodeMethod","__tx__","txSendFn","commit","encoded","res","sign","reject","txBytes","txStr","hash","sendTx","err","sendMethod","_formatEncodedTx","encoding","txSignFn","signMethod","includes","txMultiSignFn","data","unshift","signer","multiSignMethod","item","find","s","declare","moniker","issuer","extra","itxData","sendDeclareTx","migrateAccount","to","sendAccountMigrateTx","delegate","privileges","ops","rules","txTypes","values","filter","startsWith","some","sendDelegateTx","revokeDelegate","sendRevokeDelegateTx","Boolean","toString","createAsset","parent","ttl","readonly","transferrable","payload","sendCreateAssetTx","updateAsset","sendUpdateAssetTx","createAssetFactory","factory","description","settlement","limit","trustedIssuers","output","hooks","display","sendCreateFactoryTx","preMintAsset","inputs","owner","options","ignoreFields","factoryState","issuerState","getFactoryState","getAccountState","asset","variables","assign","entries","key","acquireAsset","sendAcquireAssetV2Tx","mintAsset","sendMintAssetTx","transfer","assets","tokens","memo","contextToken","tmpTokens","tokensMap","t","sendTransferV2Tx","stake","locked","message","multiSignStakeTx","receiver","signStakeTx","sendStakeTx","revokeStake","sendRevokeStakeTx","outputs","createRollup","props","requiredProps","tokenAddress","foreignToken","toBNStr","n","maxStakeAmount","minStakeAmount","minSignerCount","maxSignerCount","minBlockSize","maxBlockSize","minBlockInterval","minBlockConfirmation","minDepositAmount","maxDepositAmount","minWithdrawAmount","maxWithdrawAmount","depositFeeRate","withdrawFeeRate","proposerFeeShare","minDepositFee","maxDepositFee","minWithdrawFee","maxWithdrawFee","sendCreateRollupTx","prepareExchange","offerToken","offerAssets","demandToken","demandAssets","offerTokens","demandTokens","tmpOfferTokens","tmpDemandTokens","signExchangeV2Tx","sender","finalizeExchange","multiSignExchangeV2Tx","exchange","sendExchangeV2Tx","createToken","symbol","unit","icon","totalSupply","initialSupply","tokenDecimal","sendCreateTokenTx","module","exports"],"mappings":";;AAAA;AACA;AACA;AACA,MAAMA,MAAMC,QAAQ,YAAR,CAAZ;AACA,MAAMC,OAAOD,QAAQ,aAAR,CAAb;AACA,MAAME,YAAYF,QAAQ,kBAAR,CAAlB;AACA,MAAMG,YAAYH,QAAQ,kBAAR,CAAlB;AACA,MAAM,EAAEI,UAAF,KAAiBJ,QAAQ,eAAR,CAAvB;AACA,MAAM,EAAEK,YAAF,EAAgBC,QAAhB,EAA0BC,YAA1B,EAAwCC,cAAxC,KAA2DR,QAAQ,aAAR,CAAjE;AACA,MAAM,EAAES,aAAF,EAAiBC,cAAjB,KAAoCV,QAAQ,eAAR,CAA1C;AACA,MAAM,EAAEW,UAAF,EAAcC,QAAd,EAAwBC,QAAxB,EAAkCC,KAAlC,EAAyCC,QAAzC,EAAmDC,eAAnD,EAAoEC,eAApE,KAAwFjB,QAAQ,YAAR,CAA9F;AACA,MAAM,EAAEkB,qBAAF,KAA4BlB,QAAQ,yBAAR,CAAlC;AACA,MAAM,EAAEmB,kBAAF,EAAsBC,kBAAtB,EAA0CC,cAA1C,KAA6DrB,QAAQ,aAAR,CAAnE;AACA,MAAM;AACJsB,mBADI;AAEJC,gBAFI;AAGJC,kBAHI;AAIJC,gBAJI;AAKJC,gBALI;AAMJC;AANI,IAOF3B,QAAQ,oBAAR,CAPJ;;AASA,MAAM4B,QAAQ5B,QAAQ,OAAR,EAAiBA,QAAQ,iBAAR,EAA2B6B,IAA5C,CAAd;;AAEA;;;;;;;AAOA,MAAMC,yBAAyB,CAACC,MAAD,EAAS,EAAEC,mBAAmB,KAArB,KAA+B,EAAxC,KAA+C;AAC5EC,SAAOC,cAAP,CAAsBH,MAAtB,EAA8B,KAA9B,EAAqC;AACnCI,WAAO;AACLC,eAAS,KADJ;AAELC,aAAO,KAFF;AAGLC,iBAAW;AAHN;AAD4B,GAArC;;AAQA;;;;;;;;;AASAP,SAAOd,eAAP,GAAyB,MAAOkB,KAAP,IAAiB;AACxC,UAAM,EAAEI,KAAF,KAAY,MAAMR,OAAOS,UAAP,EAAxB;AACA,WAAOvB,gBAAgBkB,KAAhB,EAAuBI,MAAME,OAA7B,CAAP;AACD,GAHD;;AAKA;;;;;;;;;AASAV,SAAOf,eAAP,GAAyB,MAAO0B,MAAP,IAAkB;AACzC,UAAM,EAAEH,KAAF,KAAY,MAAMR,OAAOS,UAAP,EAAxB;AACA,WAAOxB,gBAAgB0B,MAAhB,EAAwBH,MAAME,OAA9B,CAAP;AACD,GAHD;;AAKA;;;;;;;;;AASAV,SAAOY,gBAAP,GAA0B,MAAMtC,aAAauC,GAAb,CAAkBC,CAAD,IAAO1C,UAAW,QAAO0C,CAAE,EAApB,CAAxB,CAAhC;;AAEA;;;;;;;;AAQAd,SAAOe,kBAAP,GAA4B,MAAMzC,aAAauC,GAAb,CAAkBC,CAAD,IAAO1C,UAAW,UAAS0C,CAAE,EAAtB,CAAxB,CAAlC;;AAEA;;;;;;;;AAQAd,SAAOgB,gBAAP,GAA0B,MAAM1C,aAAauC,GAAb,CAAkBC,CAAD,IAAO1C,UAAW,QAAO0C,CAAE,EAApB,CAAxB,CAAhC;;AAEA;;;;;;;;AAQAd,SAAOiB,qBAAP,GAA+B,MAAMzC,aAAa0C,MAAb,CAAoBzC,cAApB,EAAoCoC,GAApC,CAAyCC,CAAD,IAAO1C,UAAW,cAAa0C,CAAE,EAA1B,CAA/C,CAArC;;AAEA;;;;;;;;;AASAd,SAAOmB,OAAP,GAAkBL,CAAD,IAAOnC,eAAemC,CAAf,EAAkBM,EAA1C;;AAEA;;;;;;;;;AASApB,SAAOqB,QAAP,GAAmBC,KAAD,IAAW;AAC3B,UAAMC,cAAcvB,OAAOmB,OAAP,CAAe,aAAf,CAApB;AACA,WAAOI,YAAYC,iBAAZ,CAA8BxC,SAASsC,KAAT,CAA9B,EAA+CG,QAA/C,EAAP;AACD,GAHD;;AAKA;;;;;;;AAOAzB,SAAOS,UAAP,GAAoB,YAAY;AAC9B,QAAIT,OAAO0B,GAAP,CAAWpB,KAAf,EAAsB;AACpB,aAAON,OAAO2B,OAAd;AACD;;AAED,QAAI3B,OAAO0B,GAAP,CAAWrB,OAAf,EAAwB;AACtB,aAAO,IAAIuB,OAAJ,CAAaC,OAAD,IAAa;AAC9B7B,eAAO0B,GAAP,CAAWnB,SAAX,CAAqBuB,IAArB,CAA0B,MAAMD,QAAQ7B,OAAO2B,OAAf,CAAhC;AACD,OAFM,CAAP;AAGD;;AAED3B,WAAO0B,GAAP,CAAWrB,OAAX,GAAqB,IAArB;AACA,UAAM0B,SAAS,MAAM/B,OAAOgC,UAAP,CAAmB;;;;;;;;;;;;;;;;;MAAnB,CAArB;;AAmBAhC,WAAO2B,OAAP,GAAiB;AACfM,eAASjE,IAAI+D,MAAJ,EAAY,2BAAZ,CADM;AAEfG,iBAAWlE,IAAI+D,MAAJ,EAAY,oCAAZ,CAFI;AAGfvB,aAAOxC,IAAI+D,MAAJ,EAAY,2BAAZ,CAHQ;AAIfI,qBAAe,IAAIC,GAAJ;AAJA,KAAjB;;AAOApC,WAAO0B,GAAP,CAAWpB,KAAX,GAAmB,IAAnB;AACAN,WAAO0B,GAAP,CAAWrB,OAAX,GAAqB,KAArB;AACAL,WAAO0B,GAAP,CAAWnB,SAAX,CAAqB8B,OAArB,CAA8BC,EAAD,IAAQA,IAArC;AACAzC,UAAM,eAAN;;AAEA,WAAOG,OAAO2B,OAAd;AACD,GA5CD;;AA8CA3B,SAAOuC,gBAAP,GAA0B,MAAOC,WAAP,IAAuB;AAC/C,UAAMT,SAAS,IAAIK,GAAJ,EAAf;AACA,UAAMK,sBAAsB,EAA5B;AACAD,gBAAYH,OAAZ,CAAqBK,OAAD,IAAa;AAC/B,UAAI1C,OAAO2B,OAAP,CAAeQ,aAAf,CAA6BQ,GAA7B,CAAiCD,OAAjC,CAAJ,EAA+C;AAC7CX,eAAOa,GAAP,CAAWF,OAAX,EAAoB1C,OAAO2B,OAAP,CAAeQ,aAAf,CAA6BnE,GAA7B,CAAiC0E,OAAjC,CAApB;AACD,OAFD,MAEO;AACLD,4BAAoBX,IAApB,CAAyBY,OAAzB;AACD;AACF,KAND;;AAQA,QAAIX,OAAOc,IAAP,KAAgBL,YAAYM,MAAhC,EAAwC;AACtC,aAAOf,MAAP;AACD;;AAED,UAAMgB,gBAAgB,MAAOL,OAAP,IAAmB;AACvC,YAAM;AACJK,uBAAe,EAAEC,IAAF,EAAQC,KAAR;AADX,UAEF,MAAMjD,OAAOgC,UAAP,CAAmB;kCACDU,OAAQ;;;;;;QAD1B,CAFV;;AAWA,UAAIM,SAAS,IAAb,EAAmB;AACjB,cAAM,IAAIE,KAAJ,CAAW,aAAYR,OAAQ,eAA/B,CAAN;AACD;;AAEDX,aAAOa,GAAP,CAAWF,OAAX,EAAoBO,KAApB;AACAjD,aAAO2B,OAAP,CAAeQ,aAAf,CAA6BS,GAA7B,CAAiCF,OAAjC,EAA0CO,KAA1C;AACD,KAlBD;;AAoBA,UAAMrB,QAAQuB,GAAR,CAAYV,oBAAoB5B,GAApB,CAAyB6B,OAAD,IAAaK,cAAcL,OAAd,CAArC,CAAZ,CAAN;;AAEA,WAAOX,MAAP;AACD,GAtCD;;AAwCA;AACA,QAAMqB,YAAaC,MAAD,IAAY;AAC5B,QAAI,CAACA,MAAL,EAAa;AACX,aAAO;AACLX,iBAAS,EADJ;AAELY,mBAAW;AAFN,OAAP;AAID;;AAED,QAAI,OAAOD,OAAOE,SAAd,KAA4B,UAAhC,EAA4C;AAC1C,aAAO;AACLb,iBAASW,OAAOX,OADX;AAELY,mBAAWD,OAAOC;AAFb,OAAP;AAID;;AAED,WAAO;AACLZ,eAASW,OAAOX,OADX;AAELY,iBAAWD,OAAOG,EAAP,IAAaH,OAAOC,SAApB,IAAiC;AAFvC,KAAP;AAID,GAnBD;;AAqBA;AACAhF,eAAa+D,OAAb,CAAsBvB,CAAD,IAAO;AAC1B;;;;;;;;;;;;;;;AAeA,UAAM2C,aAAa,OAAO,EAAEC,EAAF,EAAML,MAAN,EAAcM,SAAd,EAAP,KAAqC;AACtD,YAAMC,IAAIR,UAAUC,MAAV,CAAV;;AAEA;AACA,YAAMX,UAAUgB,GAAGG,IAAH,IAAWD,EAAElB,OAA7B;AACA,YAAMc,KAAKE,GAAGF,EAAH,IAASI,EAAEN,SAAtB;;AAEA;AACA,YAAMQ,QAAQ,OAAOJ,GAAGI,KAAV,KAAoB,WAApB,GAAkCC,KAAKC,GAAL,EAAlC,GAA+CN,GAAGI,KAAhE;AACA,UAAI7B,UAAUyB,GAAGzB,OAAH,IAAc,EAA5B;AACA,UAAI,CAACA,OAAL,EAAc;AACZ,cAAMN,UAAU,MAAM3B,OAAOS,UAAP,EAAtB;AACA;AACAwB,kBAAUN,QAAQM,OAAlB;AACD;;AAED;AACA,UAAIgC,aAAa,EAAjB;AACA,UAAIC,MAAMC,OAAN,CAAcT,GAAGO,UAAjB,CAAJ,EAAkC;AAChC;AACAA,qBAAaP,GAAGO,UAAhB;AACD;AACD,UAAIC,MAAMC,OAAN,CAAcT,GAAGU,cAAjB,CAAJ,EAAsC;AACpCH,qBAAaP,GAAGU,cAAhB;AACD;;AAED;AACA,UAAIC,MAAM,IAAV;AACA,UAAIX,GAAGW,GAAH,CAAOC,OAAP,IAAkBZ,GAAGW,GAAH,CAAOjE,KAA7B,EAAoC;AAClC;AACAiE,cAAMX,GAAGW,GAAT;AACD,OAHD,MAGO;AACLA,cAAM,EAAEE,MAAMzD,CAAR,EAAWV,OAAOsD,GAAGW,GAArB,EAAN;AACD;;AAED,YAAMG,QAAQ9F,cAAc,aAAd,EAA6B;AACzCmF,cAAMH,GAAGC,SAAH,GAAejB,OAAf,GAAyBiB,aAAajB,OADH;AAEzCoB,aAFyC;AAGzCN,UAHyC;AAIzCvB,eAJyC;AAKzCwC,mBAAWf,GAAGe,SAAH,IAAgBC,OAAOb,IAAP,CAAY,EAAZ,CALc;AAMzCI,kBANyC;AAOzCN,mBAAWD,GAAGC,SAAH,KAAiBA,YAAYjB,OAAZ,GAAsB,EAAvC,CAP8B;AAQzC2B;AARyC,OAA7B,CAAd;AAUA,YAAMM,gBAAgBH,MAAMI,eAAN,EAAtB;;AAEA/E,YAAO,YAAWiB,CAAE,QAApB,EAA6B0D,MAAM/C,QAAN,EAA7B;;AAEA,aAAO,EAAEoD,QAAQL,MAAM/C,QAAN,EAAV,EAA4BqD,QAAQJ,OAAOb,IAAP,CAAYc,aAAZ,CAApC,EAAP;AACD,KAlDD;;AAoDA,UAAMI,eAAe3G,UAAW,UAAS0C,CAAE,EAAtB,CAArB;AACA2C,eAAWuB,MAAX,GAAoBD,YAApB;AACA/E,WAAO+E,YAAP,IAAuBtB,UAAvB;;AAEA;;;;;;;;;;;;;;;;;AAiBA,UAAMwB,WAAW,OAAO,EAAEvB,EAAF,EAAML,MAAN,EAAcoB,SAAd,EAAyBd,SAAzB,EAAoCuB,SAAS,KAA7C,EAAP,KAAgE;AAC/E,UAAIC,OAAJ;AACA,UAAIV,SAAJ,EAAe;AACbU,kBAAUzB,EAAV;AACAyB,gBAAQV,SAAR,GAAoBA,SAApB;AACD,OAHD,MAGO,IAAIf,GAAGe,SAAP,EAAkB;AACvB,cAAMW,MAAM,MAAM3B,WAAW,EAAEC,EAAF,EAAML,MAAN,EAAcM,SAAd,EAAX,CAAlB;AACAwB,kBAAUC,IAAIP,MAAd;AACD,OAHM,MAGA;AACL,cAAMO,MAAM,MAAM3B,WAAW,EAAEC,EAAF,EAAML,MAAN,EAAcM,SAAd,EAAX,CAAlB;AACAwB,kBAAUC,IAAIP,MAAd;AACAM,gBAAQV,SAAR,GAAoBpB,OAAOgC,IAAP,CAAYzG,WAAWwG,IAAIN,MAAf,CAAZ,CAApB;AACD;;AAED;AACA,aAAO,IAAIlD,OAAJ,CAAY,OAAOC,OAAP,EAAgByD,MAAhB,KAA2B;AAC5C,YAAI;AACF,cAAIrF,gBAAJ,EAAsB;AACpB,kBAAMuE,QAAQ9F,cAAc,aAAd,EAA6ByG,OAA7B,CAAd;AACA,kBAAMI,UAAUf,MAAMI,eAAN,EAAhB;AACA,kBAAMY,QAAQ1G,SAASyG,OAAT,CAAd;AACA1F,kBAAO,UAASiB,CAAE,QAAlB,EAA2B0D,MAAM/C,QAAN,EAA3B;AACA,kBAAM,EAAEgE,IAAF,KAAW,MAAMzF,OAAO0F,MAAP,CAAc,EAAEhC,IAAI8B,KAAN,EAAaN,MAAb,EAAd,CAAvB;AACArD,oBAAQ4D,IAAR;AACD,WAPD,MAOO;AACL,kBAAMjB,QAAQ9F,cAAc,aAAd,EAA6ByG,OAA7B,EAAsC1D,QAAtC,EAAd;AACA5B,kBAAO,UAASiB,CAAE,QAAlB,EAA2B0D,KAA3B;AACA,kBAAM,EAAEiB,IAAF,KAAW,MAAMzF,OAAO0F,MAAP,CAAc,EAAEhC,IAAIc,KAAN,EAAaU,MAAb,EAAd,CAAvB;AACArD,oBAAQ4D,IAAR;AACD;AACF,SAdD,CAcE,OAAOE,GAAP,EAAY;AACZL,iBAAOK,GAAP;AACD;AACF,OAlBM,CAAP;AAmBD,KAlCD;;AAoCA,UAAMC,aAAaxH,UAAW,QAAO0C,CAAE,EAApB,CAAnB;AACAmE,aAASD,MAAT,GAAkBY,UAAlB;AACA5F,WAAO4F,UAAP,IAAqBX,QAArB;;AAEA,UAAMY,mBAAmB,OAAOnC,EAAP,EAAWoC,QAAX,KAAwB;AAC/C,UAAIA,QAAJ,EAAc;AACZ,cAAM,EAAEhB,QAAQS,OAAV,KAAsB,MAAM9B,WAAW,EAAEC,EAAF,EAAX,CAAlC;AACA,YAAIoC,aAAa,QAAjB,EAA2B;AACzB,iBAAOhH,SAASyG,OAAT,CAAP;AACD;AACD,YAAIO,aAAa,QAAjB,EAA2B;AACzB,iBAAOjH,SAAS0G,OAAT,CAAP;AACD;AACD,YAAIO,aAAa,QAAb,IAAyBA,aAAa,KAA1C,EAAiD;AAC/C,iBAAO/G,MAAMwG,OAAN,CAAP;AACD;AACD,eAAOA,OAAP;AACD;;AAED,aAAO7B,EAAP;AACD,KAhBD;;AAkBA;AACA,UAAMqC,WAAW,OAAO,EAAErC,EAAF,EAAML,MAAN,EAAcM,SAAd,EAAyBmC,WAAW,EAApC,EAAP,KAAoD;AACnE,UAAIpC,GAAGe,SAAP,EAAkB;AAChB,eAAOf,GAAGe,SAAV;AACD;;AAED,YAAM,EAAEI,MAAF,EAAUC,MAAV,KAAqB,MAAMrB,WAAW,EAAEC,EAAF,EAAML,MAAN,EAAcM,SAAd,EAAX,CAAjC;AACAkB,aAAOJ,SAAP,GAAmBpB,OAAOgC,IAAP,CAAYP,MAAZ,CAAnB;;AAEA,aAAOe,iBAAiBhB,MAAjB,EAAyBiB,QAAzB,CAAP;AACD,KATD;AAUA,UAAME,aAAa5H,UAAW,QAAO0C,CAAE,EAApB,CAAnB;AACAiF,aAASf,MAAT,GAAkBgB,UAAlB;AACAhG,WAAOgG,UAAP,IAAqBD,QAArB;;AAEA;AACA;AACA,QAAIvH,aAAayH,QAAb,CAAsBnF,CAAtB,CAAJ,EAA8B;AAC5B,YAAMoF,gBAAgB,OAAO,EAAExC,EAAF,EAAML,MAAN,EAAcM,SAAd,EAAyBwC,IAAzB,EAA+BL,WAAW,EAA1C,EAAP,KAA0D;AAC9E,YAAI,OAAOzC,OAAOE,SAAd,KAA4B,UAAhC,EAA4C;AAC1C,gBAAM,IAAIL,KAAJ,CAAU,kCAAV,CAAN;AACD;AACDQ,WAAGU,cAAH,GAAoBV,GAAGO,UAAH,IAAiBP,GAAGU,cAApB,IAAsC,EAA1D;AACA,YAAIT,SAAJ,EAAe;AACbD,aAAGU,cAAH,CAAkBgC,OAAlB,CAA0B;AACxB5C,gBAAIH,OAAOC,SADa;AAExB+C,oBAAQ1C,SAFgB;AAGxBA,uBAAWN,OAAOX,OAHM;AAIxByD;AAJwB,WAA1B;AAMD,SAPD,MAOO;AACLzC,aAAGU,cAAH,CAAkBgC,OAAlB,CAA0B;AACxB5C,gBAAIH,OAAOC,SADa;AAExB+C,oBAAQhD,OAAOX,OAFS;AAGxBiB,uBAAW,EAHa;AAIxBwC;AAJwB,WAA1B;AAMD;;AAED,cAAM,EAAEtB,MAAF,EAAUC,MAAV,KAAqB,MAAMrB,WAAW,EAAEC,EAAF,EAAML,MAAN,EAAX,CAAjC;AACAwB,eAAOT,cAAP,CAAsB,CAAtB,EAAyBK,SAAzB,GAAqCpB,OAAOgC,IAAP,CAAYzG,WAAWkG,MAAX,CAAZ,CAArC;AACA,eAAOe,iBAAiBhB,MAAjB,EAAyBiB,QAAzB,CAAP;AACD,OAxBD;AAyBA,YAAMQ,kBAAkBlI,UAAW,cAAa0C,CAAE,EAA1B,CAAxB;AACAoF,oBAAclB,MAAd,GAAuBsB,eAAvB;AACAtG,aAAOsG,eAAP,IAA0BJ,aAA1B;AACD;;AAED,QAAIzH,eAAewH,QAAf,CAAwBnF,CAAxB,CAAJ,EAAgC;AAC9B,YAAMoF,gBAAgB,OAAO,EAAExC,EAAF,EAAML,MAAN,EAAcyC,WAAW,EAAzB,EAAP,KAAyC;AAC7D,YAAI,OAAOzC,OAAOE,SAAd,KAA4B,UAAhC,EAA4C;AAC1C,gBAAM,IAAIL,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAED,cAAMmD,SAAShD,OAAOX,OAAtB;AACA,cAAMuB,aAAa9F,UAAUuF,GAAGO,UAAH,IAAiBP,GAAGU,cAApB,IAAsC,EAAhD,CAAnB;AACA,cAAMmC,OAAOtC,WAAWuC,IAAX,CAAiBC,CAAD,IAAOA,EAAEJ,MAAF,KAAaA,MAAb,IAAuBI,EAAE9C,SAAF,KAAgB0C,MAA9D,CAAb;AACA,YAAI,CAACE,IAAL,EAAW;AACT,gBAAM,IAAIrD,KAAJ,CAAU,wBAAV,CAAN;AACD;;AAEDQ,WAAGU,cAAH,GAAoBH,WAAWpD,GAAX,CAAgB4F,CAAD,IAAOvI,KAAKuI,CAAL,EAAQ,CAAC,WAAD,CAAR,CAAtB,CAApB;AACA,cAAM,EAAE5B,MAAF,EAAUC,MAAV,KAAqB,MAAMrB,WAAW,EAAEC,EAAF,EAAML,MAAN,EAAX,CAAjC;;AAEAkD,aAAK9B,SAAL,GAAiBpB,OAAOgC,IAAP,CAAYzG,WAAWkG,MAAX,CAAZ,CAAjB;AACAD,eAAOT,cAAP,GAAwBH,UAAxB;AACA,eAAO4B,iBAAiBhB,MAAjB,EAAyBiB,QAAzB,CAAP;AACD,OAlBD;AAmBA,YAAMQ,kBAAkBlI,UAAW,cAAa0C,CAAE,EAA1B,CAAxB;AACAoF,oBAAclB,MAAd,GAAuBsB,eAAvB;AACAtG,aAAOsG,eAAP,IAA0BJ,aAA1B;AACD;AACF,GA3ND;;AA6NA;;;;;;;;;;;;;;AAcAlG,SAAO0G,OAAP,GAAiB,CAAC,EAAEC,OAAF,EAAWC,SAAS,EAApB,EAAwBT,IAAxB,EAA8B9C,MAA9B,EAAD,EAAyCwD,KAAzC,KAAmD;AAClE,QAAIC,UAAUX,IAAd;;AAEA;AACA,QAAI,CAACW,OAAL,EAAc;AACZA,gBAAU,EAAExC,SAAS,MAAX,EAAmBlE,OAAO/B,WAAWgF,OAAOX,OAAlB,EAA2B,IAA3B,CAA1B,EAAV;AACD;;AAED,WAAO1C,OAAO+G,aAAP,CACL;AACErD,UAAI;AACFW,aAAK,EAAEsC,OAAF,EAAWC,MAAX,EAAmBT,MAAMW,OAAzB;AADH,OADN;AAIEzD;AAJF,KADK,EAOLwD,KAPK,CAAP;AASD,GAjBD;;AAmBA;;;;;;;;;;;;AAYA7G,SAAOgH,cAAP,GAAwB,CAAC,EAAEnD,IAAF,EAAQoD,EAAR,EAAD,EAAeJ,KAAf,KACtB7G,OAAOkH,oBAAP,CACE;AACExD,QAAI;AACFW,WAAK;AACH3B,iBAASuE,GAAGvE,OADT;AAEHc,YAAIyD,GAAG3D,SAFJ;AAGHiB,cAAM0C,GAAG1C;AAHN;AADH,KADN;AAQElB,YAAQQ;AARV,GADF,EAWEgD,KAXF,CADF;;AAeA;;;;;;;;;;;;;;AAcA7G,SAAOmH,QAAP,GAAkB,OAAO,EAAEtD,IAAF,EAAQoD,EAAR,EAAYG,UAAZ,EAAP,EAAiCP,KAAjC,KAA2C;AAC3D,QAAIQ,MAAMnD,MAAMC,OAAN,CAAciD,UAAd,IAA4BA,UAA5B,GAAyC,CAACA,UAAD,CAAnD;AACAC,UAAMA,IAAIxG,GAAJ,CAASC,CAAD,IAAO;AACnB,UAAIA,EAAEwD,OAAF,IAAaJ,MAAMC,OAAN,CAAcrD,EAAEwG,KAAhB,CAAjB,EAAyC;AACvC,eAAOxG,CAAP;AACD;;AAED,aAAO,EAAEwD,SAASxD,EAAEwD,OAAb,EAAsBgD,OAAO,EAA7B,EAAP;AACD,KANK,CAAN;;AAQA,UAAMC,UAAUrH,OAAOsH,MAAP,CAAcjJ,QAAd,EAAwBkJ,MAAxB,CAAgC3G,CAAD,IAAOA,EAAE4G,UAAF,CAAa,OAAb,CAAtC,CAAhB;AACA,QAAIL,IAAIM,IAAJ,CAAU7G,CAAD,IAAOyG,QAAQtB,QAAR,CAAiBnF,EAAEwD,OAAnB,MAAgC,KAAhD,CAAJ,EAA4D;AAC1D,YAAM,IAAIpB,KAAJ,CAAU,0CAAV,CAAN;AACD;;AAED,UAAMR,UAAUnD,kBAAkBsE,KAAKnB,OAAvB,EAAgCuE,GAAGvE,OAAnC,CAAhB;AACA,UAAM+C,OAAO,MAAMzF,OAAO4H,cAAP,CACjB;AACElE,UAAI;AACFW,aAAK;AACH3B,iBADG;AAEHuE,cAAIA,GAAGvE,OAFJ;AAGH2E;AAHG;AADH,OADN;AAQEhE,cAAQQ;AARV,KADiB,EAWjBgD,KAXiB,CAAnB;;AAcA,WAAO,CAACpB,IAAD,EAAO/C,OAAP,CAAP;AACD,GA/BD;;AAiCA;;;;;;;;;;;;;AAaA1C,SAAO6H,cAAP,GAAwB,CAAC,EAAEhE,IAAF,EAAQoD,EAAR,EAAYG,UAAZ,EAAD,EAA2BP,KAA3B,KACtB7G,OAAO8H,oBAAP,CACE;AACEpE,QAAI;AACFW,WAAK;AACH3B,iBAASnD,kBAAkBsE,KAAKnB,OAAvB,EAAgCuE,GAAGvE,OAAnC,CADN;AAEHuE,YAAIA,GAAGvE,OAFJ;AAGHnE,kBAAU6I,WAAWK,MAAX,CAAkBM,OAAlB,EAA2BlH,GAA3B,CAAgCC,CAAD,IAAOA,EAAEkH,QAAF,EAAtC;AAHP;AADH,KADN;AAQE3E,YAAQQ;AARV,GADF,EAWEgD,KAXF,CADF;;AAeA;;;;;;;;;;;;;;;;;;AAkBA7G,SAAOiI,WAAP,GAAqB,OACnB,EAAEtB,OAAF,EAAWuB,SAAS,EAApB,EAAwBC,MAAM,CAA9B,EAAiChC,IAAjC,EAAuCiC,WAAW,KAAlD,EAAyDC,gBAAgB,IAAzE,EAA+E1E,YAAY,EAA3F,EAA+FN,MAA/F,EADmB,EAEnBwD,KAFmB,KAGhB;AACH,UAAMyB,UAAU,EAAE3B,OAAF,EAAWuB,MAAX,EAAmBC,GAAnB,EAAwBC,QAAxB,EAAkCC,aAAlC,EAAiDlC,IAAjD,EAAhB;AACA,UAAMzD,UAAUlD,eAAe8I,OAAf,CAAhB;AACAA,YAAQ5F,OAAR,GAAkBA,OAAlB;AACA,UAAM+C,OAAO,MAAMzF,OAAOuI,iBAAP,CACjB;AACE7E,UAAI,EAAEW,KAAKiE,OAAP,EADN;AAEE3E,eAFF;AAGEN;AAHF,KADiB,EAMjBwD,KANiB,CAAnB;AAQA,WAAO,CAACpB,IAAD,EAAO/C,OAAP,CAAP;AACD,GAhBD;;AAkBA;;;;;;;;;;;;;;AAcA1C,SAAOwI,WAAP,GAAqB,CAAC,EAAE9F,OAAF,EAAWiE,OAAX,EAAoBR,IAApB,EAA0B9C,MAA1B,EAAD,EAAqCwD,KAArC,KACnB7G,OAAOyI,iBAAP,CACE;AACE/E,QAAI;AACFW,WAAK;AACHsC,eADG;AAEHjE,eAFG;AAGHyD;AAHG;AADH,KADN;AAQE9C;AARF,GADF,EAWEwD,KAXF,CADF;;AAeA;;;;;;;;;;;;AAYA7G,SAAO0I,kBAAP,GAA4B,OAAO,EAAEC,OAAF,EAAWtF,MAAX,EAAP,EAA4BwD,KAA5B,KAAsC;AAChE,UAAMxC,MAAM;AACVvE,YAAM6I,QAAQ7I,IADJ;AAEV8I,mBAAaD,QAAQC,WAFX;AAGVC,kBAAYF,QAAQE,UAAR,IAAsB,SAHxB;AAIVC,aAAOH,QAAQG,KAAR,IAAiB,CAJd;AAKVC,sBAAgBJ,QAAQI,cAAR,IAA0B,EALhC;AAMVzH,aAAOqH,QAAQrH,KANL;AAOV0H,cAAQL,QAAQK,MAPN;AAQV7C,YAAMwC,QAAQxC,IAAR,IAAgB,IARZ;AASV8C,aAAON,QAAQM,KAAR,IAAiB,EATd;AAUVC,eAASP,QAAQO,OAAR,IAAmB;AAVlB,KAAZ;;AAaA5J,mBAAe+E,GAAf,EAAoB,IAApB;;AAEAA,QAAI3B,OAAJ,GAAcjD,iBAAiB4E,GAAjB,CAAd;;AAEA,UAAMoB,OAAO,MAAMzF,OAAOmJ,mBAAP,CAA2B,EAAEzF,IAAI,EAAEW,GAAF,EAAN,EAAehB,MAAf,EAA3B,EAAoDwD,KAApD,CAAnB;AACA,WAAO,CAACpB,IAAD,EAAOpB,IAAI3B,OAAX,CAAP;AACD,GApBD;;AAsBA;;;;;;;;;;;;;;AAcA1C,SAAOoJ,YAAP,GAAsB,OAAO,EAAET,OAAF,EAAWU,SAAS,EAApB,EAAwBC,KAAxB,EAA+BjG,MAA/B,EAAuCwD,QAAQ,EAA/C,EAAP,KAA+D;AACnF,UAAM0C,UAAU,EAAEC,cAAc,CAAC,mBAAD,EAAsB,uBAAtB,CAAhB,EAAhB;AACA,UAAM,CAAC,EAAEvG,OAAOwG,YAAT,EAAD,EAA0B,EAAExG,OAAOyG,WAAT,EAA1B,IAAoD,MAAM9H,QAAQuB,GAAR,CAAY,CAC1EnD,OAAO2J,eAAP,CAAuB,EAAEjH,SAASiG,OAAX,EAAvB,EAA6CY,OAA7C,CAD0E,EAE1EvJ,OAAO4J,eAAP,CAAuB,EAAElH,SAASW,OAAOX,OAAlB,EAAvB,EAAoD6G,OAApD,CAF0E,CAAZ,CAAhE;;AAKA,QAAI,CAACE,YAAL,EAAmB;AACjB,YAAM,IAAIvG,KAAJ,CAAU,iCAAV,CAAN;AACD;;AAED,QAAI,CAACwG,WAAL,EAAkB;AAChB,YAAM,IAAIxG,KAAJ,CAAU,gCAAV,CAAN;AACD;;AAED,UAAM,EAAE2G,KAAF,EAASnH,OAAT,EAAkBkE,MAAlB,EAA0BkD,SAA1B,KAAwCzK,mBAAmB;AAC/DsJ,eAASvJ,mBAAmBqK,YAAnB,CADsD;AAE/DJ,YAF+D;AAG/DC,WAH+D;AAI/D1C,cAAQ,EAAEvD,MAAF,EAAUvD,MAAM4J,YAAY/C,OAA5B;AAJuD,KAAnB,CAA9C;;AAOA,WAAOzG,OAAO6J,MAAP,CAAc,EAAd,EAAkBlD,KAAlB,EAAyB;AAC9BgD,aAAO3J,OAAO6J,MAAP,CAAc,EAAErH,OAAF,EAAW4G,KAAX,EAAkBpB,QAAQS,OAA1B,EAAd,EAAmDkB,KAAnD,CADuB;AAE9BlB,aAF8B;AAG9BjG,aAH8B;AAI9BoH,iBAAW5J,OAAO8J,OAAP,CAAeF,SAAf,EAA0BjJ,GAA1B,CAA8B,CAAC,CAACoJ,GAAD,EAAM7J,KAAN,CAAD,MAAmB,EAAEN,MAAMmK,GAAR,EAAa7J,KAAb,EAAnB,CAA9B,CAJmB;AAK9BwG,YAL8B;AAM9B0C;AAN8B,KAAzB,CAAP;AAQD,GA9BD;;AAgCA;;;;;;;;;;;;;AAaAtJ,SAAOkK,YAAP,GAAsB,CAAC,EAAE7F,GAAF,EAAOV,YAAY,EAAnB,EAAuBN,MAAvB,EAAD,EAAkCwD,KAAlC,KACpB7G,OAAOmK,oBAAP,CAA4B,EAAEzG,IAAI,EAAEW,GAAF,EAAN,EAAeV,SAAf,EAA0BN,MAA1B,EAA5B,EAAgEwD,KAAhE,CADF;;AAGA;;;;;;;;;;;;AAYA7G,SAAOoK,SAAP,GAAmB,CAAC,EAAE/F,GAAF,EAAOhB,MAAP,EAAD,EAAkBwD,KAAlB,KAA4B7G,OAAOqK,eAAP,CAAuB,EAAE3G,IAAI,EAAEW,GAAF,EAAN,EAAehB,MAAf,EAAvB,EAAgDwD,KAAhD,CAA/C;;AAEA;;;;;;;;;;;;;;;;AAgBA7G,SAAOsK,QAAP,GAAkB,OAChB,EAAE9J,QAAQ,CAAV,EAAa+J,SAAS,EAAtB,EAA0BC,SAAS,EAAnC,EAAuCvD,KAAK,EAA5C,EAAgDwD,OAAO,EAAvD,EAA2D9G,YAAY,EAAvE,EAA2EN,MAA3E,EADgB,EAEhBwD,KAFgB,KAGb;AACH,UAAM,EAAErG,OAAOkK,YAAT,KAA0B,MAAM1K,OAAOS,UAAP,EAAtC;;AAEA,QAAIkK,YAAY,EAAhB;AACA,QAAIH,OAAO1H,MAAP,GAAgB,CAApB,EAAuB;AACrB,YAAM8H,YAAY,MAAM5K,OAAOuC,gBAAP,CAAwBiI,OAAO3J,GAAP,CAAYgK,CAAD,IAAOA,EAAEnI,OAApB,CAAxB,CAAxB;AACAiI,kBAAYH,OAAO3J,GAAP,CAAYgK,CAAD,IAAO;AAC5BA,UAAEzK,KAAF,GAAUnB,gBAAgB4L,EAAEzK,KAAlB,EAAyBwK,UAAU5M,GAAV,CAAc6M,EAAEnI,OAAhB,EAAyBhC,OAAlD,EAA2DsH,QAA3D,EAAV;AACA,eAAO6C,CAAP;AACD,OAHW,CAAZ;AAID;;AAED,WAAO7K,OAAO8K,gBAAP,CACL;AACEpH,UAAI;AACFW,aAAK;AACH4C,YADG;AAEH7G,iBAAOnB,gBAAgBuB,KAAhB,EAAuBkK,aAAahK,OAApC,CAFJ;AAGH6J,gBAHG;AAIHC,kBAAQG,SAJL;AAKHxE,gBAAM;AACJ7B,qBAAS,MADL;AAEJlE,mBAAOqK,QAAQ;AAFX;AALH;AADH,OADN;AAaE9G,eAbF;AAcEN;AAdF,KADK,EAiBLwD,KAjBK,CAAP;AAmBD,GAlCD;;AAoCA;;;;;;;;;;;;;;;;AAgBA7G,SAAO+K,KAAP,GAAe,OAAO,EAAER,SAAS,EAAX,EAAeC,SAAS,EAAxB,EAA4BvD,KAAK,EAAjC,EAAqC+D,SAAS,KAA9C,EAAqDC,UAAU,EAA/D,EAAmE5H,MAAnE,EAAP,EAAoFwD,KAApF,KAA8F;AAC3G,QAAI8D,YAAY,EAAhB;AACA,QAAIH,OAAO1H,MAAP,GAAgB,CAApB,EAAuB;AACrB,YAAM8H,YAAY,MAAM5K,OAAOuC,gBAAP,CAAwBiI,OAAO3J,GAAP,CAAYgK,CAAD,IAAOA,EAAEnI,OAApB,CAAxB,CAAxB;AACAiI,kBAAYH,OAAO3J,GAAP,CAAYgK,CAAD,IAAO;AAC5BA,UAAEzK,KAAF,GAAUnB,gBAAgB4L,EAAEzK,KAAlB,EAAyBwK,UAAU5M,GAAV,CAAc6M,EAAEnI,OAAhB,EAAyBhC,OAAlD,EAA2DsH,QAA3D,EAAV;AACA,eAAO6C,CAAP;AACD,OAHW,CAAZ;AAID;;AAED,UAAMhH,OAAOR,OAAOX,OAApB;AACA,UAAMA,UAAU/C,eAAekE,IAAf,EAAqBoD,EAArB,CAAhB;AACA,QAAIvD,KAAK,MAAM1D,OAAOkL,gBAAP,CACb;AACExH,UAAI;AACFW,aAAK;AACH3B,iBADG;AAEHyI,oBAAUlE,EAFP;AAGH+D,gBAHG;AAIHC,iBAJG;AAKH5B,kBAAQ,CACN;AACEC,mBAAOzF,IADT;AAEE0G,kBAFF;AAGEC,oBAAQG;AAHV,WADM;AALL,SADH;AAcF1G,oBAAY,CACV;AACEoC,kBAAQxC,IADV;AAEEL,cAAIH,OAAOC;AAFb,SADU;AAdV,OADN;AAsBED;AAtBF,KADa,EAyBbwD,KAzBa,CAAf;;AA4BAnD,SAAK,MAAM1D,OAAOoL,WAAP,CAAmB,EAAE1H,EAAF,EAAML,MAAN,EAAnB,CAAX;AACA,UAAMoC,OAAO,MAAMzF,OAAOqL,WAAP,CAAmB,EAAE3H,EAAF,EAAML,MAAN,EAAnB,EAAmCwD,KAAnC,CAAnB;AACA,WAAO,CAACpB,IAAD,EAAO/C,OAAP,CAAP;AACD,GA3CD;;AA6CA;;;;;;;;;;;;;;AAcA1C,SAAOsL,WAAP,GAAqB,OAAO,EAAEf,SAAS,EAAX,EAAeC,SAAS,EAAxB,EAA4B3G,OAAO,EAAnC,EAAuCR,MAAvC,EAAP,EAAwDwD,KAAxD,KAAkE;AACrF,QAAI8D,YAAY,EAAhB;AACA,QAAIH,OAAO1H,MAAP,GAAgB,CAApB,EAAuB;AACrB,YAAM8H,YAAY,MAAM5K,OAAOuC,gBAAP,CAAwBiI,OAAO3J,GAAP,CAAYgK,CAAD,IAAOA,EAAEnI,OAApB,CAAxB,CAAxB;AACAiI,kBAAYH,OAAO3J,GAAP,CAAYgK,CAAD,IAAO;AAC5BA,UAAEzK,KAAF,GAAUnB,gBAAgB4L,EAAEzK,KAAlB,EAAyBwK,UAAU5M,GAAV,CAAc6M,EAAEnI,OAAhB,EAAyBhC,OAAlD,EAA2DsH,QAA3D,EAAV;AACA,eAAO6C,CAAP;AACD,OAHW,CAAZ;AAID;;AAED,WAAO7K,OAAOuL,iBAAP,CACL;AACE7H,UAAI;AACFW,aAAK;AACH3B,mBAASmB,IADN;AAEH2H,mBAAS,CACP;AACElC,mBAAOjG,OAAOX,OADhB;AAEE6H,kBAFF;AAGEC,oBAAQG;AAHV,WADO;AAFN;AADH,OADN;AAaEtH;AAbF,KADK,EAgBLwD,KAhBK,CAAP;AAkBD,GA5BD;;AA8BA;;;;;;;;;;;;;;;;;;;;;;;AAuBA7G,SAAOyL,YAAP,GAAsB,OAAOC,KAAP,EAAc7E,KAAd,KAAwB;AAC5C,UAAM8E,gBAAgB,CAAC,cAAD,EAAiB,iBAAjB,EAAoC,gBAApC,EAAsD,gBAAtD,CAAtB;AACA,SAAK,MAAM1B,GAAX,IAAkB0B,aAAlB,EAAiC;AAC/B,UAAI,CAACD,MAAMzB,GAAN,CAAL,EAAiB;AACf,cAAM,IAAI/G,KAAJ,CAAW,8BAA6B+G,GAAI,uBAA5C,CAAN;AACD;AACF;;AAED,UAAM,EAAEhH,KAAF,KAAY,MAAMjD,OAAO+C,aAAP,CAAqB,EAAEL,SAASgJ,MAAME,YAAjB,EAArB,CAAxB;AACA,QAAI,CAAC3I,KAAL,EAAY;AACV,YAAM,IAAIC,KAAJ,CAAW,SAAQwI,MAAME,YAAa,iCAAtC,CAAN;AACD;AACD,QAAI,CAAC3I,MAAM4I,YAAX,EAAyB;AACvB,YAAM,IAAI3I,KAAJ,CAAW,SAAQwI,MAAME,YAAa,sCAAtC,CAAN;AACD;;AAED,UAAME,UAAWC,CAAD,IAAO9M,gBAAgB8M,CAAhB,EAAmB9I,MAAMvC,OAAzB,EAAkCsH,QAAlC,CAA2C,EAA3C,CAAvB;AACA,UAAM3D,MAAMnE,OAAO6J,MAAP,CACV;AACEiC,sBAAgBN,MAAMO,cADxB;AAEEC,sBAAgB,CAFlB;AAGEC,sBAAgB,CAHlB;AAIEC,oBAAc,CAJhB;AAKEC,oBAAc,EALhB;AAMEC,wBAAkB,GANpB,EAMyB;AACvBC,4BAAsB,CAPxB;AAQEC,wBAAkBV,QAAQ,GAAR,CARpB;AASEW,wBAAkBX,QAAQ,OAAR,CATpB;AAUEY,yBAAmBZ,QAAQ,GAAR,CAVrB;AAWEa,yBAAmBb,QAAQ,OAAR,CAXrB;AAYEc,sBAAgB,GAZlB,EAYuB;AACrBC,uBAAiB,GAbnB,EAawB;AACtBC,wBAAkB,IAdpB,EAc0B;AACxBC,qBAAejB,QAAQ,CAAR,CAfjB;AAgBEkB,qBAAelB,QAAQ,KAAR,CAhBjB;AAiBEmB,sBAAgBnB,QAAQ,CAAR,CAjBlB;AAkBEoB,sBAAgBpB,QAAQ,KAAR;AAlBlB,KADU,EAqBVJ,KArBU,CAAZ;;AAwBA,UAAMhJ,UAAU9C,gBAAgByE,GAAhB,CAAhB;AACAA,QAAI3B,OAAJ,GAAcA,OAAd;;AAEA,UAAM+C,OAAO,MAAMzF,OAAOmN,kBAAP,CAA0B,EAAEzJ,IAAI,EAAEW,GAAF,EAAN,EAAehB,QAAQqI,MAAMrI,MAA7B,EAA1B,EAAiEwD,KAAjE,CAAnB;;AAEA,WAAO,CAACpB,IAAD,EAAO/C,OAAP,CAAP;AACD,GA/CD;;AAiDA;;;;;;;;;;;;;;;;;;AAkBA1C,SAAOoN,eAAP,GAAyB,OACvB;AACEC,iBAAa,CADf;AAEEC,kBAAc,EAFhB;AAGEC,kBAAc,CAHhB;AAIEC,mBAAe,EAJjB;AAKEC,kBAAc,EALhB;AAMEC,mBAAe,EANjB;AAOEvC,eAAW,EAPb;AAQEV,WAAO,EART;AASE9G,gBAAY,EATd;AAUEN;AAVF,GADuB,EAavBwD,KAbuB,KAcpB;AACH,UAAM,EAAErG,KAAF,KAAY,MAAMR,OAAOS,UAAP,EAAxB;AACA,UAAMmK,YAAY,MAAM5K,OAAOuC,gBAAP,CAAwB,CAAC,GAAGkL,WAAJ,EAAiB,GAAGC,YAApB,EAAkC7M,GAAlC,CAAuCgK,CAAD,IAAOA,EAAEnI,OAA/C,CAAxB,CAAxB;;AAEA,UAAMiL,iBAAiBF,YAAY5M,GAAZ,CAAiBgK,CAAD,IAAO;AAC5CA,QAAEzK,KAAF,GAAUnB,gBAAgB4L,EAAEzK,KAAlB,EAAyBwK,UAAU5M,GAAV,CAAc6M,EAAEnI,OAAhB,EAAyBhC,OAAlD,EAA2DsH,QAA3D,EAAV;AACA,aAAO6C,CAAP;AACD,KAHsB,CAAvB;AAIA,UAAM+C,kBAAkBF,aAAa7M,GAAb,CAAkBgK,CAAD,IAAO;AAC9CA,QAAEzK,KAAF,GAAUnB,gBAAgB4L,EAAEzK,KAAlB,EAAyBwK,UAAU5M,GAAV,CAAc6M,EAAEnI,OAAhB,EAAyBhC,OAAlD,EAA2DsH,QAA3D,EAAV;AACA,aAAO6C,CAAP;AACD,KAHuB,CAAxB;;AAKA,WAAO7K,OAAO6N,gBAAP,CACL;AACEnK,UAAI;AACFW,aAAK;AACH4C,cAAIkE,QADD;AAEH2C,kBAAQ;AACN1N,mBAAOnB,gBAAgBoO,UAAhB,EAA4B7M,MAAME,OAAlC,CADD;AAEN6J,oBAAQrG,MAAMC,OAAN,CAAcmJ,WAAd,IAA6BA,WAA7B,GAA2C,EAF7C;AAGN9C,oBAAQmD;AAHF,WAFL;AAOHxC,oBAAU;AACR/K,mBAAOnB,gBAAgBsO,WAAhB,EAA6B/M,MAAME,OAAnC,CADC;AAER6J,oBAAQrG,MAAMC,OAAN,CAAcqJ,YAAd,IAA8BA,YAA9B,GAA6C,EAF7C;AAGRhD,oBAAQoD;AAHA,WAPP;AAYHzH,gBAAM;AACJ7B,qBAAS,MADL;AAEJlE,mBAAOqK,QAAQ;AAFX;AAZH;AADH,OADN;AAoBE9G,eApBF;AAqBEN;AArBF,KADK,EAwBLwD,KAxBK,CAAP;AA0BD,GArDD;;AAuDA;;;;;;;;;;;;;;AAcA7G,SAAO+N,gBAAP,GAA0B,CAAC,EAAErK,EAAF,EAAMC,YAAY,EAAlB,EAAsBwC,IAAtB,EAA4B9C,MAA5B,EAAD,EAAuCwD,KAAvC,KACxB7G,OAAOgO,qBAAP,CAA6B,EAAEtK,EAAF,EAAMC,SAAN,EAAiBwC,IAAjB,EAAuB9C,MAAvB,EAA7B,EAA8DwD,KAA9D,CADF;;AAGA;;;;;;;;;;;;AAYA7G,SAAOiO,QAAP,GAAkB,CAAC,EAAEvK,EAAF,EAAML,MAAN,EAAD,EAAiBwD,KAAjB,KAA2B7G,OAAOkO,gBAAP,CAAwB,EAAExK,EAAF,EAAML,MAAN,EAAxB,EAAwCwD,KAAxC,CAA7C;;AAEA;;;;;;;;;;;;;;;;;;;;AAoBA7G,SAAOmO,WAAP,GAAqB,OACnB,EAAErO,IAAF,EAAQ8I,WAAR,EAAqBwF,MAArB,EAA6BC,IAA7B,EAAmC3N,OAAnC,EAA4C4N,IAA5C,EAAkDC,WAAlD,EAA+DC,aAA/D,EAA8E3C,YAA9E,EAA4F1F,IAA5F,EAAkG9C,MAAlG,EADmB,EAEnBwD,KAFmB,KAGhB;AACH,UAAM4H,eAAe,OAAO/N,OAAP,KAAmB,WAAnB,GAAiCvB,qBAAjC,GAAyDuB,OAA9E;;AAEA,UAAM4H,UAAU;AACdxI,UADc;AAEd8I,iBAFc;AAGdwF,YAHc;AAIdC,UAJc;AAKd3N,eAAS+N,YALK;AAMdH,UANc;AAOdC,mBAAatP,gBAAgBsP,WAAhB,EAA6BE,YAA7B,EAA2CzG,QAA3C,EAPC;AAQdwG,qBAAevP,gBAAgBuP,iBAAiBD,WAAjC,EAA8CE,YAA9C,EAA4DzG,QAA5D,EARD;AASd6D,oBAAcA,gBAAgB,IAThB;AAUd1F;AAVc,KAAhB;;AAaA,UAAMzD,UAAUhD,eAAe4I,OAAf,CAAhB;AACAA,YAAQ5F,OAAR,GAAkBA,OAAlB;AACA,UAAM+C,OAAO,MAAMzF,OAAO0O,iBAAP,CACjB;AACEhL,UAAI,EAAEW,KAAKiE,OAAP,EADN;AAEEjF;AAFF,KADiB,EAKjBwD,KALiB,CAAnB;AAOA,WAAO,CAACpB,IAAD,EAAO/C,OAAP,CAAP;AACD,GA7BD;AA8BD,CA7mCD;;AA+mCAiM,OAAOC,OAAP,GAAiB,EAAE7O,sBAAF,EAAjB","file":"extension.js","sourcesContent":["/* eslint-disable prefer-object-spread */\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable object-curly-newline */\nconst get = require('lodash/get');\nconst omit = require('lodash/omit');\nconst cloneDeep = require('lodash/cloneDeep');\nconst camelCase = require('lodash/camelCase');\nconst { toTypeInfo } = require('@arcblock/did');\nconst { transactions, typeUrls, multiSignTxs, multiSignV2Txs } = require('@ocap/proto');\nconst { createMessage, getMessageType } = require('@ocap/message');\nconst { bytesToHex, toBase58, toBase64, toHex, toBuffer, fromTokenToUnit, fromUnitToToken } = require('@ocap/util');\nconst { DEFAULT_TOKEN_DECIMAL } = require('@ocap/util/lib/constant');\nconst { formatFactoryState, preMintFromFactory, isValidFactory } = require('@ocap/asset');\nconst {\n toDelegateAddress,\n toAssetAddress,\n toFactoryAddress,\n toTokenAddress,\n toStakeAddress,\n toRollupAddress,\n} = require('@arcblock/did-util');\n\nconst debug = require('debug')(require('../package.json').name);\n\n/**\n * Generate extension methods on the fly\n *\n * @public\n * @param {object} client\n * @param {object} [{ encodeTxAsBase64 = false }={}]\n */\nconst createExtensionMethods = (client, { encodeTxAsBase64 = false } = {}) => {\n Object.defineProperty(client, 'ctx', {\n value: {\n loading: false,\n ready: false,\n callbacks: [],\n },\n });\n\n /**\n * Format big number presentation amount to token number\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#fromUnitToToken\n * @param {string} value\n * @returns {string}\n */\n client.fromUnitToToken = async (value) => {\n const { token } = await client.getContext();\n return fromUnitToToken(value, token.decimal);\n };\n\n /**\n * Encode amount to corresponding token big number presentation\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#fromTokenToUnit\n * @param {number} amount\n * @returns {BN}\n */\n client.fromTokenToUnit = async (amount) => {\n const { token } = await client.getContext();\n return fromTokenToUnit(amount, token.decimal);\n };\n\n /**\n * List all transaction send methods\n * Each method can send one kind of transactions supported by forge core, such as `DeclareTx`\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxSendMethods\n * @returns {Array<string>} method name list\n */\n client.getTxSendMethods = () => transactions.map((x) => camelCase(`send_${x}`));\n\n /**\n * List all transaction encode methods, each method can be used to encode transaction to buffer and object\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxEncodeMethods\n * @returns {Array<string>} method name list\n */\n client.getTxEncodeMethods = () => transactions.map((x) => camelCase(`encode_${x}`));\n\n /**\n * List all transaction sign methods, each method can be used to sign transaction to an object\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxSignMethods\n * @returns {Array<string>} method name list\n */\n client.getTxSignMethods = () => transactions.map((x) => camelCase(`sign_${x}`));\n\n /**\n * List all transaction multi sign methods, each method can be used to do multi sign a transaction\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxMultiSignMethods\n * @returns {Array<string>} method name list\n */\n client.getTxMultiSignMethods = () => multiSignTxs.concat(multiSignV2Txs).map((x) => camelCase(`multi_sign_${x}`));\n\n /**\n * Get protobuf message class by name, only supports forge-built-in types\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getType\n * @param {string} x\n * @returns {class|null} message type\n */\n client.getType = (x) => getMessageType(x).fn;\n\n /**\n * Decode transaction buffer/base64/base58 to an object\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#decodeTx\n * @param {buffer|hex|base48|base64} input\n * @returns {object} transaction object\n */\n client.decodeTx = (input) => {\n const Transaction = client.getType('Transaction');\n return Transaction.deserializeBinary(toBuffer(input)).toObject();\n };\n\n /**\n * Ensure a connection is bootstrapped with some meta info fetched from chain node\n *\n * @private\n * @param {string} [conn=undefined]\n * @returns {object}\n */\n client.getContext = async () => {\n if (client.ctx.ready) {\n return client.context;\n }\n\n if (client.ctx.loading) {\n return new Promise((resolve) => {\n client.ctx.callbacks.push(() => resolve(client.context));\n });\n }\n\n client.ctx.loading = true;\n const result = await client.doRawQuery(`{\n getChainInfo {\n code\n info {\n network\n consensusVersion\n }\n }\n getForgeState {\n code\n state {\n token {\n decimal\n symbol\n }\n }\n }\n }`);\n\n client.context = {\n chainId: get(result, 'getChainInfo.info.network'),\n consensus: get(result, 'getChainInfo.info.consensusVersion'),\n token: get(result, 'getForgeState.state.token'),\n tokenStateMap: new Map(),\n };\n\n client.ctx.ready = true;\n client.ctx.loading = false;\n client.ctx.callbacks.forEach((cb) => cb());\n debug('context ready');\n\n return client.context;\n };\n\n client.getTokenStateMap = async (addressList) => {\n const result = new Map();\n const notExistAddressList = [];\n addressList.forEach((address) => {\n if (client.context.tokenStateMap.has(address)) {\n result.set(address, client.context.tokenStateMap.get(address));\n } else {\n notExistAddressList.push(address);\n }\n });\n\n if (result.size === addressList.length) {\n return result;\n }\n\n const getTokenState = async (address) => {\n const {\n getTokenState: { code, state },\n } = await client.doRawQuery(`{\n getTokenState(address: \"${address}\") {\n code\n state {\n decimal\n }\n }\n }`);\n\n if (code !== 'OK') {\n throw new Error(`get token ${address} state failed`);\n }\n\n result.set(address, state);\n client.context.tokenStateMap.set(address, state);\n };\n\n await Promise.all(notExistAddressList.map((address) => getTokenState(address)));\n\n return result;\n };\n\n // Unify a client wallet | forge managed wallet\n const getWallet = (wallet) => {\n if (!wallet) {\n return {\n address: '',\n publicKey: '',\n };\n }\n\n if (typeof wallet.toAddress === 'function') {\n return {\n address: wallet.address,\n publicKey: wallet.publicKey,\n };\n }\n\n return {\n address: wallet.address,\n publicKey: wallet.pk || wallet.publicKey || '',\n };\n };\n\n // Generate transaction sign/send/encode functions on fly\n transactions.forEach((x) => {\n /**\n * Encode a transaction\n *\n * @param {object} input\n * @param {object} input.tx - data of the transaction\n * @param {object} input.tx.itx - the actual transaction object\n * @param {object} [input.tx.from] - the sender address, can be derived from wallet\n * @param {object} [input.tx.nonce] - the tx nonce, defaults to Date.now if not set\n * @param {object} [input.tx.chainId] - the chainId\n * @param {object} [input.tx.signature] - the signature\n * @param {object} [input.tx.signatures] - the signature list\n * @param {object} input.wallet - the wallet used to sign the transaction\n * @param {object} input.delegator - the wallet address that delegated permissions to the `input.wallet` address\n * @returns Promise\n */\n const txEncodeFn = async ({ tx, wallet, delegator }) => {\n const w = getWallet(wallet);\n\n // Determine sender address\n const address = tx.from || w.address;\n const pk = tx.pk || w.publicKey;\n\n // Determine chainId & nonce, only attach new one when not exist\n const nonce = typeof tx.nonce === 'undefined' ? Date.now() : tx.nonce;\n let chainId = tx.chainId || '';\n if (!chainId) {\n const context = await client.getContext();\n // eslint-disable-next-line prefer-destructuring\n chainId = context.chainId;\n }\n\n // Determine signatures for multi sig\n let signatures = [];\n if (Array.isArray(tx.signatures)) {\n // eslint-disable-next-line prefer-destructuring\n signatures = tx.signatures;\n }\n if (Array.isArray(tx.signaturesList)) {\n signatures = tx.signaturesList;\n }\n\n // Determine itx\n let itx = null;\n if (tx.itx.typeUrl && tx.itx.value) {\n // eslint-disable-next-line prefer-destructuring\n itx = tx.itx;\n } else {\n itx = { type: x, value: tx.itx };\n }\n\n const txObj = createMessage('Transaction', {\n from: tx.delegator ? address : delegator || address,\n nonce,\n pk,\n chainId,\n signature: tx.signature || Buffer.from([]),\n signatures,\n delegator: tx.delegator || (delegator ? address : ''),\n itx,\n });\n const txToSignBytes = txObj.serializeBinary();\n\n debug(`encodeTx.${x}.txObj`, txObj.toObject());\n\n return { object: txObj.toObject(), buffer: Buffer.from(txToSignBytes) };\n };\n\n const encodeMethod = camelCase(`encode_${x}`);\n txEncodeFn.__tx__ = encodeMethod;\n client[encodeMethod] = txEncodeFn;\n\n /**\n * Send a transaction\n *\n * @param {object} input\n * @param {object} input.tx - data of the transaction\n * @param {object} input.tx.itx - the actual transaction object\n * @param {object} [input.tx.from] - the sender address, can be derived from wallet\n * @param {object} [input.tx.nonce] - the tx nonce, defaults to Date.now if not set\n * @param {object} [input.tx.chainId] - the chainId\n * @param {object} [input.tx.signature] - the signature\n * @param {object} [input.tx.signatures] - the signatures\n * @param {object} [input.commit=false] - whether we should wait for transaction commit\n * @param {object} input.wallet - the wallet used to sign the transaction, either a forge managed wallet or user managed wallet\n * @param {object} [input.signature] - the signature of the tx, if exist, we will not sign the transaction\n * @param {object} input.delegator - the wallet address that delegated permissions to the `input.wallet` address\n * @returns {Promise<string>}\n */\n const txSendFn = async ({ tx, wallet, signature, delegator, commit = false }) => {\n let encoded;\n if (signature) {\n encoded = tx;\n encoded.signature = signature;\n } else if (tx.signature) {\n const res = await txEncodeFn({ tx, wallet, delegator });\n encoded = res.object;\n } else {\n const res = await txEncodeFn({ tx, wallet, delegator });\n encoded = res.object;\n encoded.signature = wallet.sign(bytesToHex(res.buffer));\n }\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n if (encodeTxAsBase64) {\n const txObj = createMessage('Transaction', encoded);\n const txBytes = txObj.serializeBinary();\n const txStr = toBase64(txBytes);\n debug(`sendTx.${x}.txObj`, txObj.toObject());\n const { hash } = await client.sendTx({ tx: txStr, commit });\n resolve(hash);\n } else {\n const txObj = createMessage('Transaction', encoded).toObject();\n debug(`sendTx.${x}.txObj`, txObj);\n const { hash } = await client.sendTx({ tx: txObj, commit });\n resolve(hash);\n }\n } catch (err) {\n reject(err);\n }\n });\n };\n\n const sendMethod = camelCase(`send_${x}`);\n txSendFn.__tx__ = sendMethod;\n client[sendMethod] = txSendFn;\n\n const _formatEncodedTx = async (tx, encoding) => {\n if (encoding) {\n const { buffer: txBytes } = await txEncodeFn({ tx });\n if (encoding === 'base64') {\n return toBase64(txBytes);\n }\n if (encoding === 'base58') {\n return toBase58(txBytes);\n }\n if (encoding === 'base16' || encoding === 'hex') {\n return toHex(txBytes);\n }\n return txBytes;\n }\n\n return tx;\n };\n\n // Generate transaction signing function\n const txSignFn = async ({ tx, wallet, delegator, encoding = '' }) => {\n if (tx.signature) {\n delete tx.signature;\n }\n\n const { object, buffer } = await txEncodeFn({ tx, wallet, delegator });\n object.signature = wallet.sign(buffer);\n\n return _formatEncodedTx(object, encoding);\n };\n const signMethod = camelCase(`sign_${x}`);\n txSignFn.__tx__ = signMethod;\n client[signMethod] = txSignFn;\n\n // TODO: verify existing signatures before adding new signatures\n // Generate transaction multi sign function\n if (multiSignTxs.includes(x)) {\n const txMultiSignFn = async ({ tx, wallet, delegator, data, encoding = '' }) => {\n if (typeof wallet.toAddress !== 'function') {\n throw new Error('Multisig requires a valid wallet');\n }\n tx.signaturesList = tx.signatures || tx.signaturesList || [];\n if (delegator) {\n tx.signaturesList.unshift({\n pk: wallet.publicKey,\n signer: delegator,\n delegator: wallet.address,\n data,\n });\n } else {\n tx.signaturesList.unshift({\n pk: wallet.publicKey,\n signer: wallet.address,\n delegator: '',\n data,\n });\n }\n\n const { object, buffer } = await txEncodeFn({ tx, wallet });\n object.signaturesList[0].signature = wallet.sign(bytesToHex(buffer));\n return _formatEncodedTx(object, encoding);\n };\n const multiSignMethod = camelCase(`multi_sign_${x}`);\n txMultiSignFn.__tx__ = multiSignMethod;\n client[multiSignMethod] = txMultiSignFn;\n }\n\n if (multiSignV2Txs.includes(x)) {\n const txMultiSignFn = async ({ tx, wallet, encoding = '' }) => {\n if (typeof wallet.toAddress !== 'function') {\n throw new Error('Multisig requires a valid wallet');\n }\n\n const signer = wallet.address;\n const signatures = cloneDeep(tx.signatures || tx.signaturesList || []);\n const item = signatures.find((s) => s.signer === signer || s.delegator === signer);\n if (!item) {\n throw new Error('Signer not in the list');\n }\n\n tx.signaturesList = signatures.map((s) => omit(s, ['signature']));\n const { object, buffer } = await txEncodeFn({ tx, wallet });\n\n item.signature = wallet.sign(bytesToHex(buffer));\n object.signaturesList = signatures;\n return _formatEncodedTx(object, encoding);\n };\n const multiSignMethod = camelCase(`multi_sign_${x}`);\n txMultiSignFn.__tx__ = multiSignMethod;\n client[multiSignMethod] = txMultiSignFn;\n }\n });\n\n /**\n * Declare an DID and it's public key on chain\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#declare\n * @param {object} params\n * @param {string} params.moniker - user nickname\n * @param {string} [params.issuer=\"\"] - who issued the account\n * @param {object} [params.data=undefined] - who issued the account\n * @param {WalletObject} params.wallet - wallet to sign the tx\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the transaction hash once resolved\n */\n client.declare = ({ moniker, issuer = '', data, wallet }, extra) => {\n let itxData = data;\n\n // If there is no data attached to the account, we can attach wallet type by default\n if (!itxData) {\n itxData = { typeUrl: 'json', value: toTypeInfo(wallet.address, true) };\n }\n\n return client.sendDeclareTx(\n {\n tx: {\n itx: { moniker, issuer, data: itxData },\n },\n wallet,\n },\n extra\n );\n };\n\n /**\n * Migrate current account to a new account\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#migrateAccount\n * @param {object} params\n * @param {WalletObject} params.from - which account to migrate from\n * @param {WalletObject} params.to - which account to migrate to\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the transaction hash once resolved\n */\n client.migrateAccount = ({ from, to }, extra) =>\n client.sendAccountMigrateTx(\n {\n tx: {\n itx: {\n address: to.address,\n pk: to.publicKey,\n type: to.type,\n },\n },\n wallet: from,\n },\n extra\n );\n\n /**\n * Delegate some privileges to another account\n * So that that account can send transactions on behalf of the delegator\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#delegate\n * @param {object} params\n * @param {WalletObject} params.from - the delegator, who grants the privilege to others\n * @param {WalletObject} params.to - the delegatee, who is authorized to send transactions\n * @param {Array} params.privileges - the privilege settings\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, delegateAddress]` once resolved\n */\n client.delegate = async ({ from, to, privileges }, extra) => {\n let ops = Array.isArray(privileges) ? privileges : [privileges];\n ops = ops.map((x) => {\n if (x.typeUrl && Array.isArray(x.rules)) {\n return x;\n }\n\n return { typeUrl: x.typeUrl, rules: [] };\n });\n\n const txTypes = Object.values(typeUrls).filter((x) => x.startsWith('fg:t:'));\n if (ops.some((x) => txTypes.includes(x.typeUrl) === false)) {\n throw new Error('Invalid type url provided for delegation');\n }\n\n const address = toDelegateAddress(from.address, to.address);\n const hash = await client.sendDelegateTx(\n {\n tx: {\n itx: {\n address,\n to: to.address,\n ops,\n },\n },\n wallet: from,\n },\n extra\n );\n\n return [hash, address];\n };\n\n /**\n * Revoke a previous delegation\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#revokeDelegate\n * @param {object} params\n * @param {WalletObject} params.from - the delegator, who grants the privilege to others\n * @param {WalletObject} params.to - the delegatee, who is authorized to send transactions\n * @param {Array} params.privileges - the privilege settings\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the transaction hash once resolved\n */\n client.revokeDelegate = ({ from, to, privileges }, extra) =>\n client.sendRevokeDelegateTx(\n {\n tx: {\n itx: {\n address: toDelegateAddress(from.address, to.address),\n to: to.address,\n typeUrls: privileges.filter(Boolean).map((x) => x.toString()),\n },\n },\n wallet: from,\n },\n extra\n );\n\n /**\n * Create an new asset (non-fungible-token)\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createAsset\n * @param {object} params\n * @param {string} params.moniker - asset name\n * @param {string} params.parent - asset parent\n * @param {object} params.data - asset data payload\n * @param {number} params.ttl - ttl after first consumption\n * @param {boolean} params.readonly - whether the asset can be updated after creation\n * @param {boolean} params.transferrable - whether the asset can be transferred to another account\n * @param {string} params.delegator - who authorized this transaction\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, assetAddress]` once resolved\n */\n client.createAsset = async (\n { moniker, parent = '', ttl = 0, data, readonly = false, transferrable = true, delegator = '', wallet },\n extra\n ) => {\n const payload = { moniker, parent, ttl, readonly, transferrable, data };\n const address = toAssetAddress(payload);\n payload.address = address;\n const hash = await client.sendCreateAssetTx(\n {\n tx: { itx: payload },\n delegator,\n wallet,\n },\n extra\n );\n return [hash, address];\n };\n\n /**\n * Update an existing asset (non-fungible-token)\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#updateAsset\n * @param {object} params\n * @param {string} params.address - asset address\n * @param {string} params.moniker - asset name\n * @param {object} params.data - asset data payload\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.updateAsset = ({ address, moniker, data, wallet }, extra) =>\n client.sendUpdateAssetTx(\n {\n tx: {\n itx: {\n moniker,\n address,\n data,\n },\n },\n wallet,\n },\n extra\n );\n\n /**\n * Create an asset factory that can be used to mint new assets in future transactions\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createAssetFactory\n * @param {object} params\n * @param {string} params.factory - asset factory\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, factoryAddress]` once resolved\n */\n client.createAssetFactory = async ({ factory, wallet }, extra) => {\n const itx = {\n name: factory.name,\n description: factory.description,\n settlement: factory.settlement || 'instant',\n limit: factory.limit || 0,\n trustedIssuers: factory.trustedIssuers || [],\n input: factory.input,\n output: factory.output,\n data: factory.data || null,\n hooks: factory.hooks || [],\n display: factory.display || null,\n };\n\n isValidFactory(itx, true);\n\n itx.address = toFactoryAddress(itx);\n\n const hash = await client.sendCreateFactoryTx({ tx: { itx }, wallet }, extra);\n return [hash, itx.address];\n };\n\n /**\n * Prepare an acquire_asset itx\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#preMintAsset\n * @param {object} params\n * @param {string} params.factory - asset factory address\n * @param {object} params.inputs - factory inputs\n * @param {string} params.owner - who will own the asset\n * @param {WalletObject} params.wallet - the wallet of the asset issuer\n * @param {object} extra - other param to merge into the itx\n * @returns {Promise} the `[transactionHash, factoryAddress]` once resolved\n */\n client.preMintAsset = async ({ factory, inputs = {}, owner, wallet, extra = {} }) => {\n const options = { ignoreFields: ['context.genesisTx', 'context.renaissanceTx'] };\n const [{ state: factoryState }, { state: issuerState }] = await Promise.all([\n client.getFactoryState({ address: factory }, options),\n client.getAccountState({ address: wallet.address }, options),\n ]);\n\n if (!factoryState) {\n throw new Error('Factory does not exist on chain');\n }\n\n if (!issuerState) {\n throw new Error('Issuer does not exist on chain');\n }\n\n const { asset, address, issuer, variables } = preMintFromFactory({\n factory: formatFactoryState(factoryState),\n inputs,\n owner,\n issuer: { wallet, name: issuerState.moniker },\n });\n\n return Object.assign({}, extra, {\n asset: Object.assign({ address, owner, parent: factory }, asset),\n factory,\n address,\n variables: Object.entries(variables).map(([key, value]) => ({ name: key, value })),\n issuer,\n owner,\n });\n };\n\n /**\n * Acquire an asset from factory\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#acquireAsset\n * @param {object} params\n * @param {AcquireAssetV2Tx} params.itx - result from preMintAsset\n * @param {string} params.delegator - who authorized this transaction\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.acquireAsset = ({ itx, delegator = '', wallet }, extra) =>\n client.sendAcquireAssetV2Tx({ tx: { itx }, delegator, wallet }, extra);\n\n /**\n * Mint an asset from factory\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#mintAsset\n * @param {object} params\n * @param {MintAssetTx} params.itx - result from preMintAsset\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.mintAsset = ({ itx, wallet }, extra) => client.sendMintAssetTx({ tx: { itx }, wallet }, extra);\n\n /**\n * Transfer token or assets to another account\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#transfer\n * @param {object} params\n * @param {number} params.token - how much token can be transferred\n * @param {Array} params.assets - which assets should be transferred\n * @param {string} params.to - who receive the transfer\n * @param {string} params.memo - transaction note\n * @param {string} params.delegator - who authorized this transaction\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.transfer = async (\n { token = 0, assets = [], tokens = [], to = '', memo = '', delegator = '', wallet },\n extra\n ) => {\n const { token: contextToken } = await client.getContext();\n\n let tmpTokens = [];\n if (tokens.length > 0) {\n const tokensMap = await client.getTokenStateMap(tokens.map((t) => t.address));\n tmpTokens = tokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n }\n\n return client.sendTransferV2Tx(\n {\n tx: {\n itx: {\n to,\n value: fromTokenToUnit(token, contextToken.decimal),\n assets,\n tokens: tmpTokens,\n data: {\n typeUrl: 'json',\n value: memo || 'empty',\n },\n },\n },\n delegator,\n wallet,\n },\n extra\n );\n };\n\n /**\n * Stake token or assets for another account\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#stake\n * @param {object} params\n * @param {Array} params.assets - which assets to stake\n * @param {Array} params.tokens - which tokens to stake\n * @param {string} params.to - who receive the stake\n * @param {string} params.locked - is the stake locked on creation\n * @param {string} params.message - stake note\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` and `stakeAddress` once resolved\n */\n client.stake = async ({ assets = [], tokens = [], to = '', locked = false, message = '', wallet }, extra) => {\n let tmpTokens = [];\n if (tokens.length > 0) {\n const tokensMap = await client.getTokenStateMap(tokens.map((t) => t.address));\n tmpTokens = tokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n }\n\n const from = wallet.address;\n const address = toStakeAddress(from, to);\n let tx = await client.multiSignStakeTx(\n {\n tx: {\n itx: {\n address,\n receiver: to,\n locked,\n message,\n inputs: [\n {\n owner: from,\n assets,\n tokens: tmpTokens,\n },\n ],\n },\n signatures: [\n {\n signer: from,\n pk: wallet.publicKey,\n },\n ],\n },\n wallet,\n },\n extra\n );\n\n tx = await client.signStakeTx({ tx, wallet });\n const hash = await client.sendStakeTx({ tx, wallet }, extra);\n return [hash, address];\n };\n\n /**\n * Revoke token or assets from some stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#revokeStake\n * @param {object} params\n * @param {Array} params.assets - which assets to stake\n * @param {Array} params.tokens - which tokens to stake\n * @param {string} params.from - stake address\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.revokeStake = async ({ assets = [], tokens = [], from = '', wallet }, extra) => {\n let tmpTokens = [];\n if (tokens.length > 0) {\n const tokensMap = await client.getTokenStateMap(tokens.map((t) => t.address));\n tmpTokens = tokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n }\n\n return client.sendRevokeStakeTx(\n {\n tx: {\n itx: {\n address: from,\n outputs: [\n {\n owner: wallet.address,\n assets,\n tokens: tmpTokens,\n },\n ],\n },\n },\n wallet,\n },\n extra\n );\n };\n\n /**\n * Create an rollup (sub-chain that lives in ocap)\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createRollup\n * @param {object} params\n * @param {string} params.tokenAddress - ocap token address\n * @param {string} params.contractAddress - rollup contract address\n * @param {string} params.minStakeAmount\n * @param {string} params.maxStakeAmount\n * @param {number} params.minSignerCount\n * @param {number} params.maxSignerCount\n * @param {number} params.minBlockSize\n * @param {number} params.maxBlockSize\n * @param {number} params.minBlockInterval - in seconds\n * @param {number} params.minBlockConfirmation\n * @param {Array} params.seedValidators - list of seed validators\n * @param {object} params.data - data payload\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, rollupAddress]` once resolved\n */\n client.createRollup = async (props, extra) => {\n const requiredProps = ['tokenAddress', 'contractAddress', 'seedValidators', 'minStakeAmount'];\n for (const key of requiredProps) {\n if (!props[key]) {\n throw new Error(`Missing required property: ${key} when creating rollup`);\n }\n }\n\n const { state } = await client.getTokenState({ address: props.tokenAddress });\n if (!state) {\n throw new Error(`Token ${props.tokenAddress} not found when creating rollup`);\n }\n if (!state.foreignToken) {\n throw new Error(`Token ${props.tokenAddress} does not have foreignToken attached`);\n }\n\n const toBNStr = (n) => fromTokenToUnit(n, state.decimal).toString(10);\n const itx = Object.assign(\n {\n maxStakeAmount: props.minStakeAmount,\n minSignerCount: 3,\n maxSignerCount: 5,\n minBlockSize: 1,\n maxBlockSize: 10,\n minBlockInterval: 600, // 10 minutes\n minBlockConfirmation: 3,\n minDepositAmount: toBNStr(100),\n maxDepositAmount: toBNStr(1000000),\n minWithdrawAmount: toBNStr(100),\n maxWithdrawAmount: toBNStr(1000000),\n depositFeeRate: 100, // 1%\n withdrawFeeRate: 100, // 1%\n proposerFeeShare: 7000, // 70%\n minDepositFee: toBNStr(1),\n maxDepositFee: toBNStr(10000),\n minWithdrawFee: toBNStr(1),\n maxWithdrawFee: toBNStr(10000),\n },\n props\n );\n\n const address = toRollupAddress(itx);\n itx.address = address;\n\n const hash = await client.sendCreateRollupTx({ tx: { itx }, wallet: props.wallet }, extra);\n\n return [hash, address];\n };\n\n /**\n * Prepare an exchange transaction between multiple accounts\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#prepareExchange\n * @param {object} params\n * @param {number} params.offerToken - how much token can be sent\n * @param {Array} params.offerAssets - which assets should be sent\n * @param {number} params.demandToken - how much token can be received\n * @param {Array} params.demandAssets - which assets should be received\n * @param {string} params.receiver - who receive the transfer\n * @param {string} params.memo - transaction note\n * @param {string} params.delegator - which assets should be transferred\n * @param {WalletObject} params.wallet - the wallet who is the offerer\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transaction` object once resolved\n */\n client.prepareExchange = async (\n {\n offerToken = 0,\n offerAssets = [],\n demandToken = 0,\n demandAssets = [],\n offerTokens = [],\n demandTokens = [],\n receiver = '',\n memo = '',\n delegator = '',\n wallet,\n },\n extra\n ) => {\n const { token } = await client.getContext();\n const tokensMap = await client.getTokenStateMap([...offerTokens, ...demandTokens].map((t) => t.address));\n\n const tmpOfferTokens = offerTokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n const tmpDemandTokens = demandTokens.map((t) => {\n t.value = fromTokenToUnit(t.value, tokensMap.get(t.address).decimal).toString();\n return t;\n });\n\n return client.signExchangeV2Tx(\n {\n tx: {\n itx: {\n to: receiver,\n sender: {\n value: fromTokenToUnit(offerToken, token.decimal),\n assets: Array.isArray(offerAssets) ? offerAssets : [],\n tokens: tmpOfferTokens,\n },\n receiver: {\n value: fromTokenToUnit(demandToken, token.decimal),\n assets: Array.isArray(demandAssets) ? demandAssets : [],\n tokens: tmpDemandTokens,\n },\n data: {\n typeUrl: 'json',\n value: memo || 'empty',\n },\n },\n },\n delegator,\n wallet,\n },\n extra\n );\n };\n\n /**\n * Finalize an exchange transaction between multiple accounts\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#finalizeExchange\n * @param {object} params\n * @param {object} params.tx - the transaction object from `prepareExchange`\n * @param {string} params.delegator - who authorized this transaction\n * @param {object} params.data - extra data in the multi sig\n * @param {WalletObject} params.wallet - the wallet who is the demander\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transaction` object once resolved\n */\n client.finalizeExchange = ({ tx, delegator = '', data, wallet }, extra) =>\n client.multiSignExchangeV2Tx({ tx, delegator, data, wallet }, extra);\n\n /**\n * Send an exchange transaction\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#exchange\n * @param {object} params\n * @param {object} params.tx - the transaction object from `finalizeExchange`\n * @param {WalletObject} params.wallet - the wallet to sign the transaction\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `transactionHash` once resolved\n */\n client.exchange = ({ tx, wallet }, extra) => client.sendExchangeV2Tx({ tx, wallet }, extra);\n\n /**\n * Create an new token\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createToken\n * @param {object} params\n * @param {string} params.name\n * @param {string} params.description\n * @param {string} params.symbol\n * @param {string} params.unit\n * @param {string} params.icon\n * @param {number} params.totalSupply\n * @param {number} params.initialSupply\n * @param {number} params.foreignToken\n * @param {object} params.data - asset data payload\n * @param {WalletObject} params.wallet - the initial owner of the asset\n * @param {object} extra - other param to underlying client implementation\n * @returns {Promise} the `[transactionHash, assetAddress]` once resolved\n */\n client.createToken = async (\n { name, description, symbol, unit, decimal, icon, totalSupply, initialSupply, foreignToken, data, wallet },\n extra\n ) => {\n const tokenDecimal = typeof decimal === 'undefined' ? DEFAULT_TOKEN_DECIMAL : decimal;\n\n const payload = {\n name,\n description,\n symbol,\n unit,\n decimal: tokenDecimal,\n icon,\n totalSupply: fromTokenToUnit(totalSupply, tokenDecimal).toString(),\n initialSupply: fromTokenToUnit(initialSupply || totalSupply, tokenDecimal).toString(),\n foreignToken: foreignToken || null,\n data,\n };\n\n const address = toTokenAddress(payload);\n payload.address = address;\n const hash = await client.sendCreateTokenTx(\n {\n tx: { itx: payload },\n wallet,\n },\n extra\n );\n return [hash, address];\n };\n};\n\nmodule.exports = { createExtensionMethods };\n"]}
package/lib/node.d.ts CHANGED
@@ -859,7 +859,6 @@ declare namespace GraphQLClient {
859
859
  export interface CreateRollupTx {
860
860
  address: string;
861
861
  tokenAddress: string;
862
- erc20TokenAddress: string;
863
862
  contractAddress: string;
864
863
  seedValidators: Array<null>;
865
864
  minStakeAmount: string;
@@ -896,7 +895,8 @@ declare namespace GraphQLClient {
896
895
  icon: string;
897
896
  totalSupply: string;
898
897
  address: string;
899
- erc20ContractAddress: string;
898
+ initialSupply: string;
899
+ foreignToken: GraphQLClient.ForeignToken;
900
900
  data: GraphQLClient.Any;
901
901
  }
902
902
 
@@ -994,6 +994,14 @@ declare namespace GraphQLClient {
994
994
  data: GraphQLClient.Any;
995
995
  }
996
996
 
997
+ export interface ForeignToken {
998
+ type: string;
999
+ contractAddress: string;
1000
+ chainType: string;
1001
+ chainName: string;
1002
+ chainId: number;
1003
+ }
1004
+
997
1005
  export interface ForgeState {
998
1006
  address: string;
999
1007
  consensus: GraphQLClient.ConsensusParams;
@@ -1210,6 +1218,7 @@ declare namespace GraphQLClient {
1210
1218
  minWithdrawFee: string;
1211
1219
  maxWithdrawFee: string;
1212
1220
  paused: boolean;
1221
+ foreignToken: GraphQLClient.ForeignToken;
1213
1222
  data: GraphQLClient.Any;
1214
1223
  }
1215
1224
 
@@ -1267,6 +1276,7 @@ declare namespace GraphQLClient {
1267
1276
  genesisTime: string;
1268
1277
  renaissanceTime: string;
1269
1278
  erc20ContractAddress: string;
1279
+ foreignToken: GraphQLClient.ForeignToken;
1270
1280
  data: GraphQLClient.Any;
1271
1281
  }
1272
1282
 
@@ -1654,6 +1664,7 @@ declare namespace GraphQLClient {
1654
1664
  minWithdrawFee: string;
1655
1665
  maxWithdrawFee: string;
1656
1666
  paused: boolean;
1667
+ foreignToken: GraphQLClient.ForeignToken;
1657
1668
  context: GraphQLClient.StateContext;
1658
1669
  data: GraphQLClient.Any;
1659
1670
  }
@@ -1768,6 +1779,7 @@ declare namespace GraphQLClient {
1768
1779
  icon: string;
1769
1780
  totalSupply: string;
1770
1781
  erc20ContractAddress: string;
1782
+ foreignToken: GraphQLClient.ForeignToken;
1771
1783
  context: GraphQLClient.StateContext;
1772
1784
  data: GraphQLClient.Any;
1773
1785
  }
@@ -2116,6 +2128,7 @@ declare namespace GraphQLClient {
2116
2128
  paging: undefined;
2117
2129
  tokenAddress: string;
2118
2130
  erc20TokenAddress: string;
2131
+ foreignTokenAddress: string;
2119
2132
  }
2120
2133
 
2121
2134
  export interface GetRollupBlockParams {
@@ -1230,6 +1230,16 @@
1230
1230
  "ofType": null
1231
1231
  },
1232
1232
  "defaultValue": null
1233
+ },
1234
+ {
1235
+ "name": "foreignTokenAddress",
1236
+ "description": null,
1237
+ "type": {
1238
+ "kind": "SCALAR",
1239
+ "name": "String",
1240
+ "ofType": null
1241
+ },
1242
+ "defaultValue": null
1233
1243
  }
1234
1244
  ],
1235
1245
  "type": {
@@ -4118,6 +4128,18 @@
4118
4128
  "isDeprecated": false,
4119
4129
  "deprecationReason": null
4120
4130
  },
4131
+ {
4132
+ "name": "foreignToken",
4133
+ "description": null,
4134
+ "args": [],
4135
+ "type": {
4136
+ "kind": "OBJECT",
4137
+ "name": "ForeignToken",
4138
+ "ofType": null
4139
+ },
4140
+ "isDeprecated": false,
4141
+ "deprecationReason": null
4142
+ },
4121
4143
  {
4122
4144
  "name": "context",
4123
4145
  "description": null,
@@ -4148,6 +4170,77 @@
4148
4170
  "enumValues": null,
4149
4171
  "possibleTypes": null
4150
4172
  },
4173
+ {
4174
+ "kind": "OBJECT",
4175
+ "name": "ForeignToken",
4176
+ "description": null,
4177
+ "fields": [
4178
+ {
4179
+ "name": "type",
4180
+ "description": null,
4181
+ "args": [],
4182
+ "type": {
4183
+ "kind": "SCALAR",
4184
+ "name": "String",
4185
+ "ofType": null
4186
+ },
4187
+ "isDeprecated": false,
4188
+ "deprecationReason": null
4189
+ },
4190
+ {
4191
+ "name": "contractAddress",
4192
+ "description": null,
4193
+ "args": [],
4194
+ "type": {
4195
+ "kind": "SCALAR",
4196
+ "name": "String",
4197
+ "ofType": null
4198
+ },
4199
+ "isDeprecated": false,
4200
+ "deprecationReason": null
4201
+ },
4202
+ {
4203
+ "name": "chainType",
4204
+ "description": null,
4205
+ "args": [],
4206
+ "type": {
4207
+ "kind": "SCALAR",
4208
+ "name": "String",
4209
+ "ofType": null
4210
+ },
4211
+ "isDeprecated": false,
4212
+ "deprecationReason": null
4213
+ },
4214
+ {
4215
+ "name": "chainName",
4216
+ "description": null,
4217
+ "args": [],
4218
+ "type": {
4219
+ "kind": "SCALAR",
4220
+ "name": "String",
4221
+ "ofType": null
4222
+ },
4223
+ "isDeprecated": false,
4224
+ "deprecationReason": null
4225
+ },
4226
+ {
4227
+ "name": "chainId",
4228
+ "description": null,
4229
+ "args": [],
4230
+ "type": {
4231
+ "kind": "SCALAR",
4232
+ "name": "Int",
4233
+ "ofType": null
4234
+ },
4235
+ "isDeprecated": false,
4236
+ "deprecationReason": null
4237
+ }
4238
+ ],
4239
+ "inputFields": null,
4240
+ "interfaces": [],
4241
+ "enumValues": null,
4242
+ "possibleTypes": null
4243
+ },
4151
4244
  {
4152
4245
  "kind": "OBJECT",
4153
4246
  "name": "ResponseGetSwapState",
@@ -10160,6 +10253,18 @@
10160
10253
  "isDeprecated": false,
10161
10254
  "deprecationReason": null
10162
10255
  },
10256
+ {
10257
+ "name": "foreignToken",
10258
+ "description": null,
10259
+ "args": [],
10260
+ "type": {
10261
+ "kind": "OBJECT",
10262
+ "name": "ForeignToken",
10263
+ "ofType": null
10264
+ },
10265
+ "isDeprecated": false,
10266
+ "deprecationReason": null
10267
+ },
10163
10268
  {
10164
10269
  "name": "data",
10165
10270
  "description": null,
@@ -11422,6 +11527,18 @@
11422
11527
  "isDeprecated": false,
11423
11528
  "deprecationReason": null
11424
11529
  },
11530
+ {
11531
+ "name": "foreignToken",
11532
+ "description": null,
11533
+ "args": [],
11534
+ "type": {
11535
+ "kind": "OBJECT",
11536
+ "name": "ForeignToken",
11537
+ "ofType": null
11538
+ },
11539
+ "isDeprecated": false,
11540
+ "deprecationReason": null
11541
+ },
11425
11542
  {
11426
11543
  "name": "context",
11427
11544
  "description": null,
@@ -12007,6 +12124,18 @@
12007
12124
  "isDeprecated": false,
12008
12125
  "deprecationReason": null
12009
12126
  },
12127
+ {
12128
+ "name": "foreignToken",
12129
+ "description": null,
12130
+ "args": [],
12131
+ "type": {
12132
+ "kind": "OBJECT",
12133
+ "name": "ForeignToken",
12134
+ "ofType": null
12135
+ },
12136
+ "isDeprecated": false,
12137
+ "deprecationReason": null
12138
+ },
12010
12139
  {
12011
12140
  "name": "data",
12012
12141
  "description": null,
@@ -14697,18 +14826,6 @@
14697
14826
  "isDeprecated": false,
14698
14827
  "deprecationReason": null
14699
14828
  },
14700
- {
14701
- "name": "erc20TokenAddress",
14702
- "description": null,
14703
- "args": [],
14704
- "type": {
14705
- "kind": "SCALAR",
14706
- "name": "String",
14707
- "ofType": null
14708
- },
14709
- "isDeprecated": false,
14710
- "deprecationReason": null
14711
- },
14712
14829
  {
14713
14830
  "name": "contractAddress",
14714
14831
  "description": null,
@@ -15125,7 +15242,7 @@
15125
15242
  "deprecationReason": null
15126
15243
  },
15127
15244
  {
15128
- "name": "erc20ContractAddress",
15245
+ "name": "initialSupply",
15129
15246
  "description": null,
15130
15247
  "args": [],
15131
15248
  "type": {
@@ -15136,6 +15253,18 @@
15136
15253
  "isDeprecated": false,
15137
15254
  "deprecationReason": null
15138
15255
  },
15256
+ {
15257
+ "name": "foreignToken",
15258
+ "description": null,
15259
+ "args": [],
15260
+ "type": {
15261
+ "kind": "OBJECT",
15262
+ "name": "ForeignToken",
15263
+ "ofType": null
15264
+ },
15265
+ "isDeprecated": false,
15266
+ "deprecationReason": null
15267
+ },
15139
15268
  {
15140
15269
  "name": "data",
15141
15270
  "description": null,
@@ -16505,6 +16634,16 @@
16505
16634
  "ofType": null
16506
16635
  },
16507
16636
  "defaultValue": null
16637
+ },
16638
+ {
16639
+ "name": "foreignTokenAddress",
16640
+ "description": null,
16641
+ "type": {
16642
+ "kind": "SCALAR",
16643
+ "name": "String",
16644
+ "ofType": null
16645
+ },
16646
+ "defaultValue": null
16508
16647
  }
16509
16648
  ],
16510
16649
  "interfaces": null,