@ocap/client 1.19.6 → 1.19.8
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.
- package/dist/extension.js +1 -31
- package/dist/extension.js.map +1 -1
- package/dist/methods.js +0 -15
- package/dist/methods.js.map +1 -1
- package/dist/report.html +1 -1
- package/docs/README.md +0 -89
- package/lib/extension.js +1 -31
- package/lib/extension.js.map +1 -1
- package/lib/methods.js +0 -15
- package/lib/methods.js.map +1 -1
- package/package.json +12 -12
package/dist/extension.js
CHANGED
|
@@ -5,7 +5,7 @@ const get = require('lodash/get');
|
|
|
5
5
|
const omit = require('lodash/omit');
|
|
6
6
|
const cloneDeep = require('lodash/cloneDeep');
|
|
7
7
|
const camelCase = require('lodash/camelCase');
|
|
8
|
-
const {
|
|
8
|
+
const { isValid } = require('@arcblock/did');
|
|
9
9
|
const { transactions, typeUrls, multiSignTxs, multiSignV2Txs } = require('@ocap/proto');
|
|
10
10
|
const { toTxHash } = require('@ocap/mcrypto');
|
|
11
11
|
const { createMessage, getMessageType, toTypeUrl } = require('@ocap/message');
|
|
@@ -499,36 +499,6 @@ const createExtensionMethods = client => {
|
|
|
499
499
|
}
|
|
500
500
|
});
|
|
501
501
|
|
|
502
|
-
/**
|
|
503
|
-
* Declare an DID and it's public key on chain
|
|
504
|
-
*
|
|
505
|
-
* @memberof GraphQLClient
|
|
506
|
-
* @function
|
|
507
|
-
* @name GraphQLClient#declare
|
|
508
|
-
* @param {object} params
|
|
509
|
-
* @param {string} params.moniker - user nickname
|
|
510
|
-
* @param {string} [params.issuer=""] - who issued the account
|
|
511
|
-
* @param {object} [params.data=undefined] - who issued the account
|
|
512
|
-
* @param {WalletObject} params.wallet - wallet to sign the tx
|
|
513
|
-
* @param {object} extra - other param to underlying client implementation
|
|
514
|
-
* @returns {Promise} the transaction hash once resolved
|
|
515
|
-
*/
|
|
516
|
-
client.declare = ({ moniker, issuer = '', data, wallet }, extra) => {
|
|
517
|
-
let itxData = data;
|
|
518
|
-
|
|
519
|
-
// If there is no data attached to the account, we can attach wallet type by default
|
|
520
|
-
if (!itxData) {
|
|
521
|
-
itxData = { typeUrl: 'json', value: toTypeInfoStr(wallet.address) };
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
return client.sendDeclareTx({
|
|
525
|
-
tx: {
|
|
526
|
-
itx: { moniker, issuer, data: itxData }
|
|
527
|
-
},
|
|
528
|
-
wallet
|
|
529
|
-
}, extra);
|
|
530
|
-
};
|
|
531
|
-
|
|
532
502
|
/**
|
|
533
503
|
* Migrate current account to a new account
|
|
534
504
|
*
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extension.js"],"names":["get","require","omit","cloneDeep","camelCase","toTypeInfoStr","isValid","transactions","typeUrls","multiSignTxs","multiSignV2Txs","toTxHash","createMessage","getMessageType","toTypeUrl","bytesToHex","toBase58","toBase64","toHex","toBuffer","fromTokenToUnit","fromUnitToToken","DEFAULT_TOKEN_DECIMAL","formatFactoryState","preMintFromFactory","isValidFactory","toDelegateAddress","toAssetAddress","toFactoryAddress","toTokenAddress","toStakeAddress","toRollupAddress","debug","name","createExtensionMethods","client","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","txConfig","vaults","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","feeConfig","find","t","txObj","signature","Buffer","serviceFee","fee","txToSignBytes","serializeBinary","object","buffer","encodeMethod","__tx__","txSendFn","commit","extra","txExtra","encoded","res","sign","console","error","reject","txHash","txMsg","txBytes","txStr","hash","sendTx","JSON","stringify","err","sendMethod","_formatEncodedTx","encoding","txSignFn","signMethod","includes","txMultiSignFn","data","unshift","signer","multiSignMethod","item","s","declare","moniker","issuer","itxData","sendDeclareTx","migrateAccount","to","sendAccountMigrateTx","delegate","privileges","ops","limit","tokens","assets","txTypes","values","filter","startsWith","some","sendDelegateTx","revokeDelegate","sendRevokeDelegateTx","Boolean","toString","createAsset","parent","ttl","readonly","transferrable","display","endpoint","tags","payload","sendCreateAssetTx","updateAsset","sendUpdateAssetTx","createAssetFactory","factory","description","settlement","trustedIssuers","output","hooks","sendCreateFactoryTx","preMintAsset","inputs","owner","options","ignoreFields","factoryState","issuerState","getFactoryState","getAccountState","asset","variables","assign","entries","key","acquireAsset","sendAcquireAssetV2Tx","mintAsset","sendMintAssetTx","transfer","memo","contextToken","tmpTokens","tokensMap","sendTransferV2Tx","stake","slashers","locked","message","multiSignStakeTx","receiver","signStakeTx","sendStakeTx","revokeStake","sendRevokeStakeTx","outputs","slashStake","reason","sendSlashStakeTx","slashedStake","claimStake","evidence","sendClaimStakeTx","createRollup","props","requiredProps","tokenAddress","foreignToken","toBNStr","n","maxStakeAmount","minStakeAmount","minSignerCount","maxSignerCount","minBlockSize","maxBlockSize","minBlockInterval","minBlockConfirmation","minDepositAmount","maxDepositAmount","minWithdrawAmount","maxWithdrawAmount","depositFeeRate","withdrawFeeRate","publisherFeeShare","proposerFeeShare","minDepositFee","maxDepositFee","minWithdrawFee","maxWithdrawFee","leaveWaitingPeriod","publishWaitingPeriod","publishSlashRate","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":"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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 { toTypeInfoStr, isValid } = require('@arcblock/did');\nconst { transactions, typeUrls, multiSignTxs, multiSignV2Txs } = require('@ocap/proto');\nconst { toTxHash } = require('@ocap/mcrypto');\nconst { createMessage, getMessageType, toTypeUrl } = 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 {GraphQLClient} client\n */\nconst createExtensionMethods = (client) => {\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 vaults {\n slashedStake\n txFee\n txGas\n }\n txConfig {\n txFee {\n fee\n typeUrl\n }\n txGas {\n price\n createState\n updateState\n dataStorage\n minStake\n maxStake\n stakeLockPeriod\n }\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 txConfig: get(result, 'getForgeState.state.txConfig'),\n vaults: get(result, 'getForgeState.state.vaults'),\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 const context = await client.getContext();\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 // 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 type = itx.typeUrl || toTypeUrl(itx.type);\n const feeConfig = get(context, 'txConfig.txFee', []).find((t) => t.typeUrl === type);\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 serviceFee: feeConfig ? feeConfig.fee : '0',\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.extra] - extra params to verify the transaction, usually used for passkeys\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, extra: txExtra = '' }, extra = {}) => {\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 if (extra['x-gas-payer-sig']) {\n console.error('ERROR: \"x-gas-payer-sig\" should only exist in extra.headers');\n }\n if (extra['x-gas-payer-pk']) {\n console.error('ERROR: \"x-gas-payer-pk\" should only exist in extra.headers');\n }\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let txHash = null;\n try {\n const txMsg = createMessage('Transaction', encoded);\n const txBytes = txMsg.serializeBinary();\n const txStr = toBase64(txBytes);\n txHash = toTxHash(txBytes);\n debug(`sendTx.${x}.txObj`, txMsg.toObject());\n const { hash } = await client.sendTx(\n { tx: txStr, commit, extra: typeof txExtra === 'string' ? txExtra : JSON.stringify(txExtra) },\n extra\n );\n resolve(hash);\n } catch (err) {\n err.txHash = txHash;\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: toTypeInfoStr(wallet.address) };\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 && x.limit) {\n return x;\n }\n\n return { typeUrl: x.typeUrl, limit: x.limit || { tokens: [], assets: [] } };\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 {object} params.display - the display of the asset\n * @param {object} params.endpoint - the endpoint of the asset\n * @param {string} params.tags - the tag list of the asset\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 {\n moniker,\n parent = '',\n ttl = 0,\n data,\n readonly = false,\n transferrable = true,\n display,\n endpoint,\n tags = [],\n delegator = '',\n wallet,\n },\n extra\n ) => {\n const payload = { moniker, parent, ttl, readonly, transferrable, data, display, endpoint, tags };\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 itx.address = toFactoryAddress(itx);\n\n isValidFactory(itx, true);\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 } = await 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 if (isValid(to) === false) {\n throw new Error('Can not transfer without valid recipient');\n }\n if (!token && tokens.length === 0 && assets.length === 0) {\n throw new Error('Can not transfer without payload');\n }\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 {boolean} params.locked - is the stake locked on creation\n * @param {string[]} params.slashers - who can slash from this, default to [to]\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 (\n { assets = [], tokens = [], slashers = [], to = '', locked = false, message = '', nonce = '', wallet },\n extra\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 const from = wallet.address;\n const address = toStakeAddress(from, to, nonce);\n let tx = await client.multiSignStakeTx(\n {\n tx: {\n itx: {\n address,\n receiver: to,\n locked,\n message,\n slashers,\n nonce,\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 * Slash token or assets from some stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#slashStake\n * @param {object} params\n * @param {Array} params.assets - which assets to slash\n * @param {Array} params.tokens - which tokens to slash\n * @param {string} params.from - stake address\n * @param {string} params.reason - slash reason\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.slashStake = async ({ assets = [], tokens = [], reason, from, wallet }, extra) => {\n if (!reason) {\n throw new Error('Can not slash stake without valid reason message');\n }\n if (!from) {\n throw new Error('Can not slash stake without stake address');\n }\n\n const { vaults } = 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.sendSlashStakeTx(\n {\n tx: {\n itx: {\n address: from,\n message: reason,\n outputs: [\n {\n owner: vaults.slashedStake,\n assets,\n tokens: tmpTokens,\n },\n ],\n },\n },\n wallet,\n },\n extra\n );\n };\n\n /**\n * Claim revoked token or assets from stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#claimStake\n * @param {object} params\n * @param {string} params.from - stake address\n * @param {Array} params.evidence - which revoke tx hash to use\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 // eslint-disable-next-line require-await\n client.claimStake = async ({ from, evidence, wallet }, extra) => {\n if (!evidence) {\n throw new Error('Can not claim stake without valid evidence tx hash');\n }\n if (!from) {\n throw new Error('Can not claim stake without stake address');\n }\n\n return client.sendClaimStakeTx(\n {\n tx: {\n itx: {\n address: from,\n evidence: { hash: evidence },\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 {number} params.leaveWaitingPeriod\n * @param {number} params.publishWaitingPeriod\n * @param {number} params.publishSlashRate\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', 'vaultAddress', '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: 1 * 60, // 1 minute\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 publisherFeeShare: 6000, // 60%\n proposerFeeShare: 3000, // 30%\n // validatorFeeShare: 1000, // 10%\n minDepositFee: toBNStr(1),\n maxDepositFee: toBNStr(10000),\n minWithdrawFee: toBNStr(1),\n maxWithdrawFee: toBNStr(10000),\n leaveWaitingPeriod: 60 * 60, // 1 hour\n publishWaitingPeriod: 60 * 60, // 1 hour\n publishSlashRate: 10, // 0.1%\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/extension.js"],"names":["get","require","omit","cloneDeep","camelCase","isValid","transactions","typeUrls","multiSignTxs","multiSignV2Txs","toTxHash","createMessage","getMessageType","toTypeUrl","bytesToHex","toBase58","toBase64","toHex","toBuffer","fromTokenToUnit","fromUnitToToken","DEFAULT_TOKEN_DECIMAL","formatFactoryState","preMintFromFactory","isValidFactory","toDelegateAddress","toAssetAddress","toFactoryAddress","toTokenAddress","toStakeAddress","toRollupAddress","debug","name","createExtensionMethods","client","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","txConfig","vaults","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","feeConfig","find","t","txObj","signature","Buffer","serviceFee","fee","txToSignBytes","serializeBinary","object","buffer","encodeMethod","__tx__","txSendFn","commit","extra","txExtra","encoded","res","sign","console","error","reject","txHash","txMsg","txBytes","txStr","hash","sendTx","JSON","stringify","err","sendMethod","_formatEncodedTx","encoding","txSignFn","signMethod","includes","txMultiSignFn","data","unshift","signer","multiSignMethod","item","s","migrateAccount","to","sendAccountMigrateTx","delegate","privileges","ops","limit","tokens","assets","txTypes","values","filter","startsWith","some","sendDelegateTx","revokeDelegate","sendRevokeDelegateTx","Boolean","toString","createAsset","moniker","parent","ttl","readonly","transferrable","display","endpoint","tags","payload","sendCreateAssetTx","updateAsset","sendUpdateAssetTx","createAssetFactory","factory","description","settlement","trustedIssuers","output","hooks","sendCreateFactoryTx","preMintAsset","inputs","owner","options","ignoreFields","factoryState","issuerState","getFactoryState","getAccountState","asset","issuer","variables","assign","entries","key","acquireAsset","sendAcquireAssetV2Tx","mintAsset","sendMintAssetTx","transfer","memo","contextToken","tmpTokens","tokensMap","sendTransferV2Tx","stake","slashers","locked","message","multiSignStakeTx","receiver","signStakeTx","sendStakeTx","revokeStake","sendRevokeStakeTx","outputs","slashStake","reason","sendSlashStakeTx","slashedStake","claimStake","evidence","sendClaimStakeTx","createRollup","props","requiredProps","tokenAddress","foreignToken","toBNStr","n","maxStakeAmount","minStakeAmount","minSignerCount","maxSignerCount","minBlockSize","maxBlockSize","minBlockInterval","minBlockConfirmation","minDepositAmount","maxDepositAmount","minWithdrawAmount","maxWithdrawAmount","depositFeeRate","withdrawFeeRate","publisherFeeShare","proposerFeeShare","minDepositFee","maxDepositFee","minWithdrawFee","maxWithdrawFee","leaveWaitingPeriod","publishWaitingPeriod","publishSlashRate","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":"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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 { isValid } = require('@arcblock/did');\nconst { transactions, typeUrls, multiSignTxs, multiSignV2Txs } = require('@ocap/proto');\nconst { toTxHash } = require('@ocap/mcrypto');\nconst { createMessage, getMessageType, toTypeUrl } = 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 {GraphQLClient} client\n */\nconst createExtensionMethods = (client) => {\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 vaults {\n slashedStake\n txFee\n txGas\n }\n txConfig {\n txFee {\n fee\n typeUrl\n }\n txGas {\n price\n createState\n updateState\n dataStorage\n minStake\n maxStake\n stakeLockPeriod\n }\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 txConfig: get(result, 'getForgeState.state.txConfig'),\n vaults: get(result, 'getForgeState.state.vaults'),\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 const context = await client.getContext();\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 // 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 type = itx.typeUrl || toTypeUrl(itx.type);\n const feeConfig = get(context, 'txConfig.txFee', []).find((t) => t.typeUrl === type);\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 serviceFee: feeConfig ? feeConfig.fee : '0',\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.extra] - extra params to verify the transaction, usually used for passkeys\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, extra: txExtra = '' }, extra = {}) => {\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 if (extra['x-gas-payer-sig']) {\n console.error('ERROR: \"x-gas-payer-sig\" should only exist in extra.headers');\n }\n if (extra['x-gas-payer-pk']) {\n console.error('ERROR: \"x-gas-payer-pk\" should only exist in extra.headers');\n }\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let txHash = null;\n try {\n const txMsg = createMessage('Transaction', encoded);\n const txBytes = txMsg.serializeBinary();\n const txStr = toBase64(txBytes);\n txHash = toTxHash(txBytes);\n debug(`sendTx.${x}.txObj`, txMsg.toObject());\n const { hash } = await client.sendTx(\n { tx: txStr, commit, extra: typeof txExtra === 'string' ? txExtra : JSON.stringify(txExtra) },\n extra\n );\n resolve(hash);\n } catch (err) {\n err.txHash = txHash;\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 * 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 && x.limit) {\n return x;\n }\n\n return { typeUrl: x.typeUrl, limit: x.limit || { tokens: [], assets: [] } };\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 {object} params.display - the display of the asset\n * @param {object} params.endpoint - the endpoint of the asset\n * @param {string} params.tags - the tag list of the asset\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 {\n moniker,\n parent = '',\n ttl = 0,\n data,\n readonly = false,\n transferrable = true,\n display,\n endpoint,\n tags = [],\n delegator = '',\n wallet,\n },\n extra\n ) => {\n const payload = { moniker, parent, ttl, readonly, transferrable, data, display, endpoint, tags };\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 itx.address = toFactoryAddress(itx);\n\n isValidFactory(itx, true);\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 } = await 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 if (isValid(to) === false) {\n throw new Error('Can not transfer without valid recipient');\n }\n if (!token && tokens.length === 0 && assets.length === 0) {\n throw new Error('Can not transfer without payload');\n }\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 {boolean} params.locked - is the stake locked on creation\n * @param {string[]} params.slashers - who can slash from this, default to [to]\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 (\n { assets = [], tokens = [], slashers = [], to = '', locked = false, message = '', nonce = '', wallet },\n extra\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 const from = wallet.address;\n const address = toStakeAddress(from, to, nonce);\n let tx = await client.multiSignStakeTx(\n {\n tx: {\n itx: {\n address,\n receiver: to,\n locked,\n message,\n slashers,\n nonce,\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 * Slash token or assets from some stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#slashStake\n * @param {object} params\n * @param {Array} params.assets - which assets to slash\n * @param {Array} params.tokens - which tokens to slash\n * @param {string} params.from - stake address\n * @param {string} params.reason - slash reason\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.slashStake = async ({ assets = [], tokens = [], reason, from, wallet }, extra) => {\n if (!reason) {\n throw new Error('Can not slash stake without valid reason message');\n }\n if (!from) {\n throw new Error('Can not slash stake without stake address');\n }\n\n const { vaults } = 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.sendSlashStakeTx(\n {\n tx: {\n itx: {\n address: from,\n message: reason,\n outputs: [\n {\n owner: vaults.slashedStake,\n assets,\n tokens: tmpTokens,\n },\n ],\n },\n },\n wallet,\n },\n extra\n );\n };\n\n /**\n * Claim revoked token or assets from stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#claimStake\n * @param {object} params\n * @param {string} params.from - stake address\n * @param {Array} params.evidence - which revoke tx hash to use\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 // eslint-disable-next-line require-await\n client.claimStake = async ({ from, evidence, wallet }, extra) => {\n if (!evidence) {\n throw new Error('Can not claim stake without valid evidence tx hash');\n }\n if (!from) {\n throw new Error('Can not claim stake without stake address');\n }\n\n return client.sendClaimStakeTx(\n {\n tx: {\n itx: {\n address: from,\n evidence: { hash: evidence },\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 {number} params.leaveWaitingPeriod\n * @param {number} params.publishWaitingPeriod\n * @param {number} params.publishSlashRate\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', 'vaultAddress', '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: 1 * 60, // 1 minute\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 publisherFeeShare: 6000, // 60%\n proposerFeeShare: 3000, // 30%\n // validatorFeeShare: 1000, // 10%\n minDepositFee: toBNStr(1),\n maxDepositFee: toBNStr(10000),\n minWithdrawFee: toBNStr(1),\n maxWithdrawFee: toBNStr(10000),\n leaveWaitingPeriod: 60 * 60, // 1 hour\n publishWaitingPeriod: 60 * 60, // 1 hour\n publishSlashRate: 10, // 0.1%\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/dist/methods.js
CHANGED
|
@@ -77,21 +77,6 @@
|
|
|
77
77
|
* @returns {object} transaction object
|
|
78
78
|
*/
|
|
79
79
|
|
|
80
|
-
/**
|
|
81
|
-
* Declare an DID and it's public key on chain
|
|
82
|
-
*
|
|
83
|
-
* @memberof GraphQLClient
|
|
84
|
-
* @function
|
|
85
|
-
* @name GraphQLClient#declare
|
|
86
|
-
* @param {object} params
|
|
87
|
-
* @param {string} params.moniker - user nickname
|
|
88
|
-
* @param {string} [params.issuer=""] - who issued the account
|
|
89
|
-
* @param {object} [params.data=undefined] - who issued the account
|
|
90
|
-
* @param {WalletObject} params.wallet - wallet to sign the tx
|
|
91
|
-
* @param {object} extra - other param to underlying client implementation
|
|
92
|
-
* @returns {Promise} the transaction hash once resolved
|
|
93
|
-
*/
|
|
94
|
-
|
|
95
80
|
/**
|
|
96
81
|
* Migrate current account to a new account
|
|
97
82
|
*
|
package/dist/methods.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/methods.js"],"names":[],"mappings":"AAAA;;AAEA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;;;;;;AAeA;;;;;;;;;;;;;AAaA;;;;;;;;;;;;;;;AAeA;;;;;;;;;;;;;;AAcA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;AAwBA;;;;;;;;;;;;;;;;;;AAkBA;;;;;;;;;;;;;;;;;AAiBA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;AAeA","file":"methods.js","sourcesContent":["// This file is generated automatically, do not edit\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\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\n/**\n * List all transaction send methods\n * Each method can send one kind of transactions supported by forge core, such as `DeclareTx`, `PokeTx`\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxSendMethods\n * @returns {Array<string>} method name list\n */\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\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\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\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\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\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\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\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\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\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\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 {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\n/**\n * Create an asset factory that can be used to produce multiple assets in a transaction\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createAssetFactory\n * @param {object} params\n * @param {string} params.moniker - asset name\n * @param {object} params.factory - asset factory attributes\n * @param {string} params.factory.description - asset factory name\n * @param {number} params.factory.limit - how many assets can be generated from this factory\n * @param {price} params.factory.price - how much should charge user when acquire asset\n * @param {string} params.factory.template - mustache compatible\n * @param {Array} params.factory.templateVariables - list of allowed template variables\n * @param {string} params.factory.assetName - protobuf type known to forge that can be used to create this asset\n * @param {string} params.factory.attributes - attributes for assets that are generated from this factory\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, factoryAddress]` once resolved\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 {string} params.assetFactory - Asset factory address\n * @param {Array} params.assetVariables - list of asset variables that can be populated into asset factory template\n * @param {boolean} params.readonly - whether the asset can be updated after creation, should match factory settings\n * @param {boolean} params.transferrable - whether the asset can be transferred to another account, should match factory settings\n * @param {number} params.ttl - asset expire\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\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\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\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\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/methods.js"],"names":[],"mappings":"AAAA;;AAEA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;;;;AAaA;;;;;;;;;;;;;;;AAeA;;;;;;;;;;;;;;AAcA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;AAwBA;;;;;;;;;;;;;;;;;;AAkBA;;;;;;;;;;;;;;;;;AAiBA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;AAeA","file":"methods.js","sourcesContent":["// This file is generated automatically, do not edit\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\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\n/**\n * List all transaction send methods\n * Each method can send one kind of transactions supported by forge core, such as `DeclareTx`, `PokeTx`\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxSendMethods\n * @returns {Array<string>} method name list\n */\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\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\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\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\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\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\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\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\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\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 {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\n/**\n * Create an asset factory that can be used to produce multiple assets in a transaction\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createAssetFactory\n * @param {object} params\n * @param {string} params.moniker - asset name\n * @param {object} params.factory - asset factory attributes\n * @param {string} params.factory.description - asset factory name\n * @param {number} params.factory.limit - how many assets can be generated from this factory\n * @param {price} params.factory.price - how much should charge user when acquire asset\n * @param {string} params.factory.template - mustache compatible\n * @param {Array} params.factory.templateVariables - list of allowed template variables\n * @param {string} params.factory.assetName - protobuf type known to forge that can be used to create this asset\n * @param {string} params.factory.attributes - attributes for assets that are generated from this factory\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, factoryAddress]` once resolved\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 {string} params.assetFactory - Asset factory address\n * @param {Array} params.assetVariables - list of asset variables that can be populated into asset factory template\n * @param {boolean} params.readonly - whether the asset can be updated after creation, should match factory settings\n * @param {boolean} params.transferrable - whether the asset can be transferred to another account, should match factory settings\n * @param {number} params.ttl - asset expire\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\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\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\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\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"]}
|
package/dist/report.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8"/>
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
6
|
-
<title>@ocap/client [
|
|
6
|
+
<title>@ocap/client [5 Feb 2025 at 10:07]</title>
|
|
7
7
|
<link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
|
|
8
8
|
|
|
9
9
|
<script>
|
package/docs/README.md
CHANGED
|
@@ -26,7 +26,6 @@ Please note that, due to internal implementation of google-protobuf, all `repeat
|
|
|
26
26
|
* [getTxMultiSignMethods()](#GraphQLClient+getTxMultiSignMethods) ⇒ `Array.<string>`
|
|
27
27
|
* [getType(x)](#GraphQLClient+getType) ⇒ `class` | `null`
|
|
28
28
|
* [decodeTx(input)](#GraphQLClient+decodeTx) ⇒ `object`
|
|
29
|
-
* [declare(params, extra)](#GraphQLClient+declare) ⇒ `Promise`
|
|
30
29
|
* [migrateAccount(params, extra)](#GraphQLClient+migrateAccount) ⇒ `Promise`
|
|
31
30
|
* [delegate(params, extra)](#GraphQLClient+delegate) ⇒ `Promise`
|
|
32
31
|
* [revokeDelegate(params, extra)](#GraphQLClient+revokeDelegate) ⇒ `Promise`
|
|
@@ -55,7 +54,6 @@ Please note that, due to internal implementation of google-protobuf, all `repeat
|
|
|
55
54
|
* [sendCreateRollupBlockTx(params, extra)](#GraphQLClient+sendCreateRollupBlockTx) ⇒ `Promise.<string>`
|
|
56
55
|
* [sendCreateRollupTx(params, extra)](#GraphQLClient+sendCreateRollupTx) ⇒ `Promise.<string>`
|
|
57
56
|
* [sendCreateTokenTx(params, extra)](#GraphQLClient+sendCreateTokenTx) ⇒ `Promise.<string>`
|
|
58
|
-
* [sendDeclareTx(params, extra)](#GraphQLClient+sendDeclareTx) ⇒ `Promise.<string>`
|
|
59
57
|
* [sendDelegateTx(params, extra)](#GraphQLClient+sendDelegateTx) ⇒ `Promise.<string>`
|
|
60
58
|
* [sendDepositTokenV2Tx(params, extra)](#GraphQLClient+sendDepositTokenV2Tx) ⇒ `Promise.<string>`
|
|
61
59
|
* [sendExchangeTx(params, extra)](#GraphQLClient+sendExchangeTx) ⇒ `Promise.<string>`
|
|
@@ -90,7 +88,6 @@ Please note that, due to internal implementation of google-protobuf, all `repeat
|
|
|
90
88
|
* [encodeCreateRollupBlockTx(params)](#GraphQLClient+encodeCreateRollupBlockTx) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
91
89
|
* [encodeCreateRollupTx(params)](#GraphQLClient+encodeCreateRollupTx) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
92
90
|
* [encodeCreateTokenTx(params)](#GraphQLClient+encodeCreateTokenTx) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
93
|
-
* [encodeDeclareTx(params)](#GraphQLClient+encodeDeclareTx) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
94
91
|
* [encodeDelegateTx(params)](#GraphQLClient+encodeDelegateTx) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
95
92
|
* [encodeDepositTokenV2Tx(params)](#GraphQLClient+encodeDepositTokenV2Tx) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
96
93
|
* [encodeExchangeTx(params)](#GraphQLClient+encodeExchangeTx) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
@@ -228,7 +225,6 @@ Please note that, due to internal implementation of google-protobuf, all `repeat
|
|
|
228
225
|
* [CreateRollupBlockTx](#GraphQLClient.CreateRollupBlockTx) : `object`
|
|
229
226
|
* [CreateRollupTx](#GraphQLClient.CreateRollupTx) : `object`
|
|
230
227
|
* [CreateTokenTx](#GraphQLClient.CreateTokenTx) : `object`
|
|
231
|
-
* [DeclareTx](#GraphQLClient.DeclareTx) : `object`
|
|
232
228
|
* [DelegateConfig](#GraphQLClient.DelegateConfig) : `object`
|
|
233
229
|
* [DelegateLimit](#GraphQLClient.DelegateLimit) : `object`
|
|
234
230
|
* [DelegateOp](#GraphQLClient.DelegateOp) : `object`
|
|
@@ -414,7 +410,6 @@ Please note that, due to internal implementation of google-protobuf, all `repeat
|
|
|
414
410
|
* [CreateRollupBlockTxInput](#GraphQLClient.CreateRollupBlockTxInput) : `Object`
|
|
415
411
|
* [CreateRollupTxInput](#GraphQLClient.CreateRollupTxInput) : `Object`
|
|
416
412
|
* [CreateTokenTxInput](#GraphQLClient.CreateTokenTxInput) : `Object`
|
|
417
|
-
* [DeclareTxInput](#GraphQLClient.DeclareTxInput) : `Object`
|
|
418
413
|
* [DelegateTxInput](#GraphQLClient.DelegateTxInput) : `Object`
|
|
419
414
|
* [DepositTokenV2TxInput](#GraphQLClient.DepositTokenV2TxInput) : `Object`
|
|
420
415
|
* [ExchangeTxInput](#GraphQLClient.ExchangeTxInput) : `Object`
|
|
@@ -528,22 +523,6 @@ Decode transaction buffer/base64/base58 to an object
|
|
|
528
523
|
| ----- | ----------------------------------------- |
|
|
529
524
|
| input | `buffer` \| `hex` \| `base48` \| `base64` |
|
|
530
525
|
|
|
531
|
-
### graphQLClient.declare(params, extra) ⇒ `Promise`
|
|
532
|
-
|
|
533
|
-
Declare an DID and it's public key on chain
|
|
534
|
-
|
|
535
|
-
**Kind**: instance method of [`GraphQLClient`](#GraphQLClient)\
|
|
536
|
-
**Returns**: `Promise` - the transaction hash once resolved
|
|
537
|
-
|
|
538
|
-
| Param | Type | Default | Description |
|
|
539
|
-
| --------------- | -------------- | ---------------------------- | ----------------------------------------------- |
|
|
540
|
-
| params | `object` | | |
|
|
541
|
-
| params.moniker | `string` | | user nickname |
|
|
542
|
-
| [params.issuer] | `string` | `"\"\""` | who issued the account |
|
|
543
|
-
| [params.data] | `object` | | who issued the account |
|
|
544
|
-
| params.wallet | `WalletObject` | | wallet to sign the tx |
|
|
545
|
-
| extra | `object` | | other param to underlying client implementation |
|
|
546
|
-
|
|
547
526
|
### graphQLClient.migrateAccount(params, extra) ⇒ `Promise`
|
|
548
527
|
|
|
549
528
|
Migrate current account to a new account
|
|
@@ -1006,18 +985,6 @@ Send CreateTokenTx transaction and get the hash, use [getTx](#GraphQLClient+getT
|
|
|
1006
985
|
| params | [`CreateTokenTxInput`](#GraphQLClient.CreateTokenTxInput) |
|
|
1007
986
|
| extra | `object` |
|
|
1008
987
|
|
|
1009
|
-
### graphQLClient.sendDeclareTx(params, extra) ⇒ `Promise.<string>`
|
|
1010
|
-
|
|
1011
|
-
Send DeclareTx transaction and get the hash, use [getTx](#GraphQLClient+getTx) to get transaction detail
|
|
1012
|
-
|
|
1013
|
-
**Kind**: instance method of [`GraphQLClient`](#GraphQLClient)\
|
|
1014
|
-
**Returns**: `Promise.<string>` - returns transaction hash if success, otherwise error was thrown
|
|
1015
|
-
|
|
1016
|
-
| Param | Type |
|
|
1017
|
-
| ------ | ------------------------------------------------- |
|
|
1018
|
-
| params | [`DeclareTxInput`](#GraphQLClient.DeclareTxInput) |
|
|
1019
|
-
| extra | `object` |
|
|
1020
|
-
|
|
1021
988
|
### graphQLClient.sendDelegateTx(params, extra) ⇒ `Promise.<string>`
|
|
1022
989
|
|
|
1023
990
|
Send DelegateTx transaction and get the hash, use [getTx](#GraphQLClient+getTx) to get transaction detail
|
|
@@ -1414,17 +1381,6 @@ Encode a CreateTokenTx transaction for later use
|
|
|
1414
1381
|
| ------ | --------------------------------------------------------- |
|
|
1415
1382
|
| params | [`CreateTokenTxInput`](#GraphQLClient.CreateTokenTxInput) |
|
|
1416
1383
|
|
|
1417
|
-
### graphQLClient.encodeDeclareTx(params) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
1418
|
-
|
|
1419
|
-
Encode a DeclareTx transaction for later use
|
|
1420
|
-
|
|
1421
|
-
**Kind**: instance method of [`GraphQLClient`](#GraphQLClient)\
|
|
1422
|
-
**Returns**: [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput) - result - we provide two formats of the encoding result, binary presentation and human readable object
|
|
1423
|
-
|
|
1424
|
-
| Param | Type |
|
|
1425
|
-
| ------ | ------------------------------------------------- |
|
|
1426
|
-
| params | [`DeclareTxInput`](#GraphQLClient.DeclareTxInput) |
|
|
1427
|
-
|
|
1428
1384
|
### graphQLClient.encodeDelegateTx(params) ⇒ [`Promise.<TxEncodeOutput>`](#GraphQLClient.TxEncodeOutput)
|
|
1429
1385
|
|
|
1430
1386
|
Encode a DelegateTx transaction for later use
|
|
@@ -3303,32 +3259,6 @@ Checkout the following snippet for the format of CreateTokenTx:
|
|
|
3303
3259
|
| ...foreignToken | [`ForeignToken`](#GraphQLClient.ForeignToken) |
|
|
3304
3260
|
| ...data | [`Any`](#GraphQLClient.Any) |
|
|
3305
3261
|
|
|
3306
|
-
### GraphQLClient.DeclareTx : `object`
|
|
3307
|
-
|
|
3308
|
-
Structure of GraphQLClient.DeclareTx
|
|
3309
|
-
|
|
3310
|
-
Checkout the following snippet for the format of DeclareTx:
|
|
3311
|
-
|
|
3312
|
-
```json
|
|
3313
|
-
{
|
|
3314
|
-
"moniker": "abc",
|
|
3315
|
-
"issuer": "abc",
|
|
3316
|
-
"data": {
|
|
3317
|
-
"typeUrl": "abc",
|
|
3318
|
-
"value": "abc"
|
|
3319
|
-
}
|
|
3320
|
-
}
|
|
3321
|
-
```
|
|
3322
|
-
|
|
3323
|
-
**Kind**: static typedef of [`GraphQLClient`](#GraphQLClient)\
|
|
3324
|
-
**Properties**
|
|
3325
|
-
|
|
3326
|
-
| Name | Type |
|
|
3327
|
-
| ------- | --------------------------- |
|
|
3328
|
-
| moniker | `string` |
|
|
3329
|
-
| issuer | `string` |
|
|
3330
|
-
| ...data | [`Any`](#GraphQLClient.Any) |
|
|
3331
|
-
|
|
3332
3262
|
### GraphQLClient.DelegateConfig : `object`
|
|
3333
3263
|
|
|
3334
3264
|
Structure of GraphQLClient.DelegateConfig
|
|
@@ -6663,25 +6593,6 @@ Checkout the following snippet for the format of SendTxParams:
|
|
|
6663
6593
|
| input.wallet | `object` | the wallet used to sign the transaction, either a forge managed wallet or user managed wallet |
|
|
6664
6594
|
| [input.signature] | `string` | the signature of the tx, if this parameter exist, we will not sign the transaction |
|
|
6665
6595
|
|
|
6666
|
-
### GraphQLClient.DeclareTxInput : `Object`
|
|
6667
|
-
|
|
6668
|
-
**Kind**: static typedef of [`GraphQLClient`](#GraphQLClient)\
|
|
6669
|
-
**Properties**
|
|
6670
|
-
|
|
6671
|
-
| Name | Type | Description |
|
|
6672
|
-
| --------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
6673
|
-
| input | `object` | |
|
|
6674
|
-
| input.tx | `object` | data of the transaction |
|
|
6675
|
-
| input.tx.itx | [`DeclareTx`](#GraphQLClient.DeclareTx) | the actual transaction object |
|
|
6676
|
-
| [input.tx.pk] | `string` | the sender pk |
|
|
6677
|
-
| [input.tx.from] | `string` | the sender address, can be derived from wallet |
|
|
6678
|
-
| [input.tx.nonce] | `number` | the tx nonce, defaults to Date.now if not set |
|
|
6679
|
-
| [input.tx.chainId] | `string` | the chainId |
|
|
6680
|
-
| [input.tx.signature] | `string` | transaction signature |
|
|
6681
|
-
| [input.tx.signatures] | `array` | transaction signatures, should be set when it's a multisig transaction |
|
|
6682
|
-
| input.wallet | `object` | the wallet used to sign the transaction, either a forge managed wallet or user managed wallet |
|
|
6683
|
-
| [input.signature] | `string` | the signature of the tx, if this parameter exist, we will not sign the transaction |
|
|
6684
|
-
|
|
6685
6596
|
### GraphQLClient.DelegateTxInput : `Object`
|
|
6686
6597
|
|
|
6687
6598
|
**Kind**: static typedef of [`GraphQLClient`](#GraphQLClient)\
|
package/lib/extension.js
CHANGED
|
@@ -7,7 +7,7 @@ const get = require('lodash/get');
|
|
|
7
7
|
const omit = require('lodash/omit');
|
|
8
8
|
const cloneDeep = require('lodash/cloneDeep');
|
|
9
9
|
const camelCase = require('lodash/camelCase');
|
|
10
|
-
const {
|
|
10
|
+
const { isValid } = require('@arcblock/did');
|
|
11
11
|
const { transactions, typeUrls, multiSignTxs, multiSignV2Txs } = require('@ocap/proto');
|
|
12
12
|
const { toTxHash } = require('@ocap/mcrypto');
|
|
13
13
|
const { createMessage, getMessageType, toTypeUrl } = require('@ocap/message');
|
|
@@ -501,36 +501,6 @@ const createExtensionMethods = client => {
|
|
|
501
501
|
}
|
|
502
502
|
});
|
|
503
503
|
|
|
504
|
-
/**
|
|
505
|
-
* Declare an DID and it's public key on chain
|
|
506
|
-
*
|
|
507
|
-
* @memberof GraphQLClient
|
|
508
|
-
* @function
|
|
509
|
-
* @name GraphQLClient#declare
|
|
510
|
-
* @param {object} params
|
|
511
|
-
* @param {string} params.moniker - user nickname
|
|
512
|
-
* @param {string} [params.issuer=""] - who issued the account
|
|
513
|
-
* @param {object} [params.data=undefined] - who issued the account
|
|
514
|
-
* @param {WalletObject} params.wallet - wallet to sign the tx
|
|
515
|
-
* @param {object} extra - other param to underlying client implementation
|
|
516
|
-
* @returns {Promise} the transaction hash once resolved
|
|
517
|
-
*/
|
|
518
|
-
client.declare = ({ moniker, issuer = '', data, wallet }, extra) => {
|
|
519
|
-
let itxData = data;
|
|
520
|
-
|
|
521
|
-
// If there is no data attached to the account, we can attach wallet type by default
|
|
522
|
-
if (!itxData) {
|
|
523
|
-
itxData = { typeUrl: 'json', value: toTypeInfoStr(wallet.address) };
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
return client.sendDeclareTx({
|
|
527
|
-
tx: {
|
|
528
|
-
itx: { moniker, issuer, data: itxData }
|
|
529
|
-
},
|
|
530
|
-
wallet
|
|
531
|
-
}, extra);
|
|
532
|
-
};
|
|
533
|
-
|
|
534
504
|
/**
|
|
535
505
|
* Migrate current account to a new account
|
|
536
506
|
*
|
package/lib/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extension.js"],"names":["get","require","omit","cloneDeep","camelCase","toTypeInfoStr","isValid","transactions","typeUrls","multiSignTxs","multiSignV2Txs","toTxHash","createMessage","getMessageType","toTypeUrl","bytesToHex","toBase58","toBase64","toHex","toBuffer","fromTokenToUnit","fromUnitToToken","DEFAULT_TOKEN_DECIMAL","formatFactoryState","preMintFromFactory","isValidFactory","toDelegateAddress","toAssetAddress","toFactoryAddress","toTokenAddress","toStakeAddress","toRollupAddress","debug","name","createExtensionMethods","client","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","txConfig","vaults","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","feeConfig","find","t","txObj","signature","Buffer","serviceFee","fee","txToSignBytes","serializeBinary","object","buffer","encodeMethod","__tx__","txSendFn","commit","extra","txExtra","encoded","res","sign","console","error","reject","txHash","txMsg","txBytes","txStr","hash","sendTx","JSON","stringify","err","sendMethod","_formatEncodedTx","encoding","txSignFn","signMethod","includes","txMultiSignFn","data","unshift","signer","multiSignMethod","item","s","declare","moniker","issuer","itxData","sendDeclareTx","migrateAccount","to","sendAccountMigrateTx","delegate","privileges","ops","limit","tokens","assets","txTypes","values","filter","startsWith","some","sendDelegateTx","revokeDelegate","sendRevokeDelegateTx","Boolean","toString","createAsset","parent","ttl","readonly","transferrable","display","endpoint","tags","payload","sendCreateAssetTx","updateAsset","sendUpdateAssetTx","createAssetFactory","factory","description","settlement","trustedIssuers","output","hooks","sendCreateFactoryTx","preMintAsset","inputs","owner","options","ignoreFields","factoryState","issuerState","getFactoryState","getAccountState","asset","variables","assign","entries","key","acquireAsset","sendAcquireAssetV2Tx","mintAsset","sendMintAssetTx","transfer","memo","contextToken","tmpTokens","tokensMap","sendTransferV2Tx","stake","slashers","locked","message","multiSignStakeTx","receiver","signStakeTx","sendStakeTx","revokeStake","sendRevokeStakeTx","outputs","slashStake","reason","sendSlashStakeTx","slashedStake","claimStake","evidence","sendClaimStakeTx","createRollup","props","requiredProps","tokenAddress","foreignToken","toBNStr","n","maxStakeAmount","minStakeAmount","minSignerCount","maxSignerCount","minBlockSize","maxBlockSize","minBlockInterval","minBlockConfirmation","minDepositAmount","maxDepositAmount","minWithdrawAmount","maxWithdrawAmount","depositFeeRate","withdrawFeeRate","publisherFeeShare","proposerFeeShare","minDepositFee","maxDepositFee","minWithdrawFee","maxWithdrawFee","leaveWaitingPeriod","publishWaitingPeriod","publishSlashRate","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":"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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 { toTypeInfoStr, isValid } = require('@arcblock/did');\nconst { transactions, typeUrls, multiSignTxs, multiSignV2Txs } = require('@ocap/proto');\nconst { toTxHash } = require('@ocap/mcrypto');\nconst { createMessage, getMessageType, toTypeUrl } = 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 {GraphQLClient} client\n */\nconst createExtensionMethods = (client) => {\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 vaults {\n slashedStake\n txFee\n txGas\n }\n txConfig {\n txFee {\n fee\n typeUrl\n }\n txGas {\n price\n createState\n updateState\n dataStorage\n minStake\n maxStake\n stakeLockPeriod\n }\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 txConfig: get(result, 'getForgeState.state.txConfig'),\n vaults: get(result, 'getForgeState.state.vaults'),\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 const context = await client.getContext();\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 // 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 type = itx.typeUrl || toTypeUrl(itx.type);\n const feeConfig = get(context, 'txConfig.txFee', []).find((t) => t.typeUrl === type);\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 serviceFee: feeConfig ? feeConfig.fee : '0',\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.extra] - extra params to verify the transaction, usually used for passkeys\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, extra: txExtra = '' }, extra = {}) => {\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 if (extra['x-gas-payer-sig']) {\n console.error('ERROR: \"x-gas-payer-sig\" should only exist in extra.headers');\n }\n if (extra['x-gas-payer-pk']) {\n console.error('ERROR: \"x-gas-payer-pk\" should only exist in extra.headers');\n }\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let txHash = null;\n try {\n const txMsg = createMessage('Transaction', encoded);\n const txBytes = txMsg.serializeBinary();\n const txStr = toBase64(txBytes);\n txHash = toTxHash(txBytes);\n debug(`sendTx.${x}.txObj`, txMsg.toObject());\n const { hash } = await client.sendTx(\n { tx: txStr, commit, extra: typeof txExtra === 'string' ? txExtra : JSON.stringify(txExtra) },\n extra\n );\n resolve(hash);\n } catch (err) {\n err.txHash = txHash;\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: toTypeInfoStr(wallet.address) };\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 && x.limit) {\n return x;\n }\n\n return { typeUrl: x.typeUrl, limit: x.limit || { tokens: [], assets: [] } };\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 {object} params.display - the display of the asset\n * @param {object} params.endpoint - the endpoint of the asset\n * @param {string} params.tags - the tag list of the asset\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 {\n moniker,\n parent = '',\n ttl = 0,\n data,\n readonly = false,\n transferrable = true,\n display,\n endpoint,\n tags = [],\n delegator = '',\n wallet,\n },\n extra\n ) => {\n const payload = { moniker, parent, ttl, readonly, transferrable, data, display, endpoint, tags };\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 itx.address = toFactoryAddress(itx);\n\n isValidFactory(itx, true);\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 } = await 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 if (isValid(to) === false) {\n throw new Error('Can not transfer without valid recipient');\n }\n if (!token && tokens.length === 0 && assets.length === 0) {\n throw new Error('Can not transfer without payload');\n }\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 {boolean} params.locked - is the stake locked on creation\n * @param {string[]} params.slashers - who can slash from this, default to [to]\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 (\n { assets = [], tokens = [], slashers = [], to = '', locked = false, message = '', nonce = '', wallet },\n extra\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 const from = wallet.address;\n const address = toStakeAddress(from, to, nonce);\n let tx = await client.multiSignStakeTx(\n {\n tx: {\n itx: {\n address,\n receiver: to,\n locked,\n message,\n slashers,\n nonce,\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 * Slash token or assets from some stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#slashStake\n * @param {object} params\n * @param {Array} params.assets - which assets to slash\n * @param {Array} params.tokens - which tokens to slash\n * @param {string} params.from - stake address\n * @param {string} params.reason - slash reason\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.slashStake = async ({ assets = [], tokens = [], reason, from, wallet }, extra) => {\n if (!reason) {\n throw new Error('Can not slash stake without valid reason message');\n }\n if (!from) {\n throw new Error('Can not slash stake without stake address');\n }\n\n const { vaults } = 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.sendSlashStakeTx(\n {\n tx: {\n itx: {\n address: from,\n message: reason,\n outputs: [\n {\n owner: vaults.slashedStake,\n assets,\n tokens: tmpTokens,\n },\n ],\n },\n },\n wallet,\n },\n extra\n );\n };\n\n /**\n * Claim revoked token or assets from stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#claimStake\n * @param {object} params\n * @param {string} params.from - stake address\n * @param {Array} params.evidence - which revoke tx hash to use\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 // eslint-disable-next-line require-await\n client.claimStake = async ({ from, evidence, wallet }, extra) => {\n if (!evidence) {\n throw new Error('Can not claim stake without valid evidence tx hash');\n }\n if (!from) {\n throw new Error('Can not claim stake without stake address');\n }\n\n return client.sendClaimStakeTx(\n {\n tx: {\n itx: {\n address: from,\n evidence: { hash: evidence },\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 {number} params.leaveWaitingPeriod\n * @param {number} params.publishWaitingPeriod\n * @param {number} params.publishSlashRate\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', 'vaultAddress', '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: 1 * 60, // 1 minute\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 publisherFeeShare: 6000, // 60%\n proposerFeeShare: 3000, // 30%\n // validatorFeeShare: 1000, // 10%\n minDepositFee: toBNStr(1),\n maxDepositFee: toBNStr(10000),\n minWithdrawFee: toBNStr(1),\n maxWithdrawFee: toBNStr(10000),\n leaveWaitingPeriod: 60 * 60, // 1 hour\n publishWaitingPeriod: 60 * 60, // 1 hour\n publishSlashRate: 10, // 0.1%\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/extension.js"],"names":["get","require","omit","cloneDeep","camelCase","isValid","transactions","typeUrls","multiSignTxs","multiSignV2Txs","toTxHash","createMessage","getMessageType","toTypeUrl","bytesToHex","toBase58","toBase64","toHex","toBuffer","fromTokenToUnit","fromUnitToToken","DEFAULT_TOKEN_DECIMAL","formatFactoryState","preMintFromFactory","isValidFactory","toDelegateAddress","toAssetAddress","toFactoryAddress","toTokenAddress","toStakeAddress","toRollupAddress","debug","name","createExtensionMethods","client","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","txConfig","vaults","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","feeConfig","find","t","txObj","signature","Buffer","serviceFee","fee","txToSignBytes","serializeBinary","object","buffer","encodeMethod","__tx__","txSendFn","commit","extra","txExtra","encoded","res","sign","console","error","reject","txHash","txMsg","txBytes","txStr","hash","sendTx","JSON","stringify","err","sendMethod","_formatEncodedTx","encoding","txSignFn","signMethod","includes","txMultiSignFn","data","unshift","signer","multiSignMethod","item","s","migrateAccount","to","sendAccountMigrateTx","delegate","privileges","ops","limit","tokens","assets","txTypes","values","filter","startsWith","some","sendDelegateTx","revokeDelegate","sendRevokeDelegateTx","Boolean","toString","createAsset","moniker","parent","ttl","readonly","transferrable","display","endpoint","tags","payload","sendCreateAssetTx","updateAsset","sendUpdateAssetTx","createAssetFactory","factory","description","settlement","trustedIssuers","output","hooks","sendCreateFactoryTx","preMintAsset","inputs","owner","options","ignoreFields","factoryState","issuerState","getFactoryState","getAccountState","asset","issuer","variables","assign","entries","key","acquireAsset","sendAcquireAssetV2Tx","mintAsset","sendMintAssetTx","transfer","memo","contextToken","tmpTokens","tokensMap","sendTransferV2Tx","stake","slashers","locked","message","multiSignStakeTx","receiver","signStakeTx","sendStakeTx","revokeStake","sendRevokeStakeTx","outputs","slashStake","reason","sendSlashStakeTx","slashedStake","claimStake","evidence","sendClaimStakeTx","createRollup","props","requiredProps","tokenAddress","foreignToken","toBNStr","n","maxStakeAmount","minStakeAmount","minSignerCount","maxSignerCount","minBlockSize","maxBlockSize","minBlockInterval","minBlockConfirmation","minDepositAmount","maxDepositAmount","minWithdrawAmount","maxWithdrawAmount","depositFeeRate","withdrawFeeRate","publisherFeeShare","proposerFeeShare","minDepositFee","maxDepositFee","minWithdrawFee","maxWithdrawFee","leaveWaitingPeriod","publishWaitingPeriod","publishSlashRate","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":"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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 { isValid } = require('@arcblock/did');\nconst { transactions, typeUrls, multiSignTxs, multiSignV2Txs } = require('@ocap/proto');\nconst { toTxHash } = require('@ocap/mcrypto');\nconst { createMessage, getMessageType, toTypeUrl } = 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 {GraphQLClient} client\n */\nconst createExtensionMethods = (client) => {\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 vaults {\n slashedStake\n txFee\n txGas\n }\n txConfig {\n txFee {\n fee\n typeUrl\n }\n txGas {\n price\n createState\n updateState\n dataStorage\n minStake\n maxStake\n stakeLockPeriod\n }\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 txConfig: get(result, 'getForgeState.state.txConfig'),\n vaults: get(result, 'getForgeState.state.vaults'),\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 const context = await client.getContext();\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 // 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 type = itx.typeUrl || toTypeUrl(itx.type);\n const feeConfig = get(context, 'txConfig.txFee', []).find((t) => t.typeUrl === type);\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 serviceFee: feeConfig ? feeConfig.fee : '0',\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.extra] - extra params to verify the transaction, usually used for passkeys\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, extra: txExtra = '' }, extra = {}) => {\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 if (extra['x-gas-payer-sig']) {\n console.error('ERROR: \"x-gas-payer-sig\" should only exist in extra.headers');\n }\n if (extra['x-gas-payer-pk']) {\n console.error('ERROR: \"x-gas-payer-pk\" should only exist in extra.headers');\n }\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let txHash = null;\n try {\n const txMsg = createMessage('Transaction', encoded);\n const txBytes = txMsg.serializeBinary();\n const txStr = toBase64(txBytes);\n txHash = toTxHash(txBytes);\n debug(`sendTx.${x}.txObj`, txMsg.toObject());\n const { hash } = await client.sendTx(\n { tx: txStr, commit, extra: typeof txExtra === 'string' ? txExtra : JSON.stringify(txExtra) },\n extra\n );\n resolve(hash);\n } catch (err) {\n err.txHash = txHash;\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 * 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 && x.limit) {\n return x;\n }\n\n return { typeUrl: x.typeUrl, limit: x.limit || { tokens: [], assets: [] } };\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 {object} params.display - the display of the asset\n * @param {object} params.endpoint - the endpoint of the asset\n * @param {string} params.tags - the tag list of the asset\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 {\n moniker,\n parent = '',\n ttl = 0,\n data,\n readonly = false,\n transferrable = true,\n display,\n endpoint,\n tags = [],\n delegator = '',\n wallet,\n },\n extra\n ) => {\n const payload = { moniker, parent, ttl, readonly, transferrable, data, display, endpoint, tags };\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 itx.address = toFactoryAddress(itx);\n\n isValidFactory(itx, true);\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 } = await 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 if (isValid(to) === false) {\n throw new Error('Can not transfer without valid recipient');\n }\n if (!token && tokens.length === 0 && assets.length === 0) {\n throw new Error('Can not transfer without payload');\n }\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 {boolean} params.locked - is the stake locked on creation\n * @param {string[]} params.slashers - who can slash from this, default to [to]\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 (\n { assets = [], tokens = [], slashers = [], to = '', locked = false, message = '', nonce = '', wallet },\n extra\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 const from = wallet.address;\n const address = toStakeAddress(from, to, nonce);\n let tx = await client.multiSignStakeTx(\n {\n tx: {\n itx: {\n address,\n receiver: to,\n locked,\n message,\n slashers,\n nonce,\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 * Slash token or assets from some stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#slashStake\n * @param {object} params\n * @param {Array} params.assets - which assets to slash\n * @param {Array} params.tokens - which tokens to slash\n * @param {string} params.from - stake address\n * @param {string} params.reason - slash reason\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.slashStake = async ({ assets = [], tokens = [], reason, from, wallet }, extra) => {\n if (!reason) {\n throw new Error('Can not slash stake without valid reason message');\n }\n if (!from) {\n throw new Error('Can not slash stake without stake address');\n }\n\n const { vaults } = 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.sendSlashStakeTx(\n {\n tx: {\n itx: {\n address: from,\n message: reason,\n outputs: [\n {\n owner: vaults.slashedStake,\n assets,\n tokens: tmpTokens,\n },\n ],\n },\n },\n wallet,\n },\n extra\n );\n };\n\n /**\n * Claim revoked token or assets from stake\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#claimStake\n * @param {object} params\n * @param {string} params.from - stake address\n * @param {Array} params.evidence - which revoke tx hash to use\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 // eslint-disable-next-line require-await\n client.claimStake = async ({ from, evidence, wallet }, extra) => {\n if (!evidence) {\n throw new Error('Can not claim stake without valid evidence tx hash');\n }\n if (!from) {\n throw new Error('Can not claim stake without stake address');\n }\n\n return client.sendClaimStakeTx(\n {\n tx: {\n itx: {\n address: from,\n evidence: { hash: evidence },\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 {number} params.leaveWaitingPeriod\n * @param {number} params.publishWaitingPeriod\n * @param {number} params.publishSlashRate\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', 'vaultAddress', '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: 1 * 60, // 1 minute\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 publisherFeeShare: 6000, // 60%\n proposerFeeShare: 3000, // 30%\n // validatorFeeShare: 1000, // 10%\n minDepositFee: toBNStr(1),\n maxDepositFee: toBNStr(10000),\n minWithdrawFee: toBNStr(1),\n maxWithdrawFee: toBNStr(10000),\n leaveWaitingPeriod: 60 * 60, // 1 hour\n publishWaitingPeriod: 60 * 60, // 1 hour\n publishSlashRate: 10, // 0.1%\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/methods.js
CHANGED
|
@@ -77,21 +77,6 @@
|
|
|
77
77
|
* @returns {object} transaction object
|
|
78
78
|
*/
|
|
79
79
|
|
|
80
|
-
/**
|
|
81
|
-
* Declare an DID and it's public key on chain
|
|
82
|
-
*
|
|
83
|
-
* @memberof GraphQLClient
|
|
84
|
-
* @function
|
|
85
|
-
* @name GraphQLClient#declare
|
|
86
|
-
* @param {object} params
|
|
87
|
-
* @param {string} params.moniker - user nickname
|
|
88
|
-
* @param {string} [params.issuer=""] - who issued the account
|
|
89
|
-
* @param {object} [params.data=undefined] - who issued the account
|
|
90
|
-
* @param {WalletObject} params.wallet - wallet to sign the tx
|
|
91
|
-
* @param {object} extra - other param to underlying client implementation
|
|
92
|
-
* @returns {Promise} the transaction hash once resolved
|
|
93
|
-
*/
|
|
94
|
-
|
|
95
80
|
/**
|
|
96
81
|
* Migrate current account to a new account
|
|
97
82
|
*
|
package/lib/methods.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/methods.js"],"names":[],"mappings":"AAAA;;AAEA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;;;;;;AAeA;;;;;;;;;;;;;AAaA;;;;;;;;;;;;;;;AAeA;;;;;;;;;;;;;;AAcA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;AAwBA;;;;;;;;;;;;;;;;;;AAkBA;;;;;;;;;;;;;;;;;AAiBA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;AAeA","file":"methods.js","sourcesContent":["// This file is generated automatically, do not edit\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\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\n/**\n * List all transaction send methods\n * Each method can send one kind of transactions supported by forge core, such as `DeclareTx`, `PokeTx`\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxSendMethods\n * @returns {Array<string>} method name list\n */\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\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\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\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\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\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\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\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\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\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\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 {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\n/**\n * Create an asset factory that can be used to produce multiple assets in a transaction\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createAssetFactory\n * @param {object} params\n * @param {string} params.moniker - asset name\n * @param {object} params.factory - asset factory attributes\n * @param {string} params.factory.description - asset factory name\n * @param {number} params.factory.limit - how many assets can be generated from this factory\n * @param {price} params.factory.price - how much should charge user when acquire asset\n * @param {string} params.factory.template - mustache compatible\n * @param {Array} params.factory.templateVariables - list of allowed template variables\n * @param {string} params.factory.assetName - protobuf type known to forge that can be used to create this asset\n * @param {string} params.factory.attributes - attributes for assets that are generated from this factory\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, factoryAddress]` once resolved\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 {string} params.assetFactory - Asset factory address\n * @param {Array} params.assetVariables - list of asset variables that can be populated into asset factory template\n * @param {boolean} params.readonly - whether the asset can be updated after creation, should match factory settings\n * @param {boolean} params.transferrable - whether the asset can be transferred to another account, should match factory settings\n * @param {number} params.ttl - asset expire\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\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\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\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\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/methods.js"],"names":[],"mappings":"AAAA;;AAEA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;;AAUA;;;;;;;;;;AAUA;;;;;;;;;;;;;AAaA;;;;;;;;;;;;;;;AAeA;;;;;;;;;;;;;;AAcA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;AAwBA;;;;;;;;;;;;;;;;;;AAkBA;;;;;;;;;;;;;;;;;AAiBA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;AAeA","file":"methods.js","sourcesContent":["// This file is generated automatically, do not edit\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\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\n/**\n * List all transaction send methods\n * Each method can send one kind of transactions supported by forge core, such as `DeclareTx`, `PokeTx`\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#getTxSendMethods\n * @returns {Array<string>} method name list\n */\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\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\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\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\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\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\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\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\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\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 {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\n/**\n * Create an asset factory that can be used to produce multiple assets in a transaction\n *\n * @memberof GraphQLClient\n * @function\n * @name GraphQLClient#createAssetFactory\n * @param {object} params\n * @param {string} params.moniker - asset name\n * @param {object} params.factory - asset factory attributes\n * @param {string} params.factory.description - asset factory name\n * @param {number} params.factory.limit - how many assets can be generated from this factory\n * @param {price} params.factory.price - how much should charge user when acquire asset\n * @param {string} params.factory.template - mustache compatible\n * @param {Array} params.factory.templateVariables - list of allowed template variables\n * @param {string} params.factory.assetName - protobuf type known to forge that can be used to create this asset\n * @param {string} params.factory.attributes - attributes for assets that are generated from this factory\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, factoryAddress]` once resolved\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 {string} params.assetFactory - Asset factory address\n * @param {Array} params.assetVariables - list of asset variables that can be populated into asset factory template\n * @param {boolean} params.readonly - whether the asset can be updated after creation, should match factory settings\n * @param {boolean} params.transferrable - whether the asset can be transferred to another account, should match factory settings\n * @param {number} params.ttl - asset expire\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\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\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\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\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ocap/client",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.8",
|
|
4
4
|
"description": "graphql client to read/write data on arcblock blockchain",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"graphql",
|
|
@@ -30,17 +30,17 @@
|
|
|
30
30
|
"lib"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@arcblock/did": "1.19.
|
|
34
|
-
"@arcblock/did-util": "1.19.
|
|
35
|
-
"@arcblock/jwt": "1.19.
|
|
33
|
+
"@arcblock/did": "1.19.8",
|
|
34
|
+
"@arcblock/did-util": "1.19.8",
|
|
35
|
+
"@arcblock/jwt": "1.19.8",
|
|
36
36
|
"@arcblock/sdk-util": "^0.34.4",
|
|
37
|
-
"@arcblock/ws": "1.19.
|
|
38
|
-
"@ocap/asset": "1.19.
|
|
39
|
-
"@ocap/mcrypto": "1.19.
|
|
40
|
-
"@ocap/message": "1.19.
|
|
41
|
-
"@ocap/proto": "1.19.
|
|
42
|
-
"@ocap/util": "1.19.
|
|
43
|
-
"@ocap/wallet": "1.19.
|
|
37
|
+
"@arcblock/ws": "1.19.8",
|
|
38
|
+
"@ocap/asset": "1.19.8",
|
|
39
|
+
"@ocap/mcrypto": "1.19.8",
|
|
40
|
+
"@ocap/message": "1.19.8",
|
|
41
|
+
"@ocap/proto": "1.19.8",
|
|
42
|
+
"@ocap/util": "1.19.8",
|
|
43
|
+
"@ocap/wallet": "1.19.8",
|
|
44
44
|
"blueimp-md5": "^2.19.0",
|
|
45
45
|
"buffer": "6.0.3",
|
|
46
46
|
"debug": "^4.3.6",
|
|
@@ -109,5 +109,5 @@
|
|
|
109
109
|
"bugs": {
|
|
110
110
|
"url": "https://github.com/ArcBlock/blockchain/issues"
|
|
111
111
|
},
|
|
112
|
-
"gitHead": "
|
|
112
|
+
"gitHead": "c64c55f04a40357501cc3ecf4e5e7531aee15ffe"
|
|
113
113
|
}
|