UNPKG

@radixdlt/application

Version:

A JavaScript client library for interacting with the Radix Distributed Ledger.

599 lines 28.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mockedAPI = exports.mockRadixCoreAPI = exports.makeThrowingRadixCoreAPI = exports.deterministicRandomStakesForAddr = exports.deterministicRandomUnstakesForAddr = exports.deterministicRandomLookupTX = exports.deterministicRandomTXHistory = exports.deterministicRandomBalances = exports.deterministicRandomTxHistoryWithInput = exports.deterministicRandomStakesForAddress = exports.deterministicRandomUnstakesForAddress = exports.deterministicRandomBalancesForAddress = exports.erin = exports.dan = exports.carol = exports.bob = exports.alice = exports.castOfCharacters = exports.tokenByRRIMap = exports.balancesFor = exports.balanceOfFor = exports.__fallBackAlexToken = exports.radixWrappedEtherToken = exports.radixWrappedBitcoinToken = exports.goldToken = exports.barToken = exports.fooToken = exports.xrd = void 0; const primitives_1 = require("@radixdlt/primitives"); const account_1 = require("@radixdlt/account"); const rxjs_1 = require("rxjs"); const dto_1 = require("./dto"); const operators_1 = require("rxjs/operators"); const crypto_1 = require("@radixdlt/crypto"); const actions_1 = require("./actions"); const primitives_2 = require("@radixdlt/primitives"); exports.xrd = { name: 'Rad', rri: account_1.ResourceIdentifier.fromUnsafe('xrd_tr1qyf0x76s')._unsafeUnwrap(), symbol: 'XRD', description: 'The native coin of Radix network', granularity: primitives_2.Amount.fromUnsafe(1)._unsafeUnwrap(), isSupplyMutable: false, currentSupply: primitives_1.uint256Max, tokenInfoURL: new URL('https://www.radixdlt.com'), iconURL: new URL('https://www.image.radixdlt.com/'), }; exports.fooToken = { name: 'Foo token', rri: account_1.ResourceIdentifier.fromUnsafe('xrd_tr1qyf0x76s')._unsafeUnwrap(), symbol: 'FOO', description: 'FOOest token.', granularity: primitives_2.Amount.fromUnsafe(1)._unsafeUnwrap(), isSupplyMutable: false, currentSupply: primitives_1.uint256Max, tokenInfoURL: new URL('https://www.footoken.com'), iconURL: new URL('https://www.image.footoken.com/'), }; exports.barToken = { name: 'Bar token', rri: account_1.ResourceIdentifier.fromUnsafe('xrd_tr1qyf0x76s')._unsafeUnwrap(), symbol: 'BAR', description: 'Bar token. Granularity E-3.', granularity: primitives_2.Amount.fromUnsafe(1000)._unsafeUnwrap(), isSupplyMutable: true, currentSupply: primitives_1.uint256Max, tokenInfoURL: new URL('https://www.bartoken.com'), iconURL: new URL('https://www.image.bartoken.com/'), }; exports.goldToken = { name: 'Gold token', rri: account_1.ResourceIdentifier.fromUnsafe('xrd_tr1qyf0x76s')._unsafeUnwrap(), symbol: 'GOLD', description: 'Gold token. Granularity E-12.', granularity: primitives_2.Amount.fromUnsafe(1000000)._unsafeUnwrap(), isSupplyMutable: false, currentSupply: primitives_1.uint256Max, tokenInfoURL: new URL('https://www.goldtoken.com'), iconURL: new URL('https://www.image.goldtoken.com/'), }; exports.radixWrappedBitcoinToken = { name: 'Bitcoin (wrapped on Radix)', rri: account_1.ResourceIdentifier.fromUnsafe('xrd_tr1qyf0x76s')._unsafeUnwrap(), symbol: 'BTCRW', description: 'Radix wrapped Bitcoin. Granularity E-18.', granularity: primitives_2.Amount.fromUnsafe(1)._unsafeUnwrap(), isSupplyMutable: true, currentSupply: primitives_1.uint256Max, tokenInfoURL: new URL('https://www.bitcoin.radix.com'), iconURL: new URL('https://www.image.bitcoin.radix.com/'), }; exports.radixWrappedEtherToken = { name: 'Ether (wrapped on Radix)', rri: account_1.ResourceIdentifier.fromUnsafe('xrd_tr1qyf0x76s')._unsafeUnwrap(), symbol: 'ETHRW', description: 'Radix wrapped Ether. Granularity E-9.', granularity: primitives_2.Amount.fromUnsafe(1000000000)._unsafeUnwrap(), isSupplyMutable: true, currentSupply: primitives_1.uint256Max, tokenInfoURL: new URL('https://www.ether.radix.com'), iconURL: new URL('https://www.image.ether.radix.com/'), }; exports.__fallBackAlexToken = { name: 'Alex token', rri: account_1.ResourceIdentifier.fromUnsafe('xrd_tr1qyf0x76s')._unsafeUnwrap(), symbol: 'ALEX', description: 'Fallback token for when token for requested symbol was not found.', granularity: primitives_2.Amount.fromUnsafe(1)._unsafeUnwrap(), isSupplyMutable: true, currentSupply: primitives_1.uint256Max, tokenInfoURL: new URL('https://www.alex.token.com'), iconURL: new URL('https://www.image.alex.token.com/'), }; const balanceOfFor = (input) => { const amt = primitives_2.Amount.fromUnsafe(input.amount)._unsafeUnwrap(); return { tokenIdentifier: input.token.rri, amount: amt.lt(input.token.currentSupply) ? amt : input.token.currentSupply, }; }; exports.balanceOfFor = balanceOfFor; const balancesFor = (address, amount) => ({ owner: address, tokenBalances: [ (0, exports.balanceOfFor)({ token: exports.xrd, amount, }), ], }); exports.balancesFor = balancesFor; const differentTokens = [ exports.xrd, exports.fooToken, exports.barToken, exports.radixWrappedBitcoinToken, exports.radixWrappedEtherToken, exports.goldToken, ]; // PLEASE KEEP - used as Cast of characters: https://en.wikipedia.org/wiki/Alice_and_Bob#Cast_of_characters exports.tokenByRRIMap = differentTokens.reduce((a, b) => a.set(b.rri, b), new Map()); const detPRNGWithBuffer = (buffer) => { const bufCopy = Buffer.from(buffer); let bytes = Buffer.from(buffer); return () => { if (bytes.length === 0) { bytes = (0, crypto_1.sha256)(bufCopy); } const lengthToSlice = 2; const buf = bytes.slice(0, lengthToSlice); bytes = bytes.slice(lengthToSlice, bytes.length); return Number.parseInt(buf.toString('hex'), 16); }; }; const addressesString = [ 'tdx1qspksqs77z9e24e2dr9t5de6a9kymzhszp9k7jmr2ldkzl4hvn45xsqk409dt', 'tdx1qspksqs77z9e24e2dr9t5de6a9kymzhszp9k7jmr2ldkzl4hvn45xsqk409dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', 'rdx1qsps28kdn4epn0c9ej2rcmwfz5a4jdhq2ez03x7h6jefvr4fnwnrtqqjaj7dt', ]; const characterNames = [ 'alice', 'bob', 'carol', 'dan', 'erin', 'frank', 'grace', 'heidi', 'ivan', 'judy', 'klara', 'leonard', 'mallory', 'niaj', 'olivia', 'peggy', 'quentin', 'rupert', 'stella', 'ted', 'ursula', 'victor', 'webdy', 'xerxez', 'yara', 'zelda', ]; /* * [Property in keyof ReturnType<typeof getAPI>]: ReturnType< typeof getAPI >[Property] * */ exports.castOfCharacters = addressesString .map(s => account_1.AccountAddress.fromUnsafe(s)._unsafeUnwrap({ withStackTrace: true })) .slice(0, characterNames.length); exports.alice = exports.castOfCharacters[0]; exports.bob = exports.castOfCharacters[1]; exports.carol = exports.castOfCharacters[2]; exports.dan = exports.castOfCharacters[3]; exports.erin = exports.castOfCharacters[4]; const makeListOfValidatorAddresses = () => { const stringAddresses = [ 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', 'tv1qdqft0u899axwce955fkh9rundr5s2sgvhpp8wzfe3ty0rn0rgqj2x6y86p', ]; return stringAddresses.map(s => account_1.ValidatorAddress.fromUnsafe(s)._unsafeUnwrap({ withStackTrace: true })); }; const listOfValidatorAddresses = makeListOfValidatorAddresses(); const detRandomValidatorAddressWithPRNG = (anInt) => () => { const randomInt = anInt(); const index = randomInt % (listOfValidatorAddresses.length - 1); return listOfValidatorAddresses[index]; }; const randomValidatorList = (size, validatorAddress) => { const validatorList = []; const randomBuf = validatorAddress !== undefined ? (0, crypto_1.sha256)(validatorAddress.toString()) : (0, crypto_1.sha256)(size.toString(16)); const prng = detPRNGWithBuffer(randomBuf); const detRandomValidatorAddress = detRandomValidatorAddressWithPRNG(prng); const listSize = prng() % 5 === 1 ? size - Math.round(size / 2) : size; for (let i = 0; i < listSize; i++) { const random = prng(); const ownerAddress = exports.castOfCharacters[random % exports.castOfCharacters.length]; const name = characterNames[random % characterNames.length]; const amount = primitives_2.Amount.fromUnsafe(random)._unsafeUnwrap(); const bool = random % 2 === 0; validatorList.push({ address: detRandomValidatorAddress(), ownerAddress, name, infoURL: new URL('https://rewards.radixtokens.comcom'), totalDelegatedStake: amount, ownerDelegation: amount, validatorFee: 2.5, registered: bool, isExternalStakeAccepted: bool, uptimePercentage: 100.0, proposalsMissed: 10, proposalsCompleted: 20, }); } return validatorList; }; const randomUnsignedTransaction = (transactionIntent) => { const transactionIntentDet = Object.assign(Object.assign({}, transactionIntent), { actions: transactionIntent.actions.map(a => (Object.assign({}, a))) }); const detBlob = JSON.stringify(transactionIntentDet, null, 4); const blobBytes = Buffer.from(detBlob); const bytes32 = (0, crypto_1.sha256)(blobBytes); const anInt = detPRNGWithBuffer(bytes32); return { transaction: { blob: blobBytes.toString('hex'), hashOfBlobToSign: bytes32.toString('hex'), }, fee: primitives_2.Amount.fromUnsafe(anInt())._unsafeUnwrap(), }; }; const randomPendingTransaction = (signedTx) => ({ txID: dto_1.TransactionIdentifier.create((0, crypto_1.sha256)(Buffer.from(signedTx.transaction.blob)))._unsafeUnwrap(), blob: 'awd', }); const detRandomSignedUnconfirmedTransaction = (signedTransaction) => (Object.assign({}, randomPendingTransaction(signedTransaction))); const rndDemand = detPRNGWithBuffer(Buffer.from('dmnd')); const randomDemand = () => ({ tps: rndDemand() % 200, }); const rndThroughput = detPRNGWithBuffer(Buffer.from('trpt')); const randomThroughput = () => ({ tps: rndThroughput() % 200, }); const detPRNGWithPubKey = (pubKey) => { // cannot use first, since it is always 02 or 03 const bytes = pubKey.asData({ compressed: true }).slice(1, 33); return detPRNGWithBuffer(bytes); }; const detRandBalanceOfTokenWithInfo = (png) => { const anInt = png; const availableTokens = [...differentTokens]; const deterministicRandomToken = () => { const tokenCount = availableTokens.length; const tokenIndex = anInt() % tokenCount; const token = availableTokens[tokenIndex]; availableTokens.splice(tokenIndex, 1); return token; }; const size = Math.max(anInt() % availableTokens.length, 1); return Array(size) .fill(undefined) .map((_) => { const token = deterministicRandomToken(); const amtOrZero = anInt() % 10000; const amtFactor = primitives_2.Amount.fromUnsafe(Math.max(10, amtOrZero))._unsafeUnwrap(); const amount = primitives_2.Amount.fromUnsafe(token.granularity.mul(amtFactor))._unsafeUnwrap(); return { token, amount, }; }); }; const deterministicRandomBalancesForAddress = (address) => { const anInt = detPRNGWithPubKey(address.publicKey); const tokenBalances = detRandBalanceOfTokenWithInfo(anInt).map(bti => (0, exports.balanceOfFor)(bti)); return { owner: address, tokenBalances, }; }; exports.deterministicRandomBalancesForAddress = deterministicRandomBalancesForAddress; const deterministicRandomUnstakesForAddress = (address) => { const anInt = detPRNGWithPubKey(address.publicKey); const size = anInt() % 7; return Array(size) .fill(undefined) .map((_, index) => { const detRandomValidatorAddress = detRandomValidatorAddressWithPRNG(anInt); const validator = detRandomValidatorAddress(); const amount = primitives_2.Amount.fromUnsafe(anInt())._unsafeUnwrap(); const bytesFromIndex = Buffer.allocUnsafe(2); bytesFromIndex.writeUInt16BE(index); const txIDBuffer = (0, crypto_1.sha256)(Buffer.concat([ address.publicKey.asData({ compressed: true }), bytesFromIndex, ])); const withdrawTxID = dto_1.TransactionIdentifier.create(txIDBuffer)._unsafeUnwrap(); const epochsUntil = anInt() % 5; return { amount, validator, epochsUntil: epochsUntil > 60 ? 0 : epochsUntil, withdrawTxID, }; }); }; exports.deterministicRandomUnstakesForAddress = deterministicRandomUnstakesForAddress; const deterministicRandomStakesForAddress = (address) => (0, exports.deterministicRandomUnstakesForAddress)(address).map((un) => (Object.assign({}, un))); exports.deterministicRandomStakesForAddress = deterministicRandomStakesForAddress; const deterministicRandomTxHistoryWithInput = (input) => { const address = input.address; const anInt = detPRNGWithPubKey(address.publicKey); const pubKeyBytes = address.publicKey .asData({ compressed: true }) .slice(1, 33); const detRandomAddress = () => exports.castOfCharacters[anInt() % exports.castOfCharacters.length]; const detRandomValidatorAddress = detRandomValidatorAddressWithPRNG(anInt); const tokenAndAmounts = detRandBalanceOfTokenWithInfo(anInt); const deterministicRandomExecutedTransactions = () => Array(input.size) .fill(undefined) .map((_, index) => { const bytesFromIndex = Buffer.allocUnsafe(2); bytesFromIndex.writeUInt16BE(index); const txIDBuffer = (0, crypto_1.sha256)(Buffer.concat([pubKeyBytes, bytesFromIndex])); const date = new Date('2020-03-14T15:32:05'); date.setMonth(index % 12); const txID = dto_1.TransactionIdentifier.create(txIDBuffer)._unsafeUnwrap(); const detMakeActionForTx = () => { // mock max 5 actions per tx in history, min 1. const actionCount = Math.max(anInt() % 5, 1); return Array(actionCount) .fill(undefined) .map((_, actionIndex) => { const v = anInt() % 4; // Transfer, Stake, Unstake, Other const actionType = v === 0 ? actions_1.ActionType.TOKEN_TRANSFER : v === 1 ? actions_1.ActionType.STAKE_TOKENS : v === 2 ? actions_1.ActionType.UNSTAKE_TOKENS : actions_1.ActionType.OTHER; let executedAction; const tokenAndAmount = tokenAndAmounts[actionIndex % tokenAndAmounts.length]; switch (actionType) { case actions_1.ActionType.OTHER: executedAction = { type: actions_1.ActionType.OTHER, }; break; case actions_1.ActionType.STAKE_TOKENS: executedAction = { type: actions_1.ActionType.STAKE_TOKENS, from: address, amount: primitives_2.Amount.fromUnsafe(anInt())._unsafeUnwrap(), validator: detRandomValidatorAddress(), }; break; case actions_1.ActionType.UNSTAKE_TOKENS: executedAction = { type: actions_1.ActionType.UNSTAKE_TOKENS, from: address, amount: primitives_2.Amount.fromUnsafe(anInt())._unsafeUnwrap(), validator: detRandomValidatorAddress(), }; break; case actions_1.ActionType.TOKEN_TRANSFER: executedAction = { type: actions_1.ActionType.TOKEN_TRANSFER, from_account: address.toString(), to_account: detRandomAddress().toString(), amount: tokenAndAmount.amount, rri: tokenAndAmount.token.rri, }; break; } return executedAction; }); }; const rndTxTypeInt = anInt() % 3; const transactionType = rndTxTypeInt === 0 ? dto_1.TransactionType.INCOMING : rndTxTypeInt === 1 ? dto_1.TransactionType.FROM_ME_TO_ME : dto_1.TransactionType.OUTGOING; return { txID, sentAt: date, transactionType, fee: primitives_2.Amount.fromUnsafe(anInt())._unsafeUnwrap(), // message?: { // msg: string // encryptionScheme: string // } actions: detMakeActionForTx(), }; }); const updatedCursor = (0, crypto_1.sha256)(input.cursor !== undefined ? Buffer.from(input.cursor) : pubKeyBytes).toString('hex'); return { cursor: updatedCursor, transactions: deterministicRandomExecutedTransactions(), }; }; exports.deterministicRandomTxHistoryWithInput = deterministicRandomTxHistoryWithInput; const deterministicRandomLookupTXUsingHist = (txID) => { const seed = (0, crypto_1.sha256)(Buffer.from(txID.__hex, 'hex')); const addressWithTXIdBytesAsSeed = account_1.AccountAddress.fromPublicKeyAndNetwork({ publicKey: crypto_1.PrivateKey.fromBuffer(seed)._unsafeUnwrap().publicKey(), network: primitives_1.Network.MAINNET, }); const txs = (0, exports.deterministicRandomTxHistoryWithInput)({ size: 1, address: addressWithTXIdBytesAsSeed, }).transactions; if (txs.length === 0) { throw new Error('Expected at least one tx...'); } return Object.assign(Object.assign({}, txs[0]), { txID }); }; const deterministicRandomBalances = (address) => (0, rxjs_1.of)((0, exports.deterministicRandomBalancesForAddress)(address)); exports.deterministicRandomBalances = deterministicRandomBalances; const deterministicRandomTXHistory = (input) => (0, rxjs_1.of)((0, exports.deterministicRandomTxHistoryWithInput)(input)); exports.deterministicRandomTXHistory = deterministicRandomTXHistory; const deterministicRandomLookupTX = (txID) => (0, rxjs_1.of)(deterministicRandomLookupTXUsingHist(txID)); exports.deterministicRandomLookupTX = deterministicRandomLookupTX; const deterministicRandomUnstakesForAddr = (address) => (0, rxjs_1.of)((0, exports.deterministicRandomUnstakesForAddress)(address)); exports.deterministicRandomUnstakesForAddr = deterministicRandomUnstakesForAddr; const deterministicRandomStakesForAddr = (address) => (0, rxjs_1.of)((0, exports.deterministicRandomStakesForAddress)(address)); exports.deterministicRandomStakesForAddr = deterministicRandomStakesForAddr; const makeThrowingRadixCoreAPI = (nodeUrl) => ({ node: { url: new URL(nodeUrl !== null && nodeUrl !== void 0 ? nodeUrl : 'https://www.radixdlt.com/') }, networkId: () => { throw Error('Not implemented'); }, tokenBalancesForAddress: (_address) => { throw Error('Not implemented'); }, lookupTransaction: (_txID) => { throw Error('Not implemented'); }, validators: (_input) => { throw Error('Not implemented'); }, lookupValidator: (_input) => { throw Error('Not implemented'); }, transactionHistory: (_input) => { throw Error('Not implemented'); }, nativeToken: () => { throw Error('Not implemented'); }, tokenInfo: (_rri) => { throw Error('Not implemented'); }, stakesForAddress: (_address) => { throw Error('Not implemented'); }, unstakesForAddress: (_address) => { throw Error('Not implemented'); }, transactionStatus: (_txID) => { throw Error('Not implemented'); }, NetworkTransactionThroughput: () => { throw Error('Not implemented'); }, NetworkTransactionDemand: () => { throw Error('Not implemented'); }, buildTransaction: (_transactionIntent) => { throw Error('Not implemented'); }, submitSignedTransaction: (_signedTransaction) => { throw Error('Not implemented'); }, finalizeTransaction: (_signedUnconfirmedTransaction) => { throw Error('Not implemented'); }, }); exports.makeThrowingRadixCoreAPI = makeThrowingRadixCoreAPI; let txStatusMapCounter = undefined; const mockRadixCoreAPI = (input) => { var _a; txStatusMapCounter = new Map(); return { node: { url: new URL((_a = input === null || input === void 0 ? void 0 : input.nodeUrl) !== null && _a !== void 0 ? _a : 'https://www.radixdlt.com/') }, networkId: () => { var _a; return (0, rxjs_1.of)((_a = input === null || input === void 0 ? void 0 : input.network) !== null && _a !== void 0 ? _a : primitives_1.Network.MAINNET).pipe((0, operators_1.shareReplay)(1)); }, nativeToken: () => (0, rxjs_1.of)(exports.xrd), tokenInfo: (rri) => { var _a; return (0, rxjs_1.of)((_a = exports.tokenByRRIMap.get(rri)) !== null && _a !== void 0 ? _a : exports.__fallBackAlexToken); }, tokenBalancesForAddress: exports.deterministicRandomBalances, transactionStatus: (txID) => { var _a; const last = (_a = txStatusMapCounter.get(txID)) !== null && _a !== void 0 ? _a : 0; const incremented = last + 1; txStatusMapCounter.set(txID, incremented); const status = last <= 1 ? dto_1.TransactionStatus.PENDING : dto_1.TransactionStatus.CONFIRMED; return (0, rxjs_1.of)({ txID, status, // when TransactionStatus.FAIL ? }); }, validators: (input) => (0, rxjs_1.of)({ cursor: 'cursor', validators: randomValidatorList(input.size), }), lookupValidator: (validatorAddress) => { const validatorRnd = randomValidatorList(1, validatorAddress)[0]; const validator = Object.assign(Object.assign({}, validatorRnd), { address: validatorAddress }); return (0, rxjs_1.of)(validator); }, buildTransaction: (transactionIntent) => (0, rxjs_1.of)(randomUnsignedTransaction(transactionIntent)), finalizeTransaction: (signedTransaction) => (0, rxjs_1.of)(detRandomSignedUnconfirmedTransaction(signedTransaction)), submitSignedTransaction: (signedUnconfirmedTX) => (0, rxjs_1.of)(signedUnconfirmedTX), NetworkTransactionDemand: () => (0, rxjs_1.of)(randomDemand()), NetworkTransactionThroughput: () => (0, rxjs_1.of)(randomThroughput()), transactionHistory: exports.deterministicRandomTXHistory, lookupTransaction: exports.deterministicRandomLookupTX, unstakesForAddress: exports.deterministicRandomUnstakesForAddr, stakesForAddress: exports.deterministicRandomStakesForAddr, }; }; exports.mockRadixCoreAPI = mockRadixCoreAPI; exports.mockedAPI = (0, rxjs_1.of)((0, exports.mockRadixCoreAPI)()); //# sourceMappingURL=mockRadix.js.map